@ia-ccun/code-agent-cli 0.0.54-beta.1 → 0.0.54-beta.4

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 (144) hide show
  1. package/bin/cli.js +116 -74
  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 +42 -24
  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/config/agent/settings.json +15 -14
  20. package/config/agent/skills/hello/SKILL.md +1 -1
  21. package/config/agent/skills/refactor/SKILL.md +40 -0
  22. package/dist/banner.d.ts.map +1 -1
  23. package/dist/banner.js +8 -1
  24. package/dist/banner.js.map +1 -1
  25. package/dist/config-loader.d.ts.map +1 -1
  26. package/dist/config-loader.js +9 -2
  27. package/dist/config-loader.js.map +1 -1
  28. package/package.json +6 -7
  29. package/scripts/regression/README.md +224 -0
  30. package/scripts/regression/cases/01-version-and-deps.sh +94 -0
  31. package/scripts/regression/cases/02-extension-loading.sh +130 -0
  32. package/scripts/regression/cases/03-rpc-protocol.sh +259 -0
  33. package/scripts/regression/cases/04-prompt-stream.sh +130 -0
  34. package/scripts/regression/cases/05-slash-commands-and-skills.sh +119 -0
  35. package/scripts/regression/cases/06-tool-execution.sh +115 -0
  36. package/scripts/regression/cases/07-pi-new-features.sh +141 -0
  37. package/scripts/regression/cases/08-cwd-resilience.sh +84 -0
  38. package/scripts/regression/lib/common.sh +287 -0
  39. package/scripts/regression/results/.last_pid +1 -0
  40. package/scripts/regression/results/.last_workdir +1 -0
  41. package/scripts/regression/results/02-extension-loading.log +19 -0
  42. package/scripts/regression/results/03-prompt-stream.log +16 -0
  43. package/scripts/regression/results/03-rpc-protocol.log +28 -0
  44. package/scripts/regression/results/04-slash-commands-and-skills.log +11 -0
  45. package/scripts/regression/results/05-tool-execution.log +8 -0
  46. package/scripts/regression/results/06-pi-new-features.log +27 -0
  47. package/scripts/regression/results/08-cwd-resilience.log +1 -0
  48. package/scripts/regression/run-all.sh +187 -0
  49. package/config/agent/bin/fd.exe +0 -0
  50. package/config/agent/bin/rg.exe +0 -0
  51. package/config/agent/extensions/aicode-filter-outputs.ts +0 -131
  52. package/config/agent/extensions/aicode-snake.ts +0 -354
  53. /package/config/agent/{skills_bak → skills}/csv-data-summarizer/SKILL.md +0 -0
  54. /package/config/agent/{skills_bak → skills}/csv-data-summarizer/analyze.py +0 -0
  55. /package/config/agent/{skills_bak → skills}/csv-data-summarizer/examples/showcase_financial_pl_data.csv +0 -0
  56. /package/config/agent/{skills_bak → skills}/csv-data-summarizer/requirements.txt +0 -0
  57. /package/config/agent/{skills_bak → skills}/csv-data-summarizer/resources/sample.csv +0 -0
  58. /package/config/agent/{skills_bak → skills}/dispatching-parallel-agents/SKILL.md +0 -0
  59. /package/config/agent/{skills_bak → skills}/find-skills/SKILL.md +0 -0
  60. /package/config/agent/{skills_bak → skills}/finishing-a-development-branch/SKILL.md +0 -0
  61. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/LICENSE +0 -0
  62. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/README.md +0 -0
  63. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/README.zh.md +0 -0
  64. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/SKILL.md +0 -0
  65. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/agentloop-core.svg +0 -0
  66. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/agents/openai.yaml +0 -0
  67. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style1-flat.png +0 -0
  68. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style2-dark.png +0 -0
  69. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style3-blueprint.png +0 -0
  70. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style4-notion.png +0 -0
  71. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style5-glass.png +0 -0
  72. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style6-claude.png +0 -0
  73. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/assets/samples/sample-style7-openai.png +0 -0
  74. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/agent-memory-types-style4.json +0 -0
  75. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/api-flow-style7.json +0 -0
  76. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/mem0-style1.json +0 -0
  77. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/microservices-style3.json +0 -0
  78. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/multi-agent-style5.json +0 -0
  79. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/system-architecture-style6.json +0 -0
  80. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/fixtures/tool-call-style2.json +0 -0
  81. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/package.json +0 -0
  82. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/icons.md +0 -0
  83. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-1-flat-icon.md +0 -0
  84. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-2-dark-terminal.md +0 -0
  85. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-3-blueprint.md +0 -0
  86. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-4-notion-clean.md +0 -0
  87. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-5-glassmorphism.md +0 -0
  88. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-6-claude-official.md +0 -0
  89. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-7-openai.md +0 -0
  90. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/style-diagram-matrix.md +0 -0
  91. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/references/svg-layout-best-practices.md +0 -0
  92. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/scripts/README.md +0 -0
  93. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/scripts/generate-diagram.sh +0 -0
  94. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/scripts/generate-from-template.py +0 -0
  95. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/scripts/test-all-styles.sh +0 -0
  96. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/scripts/validate-svg.sh +0 -0
  97. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/agent-architecture.svg +0 -0
  98. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/architecture.svg +0 -0
  99. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/comparison-matrix.svg +0 -0
  100. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/data-flow.svg +0 -0
  101. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/er-diagram.svg +0 -0
  102. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/flowchart.svg +0 -0
  103. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/sequence.svg +0 -0
  104. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/state-machine.svg +0 -0
  105. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/timeline.svg +0 -0
  106. /package/config/agent/{skills_bak → skills}/fireworks-tech-graph/templates/use-case.svg +0 -0
  107. /package/config/agent/{skills_bak → skills}/librarian/SKILL.md +0 -0
  108. /package/config/agent/{skills_bak → skills}/markdown-to-html/SKILL.md +0 -0
  109. /package/config/agent/{skills_bak → skills}/milvus-skill/LICENSE +0 -0
  110. /package/config/agent/{skills_bak → skills}/milvus-skill/README.md +0 -0
  111. /package/config/agent/{skills_bak → skills}/milvus-skill/SKILL.md +0 -0
  112. /package/config/agent/{skills_bak → skills}/milvus-skill/references/collection.md +0 -0
  113. /package/config/agent/{skills_bak → skills}/milvus-skill/references/database.md +0 -0
  114. /package/config/agent/{skills_bak → skills}/milvus-skill/references/index.md +0 -0
  115. /package/config/agent/{skills_bak → skills}/milvus-skill/references/partition.md +0 -0
  116. /package/config/agent/{skills_bak → skills}/milvus-skill/references/patterns.md +0 -0
  117. /package/config/agent/{skills_bak → skills}/milvus-skill/references/user-role.md +0 -0
  118. /package/config/agent/{skills_bak → skills}/milvus-skill/references/vector.md +0 -0
  119. /package/config/agent/{skills_bak → skills}/pr/SKILL.md +0 -0
  120. /package/config/agent/{skills_bak → skills}/receiving-code-review/SKILL.md +0 -0
  121. /package/config/agent/{skills_bak → skills}/requesting-code-review/SKILL.md +0 -0
  122. /package/config/agent/{skills_bak → skills}/requesting-code-review/code-reviewer.md +0 -0
  123. /package/config/agent/{skills_bak → skills}/subagent-driven-development/SKILL.md +0 -0
  124. /package/config/agent/{skills_bak → skills}/subagent-driven-development/code-quality-reviewer-prompt.md +0 -0
  125. /package/config/agent/{skills_bak → skills}/subagent-driven-development/implementer-prompt.md +0 -0
  126. /package/config/agent/{skills_bak → skills}/subagent-driven-development/spec-reviewer-prompt.md +0 -0
  127. /package/config/agent/{skills_bak → skills}/systematic-debugging/CREATION-LOG.md +0 -0
  128. /package/config/agent/{skills_bak → skills}/systematic-debugging/SKILL.md +0 -0
  129. /package/config/agent/{skills_bak → skills}/systematic-debugging/condition-based-waiting-example.ts +0 -0
  130. /package/config/agent/{skills_bak → skills}/systematic-debugging/condition-based-waiting.md +0 -0
  131. /package/config/agent/{skills_bak → skills}/systematic-debugging/defense-in-depth.md +0 -0
  132. /package/config/agent/{skills_bak → skills}/systematic-debugging/find-polluter.sh +0 -0
  133. /package/config/agent/{skills_bak → skills}/systematic-debugging/root-cause-tracing.md +0 -0
  134. /package/config/agent/{skills_bak → skills}/systematic-debugging/test-academic.md +0 -0
  135. /package/config/agent/{skills_bak → skills}/systematic-debugging/test-pressure-1.md +0 -0
  136. /package/config/agent/{skills_bak → skills}/systematic-debugging/test-pressure-2.md +0 -0
  137. /package/config/agent/{skills_bak → skills}/systematic-debugging/test-pressure-3.md +0 -0
  138. /package/config/agent/{skills_bak → skills}/test-driven-development/SKILL.md +0 -0
  139. /package/config/agent/{skills_bak → skills}/test-driven-development/testing-anti-patterns.md +0 -0
  140. /package/config/agent/{skills_bak → skills}/unit-test/SKILL.md +0 -0
  141. /package/config/agent/{skills_bak → skills}/using-git-worktrees/SKILL.md +0 -0
  142. /package/config/agent/{skills_bak → skills}/zread/README.md +0 -0
  143. /package/config/agent/{skills_bak → skills}/zread/SKILL.md +0 -0
  144. /package/config/agent/{skills_bak → skills}/zread/references/stdio-protocol.md +0 -0
