superun-ai-cli 0.1.10 → 0.1.13

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 (71) hide show
  1. package/README.md +128 -2
  2. package/dist/api/agent-command-api.js +11 -1
  3. package/dist/api/agent-command-api.js.map +1 -1
  4. package/dist/api/agent-query-api.d.ts +6 -0
  5. package/dist/api/agent-query-api.js +18 -0
  6. package/dist/api/agent-query-api.js.map +1 -1
  7. package/dist/commands/chat/index.js +4 -0
  8. package/dist/commands/chat/index.js.map +1 -1
  9. package/dist/commands/chat/message.d.ts +1 -1
  10. package/dist/commands/chat/message.js +64 -5
  11. package/dist/commands/chat/message.js.map +1 -1
  12. package/dist/commands/chat/review.d.ts +4 -0
  13. package/dist/commands/chat/review.js +7 -0
  14. package/dist/commands/chat/review.js.map +1 -0
  15. package/dist/commands/chat/send.js +4 -1
  16. package/dist/commands/chat/send.js.map +1 -1
  17. package/dist/commands/chat/style.js +1 -1
  18. package/dist/commands/chat/test.d.ts +4 -0
  19. package/dist/commands/chat/test.js +7 -0
  20. package/dist/commands/chat/test.js.map +1 -0
  21. package/dist/commands/chat/wait.js +8 -1
  22. package/dist/commands/chat/wait.js.map +1 -1
  23. package/dist/commands/system/update.d.ts +1 -1
  24. package/dist/commands/system/update.js +1 -1
  25. package/dist/commands/system/update.js.map +1 -1
  26. package/dist/contracts/cli-output.d.ts +23 -1
  27. package/dist/conversation/auto-test-tasks.d.ts +14 -0
  28. package/dist/conversation/auto-test-tasks.js +120 -0
  29. package/dist/conversation/auto-test-tasks.js.map +1 -0
  30. package/dist/conversation/auto-test.d.ts +14 -0
  31. package/dist/conversation/auto-test.js +25 -0
  32. package/dist/conversation/auto-test.js.map +1 -0
  33. package/dist/conversation/check-context.d.ts +20 -0
  34. package/dist/conversation/check-context.js +67 -0
  35. package/dist/conversation/check-context.js.map +1 -0
  36. package/dist/conversation/check-question-context.d.ts +4 -0
  37. package/dist/conversation/check-question-context.js +57 -0
  38. package/dist/conversation/check-question-context.js.map +1 -0
  39. package/dist/conversation/code-review.d.ts +14 -0
  40. package/dist/conversation/code-review.js +26 -0
  41. package/dist/conversation/code-review.js.map +1 -0
  42. package/dist/conversation/next-actions.d.ts +3 -1
  43. package/dist/conversation/next-actions.js +167 -10
  44. package/dist/conversation/next-actions.js.map +1 -1
  45. package/dist/conversation/round-selector.d.ts +2 -0
  46. package/dist/conversation/round-selector.js +9 -2
  47. package/dist/conversation/round-selector.js.map +1 -1
  48. package/dist/conversation/session-waiter.js +6 -4
  49. package/dist/conversation/session-waiter.js.map +1 -1
  50. package/dist/conversation/task-progress-reader.d.ts +9 -2
  51. package/dist/conversation/task-progress-reader.js +54 -3
  52. package/dist/conversation/task-progress-reader.js.map +1 -1
  53. package/dist/interactions/handlers/reply-universal-ask.js +25 -1
  54. package/dist/interactions/handlers/reply-universal-ask.js.map +1 -1
  55. package/dist/output/task-reminder.d.ts +12 -0
  56. package/dist/output/task-reminder.js +35 -0
  57. package/dist/output/task-reminder.js.map +1 -0
  58. package/dist/output/writer.d.ts +6 -1
  59. package/dist/output/writer.js +42 -1
  60. package/dist/output/writer.js.map +1 -1
  61. package/dist/runner.js +21 -1
  62. package/dist/runner.js.map +1 -1
  63. package/dist/runtime.d.ts +4 -0
  64. package/dist/runtime.js +219 -33
  65. package/dist/runtime.js.map +1 -1
  66. package/dist/update/version-gate.js +43 -56
  67. package/dist/update/version-gate.js.map +1 -1
  68. package/package.json +1 -1
  69. package/dist/update/update-lock.d.ts +0 -1
  70. package/dist/update/update-lock.js +0 -57
  71. package/dist/update/update-lock.js.map +0 -1
package/README.md CHANGED
@@ -84,6 +84,8 @@ superun-ai
84
84
  ├── chat # 对话创作
85
85
  │ ├── create # 新建项目并发送需求
86
86
  │ ├── send <sessionId> # 继续项目创作
87
+ │ ├── test <sessionId> # 自动测试已有功能并修复确认的问题
88
+ │ ├── review <sessionId> # 审查已有代码并修复确认的问题
87
89
  │ ├── state <sessionId> # 查询当前任务和交互
88
90
  │ ├── wait <sessionId> # 等待当前交互或任务结果
89
91
  │ ├── stop <sessionId> # 停止远端任务
@@ -167,6 +169,10 @@ superun-ai chat stop <sessionId>
167
169
 
168
170
  `chat wait` 及写命令的默认等待期间,每轮查询的进度都通过 stderr 逐行输出 JSON 事件:`event: "task_progress"`,卡片位于 `data.taskProgress.markdown`。接入 Agent 应持续读取运行中命令的输出并展示全部任务;支持原位更新时按 `taskProgress.id` 更新同一张卡,否则每次展示当前快照,即使 `changed: false` 也不省略。进度事件不是最终结果,应继续等待当前进程,不中断或重新提交任务。stdout 仍只输出一次命令结果。
