OpenCode A2A插件中继
英语| 简体中文
OpenCode的A2A中继插件。该存储库公开了一个面向A2A的HTTP/JSON-RPC/SSE表面,将请求桥接到OpenCode会话中,并将MCP作为内部操作功能而不是公共协议。
存储库:https://github.com/FengYunCalm/opencode-peer-session-relay
此回购包含什么
packages/a2a-protocol--共享A2A模式和JSON-RPC/任务/消息/事件契约packages/relay-plugin--插件运行时、A2A主机、请求路由、持久性、重放和保护packages/relay-shared--小型共享实用程序和常量tests/--协议、插件和端到端验证docs/plans/2026-04-03-opencode-a2a-plugin-relay-implementation-plan.md--用于驱动当前设计的实施计划.opencode/commands/--为团队和中继操作工作流项目本地OpenCode命令.opencode/skills/relay-room/SKILL.md--项目本地中继室执行技巧assets/skills/relay-ops/SKILL.md--面向操作员的内部中继操作界面技能元数据
图形化
graphify-out/有意作为回购的可导航知识库- 该图由仓库的图形化监视工作流刷新,而不是被视为一次性构建输出
当前体系结构
- 公共合同: A2A基于HTTP JSON-RPC和SSE
- 运行时形状: 插件首先用于会话挂钩、房间操作、工作流编排和会话感知交付;独立MCP仅兼容
- 交货门:
session.status是主要的调度信号 - 坚持不懈: 本地SQLite支持的任务、审计、会话链接、房间、线程、消息和团队运行状态
- 操作界面: 插件中继工具是主要的操作界面;独立MCP仅具有兼容性,并使用不同的
compat_*工具名称
已实现的能力
- 代理卡风险
sendMessage,getTask,cancelTask,sendMessageStream- 私人/团体房间流量:
relay_room_create,relay_room_join,relay_room_status,relay_room_send - 团队治理:
relay_room_members,relay_room_set_role - 持久线程/消息流:
relay_thread_create,relay_thread_list,relay_message_list,relay_message_send,relay_message_mark_read,relay_transcript_export - 工作流引导和管理:
relay_team_start,relay_team_status,relay_team_intervene,relay_team_apply_policy - SSE任务事件流
- 将空闲门控调度到OpenCode会话中
- 重复抑制、人工接管保护、回放路径、审计跟踪和员工进度治理
- 任务元数据的公共响应/事件清理
OpenCode技能和本地插件工作流程
- 项目当地技能:
.opencode/skills/relay-room/SKILL.md - 项目本地命令:
.opencode/commands/team.md,.opencode/commands/relay-status.md,.opencode/commands/relay-pause.md,.opencode/commands/relay-resume.md,.opencode/commands/relay-replay.md - 操作员技能资产:
assets/skills/relay-ops/SKILL.md - 本地测试期间使用的全局安装目标:
- 插件包: ~/.config/opencode/plugins/opencode-a2a-relay.js - 中继MCP束: ~/.config/opencode/plugins/opencode-a2a-relay-mcp.js
- 全局OpenCode配置现在包括一个名为的本地MCP服务器条目
relay - 为了OpenCode 1.3.6本地路径插件兼容性,安装的插件包使用
default export { id, server }
Repo本地命令入口点
/team--通过本地启动或协调中继支持的工作流relay-room技能/relay-status [taskId]--检查继电器操作员状态和最近的诊断/relay-pause [reason]--暂停会话的自动中继传递/relay-resume--恢复会话的自动中继传递/relay-replay--通过内部操作界面重播可恢复的中继任务
为什么先插件
正常的房间和消息操作必须通过中继插件工具界面,以便会话感知注入和唤醒挂钩实际运行。 独立的MCP网桥仅适用于兼容性和面向手动存储的操作,现在使用不同的 compat_* 工具名称,以避免与插件中继工具冲突。 对于正常的会话感知中继使用,请仅调用插件工具: relay_room_*, relay_thread_*, relay_message_*,以及 relay_transcript_export.任何 relay_compat_* 该工具仅具有兼容性,并不代表标准的自动注射路径。 Repo本地 /relay-* 命令是内部操作MCP界面的操作员快捷键;它们不会取代插件第一中继工具表面。
私人房间流量(不变)
- 对话A创建一个房间
- 对话B与房间代码连接
- 任何一方都会向配对的对等方发送中继消息
团体房间流量
- 对话A创建了一个 群组 房间并成为主人
- 其他对话使用房间代码加入 和别名
- 所有者可以向房间广播或私下发送特定别名
- 代理可以检查线程、读取持久消息、标记已读游标和导出转录
团队工作流程
- 经理会话运行
/team - 该插件创建了一个组室和三个工作根会话
- 工作人员使用固定别名加入并报告工作流信号,例如
[TEAM_READY],[TEAM_PROGRESS],[TEAM_BLOCKER],以及[TEAM_DONE] - 经理检查
relay_team_status监控准备状态、活动工作、阻止程序、完成情况和最近的工作流事件跟踪 - 经理使用
relay_team_intervene用于记录在工作流时间线中的标准化重试/重新分配/取消阻止操作 - 团队跑步只能达到
completed在审阅者发出带有阶段的最终验收交接后final-acceptance-pass - 跑步结束后,经理可以使用
relay_team_cleanup删除工作根会话,同时保持中继历史记录不变
快速教程: docs/team-workflow-quickstart.md
需求
- Node.js
>= 22 - pnpm
10.8.1(参见packageManager在package.json) - 能够运行本地OpenCode插件运行时的Windows、macOS或Linux环境
获取代码
git clone https://github.com/FengYunCalm/opencode-peer-session-relay.git
cd opencode-peer-session-relay验证
此工作区中的新本地验证:
corepack pnpm test
corepack pnpm exec tsc -b --pretty false当前存储库状态通过了完整的本地测试套件和TypeScript项目构建。
发展
安装依赖项:
corepack pnpm install运行测试:
corepack pnpm test运行类型检查:
corepack pnpm exec tsc -b --pretty false我们从OMO插件中学到了什么
这个存储库是通过学习OhMyOpenCode/OMO插件生态系统而形成的,特别是关于插件功能、技能和类似房间的工作流程是如何在OpenCode会话中出现的。
此处应用的关键要点:
- 插件工具和独立MCP工具是不同的运行时界面,不能混为一谈
- 面向执行的房间工作流需要更强的“工具优先,然后回复”行为,而不是通用的解释技能
- OpenCode 1.3.6的本地插件兼容性取决于正确的
default export { id, server }形状 - 中继插件可能会暴露裸
relay_*工具名称或等效命名空间mcp__relay__*别名;两者都属于插件表面,而不是独立的兼容性路径
谢谢
特别感谢OMO/OhMyOpenCode生态系统提供的插件模式、操作员工作流程灵感和实际环境,这些为继电器室的设计提供了信息。
存储库状态
此存储库是面向源代码的。它不声称有任何npm包、托管部署或公共发布渠道。
许可证
麻省理工学院
