-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdev.sh
More file actions
executable file
·136 lines (122 loc) · 5.59 KB
/
dev.sh
File metadata and controls
executable file
·136 lines (122 loc) · 5.59 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
#!/bin/sh
# Quick rebuild + restart: build, stop old daemon, launch CLI
# Usage: ./dev.sh [--check | --baseline | --auto | --no-bench] [provider]
# (no flag) : auto-select benchmark mode on feature branches, skip on main
# --check : run local benchmark check before launching
# --baseline : run benchmark check + baseline export before launching
# --auto : auto-select --check or --baseline based on changed files
# --no-bench : skip benchmarks even on feature branches
# provider : anthropic (default), openai, openai-codex, ollama, copilot, groq
# Example: ./dev.sh ollama # auto-detect if on feature branch
# Example: ./dev.sh --no-bench # quick restart, skip benchmarks
set -e
# ---------------------------------------------------------------------------
# Parse arguments: flags first, then positional provider
# ---------------------------------------------------------------------------
BENCH_MODE=""
PROVIDER=""
for arg in "$@"; do
case "$arg" in
--check) BENCH_MODE="check" ;;
--baseline) BENCH_MODE="baseline" ;;
--auto) BENCH_MODE="auto" ;;
--no-bench) BENCH_MODE="none" ;;
*) PROVIDER="$arg" ;;
esac
done
VALID_PROVIDERS="anthropic openai openai-codex ollama copilot groq"
# ---------------------------------------------------------------------------
# Detect current branch — auto-enable benchmark mode on feature branches
# ---------------------------------------------------------------------------
CURRENT_BRANCH="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "unknown")"
if [ -z "$BENCH_MODE" ] && [ "$CURRENT_BRANCH" != "main" ] && [ "$CURRENT_BRANCH" != "unknown" ]; then
BENCH_MODE="auto"
fi
# Auto-detect JAVA_HOME if not set — require exact Java 21
if [ -z "$JAVA_HOME" ]; then
# macOS: use java_home utility which correctly resolves registered JVMs
DETECTED_JDK="$(/usr/libexec/java_home -v 21 2>/dev/null || true)"
if [ -n "$DETECTED_JDK" ] && [ -d "$DETECTED_JDK" ]; then
export JAVA_HOME="$DETECTED_JDK"
fi
fi
# ---------------------------------------------------------------------------
# Benchmark mode: --auto resolves to --check or --baseline
# ---------------------------------------------------------------------------
if [ "$BENCH_MODE" = "none" ]; then
BENCH_MODE=""
elif [ "$BENCH_MODE" = "auto" ]; then
if ! CHANGED_FILES="$(git diff --name-only origin/main...HEAD 2>/dev/null)"; then
echo ">> --auto: unable to diff against origin/main, falling back to check mode"
BENCH_MODE="check"
elif [ -z "$CHANGED_FILES" ]; then
echo ">> --auto: no diff against origin/main, skipping benchmarks"
BENCH_MODE=""
else
# Patterns that upgrade to baseline mode
BASELINE_MATCH=""
while IFS= read -r f; do
case "$f" in
aceclaw-memory/*) BASELINE_MATCH=1 ;;
scripts/generate-replay-report.sh) BASELINE_MATCH=1 ;;
scripts/replay-quality-gate.sh) BASELINE_MATCH=1 ;;
scripts/collect-continuous-learning-baseline.sh) BASELINE_MATCH=1 ;;
scripts/export-injection-audit-summary.sh) BASELINE_MATCH=1 ;;
*metrics*|*scorecard*|*rollout*|*candidate*|*replay*|*learning*) BASELINE_MATCH=1 ;;
esac
done <<EOF
$CHANGED_FILES
EOF
if [ -n "$BASELINE_MATCH" ]; then
BENCH_MODE="baseline"
echo ">> --auto: detected learning/benchmark sensitive changes -> baseline mode"
else
BENCH_MODE="check"
echo ">> --auto: normal feature changes -> check mode"
fi
fi
fi
# Export bench mode so the CLI can display it in the status line
export ACECLAW_BENCH_MODE="${BENCH_MODE:-none}"
# Run benchmark steps if requested
if [ "$BENCH_MODE" = "check" ]; then
echo ">> Running local benchmark check..."
./gradlew preMergeCheck -PreplayGateStrict=false
elif [ "$BENCH_MODE" = "baseline" ]; then
echo ">> Running local benchmark check + baseline export..."
./gradlew preMergeCheck -PreplayGateStrict=false
./scripts/export-injection-audit-summary.sh
./scripts/collect-continuous-learning-baseline.sh --output .aceclaw/metrics/continuous-learning/baseline.json
fi
# ---------------------------------------------------------------------------
# Build + restart
# ---------------------------------------------------------------------------
echo ">> Building CLI..."
./gradlew :aceclaw-cli:installDist -q
# Stop old daemon (best-effort) — warn about active sessions
CLI_BIN=./aceclaw-cli/build/install/aceclaw-cli/bin/aceclaw-cli
if [ -S ~/.aceclaw/aceclaw.sock ]; then
ACTIVE_SESSIONS=$("$CLI_BIN" daemon status 2>/dev/null | sed -n 's/.*Active Sessions: *//p' || echo "0")
if [ "$ACTIVE_SESSIONS" -gt 0 ] 2>/dev/null; then
echo ">> WARNING: Restarting daemon with $ACTIVE_SESSIONS active session(s)"
echo ">> Other connected TUI windows will be disconnected."
fi
"$CLI_BIN" daemon stop 2>/dev/null || true
sleep 0.5
fi
# Kill by PID if still alive
if [ -f ~/.aceclaw/aceclaw.pid ]; then
kill "$(cat ~/.aceclaw/aceclaw.pid)" 2>/dev/null || true
sleep 0.3
fi
# Validate and set provider via env if specified
if [ -n "$PROVIDER" ]; then
case " $VALID_PROVIDERS " in
*" $PROVIDER "*) ;;
*) echo "Invalid provider: $PROVIDER"; echo "Valid: $VALID_PROVIDERS"; exit 1 ;;
esac
export ACECLAW_PROVIDER="$PROVIDER"
echo "Provider: $PROVIDER"
fi
echo ">> Launching AceClaw..."
exec ./aceclaw-cli/build/install/aceclaw-cli/bin/aceclaw-cli