xworkmate-app/docs/architecture/xworkmate-integrations.md
2026-03-23 08:59:44 +08:00

211 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XWorkmate 集成架构
## 概述
XWorkmate 现阶段已经不只是“单一 Codex bridge”但当前实现也不是一个单独的 “Discovery / Distribution Catalog” 模块。
当前集成能力分散在几条明确的实现路径里:
1. `GatewayRuntime`
- 负责 OpenClaw Gateway 的实时 RPC、会话、chat、pairing、cron
2. `MultiAgentBrokerServer` + `MultiAgentOrchestrator`
- 负责多 Agent 协作运行
3. `MultiAgentMountManager`
- 负责按 adapter 做 CLI 能力探测、MCP reconcile、挂载状态汇总
4. `CodexConfigBridge` / `OpencodeConfigBridge`
- 负责特定 CLI 的配置文件写入
5. Assistant composer 与 feature flags
- 决定当前哪些集成入口真实对用户可见
也就是说,当前架构更接近“分布式集成面”,不是单一 catalog service。
## 当前架构基线
```mermaid
flowchart LR
X["XWorkmate App"] --> GR["GatewayRuntime"]
X --> BM["MultiAgentBrokerServer<br/>WebSocket JSON-RPC"]
X --> MM["MultiAgentMountManager"]
X --> NO["CodeAgentNodeOrchestrator"]
X --> UI["Assistant composer / Settings / Feature flags"]
BM --> O["MultiAgentOrchestrator"]
O --> C["Codex / Claude / Gemini / OpenCode"]
MM --> MA["Codex / Claude / Gemini / OpenCode / OpenClaw adapters"]
MA --> CFG["Managed config writes / mcp list / local file discovery"]
GR --> G["OpenClaw Gateway / Host"]
NO --> G
C --> A["AI Gateway or Ollama endpoint"]
```
关键点:
- `MultiAgentBroker` 是多 CLI 协作的本地运行时入口。
- `OpenClaw` 既是现有 Gateway 集成面,也是当前 app-mediated code-agent dispatch 的宿主控制面。
- `AI Gateway` 既可以是 direct AI 对话入口,也可以是协作运行的注入式模型入口。
- 当前没有一个单独命名为 `Discovery / Distribution Catalog` 的实现模块。
## 1. OpenClaw Gateway / Host
用途:
- 运行时协同
- 设备与信任边界
- Agent / Session / Chat 通道
- 宿主控制面发现
已使用能力:
- `health`
- `status`
- `agents.list`
- `sessions.list`
- `chat.send`
- `device.pair.*`
- `cron.list`
- `agent/register`
- `memory/sync`
当前定位:
- 继续作为 Gateway RPC 面存在
- 也是 app-mediated code-agent dispatch 的控制面目标
- 在 mount 视角下OpenClaw 目前更多是“本地发现 + 宿主控制面”,不是一个统一的 skills / plugins catalog service
## 2. AI Gateway
用途:
- direct AI 对话入口
- 协作运行时的模型注入入口
- 对部分 CLI 的配置桥接入口
边界:
- 不负责设备配对
- 不负责 session / agent 生命周期
- 不替换用户现有默认 provider / model
当前策略:
- `CodexConfigBridge` 可以写入受管 provider / MCP block
- `MultiAgentOrchestrator` 在协作运行中会通过环境变量或 `ollama launch` 传递模型入口
- `Claude / Gemini` 的 mount reconcile 目前主要做 discoveryAI Gateway 仍保持 launch-scoped
- `OpenCode` 当前有受管 MCP configAI Gateway 语义仍偏 launch-scoped / runtime injection
换句话说AI Gateway 能力是分散落地的,不是所有 CLI 都通过同一条托管 provider 路径接入。
## 3. Multi-Agent Runtime
### 编排层
`MultiAgentOrchestrator` 负责:
- Architect 任务分析
- Engineer 实现
- Tester / Doc 审阅
- 迭代评分与回退
### Broker 层
`MultiAgentBroker` 负责:
- 本地 `WebSocket JSON-RPC`
- run lifecycle
- worker CLI 启动
- selected skills / MCP / Gateway 上下文注入
- 结构化事件流回写当前会话
### UI 接线
- Assistant 继续复用现有 composer、附件、当前会话
- 桌面端真正对用户可见的协作入口,当前主要是 Assistant composer 上的协作 toggle
- `SettingsPage` 里有 Multi-Agent 配置区块与 detail 页面代码,但桌面端 `settings.agents` 仍被 feature flag 关闭
- 不新增独立任务页面
## 4. 发现与分发
当前实现里,`managed / external` 更像一套按 adapter 执行的操作规则,而不是单独的中心化状态目录。
XWorkmate 仍然区分两类对象:
- `managed`
- 由 App 创建与维护的托管项
- `external`
- 外部已有配置或 CLI 自带配置
统一规则:
- 只更新 XWorkmate 托管项
- 不删除外部已有项
- 启动时与保存设置后自动 reconcile
- 这套规则当前由 `MultiAgentMountManager` 在各 adapter 上分别执行
## 5. 挂载入口矩阵
| 目标 | Skills 挂载入口 | MCP 挂载入口 | AI Gateway 挂载入口 |
| --- | --- | --- | --- |
| OpenClaw | 本地文件 / 目录发现 + Gateway 控制面 | 不作为 MCP 主挂载点 | app-mediated dispatch / gateway route |
| Codex | 当前线程 skills 上下文 +协作运行注入 | `~/.codex/config.toml` 受管 MCP block | 受管 provider bridge + runtime injection |
| Claude | 当前线程 skills 上下文 +协作运行注入 | `claude mcp list` 做 discovery | launch-scoped / env / `ollama launch` |
| Gemini | 当前线程 skills 上下文 +协作运行注入 | `gemini mcp list` 做 discovery | launch-scoped / env |
| OpenCode | 当前线程 skills 上下文 +协作运行注入 | `~/.opencode/config.toml` 受管 MCP block | runtime injection |
## 6. 外部 Provider 与执行路径
保留现有统一 contract
- `ExternalCodeAgentProvider.id`
- `name`
- `command`
- `defaultArgs`
- `capabilities`
- `CodeAgentNodeOrchestrator.buildGatewayDispatch()`
现状:
- `codex` 仍是当前最完整 provider
- 其他 CLI 当前主要通过 `CliMountAdapter` discovery / reconcile 与 `MultiAgentOrchestrator` 运行时调用接入
- 多 provider 调度 UI 不是当前交付目标
## 7. 安全边界
- `.env` 仅用于开发预填充,不自动连接,不作为持久化真值源
- AI Gateway API Key 与 Gateway 凭证继续走 secure storage
- 新增协作路径不得把 secret 写入 `SharedPreferences`
- Launch-scoped 注入优先于全局配置改写
- 远程 Gateway 不允许静默降级为非 TLS
- 协作事件与 metadata 不上传本地 secret 或本机绝对路径
## 8. 设置页统一动作语义Gateway 家族)
`OpenClaw Gateway`、`Vault`、`AI Gateway`(以及后续外部扩展)统一遵循同一操作语义:
- `Test`:只使用当前草稿(含当前输入的临时 secret 覆盖)做连通性校验,不写入持久层。
- `Save`:把草稿同步到本地持久存储(`SettingsStore` + `SecretStore`),不立即改变运行时会话行为。
- `Apply`:在 `Save` 的基础上,立即让当前运行时按新配置生效。
实现约束:
- Gateway 集成页不再重复显示顶层全局 `Save / Apply`,避免与卡片内动作语义冲突。
- 桌面端 `settings.gateway_setup_code``settings.agents` 当前都被 feature flag 关闭。
- 但桌面端 `assistant.multi_agent` 仍然开启,所以协作入口当前主要暴露在 Assistant composer而不是设置页独立标签。
## 相关代码
- `lib/app/app_controller_desktop.dart`
- `lib/app/app_controller_web.dart`
- `lib/features/assistant/assistant_page.dart`
- `lib/features/settings/settings_page.dart`
- `lib/runtime/gateway_runtime.dart`
- `lib/runtime/runtime_models.dart`
- `lib/runtime/multi_agent_orchestrator.dart`
- `lib/runtime/multi_agent_broker.dart`
- `lib/runtime/multi_agent_mounts.dart`
- `lib/runtime/codex_config_bridge.dart`
- `lib/runtime/opencode_config_bridge.dart`
- `lib/runtime/code_agent_node_orchestrator.dart`
- `lib/runtime/runtime_coordinator.dart`