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
19 changes: 11 additions & 8 deletions docs/architecture/agent-runtime-services-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -708,11 +708,12 @@ pub struct HarnessExecutionContext {
`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
的工具确认、拒绝和用户问题回答;固定 ID 创建使用独立的 `create_session_with_id` 方法,普通创建 DTO 保持 v1
交互模式下的 Peer Host。SDK 已承接会话创建/列举/删除/恢复、会话模型更新、类型化转录读取、本地分支、用量生成、
轮次提交/取消与精确结算,以及 CLI/TUI 的工具确认、拒绝和用户问题回答;固定 ID 创建使用独立的
`create_session_with_id` 方法,普通创建 DTO 保持 v1
字段集合。未实现该能力的提供方返回类型化不支持错误;实现成功时 Runtime 必须校验返回 ID 与请求完全一致,不能
替换为自动生成的 ID。`SessionSelector::Create` 仍保持自动生成。Peer Host 通过同一 SDK 处理对话提交、精确取消、
工具确认、拒绝和会话模型更新。SDK v1 尚未覆盖的分支、用量、快照和持久化维护等操作仍由
工具确认、拒绝和会话模型更新。TUI 用量卡片持久化、快照及 Peer Host/ACP 维护等产品操作仍由
`assembly/core` 的单一兼容门面转发。
`doctor` 与 `health` 校验真实组装结果及必需注册完整性;
Core 的 Network、Git 和 MCP Catalog 当前仍含兼容 marker,因此该诊断不等于对这些外部服务做实时探活。
Expand Down Expand Up @@ -795,15 +796,17 @@ Core 的 Network、Git 和 MCP Catalog 当前仍含兼容 marker,因此该诊
| ACP | ACP 协议、客户端生命周期、远端探测 | 外部智能体/工具能力、环境事实、权限桥接 |
| Web UI / mobile web | UI 状态、hydration、配对、会话展示、插件状态视图 | 接口/传输 DTO、运行时事件事实、能力服务读模型 |

当前 Runtime SDK 已提供会话创建、列出、删除、恢复、模型更新和类型化转录读取。模型更新只接受会话 ID 与模型 ID,
当前 Runtime SDK 已提供会话创建、列出、删除、恢复、模型更新、类型化转录读取、本地分支、用量生成,以及
精确轮次结算。模型更新只接受会话 ID 与模型 ID,
不承载模型目录、模式、提供方配置或宿主 UI 选择语义。`AgentSessionRestoreRequest/Result` 与
`AgentSessionRestorePort` 归 Agent Runtime SDK,以继续复用 Runtime owner 的完整 `SessionState`;类型化
`SessionTranscript` 归 `runtime-ports`。两者都由 `assembly/core` 注入真实持久化 owner,当前由 CLI/TUI
消费;ACP 为保证模型配置与完整历史来自同一次恢复,继续通过 Core 兼容门面读取协议回放所需的完整轮次,避免为单一协议
扩张通用 transcript。CLI/TUI 的工具确认、拒绝和用户问题回答,以及 ACP 服务端 / Peer Host 的工具确认与拒绝,通过类型化
扩张通用 transcript。会话分支请求显式携带可选远程身份;当前本地 provider 对远程身份返回 `NotAvailable`,不据本地路径
推断远程语义。CLI/TUI 的工具确认、拒绝和用户问题回答,以及 ACP 服务端 / Peer Host 的工具确认与拒绝,通过类型化
`AgentInteractionResponsePort` 回到 Core 的工具管线或用户输入 owner,不改变审批策略或交互所有权。
`CoreAgentRuntimeCompatibility` 仍承载未迁移的
持久化、分支、用量和快照等操作;不能据此把整个兼容门面一次性删除,也不能把这些
TUI 用量卡片持久化、快照及 Peer Host/ACP 维护等操作;不能据此把整个兼容门面一次性删除,也不能把这些
操作提前声明为跨宿主稳定接口。旧固定 ID 创建方法仅作为标记废弃的源码迁移转发保留一个兼容周期,生产 CLI
调用已经迁移到 Runtime SDK;该转发不得重新成为新调用入口。

Expand Down Expand Up @@ -1064,9 +1067,9 @@ Product 测试:
- `bitfun-core` 可继续作为 `product-full` 兼容门面,避免迁移期间一次性重写入口。
- CLI 已以 `DeliveryProfile::Cli` 构造真实 Runtime Parts 和 SDK runtime;本地 Agent 入口、会话、用量和
Peer Host 共用一个调用级上下文与广播事件源,审批策略不再写回全局配置。Peer Host 通过 SDK 提交/精确取消
turn、更新会话模型并处理工具确认/拒绝,通过单一 Core 兼容门面处理会话与快照缺口,不再构造独立调度器、持久化 manager 或事件队列;
turn、更新会话模型并处理工具确认/拒绝,通过单一 Core 兼容门面处理快照及持久化维护缺口,不再构造独立调度器、持久化 manager 或事件队列;
wire schema、Relay ACK/重放和重连协议未在该切换中扩张。
- CLI 通过 SDK 处理已覆盖的 session/turn/cancel 操作,并通过一个 Core 兼容门面处理 SDK v1 缺口
- CLI 主会话客户端通过 SDK 处理 session、transcript、fork、usage report、turncancel 与 settlement;TUI 用量卡片持久化和其他 SDK v1 缺口仍通过一个 Core 兼容门面处理
该门面复用现有 owner,不建立第二套状态或事件 schema。
- CLI 托管的 ACP 服务端已以 `DeliveryProfile::Acp` 构造真实 Runtime Parts;会话创建/列举、轮次、取消、会话模型更新、工具确认/拒绝和
Agent 事件订阅复用同一 SDK 语义,ACP stdio、连接与协议投影保持不变。Agentic Event Queue 仍是唯一事件 owner;
Expand Down
19 changes: 10 additions & 9 deletions docs/architecture/cli-product-line-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,17 +94,18 @@ BitFun CLI 应成为可独立安装和发布的 Agent 产品,而不是 Desktop
- CLI 本地 Agent 入口以类型化 `RuntimeServices` 调用 `ProductAssembler`,选择 `DeliveryProfile::Cli`,
并把 `ProductRuntimeParts`、Agent Runtime SDK、事件源和调用级审批策略保存在一个 `CliRuntimeContext` 中。
- TUI、`exec`、会话、用量和交互模式下的 Peer Host 复用同一上下文。SDK 已承接会话创建(包括
`exec --session-id` 和缺失后端会话通过独立固定 ID 方法按原 ID 重建)/列举/删除、轮次提交和取消;普通创建
`exec --session-id` 和缺失后端会话通过独立固定 ID 方法按原 ID 重建)/列举/删除/恢复、类型化转录、本地分支、
用量生成、轮次提交/取消和精确结算;普通创建
DTO 保持 v1 字段集合,固定 ID 冲突返回 `InvalidRequest`。会话模型更新、工具确认/拒绝和用户问题回答也通过
SDK 的窄端口回到 Core owner;模型目录、模式和提供方配置仍由产品入口解释。SDK v1 尚未覆盖的恢复视图、
消息、分支、用量和快照由一个 Core
兼容门面转发给原 owner。
SDK 的窄端口回到 Core owner;模型目录、模式和提供方配置仍由产品入口解释。TUI 用量卡片持久化、快照及 Peer Host/ACP 维护
等 SDK v1 缺口由一个 Core 兼容门面转发给原 owner。
- Agentic Event Queue 仍是唯一事件 owner;TUI、`exec` 与 Peer Host 使用独立广播订阅,不互相消费事件。
- 有界旧队列只承担兼容存储;达到容量时不得抑制广播。CLI 保持一个后台 drain,订阅方一旦报告 lag/closed,
必须取消活动 turn 并显式失败,不能在状态不完整时继续报告成功。
- 会话 ID 在进入存储路径前统一校验;运行时索引同时绑定 ID 与规范化存储路径,并以待提交 claim 计数保护
并发恢复。同一进程不能把另一个工作区中已加载的同 ID 会话当作当前会话,单个失败恢复也不能释放其他
同路径恢复仍在使用的绑定;已加载会话只校验身份,不通过完整 restore 重置活动状态。删除路径不能通过
同路径恢复仍在使用的绑定;主会话提交不做前置完整 restore,只有 Runtime owner 返回结构化 `NotFound` 时才恢复或
按原 ID 重建并重试一次,其他资源缺失与后端错误原样失败。删除路径不能通过
相对路径、绝对路径或分隔符越出 sessions 根目录。
- TUI 终端句柄由恢复守卫持有;初始化中途失败、正常返回、错误返回或 panic 展开都会尽力退出 alternate screen、
关闭输入捕获、关闭 raw mode 并显示光标。真实 PTY/ConPTY 启动页进程冒烟测试已验证 resize 后仍可交互、
Expand Down Expand Up @@ -140,9 +141,8 @@ BitFun CLI 应成为可独立安装和发布的 Agent 产品,而不是 Desktop

| 缺口 | 影响 | 本设计的处理 |
|---|---|---|
| CLI 已消费 Runtime Parts,但部分执行与持久化操作仍由 `bitfun-core/product-full` 兼容 owner 提供 | SDK 尚不能独立覆盖完整产品会话,过早删除兼容路径会改变行为 | 仅在稳定端口、真实嵌入方和行为等价测试齐备后迁移 owner;兼容门面保持单一且不扩展成第二套 Runtime。 |
| CLI 主会话客户端已仅消费 Runtime SDK,但快照及 Peer Host/ACP 的持久化维护仍由 `bitfun-core/product-full` 兼容 owner 提供 | SDK 尚不能独立覆盖全部宿主维护能力,过早删除兼容路径会改变行为 | 仅在稳定端口、真实嵌入方和行为等价测试齐备后迁移 owner;兼容门面保持单一且不扩展成第二套 Runtime。 |
| TUI 编排、输入、命令、副作用和渲染仍有大文件聚集 | 交互回归难以隔离,终端状态与业务状态容易耦合 | 在现有模块上增量收敛为事件、状态归约、副作用和渲染四个边界,不重写全部 TUI。 |
| `ShortcutsConfig` 已加载,但主要按键分发仍硬编码;Slash、Palette、帮助和执行来自不同位置 | 配置可能保存却不生效,展示和真实行为会漂移 | 在 CLI 宿主建立单一 action registry 和上下文键位解析;不借机重写 renderer。 |
| CLI 配置只覆盖入口本地选项,缺少统一层级、来源解释和兼容导入 | 用户无法安全复用其他 CLI 资产,也难以解释最终配置来源 | 建立 BitFun Canonical Config、持续来源视图和可选的显式导入报告。 |
| OpenCode 来源发现与真实执行尚未形成完整闭环 | “来源可识别”容易被误解为“插件可执行” | 第一条闭环只完成一个无外部依赖的契约样例;取得真实 `execute` 并注册到 Tool Runtime 后才显示可用。 |
| 当前 CLI 使用 `product-full`,OHOS target 图包含多组未验证的平台依赖 | 不能据依赖可解析、`hdc shell` 或移动 Remote App 推导 PC 本地 CLI/TUI 可用 | 问题与风险统一记录在平台规约;具体工作另立专题,HAP 不作为替代。 |
Expand Down Expand Up @@ -212,7 +212,7 @@ CLI-P1 应保证:
|---|---|
| `text` | 最终助手文本写 stdout;进度、思考、工具状态、日志和诊断写 stderr。显式 `--output-patch -` 是用户选择的额外 stdout 内容。 |
| `json` | stdout 只写一个结果对象,包含 `type=result`、`subtype`、`is_error`、`result`,以及已建立时的 `session_id`/`turn_id`、本 turn 累计 `usage` 和可用的 `patch`。 |
| `stream-json` | 每行直接序列化一个现有 `AgenticEventEnvelope`;不增加 `schema_version`、`sequence` 或第二套 CLI 事件 taxonomy。 |
| `stream-json` | 每行直接序列化一个现有 `AgenticEventEnvelope`;不增加 `schema_version`、`sequence` 或第二套 CLI 事件 taxonomy。成功的 `DialogTurnCompleted` 只在精确结算和 Patch 生成完成后发布;结算或 Patch 失败改为发布 `SystemError` 并以非零状态退出,避免消费者提前确认成功。 |
| 事件范围 | 只输出本次 session/turn 的事件,以及与其明确关联的 subagent link/tool 事件;同 session 的其他并发 turn 不得混入。 |
| Patch | `json` 可把 `--output-patch -` 放入最终对象;`stream-json` 要求显式文件路径。Patch 是写出显式 Patch 文件前捕获的仓库 `HEAD` 相对工作区快照,包含 staged、unstaged、untracked 及命令启动前已有改动,不包含输出 artifact 本身,也不表达改动归因。 |
| 权限 | 非交互默认拒绝并返回权限失败;`--auto` 只改变当前提交策略,不修改持久化配置。 |
Expand Down Expand Up @@ -269,7 +269,8 @@ TUI renderer、实验性接口和完整外部 Server 协议按总矩阵明确降

CLI/TUI 的会话创建、列出、删除、恢复和历史转录读取通过 Runtime SDK 的类型化端口完成;TUI 只把
`SessionTranscript` 投影为本地渲染状态,不再消费 Core `Message`。Peer Host 的对话提交、精确取消、会话模型更新和
工具确认/拒绝通过 SDK 回到 Core owner;账户同步、会话分支、用量、快照及其他未覆盖操作仍使用经过审查的 Core
工具确认/拒绝通过 SDK 回到 Core owner;本地会话分支通过显式本地范围的 SDK 端口完成,携带远程身份的请求返回类型化
`NotAvailable`,本轮不扩展远程分支。账户同步、TUI 用量卡片持久化、快照及其他未覆盖操作仍使用经过审查的 Core
compatibility 方法,直到各自具备明确 owner、稳定 DTO、远程语义和行为等价测试。
这是一条垂直链路迁移,不是删除整个兼容门面或新建 CLI 专用服务层。

Expand Down
2 changes: 1 addition & 1 deletion docs/architecture/product-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,7 +326,7 @@ flowchart LR
| 产品形态 | 当前扩展能力 | 入口行为 |
|---|---|---|
| Desktop / product-full | 生产入口仍依赖 `bitfun-core/product-full` 作为兼容组装层;“外部 AI 应用”设置已消费 OpenCode Command、standalone Tool 和 Subagent 的统一来源快照、审批、冲突选择与诊断 | 仅本地执行域支持当前三条纵向切片;受管 package plugin 仍只有静态预览,不能据设置页接入宣称完整 OpenCode 插件运行时 |
| CLI | 入口仍以 `bitfun-core/product-full` 作为执行兼容 owner;交互式 TUI 已可执行受支持的 Prompt Command,并通过 `/external-tools`、`/external-agents` 消费与 Desktop 相同的审批、冲突和刷新状态 | 已批准的 standalone Tool 进入现有 Tool Runtime;已批准的外部 Subagent 只支持 fresh single-run。CLI/TUI 不解析生态文件、不启动第二套 worker/Agent owner;非交互入口和 Remote 未接入时不得借本机 TUI 路径代执行 |
| CLI | 入口仍以 `bitfun-core/product-full` 作为执行兼容 owner;交互式 TUI 已可执行受支持的 Prompt Command,并通过 `/external-tools`、`/external-agents` 消费与 Desktop 相同的审批、冲突和刷新状态 | 已批准的 standalone Tool 进入现有 Tool Runtime;已批准的外部 Subagent 只支持 fresh single-run。CLI/TUI 不解析生态文件、不启动第二套 worker/Agent owner;非交互入口和 Remote 未接入时不得借本机 TUI 路径代执行。本地 Agent 与 Peer Host 路径选择 `DeliveryProfile::Cli` 并消费同一 Runtime Parts/SDK;主会话的恢复、转录、本地分支、用量报告生成与精确结算走 SDK,远程分支明确不支持。TUI 用量卡片持久化、快照及 Peer Host/ACP 持久化维护缺口由单一 Core 兼容门面转发;本切片不改变扩展执行边界 |
| HarmonyOS PC 原生 CLI/TUI | 未来平台目标,当前未实现 | 目标、问题和风险见平台规约;具体适配另立专题,HAP、手机 Remote App 与远端代执行均不替代 |
| HarmonyOS PC GUI | 完整 HarmonyOS PC 支持的另一目标形态,当前未实现 | 与 CLI/TUI 共享稳定能力和 Runtime 语义,但独立设计宿主、界面与发布验证;Web、Remote 或现有 Tauri Desktop 均不能替代 |
| HarmonyOS 手机 Remote App | `src/apps/mobile/harmonyos` 是 phone-only ArkTS 远程入口,不持有本地 Rust Agent Runtime | 保持当前能力并按移动端专题独立演进;本轮不提前设计移动 Runtime/TUI/GUI,也不能据此宣称 HarmonyOS PC 本地能力 |
Expand Down
9 changes: 5 additions & 4 deletions docs/plans/core-decomposition-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ assembly → apps。embedded 的 bind、静态 fallback 和任务生命周期移
CLI 是首个入口迁移对象,因为它已有独立产品诉求、显式设计和最小 CI 命令。

当前纵向切片已经完成:入口只提交一次 `DeliveryProfile::Cli`,通过现有 `ProductAssembler` 获得计划、服务可用性、
Harness 和禁用的插件 binding;TUI、Exec、Session 与 Usage 共用一个 `CliRuntimeContext`。会话创建(包括
`exec --session-id` 和缺失后端会话通过独立固定 ID 方法按原 ID 重建)/列举/
删除、会话模型更新、轮次提交和取消走 Agent Runtime SDK;SDK v1 缺口集中在一个 Core 兼容门面。Agentic Event Queue 仍是唯一
Harness 和禁用的插件 binding;TUI、Exec、Session 与 Usage 共用一个 `CliRuntimeContext`。主会话客户端的创建(包括
`exec --session-id` 和缺失后端会话通过独立固定 ID 方法按原 ID 重建)/列举/删除/恢复、类型化转录、本地分支、用量生成、
会话模型更新、轮次提交/取消和精确轮次结算均走 Agent Runtime SDK;TUI 用量卡片持久化、快照、Peer Host/ACP 的维护等
未迁移能力继续集中在一个 Core 兼容门面。Agentic Event Queue 仍是唯一
owner,各入口只建立独立广播订阅,有界兼容队列满载不再阻断广播。TUI 与 Exec 审批均为调用级策略,不写全局
配置;CLI 本地路径不获取具体 PersistenceManager。交互、执行和管理入口分别控制 Peer Host/MCP 生命周期,管理查询不启动
这两类外部服务。结构化输出复用现有 Agentic envelope;会话 ID 与
Expand All @@ -72,7 +73,7 @@ Peer Host 的 Runtime 接入和跨 Relay/Desktop/Web 的协议切换保持独立

下一步按独立纵向切片推进:

1. 以真实调用方和行为等价测试补齐 SDK 端口,逐项缩小分支、用量、快照和持久化维护兼容面;会话模型更新已迁移,模型目录与配置仍保留在产品入口。
1. 以真实调用方和行为等价测试逐项缩小快照及 Peer Host/ACP 持久化维护兼容面;远程分支另行定义身份和存储语义,模型目录与配置仍保留在产品入口。
2. 继续迁移 ACP 尚未接入 SDK 的持久化历史、模型目录/模式和 MCP 操作;ACP stdio 与协议投影生命周期保留在接口入口。
3. 继续按真实故障样例拆分 TUI 副作用边界,不以大规模重写替代现有回归保护。

Expand Down
Loading
Loading