dev-manager-tauri/.blueprint/modules/architecture-evolution.md
lanrtop 7b702a9d88 docs(blueprint): 新建 architecture-evolution 模块,记录技术栈评估与 A1–A4
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:49:59 +09:00

46 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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,存量随相关改动迁移,不单独立卡。