@@ -198,8 +198,7 @@ export default function workingMessageExtension(pi: ExtensionAPI) {
198
198
  const state = new WorkingMessageStateManager();
199
199
 
200
200
  // ✅ session_shutdown - 清理所有资源
201
- pi.on("session_shutdown", async (_event, ctx) => {
202
- state.dispose();
201
+ pi.on("session_shutdown", async (_event, _ctx) => {
203
202
  });
204
203
 
205
204
  // ✅ turn_start - 初始化状态并启动定时器
@@ -224,7 +223,6 @@ export default function workingMessageExtension(pi: ExtensionAPI) {
224
223
  });
225
224
 
226
225
  // ✅ turn_end - 清理所有资源
227
- pi.on("turn_end", async (_event: TurnEndEvent, ctx) => {
228
- state.dispose();
226
+ pi.on("turn_end", async (_event: TurnEndEvent, _ctx) => {
229
227
  });
230
228
  }
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "quietStartup":true,
3
3
  "defaultProvider": "aicode",
4
- "defaultModel": "qwen3.6-35b-a3b",
4
+ "defaultModel": "qwen3.5-35b-a3b",
5
5
  "theme":"light",
6
6
  "extensions":[
7
+ "~/.aicode-cli/agent/extensions/bash-check.ts",
7
8
  "~/.aicode-cli/agent/extensions/context-monitor.ts",
8
9
  "~/.aicode-cli/agent/extensions/context.ts",
9
10
  "~/.aicode-cli/agent/extensions/custom-footer.ts",
@@ -13,43 +14,43 @@
13
14
  "-extensions/aicode-pets.ts"
14
15
  ],
15
16
  "packages":[
16
- "npm:pi-subagents",
17
- "npm:pi-rewind",
18
- "npm:pi-mcp-adapter",
17
+ "npm:pi-subagents@0.17.1",
18
+ "npm:pi-rewind@0.5.0",
19
+ "npm:pi-mcp-adapter@2.4.0",
19
20
  "npm:@juicesharp/rpiv-todo",
20
21
  "npm:@juicesharp/rpiv-ask-user-question",
21
- "npm:@samfp/pi-memor"
22
+ "npm:@samfp/pi-memory@1.1.1"
22
23
  ],
23
24
  "memory": {
24
25
  "localPath": "~/.aicode-cli/memory",
25
26
  "lessonInjection": "selective",
26
- "consolidationModel": "qwen3.6-35b-a3b"
27
+ "consolidationModel": "qwen3.5-35b-a3b"
27
28
  },
28
29
  "subagents": {
29
30
  "agentOverrides": {
30
31
  "scout": {
31
- "model": "qwen3.6-35b-a3b"
32
+ "model": "qwen3.5-35b-a3b"
32
33
  },
33
34
  "researcher": {
34
- "model": "qwen3.6-35b-a3b"
35
+ "model": "qwen3.5-35b-a3b"
35
36
  },
36
37
  "planner": {
37
- "model": "qwen3.6-35b-a3b"
38
+ "model": "qwen3.5-35b-a3b"
38
39
  },
39
40
  "worker": {
40
- "model": "qwen3.6-35b-a3b"
41
+ "model": "qwen3.5-35b-a3b"
41
42
  },
42
43
  "reviewer": {
43
- "model": "qwen3.6-35b-a3b"
44
+ "model": "qwen3.5-35b-a3b"
44
45
  },
45
46
  "context-builder": {
46
- "model": "qwen3.6-35b-a3b"
47
+ "model": "qwen3.5-35b-a3b"
47
48
  },
48
49
  "oracle": {
49
- "model": "qwen3.6-35b-a3b"
50
+ "model": "qwen3.5-35b-a3b"
50
51
  },
51
52
  "delegate": {
52
- "model": "qwen3.6-35b-a3b"
53
+ "model": "qwen3.5-35b-a3b"
53
54
  }
54
55
  }
55
56
  }
@@ -1,4 +1,4 @@
1
- ---
1
+ ---
2
2
  name: hello
3
3
  description: "Custom skill example. Use when testing skill functionality or as a template for creating new skills."
4
4
  disable-model-invocation: true
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: refactor
3
+ description: "对代码进行重构,提高可读性和可维护性,同时保持功能不变。Use when refactoring code, improving code readability, or optimizing code structure."
4
+ disable-model-invocation: true
5
+ metadata:
6
+ version: "1.0.0"
7
+ author: "xujianjiang"
8
+ ---
9
+
10
+ # 重构代码 Skill
11
+
12
+ ## 描述
13
+ 对代码进行重构,提高可读性和可维护性,同时保持功能不变。
14
+
15
+ ## 触发方式
16
+ `/skill:refactor`
17
+
18
+ ## 执行步骤
19
+
20
+ 1. **分析现有代码**
21
+ - 读取目标文件
22
+ - 识别代码异味 (code smells)
23
+ - 找出可复用的代码
24
+
25
+ 2. **执行重构**
26
+ - 提取重复代码为函数
27
+ - 简化复杂的条件逻辑
28
+ - 重命名变量/函数使其更清晰
29
+ - 优化类结构
30
+ - 添加适当的注释
31
+
32
+ 3. **验证功能**
33
+ - 确保重构后代码功能不变
34
+ - 运行现有测试确保通过
35
+
36
+ ## 重构原则
37
+ - 保持功能不变
38
+ - 每次只做一个小改动
39
+ - 提交前运行测试
40
+ - 优先处理高风险/高价值部分
@@ -1 +1 @@
1
- {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,QAAA,IAAI,aAAa,QAAK,CAAC;AAoBvB;;GAEG;AACH,iBAAS,oBAAoB,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAc/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAkB,GAAG,MAAM,CA8FrE"}
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,QAAA,IAAI,aAAa,QAAK,CAAC;AAoBvB;;GAEG;AACH,iBAAS,oBAAoB,IAAI,MAAM,CAGtC;AAED,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,CAAC;AAc/C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,GAAE,MAAkB,GAAG,MAAM,CAoGrE"}
package/dist/banner.js CHANGED
@@ -54,7 +54,14 @@ export function generateBanner(colorTheme = '#49bccf') {
54
54
  const theme = (colorTheme === 'random' || colorTheme === 'rotate') ? getRotatedColorTheme() : colorTheme;
55
55
  const rgb = hexToRgb(theme);
56
56
  const version = process.env.AICODE_CLI_VERSION || '';
57
- const cwd = process.cwd().replace(process.env.HOME || process.env.USERPROFILE || '', '~');
57
+ // 防御 CWD 被删除的场景: process.cwd() 会抛 ENOENT
58
+ let cwd;
59
+ try {
60
+ cwd = process.cwd().replace(process.env.HOME || process.env.USERPROFILE || '', '~');
61
+ }
62
+ catch {
63
+ cwd = '<unknown>';
64
+ }
58
65
  const color = (text) => `\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m${text}\x1b[0m`;
59
66
  const dim = (text) => `\x1b[2m${text}\x1b[0m`;
60
67
  const bold = (text) => `\x1b[1m${text}\x1b[0m`;
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAuErC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CA8CtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC"}
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CA6ErC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,CA8CtC;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,SAAS,CAErC"}
@@ -28,8 +28,15 @@ export function getConfigDir() {
28
28
  resolvedPath = configDir;
29
29
  }
30
30
  else {
31
- // 相对路径:相对于当前工作目录
32
- resolvedPath = resolve(configDir);
31
+ // 相对路径:相对于当前工作目录 (cwd 不可用时退回 homedir)
32
+ try {
33
+ resolvedPath = resolve(configDir);
34
+ }
35
+ catch {
36
+ // cwd 被删除: process.cwd() throws ENOENT → path.resolve 也炸
37
+ // 退回 homedir, 走默认配置目录分支
38
+ return join(homedir(), defaultConfig.configDir);
39
+ }
33
40
  }
34
41
  // 🔒 规范化路径(消除 .. 和 .)
35
42
  const normalized = normalize(resolvedPath);
@@ -1 +1 @@
1
- {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE1F,IAAI,YAAY,GAAqB,IAAI,CAAC;AAE1C;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,gCAAgC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IAEpD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,YAAoB,CAAC;QAEzB,aAAa;QACb,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YACtB,YAAY,GAAG,OAAO,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,YAAY,GAAG,SAAS,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,iBAAiB;YACjB,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,sBAAsB;QACtB,MAAM,UAAU,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;QAE3C,oBAAoB;QACpB,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,WAAW,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;gBACpD,aAAa,EAAE,SAAS;gBACxB,cAAc,EAAE,UAAU;gBAC1B,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE,4BAA4B;aACrC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACvC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QAED,+BAA+B;QAC/B,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACpC,WAAW,CAAC,iBAAiB,CAAC,eAAe,EAAE;gBAC7C,aAAa,EAAE,SAAS;gBACxB,cAAc,EAAE,UAAU;gBAC1B,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,6BAA6B;gBACrC,MAAM,EAAE,4BAA4B;aACrC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,gBAAgB,UAAU,eAAe,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,WAAW,CAAC,iBAAiB,CAAC,eAAe,EAAE;gBAC7C,aAAa,EAAE,SAAS;gBACxB,cAAc,EAAE,UAAU;gBAC1B,MAAM,EAAE,sBAAsB;gBAC9B,MAAM,EAAE,4BAA4B;aACrC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QAED,WAAW;QACX,WAAW,CAAC,iBAAiB,CAAC,eAAe,EAAE;YAC7C,aAAa,EAAE,SAAS;YACxB,cAAc,EAAE,UAAU;YAC1B,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;QAEH,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;IAEvD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAClD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvC,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,UAAU,EAAE,CAAC;YAEnD,aAAa;YACb,WAAW,CAAC,iBAAiB,CAAC,WAAW,EAAE;gBACzC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,IAAI;gBACb,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa;YACb,QAAQ,CAAC,6BAA6B,EAAE,KAAc,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;YAC9E,WAAW,CAAC,iBAAiB,CAAC,YAAY,EAAE;gBAC1C,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAG,KAAe,CAAC,OAAO;gBAC/B,MAAM,EAAE,sBAAsB;aAC/B,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAClB,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,eAAe;QACf,WAAW,CAAC,iBAAiB,CAAC,WAAW,EAAE;YACzC,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,sBAAsB;SAC/B,CAAC,CAAC;QACH,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;IACtC,CAAC;IAED,qCAAqC;IACrC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,2BAA2B,GAAG,QAAQ,CAAC;IAEnD,OAAO,YAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../src/config-loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "@ia-ccun/code-agent-cli",
3
- "version": "0.0.54-beta.1",
4
- "description": "AI Coding Agent CLI - 基于OpenClaw🦞底层Agent原理封装的编码智能体(供学习使用)。",
3
+ "version": "0.0.54-beta.4",
5
4
  "type": "module",
6
5
  "main": "./dist/index.js",
7
6
  "types": "./dist/index.d.ts",
@@ -35,10 +34,10 @@
35
34
  "prepare": "husky"
36
35
  },
37
36
  "dependencies": {
38
- "@earendil-works/pi-agent-core": "^0.80.0",
39
- "@earendil-works/pi-ai": "^0.80.0",
40
- "@earendil-works/pi-coding-agent": "^0.80.0",
41
- "@earendil-works/pi-tui": "^0.80.0"
37
+ "@earendil-works/pi-agent-core": "^1.1.0",
38
+ "@earendil-works/pi-ai": "^1.1.0",
39
+ "@earendil-works/pi-coding-agent": "^1.1.0",
40
+ "@earendil-works/pi-tui": "^1.1.0"
42
41
  },
43
42
  "overrides": {
44
43
  "glob": "^11.0.0",
@@ -81,6 +80,6 @@
81
80
  "configDir": ".aicode-cli"
82
81
  },
83
82
  "engines": {
84
- "node": ">=20.0.0"
83
+ "node": ">=22.19.0"
85
84
  }
86
85
  }
@@ -0,0 +1,224 @@
1
+ # aicode-cli 回归测试套件
2
+
3
+ > 用于验证每次升级 pi 底层依赖后,aicode-cli 的功能完整性不受影响。
4
+ > 也可用于新 aicode 版本发布前的本地预检。
5
+
6
+ ## 设计目标
7
+
8
+ | 维度 | 验证内容 |
9
+ |---|---|
10
+ | **版本对齐** | aicode 二进制版本 + 4 个 pi 依赖包主版本一致 |
11
+ | **aicode 特色功能** | 20 个自定义 TS 扩展全部加载,无冲突 / 无语法错误 |
12
+ | **RPC 协议兼容** ⭐ | AicodeRpcClient.kt 实际用到的 17 个 RPC 命令 + 7 个事件类型 + 字段 schema |
13
+ | **预置资产** | 5 个 Prompt + 21+ 个 Skill 全部通过 `get_commands` 注册 |
14
+ | **核心能力** | prompt → message_update 完整事件流、tool_execution 配对 |
15
+ | **pi 0.85 新功能** | `clear_queue` RPC、GPT-6 Astra、thinking 持久化、`usage.cacheWrite1h` |
16
+
17
+ > ⭐ **RPC 协议兼容** 是本套件的核心重点 — 任何 RPC 命令的字段格式变化都会在 case 03 失败。
18
+
19
+ ## 快速开始
20
+
21
+ ### 前置依赖
22
+
23
+ ```bash
24
+ brew install jq
25
+ ```
26
+
27
+ ### 运行全部测试
28
+
29
+ ```bash
30
+ # 默认(使用 PATH 中的 aicode,配置目录 ~/.aicode-cli)
31
+ ./run-all.sh
32
+
33
+ # 指定 aicode 二进制(测试本地包)
34
+ AICODE_BIN=$(pwd)/bin/cli.js ./run-all.sh
35
+ ```
36
+
37
+ ### 只跑部分 case
38
+
39
+ ```bash
40
+ # 只跑 RPC 兼容性(升级后必跑)
41
+ ./run-all.sh --only 03
42
+
43
+ # 跑 RPC + 新功能验证(最小升级预检)
44
+ ./run-all.sh --only 03,07
45
+
46
+ # 跑核心 4 个
47
+ ./run-all.sh --only 01,02,03,07
48
+ ```
49
+
50
+ ### 单个 case 直接跑
51
+
52
+ ```bash
53
+ ./cases/01-version-and-deps.sh
54
+ ./cases/02-extension-loading.sh
55
+ ./cases/03-rpc-protocol.sh
56
+ ./cases/04-prompt-stream.sh
57
+ ./cases/05-slash-commands-and-skills.sh
58
+ ./cases/06-tool-execution.sh
59
+ ./cases/07-pi-new-features.sh
60
+ ```
61
+
62
+ ## Case 清单
63
+
64
+ | Case | 文件 | 主题 | 关键断言 |
65
+ |---|---|---|---|
66
+ | **01** | `01-version-and-deps.sh` | 版本与依赖 | `aicode -v` 格式合规 + 4 个 pi 包主版本匹配 |
67
+ | **02** | `02-extension-loading.sh` | aicode 扩展加载 | 启动无 `Failed to load`/`conflict`/`SyntaxError`;aicode-* 命令注册 |
68
+ | **03** ⭐ | `03-rpc-protocol.sh` | **RPC 协议兼容性矩阵** | 17 个 RPC 命令 + 7 个事件类型 + 字段 schema + stopReason 枚举值 |
69
+ | **04** | `04-prompt-stream.sh` | prompt 事件流 | `agent_start`/`turn_start`/`message_update`(thinking_delta/text_delta)/`turn_end`/`agent_end` 序列 |
70
+ | **05** | `05-slash-commands-and-skills.sh` | Prompts + Skills | `/git-commit` `/workflow` 等 5 个 prompt + `/skill:code-review` 等核心 skill |
71
+ | **06** | `06-tool-execution.sh` | 工具调用 | `tool_execution_start` 必带 `toolCallId`+`toolName`(0.84.3 修复点) |
72
+ | **07** | `07-pi-new-features.sh` | pi 0.85 新功能 | `clear_queue` RPC、GPT-6、thinking 持久化、`cacheWrite1h` |
73
+
74
+ ## RPC 协议覆盖矩阵(case 03)
75
+
76
+ ### RPC 命令(17 个)
77
+
78
+ | 命令 | 来源 | 用途 |
79
+ |---|---|---|
80
+ | `prompt` / `steer` / `follow_up` / `abort` | AicodeRpcClient.streamPrompt/Steer/FollowUp/abort | 消息流 |
81
+ | `compact` | AicodeRpcClient.compact | 上下文压缩 |
82
+ | `extension_ui_response` | AicodeRpcClient.respondExtensionUi | 扩展 UI 回调 |
83
+ | `get_state` / `get_session_stats` / `get_commands` | fetchState/fetchSessionStats/getCommands | 状态查询 |
84
+ | `get_available_models` / `get_available_thinking_levels` | AicodeRpcClient | 模型/thinking 选择 |
85
+ | `get_messages` / `get_entries` / `get_tree` | AicodeRpcClient | 会话历史 |
86
+ | `set_thinking_level` / `cycle_thinking_level` / `set_model_provider` | AicodeRpcClient | 模型控制 |
87
+ | `set_tools` | AicodeRpcClient.setTools | 工具开关 |
88
+ | `new_session` / `clear_queue` | AicodeRpcClient.newSession/clearQueue | 会话管理 + 队列 |
89
+
90
+ ### 事件类型(11 个)
91
+
92
+ | 事件 | AicodeStreamItem 映射 |
93
+ |---|---|
94
+ | `agent_start` / `turn_start` | lifecycle |
95
+ | `message_start` / `message_end` | lifecycle |
96
+ | `message_update` | Text / Thinking |
97
+ | `turn_end` / `agent_end` | TurnEnd / lifecycle |
98
+ | `tool_execution_start` / `_update` / `_end` | ToolStart / ToolUpdate / ToolEnd |
99
+ | `queue_update` | QueueUpdate |
100
+ | `auto_retry_end` | Error |
101
+
102
+ ### 字段 schema(关键)
103
+
104
+ - `message_start.message.role` ∈ {user, assistant, toolResult}
105
+ - `message_update.assistantMessageEvent.{type, delta, contentIndex}`
106
+ - `turn_end.message.usage.{input, output, cost, ...}`
107
+ - `tool_execution_start.{toolCallId, toolName, args}` (0.84.3 修复点)
108
+ - `tool_execution_end.{isError: "true"|"false"}`
109
+ - `message_end.message.stopReason` ∈ {end_turn, tool_use, error, max_tokens, aborted}
110
+ - `agent_end.willRetry` ∈ {"true", "false"}
111
+
112
+ ## 升级后必跑
113
+
114
+ ```bash
115
+ # 1. 改完 package.json,npm install
116
+ # 2. 编译
117
+ npm run build
118
+
119
+ # 3. RPC 兼容性是首要重点
120
+ ./scripts/regression/run-all.sh --only 03
121
+
122
+ # 4. 全量回归
123
+ ./scripts/regression/run-all.sh
124
+
125
+ # 5. 看 results/*.log
126
+ ls scripts/regression/results/
127
+ ```
128
+
129
+ ## 验收标准
130
+
131
+ 升级可发布的最低条件:
132
+
133
+ | Case | 最低要求 |
134
+ |---|---|
135
+ | 01 version-and-deps | 全部 pass |
136
+ | 02 extension-loading | fail_count = 0 |
137
+ | **03 rpc-protocol** | **全部 pass 或 skip(已知不支持)** |
138
+ | 04 prompt-stream | 全部 pass |
139
+ | 05 slash-commands-and-skills | 注册率 ≥ 80% |
140
+ | 06 tool-execution | 至少 1 个 tool 事件配对成功 |
141
+ | 07 pi-new-features | skip 都标 "pi < 0.85.0 不支持" |
142
+
143
+ ## 输出位置
144
+
145
+ | 文件 | 内容 |
146
+ |---|---|
147
+ | `results/<case-name>.log` | 每个 case 的 stdout(pass/fail 行 + RPC 事件 log) |
148
+ | `results/.last_pid` | 最近一次 spawn 的 RPC 进程 PID(调试用) |
149
+
150
+ ## 隔离机制
151
+
152
+ 每个 case 独立 spawn 一个 `aicode --mode rpc --no-session` 子进程,使用临时目录(`mktemp -d`)作为 configDir,**不污染**用户 `~/.aicode-cli/`。结束后自动清理。
153
+
154
+ 但 `02-extension-loading.sh` 需要真实加载扩展(不能用 `-ne`),所以它会用临时目录作为 configDir 跑全量加载,验证 20 个扩展都能正常启动。
155
+
156
+ ## 依赖扩展的 case
157
+
158
+ - **02、05** 都需要正常启动扩展 → 不传 `-ne`
159
+ - **03、04、06、07** 主要测 RPC 协议 → 用 `-ne` 跳过扩展避免冲突
160
+
161
+ ## 调试
162
+
163
+ ### 单独看 RPC 事件流
164
+
165
+ ```bash
166
+ # 看 03 的 RPC 命令响应
167
+ jq -c 'select(.type=="response")' scripts/regression/results/03-rpc-protocol.log | head -20
168
+
169
+ # 看 message_update delta 流
170
+ grep message_update scripts/regression/results/04-prompt-stream.log | \
171
+ jq -c '{event: .assistantMessageEvent.type, delta: .assistantMessageEvent.delta}'
172
+ ```
173
+
174
+ ### 验证 RPC schema 漂移
175
+
176
+ ```bash
177
+ # 列出所有 turn_end 的 usage keys
178
+ jq -c 'select(.type=="turn_end") | .message.usage | keys | sort' \
179
+ scripts/regression/results/03-rpc-protocol.log | sort -u
180
+
181
+ # 对比不同 pi 版本
182
+ diff <(jq -c '...' results-v0.80.log) <(jq -c '...' results-v0.85.log)
183
+ ```
184
+
185
+ ## 与 aicode-plugin-swing 的关系
186
+
187
+ | 层 | 测试位置 |
188
+ |---|---|
189
+ | aicode CLI 功能(命令/扩展/skills) | 本套件(scripts/regression/) |
190
+ | RPC 协议兼容性 | 本套件 case 03 ⭐ |
191
+ | Kotlin 客户端逻辑 | `~/icode/aicode-idea-plugin-swing/src/test/kotlin/com/nu/aicode/rpc/` |
192
+ | 升级兼容性评估 | `~/icode/aicode-idea-plugin-swing/docs/spec/upgrade-code-agent-cli-to-pi-085.md` |
193
+ | 端到端 IDE 集成 | aicode-plugin-swing 实际 IDE 测试 |
194
+
195
+ **本套件(CLI 侧)+ Kotlin 单元测试 + 实际 IDE 集成 = 完整回归链路。**
196
+
197
+ ## 添加新 case
198
+
199
+ 1. 复制 `cases/06-tool-execution.sh` → `cases/08-my-feature.sh`
200
+ 2. 修改 `CURRENT_CASE`
201
+ 3. 调用 `source "$SCRIPT_DIR/../lib/common.sh"`
202
+ 4. 用 `pass` / `fail` / `skip` 报告结果
203
+ 5. 最后 `summary; exit $?`
204
+
205
+ ## 添加新的 RPC 命令到 case 03
206
+
207
+ 编辑 `03-rpc-protocol.sh` 的 `RPC_COMMANDS` 数组:
208
+
209
+ ```bash
210
+ RPC_COMMANDS=(
211
+ ...
212
+ "my_new_command|{\"foo\":\"bar\"}"
213
+ )
214
+ ```
215
+
216
+ 格式:`type|payload`,payload 会拼到 `{...,"id":"rpcN"}` 中。
217
+
218
+ ## 修订记录
219
+
220
+ | 日期 | 修订 |
221
+ |---|---|
222
+ | 2026-09-12 | 初版:6 个 case |
223
+ | 2026-09-12 v2 | 新增 case 03 RPC 协议兼容性矩阵(17 命令 + 11 事件 + schema)|
224
+ | 2026-09-12 v2 | 重新编号:03 RPC / 04 prompt / 05 slash / 06 tool / 07 pi-new |
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env bash
2
+ # 01-version-and-deps.sh
3
+ # 验证:aicode 二进制版本 + 内嵌 pi 包版本
4
+ # 这是回归测试的入口,确认我们用的版本符合预期
5
+
6
+ set -uo pipefail
7
+ CURRENT_CASE="01-version-and-deps"
8
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
9
+ source "$SCRIPT_DIR/../lib/common.sh"
10
+
11
+ header "$CURRENT_CASE" "version & pi dependencies"
12
+
13
+ # ----- Test 1: aicode -v 输出 -----
14
+ header "$CURRENT_CASE" "aicode binary"
15
+ if ! command -v "$AICODE_BIN" >/dev/null 2>&1; then
16
+ fail "aicode 二进制存在" "未找到 $AICODE_BIN,设 AICODE_BIN 环境变量"
17
+ summary
18
+ exit 1
19
+ fi
20
+ pass "aicode 二进制存在 ($AICODE_BIN)"
21
+
22
+ VERSION=$("$AICODE_BIN" -v 2>&1 | head -1)
23
+ echo " version: $VERSION"
24
+
25
+ if [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-z0-9.]+)?$ ]]; then
26
+ pass "版本号格式合规 ($VERSION)"
27
+ else
28
+ fail "版本号格式合规" "got: $VERSION"
29
+ fi
30
+
31
+ # ----- Test 2: 内嵌 pi 包版本 -----
32
+ header "$CURRENT_CASE" "pi package dependencies"
33
+
34
+ # 找到 aicode 安装路径里的 package.json
35
+ AICODE_PATH=$(command -v "$AICODE_BIN")
36
+ # 解析 symlink
37
+ if [[ -L "$AICODE_PATH" ]]; then
38
+ AICODE_PATH=$(readlink "$AICODE_PATH")
39
+ fi
40
+
41
+ # 找 package.json
42
+ RESOLVED_PATH=$(node -e "
43
+ const path = require('path');
44
+ const fs = require('fs');
45
+ let p = '$AICODE_PATH';
46
+ // aicode -> ../lib/node_modules/@ia-ccun/code-agent-cli/bin/cli.js
47
+ if (p.includes('/lib/node_modules/')) {
48
+ p = p.split('/lib/node_modules/')[0] + '/lib/node_modules/@ia-ccun/code-agent-cli';
49
+ } else if (p.includes('/.bin/')) {
50
+ p = path.join(path.dirname(p), '..', 'lib', 'node_modules', '@ia-ccun', 'code-agent-cli');
51
+ }
52
+ try {
53
+ const pkg = JSON.parse(fs.readFileSync(path.join(p, 'package.json'), 'utf8'));
54
+ console.log(p);
55
+ console.log(JSON.stringify(pkg.dependencies || {}));
56
+ } catch (e) { console.error(e.message); process.exit(1); }
57
+ " 2>&1) || {
58
+ fail "解析 aicode 安装路径" "node 解析失败"
59
+ summary
60
+ exit 1
61
+ }
62
+
63
+ AICODE_ROOT=$(echo "$RESOLVED_PATH" | head -1)
64
+ DEPS_JSON=$(echo "$RESOLVED_PATH" | tail -1)
65
+ echo " install path: $AICODE_ROOT"
66
+ echo " declared deps: $DEPS_JSON"
67
+
68
+ # 检查 4 个核心 pi 包
69
+ for pkg in @earendil-works/pi-agent-core @earendil-works/pi-ai @earendil-works/pi-coding-agent @earendil-works/pi-tui; do
70
+ declared=$(echo "$DEPS_JSON" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('$pkg','MISSING'))" 2>/dev/null)
71
+ if [[ "$declared" == "MISSING" || -z "$declared" ]]; then
72
+ fail "$pkg 已在 dependencies 声明" "declared: $declared"
73
+ continue
74
+ fi
75
+ pass "$pkg declared as $declared"
76
+
77
+ # 检查实际安装版本
78
+ actual=$("$AICODE_ROOT/node_modules/$pkg/package.json" -e "console.log(require('$AICODE_ROOT/node_modules/$pkg/package.json').version)" 2>/dev/null)
79
+ if [[ -n "$actual" ]]; then
80
+ # 解析 semver 主要版本
81
+ declared_major=$(echo "$declared" | sed -E 's/^[^0-9]*([0-9]+).*/\1/')
82
+ actual_major=$(echo "$actual" | sed -E 's/^[^0-9]*([0-9]+).*/\1/')
83
+ if [[ "$declared_major" == "$actual_major" ]]; then
84
+ pass "$pkg 安装版本 $actual 满足 ^$declared_major"
85
+ else
86
+ fail "$pkg 主版本一致" "declared major=$declared_major | actual=$actual"
87
+ fi
88
+ else
89
+ fail "$pkg 实际安装版本" "无法读取 $AICODE_ROOT/node_modules/$pkg/package.json"
90
+ fi
91
+ done
92
+
93
+ summary
94
+ exit $?