169
171
 
172
+ 顶层在认证完成、进入等待型业务命令后启动独立的通用定时器,每隔 5 分钟通过 stderr 输出 `task_reminder`,固定文案为“任务还在进行中,可以去 superun.ai 查看详情。”。接入 Agent 应立即原样展示 `data.message`,将 `superun.ai` 链接到 `data.url`;同一 `data.id` 去重,不同 ID 即使文案相同也要再次展示。进度更新不重置计时;命令返回结果(包括需要用户回答、本地等待超时)、报错或中断时统一清理定时器。计时范围为当前 CLI 持续等待的进程,重新启动进程会重新计时。定时器只输出提醒,不参与业务查询、状态判断、超时或重试;`--no-wait` 和只读查询不会启动定时器,业务命令无需额外参数。
173
+
174
+ 需要用户回答或选择时停止计时,用户处理问题的时间不计入下一轮等待。使用 `--input -` 等待输入需求或回答期间也不启动定时器;输入完成并继续执行后重新从 0 计时。
175
+
170
176
  整体结束判断沿用原有会话、消息、交互和后台工作状态逻辑,`taskProgress` 仅用于展示;单项完成或进度卡更新不会结束等待,也不以进度条目数量推断整轮完成。原有单个风格方案就绪提示、本地等待超时及用户问答行为保持不变。`--progress-revision` 可传入上次版本用于计算 `changed`,但不抑制每次查询的进度输出;`chat state` 与 `chat style list` 同样支持该参数。
171
177
 
172
178
  默认连接 Superun 服务。全局参数 `--endpoint <URL>` 可指定 API 地址,`--locale <language>` 可指定响应语言。
@@ -195,6 +201,122 @@ superun-ai chat interaction skip <sessionId> <interactionId>
195
201
 
196
202
  `chat interaction reply --no-wait` 控制回答处理完成后的创作等待。部分插件配置需要在前台等待配置结束并提交交互结果,这一步不会因该选项被省略;中断后应先查询插件与会话状态。
197
203
 
