@ia-ccun/code-agent-cli 0.0.52 → 0.0.53-beta.1

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 (75) hide show
  1. package/bin/cli.js +6 -2
  2. package/config/agent/bin/README.md +102 -0
  3. package/config/agent/extensions/aicode-advisor.ts +13 -0
  4. package/config/agent/extensions/aicode-btw.ts +66 -14
  5. package/config/agent/extensions/aicode-cd.ts +834 -0
  6. package/config/agent/extensions/aicode-grillMe.ts +198 -0
  7. package/config/agent/extensions/aicode-pets.ts +362 -0
  8. package/config/agent/extensions/aicode-safety-guard.ts +552 -0
  9. package/config/agent/extensions/aicode-tips.ts +70 -16
  10. package/config/agent/extensions/aicode-todo-progress.ts +547 -0
  11. package/config/agent/extensions/custom.ts +93 -95
  12. package/config/agent/extensions/error-monitor.ts +1 -18
  13. package/config/agent/extensions/ponytail.ts +441 -0
  14. package/config/agent/extensions/tps.ts +87 -0
  15. package/config/agent/extensions/working-msg.ts +165 -50
  16. package/config/agent/help.md +0 -7
  17. package/config/agent/models.json +7 -7
  18. package/config/agent/settings.json +2 -1
  19. package/config/agent/skills/chroma/LICENSE +21 -0
  20. package/config/agent/skills/chroma/chroma-local/SKILL.md +165 -0
  21. package/config/agent/skills/chroma/chroma-local/cli.md +48 -0
  22. package/config/agent/skills/chroma/chroma-local/data-model.md +103 -0
  23. package/config/agent/skills/chroma/chroma-local/error-handling/python.md +166 -0
  24. package/config/agent/skills/chroma/chroma-local/error-handling/typescript.md +231 -0
  25. package/config/agent/skills/chroma/chroma-local/local-chroma/python.md +95 -0
  26. package/config/agent/skills/chroma/chroma-local/local-chroma/typescript.md +101 -0
  27. package/config/agent/skills/chroma/chroma-local/metadata/python.md +154 -0
  28. package/config/agent/skills/chroma/chroma-local/metadata/typescript.md +153 -0
  29. package/config/agent/skills/chroma/chroma-local/querying/python.md +147 -0
  30. package/config/agent/skills/chroma/chroma-local/querying/typescript.md +157 -0
  31. package/config/agent/skills/chroma/chroma-local/regex/python.md +69 -0
  32. package/config/agent/skills/chroma/chroma-local/regex/typescript.md +71 -0
  33. package/config/agent/skills/chroma/chroma-local/understanding-a-codebase.md +80 -0
  34. package/config/agent/skills/chroma/chroma-local/updating-deleting/python.md +159 -0
  35. package/config/agent/skills/chroma/chroma-local/updating-deleting/typescript.md +228 -0
  36. package/config/agent/skills/milvus-skill/LICENSE +202 -0
  37. package/config/agent/skills/milvus-skill/README.md +37 -0
  38. package/config/agent/skills/milvus-skill/SKILL.md +259 -0
  39. package/config/agent/skills/milvus-skill/references/collection.md +86 -0
  40. package/config/agent/skills/milvus-skill/references/database.md +24 -0
  41. package/config/agent/skills/milvus-skill/references/index.md +69 -0
  42. package/config/agent/skills/milvus-skill/references/partition.md +29 -0
  43. package/config/agent/skills/milvus-skill/references/patterns.md +150 -0
  44. package/config/agent/skills/milvus-skill/references/user-role.md +90 -0
  45. package/config/agent/skills/milvus-skill/references/vector.md +247 -0
  46. package/config/agent/skills/ponytail/SKILL.md +100 -0
  47. package/config/agent/skills/ponytail-audit/SKILL.md +40 -0
  48. package/config/agent/skills/ponytail-debt/SKILL.md +44 -0
  49. package/config/agent/skills/ponytail-help/SKILL.md +68 -0
  50. package/config/agent/skills/ponytail-review/SKILL.md +56 -0
  51. package/config/agent/skills/zread/README.md +115 -0
  52. package/config/agent/skills/zread/SKILL.md +103 -0
  53. package/config/agent/skills/zread/references/stdio-protocol.md +312 -0
  54. package/package.json +7 -6
  55. package/scripts/postinstall.js +58 -1
  56. package/scripts/regression/README.md +224 -0
  57. package/scripts/regression/cases/01-version-and-deps.sh +94 -0
  58. package/scripts/regression/cases/02-extension-loading.sh +130 -0
  59. package/scripts/regression/cases/03-rpc-protocol.sh +259 -0
  60. package/scripts/regression/cases/04-prompt-stream.sh +130 -0
  61. package/scripts/regression/cases/05-slash-commands-and-skills.sh +119 -0
  62. package/scripts/regression/cases/06-tool-execution.sh +115 -0
  63. package/scripts/regression/cases/07-pi-new-features.sh +141 -0
  64. package/scripts/regression/lib/common.sh +287 -0
  65. package/scripts/regression/results/.last_pid +1 -0
  66. package/scripts/regression/results/.last_workdir +1 -0
  67. package/scripts/regression/results/02-extension-loading.log +29 -0
  68. package/scripts/regression/results/03-prompt-stream.log +25 -0
  69. package/scripts/regression/results/03-rpc-protocol.log +38 -0
  70. package/scripts/regression/results/04-slash-commands-and-skills.log +10 -0
  71. package/scripts/regression/results/05-tool-execution.log +6 -0
  72. package/scripts/regression/results/06-pi-new-features.log +33 -0
  73. package/scripts/regression/run-all.sh +187 -0
  74. package/config/agent/dangerous-patterns.json +0 -106
  75. package/config/agent/extensions/bash-check.ts +0 -227
