Skip to content

[Priority: High] [Feature] 补齐 OpenCode session lifecycle 扩展能力 #333

@liujuanjuan1984

Description

@liujuanjuan1984

🔍 发现的问题 / 原始需求描述

当前 A2A 扩展只暴露了 opencode.sessions.listopencode.sessions.messages.listopencode.sessions.prompt_asyncopencode.sessions.command、可选的 opencode.sessions.shell。但上游 opencode 的 session 能力面远不止于此,还包括 status/get/children/todo/create/delete/update/init/fork/share/unshare/summarize/diff/message/deleteMessage/part.delete/update/revert/unrevert。这导致 opencode-a2a 只能覆盖主聊天链路,无法还原 OpenCode 的完整 session lifecycle。

🛠️ 详细实施方案 (必须包含涉及的文件路径和核心逻辑/伪代码)

  1. 扩展 session lifecycle 的方法契约声明。
    涉及文件:
  • src/opencode_a2a/contracts/extensions.py
  • src/opencode_a2a/server/agent_card.py
  • docs/guide.md

建议分层:

  • 查询类:opencode.sessions.status/get/children/todo/message.get/diff
  • 管理类:opencode.sessions.create/delete/update/init/fork/share/unshare/summarize/revert/unrevert/message.delete/part.delete/part.update
  1. 在上游 client 中补齐缺失 REST 调用。
    涉及文件:
  • src/opencode_a2a/opencode_upstream_client.py

伪代码:

session_status() -> GET /session/status
get_session(id) -> GET /session/:id
fork_session(id, body) -> POST /session/:id/fork
share_session(id) -> POST /session/:id/share
revert_session(id, body) -> POST /session/:id/revert
...
  1. JSON-RPC 层按“查询”和“管理”拆 handler,避免现有 session_queries.py / session_control.py 继续膨胀。
    涉及文件:
  • src/opencode_a2a/jsonrpc/dispatch.py
  • src/opencode_a2a/jsonrpc/handlers/session_queries.py
  • src/opencode_a2a/jsonrpc/handlers/session_control.py
  • src/opencode_a2a/jsonrpc/handlers/session_lifecycle.py (new)
  • src/opencode_a2a/jsonrpc/handlers/common.py

核心逻辑建议:

if method in read_only_methods:
    map upstream payload -> normalized result
elif method in mutating_methods:
    enforce owner/session guard
    resolve directory/workspace boundary
    call upstream mutation endpoint
    return minimal stable result envelope
  1. 明确哪些结果映射成 A2A 标准对象,哪些保留为 provider-private 对象。
    建议:
  • session list / get / children 仍可映射到 Task 风格对象
  • message get 可映射到 A2A Message
  • share / summarize / revert 等管理类返回 provider-private result,避免过度伪装成 A2A core object

🧪 回归测试建议

  • 为每个新增 lifecycle 方法补齐参数校验、上游 404/400/500、owner mismatch 的测试。
  • 为 mutating 方法增加权限与目录边界回归测试,避免绕过现有单租户保护逻辑。
  • 为 Agent Card / wire contract / compatibility profile 增加一致性测试,确保新方法声明完整。
  • 运行 ./scripts/doctor.sh

Metadata

Metadata

Assignees

No one assigned

    Labels

    status:todoPlanned but not started

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions