mirror of
https://github.com/aiclientproxy/proxycast.git
synced 2026-09-24 23:10:56 +08:00
8.5 KiB
8.5 KiB
Lime 工具治理开发计划
1. 目标
把 Lime 的工具系统从“多源并存、权限混写、上下文不可审计”收敛为:
- 单一 metadata 事实源
- 单一 native catalog
- MCP runtime 独立但统一注入
- inventory 可审计
- 权限平面分层
2. 本轮已完成
Phase A:事实源收口(已完成)
- 把 tool metadata 解析统一到
lime_core::tool_calling - MCP manager 改为复用共享 metadata
tool_searchbridge tool 改为复用共享 metadata- provider 转换层改为复用共享 metadata
验收标准
- 不再存在多处独立解析
deferred_loading/allowed_callers/input_examples - tool search 与 MCP list/search 的语义一致
Phase B:native catalog 完整化(已完成)
- 建立完整
ToolCatalogEntry - 引入
ToolSourceKind - 引入
ToolPermissionPlane - 引入
ToolLifecycle - 补全 core / creator / browser assist tools
- 形成默认 allowlist 子集
验收标准
- 能回答“当前到底有哪些 native tools”
- 能区分 current / compat
- 能区分 session allowlist / parameter restricted / caller filtered
Phase C:runtime inventory(已完成)
- 新增
agent_tools/inventory.rs - 新增
agent_runtime_get_tool_inventory - 接入
agentRuntime.ts - 接入 mock / governance command catalog / API test
验收标准
- 一条命令能同时输出 catalog / registry / extension / MCP 四视角
- 能看到 visible / deferred / caller_allowed 状态
- 能发现 registry 未被 catalog 覆盖的漂移项
Phase D:文档与治理说明(已完成)
- 输出
docs/prd/tools/README.md - 输出
docs/prd/tools/architecture.md - 输出
docs/prd/tools/inventory.md - 输出
docs/prd/tools/development-plan.md
验收标准
- 有架构图
- 有时序图
- 有流程图
- 有 current / compat / dead-candidate 分类
- 有 Codex / Aster / Lime 对照
Phase E:测试矩阵补强(本轮完成)
- 补齐
catalog.rs的 surface / lifecycle / default allowlist 边界测试 - 补齐
inventory.rs的 caller / extension source / deferred 状态测试 - 补齐
mcp manager的冲突保序与默认 defer 阈值测试 - 补齐
tool_search的 extension 前缀匹配与状态判定测试 - 补齐 provider 层对
x-lime/x_limealias 与去重行为测试 - 补齐前端
agentRuntime.tsinventory helper 默认参数测试 - 新增
lime-agent轻量测试载体,复用catalog.rs/inventory.rs纯逻辑模块,绕开主包 Tauri 大链接 - 把
tool_permissions.rs/shell_security.rs迁出lime-agent的lib.rs编译图,改为独立 integration test 夹具加载,并补治理守卫与 Vitest 护栏
Phase F:执行权限事实源收口(本轮完成)
- 新增
src-tauri/src/agent_tools/execution.rs - 把 workspace execution permission 模板从
aster_agent_cmd.rs收回agent_tools边界 - 统一
bash/Taskwarning gate 语义 - 把 execution profile 暴露到 inventory /
agentRuntime.ts - 补齐
execution.rs与 inventory 的定向测试 - 新增
NativeAgentConfig.tool_execution,承接 persisted policy 覆盖 - 让
request.metadata.harness.executionPolicy承接 runtime session override - 让
agent_runtime_get_tool_inventory支持metadata,返回 runtime override 后的 effective profile - 给 inventory 增加 provenance 字段,逐项标记
default/persisted/runtime - 补齐配置层 default / alias / roundtrip 测试
验收标准
- 对齐 Codex 风格的四类断言:
- 默认值是否稳定
- legacy / alias 字段是否兼容
- 显式配置是否覆盖默认策略
- 持久语义是否在多层之间保持一致
- 新增工具治理逻辑至少要被以下矩阵之一覆盖:
- catalog 边界
- runtime inventory 快照
- MCP runtime 过滤 / 搜索 / defer
- provider metadata 透传
- 前端命令 helper
本轮验证策略
- 小包优先:优先跑
lime-providers、lime-mcp与前端agent.test.ts - 轻量逻辑优先:
catalog.rs/inventory.rs的纯逻辑单测优先从lime-agent执行,测试名使用模块前缀:agent_tools::catalog::tests::...agent_tools::inventory::tests::...
- 主包降级为编译检查:
lime主包测试会触发超大链接;在当前环境磁盘仅余约4.4Gi时,优先做cargo check/ 定向编译验证 - 边界说明:若后续 CI 或本地磁盘空间恢复,应追加一次
lime主包的完整定向测试,把catalog.rs/inventory.rs/aster_agent_cmd.rs新增测试全部实跑
推荐命令
# 轻量 Rust 纯逻辑测试
cargo test --manifest-path "src-tauri/Cargo.toml" -p lime-agent \
agent_tools::catalog::tests::test_tool_catalog_entries_for_surface_counts_and_lifecycle_boundaries -- --exact
cargo test --manifest-path "src-tauri/Cargo.toml" -p lime-agent \
agent_tools::inventory::tests::test_build_tool_inventory_marks_extension_sources_and_statuses -- --exact
# MCP / Provider 定向测试
cargo test --manifest-path "src-tauri/Cargo.toml" -p lime-mcp empty_query_prioritizes_always_visible_then_name -- --nocapture
cargo test --manifest-path "src-tauri/Cargo.toml" -p lime-providers supports_x_lime_alias -- --nocapture
# 前端契约与治理守卫
npm test -- "src/lib/api/agent.test.ts"
npm test -- "src/lib/governance/legacyToolPermissionGuard.test.ts"
npm run test:contracts
npm run governance:legacy-report
3. 下一刀建议
3.1 优先级 P1:删除旧权限系统前先做守卫
本轮已完成:
tool_permissions.rs/shell_security.rs已明确标为 dead-candidate- 已从
lime-agentcrate 根移除公开表面 - 已退出
lime-agent的lib.rs编译图,仅通过tests/legacy_permission_surfaces.rs测试夹具加载 - 已在治理脚本与 Vitest 护栏中禁止新引用回流
剩余原因:
- 这两套逻辑虽然已不在主链路,但文件级删除仍属于高风险动作,需要单独确认
3.2 优先级 P1:把“策略覆盖层”接到 execution 事实源
本轮已完成:
workspace allowlist/parameter restriction/warning gate/sandbox profile已有统一 execution 事实源aster_agent_cmd.rs已从手工 permission 模板拼装降级为 orchestration- inventory 已能审计 execution profile
NativeAgentConfig.tool_execution已承接 persisted policyrequest.metadata.harness.executionPolicy已承接 runtime session override- inventory 已可查看 runtime override 后的 effective execution profile
- inventory 已可逐项查看 execution provenance,而不是只看最终值
剩余下一步建议:
- 如果后续要做 UI 可视化,再把 effective policy 与来源标识直接展示在工具调试页
- 保持
catalog.rs只描述目录层,execution.rs只描述执行层,避免覆盖逻辑再次散回命令层
3.3 优先级 P2:继续做减法,而不是再加抽象
不要再新增:
- 第二套 tool metadata parser
- 第二套 native tool list
- 第二套 browser tool 目录
- 第二套 MCP 注入路径
后续所有新工具都应满足:
- 在
catalog.rs有记录 - metadata 走
lime_core::tool_calling - runtime inventory 能看见
4. 风险与对策
| 风险 | 说明 | 对策 |
|---|---|---|
| catalog 与 runtime 再次漂移 | 新增工具时只改注册不改目录 | 以 inventory + command catalog 作为守卫 |
| MCP caller 语义再次分裂 | MCP tool schema / extension allowed_caller 各自解释 | 一律先过 tool_calling.rs |
| 权限语义再次混写 | catalog、allowlist、sandbox、approval 又掺在一起 | 强制按目录层 / 上下文层 / 执行层汇报与设计 |
| 旧权限系统回流 | 新代码重新引用 tool_permissions.rs |
标记 dead-candidate,并增加仓库级扫描守卫 |
5. 最终建议
这次治理完成后,后续迭代请遵守三条硬规则:
- 新增工具先入 catalog
- 新增 metadata 字段先入
tool_calling.rs - 新增运行时注入能力必须能被 inventory 看见
只要守住这三条,Lime 的工具数继续增长,也不会再回到“上下文失控 + 权限混乱”的状态。