@@ -10,11 +10,13 @@ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-a
10
10
 
11
11
  const AICODE_TIPS = [
12
12
  "@ 快速搜索项目文件",
13
- "Ctrl+L 快速切换模型",
13
+ "Ctrl+L 快速切换备选模型",
14
14
  "Ctrl+P/Shift+Ctrl+P 切换范围模型",
15
- "Shift+Tab 切换思考级别",
15
+ "Shift+Tab 切换思考级别( 需 models.json配置 reasoning 启用)",
16
16
  "Ctrl+O 展开/折叠工具输出",
17
- "Ctrl+T 展开/折叠思考块",
17
+ "Ctrl+U 清空行内光标前的内容",
18
+ "Ctrl+K 清空行内光标后的内容",
19
+ "Ctrl+G 使用高级编辑器进行输入(如vscode), 适合手工输入多行、多段文字的场景",
18
20
  "Alt+Enter 队列跟进消息",
19
21
  "Shift+Enter 输入多行",
20
22
  "/ 查看所有命令",
@@ -34,6 +36,7 @@ const AICODE_TIPS = [
34
36
  "/resume 恢复会话",
35
37
  "/fork 创建会话新分支",
36
38
  "Ctrl+C 清空编辑器",
39
+ "CTRL+ALT+SHIFT+P 开启/关闭 计划模式(只读模式)",
37
40
  "双击 Esc 打开树视图",
38
41
  "拖拽文件到终端附加",
39
42
  // 扩展命令提示
@@ -43,6 +46,7 @@ const AICODE_TIPS = [
43
46
  "/clear 清理当前会话",
44
47
  "/quit 退出当前会话",
45
48
  // 常用 Prompt 提示
49
+ "解读下这个图片内容 /home/user/pic/plan.png",
46
50
  "/code-simplifier 自动简化刚修改的代码,提升清晰度和一致性",
47
51
  "/feat 新功能开发,支持需求规划→讨论迭代→执行实施完整流程(推荐使用)",
48
52
  "/git-commit 分析 Git 改动并生成 Conventional Commits 规范提交信息(推荐使用)",
@@ -94,11 +98,44 @@ const AICODE_TIPS = [
94
98
  "/btw 并行侧边对话,可在不中断主流程的情况下进行临时讨论或查询 ",
95
99
  "/rewind 回退到任意工具执行前的状态,支持快照恢复和撤销重做 ",
96
100
  "/mcp 连接现有的 MCP 服务器 (如 xx 平台、企业微信等等),扩展 AI 能力支持多种外部工具和服务 ",
101
+ // 新增扩展命令提示
102
+ "/cd 路径 切换会话工作目录,快速跳转不同项目",
103
+ "/grill-me 启动设计访谈,系统收集需求并生成决策文档",
104
+ "/ponytail 开启极简模式,强制 AI 用最少代码解决问题",
105
+ "💡 多步骤任务会自动显示待办进度条,实时跟踪完成情况",
106
+ "💡 需要理解陌生代码库时说'帮我解读这个项目',自动构建知识图谱",
107
+ "💡 autoresearch:自动实验循环,持续优化参数直到收敛",
108
+ "🛡️ 安全围栏已默认启用,自动拦截危险操作(rm -rf、git reset --hard 等)",
109
+ // 新增扩展功能提示
110
+ "Alt+/ 或 Ctrl+Alt+W 快速切换到 BTW 侧边对话窗口",
111
+ "BTW 侧边对话:独立上下文,不影响主会话,适合临时查询和讨论",
112
+ "/advisor 可向更强的审查模型征求第二意见,用于复杂决策和方案评估 ",
113
+ "/plan 进入计划模式,强制只读分析流程,生成结构化实施计划(推荐使用)",
114
+ "计划模式禁止写入操作,确保方案经过充分分析后再执行",
115
+ "计划模式自动生成 Todo 列表,跟踪实施步骤和完成进度",
116
+ "/goal 设置长期目标,跟踪进度、时间和 token 消耗",
117
+ "/goal --tokens=50K 设置带 token 预算限制的目标",
118
+ "Goal 扩展支持 paused/resumed 状态,方便暂停和恢复长期任务 (推荐使用)",
119
+ "Goal 扩展显示实时进度:已完成百分比、已用时间和 token 消耗 (推荐使用)",
120
+ "⚠️ 使用 advisor 获取第二视角评估,避免决策盲点",
121
+ "⚠️ 使用 plan 模式强制分析流程,避免冲动式编码(推荐使用)",
122
+ "⚠️ 使用 goal 跟踪长期任务,避免AI自以为是类的完成,AI若完成必须给出证据",
123
+ "⚠️ BTW 侧边对话适合临时讨论,不会污染主会话上下文",
124
+ // 使用场景和最佳实践
125
+ "💡 大型重构任务:先用 /plan 制定计划,再用 /advisor 评估方案风险",
126
+ "💡 长期开发任务:用 /goal 设置目标并跟踪进度,避免 token 超支",
127
+ "💡 临时查询需求:打开 BTW 侧边对话,不影响主会话",
128
+ "💡 复杂决策场景:用 advisor 工具获取第二视角,避免思维盲点",
129
+ "💡 代码审查流程:用 /skill:code-review + advisor 双重审查确保质量",
130
+ "💡 新功能开发:用 /feat prompt 启动完整需求规划流程",
131
+ "💡 性能优化:用 /skill:audit 全面审计界面质量和性能瓶颈",
132
+ "💡 安全审计:用 /skill:owasp-security 检查 OWASP Top 10 漏洞",
133
+ "💡 文档生成:用 /skill:writing-plans 生成详细实施文档",
134
+ "💡 测试覆盖:用 /skill:test-runner 编写和运行多框架测试",
135
+ "💡 会话整理:用 /clear 清理上下文,用 /compact 压缩历史消息",
97
136
  // 消息传递模式提示
98
137
  "Enter 插话消息 - 在工具执行后立即发送,中断 AI 思考流程",
99
- "Alt+Enter 排队消息 - 等待 AI 完全结束后发送,不中断 AI 工作",
100
138
  "Escape 中断当前 AI 并恢复编辑器中的排队消息",
101
- "Alt+Up 查看并编辑所有排队的消息",
102
139
  "插话消息会打断 AI 正在执行的工具,等待响应",
103
140
  "排队消息静默等待,AI 空闲时自动发送",
104
141
  "可在 /settings 中调整消息发送模式和行为偏好",
@@ -106,11 +143,18 @@ const AICODE_TIPS = [
106
143
  "💡 记忆功能自动记录会话中的关键经验,下次会话自动应用",
107
144
  "💡 在对话中说'记住这个'可手动保存经验到记忆库",
108
145
  "💡 记忆功能支持选择性注入 (selective),只注入相关记忆避免干扰",
109
- "💡 说'忘记 XXX'可删除特定记忆条目",
146
+ "💡 说'忘记 XXX '可删除特定记忆条目",
110
147
  "💡 记忆会在会话结束时自动整合优化,提炼更有价值的经验",
111
148
  "💡 记忆功能示例:记住代码规范后,后续开发自动遵循该规范",
112
149
  "💡 记忆功能示例:记录常见错误模式,主动避免重复犯错",
113
150
  "💡 记忆功能示例:保存项目特定配置,新会话自动加载上下文",
151
+ // 安全和最佳实践提示
152
+ "⚠️ 目前模型算力有限,部分任务可能存在排队等待的情况,若出现卡顿请稍后重试",
153
+ "⚠️ 执行 shell 命令前会自动检测是否为 safe command,非安全命令需要确认",
154
+ "⚠️ Banner 启动时显示当前版本、模型配置和常用命令,方便快速查看环境",
155
+ "⚠️ 使用 !! 前缀执行 bash 命令不会将输出发送给 AI,适合敏感操作",
156
+ // CodeGraph 使用方法(推荐使用)
157
+ "🔗 创建本地索引目录并构建知识图谱,操作说明 参考 UniDoc《2026.5 aicode+codegraph 安装与使用》 ",
114
158
  // Subagent 使用方法
115
159
  "🤖 说'使用 subagent 探索当前代码关于权限校验的实现'可快速定位相关代码",
116
160
  "🤖 说'使用 subagent 为这个功能制定实施计划'可生成详细的开发步骤",
@@ -119,6 +163,7 @@ const AICODE_TIPS = [
119
163
  "🤖 说'使用 subagent 给这个方案提点意见'可获得第二视角的评估建议",
120
164
  // 联系方式提示
121
165
  "⚠️ 任何疑问或需求可联系 xujianjiang,支持需求对接开发、系统集成与扩展",
166
+ "⚠️ aicode 图像识别参考 UniDoc《2026.03 AICode Agent CLI 编码智能体使用手册》的model.json模型配置",
122
167
  "⚠️ 内网手册参考 UniDoc《2026.03 AICode Agent CLI 编码智能体使用手册》",
123
168
  "⚠️ LLM API 4xx/5xx 错误时请确认模型配置是否正确,或在企微群咨询 jiangchi、maliang",
124
169
  ];
@@ -127,7 +172,7 @@ export default function (pi: ExtensionAPI) {
127
172
  let currentTipIndex = -1;
128
173
  let autoHideTimeoutId: NodeJS.Timeout | undefined;
129
174
  let autoShowTimeoutId: NodeJS.Timeout | undefined;
130
- let currentCtx: ExtensionContext | undefined;
175
+ let currentUI: any = undefined; // 保存当前有效的 UI context
131
176
  let isAutoPlaying = false;
132
177
 
133
178
  // 基于 #49bccf (73, 188, 207) 的随机颜色生成
@@ -141,8 +186,8 @@ export default function (pi: ExtensionAPI) {
141
186
  };
142
187
 
143
188
  const hideTip = () => {
144
- if (!currentCtx?.hasUI) return;
145
- currentCtx.ui.setWidget("aicode-tips", [], { placement: "aboveEditor" });
189
+ if (!currentUI) return;
190
+ currentUI.setWidget("aicode-tips", [], { placement: "aboveEditor" });
146
191
  };
147
192
 
148
193
  const clearAllTimers = () => {
@@ -165,7 +210,7 @@ export default function (pi: ExtensionAPI) {
165
210
  };
166
211
 
167
212
  const showRandomTip = (isInternalCall = false) => {
168
- if (!currentCtx?.hasUI) return;
213
+ if (!currentUI) return;
169
214
 
170
215
  // 清除之前的定时器(但内部轮播调用时不清除,避免中断轮播)
171
216
  if (!isInternalCall) {
@@ -181,11 +226,20 @@ export default function (pi: ExtensionAPI) {
181
226
  // 使用随机颜色
182
227
  const color = getRandomTipColor();
183
228
  const coloredTip = `${color}tips: ${tip}\x1b[0m`;
184
- currentCtx.ui.setWidget("aicode-tips", [coloredTip], { placement: "aboveEditor" });
229
+ currentUI.setWidget("aicode-tips", [coloredTip], { placement: "aboveEditor" });
185
230
 
186
231
  // 自动轮播:10 秒后直接显示下一条
187
232
  if (isAutoPlaying) {
188
- autoHideTimeoutId = setTimeout(() => showRandomTip(true), 10000);
233
+ autoHideTimeoutId = setTimeout(() => {
234
+ try {
235
+ showRandomTip(true);
236
+ } catch (error) {
237
+ // 如果出现错误(比如 stale context),清理定时器
238
+ console.error('aicode-tips extension error:', error);
239
+ stopAutoPlay();
240
+ currentUI = undefined;
241
+ }
242
+ }, 10000);
189
243
  }
190
244
  };
191
245
 
@@ -201,22 +255,22 @@ export default function (pi: ExtensionAPI) {
201
255
 
202
256
  // 会话开始时启动自动轮播
203
257
  pi.on("session_start", (_event, ctx) => {
204
- currentCtx = ctx;
258
+ currentUI = ctx.ui;
205
259
  startAutoPlay();
206
260
  });
207
261
 
208
262
  // 会话结束时清理
209
263
  pi.on("session_shutdown", () => {
210
264
  stopAutoPlay();
211
- currentCtx?.ui.setWidget("aicode-tips", undefined);
212
- currentCtx = undefined;
265
+ currentUI?.setWidget("aicode-tips", undefined);
266
+ currentUI = undefined;
213
267
  });
214
268
 
215
269
  // 手动切换技巧
216
270
  pi.registerCommand("tip", {
217
271
  description: "显示一个新的 aicode 使用技巧",
218
272
  handler: async (_args, ctx) => {
219
- currentCtx = ctx;
273
+ currentUI = ctx.ui;
220
274
  showRandomTip();
221
275
  },
222
276
  });