File size: 5,316 Bytes
a9842d5 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | #!/usr/bin/env bash
# Shadowclaw Startup Script v3.2+ (Fixed)
# Location: /home/kali/shadowclaw-v2/start.sh
set -e
# ---------- Configuration ----------
PROGRAM_NAME="shadowclaw"
PROGRAM_PATH="./$PROGRAM_NAME"
STATE_FILE="shadowclaw.bin"
DATA_DIR="shadowclaw_data"
SOUL_FILE="$DATA_DIR/shadowsoul.md"
# Ollama settings (can be overridden by environment)
OLLAMA_ENDPOINT="${OLLAMA_ENDPOINT:-http://localhost:11434}"
OLLAMA_MODEL="${OLLAMA_MODEL:-qwen2.5:0.5b}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m' # No Color
# ---------- Helper Functions ----------
print_status() { echo -e "${CYAN}[*]${NC} $1"; }
print_success() { echo -e "${GREEN}[β]${NC} $1"; }
print_warning() { echo -e "${YELLOW}[!]${NC} $1"; }
print_error() { echo -e "${RED}[β]${NC} $1"; }
# ---------- Environment Variables for Timeouts ----------
export SHADOWCLAW_CONNECT_TIMEOUT="${SHADOWCLAW_CONNECT_TIMEOUT:-15}"
export SHADOWCLAW_TOTAL_TIMEOUT="${SHADOWCLAW_TOTAL_TIMEOUT:-180}"
export SHADOWCLAW_RETRY_ATTEMPTS="${SHADOWCLAW_RETRY_ATTEMPTS:-5}"
print_status "Timeout settings: connect=${SHADOWCLAW_CONNECT_TIMEOUT}s, total=${SHADOWCLAW_TOTAL_TIMEOUT}s, retries=${SHADOWCLAW_RETRY_ATTEMPTS}"
# ---------- Dependency Checks ----------
print_status "Checking dependencies..."
if ! command -v curl &> /dev/null; then
print_error "curl not found. Please install curl (sudo apt install curl)."
exit 1
fi
# ---------- Ollama Availability & Model Check ----------
NO_LLM_MODE=0
FORCE_LLM=0
for arg in "$@"; do
if [ "$arg" = "--force-llm" ]; then
FORCE_LLM=1
fi
done
check_ollama() {
if ! curl -s --max-time 2 "$OLLAMA_ENDPOINT/api/tags" > /dev/null 2>&1; then
return 1
fi
if ! curl -s "$OLLAMA_ENDPOINT/api/tags" 2>/dev/null | grep -q "\"name\":\"$OLLAMA_MODEL\""; then
return 2
fi
return 0
}
if [ $FORCE_LLM -eq 1 ]; then
print_warning "--force-llm flag set: will attempt to use LLM even if checks fail."
NO_LLM_MODE=0
else
check_ollama
case $? in
0)
print_success "Ollama is reachable and model '$OLLAMA_MODEL' is available."
;;
1)
print_warning "Ollama not reachable at $OLLAMA_ENDPOINT. Auto-enabling --no-llm mode."
NO_LLM_MODE=1
;;
2)
print_warning "Model '$OLLAMA_MODEL' not found in Ollama. Auto-enabling --no-llm mode."
print_status "Pull it with: ollama pull $OLLAMA_MODEL"
NO_LLM_MODE=1
;;
esac
fi
# ---------- Binary Existence & Permissions ----------
cd "$(dirname "$0")" || { print_error "Failed to change to script directory."; exit 1; }
if [ ! -f "$PROGRAM_PATH" ]; then
print_error "Binary '$PROGRAM_NAME' not found in current directory."
print_status "Compiling Shadowclaw..."
if [ -f "shadowclaw.c" ] && [ -f "interpreter.c" ] && [ -f "cJSON.c" ]; then
make clean 2>/dev/null || true
if make; then
print_success "Compilation successful."
else
print_error "Compilation failed. Check dependencies (libcurl, libpthread, readline)."
exit 1
fi
else
print_error "Source files missing. Please ensure shadowclaw.c, interpreter.c, cJSON.c are present."
exit 1
fi
fi
if [ ! -x "$PROGRAM_PATH" ]; then
print_warning "Binary not executable. Fixing permissions..."
chmod +x "$PROGRAM_PATH"
fi
# ---------- Environment Setup ----------
if [ ! -d "$DATA_DIR" ]; then
mkdir -p "$DATA_DIR"
print_success "Created data directory: $DATA_DIR"
fi
# ---------- Display Information (Full ASCII Banner) ----------
clear
echo -e "${BOLD}ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}"
echo -e "${BOLD}β ____ _ _ _ β${NC}"
echo -e "${BOLD}β / ___|| |__ __ _ __| | _____ _____| | __ ___ __ β${NC}"
echo -e "${BOLD}β \___ \| '_ \ / _\` |/ _\` |/ _ \ \ /\ / / __| |/ _\` \ \ /\ / / β${NC}"
echo -e "${BOLD}β ___) | | | | (_| | (_| | (_) \ V V / (__| | (_| |\ V V / β${NC}"
echo -e "${BOLD}β |____/|_| |_|\__,_|\__,_|\___/ \_/\_/ \___|_|\__,_| \_/\_/ β${NC}"
echo -e "${BOLD}β Shadowclaw AI Agent v3.4 β${NC}"
echo -e "${BOLD}ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${NC}"
echo ""
print_status "Working directory: $(pwd)"
print_status "State file: $STATE_FILE"
print_status "Soul memory: $SOUL_FILE"
if [ $NO_LLM_MODE -eq 1 ]; then
print_warning "Starting in NO-LLM mode (local interpreter only)."
else
print_success "LLM mode enabled (model: $OLLAMA_MODEL)."
fi
echo ""
# ---------- Build final argument list ----------
ARGS=()
if [ $NO_LLM_MODE -eq 1 ]; then
ARGS+=("--no-llm")
fi
for arg in "$@"; do
if [ "$arg" != "--force-llm" ]; then
ARGS+=("$arg")
fi
done
# ---------- Launch ----------
print_success "Launching Shadowclaw..."
exec "$PROGRAM_PATH" "${ARGS[@]}"
|