Skip to content

feat: emit explicit interrupt resolved status updates#160

Merged
liujuanjuan1984 merged 1 commit into
mainfrom
issue-159-interrupt-resolved-event
Mar 13, 2026
Merged

feat: emit explicit interrupt resolved status updates#160
liujuanjuan1984 merged 1 commit into
mainfrom
issue-159-interrupt-resolved-event

Conversation

@liujuanjuan1984
Copy link
Copy Markdown
Collaborator

@liujuanjuan1984 liujuanjuan1984 commented Mar 13, 2026

背景

  • 当前服务端在收到 permission.replied / question.replied / question.rejected 时,只清理内部 pending interrupt 状态,不会向下游显式外发 resolved 信号。
  • 这会让消费方难以稳定实现“中断已解除 / 已恢复执行 / 已被拒绝”的用户可见状态。
  • 本 PR 对应 issue [Priority: Med] [Feature] 支持向下游显式广播 interrupt resolved 信号 #159,目标是在不破坏现有 interrupt asked 契约的前提下,为 resolved 阶段增加明确、可关联、可去重的对外状态事件。

变更说明

模块一:interrupt 运行时协议

  • 保持 permission.asked / question.asked 继续输出 TaskStatusUpdateEvent(final=false, state=input-required)
  • 为 asked 事件补充稳定字段 metadata.shared.interrupt.phase=asked,让 interrupt 生命周期有显式起点。
  • 为 resolved 事件新增输出:
    • permission.replied
    • question.replied
    • question.rejected
  • resolved 统一映射为 TaskStatusUpdateEvent(final=false, state=working)
  • resolved 事件在 metadata.shared.interrupt 中补充:
    • request_id
    • type
    • phase=resolved
    • resolution=replied|rejected

模块二:幂等与去重语义

  • 仅当对应 request_id 当前仍处于 pending 状态时,才外发 resolved 事件。
  • 对重复 resolved、未知 request 或已清理 request 的 resolved 事件进行抑制,避免下游状态机重复推进。
  • 保持 resolved 事件与 asked 事件通过同一个 request_id 关联,便于消费方做一一配对。

模块三:测试与文档

  • 更新流式契约测试,校验 asked 事件显式携带 phase=asked
  • 新增 resolved 事件测试,校验:
    • asked + resolved 成对输出
    • resolved 事件的 phase / resolution 字段
    • resolved 使用 state=working
    • 重复 resolved 不会重复外发
  • 更新 docs/guide.md,明确 interrupt asked/resolved 的输出契约与去重规则。

模块四:下游接入评估(a2a-client-hub)

  • 结合 /home/juanjuan/a2a-client-hub 现有实现评估:
    • 在不修改下游代码的情况下,Hub 收到本次新增的 resolved 状态后,已经可以自动清空悬挂的 pendingInterrupt UI。
    • 如果 Hub 想显式向用户展示“中断已解除 / 已恢复执行 / 已被拒绝”,仍需要下游继续消费 phase / resolution 字段,并为其增加 toast、banner 或 timeline 状态。
  • 也就是说,本 PR 先把协议面能力补齐;下游 richer UX 仍需单独接入实现。

验证

  • uv run pre-commit run --all-files
  • uv run pytest
  • 结果:163 passed,coverage 84.48%

关联

@liujuanjuan1984 liujuanjuan1984 marked this pull request as ready for review March 13, 2026 03:02
@liujuanjuan1984 liujuanjuan1984 merged commit 6cec3a0 into main Mar 13, 2026
3 checks passed
@liujuanjuan1984 liujuanjuan1984 deleted the issue-159-interrupt-resolved-event branch March 13, 2026 03:02
@liujuanjuan1984 liujuanjuan1984 restored the issue-159-interrupt-resolved-event branch March 13, 2026 03:06
@liujuanjuan1984 liujuanjuan1984 deleted the issue-159-interrupt-resolved-event branch March 13, 2026 03:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Priority: Med] [Feature] 支持向下游显式广播 interrupt resolved 信号

1 participant