Repository navigation
Expand file tree
/
Copy pathstart.sh
More file actions
153 lines (133 loc) · 5.19 KB
/
Copy pathstart.sh
File metadata and controls
153 lines (133 loc) · 5.19 KB
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
#!/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[@]}"