fix: unify capability settings navigation
Skills and MCP previously occupied separate top-level settings categories. They now share one Capabilities and tools category with accessible horizontal tabs, while the unimplemented tool environment remains hidden until its settings are usable. Prevent nested PageTabs wrappers from collapsing to zero height in scrollable Flex layouts, add a CSS regression guard, and document the shared rule plus the planned local Node.js and Python environment. Release note: 设置中心将 Skills 和 MCP 合并到“能力与工具”,并修复水平页签可能被压缩而不可见的问题;尚未实现的工具执行环境暂不显示。
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
# 本机工具环境功能逻辑设计
|
||||
# 工具执行环境功能逻辑设计
|
||||
|
||||
## 文档信息
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
| 状态 | 计划 |
|
||||
| 版本 | 0.1 |
|
||||
| 日期 | 2026-09-01 |
|
||||
| 关联 PRD | [本机工具环境 PRD](./prd.md) |
|
||||
| 关联场景 | [本机工具环境 User Stories](./user-stories.md) |
|
||||
| 关联 PRD | [工具执行环境 PRD](./prd.md) |
|
||||
| 关联场景 | [工具执行环境 User Stories](./user-stories.md) |
|
||||
|
||||
本文是本功能业务规则、状态转换、决策表和跨场景一致性的权威来源。它不定义组件视觉,也
|
||||
不规定代码模块如何实现。
|
||||
@@ -65,6 +65,19 @@ stdio MCP 配置的绝对 command 表达用户对该 MCP 的明确覆盖,原
|
||||
|
||||
能力没有专属实际诊断时,状态只能是“未验证”,不能根据解释器版本或文件存在推断“已就绪”。
|
||||
|
||||
### INV-9 受管工具工件来源明确且冻结
|
||||
|
||||
每个受管工具外部工件同时声明固定原生地址和 OSS Target。用户选择一个下载源后,任务
|
||||
启动时冻结该来源;失败不回退。OSS 必须是原生工件的字节级副本。
|
||||
|
||||
### INV-10 设置导航不改变业务状态
|
||||
|
||||
“能力与工具”的三个水平 Tab 只组织界面,不改变 Skill、MCP 或工具环境设置。切换 Tab
|
||||
不得提交、丢弃或重置当前设置面板会话中的编辑状态;关闭后不持久化外层 Tab。
|
||||
|
||||
分阶段交付期间,未实现的“工具执行环境”不进入 Tab 状态集合。第一阶段状态集合只有
|
||||
`skills | mcp`,后续实现完成后才扩展为 `skills | mcp | tool-environment`。
|
||||
|
||||
## 3. 状态维度
|
||||
|
||||
### 3.1 来源选择
|
||||
@@ -123,6 +136,15 @@ error
|
||||
- `incompatible` 表示解释器版本、架构或 ABI 不满足已声明要求。
|
||||
- `error` 表示诊断本身没有得出有效结论。
|
||||
|
||||
### 3.5 工具下载源
|
||||
|
||||
```text
|
||||
native
|
||||
oss
|
||||
```
|
||||
|
||||
这是独立于 Node/Python 环境来源的持久设置。全新用户默认 `native`。
|
||||
|
||||
## 4. 来源解析决策表
|
||||
|
||||
| 保存来源 | 当前事实 | 解析结果 | 是否回退 |
|
||||
@@ -250,6 +272,20 @@ not-installed
|
||||
|
||||
每个工具调用的活动记录应归属于实际承载它的进程,不根据最新设置追改历史来源。
|
||||
|
||||
### 8.3 设置导航
|
||||
|
||||
| 入口或操作 | 打开的外层 Tab | 数据行为 |
|
||||
| --- | --- | --- |
|
||||
| 普通“能力与工具”入口 | Skills | 不修改业务数据 |
|
||||
| 用户点击 Skills | Skills | 不修改业务数据 |
|
||||
| 用户点击 MCP | MCP | 不修改业务数据 |
|
||||
| 未来的定向入口 | 指定 Tab | 不修改业务数据 |
|
||||
| 同一设置面板会话中切换 Tab | 用户选择的 Tab | 保留三个面板的会话内状态 |
|
||||
| 关闭后重新打开普通入口 | Skills | 不恢复上次外层 Tab |
|
||||
|
||||
MCP 内层页签状态属于 MCP 面板,不与外层 Tab 合并。外层 Tab 的默认值或定向入口不能改写
|
||||
MCP 的连接、凭据、启用或 Runtime 分配状态。
|
||||
|
||||
## 9. 能力依赖逻辑
|
||||
|
||||
### 9.1 诊断输入
|
||||
@@ -298,7 +334,9 @@ not-installed
|
||||
|
||||
### 11.2 托管 Python
|
||||
|
||||
- 首期支持当前官方 GitHub/镜像来源。
|
||||
- Windows 原生 Target 固定到官方 NuGet 包;macOS/Linux 原生 Target 固定到 Astral
|
||||
`python-build-standalone`。
|
||||
- OSS Target 是对应原生工件的字节级副本。
|
||||
- 下载源不可达时保持未安装或旧版可用状态,并显示准确原因。
|
||||
- 首期不提供 Python 离线包导入,避免引入未经选型的包格式和导入流程。
|
||||
- 完全离线用户可以选择已经离线安装的自定义 Python。
|
||||
@@ -306,6 +344,20 @@ not-installed
|
||||
未来若加入离线导入,必须在 PRD、User Stories、逻辑状态和技术包校验中同时定义,不能只
|
||||
增加一个文件按钮。
|
||||
|
||||
### 11.3 工具下载源决策
|
||||
|
||||
| 保存选择 | 目录事实 | 行为 |
|
||||
| --- | --- | --- |
|
||||
| 原生地址 | 原生 Target 完整 | 请求固定上游 URL |
|
||||
| 原生地址 | 原生 Target 缺失 | 工件不可下载,不请求 OSS |
|
||||
| OSS 镜像 | OSS Target 完整 | 只请求固定 OSS URL |
|
||||
| OSS 镜像 | OSS Target 缺失 | 工件不可下载,不请求原生地址 |
|
||||
| 任意 | 下载后字节数/SHA-256 不符 | 删除暂存并失败 |
|
||||
| 任意 | 设置在任务期间变化 | 当前任务不变,后续任务使用新选择 |
|
||||
|
||||
该选择只覆盖受管工具目录中的外部工件,不影响模型、应用更新、Agent、pip/npm 注册表或
|
||||
用户 URL。
|
||||
|
||||
## 12. 冲突与一致性检查
|
||||
|
||||
| 可能冲突 | 唯一规则 |
|
||||
@@ -318,6 +370,10 @@ not-installed
|
||||
| Ask 环境包含解释器 vs Ask 只读 | Ask 权限边界优先 |
|
||||
| 本机设置 vs 远程项目 | 远程隔离优先 |
|
||||
| 镜像不可达 vs 其他来源可用 | 不在同一次操作中静默切换来源 |
|
||||
| 工具下载源 vs 模型/更新下载源 | 各自独立,工具执行环境设置不覆盖其他功能 |
|
||||
| OSS 对象 vs 原生工件 | 必须字节、大小和 SHA-256 相同 |
|
||||
| 合并设置入口 vs 原有 Skills/MCP 数据 | 只重组导航,不迁移或重写业务数据 |
|
||||
| 外层 Tab vs MCP 内层 Tab | 保持两个独立 tablist、标识和键盘焦点范围 |
|
||||
|
||||
## 13. 逻辑评估结论
|
||||
|
||||
@@ -338,6 +394,8 @@ not-installed
|
||||
| 远程边界 | 通过 | 本机配置不进入 Host |
|
||||
| 受限网络 | 通过 | 来源失败可见,不在同次操作静默切换 |
|
||||
| 完全离线 | 有明确限制 | Node 可用;Python 首期要求已有自定义环境 |
|
||||
| 受管工具工件来源 | 通过 | 原生/OSS 独立选择、任务冻结、禁止回退 |
|
||||
| 设置导航 | 通过 | 单一一级入口、分阶段水平 Tab、业务数据不变 |
|
||||
|
||||
### 13.2 一致性评估
|
||||
|
||||
@@ -363,12 +421,15 @@ not-installed
|
||||
|
||||
| 逻辑范围 | PRD | User Stories |
|
||||
| --- | --- | --- |
|
||||
| 首次使用默认状态 | FR-1、FR-2、FR-6 | US-A0 |
|
||||
| 明确来源与禁止回退 | FR-3、FR-8 | US-C1、US-C2、US-D3 |
|
||||
| 托管 Node | FR-1 | US-A1、US-B2 |
|
||||
| 托管 Python 生命周期 | FR-2、FR-9 | US-A2、US-D2、US-D4、US-D5 |
|
||||
| 三层状态 | FR-6 | US-A3、US-A4 |
|
||||
| SKILL 命令解析 | FR-4 | US-A1、US-A3 |
|
||||
| MCP 命令解析 | FR-5 | US-B1、US-B2、US-B3 |
|
||||
| 生效时机 | FR-7 | US-C3、US-C4 |
|
||||
| Ask/Execute | FR-10 | US-D6 |
|
||||
| 远程隔离 | FR-7、FR-9 | US-D1 |
|
||||
| 受限网络与离线 | FR-2 | US-E1、US-E2 |
|
||||
| 受限网络与离线 | FR-2、FR-11 | US-E1、US-E2、US-E3 |
|
||||
| 统一设置入口 | FR-12 | US-F1、US-F2 |
|
||||
|
||||
Reference in New Issue
Block a user