Skip to content

refactor(jsonrpc): register extension method handlers#331

Merged
liujuanjuan1984 merged 1 commit intomainfrom
issue-324-eval-dev
Mar 27, 2026
Merged

refactor(jsonrpc): register extension method handlers#331
liujuanjuan1984 merged 1 commit intomainfrom
issue-324-eval-dev

Conversation

@liujuanjuan1984
Copy link
Copy Markdown
Collaborator

概要

本 PR 基于 #324 的评估结论,继续收敛 JSON-RPC 自定义分发层,目标是把 OpencodeSessionQueryJSONRPCApplication 压缩成薄壳,并消除当前最值得收口的三类具体风险:

  • handlers 间重复的 upstream / internal error 出口
  • interrupt callback 的 directory 特例主要靠实现细节维持
  • core JSON-RPC method allowlist 手写,存在 SDK 升级脆弱点

模块变更

src/opencode_a2a/jsonrpc/application.py

  • _handle_requests() 收敛为:
    • 解析 base JSON-RPC envelope
    • 识别 extension method / SDK-owned method
    • SDK-owned method 委托 super()._handle_requests()
    • extension method 交给本地 registry
  • 保留 unsupported method / notification 204 契约不变
  • 保留现有 helper 的导出路径,避免测试与调用方因重构产生无意义破坏

src/opencode_a2a/jsonrpc/dispatch.py

  • 新增 ExtensionHandlerContext
  • 新增 ExtensionMethodSpec / ExtensionMethodRegistry
  • 通过显式 registry 注册 4 类 extension handler:
    • session_query
    • provider_discovery
    • session_control
    • interrupt_callback
  • core JSON-RPC methods 改为直接从 SDK METHOD_TO_MODEL 派生,不再手写固定常量列表

src/opencode_a2a/jsonrpc/handlers/*

  • 将原先集中在 application.py 的 extension 业务分发拆到独立 handler:
    • session_queries.py
    • provider_discovery.py
    • session_control.py
    • interrupt_callbacks.py
  • common.py 中补充轻量共享 helper:
    • success / forbidden response helper
    • metadata / directory helper
    • upstream http / unreachable / payload / internal error helper
  • interrupt callback 的 directory 行为显式命名为特例 helper,固定“只提取 metadata、不走 resolver”的历史契约,避免未来误改

tests/jsonrpc/test_dispatch_registry.py

  • 新增结构性回归测试,覆盖:
    • registry method 集合与配置一致
    • SDK-owned core method 会继续委托 base app
    • 非聊天类 SDK method(tasks/pushNotificationConfig/get)也会正确委托
    • extension method 仍留在本地 registry handler

自审结论

本次改动与 #324 的目标一致,且没有改变对外 Agent Card / OpenAPI / JSON-RPC method 契约。

本轮自审后未发现阻塞性问题;新增的 3 个当前风险点均已在本 PR 中收口:

  • 统一了 handlers 的重复错误出口
  • 显式固化了 interrupt callback 的 directory 特例
  • 去除了手写 core method allowlist 的升级脆弱点

验证

  • uv run pytest tests/jsonrpc --cov-fail-under=0
  • ./scripts/doctor.sh
  • 结果:通过
  • 明细:404 passed,total coverage 92.11%

关联

Closes #324

@liujuanjuan1984 liujuanjuan1984 changed the title refactor(jsonrpc): tighten extension dispatch handling refactor(jsonrpc): register extension method handlers Mar 27, 2026
@liujuanjuan1984 liujuanjuan1984 merged commit 3ee2057 into main Mar 27, 2026
3 checks passed
@liujuanjuan1984 liujuanjuan1984 deleted the issue-324-eval-dev branch March 27, 2026 06:06
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] [Architecture] 评估将 JSON-RPC 自定义分发层继续收敛到 a2a-sdk 扩展点

1 participant