204
+ ## 自动测试
205
+
206
+ 自动测试验证指定 Superun 项目中的已有功能。发现确认的产品问题后,先在对话中告知,再自动修复并汇报。每次聚焦一个具体流程;测试环境异常、疑似问题和未覆盖范围会如实说明。
207
+
208
+ ```bash
209
+ superun-ai chat test <sessionId>
210
+ superun-ai chat test <sessionId> --message "验证登录和退出流程"
211
+ superun-ai chat test <sessionId> --input ./test-scope.json --no-wait
212
+ superun-ai chat wait <sessionId> --timeout 120
213
+ superun-ai chat state <sessionId>
214
+ ```
215
+
216
+ 不传内容时发送“帮我测一下刚才完成的功能。”;`--message` 与 `--input` 只能选一个,JSON 形状与 `chat send` 相同,支持附件。指定内容原样发送,空白内容会被拒绝。测试使用 `business_type=auto_test`,默认等待测试、结果回传及必要的修复结束;运行中不得重复发起。探索阶段和待回答交互先按当前流程处理。
217
+
218
+ 每次研发完成后,引导用户选择“代码审查 / 自动测试 / 继续创作 / 上线运营”。用户明确要求“自动测试”“测一下刚才的功能”后直接调用;指定范围时将原文作为内容提交。讨论是否需要测试不等于要求执行。普通主动调用不承诺免费。
219
+
220
+ 结果中的 `autoTest.phase` 区分 `test` 与后续 `repair`,`autoTest.reportMessages` 保留本次最新报告,`messages` 保留对话内容。`autoTest.sourceMessageId` 用于后续回复来源校验;`previousReportMessages` 如有返回,仅用于追溯上一份报告的编号和问题,不能替代本次结果。会话 `COMPLETED` 只表示操作结束,不表示测试通过。CLI 不从正文关键词推断结构化通过数或修复状态,由接入 Agent 依据实际报告按以下规则展示。
221
+
222
+ 有问题时统一使用模板,数字与详情必须有实际依据,缺失时如实说明,不补零:
223
+
224
+ > 本次自动测试发现 **2 个问题,已修复 1 个,未修复 1 个**。
225
+ >
226
+ > 1. **退出后仍可访问个人页面**:已修复,退出后访问个人页面会跳转登录页。
227
+ > 2. **登录失败时没有错误提示**:未修复,原因:……。
228
+
229
+ `nextActions.when` 是候选动作的展示及执行条件。接入 Agent 必须根据当前报告筛选,只向用户展示符合条件的引导,不能将所有候选命令直接列成菜单:
230
+
231
+ | 实际结果 | 后置引导 |
232
+ | --- | --- |
233
+ | 测试有效完成,没有问题;或全部修复且复测通过 | 说明实际范围和验证结果,再说“接下来,你可以继续完善项目,或上线运营。”,展示“继续创作 / 上线运营” |
234
+ | 全部修复,尚未复测 | 逐项列出修复的功能,再说“以上问题已全部修复,尚未复测。接下来,你可以验证修复结果、继续完善项目,或上线运营。”,展示“自动测试 / 继续创作 / 上线运营” |
235
+ | 仍有未修复问题,包括一个都没修复 | 列出修复详情和未修复原因,只引导“修复剩余问题”“修复第 X 项”或用户的具体修改要求 |
236
+ | 需要确认业务规则或补充信息 | 只提出具体问题,等待回答;有结构化交互时使用 `chat interaction reply` |
237
+ | 测试异常,没有有效结论 | 说明原因,只引导解决阻碍,或者在可重试时回复“重试自动测试”;不提示通过 |
238
+ | 本次承诺范围只完成一部分 | 列出已测和未测流程,只引导指定剩余流程继续验证;范围之外的功能不当作本次未完成 |
239
+
240
+ 存在未修复问题、待确认事项、测试阻碍或结论不明时,不展示“继续创作 / 上线运营”。没有复测证据就不能说复测通过。正常完成时固定出口为:
241
+
242
+ > - **继续创作**:直接告诉我想新增或调整的内容。
243
+ > - **上线运营**:回复“上线运营”。
244
+
245
+ 用户回复“修复第 2 项”“修复剩余问题”或补充处理要求时,按返回的 `AUTO_TEST_FOLLOW_UP` 命令原样提交内容,保留源报告编号;后续修复走普通对话,不重新发起自动测试:
246
+
247
+ ```bash
248
+ superun-ai chat send <sessionId> --test-followup <sourceMessageId> --message "修复第 2 项"
249
+ ```
250
+
251
+ 报告已经被后续对话替换时会拒绝旧来源,需重新查询。修复后继续使用上述结果模板和条件引导;用户要求新增或调整功能时,使用普通 `chat send`,不携带 `--test-followup`。用户选择“上线运营”时,沿用 `chat publish status --for-launch` 的发布流程。
252
+
253
+ 自动测试与修复的等待期间,除了 `task_progress`,stderr 还会输出 `conversation_message` 事件,`data.messages` 是新出现或正文变化的实际消息。接入 Agent 应及时展示发现的问题及修复前告知,同一消息 ID 更新正文,避免重复追加;事件不表示整体完成,不中断等待、不展示后置菜单。stdout 仍只输出一次最终 JSON。
254
+
255
+ 自动测试可能使用独立后台任务,主消息结束、子会话列表为空都不代表测试完成。CLI 通过服务端已解析的消息快照识别实际启动的 E2E 任务,等待其结果回传及主会话处理结束;回执按任务与父轮的真实关联恢复测试上下文。报告中附带的网页操作入口由 CLI 当前后置引导替换。
256
+
257
+ ## 代码审查
258
+
259
+ 代码审查检查指定 Superun 项目的已有代码。未指定范围时检查刚才的改动;指定范围时原样传递用户要求。发现确认的问题后先告知用户,再自动修复并汇报;与用户明确意图冲突的修复先确认业务规则。代码审查与功能的实际运行验证分别表达,不把审查完成或修复完成说成测试、复审通过。
260
+
261
+ ```bash
262
+ superun-ai chat review <sessionId>
263
+ superun-ai chat review <sessionId> --message "检查报名名额扣减和取消后的回补逻辑"
264
+ superun-ai chat review <sessionId> --input ./review-scope.json --no-wait
265
+ superun-ai chat wait <sessionId> --timeout 120
266
+ superun-ai chat state <sessionId>
267
+ ```
268
+
269
+ `--message`、`--input`、附件与等待选项和 `chat test` 一致。业务入口使用 `issue_review`;不传内容时发送“请审查刚才改动的代码,排查潜在缺陷与隐患,并修复发现的问题”。用户明确说“代码审查”或指定审查范围后直接执行,无需二次确认;只有讨论不触发。运行中或存在待回答交互时先处理当前任务,不重复提交。探索阶段先完成研发。普通主动调用不承诺免费。
270
+
271
+ 研发完成后的前置引导为:
272
+
273
+ > 接下来,你可以检查代码、实际验证功能、继续完善项目,或上线运营。
274
+ >
275
+ > - **代码审查**:回复“代码审查”,检查刚才改动的代码,发现问题后先告知你,再自动修复。
276
+ > - **自动测试**:回复“自动测试”,实际验证刚才完成的功能,发现确认的问题后先告知你,再自动修复。
277
+ > - **继续创作**:直接告诉我想新增或调整的内容。
278
+ > - **上线运营**:回复“上线运营”。
279
+
280
+ 审查开始时展示实际范围与关注点;发现问题时逐项告知,再展示正在修复的说明。通过 `conversation_message` 及时展示这些实际消息,用户不需要再次回复修复。CLI 等待后台审查、结果回传及主会话的修复和汇报全部结束;子审查终态但回执尚未处理时,继续等待并显示进度。
281
+
282
+ 回执按持久化的任务与父消息关联逐层回溯;即使来源消息已被隐藏或并入其他展示轮,也只返回本次最新报告。来源缺失、冲突或循环时明确报错,不用最近的历史审查结果代替。
283
+
284
+ 遇到修复方式等确认卡时,先展示对应的问题说明,再展示全部问题和选项。如果展示管线省略了提问前的正文,CLI 从同一条消息的服务端解析快照恢复该提问对应的可见说明;不读取模型推理,不用旧报告替代当前确认依据。
285
+
286
+ 结果使用 `codeReview.phase=review|repair` 区分审查与后续修复,`reportMessages` 是本次最新结果,`previousReportMessages` 如有返回仅用于追溯问题编号。`sourceMessageId` 校验后续回复来源。`nextActions.when` 是候选动作的展示和执行条件,接入 Agent 应按实际报告筛选,不能直接展示所有候选。无有效报告时不猜问题数或通过状态。
287
+
288
+ 发现问题后,全部修复、部分修复、没有修复都使用同一模板,按服务端原始报告顺序保留编号:
289
+
290
+ > 本次代码审查发现 **2 个问题,已修复 2 个,未修复 0 个**。
291
+ >
292
+ > 1. **重复报名可能重复扣减名额**:已修复,重复提交只处理一次。
293
+ > 2. **重复取消可能多次回补名额**:已修复,同一条报名只回补一次。
294
+ >
295
+ > 以上问题已全部修复。接下来,你可以验证修复效果、继续完善项目,或上线运营。
296
+ >
297
+ > - **自动测试**:回复“自动测试”,验证刚才修复的功能。
298
+ > - **继续创作**:直接告诉我想新增或调整的内容。
299
+ > - **上线运营**:回复“上线运营”。
300
+
301
+ | 当前实际结果 | 后置展示与引导 |
302
+ | --- | --- |
303
+ | 审查有效完成,没有发现问题 | 说明实际范围和结论,再说“接下来,你可以实际验证相关功能、继续完善项目,或上线运营。”;直接给三个选项,自动测试说明为“验证本次审查涉及的功能” |
304
+ | 问题全部修复 | 展示汇总、逐项修复详情和过渡句,直接给上述三个选项;验证状态按实际证据说明,不固定写尚未测试,不声称复审通过 |
305
+ | 部分修复或一个都没修复 | 同一模板列出数量、每项修复内容或未修复原因;只引导“修复剩余问题”“修复第 X 项”或具体修改要求,不显示三个完成选项 |
306
+ | 需要确认业务规则或补充资料 | 说明待确认项与未处理原因,只提出具体问题;有结构化交互时用 `chat interaction reply`,等待用户回答 |
307
+ | 审查异常、暂停、中断或没有有效结论 | 说明真实原因,只引导解决阻碍;可以重试时提示“重试代码审查”,不显示正常完成菜单 |
308
+ | 本次确定的范围只完成一部分 | 列出已审、未审范围及原因,只引导“继续审查……”指定剩余目标;范围之外的功能只说明未覆盖 |
309
+
310
+ 用户回复修复要求时,使用当前结果的 `CODE_REVIEW_FOLLOW_UP` 命令,`content` 原样传递,不重新发起代码审查:
311
+
312
+ ```bash
313
+ superun-ai chat send <sessionId> --review-followup <sourceMessageId> --message "修复第 2 项"
314
+ ```
315
+
316
+ 旧报告已被后续对话替换时拒绝提交,需重新查询。修复结束更新同一份问题清单:全部处理完直接给三个选项,仍有问题继续修复,需要决定就提问。新功能需求用普通 `chat send`,不带任何 followup 参数;`--review-followup` 与 `--test-followup` 不能同时传。
317
+
318
+ 不增加“暂不需要”步骤。用户明确要求“审查完再自动测试”时,在审查及修复有效完成且无遗留问题后沿用已有授权衔接,否则等待用户选择。选择自动测试后沿用自动测试的结果规则;选择上线运营后沿用现有发布流程。当前审查流程不会在修复后自动重复审查同一范围。
319
+
198
320
  ## 风格、插件和发布
