@ia-ccun/code-agent-cli 0.0.53 → 0.0.54-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +97 -69
- package/config/agent/extensions/aicode-advisor.ts +187 -64
- package/config/agent/extensions/aicode-banner.ts +101 -0
- package/config/agent/extensions/aicode-btw.ts +619 -182
- package/config/agent/extensions/aicode-cd.ts +246 -63
- package/config/agent/extensions/aicode-pets.ts +0 -11
- package/config/agent/extensions/aicode-plan.ts +2 -0
- package/config/agent/extensions/aicode-safety-guard.ts +3 -0
- package/config/agent/extensions/aicode-tips.ts +1 -16
- package/config/agent/extensions/context-monitor.ts +30 -15
- package/config/agent/extensions/context.ts +132 -60
- package/config/agent/extensions/custom-footer.ts +0 -5
- package/config/agent/extensions/custom.ts +41 -29
- package/config/agent/extensions/error-monitor.ts +37 -33
- package/config/agent/extensions/goal.ts +8 -6
- package/config/agent/extensions/msg-debug.ts +103 -112
- package/config/agent/extensions/review.ts +365 -164
- package/config/agent/extensions/working-msg.ts +2 -4
- package/dist/banner.d.ts.map +1 -1
- package/dist/banner.js +8 -1
- package/dist/banner.js.map +1 -1
- package/dist/config-loader.d.ts.map +1 -1
- package/dist/config-loader.js +9 -2
- package/dist/config-loader.js.map +1 -1
- package/package.json +6 -7
- package/scripts/regression/README.md +224 -0
- package/scripts/regression/cases/01-version-and-deps.sh +94 -0
- package/scripts/regression/cases/02-extension-loading.sh +130 -0
- package/scripts/regression/cases/03-rpc-protocol.sh +259 -0
- package/scripts/regression/cases/04-prompt-stream.sh +130 -0
- package/scripts/regression/cases/05-slash-commands-and-skills.sh +119 -0
- package/scripts/regression/cases/06-tool-execution.sh +115 -0
- package/scripts/regression/cases/07-pi-new-features.sh +141 -0
- package/scripts/regression/lib/common.sh +287 -0
- package/scripts/regression/results/.last_pid +1 -0
- package/scripts/regression/results/.last_workdir +1 -0
- package/scripts/regression/results/02-extension-loading.log +21 -0
- package/scripts/regression/results/03-prompt-stream.log +16 -0
- package/scripts/regression/results/03-rpc-protocol.log +27 -0
- package/scripts/regression/results/04-slash-commands-and-skills.log +11 -0
- package/scripts/regression/results/05-tool-execution.log +8 -0
- package/scripts/regression/results/06-pi-new-features.log +27 -0
- package/scripts/regression/run-all.sh +187 -0
- package/config/agent/bin/fd.exe +0 -0
- package/config/agent/bin/rg.exe +0 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# run-all.sh — 串联所有回归测试用例,输出汇总报告
|
|
3
|
+
# 用法:
|
|
4
|
+
# ./run-all.sh # 跑全部 6 个 case
|
|
5
|
+
# ./run-all.sh --only 01,03,05 # 只跑指定 case
|
|
6
|
+
# ./run-all.sh --quiet # 减少输出
|
|
7
|
+
# ./run-all.sh --aicode /path/to/aicode # 指定二进制路径
|
|
8
|
+
# AICODE_BIN=/path/to/aicode ./run-all.sh
|
|
9
|
+
#
|
|
10
|
+
# 退出码:0 全部通过 / 1 有失败 / 2 环境问题(缺 jq 等)
|
|
11
|
+
|
|
12
|
+
set -uo pipefail
|
|
13
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
14
|
+
|
|
15
|
+
# 参数解析
|
|
16
|
+
ONLY_CASES=""
|
|
17
|
+
QUIET=0
|
|
18
|
+
while [[ $# -gt 0 ]]; do
|
|
19
|
+
case "$1" in
|
|
20
|
+
--only) ONLY_CASES="$2"; shift 2 ;;
|
|
21
|
+
--quiet|-q) QUIET=1; shift ;;
|
|
22
|
+
--aicode) export AICODE_BIN="$2"; shift 2 ;;
|
|
23
|
+
--help|-h)
|
|
24
|
+
cat <<EOF
|
|
25
|
+
Usage: $0 [--only CASES] [--quiet] [--aicode PATH]
|
|
26
|
+
|
|
27
|
+
Options:
|
|
28
|
+
--only CASES 只跑指定 case(逗号分隔,如 01,03,05)
|
|
29
|
+
--quiet, -q 减少输出
|
|
30
|
+
--aicode PATH 指定 aicode 二进制路径(默认:PATH 中的 aicode)
|
|
31
|
+
--help, -h 显示帮助
|
|
32
|
+
|
|
33
|
+
Environment:
|
|
34
|
+
AICODE_BIN aicode 二进制路径(同 --aicode)
|
|
35
|
+
AICODE_CONFIG 配置目录(同 --config)
|
|
36
|
+
EOF
|
|
37
|
+
exit 0
|
|
38
|
+
;;
|
|
39
|
+
*) echo "Unknown arg: $1"; exit 2 ;;
|
|
40
|
+
esac
|
|
41
|
+
done
|
|
42
|
+
|
|
43
|
+
[[ $QUIET -eq 1 ]] && export REGRESSION_QUIET=1
|
|
44
|
+
|
|
45
|
+
# 前置依赖检查
|
|
46
|
+
echo "═══ aicode-cli 回归测试 ═══"
|
|
47
|
+
echo ""
|
|
48
|
+
echo "AICODE_BIN: ${AICODE_BIN:-aicode}"
|
|
49
|
+
echo "AICODE_CONFIG: ${AICODE_CONFIG:-$HOME/.aicode-cli}"
|
|
50
|
+
echo "SCRIPT_DIR: $SCRIPT_DIR"
|
|
51
|
+
|
|
52
|
+
# jq 必须
|
|
53
|
+
if ! command -v jq >/dev/null 2>&1; then
|
|
54
|
+
echo ""
|
|
55
|
+
echo "ERROR: jq 未安装。请:brew install jq"
|
|
56
|
+
exit 2
|
|
57
|
+
fi
|
|
58
|
+
|
|
59
|
+
# aicode 必须
|
|
60
|
+
if ! command -v "${AICODE_BIN:-aicode}" >/dev/null 2>&1; then
|
|
61
|
+
echo ""
|
|
62
|
+
echo "ERROR: ${AICODE_BIN:-aicode} 未找到。设 AICODE_BIN=/path/to/aicode 或 --aicode PATH"
|
|
63
|
+
exit 2
|
|
64
|
+
fi
|
|
65
|
+
|
|
66
|
+
echo ""
|
|
67
|
+
echo "─── 预检 ───"
|
|
68
|
+
"$AICODE_BIN" -v 2>&1 | head -1 | sed 's/^/ version: /'
|
|
69
|
+
echo ""
|
|
70
|
+
|
|
71
|
+
# 收集 case
|
|
72
|
+
ALL_CASES=($(ls "$SCRIPT_DIR/cases/"*.sh 2>/dev/null | sort | xargs -n1 basename))
|
|
73
|
+
if [[ -n "$ONLY_CASES" ]]; then
|
|
74
|
+
IFS=',' read -ra WANTED <<<"$ONLY_CASES"
|
|
75
|
+
FILTERED=()
|
|
76
|
+
for c in "${ALL_CASES[@]}"; do
|
|
77
|
+
for w in "${WANTED[@]}"; do
|
|
78
|
+
# 支持短前缀匹配:"03" 匹配 "03-rpc-protocol.sh"
|
|
79
|
+
if [[ "$c" == "${w}.sh" || "$c" == "${w}-"* ]]; then
|
|
80
|
+
FILTERED+=("$c")
|
|
81
|
+
break
|
|
82
|
+
fi
|
|
83
|
+
done
|
|
84
|
+
done
|
|
85
|
+
if [[ ${#FILTERED[@]} -gt 0 ]]; then
|
|
86
|
+
CASES_TO_RUN=("${FILTERED[@]}")
|
|
87
|
+
else
|
|
88
|
+
CASES_TO_RUN=()
|
|
89
|
+
fi
|
|
90
|
+
else
|
|
91
|
+
CASES_TO_RUN=("${ALL_CASES[@]}")
|
|
92
|
+
fi
|
|
93
|
+
|
|
94
|
+
if [[ ${#CASES_TO_RUN[@]} -eq 0 ]]; then
|
|
95
|
+
echo "ERROR: 没有匹配的 case (--only=$ONLY_CASES)"
|
|
96
|
+
exit 2
|
|
97
|
+
fi
|
|
98
|
+
|
|
99
|
+
echo "将运行 ${#CASES_TO_RUN[@]} 个 case: ${CASES_TO_RUN[*]}"
|
|
100
|
+
echo ""
|
|
101
|
+
|
|
102
|
+
# 跑每个 case
|
|
103
|
+
TOTAL_PASS=0
|
|
104
|
+
TOTAL_FAIL=0
|
|
105
|
+
TOTAL_SKIP=0
|
|
106
|
+
FAILED_CASES=()
|
|
107
|
+
|
|
108
|
+
for case_file in "${CASES_TO_RUN[@]}"; do
|
|
109
|
+
echo "━━━ $case_file ━━━"
|
|
110
|
+
chmod +x "$SCRIPT_DIR/cases/$case_file" 2>/dev/null
|
|
111
|
+
|
|
112
|
+
if "$SCRIPT_DIR/cases/$case_file"; then
|
|
113
|
+
# 从 case 输出里提取 pass/fail 数(不太可靠,但能汇总)
|
|
114
|
+
:
|
|
115
|
+
else
|
|
116
|
+
FAILED_CASES+=("$case_file")
|
|
117
|
+
fi
|
|
118
|
+
|
|
119
|
+
# 统计本 case 的 pass/fail/skip
|
|
120
|
+
last_log="$SCRIPT_DIR/results/${case_file%.sh}.log"
|
|
121
|
+
if [[ -f "$last_log" ]]; then
|
|
122
|
+
# 失败标记
|
|
123
|
+
if grep -q "✗" "$last_log" 2>/dev/null; then
|
|
124
|
+
:
|
|
125
|
+
fi
|
|
126
|
+
fi
|
|
127
|
+
done
|
|
128
|
+
|
|
129
|
+
# 解析每个 case 的日志
|
|
130
|
+
echo ""
|
|
131
|
+
echo "═══ 汇总 ═══"
|
|
132
|
+
|
|
133
|
+
for case_file in "${CASES_TO_RUN[@]}"; do
|
|
134
|
+
case_name="${case_file%.sh}"
|
|
135
|
+
log="$SCRIPT_DIR/results/${case_name}.log"
|
|
136
|
+
result="?"
|
|
137
|
+
pass_n=0
|
|
138
|
+
fail_n=0
|
|
139
|
+
|
|
140
|
+
if [[ -f "$log" ]]; then
|
|
141
|
+
# 通过 case 退出码判断(case 脚本内部已有 summary + exit)
|
|
142
|
+
# 同时作为备份,使用 grep 统计 stdout 输出
|
|
143
|
+
case_exit_file="$SCRIPT_DIR/results/.case_exit_${case_name}"
|
|
144
|
+
if [[ -f "$case_exit_file" ]]; then
|
|
145
|
+
case_exit=$(cat "$case_exit_file")
|
|
146
|
+
if [[ "$case_exit" -ne 0 ]]; then
|
|
147
|
+
# 整个 case 失败,用 FAIL 计数(不具体到哪个检查)
|
|
148
|
+
fail_n=1
|
|
149
|
+
pass_n=0
|
|
150
|
+
skip_n=0
|
|
151
|
+
else
|
|
152
|
+
pass_n=1
|
|
153
|
+
fail_n=0
|
|
154
|
+
skip_n=0
|
|
155
|
+
fi
|
|
156
|
+
else
|
|
157
|
+
pass_n=0; fail_n=0; skip_n=0
|
|
158
|
+
fi
|
|
159
|
+
else
|
|
160
|
+
pass_n=0; fail_n=0; skip_n=0
|
|
161
|
+
fi
|
|
162
|
+
|
|
163
|
+
TOTAL_PASS=$((TOTAL_PASS + pass_n))
|
|
164
|
+
TOTAL_FAIL=$((TOTAL_FAIL + fail_n))
|
|
165
|
+
TOTAL_SKIP=$((TOTAL_SKIP + skip_n))
|
|
166
|
+
|
|
167
|
+
if [[ $fail_n -gt 0 ]]; then
|
|
168
|
+
printf " %-40s ✗ %d fails\n" "$case_name" "$fail_n"
|
|
169
|
+
else
|
|
170
|
+
printf " %-40s ✓ pass\n" "$case_name"
|
|
171
|
+
fi
|
|
172
|
+
done
|
|
173
|
+
|
|
174
|
+
echo ""
|
|
175
|
+
echo "─── 总计 ───"
|
|
176
|
+
echo " PASS: $TOTAL_PASS"
|
|
177
|
+
echo " FAIL: $TOTAL_FAIL"
|
|
178
|
+
echo " SKIP: $TOTAL_SKIP"
|
|
179
|
+
echo ""
|
|
180
|
+
|
|
181
|
+
if [[ $TOTAL_FAIL -eq 0 ]]; then
|
|
182
|
+
echo "✓ ALL CASES PASSED"
|
|
183
|
+
exit 0
|
|
184
|
+
else
|
|
185
|
+
echo "✗ $TOTAL_FAIL FAILURES — 详见 results/*.log"
|
|
186
|
+
exit 1
|
|
187
|
+
fi
|
package/config/agent/bin/fd.exe
DELETED
|
Binary file
|
package/config/agent/bin/rg.exe
DELETED
|
Binary file
|