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
5 changes: 3 additions & 2 deletions docs/architecture/cli-product-line-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -454,8 +454,9 @@ Plugin/Tool、可执行 Skill/Command、MCP/LSP/Formatter、远程 Reference 等
规则文件优先复用项目已有文件,不复制出第二份内容。若不同生态规则冲突,导入报告必须展示目标文件、
优先级和冲突段,不能自动拼接。

现有对 `.claude/.codex/.opencode/.agents` Skill 根的直接发现需要补来源身份、全局/项目作用域、自动应用偏好、
变化监听和可见性测试。OpenCode 兼容来源继续直接发现官方目录;Codex/Claude 是否增加新的持续来源另行决定。
现有对 `.claude/.codex/.opencode/.agents` Skill 根的直接发现已经保留来源身份和全局/项目作用域,并在 GUI/TUI
展示来源和默认覆盖状态,模式配置再展示实际采用项;固定根顺序保持为 Skill Registry 的独立回归契约。变化监听与可见性测试仍需
后续补齐。OpenCode 兼容来源继续直接发现官方目录;Codex/Claude 是否增加新的持续来源另行决定。
Skill 说明和索引可按 L1 处理,脚本、URL 和外部依赖按 L2 确认;显式导入仍不得复制凭据值。MCP 启用状态按
OpenCode 来源解释,首次连接、策略限制和凭据缺失分别显示。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,8 @@ BitFun 采用“一个能力核心,多种宿主适配”的方向,而不是
|---|---|---|
| `exclusive` | 主 Session Store、最终 Compactor 等只能有一个 active owner 的能力 | 组装时选出一个 Provider;运行时不允许两个实现双写。 |
| `ordered-chain` | Context Transformer、Prompt/Tool Hook、验证器 | 顺序由能力 owner 或生态 adapter 明确;每步校验,失败策略类型化。 |
| `namespace-union` | Tools、Skills、Commands、Agents | 先按来源限定身份保留候选,再按名称和作用域解析;同名不静默跨生态覆盖。 |
| `namespace-union` | Tools、Commands、Agents | 先按来源限定身份保留候选,再按名称和作用域解析;同名不静默跨生态覆盖。冲突界面先列 BitFun、再按稳定 provider 身份列其他生态,但展示顺序不自动决定胜者。 |
| `ordered-namespace` | 现有 Skill 根 | 保留来源限定身份并按 Skill Registry 已发布的根顺序解析同名项;被覆盖项继续可见。来源元数据只用于解释结果,不参与重新排序。 |
| `fallback` | Memory Retriever、模型 Provider、外部服务 | 只对声明为可恢复的错误切换;权限拒绝、取消和副作用不自动 fallback。 |
| `fan-out` | 只读事件 Observer、运维遥测 | Observer 互相隔离;不能阻塞或改变权威业务结果。 |

Expand Down Expand Up @@ -279,6 +280,9 @@ Host Adapter 必须把宿主 `AbortSignal`、turn interruption 或 session stop
内容版本、执行域或权限包络变化后重新求值。产品保护项只限身份、数据隔离、权限入口、故障恢复、升级/卸载完整性
和法律要求,不能把所有内置能力设成不可覆盖。

同名候选在 GUI/TUI 中固定先展示 BitFun 来源,其余生态按稳定 `provider_id` 排序,同一生态内部沿用 adapter 的
正式来源顺序。这个顺序只用于减少阅读成本;用户未选择时仍保持冲突未决,不能把“BitFun 排在第一”误实现为静默激活。

## 7. 权限、信任与执行边界

权限检查分成五个不同阶段:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ TypeScript/Bun、包依赖、package plugin、Codex/Claude Code 适配器、prim

