Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions docs/architecture/agent-runtime-services-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ CLI Agent 体验边界见 [`cli-product-line-design.md`](cli-product-line-design

本文中的接口片段只说明依赖方向和职责,不自动构成当前 API 或实施承诺。当前接口名称、字段和消费方以代码为准;
新增公共类型前必须有真实生产调用方、版本边界和验证路径。现有 Agent Runtime SDK 仍是 v1 preview,CLI、ACP、
Desktop 仍保留 `bitfun-core/product-full` 兼容 owner。CLI 与 CLI 托管的 ACP server 已消费各自的产品组装结果和
SDK 端口,但这不等于协调器、调度器、持久化或工具执行 owner 已迁移;ACP 的完整持久化历史、模型/模式、MCP、
客户端路径与 Desktop 入口仍保留明确的兼容边界。
Desktop 仍保留 `bitfun-core/product-full` 兼容 owner。CLI 与 CLI 托管的 ACP server 已消费各自的产品组装结果;
Desktop 主交互只消费由现有 Core owner 构造的窄口径 SDK 门面,尚未组装完整 Desktop profile。这些接入都不等于
协调器、调度器、持久化或工具执行 owner 已迁移;ACP 的完整持久化历史、模型/模式、MCP、客户端路径与 Desktop
的其余入口仍保留明确的兼容边界。

阅读路径:第 1 节确认 SDK、内核、产品特性、扩展接口和 crate 边界;第 2-3 节说明稳定接口、
运行时服务、内核、工具和工作流;第 4 节说明产品组装与扩展注册;第 5 节作为质量保护和
Expand Down Expand Up @@ -704,8 +705,9 @@ pub struct HarnessExecutionContext {
通过 `assemble(ProductAssemblyInput)` 产生 `ProductRuntimeParts`,本文件不再为它定义第二套目标接口。

当前 CLI 与 CLI 托管的 ACP server 已使用类型化 `RuntimeServices`,分别以 `DeliveryProfile::Cli` 和
`DeliveryProfile::Acp` 构造 `ProductRuntimeParts`。CLI 通过一个调用级上下文把
Agent Runtime SDK、Harness、能力注册、调用级权限和 Agentic 事件广播交给 TUI、Exec、Session、Usage 与
`DeliveryProfile::Acp` 构造 `ProductRuntimeParts`。Desktop 主交互直接从现有协调器和调度器端口构造窄口径
Agent Runtime SDK 门面,不注册未实现的 `RuntimeServices` 能力,也不宣称完整 Desktop profile 可用。CLI 通过
一个调用级上下文把 Agent Runtime SDK、Harness、能力注册、调用级权限和 Agentic 事件广播交给 TUI、Exec、Session、Usage 与
交互模式下的 Peer Host。SDK 已承接会话创建/列举/删除/恢复、类型化转录读取、轮次提交/取消,以及 CLI/TUI
的工具确认、拒绝和用户问题回答;Peer Host 当前只消费同一 SDK 的工具确认与拒绝。SDK v1 尚未覆盖的固定 ID
会话创建、模型更新、分支、用量、快照和
Expand All @@ -715,8 +717,10 @@ Core 的 Network、Git 和 MCP Catalog 当前仍含兼容 marker,因此该诊
该切换仍是 `product-full` 兼容组装,不是 owner 迁移。协调器、调度器、持久化、工具管线和 Agentic Event Queue
仍由 Core 唯一持有;CLI 与 ACP 不复制这些状态。ACP 服务端通过 SDK 处理会话创建/列举、轮次、取消、交互响应和事件订阅,
但完整持久化历史回放、模型/模式、模型目录/配置和 MCP 仍走单一 Core 兼容门面;ACP stdio、连接和协议投影仍在
`interfaces/acp`。Desktop 尚未接入组装结果,Server 仅提供健康检查、信息与 ping 路由。未接入入口的 profile、
枚举分支和单元测试仍不能证明对应产品形态可用。
`interfaces/acp`。Desktop 复用同一 Core owner 构造一个窄口径 SDK 门面,主界面的轮次提交/取消、工具确认/拒绝和
用户问题回答已通过该门面;会话 CRUD/恢复视图、模型、MCP、MiniApp、Cron、远程连接、Tauri 窗口与平台资源
仍保留在 Desktop/Core 兼容入口。Server 仅提供健康检查、信息与 ping 路由。未接入入口的 profile、枚举分支和
单元测试仍不能证明对应产品形态可用。

职责:

Expand Down Expand Up @@ -1063,14 +1067,19 @@ Product 测试:
全局有界 broadcast 继续服务 CLI/TUI,活动 ACP prompt 使用固定容量、仅接收本会话事件的临时通道,并在最后一个订阅者
释放时立即回收。CLI 宿主进程只保留一个旧消费队列排空任务,不增加每会话转发任务或第二套事件 schema。ACP 组装入口使用独立的
轮次提交适配器,在会话锁内拒绝忙碌会话的第二个 prompt;CLI/TUI、Desktop 和远程入口的既有排队策略不变。
- Desktop 主交互已从现有协调器与调度器端口构造窄口径 Agent Runtime SDK 门面;Tauri 命令只负责保留现有 DTO、
补全图片载荷并映射类型化请求。ACP 取消分支继续优先处理,Desktop 平台生命周期和未迁移服务不进入 SDK,也不创建
第二套 owner 或事件 schema。完整 `DeliveryProfile::Desktop` 必须等待真实 Desktop `RuntimeServices` 提供方和事件
消费/投影路径齐备后再组装;当前切片不注册 `Events` 能力,也不以失败占位端口或无人消费的内存通道伪装可用。

仍需完成:

- 把 embedded relay 的 TCP bind、静态 fallback 和任务生命周期移出 assembly;room/device 状态、account/sync
存储、asset store 与 HTTP/WebSocket router 已归属 `services/relay-service`,Cargo 反向边已删除并由通用边界检查保护。
- 继续缩小 CLI 的 Core 兼容门面;只有稳定端口、真实生产调用方和行为等价测试齐备时才迁移 owner。
- 继续按真实复用需求缩小 ACP 的完整持久化历史、模型/模式、MCP 与客户端兼容路径;Desktop 入口另行接入产品组装并
证明行为等价。ACP 生命周期和 Desktop 平台资源仍留在各自入口。
- 继续按真实复用需求缩小 ACP 的完整持久化历史、模型/模式、MCP 与客户端兼容路径;Desktop 仅继续迁移存在稳定端口和
行为等价测试的入口。完整 Desktop 产品组装需先补齐真实必需服务与事件消费路径,不以桩实现提前声明能力;ACP 生命周期
和 Desktop 平台资源仍留在各自入口。
- 为 Agent Runtime SDK 增加至少一个非 `bitfun-core` 的真实嵌入方;预览 facade 和单元测试不等于外部可用 SDK。
- 仅在真实端到端切片中接入插件主机;外部插件先转换为类型化工具、Hook、事件、权限请求或诊断,
不把生态对象带入 Agent Runtime。
Expand Down
8 changes: 5 additions & 3 deletions docs/plans/product-architecture-evolution-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
| CLI/TUI | `ShortcutsConfig` 已加载但真实按键分发仍硬编码;Slash、Palette、帮助和执行不是同一来源 | 先统一宿主 action 声明和键位解析,不重写 renderer |
| OpenCode | 只有来源确认和静态工具名预览,没有 JS/TS `execute` 或真实工具注册 | 先做一个无外部依赖、遵循官方公开契约的 standalone custom tool 端到端样例 |
| HarmonyOS PC | 未来平台目标,当前未实现 | 目标、问题、风险和旧设计闭环见平台规约;具体工作后续分别立项 |
| 入口迁移 | CLI 已消费 Runtime Parts,但 CLI/ACP/Desktop 仍直接依赖 `bitfun-core/product-full` | 保持单一 owner,按 CLI → ACP → Desktop 的独立行为等价切片推进 |
| 入口迁移 | CLI 已消费 Runtime Parts;Desktop 主交互消费由现有 owner 构造的窄口径 Runtime SDK 门面,完整 Desktop Runtime Parts 尚未组装;CLI/ACP/Desktop 仍按需保留 `bitfun-core/product-full` 兼容 owner | 保持单一 owner,按真实端口逐项迁移,不批量删除兼容门面或用桩服务提前声明能力 |

## 3. 工作流一:边界与依赖可信

Expand Down Expand Up @@ -104,7 +104,9 @@ HarmonyOS 手机 Remote App 不在该平台执行范围内。
更新、分支、用量、快照和持久化维护等操作在补齐端口与行为测试前继续由
现有单一兼容路径转发。
- ACP:CLI 行为稳定后单独迁移会话、权限和事件投影;ACP stdio 生命周期留在接口入口。
- Desktop:按服务簇迁移,Tauri、窗口和 app-local 资源留在 Desktop。
- Desktop:主界面轮次提交/取消、工具确认/拒绝和用户问题回答已通过现有协调器与调度器端口构造的窄口径 SDK 门面;
完整产品组装需等待真实必需服务与事件消费路径。会话 CRUD/恢复视图、模型、MCP、MiniApp、Cron、远程连接、
Tauri 窗口和 app-local 资源仍留在原入口。
- SDK/Server/Remote:只有真实独立调用方出现后才增加;枚举、空计划或测试替身不构成发布能力。

每个入口都必须证明生产行为、错误、取消和恢复等价后再删除旧路径。迁移期间不能在新旧路径同时写同一状态,
Expand Down Expand Up @@ -138,7 +140,7 @@ native/translated/degraded;未实现能力保持 unsupported/experimental;
| CLI action/快捷键 | 当前 CLI 行为和配置 fixture | OpenCode standalone tool、入口 API 迁移 |
| OpenCode standalone tool | OpenCode adapter 内的单一 source resolver、冻结版本/样例 | CLI action |
| OpenCode package/Hook/TUI | 前一切片稳定且有真实阻塞样例;TUI action 另等 action registry | 入口迁移 |
| ACP/Desktop 迁移 | 前一入口行为等价 | OpenCode 深兼容 |
| Desktop 主交互迁移 | 已完成窄口径 SDK 门面接入;完整 Desktop profile 与剩余入口需分别证明服务可用和行为等价 | ACP 与其他非扩展架构工作 |
| 一个能力对外复用 | 现有能力 owner、具名试点/用例/验收 owner、冻结宿主版本和最小权限/取消语义 | OpenCode standalone tool、单入口迁移 |

这些依赖表示开始条件,不要求放在同一个 PR,也不形成统一大版本。
Expand Down
1 change: 1 addition & 0 deletions src/apps/desktop/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ serde_json = { workspace = true }
[dependencies]
# Internal crates
bitfun-core = { path = "../../crates/assembly/core", default-features = false, features = ["product-full"] }
bitfun-agent-runtime = { path = "../../crates/execution/agent-runtime" }
bitfun-product-domains = { path = "../../crates/contracts/product-domains", default-features = false }
bitfun-services-integrations = { path = "../../crates/services/services-integrations", default-features = false, features = ["canvas-runtime"] }
bitfun-agent-tools = { path = "../../crates/execution/tool-contracts" }
Expand Down
Loading
Loading