Skip to content

功能规格说明:打印模式 ​

创建日期:2026-06-09

用户场景与测试 (必填) ​

用户故事:干净的仅响应输出(优先级:P0) ​

作为运行 wave -p 'message' 的用户,我希望只看到主 agent 的响应文本,以便输出适合管道传递给其他命令和脚本。

为什么是这个优先级:这是打印模式的基本目的——机器可读的干净输出。没有它,-p 无法用于脚本。

独立测试:运行 wave -p 'hi' 并验证只有助手的响应文本被打印到 stdout,没有子 agent 提示、文件列表或内部管理输出。

验收场景:

  1. 假设通过 wave -p 'hi' 的打印模式,当 agent 响应时,则只有主 agent 的内容被写入 stdout。
  2. 假设打印模式,当主响应后自动记忆提取子 agent 运行时,则没有子 agent 输出(系统提示、文件清单、推理或内容)出现在 stdout 上。
  3. 假设打印模式,当 agent 使用 Agent 工具时,则不打印子 agent 的用户消息或助手流式输出——只有主 agent 的工具块指示器和最终响应。

用户故事:流式进度指示器(优先级:P2) ​

作为在终端中运行 wave -p 的用户,我希望看到轻量级的进度指示器(推理、工具调用),以便我知道 agent 正在工作,即使子 agent 内部被抑制。

为什么是这个优先级:增强用户体验,但不是核心功能所必需的。

独立测试:运行 wave -p 'do something complex' 并验证推理标题、工具块名称和主 agent 的响应内容被显示。

验收场景:

  1. 假设打印模式带有复杂提示,当主 agent 在响应前推理时,则打印 💭 Reasoning: 标题后跟推理文本。
  2. 假设打印模式,当主 agent 调用工具时,则打印 🔧 <tool_name> <compactParams> 行。
  3. 假设打印模式,当错误块被添加时,则打印 ❌ Error: <message> 行。

用户故事:与 Claude Code 行为兼容(优先级:P1) ​

作为从 Claude Code 迁移的用户,我希望 wave -p 的行为与 claude -p 一致,以便现有脚本和期望无需更改即可工作。

为什么是这个优先级:与参考实现的一致性确保平滑的迁移路径。

独立测试:比较 claude -p 'hi' 和 wave -p 'hi' 的输出——两者都应该只显示主 agent 的响应文本。

验收场景:

  1. 假设 claude -p 和 wave -p 两者,当使用相同提示时,则两者都不打印子 agent 内部输出(用户消息、系统提示、文件清单)。
  2. 假设两个工具,当分叉/后台 agent(如记忆提取)运行时,则其输出完全静默——永远不会发送到 stdout。
  3. 假设两个工具,当常规 Agent 工具子 agent 运行时,则子 agent 的结果作为 tool_result 返回给主 agent 并纳入主 agent 的最终响应,不单独打印。

用户故事:等待后台工作及主 agent 收尾完成后再退出(优先级:P0) ​

作为在打印模式下由主 agent 启动后台子 agent 的用户,我希望 wave -p 等待所有后台子 agent 完成、并且主 agent 处理完所有完成通知(产出最终响应)之后才退出,以便最终结果不会丢失。

为什么是这个优先级:后台子 agent 的结果必须通过主 agent 的收尾 turn 纳入最终响应;过早退出会销毁主 agent 进行中的 turn 并丢失结果,等同于功能不可用。

独立测试:运行 wave -p 让主 agent 以后台方式启动多个子 agent,验证所有子 agent 完成、主 agent 输出包含各子 agent 结果的最终响应后进程才退出。

验收场景:

  1. 假设打印模式下主 agent 启动多个后台子 agent 并结束当前 turn,当所有子 agent 陆续完成时,则主 agent 处理完全部完成通知并输出最终响应后进程才退出。
  2. 假设最后一个后台任务状态已变为完成、但主 agent 仍在处理通知的 turn 中(isLoading),当退出等待循环检查时,则不得退出也不得 destroy agent。
  3. 假设消息队列中仍有待处理的通知(主 agent 空闲但通知未消费),当退出等待循环检查时,则不得退出。
  4. 假设打印模式下启动单个后台子 agent,当子 agent 完成时,则主 agent 的收尾 turn 完整输出后才退出,不被 500ms 轮询窗口截断。

边界情况 ​

  • 主 agent 的响应为空怎么办? 仅打印一个换行符。
  • 子 agent 出错怎么办? 错误作为 tool_result 传播到主 agent;主 agent 决定如何在其响应中报告。不直接打印子 agent 错误。
  • 并发子 agent 怎么办? 无论并发如何,所有子 agent 输出都被抑制。
  • 如果自动记忆提取在打印模式等待后台工作时运行怎么办? hasRunningBackgroundWork 循环等待它,但不打印提取输出。
  • 多个后台子 agent 错峰完成怎么办? 等待条件必须覆盖主 agent 处理通知的收尾 turn 与队列中未消费的通知,最后一个子 agent 完成不得触发提前退出。