199
321
 
200
322
  交互、风格、插件和发布均归属对话创作,统一使用 `chat interaction`、`chat style`、`chat plugin` 和 `chat publish`,不提供对应顶层入口。
@@ -221,7 +343,9 @@ superun-ai chat publish visibility <sessionId> private
221
343
 
222
344
  研发完成后的“查看预览”使用 `development.previewUrl`,返回与 Glow 研发主线一致的稳定地址 `https://id--<sessionId>.<托管域名>`,随主线构建结果更新。研发主线不再查找或等待快照;风格候选和独立演示版本继续使用各自的快照页面。上线运营返回正式发布域名。
223
345
 
224
- 用户选择风格后,`chat style select` 默认内部完成演示就绪等待、演示状态衔接和版本保留,再生成研发规划。调用方只提示“已采用方案 B,正在生成研发规划,完成后请你确认”,不展示演示阶段的提示或额外询问。研发规划内容及“确认规划 / 调整功能”引导保持原样,确认规划后才生成供用户选择的开发功能清单。`--no-wait` 或等待超时返回时,按 `CONTINUE_STYLE_PLANNING` 继续执行 `chat wait`;它会核对当前状态后继续衔接。`chat state` 仍只读,旧项目仍可使用 `chat demo` 和 `chat develop`。
346
+ 用户选择风格后,`chat style select` 默认内部完成演示就绪等待、状态衔接和版本保留,再静默生成并确认研发规划,直接返回开发功能清单。调用方只提示“已采用方案 B,正在整理开发功能清单”,中间不展示演示、研发规划或“确认规划 / 调整功能”入口。清单返回后按原始对话和功能编号展示,提示“请回复要开发的功能编号或具体需求”,等待用户选择后再开发。缺少必要信息、密钥或需要确认数据库变更时仍展示实际问题,等待回答;不自动回答业务问题或选择功能。
347
+
348
+ 自动规划确认仅适用于本次风格选择衔接,并在提交前重新核对当前交互;后续独立的规划调整保留原有确认流程。`--no-wait` 或等待超时返回时,按 `CONTINUE_STYLE_PLANNING` 继续执行 `chat wait`;`chat state` 只读并返回续等指引,不发起确认写请求。旧项目仍可使用 `chat demo` 和 `chat develop`。
225
349
 
226
350
  用户明确回复“上线运营”后,使用 `chat publish status <sessionId> --for-launch` 获取 Glow 发布面板的最新待发布版本,原样展示该版本的 `changeLog`,再按返回的命令直接发布,无需二次确认。发布中的版本只跟踪进度;部署后尚未公开的站点继续执行上线动作,完成后返回正式链接。`status` 始终只读,普通状态查询不会自动获得发布授权。
227
351
 
@@ -267,7 +391,9 @@ superun-ai chat publish visibility <sessionId> private
267
391
 
268
392
  ## 更新
269
393
 
