Skip to content

fix(runtime): tighten unsupported push and workspace extension surfaces#392

Draft
liujuanjuan1984 wants to merge 3 commits intomainfrom
issue-371-push-webhook-security-baseline
Draft

fix(runtime): tighten unsupported push and workspace extension surfaces#392
liujuanjuan1984 wants to merge 3 commits intomainfrom
issue-371-push-webhook-security-baseline

Conversation

@liujuanjuan1984
Copy link
Copy Markdown
Collaborator

@liujuanjuan1984 liujuanjuan1984 commented Apr 3, 2026

关联 Issues

变更概览

Push Notification 收口

  • 更新 docs/guide.md,明确声明 tasks/pushNotificationConfig/* 当前仍会随 SDK-owned core surface 暴露,但本 runtime 没有配置 push_config_store / push_sender,因此该能力当前是 unsupported。
  • 补充 REST 与 JSON-RPC 的实际差异:
    • REST 路由返回 HTTP 501
    • JSON-RPC 方法返回 SDK-owned unsupported error envelope
  • 同步修正兼容性矩阵与运行时描述,避免继续把 push notification surface 描述成可用能力。

Extension 边界收敛

  • 新增 A2A_ENABLE_WORKSPACE_MUTATIONS,将 opencode.workspaces.create/removeopencode.worktrees.create/remove/reset 收敛为 deployment-conditional methods,且默认关闭。
  • 默认情况下:
    • 不再把上述 mutation methods 写入 all_jsonrpc_methods
    • 不再在 Agent Card / wire contract / OpenAPI examples 中默认声明这些方法
    • 调用这些方法时返回明确的 METHOD_NOT_SUPPORTED
  • 保留只读 discovery methods:
    • opencode.projects.list
    • opencode.projects.current
    • opencode.workspaces.list
    • opencode.worktrees.list
  • 新增 runtime profile / compatibility / wire contract 对 workspace_mutations 的声明,避免“实现关了但契约还声称始终可用”。

文档与契约

  • 更新 docs/extension-specifications.mddocs/guide.md,把 workspace control 调整为“discovery + deployment-conditional mutation”的口径。
  • 更新 Agent Card 与 OpenAPI 描述/示例,避免继续默认鼓励调用过界的 mutation surface。

测试

  • 增加 disabled 状态下的 unsupported-method 回归测试。
  • 增加 enabled 状态下的 Agent Card / wire contract / runtime profile 回归测试。
  • 调整 OpenAPI / contract consistency / workspace control 测试,使其与新的 capability snapshot 保持一致。

与相关 Issues 的关系审查

  • #391 已由本 PR 完整承接,使用 Closes #391 准确。
  • #393 的验收项已经在本 PR 完成,使用 Closes #393 准确。
  • #371 已关闭,不应再使用 Closes #371;保留 Related #371 仅用于追溯收口背景更准确。

代码变动审查结论

  • 本 PR 的方向是“收紧真实能力边界”,而不是新增功能;对外能力面现在更符合当前 runtime 的最佳实践。
  • push notification 部分把“暴露但不支持”的事实契约化,避免误导调用方。
  • workspace/worktree extension 部分把默认常开的 mutation surface 收敛为显式开关控制,避免 adapter 默认暴露 host/project control-plane 操作。
  • 本轮没有处理 OpenCode Session Query v1 的命名/分组失真问题,该问题仍建议后续单独跟踪,避免在同一个 PR 中混入更大规模的 contract 重组。

验证

  • ./scripts/doctor.sh
  • 530 tests passed
  • coverage 91.10%

@liujuanjuan1984 liujuanjuan1984 changed the title docs(runtime): clarify unsupported push notification surface fix(runtime): make unsupported push notification contracts explicit Apr 3, 2026
@liujuanjuan1984
Copy link
Copy Markdown
Collaborator Author

本次对 PR #392 的独立审查结论如下。

  1. 代码变动审查
  • 当前版本无阻塞性问题。
  • 变更目标与实际实现一致:没有误把 push notification 做成“半支持”,而是把当前真实状态明确收口为 unsupported。
  • 文档、Agent Card 描述、服务行为测试三者现在已经对齐,且分别覆盖了 REST 与 JSON-RPC 两条主要入口,回归保护足够直接。
  1. 对 issues 目标的贴合度审查
  • 本 PR 现在更准确地解决的是 #391,即“把当前 surface 明确收口为 unsupported”。
  • 与已关闭的 #371 的关系应保持为 Related,不应写成 Closes,因为本 PR 并未实现 push notification 安全基线,而是确认当前前提不成立并完成收口。
  1. 审查过程中发现并已修正的问题
  • 初版改动把 push notification 当前行为笼统描述成“返回 501 / unsupported”。
  • 复查后确认这只对 REST 路由成立;JSON-RPC 方法实际返回的是 SDK-owned unsupported error envelope。
  • 该偏差已在后续 commit 中修正,并补充了对应 JSON-RPC 回归测试。
  1. PR 元数据审查
  • PR 标题已更新为英文 commit message 风格。
  • PR 描述已按模块拆分,并补充 Closes #391 / Related #371 的准确关系说明。

结论:当前 PR 可以作为 Draft 继续等待人工复核,没有额外必须先修的问题。

@liujuanjuan1984 liujuanjuan1984 changed the title fix(runtime): make unsupported push notification contracts explicit fix(runtime): tighten unsupported push and workspace extension surfaces Apr 3, 2026
@liujuanjuan1984
Copy link
Copy Markdown
Collaborator Author

本轮基于 #393 对 PR 代码变动做了独立复审,结论如下:

  1. 方向合理
  • 这次改动是在收紧真实能力边界,而不是新增功能,符合当前 runtime 的最佳实践。
  • workspace/worktree mutation methods 之前默认常开,但其语义更接近 operator control plane;改为 deployment-conditional 且默认关闭后,契约与风险级别更一致。
  1. 实现方式合理
  • 通过新增 A2A_ENABLE_WORKSPACE_MUTATIONS 收敛能力面,比直接硬删常量/handler 更稳妥:
    • 默认调用方拿到明确的 METHOD_NOT_SUPPORTED
    • Agent Card / wire contract / OpenAPI examples 同步收窄
    • 未来若确有 trusted operator 场景,仍可通过显式开关启用
  • 只读 discovery methods 被保留,没有误伤当前仍合理的 provider-private discovery surface。
  1. 契约同步到位
  • runtime profile、compatibility profile、wire contract、Agent Card、OpenAPI、guide/spec 文档、回归测试已经一起更新,没有出现“实现变了但对外声明没跟上”的半收口状态。
  1. 剩余风险 / 后续项
  • 本 PR 没有处理 OpenCode Session Query v1 的命名与分组失真问题;这不是本次实现缺陷,但仍值得后续单独 issue 跟踪。
  • 当前 workspace_mutations 的开关粒度是整组 methods 共用一个 toggle;对当前阶段足够,但如果后续出现更细粒度授权需求,可能还需要进一步拆分。

验证结果:

  • ./scripts/doctor.sh
  • 530 tests passed
  • coverage 91.10%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant