Appearance
功能规格说明:后台任务完成通知
创建日期:2026-08-21
对齐 Claude Code 的后台任务完成通知行为:Bash 后台任务与 Agent 子代理(fork 子代理、后台化 subagent、后台 workflow)完成时,其完成通知作为
task-notification消息注入主对话——该消息对 UI 消息流隐藏(isMeta: true),对模型上下文可见(包装为 "A background agent completed a task:" + XML),并照常持久化到会话 jsonl。用户感知路径为模型主动汇报、/tasks面板与后台任务面板,不经消息流。
用户场景与测试 (必填)
用户故事:后台任务完成通知(优先级:P1)
作为用户,我希望后台任务(Bash 后台命令、后台子代理、后台 workflow)完成时,其完成通知注入主对话供模型感知并汇报,但不在 UI 消息流中打扰我,以便消息流只呈现真实对话,任务结果由模型归纳后呈现。
验收场景:
- 假设 后台任务完成,当 完成通知注入主对话时,则 通知成为 role:user 的 meta 消息(
isMeta: true),在 CLI 与 Webview 消息流中均不显示。 - 假设 后台任务完成通知已注入,当 模型读取消息上下文时,则 模型看到包装文本 "A background agent completed a task:" 加
<task-notification>XML(含 task-id、task-type、status、summary、output-file)。 - 假设 后台任务完成通知已注入并触发新一轮 AI 应答,当 会话保存时,则 通知消息(isMeta)与随后的 assistant 消息一同写入会话 jsonl,恢复会话后模型上下文与通知行为不变。
- 假设 后台任务被手动终止(killed),当 任务结束时,则 不注入完成通知。
- 假设 多个后台任务同时完成,当 通知注入时,则 所有通知合并进同一轮 AI 应答(批量处理)。
边界情况
- 旧会话恢复:历史会话 jsonl 中的通知消息若不含
isMeta标记(本变更前写入),恢复后可能短暂可见——不做迁移,新写入的消息均带标记。 - /clear 与 abort:
MessageQueue.clear()保留 pending 通知(不丢弃后台结果);abort 期间不注入通知(折叠进下一轮,防止孤儿循环)。