270
- CLI 会在执行业务命令前检查 npm `latest` 版本,与本地版本不同时自动安装该版本并继续执行。更新或校验失败时会停止执行,请根据错误提示处理后重试。帮助、`version` 和 `auth logout` 可离线使用。
394
+ CLI 每次执行业务命令前都查询 npm `latest`,检查本机全局安装的版本。版本不一致或安装不完整时,直接通过 npm 全局更新本机 CLI,校验成功后再执行本次业务命令;已经是最新版则直接执行。更新或校验失败时会停止执行,请根据错误提示处理后重试。帮助、`version` 和 `auth logout` 可离线使用。
395
+
396
+ 自动更新不创建、读取或删除 `update.lock`,也不再向 CLI 自建的 `versions` 缓存安装或从中选择版本运行;新版会实际更新到 npm 全局安装位置。旧缓存中的 CLI 执行到新版更新逻辑时,同样会检查并升级全局入口,避免每次仍从旧版本启动。
271
397
 
272
398
  版本预检和安装统一通过 npm 执行,沿用 npm 的代理和证书配置,并自动重试短暂的网络故障。官方 Registry 不可用时,会尝试用户已配置的 Registry,安装沿用查询成功的源;恢复过程不输出报错或安装日志。所有源均失败时才返回错误,`error.checks` 包含各次检查的原因码,不包含原始 npm 日志或凭据。不会通过关闭证书校验或忽略版本检查来放行业务请求。
273
399
 
@@ -1,4 +1,6 @@
1
1
  import { object } from '../contracts/value.js';
2
+ import { AUTO_TEST_OPERATION_KEY, AUTO_TEST_SOURCE_KEY } from '../conversation/auto-test.js';
3
+ import { CODE_REVIEW_OPERATION_KEY, CODE_REVIEW_SOURCE_KEY } from '../conversation/code-review.js';
2
4
  const PREFIX = '/api/uxa-center/agent/AgentCommand';