1. 自动发现当前执行域中的用户全局、项目和工作区外部来源,不阻塞项目打开、TUI 输入或无关会话。
2. 当前能够安全消费且不存在同名冲突的低风险内容默认无感应用,并通过可撤销的非阻塞摘要说明来源和影响;
外部能力与产品本地能力、或独立外部 provider 之间发生同名冲突时,不得静默选择胜者。
Command、Tool、Subagent 等外部可执行能力与产品本地能力、或独立外部 provider 之间发生同名冲突时,不得
静默选择胜者。现有 Skill 根继续按已发布顺序解析,但必须展示来源和默认覆盖状态;带模式的管理界面再展示
应用模式开关后的实际采用项。
3. 插件、Hook、Command、MCP 等可执行或有外部副作用的内容先发现,首次启用或能力扩大时再由用户确认。
4. 运行中感知来源修改、升级、删除和重新出现;成功更新安全切换,失败时优雅保留仍合规的上一有效代次。
5. 用户始终能解释“发现了什么、来自哪里、当前是否生效、为何降级、下一步能做什么”。
Expand Down Expand Up @@ -232,7 +234,7 @@ flowchart LR
| 本地 JSON 存储服务 | 提供跨进程锁、锁内读改写和严格同卷原子替换等通用文件能力;替换失败时保留旧文件 | 定义外部来源偏好 schema、冲突策略或生态语义。 |
| 共享生命周期协调器 | 调用已注册 provider、生成不可变候选、按 provider 原子替换、保留隔离诊断,并请求能力 owner 切换 | 按生态 ID 分支业务行为、解析生态文件、直接提交配置、工具、权限或界面状态。 |
| 产品展示投影 | 按作用域、工作区或用户目录关系统一生成安全来源位置,清理可见诊断文本中的已知绝对路径,并按 `Source / Command / Tool / Subagent` 资源类型路由诊断 | 让 GUI/TUI 解析 provider 诊断码前缀、识别 `.opencode`、`.claude` 等私有目录结构,或接收原始用户/工作区路径。 |
| 冲突解析 | 对独立 provider 或产品本地能力的同名候选建立版本敏感指纹;未选择时不激活,选择后只在指纹不变时复用 | 用 adapter 优先级静默覆盖另一生态或本地能力,或把选择写回外部文件。 |
| 冲突解析 | 对独立 provider 或产品本地可执行能力的同名候选建立版本敏感指纹;未选择时不激活,选择后只在指纹不变时复用。现有 Skill 固定根顺序由 Skill owner 独立维护 | 用 adapter 优先级静默覆盖另一生态或本地可执行能力,或把选择写回外部文件。 |
| 激活策略与各能力 owner | 根据风险、用户选择、组织上限和执行域决定自动应用、等待确认或限制 | 修改生态加载顺序或把策略拒绝伪装成解析失败。 |
| Runtime Configuration Service | 应用兼容配置视图,执行显式导入、冲突预览、原子写入和撤销 | 读取凭据值或加载插件代码。 |
| Plugin Runtime Host / 执行服务 | 准备代次、监督进程、期限、取消、背压、健康和贡献生命周期 | 决定来源优先级、产品提示策略或最终业务状态。 |
Expand Down
16 changes: 9 additions & 7 deletions docs/architecture/product-architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ BitFun 同时面向桌面 GUI、TUI/CLI、Web、ACP、Server、Remote、SDK 和
8. **平台差异留在入口和具体能力实现**:target 只选择 ABI,feature 只控制确实可选的依赖;共享内核不按平台
分叉业务语义,也不新增包含所有 OS 方法的总接口。新端口必须有当前调用方。
9. **发现无感,生效按风险分级**:外部用户/项目来源后台发现,不阻塞产品入口;无冲突的低风险声明式内容可自动应用并提供撤销;
与产品本地能力或独立外部 provider 同名时必须由用户选择,且选择只在候选身份与内容版本不变时复用;可执行来源首次启用或能力扩大时形成非阻塞确认。激活后的本地 OpenCode 扩展默认按当前用户能力
Command、Tool、Subagent 等可执行来源与产品本地能力或独立外部 provider 同名时必须由用户选择,且选择只在候选身份与内容版本不变时复用。现有 Skill 根继续按已发布顺序解析,并展示来源和默认覆盖项;带模式的管理界面展示应用模式开关后的实际采用项;
可执行来源首次启用或能力扩大时形成非阻塞确认。激活后的本地 OpenCode 扩展默认按当前用户能力
运行;经 BitFun 能力接口的调用可细分限制,脚本直接文件/网络/进程能力只在真实操作系统或容器边界存在时可
粗粒度收紧,否则停用相应 target。策略降级必须与待确认、解析错误和插件故障分开显示。
10. **开放权限不降低可靠性**:第三方代码始终位于受监督的独立执行进程,具备期限、取消、背压、崩溃回收、
Expand Down Expand Up @@ -284,8 +285,8 @@ flowchart LR
维护,不能因为某一项降级就把整体状态写成“完整覆盖”。

