Skip to content

feat: add workspace control plane support#343

Merged
liujuanjuan1984 merged 1 commit intomainfrom
issue-332-workspace-control-plane
Mar 27, 2026
Merged

feat: add workspace control plane support#343
liujuanjuan1984 merged 1 commit intomainfrom
issue-332-workspace-control-plane

Conversation

@liujuanjuan1984
Copy link
Copy Markdown
Collaborator

概要

  • 实现 #332 的三阶段 workspace control plane 支持
  • 为 A2A 适配层补齐 workspace 路由、project/workspace/worktree JSON-RPC 扩展,以及相关公开契约

关联 Issues

按模块说明

1. Runtime / Contract / Discovery

  • 新增 workspace_binding runtime profile,并在 Agent Card、OpenAPI、wire contract 中公开 metadata.opencode.workspace.id
  • 新增 provider-private workspace-control 扩展,声明 opencode.projects.*opencode.workspaces.*opencode.worktrees.* 的方法契约、错误码与返回形状
  • opencode.sessions.*opencode.providers.*、interrupt callback 等既有扩展补充 workspace metadata 语义

2. Routing / Execution

  • 在 JSON-RPC handler 与执行器中引入 workspace-aware routing:当 metadata.opencode.workspace.id 存在时优先于 directory
  • 扩展 upstream client,将 workspace 路由透传到 OpenCode 的 query/header 语义
  • 调整 session binding cache:仅在显式 workspace 绑定或显式 directory override 时改变 binding key,避免破坏默认 context_id 语义
  • 增加兼容调用 helper,避免旧 mock / fake upstream client 因未声明 workspace_id 而回归

3. Workspace / Worktree Control Plane

  • 新增 workspace_control JSON-RPC handler,支持:
    • opencode.projects.list
    • opencode.projects.current
    • opencode.workspaces.list
    • opencode.workspaces.create
    • opencode.workspaces.remove
    • opencode.worktrees.list
    • opencode.worktrees.create
    • opencode.worktrees.remove
    • opencode.worktrees.reset
  • 对 request shape、upstream HTTP 错误、payload mismatch 做统一映射

4. 文档与测试

  • 更新英文 guide,补充 workspace routing 优先级与 workspace/worktree control plane 用法
  • 新增 workspace control 扩展测试,并同步更新 contract consistency、Agent Card、execution、upstream 参数等回归测试

回归验证

  • ./scripts/doctor.sh
  • 结果:437 个测试通过,coverage 91.48%

已知边界 / 风险

  • workspace/worktree 的 mutating 方法仍然建立在当前实例级 bearer token 信任边界上,不提供更细粒度的多租户授权控制
  • 当前 control-plane 方法面向 active deployment project,不支持通过单次请求切换目标 project

@liujuanjuan1984
Copy link
Copy Markdown
Collaborator Author

本次自审结论如下。

  1. 代码变动审查
  • 未发现阻断合并的问题。
  • 改动整体合理,基本完整覆盖了 #332 约定的三阶段目标:公开契约、workspace-aware routing、以及 project/workspace/worktree control plane 方法。
  • 执行器部分的一个关键实现点是:只在显式 workspace 绑定或显式 directory override 时改变 session binding key,避免把服务默认 workspace root 误当成新的 session 作用域。这一点是必要的,否则会对现有 context_id 语义造成破坏性回归。
  • 为兼容旧 mock/fake upstream client 新增 kwargs compatibility helper 是稳妥做法,避免在 execution / JSON-RPC 双路径上重复散落签名兼容逻辑。
  1. 风险与边界
  • 目前最大的残余风险不是实现错误,而是授权模型边界:opencode.workspaces.* / opencode.worktrees.* 的 mutating 方法仍然只受当前实例级 bearer token 保护,没有更细粒度的 operator RBAC。
  • 当前 workspace control 方法作用于 active deployment project,这和 issue 当前三阶段目标一致,但仍不是完整的多 project routing 模型;如果后续进入更复杂的 orchestration / multi-tenant 方向,仍要继续结合 #166#333 做后续约束。
  1. PR 与 issue 关系
  • Closes #332 是准确的。
  • 我不建议在本 PR 里额外使用 Closes 关闭其它 issues;#166#333 只属于相关背景和后续演进,不是本 PR 直接完成项。

@liujuanjuan1984 liujuanjuan1984 changed the title add workspace control plane support feat: add workspace control plane support Mar 27, 2026
@liujuanjuan1984 liujuanjuan1984 merged commit 4b9ebe9 into main Mar 27, 2026
3 checks passed
@liujuanjuan1984 liujuanjuan1984 deleted the issue-332-workspace-control-plane branch March 27, 2026 13:01
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: High] [Feature] 暴露 OpenCode project/workspace/worktree 控制面

1 participant