@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.
Files changed (45) hide show
  1. package/bin/cli.js +97 -69
  2. package/config/agent/extensions/aicode-advisor.ts +187 -64
  3. package/config/agent/extensions/aicode-banner.ts +101 -0
  4. package/config/agent/extensions/aicode-btw.ts +619 -182
  5. package/config/agent/extensions/aicode-cd.ts +246 -63
  6. package/config/agent/extensions/aicode-pets.ts +0 -11
  7. package/config/agent/extensions/aicode-plan.ts +2 -0
  8. package/config/agent/extensions/aicode-safety-guard.ts +3 -0
  9. package/config/agent/extensions/aicode-tips.ts +1 -16
  10. package/config/agent/extensions/context-monitor.ts +30 -15
  11. package/config/agent/extensions/context.ts +132 -60
  12. package/config/agent/extensions/custom-footer.ts +0 -5
  13. package/config/agent/extensions/custom.ts +41 -29
  14. package/config/agent/extensions/error-monitor.ts +37 -33
  15. package/config/agent/extensions/goal.ts +8 -6
  16. package/config/agent/extensions/msg-debug.ts +103 -112
  17. package/config/agent/extensions/review.ts +365 -164
  18. package/config/agent/extensions/working-msg.ts +2 -4
  19. package/dist/banner.d.ts.map +1 -1
  20. package/dist/banner.js +8 -1
  21. package/dist/banner.js.map +1 -1
  22. package/dist/config-loader.d.ts.map +1 -1
  23. package/dist/config-loader.js +9 -2
  24. package/dist/config-loader.js.map +1 -1
  25. package/package.json +6 -7
  26. package/scripts/regression/README.md +224 -0
  27. package/scripts/regression/cases/01-version-and-deps.sh +94 -0
  28. package/scripts/regression/cases/02-extension-loading.sh +130 -0
  29. package/scripts/regression/cases/03-rpc-protocol.sh +259 -0
  30. package/scripts/regression/cases/04-prompt-stream.sh +130 -0
  31. package/scripts/regression/cases/05-slash-commands-and-skills.sh +119 -0
  32. package/scripts/regression/cases/06-tool-execution.sh +115 -0
  33. package/scripts/regression/cases/07-pi-new-features.sh +141 -0
  34. package/scripts/regression/lib/common.sh +287 -0
  35. package/scripts/regression/results/.last_pid +1 -0
  36. package/scripts/regression/results/.last_workdir +1 -0
  37. package/scripts/regression/results/02-extension-loading.log +21 -0
  38. package/scripts/regression/results/03-prompt-stream.log +16 -0
  39. package/scripts/regression/results/03-rpc-protocol.log +27 -0
  40. package/scripts/regression/results/04-slash-commands-and-skills.log +11 -0
  41. package/scripts/regression/results/05-tool-execution.log +8 -0
  42. package/scripts/regression/results/06-pi-new-features.log +27 -0
  43. package/scripts/regression/run-all.sh +187 -0
  44. package/config/agent/bin/fd.exe +0 -0
  45. 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
Binary file
Binary file