产品内置扩展与用户插件可以复用主机可靠性和最终能力归属,但来源、升级、卸载和产品必要性不同。只有产品
身份、安全恢复或法律要求等少量明确保护项不可被覆盖;普通内置命令、工具和主题默认可以按 OpenCode 兼容顺序
被用户扩展替换或关闭。具体规则见
身份、安全恢复或法律要求等少量明确保护项不可被覆盖;普通内置命令、工具和主题可经用户明确选择被外部扩展
替换或关闭,不能按注册或适配器顺序静默切换。具体规则见
[`product-customization-blueprint.md#8-产品内置扩展与用户插件`](product-customization-blueprint.md#8-产品内置扩展与用户插件)。

完整能力状态、设计细节和阶段顺序分别见
Expand Down Expand Up @@ -325,8 +326,8 @@ 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 路径代执行。本地 Agent 与 Peer Host 路径选择 `DeliveryProfile::Cli` 并消费同一 Runtime Parts/SDK;主会话的恢复、转录、本地分支、用量报告生成与精确结算走 SDK,远程分支明确不支持。TUI 用量卡片持久化、快照及 Peer Host/ACP 持久化维护缺口由单一 Core 兼容门面转发;本切片不改变扩展执行边界 |
| Desktop / product-full | 生产入口仍依赖 `bitfun-core/product-full` 作为兼容组装层;“外部 AI 应用”设置已消费 OpenCode Command、standalone Tool 和 Subagent 的统一来源快照、审批、冲突选择与诊断;Skills 场景和设置列表显示已发现 Skill 的生态来源与覆盖结果 | 仅本地执行域支持当前三条可执行纵向切片;Skill 仍使用独立 Registry,不据来源展示宣称已并入外部来源协调器。受管 package plugin 仍只有静态预览,不能据设置页接入宣称完整 OpenCode 插件运行时 |
| CLI | 入口仍以 `bitfun-core/product-full` 作为执行兼容 owner;交互式 TUI 已可执行受支持的 Prompt Command,并通过 `/external-tools`、`/external-agents` 消费与 Desktop 相同的审批、冲突和刷新状态;Skill 列表显示来源,模式配置按实际选择结果说明覆盖来源 | 已批准的 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 Expand Up @@ -355,8 +356,9 @@ flowchart LR
事件因果和审计;Slot 的 exclusive、ordered-chain、namespace-union、fallback 或 fan-out 语义必须由能力 owner 明确。
- TUI 与 GUI 不共享内部主题键、键位模型或界面状态;OpenCode TUI 原始键和组件只存在于适配层,转换后由
TUI 宿主消费,不能用构建期布局选择冒充运行时插件兼容。
- 只有产品身份、安全恢复和法律要求等明确保护项不能被用户扩展覆盖;普通内置工具、命令和主题默认遵循
OpenCode 兼容优先级。产品内置扩展不能复用用户来源批准或启用记录,产品签名也不能绕过运行时
- 只有产品身份、安全恢复和法律要求等明确保护项不能被用户扩展覆盖;普通内置工具、命令和主题作为 BitFun
来源候选保留,跨生态同名时由用户选择,不能按注册顺序静默决胜。冲突界面固定先展示 BitFun 候选,但展示顺序
不等于自动选择。产品内置扩展不能复用用户来源批准或启用记录,产品签名也不能绕过运行时
权限、审计和故障隔离。
- GUI/TUI 布局选择不复制主题 schema,不固化动态能力状态,也不携带可执行 UI 或任意构建脚本。
- 新 profile 只有在真实入口消费组装结果、能力可用性和类型化降级后才算接入;仅有枚举、空计划、re-export
Expand Down
8 changes: 4 additions & 4 deletions docs/architecture/product-customization-blueprint.md
Original file line number Diff line number Diff line change
Expand Up @@ -167,7 +167,7 @@ GUI 主题由 Web/TS 主题模块定义,TUI 主题由 CLI/TUI 宿主定义,I
| 更新 | 随产品升级和回滚 | 用户或组织独立更新、停用和卸载 | 来源身份/完整性和更新策略允许时自动准备普通候选;软件包版本/完整性未获更新策略覆盖或能力扩大时等待确认;失败时只保留仍合规的健康旧进程,精确旧物化目录可校验时才重建 |
| 权限 | 使用同一有效策略;直接脚本副作用受真实 OS/容器边界限制 | 同左 | 同左 |
| 执行 | 与其他插件走同一进程隔离、期限、取消和恢复路径 | 同左 | 同左 |
| 冲突 | 普通贡献遵循目标生态顺序;少量产品保护项除外 | 按对应 BitFun 规则 | OpenCode 顺序,可覆盖普通内置贡献 |
| 冲突 | 作为 BitFun 候选保留并在选择界面优先展示;少量产品保护项除外 | 与其他 BitFun 候选一并优先展示 | 生态内按 OpenCode 顺序;跨生态同名时由用户选择,不静默覆盖 |

管理、停用和更新使用包含生态、来源类型、规范化来源地址和 target 的来源限定运行实例身份;声明 `id` 只参与
生态识别和贡献覆盖,不能单独作为管理键。因此同名产品内置、BitFun 原生和 OpenCode 来源可以共存,且状态与
Expand All @@ -177,8 +177,8 @@ GUI 主题由 Web/TS 主题模块定义,TUI 主题由 CLI/TUI 宿主定义,I
命令、主题和 Agent 不能仅因“随产品携带”成为保护项。发生保护冲突时,状态页必须显示被保护项、插件来源、
最终结果和替代入口,不能静默丢弃插件贡献。

用户插件覆盖普通内置贡献只改变当前运行时的名称解析结果,不修改产品组装结果、已签名字节或内置扩展摘要。
状态页必须同时保留内置来源、覆盖来源和恢复动作;停用覆盖来源后按同一生态顺序恢复内置贡献。保护清单只能
用户明确选择插件覆盖普通内置贡献时,只改变当前运行时的名称解析结果,不修改产品组装结果、已签名字节或内置扩展摘要。
状态页必须同时保留所有候选、选择结果和恢复动作;候选集合或行为版本变化后重新选择,不静默切换。保护清单只能
包含上段列出的具体系统项,不能用“产品已签名”把所有内置工具、命令、主题或 Agent 变成不可覆盖项。

必需内置扩展缺失或摘要不匹配时构建失败;运行时不可用时明确报告产品无法启动或功能降级。可选扩展失败不
Expand Down Expand Up @@ -211,5 +211,5 @@ GUI 主题由 Web/TS 主题模块定义,TUI 主题由 CLI/TUI 宿主定义,I
3. GUI/TUI 只消费各自布局和主题字段,一端字段不会进入另一端。
4. 主应用、CLI、安装器和 updater 使用一致的产品身份、更新渠道和签名公钥引用。
5. 两个产品的配置、日志、凭据引用、插件状态和更新状态保持隔离。
6. 普通内置扩展遵循 OpenCode 覆盖顺序;保护冲突、停用、失败和回退可解释
6. 同名候选先展示 BitFun、再稳定展示其他生态;跨生态选择、保护冲突、停用、失败和恢复均可解释
7. 用户配置和插件不能提高产品能力上限、改变产品身份或继承产品签名信任。
Loading
Loading