3
5
  export class AgentCommandApi {
4
6
  client;
@@ -11,12 +13,20 @@ export class AgentCommandApi {
11
13
  ...(input.sessionId ? { previewVersionId: input.previewVersionId ?? 0 } : {}),
12
14
  mode: input.mode ?? 6,
13
15
  framework: input.framework ?? 6,
14
- roundExtra: { ...input.roundExtra, humanizeVer: '1' },
16
+ roundExtra: {
17
+ [AUTO_TEST_OPERATION_KEY]: 'none',
18
+ [CODE_REVIEW_OPERATION_KEY]: 'none',
19
+ ...input.roundExtra,
20
+ humanizeVer: '1',
21
+ },
15
22
  ...(input.sessionId
16
23
  ? {
17
24
  excludedInheritedRoundExtraKeys: [
18
25
  'stage0Intro',
19
26
  'stage0SkillUnavailable',
27
+ // Center 在合并本轮字段后执行排除;不能把本轮显式写入的来源也删掉。
28
+ ...(input.roundExtra?.[AUTO_TEST_SOURCE_KEY] ? [] : [AUTO_TEST_SOURCE_KEY]),
29
+ ...(input.roundExtra?.[CODE_REVIEW_SOURCE_KEY] ? [] : [CODE_REVIEW_SOURCE_KEY]),
20
30
  ...(input.excludedInheritedRoundExtraKeys ?? []),
21
31
  ],
22
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-command-api.js","sourceRoot":"","sources":["../../src/api/agent-command-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-command-api.js","sourceRoot":"","sources":["../../src/api/agent-command-api.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,12 @@ import type { JsonObject } from '../contracts/value.js';
4
4
  export declare class AgentQueryApi {
5
5
  private readonly client;
6
6
  constructor(client: ApiClient);
7
+ messageReferenceSource(sessionId: string, messageId: string): Promise<{
8
+ messageId: string;
9
+ role: number;
10
+ roundExtra: Record<string, unknown>;
11
+ parsedContents: string[];
12
+ }>;
7
13
  sessions(input: JsonObject): Promise<JsonObject>;
8
14
  extra(sessionId: string): Promise<JsonObject>;
9
15
  snapshots(sessionId: string): Promise<unknown>;
@@ -1,10 +1,28 @@
1
1
  import { list, object, text } from '../contracts/value.js';
2
+ import { z } from 'zod';
3
+ import { parseWire } from '../contracts/node-wire.js';
4
+ import { CliError } from '../output/exit-codes.js';
5
+ const referenceSourcesSchema = z.array(z.object({
6
+ messageId: z.string(),
7
+ role: z.number(),
8
+ roundExtra: z.record(z.unknown()).default({}),
9
+ parsedContents: z.array(z.string()),
10
+ }));
2
11
  const PREFIX = '/api/uxa-center/agent/AgentQuery';
3
12
  export class AgentQueryApi {
4
13
  client;
5
14
  constructor(client) {
6
15
  this.client = client;
7
16
  }
17
+ async messageReferenceSource(sessionId, messageId) {
18
+ const rows = parseWire(referenceSourcesSchema, await this.client.call(`${PREFIX}/batchQueryMessageReferenceSources`, {
19
+ sessionId,
20
+ messageIds: [messageId],
21
+ }));
22
+ if (rows.length !== 1 || rows[0]?.messageId !== messageId || rows[0].role !== 1)
23
+ throw new CliError('PROTOCOL_ERROR', '后台回执的来源消息缺失或不一致,请重新查询当前状态');
24
+ return rows[0];
25
+ }
8
26
  async sessions(input) {
9
27
  return object(await this.client.call(`${PREFIX}/pageQuerySessionByLastId`, input));
10
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"agent-query-api.js","sourceRoot":"","sources":["../../src/api/agent-query-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-query-api.js","sourceRoot":"","sources":["../../src/api/agent-query-api.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import { registerCreate } from './create.js';
2
2
  import { registerSend } from './send.js';
3
+ import { registerTest } from './test.js';
4
+ import { registerReview } from './review.js';
3
5
  import { registerState } from './state.js';
4
6
  import { registerWait } from './wait.js';
5
7
  import { registerStop } from './stop.js';
@@ -13,6 +15,8 @@ export function registerChat(program, context) {
13
15
  const chat = program.command('chat').description('对话创作');
14
16
  registerCreate(chat, context);
15
17
  registerSend(chat, context);
18
+ registerTest(chat, context);
19
+ registerReview(chat, context);
16
20
  registerState(chat, context);
17
21
  registerWait(chat, context);
18
22
  registerStop(chat, context);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/chat/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAuB;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/chat/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,OAAuB;IACpE,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzD,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/B,mBAAmB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACnC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -3,4 +3,4 @@ import type { Command } from 'commander';
3
3
  import type { CommandContext } from '../shared.js';
4
4
  export declare const appendValue: (value: string, previous: Array<string>) => Array<string>;
5
5
  export declare function messageOptions(command: Command): Command;
6
- export declare function sendMessage(context: CommandContext, sessionId: string | undefined, command: Command): Promise<void>;
6
+ export declare function sendMessage(context: CommandContext, sessionId: string | undefined, command: Command, check?: 'test' | 'review'): Promise<void>;
@@ -3,6 +3,9 @@ import { object, text } from '../../contracts/value.js';
3
3
  import { CliError } from '../../output/exit-codes.js';
4
4
  import { uploadAttachment } from '../../api/upload-api.js';
5
5
  import { currentRound, roundMessage } from '../../conversation/round-selector.js';
6
+ import { AUTO_TEST_DEFAULT_MESSAGE, AUTO_TEST_OPERATION_KEY, AUTO_TEST_SOURCE_KEY, } from '../../conversation/auto-test.js';
7
+ import { hasCompletedCreationResult } from '../../conversation/next-actions.js';
8
+ import { CODE_REVIEW_DEFAULT_MESSAGE, CODE_REVIEW_OPERATION_KEY, CODE_REVIEW_SOURCE_KEY, } from '../../conversation/code-review.js';
6
9
  import { runtime, readInput, withWait, waitOptions, businessWrite } from '../shared.js';
7
10
  const inputSchema = z
8
11
  .object({
@@ -28,12 +31,29 @@ export function messageOptions(command) {
28
31
  .option('--input <file>', 'JSON 输入文件,- 表示标准输入')
29
32
  .option('--file <path>', '附加本地文件,可重复使用', appendValue, []));
30
33
  }
31
- export async function sendMessage(context, sessionId, command) {
34
+ export async function sendMessage(context, sessionId, command, check) {
32
35
  const options = object(command.opts());
36
+ const testFollowup = text(options.testFollowup), reviewFollowup = text(options.reviewFollowup);
37
+ if (testFollowup && reviewFollowup)
38
+ throw new CliError('INVALID_ARGUMENT', '不能同时回复自动测试和代码审查报告');
39
+ const followup = reviewFollowup ?? testFollowup;
40
+ const checkKind = check ?? (reviewFollowup ? 'review' : testFollowup ? 'test' : undefined);
41
+ const label = checkKind === 'review' ? '代码审查' : '自动测试';
42
+ const operationKey = checkKind === 'review' ? CODE_REVIEW_OPERATION_KEY : AUTO_TEST_OPERATION_KEY;
43
+ const sourceKey = checkKind === 'review' ? CODE_REVIEW_SOURCE_KEY : AUTO_TEST_SOURCE_KEY;
33
44
  const hasMessage = typeof options.message === 'string', hasInput = typeof options.input === 'string';
34
- if (hasMessage === hasInput)
45
+ if ((hasMessage && hasInput) || (!check && !hasMessage && !hasInput))
35
46
  throw new CliError('INVALID_ARGUMENT', '必须且只能指定 --message 或 --input');
36
- const raw = typeof options.input === 'string' ? await readInput(options.input) : { content: options.message };
47
+ const raw = typeof options.input === 'string'
48
+ ? await readInput(options.input)
49
+ : {
50
+ content: options.message ??
51
+ (check === 'review'
52
+ ? CODE_REVIEW_DEFAULT_MESSAGE
53
+ : check === 'test'
54
+ ? AUTO_TEST_DEFAULT_MESSAGE
55
+ : undefined),
56
+ };
37
57
  const parsed = inputSchema.safeParse(raw);
38
58
  if (!parsed.success || (parsed.data.content !== undefined && parsed.data.message !== undefined))
39
59
  throw new CliError('INVALID_ARGUMENT', '输入只接受 content/message 与 attachments,且内容字段不能重复');
@@ -41,11 +61,31 @@ export async function sendMessage(context, sessionId, command) {
41
61
  const files = z.array(z.string()).parse(options.file);
42
62
  if (!content.trim() && !files.length && !input.attachments.length)
43
63
  throw new CliError('INVALID_ARGUMENT', '需求或附件不能为空');
64
+ if (check && !content.trim())
65
+ throw new CliError('INVALID_ARGUMENT', `${label}范围不能为空;省略 --message 可检查刚才完成的内容`);
44
66
  const service = await runtime(context, command);
67
+ const previous = sessionId && (options.wait !== false || checkKind) ? await service.load(sessionId) : undefined;
68
+ let operation;
69
+ if (checkKind && previous) {
70
+ if (previous.extra.agentRuntime === 'shire')
71
+ throw new CliError('INVALID_ARGUMENT', `当前处于探索阶段,请先完成研发,再对已有功能执行${label}`);
72
+ const current = await service.inspect(previous);
73
+ const currentCheck = checkKind === 'review' ? current.codeReview : current.autoTest;
74
+ if (followup && (!currentCheck || currentCheck.sourceMessageId !== followup))
75
+ throw new CliError('STALE_INTERACTION', `${label}报告已被后续对话替换,请重新查询当前状态`);
76
+ if ((await service.taskProgress.hasPendingSubagentWork(previous.session.sessionId)) ||
77
+ current.interactions.some((item) => item.kind !== 'SELECT_FEATURES') ||
78
+ !(['FAILED', 'INTERRUPTED', 'CANCELLED', 'PAUSED'].includes(current.state) ||
79
+ hasCompletedCreationResult(current)))
80
+ throw new CliError('INVALID_ARGUMENT', `请先等待当前任务结束或回答当前问题,再发起${label}或后续修复`, {
81
+ sessionId,
82
+ observedState: service.withGuidance(current),
83
+ });
84
+ operation = check ?? 'repair';
85
+ }
45
86
  const attachments = [...input.attachments];
46
87
  for (const file of files)
47
88
  attachments.push(await uploadAttachment(service, file));
48
- const previous = sessionId && options.wait !== false ? await service.load(sessionId) : undefined;
49
89
  const previousMessageId = previous ? roundMessage(previous, currentRound(previous))?.messageId : undefined;
50
90
  const create = sessionId ? undefined : await service.config.creation(content);
51
91
  const response = await businessWrite(context, service, sessionId, () => service.command.chat({
@@ -54,6 +94,17 @@ export async function sendMessage(context, sessionId, command) {
54
94
  attachments,
55
95
  model: text(options.model),
56
96
  workspaceId: text(options.workspaceId),
97
+ ...(operation
98
+ ? {
99
+ roundExtra: {
100
+ [operationKey]: operation,
101
+ ...(followup ? { [sourceKey]: followup } : {}),
102
+ },
103
+ businessParams: {
104
+ business_type: check === 'review' ? 'issue_review' : check === 'test' ? 'auto_test' : 'casual_chat',
105
+ },
106
+ }
107
+ : {}),
57
108
  ...(create
58
109
  ? {
59
110
  sessionExtra: {
@@ -70,7 +121,15 @@ export async function sendMessage(context, sessionId, command) {
70
121
  }
71
122
  : {}),
72
123
  }));
73
- context.output.write(await service.accepted({ ...object(response), progressTitle: content }, sessionId, options.wait !== false, {
124
+ context.output.write(await service.accepted({
125
+ ...object(response),
126
+ progressTitle: content,
127
+ ...(operation
128
+ ? checkKind === 'review'
129
+ ? { codeReviewPhase: operation }
130
+ : { autoTestPhase: operation }
131
+ : {}),
132
+ }, sessionId, options.wait !== false, {
74
133
  ...waitOptions(command),
75
134
  previousMessageId,
76
135
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/commands/chat/message.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAElF,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAExF,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,WAAW,EAAE,CAAC;SACX,KAAK,CACJ,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAChC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;KACvC,CAAC;SACD,MAAM,EAAE,CACZ;SACA,OAAO,CAAC,EAAE,CAAC;CACf,CAAC;KACD,MAAM,EAAE,CAAC;AACZ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAa,EAAE,QAAuB,EAAiB,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC;AAC3G,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,OAAO,QAAQ,CACb,OAAO;SACJ,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC;SAClC,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;SAC9C,MAAM,CAAC,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,CAAC,CAC5D,CAAC;AACJ,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,SAA6B,EAC7B,OAAgB;IAEhB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EACpD,QAAQ,GAAG,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC;IAC/C,IAAI,UAAU,KAAK,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,6BAA6B,CAAC,CAAC;IACnG,MAAM,GAAG,GACP,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;IACpG,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;QAC7F,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,+CAA+C,CAAC,CAAC;IAC1F,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EACvB,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACjD,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM;QAC/D,MAAM,IAAI,QAAQ,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,WAAW,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3G,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CACrE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,SAAS;QACT,OAAO;QACP,WAAW;QACX,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QACtC,GAAG,CAAC,MAAM;YACR,CAAC,CAAC;gBACE,YAAY,EAAE;oBACZ,0BAA0B;oBAC1B,YAAY,EAAE,MAAM;oBACpB,eAAe,EAAE,GAAG;oBACpB,eAAe,EAAE,GAAG;oBACpB,iBAAiB,EAAE,GAAG;oBACtB,OAAO,EAAE,GAAG;iBACb;gBACD,UAAU,EAAE;oBACV,cAAc,EAAE,MAAM,CAAC,QAAQ;iBAChC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CACH,CAAC;IACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,OAAO,CAAC,QAAQ,CACpB,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,EAC/C,SAAS,EACT,OAAO,CAAC,IAAI,KAAK,KAAK,EACtB;QACE,GAAG,WAAW,CAAC,OAAO,CAAC;QACvB,iBAAiB;KAClB,CACF,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/commands/chat/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** 审查已有项目代码并自动修复确认的问题。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerReview(chat: Command, context: CommandContext): void;
@@ -0,0 +1,7 @@
1
+ import { messageOptions, sendMessage } from './message.js';
2
+ export function registerReview(chat, context) {
3
+ messageOptions(chat
4
+ .command('review <sessionId>')
5
+ .description('代码审查,告知发现的问题后自动修复;默认审查刚才改动的代码')).action(async (sessionId, _options, command) => sendMessage(context, sessionId, command, 'review'));
6
+ }
7
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/commands/chat/review.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,cAAc,CAAC,IAAa,EAAE,OAAuB;IACnE,cAAc,CACZ,IAAI;SACD,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,+BAA+B,CAAC,CAChD,CAAC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACxE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,CAAC,CACnD,CAAC;AACJ,CAAC"}
@@ -1,5 +1,8 @@
1
1
  import { messageOptions, sendMessage } from './message.js';
2
2
  export function registerSend(chat, context) {
3
- messageOptions(chat.command('send <sessionId>').description('继续项目创作')).action(async (sessionId, _options, command) => sendMessage(context, sessionId, command));
3
+ messageOptions(chat.command('send <sessionId>').description('继续项目创作'))
4
+ .option('--test-followup <messageId>', '回复当前自动测试报告,保留修复结果引导;使用结果中的 sourceMessageId')
5
+ .option('--review-followup <messageId>', '回复当前代码审查报告,保留修复结果引导;使用结果中的 sourceMessageId')
6
+ .action(async (sessionId, _options, command) => sendMessage(context, sessionId, command));
4
7
  }
5
8
  //# sourceMappingURL=send.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/chat/send.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAC3E,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CAC/D,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/chat/send.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SACnE,MAAM,CACL,6BAA6B,EAC7B,4CAA4C,CAC7C;SACA,MAAM,CACL,+BAA+B,EAC/B,4CAA4C,CAC7C;SACA,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACvE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,CACzC,CAAC;AACN,CAAC"}
@@ -42,7 +42,7 @@ export function registerStyle(chat, context) {
42
42
  nextActions: anchor === currentAnchor ? result.nextActions : [],
43
43
  });
44
44
  });
45
- withWait(style.command('select <sessionId> <choiceId>').description('选择风格并自动生成研发规划')).action(async (sessionId, choiceId, _options, command) => {
45
+ withWait(style.command('select <sessionId> <choiceId>').description('选择风格并展示开发功能清单')).action(async (sessionId, choiceId, _options, command) => {
46
46
  const service = await runtime(context, command);
47
47
  const response = await businessWrite(context, service, sessionId, () => service.selectStyle(sessionId, choiceId));
48
48
  context.output.write(await service.accepted(object(response), sessionId, object(command.opts()).wait !== false, waitOptions(command)));
@@ -0,0 +1,4 @@
1
+ /** 验证已有项目功能并自动修复确认的问题。@author xiuyu.yi */
2
+ import type { Command } from 'commander';
3
+ import type { CommandContext } from '../shared.js';
4
+ export declare function registerTest(chat: Command, context: CommandContext): void;
@@ -0,0 +1,7 @@
1
+ import { messageOptions, sendMessage } from './message.js';
2
+ export function registerTest(chat, context) {
3
+ messageOptions(chat
4
+ .command('test <sessionId>')
5
+ .description('自动测试指定功能,告知发现的问题后自动修复;默认测试刚才完成的功能')).action(async (sessionId, _options, command) => sendMessage(context, sessionId, command, 'test'));
6
+ }
7
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/commands/chat/test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,cAAc,CACZ,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,mCAAmC,CAAC,CACpD,CAAC,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACxE,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CACjD,CAAC;AACJ,CAAC"}
@@ -7,6 +7,13 @@ export function registerWait(chat, context) {
7
7
  .option('--timeout <seconds>', '本地等待上限;不传则持续等待', positive)
8
8
  .option('--interval <seconds>', '轮询最小间隔', positive)
9
9
  .option('--progress-revision <revision>', '上次已展示的任务进度版本;仅输出变化的进度')
10
- .action(async (sessionId, _options, command) => context.output.write(await (await runtime(context, command)).wait(sessionId, waitOptions(command))));
10
+ .action(async (sessionId, _options, command) => {
11
+ const options = waitOptions(command);
12
+ context.output.write(await (await runtime(context, command)).wait(sessionId, {
13
+ ...options,
14
+ // no-wait 回执带的新消息也必须先入流,不能返回前一轮结果。
15
+ requiredMessageId: options.messageId,
16
+ }));
17
+ });
11
18
  }
12
19
  //# sourceMappingURL=wait.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/chat/wait.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,0BAA0B,EAAE,SAAS,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAClD,MAAM,CAAC,gCAAgC,EAAE,uBAAuB,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE,CACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CACpG,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/commands/chat/wait.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE9D,MAAM,UAAU,YAAY,CAAC,IAAa,EAAE,OAAuB;IACjE,IAAI;SACD,OAAO,CAAC,kBAAkB,CAAC;SAC3B,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,0BAA0B,EAAE,SAAS,CAAC;SAC7C,MAAM,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;SACzD,MAAM,CAAC,sBAAsB,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAClD,MAAM,CAAC,gCAAgC,EAAE,uBAAuB,CAAC;SACjE,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,EAAE;QACvE,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,MAAM,CACJ,MAAM,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAChC,CAAC,IAAI,CAAC,SAAS,EAAE;YAChB,GAAG,OAAO;YACV,mCAAmC;YACnC,iBAAiB,EAAE,OAAO,CAAC,SAAS;SACrC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,4 +1,4 @@
1
- /** 安装当前发布渠道指定的版本。@author xiuyu.yi */
1
+ /** 将本机 CLI 更新到 npm latest。@author xiuyu.yi */
2
2
  import type { Command } from 'commander';
3
3
  import type { OutputWriter } from '../../output/writer.js';
4
4
  export declare function registerUpdate(program: Command, output: OutputWriter, update: () => Promise<{
@@ -1,7 +1,7 @@
1
1
  export function registerUpdate(program, output, update) {
2
2
  program
3
3
  .command('update')
4
- .description('检查并安装指定版本')
4
+ .description('检查并将本机 CLI 更新到最新版本')
5
5
  .action(async () => {
6
6
  const result = await update();
7
7
  output.write({ state: 'COMPLETED', version: result.version });
@@ -1 +1 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/system/update.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,MAAoB,EACpB,MAA0C;IAE1C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/commands/system/update.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAC5B,OAAgB,EAChB,MAAoB,EACpB,MAA0C;IAE1C,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,MAAM,GAAG,MAAM,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;AACP,CAAC"}