diff --git a/.blueprint/manifest.yaml b/.blueprint/manifest.yaml index ce7abe4..21e4f75 100644 --- a/.blueprint/manifest.yaml +++ b/.blueprint/manifest.yaml @@ -516,6 +516,15 @@ modules: note: "目标:子项目在 Claude Code、Codex、DSH 三端都能继续开发。2026-09-30 无头基线探针:Codex 全绿;Claude 与 DSH 连全局 /mcp、看不到开发变量工具;Claude 缺 lian-jing skill。先统一连接地址,再处理认证与 skill 投影,并把探针固化为可重跑检查。" position: [3500, 950] + - id: architecture-evolution + name: 炼境架构演进 + area: infra + status: planned + progress: 0 + updated: 2026-10-01 + note: "技术栈评估:Tauri v2 + Rust + React/TS 适合管家方针,不换栈。按收益排序的结构改进:A1 本体与投影分离(core crate + CLI,P4/P8 依赖)、A2 前后端类型契约生成、A3 配置文本模板化、A4 MCP 改用官方 rmcp SDK。" + position: [3750, 950] + edges: - from: project-resource-broker to: project-dev-variables @@ -854,3 +863,7 @@ edges: - from: project-dev-variables to: agent-client-parity type: dependency + # P4 探针固化、P8 一键接入以本体与投影分离(A1 的 CLI 投影)为承载。 + - from: architecture-evolution + to: agent-client-parity + type: dependency diff --git a/.blueprint/modules/architecture-evolution.md b/.blueprint/modules/architecture-evolution.md new file mode 100644 index 0000000..849a192 --- /dev/null +++ b/.blueprint/modules/architecture-evolution.md @@ -0,0 +1,45 @@ +--- +id: architecture-evolution +name: 炼境架构演进 +status: planned +progress: 0 +--- + +## 概述 + +2026-10-01 评估结论:现有技术栈(Tauri v2 + Rust + React/TS + SQLite)适合「管家 / agent 客户端兼容层」方针,不换栈。常驻托盘服务、凭据安全、单文件分发、cargo test 快速回归都是 Rust/Tauri 的强项;真正的难点在 Windows 与各客户端自身机制(cmd 引号与 %VAR% 展开、CRLF、Claude 配置作用域、DSH !!js、Node 拒绝直接执行 .cmd),与语言无关。Electron 全 Node 栈(与三家客户端同生态、JSON/YAML 顺手)因常驻内存大、凭据需原生模块且须整体重写而否决;Go、Python 无明显收益。 + +本模块收集比「换语言」更影响实现效率的结构性改进,按收益排序。 + +## 任务拆解 + +### 📋 A1 — 本体与投影分离:core crate + CLI +- status: todo +- complexity: L(先 /architect 再拆) +- files: src-tauri/Cargo.toml(改为 workspace)、新增 core 与 cli crate(实现时定) +- acceptance: "agent_verify: [cargo test] 业务逻辑位于不依赖 Tauri 的 core crate;[CLI] 同一 exe 或独立 cli 在炼境界面未运行时可执行 onboard / probe / diagnostics 等命令并返回结构化结果。" +- 为什么:核心逻辑写在 Tauri 应用内,炼境不运行时 agent 与脚本无法调用。业务函数已按「连接由调用方注入」编写,拆出成本可控。拆分后 Tauri 界面、MCP 服务、命令行成为同一本体的三个投影,契合「一个本体 + 多个投影」原则;agent-client-parity 的 P4 探针、P8 一键接入可直接做成命令。shim 已在用 exe 的命令行模式(--lianjing-mcp-header),只是尚未系统化。 + +### 📋 A2 — 前后端类型契约自动生成 +- status: todo +- complexity: M +- files: src-tauri/src/commands/、src/lib/commands.ts +- acceptance: "agent_verify: [pnpm typecheck] commands.ts 的参数与返回类型由 Rust 定义生成(tauri-specta 或 ts-rs),新增 command 不再手抄类型;删改 Rust 字段时 typecheck 报出所有受影响处。" +- 为什么:现由规则 R01 要求手动同步 commands.ts,易漏;对应四支柱「可推理」。 + +### 📋 A3 — 配置文本生成模板化 +- status: todo +- complexity: M +- files: src-tauri/src/mcp_inject.rs、src-tauri/resources/ +- acceptance: "agent_verify: [cargo test] Codex 托管块、DSH 托管块、shim 等由模板(如 minijinja)渲染,并有「渲染结果是合法 YAML/TOML/JSON」测试。" +- 为什么:2026-10-01 实现 P1 时在 Rust 中手拼 YAML/JS,出现缩进被字符串续行吞掉、转义少一个反斜杠两个缺陷(均被测试拦下)。模板能从写法上避免这类问题。 + +### 📋 A4 — MCP 协议改用官方 Rust SDK(rmcp) +- status: todo +- complexity: M +- files: src-tauri/src/mcp_server.rs、src-tauri/src/mcp_tools.rs +- acceptance: "agent_verify: [cargo test + 三端无头探针] 换用 rmcp 后 scoped 路由、敏感读取认证、SSE 与 streamable HTTP 行为不变,三端 A–F 矩阵不回退。" +- 为什么:现为手写 JSON-RPC + SSE。各客户端对 MCP 的支持持续演进(streamable HTTP、认证、服务器说明等),自维护协议细节的成本会上升。 + +### 附:调用外部进程的 Tauri command 统一 async +- 同步 Tauri command 跑在主线程,内部调用 claude CLI 等外部进程会卡界面;agent-client-parity 审查已两次发现此类问题。新增此类 command 默认 async,存量随相关改动迁移,不单独立卡。