# Bookworm Smart Assistant — 前瞻性升级路线图 > 基于 v3.7 全流程测试 (2026-02-20, 217/217 PASS) 的架构分析 > 分析模型: Claude Opus 4.6 --- ## 〇、当前系统画像 ``` v3.7 架构现状: 50 Skills (静态 SKILL.md, 关键词路由) 10 Agents (固定模板: Feature/Bugfix/Optimization/Greenfield) 8 Hooks (正则匹配, 串行管道 stdin→stdout) 7 MCPs (全局常驻, npx 按需拉取) 日志: JSONL 追加, 无索引 自进化: drift-detector → self-auditor → self-healer (线性闭环) 安全: 正则 pattern matching, 4 层防护 测试: 128 单元 + 67 集成, 纯功能验证 ``` **核心优势**: 闭环完整、fail-closed 安全哲学、元数据/业务逻辑隔离 **关键瓶颈**: 规则硬编码、无学习能力、线性审计、单节点日志 --- ## 一、钩子系统升级 (Hooks v2) ### 1.1 现状痛点 | 问题 | 影响 | |------|------| | 正则 pattern matching 天花板 | 新型攻击 (混淆/编码绕过) 无法覆盖 | | 每个钩子独立进程 `execSync` | 8 钩子串行 = 累计延迟 ~40ms/次 | | 无状态执行 (每次冷启动) | 无法基于历史行为做风险评估 | | 硬编码模式列表 | 新增规则必须改代码 + 重启 | ### 1.2 升级方向 **A. 规则外部化 — 优先级: HIGH / 难度: LOW** ``` hooks/ ├── rules/ │ ├── deny-patterns.json # DENY 规则 (热加载) │ ├── ask-patterns.json # ASK 规则 │ ├── sensitive-paths.json # 敏感路径 │ └── sensitive-content.json # 敏感内容 ├── block-dangerous-commands.js # 引擎 (不变) └── block-sensitive-files.js # 引擎 (不变) ``` - 规则与引擎分离, 非开发者也可维护 - 支持 `rules/*.local.json` 项目级覆盖 - 钩子启动时热加载, 无需修改 .js 代码 **B. 长驻进程 + IPC — 优先级: MEDIUM / 难度: MEDIUM** 当前每次工具调用 spawn 8 个 Node 进程 → 改为单个常驻进程: ``` ┌──────────────────────────────┐ │ hook-daemon (长驻进程) │ │ ├── 监听 Unix Socket/Named Pipe │ │ ├── 内存中缓存所有规则 │ │ ├── 维护会话级上下文 │ │ └── 批量处理 Pre/Post 事件 │ └──────────────────────────────┘ ``` - 启动成本从 ~5ms/钩子 降到 <1ms (IPC 通信) - 可维护会话级状态 (如: 同一文件 10 分钟内修改 5 次 → 触发告警) **C. AST 级命令分析 — 优先级: HIGH / 难度: HIGH** 正则无法准确解析复合命令 (引号嵌套、变量展开、heredoc)。引入轻量 shell parser: ```javascript // 当前: 正则拆分, 引号内分号会误判 const parts = cmd.split(/\s*(?:&&|\|\||;)\s*/); // 升级: 用 shell-quote 或 bash-parser 做 AST 分析 const ast = parseShellCommand(cmd); for (const node of ast.commands) { if (node.type === 'Command' && isDangerous(node)) { ... } } ``` 推荐库: `shell-quote` (轻量) 或 `bash-parser` (完整 AST) --- ## 二、智能路由升级 (Router v2) ### 2.1 现状痛点 | 问题 | 影响 | |------|------| | 6 级优先级硬编码在 CLAUDE.md | 消歧规则越加越多, 维护困难 | | 关键词匹配无法理解语义 | "这个组件性能不行" 是 performance 还是 frontend? | | 无路由反馈学习 | 误路由后无法自动纠偏 | ### 2.2 升级方向 **A. Embedding 语义路由 — 优先级: HIGH / 难度: MEDIUM** 为每个 SKILL.md 的 description 生成 embedding, 用户输入也生成 embedding, 余弦相似度排序: ``` 用户输入: "React 组件在低端 Android 上渲染卡顿" ↓ embedding ┌─ performance-expert 0.89 ← 最佳匹配 ├─ mobile-expert 0.85 ├─ frontend-expert 0.82 └─ debugger-expert 0.71 → 主路由: performance-expert → 候选: mobile-expert (交叉领域时可联合调用) ``` 实现方式: - 预计算: 50 个技能的 embedding 缓存为 `skills-embeddings.json` - 运行时: 用户输入 → 本地 embedding → top-K 相似度匹配 - 模型: 用 Claude 自身的 tool_use 做 re-ranking, 或本地 ONNX 小模型 **B. 路由置信度 + 多技能协作 — 优先级: MEDIUM / 难度: LOW** 当前是单一路由 (1 个输入 → 1 个技能)。升级为置信度评分: ``` 高置信度 (>0.85): 直接路由 中置信度 (0.6-0.85): 路由到主技能, system prompt 中注入辅助技能的关键指引 低置信度 (<0.6): 询问用户确认, 或 fallback developer-expert ``` **C. 路由审计日志 + 学习反馈 — 优先级: MEDIUM / 难度: LOW** ```jsonl {"ts":"...","input":"React 卡顿","routed":"performance-expert","confidence":0.89,"user_override":null} {"ts":"...","input":"支付页面布局","routed":"designer-expert","confidence":0.72,"user_override":"frontend-expert"} ``` - 记录每次路由决策和用户纠正 - 定期分析: 哪些技能容易被误路由 → 优化 description 或消歧规则 - 为 embedding 路由提供 fine-tuning 信号 --- ## 三、自进化系统升级 (Evolution v2) ### 3.1 现状痛点 | 问题 | 影响 | |------|------| | 线性闭环 (detect → audit → heal) | 无法并行审计, 无预测能力 | | self-healer 只修复元数据 | 业务逻辑退化无法自愈 | | evolution-log 仅追加文本 | 无法做趋势分析和模式识别 | | drift-detector 只检测 .claude/ 变更 | 项目代码的质量退化不感知 | ### 3.2 升级方向 **A. 结构化进化日志 — 优先级: HIGH / 难度: LOW** ``` evolution-log.md (当前文本) ↓ 升级为 evolution-log.jsonl (结构化) 每条记录: { "ts": "2026-02-20T17:30:00Z", "trigger": "drift-detector", // 触发源 "dimension": "D2", // 审计维度 "finding": "技能数 49 vs 声明 50", // 问题 "action": "M2:计数修正", // 修复模式 "before": "50", // 修复前 "after": "49", // 修复后 "files": ["CLAUDE.md:228"] // 涉及文件 } ``` 好处: 可查询、可聚合、可做趋势图 **B. 预测性审计 — 优先级: MEDIUM / 难度: MEDIUM** 从被动检测升级为主动预测: ``` 进化日志模式分析: "过去 30 天, D1 (配置一致性) 触发了 12 次修复" "每次新增技能后, D2 必定触发" "版本号漂移平均 2.3 天出现一次" ↓ 预测: 下次新增技能时, 自动预生成 SKILL-REGISTRY 条目 版本号变更时, 自动同步所有引用点 ``` **C. 三级自愈体系 — 优先级: HIGH / 难度: MEDIUM** ``` Level 0: 元数据自愈 (当前能力) → 版本号/计数/注册表 自动修复 Level 1: 配置自愈 (新增) → settings.json 钩子注册缺失时自动补全 → MCP 配置与实际不匹配时修正 → tsconfig/eslint 配置漂移检测与修复 Level 2: 质量自愈 (新增) → 检测到测试覆盖率下降时, 触发 test-writer 补充测试 → 检测到新增代码无类型注解时, 提醒 + 自动补全 → 检测到重复代码 (clone detection) 时, 建议抽取 ``` Level 2 的安全边界: 不自动修改, 只生成建议 + PR diff 预览, 等待用户确认。 --- ## 四、可观测性升级 (Observability v2) ### 4.1 现状痛点 | 问题 | 影响 | |------|------| | JSONL 纯追加, 无索引 | 查询历史事件需要全文扫描 | | 无指标聚合 | 不知道哪个技能用得最多、哪个最慢 | | 无告警机制 | 异常模式 (如同一钩子连续拦截) 无法主动通知 | | watch-activity 仅实时流 | 无历史回放和时间范围查询 | ### 4.2 升级方向 **A. 指标仪表盘 — 优先级: HIGH / 难度: LOW** 新增 `scripts/dashboard.js`: ``` ┌─────────────────────────────────────────────┐ │ Bookworm Dashboard — 2026-02-20 │ ├─────────────────────────────────────────────┤ │ 今日事件: 280 │ Skills: 187 Agents: 43 │ │ MCP: 21 │ Bash: 18 Write: 11 │ ├─────────────────────────────────────────────┤ │ TOP 5 Skills: │ │ 1. frontend-expert ████████████ 34 │ │ 2. backend-builder █████████ 28 │ │ 3. debugger-expert ███████ 22 │ │ 4. architect-expert █████ 16 │ │ 5. tester-expert ████ 13 │ ├─────────────────────────────────────────────┤ │ 钩子拦截率: │ │ block-dangerous: 3 deny / 5 ask / 142 pass│ │ block-sensitive: 1 deny / 2 ask / 98 pass │ ├─────────────────────────────────────────────┤ │ 磁盘: 1806 MB (GOOD) │ 健康: 80/100 │ └─────────────────────────────────────────────┘ ``` 数据源: 解析 `debug/activity-*.jsonl`, 纯 Node.js 无依赖 **B. 钩子拦截日志 — 优先级: HIGH / 难度: LOW** 当前 activity-logger 只记录 PostToolUse。拦截事件 (PreToolUse exit 2) 无日志。 新增: `hooks/security-logger.js` (PreToolUse 出口记录) ```jsonl {"ts":"...","event":"deny","hook":"block-dangerous-commands","reason":"递归删除","command":"rm -rf /"} {"ts":"...","event":"ask","hook":"block-sensitive-files","reason":"AWS Key","file":"config.js"} ``` 输出: `debug/security-YYYY-MM-DD.jsonl` **C. 周报自动生成 — 优先级: LOW / 难度: LOW** ``` 每周日 self-auditor 自动生成: - 本周技能使用分布 (哪些没用过 → 考虑是否退役) - 钩子拦截趋势 (安全事件是否增多) - 磁盘增长曲线 (预测何时触发 WARNING) - 路由误触发统计 (如有路由日志) ``` --- ## 五、安全体系升级 (Security v2) ### 5.1 现状痛点 | 问题 | 影响 | |------|------| | 正则无法处理编码绕过 | `echo cm0gLXJmIC8= \| base64 -d \| sh` 需专门规则 | | 无运行时沙箱 | 钩子放行后命令无限制执行 | | 凭证检测仅 pattern matching | 自定义格式密钥无法识别 | | 无行为基线 | 无法区分正常 rm 和异常 rm | ### 5.2 升级方向 **A. 多层编码解码器 — 优先级: HIGH / 难度: LOW** 在正则匹配前, 增加预处理管道: ```javascript function preprocess(cmd) { let decoded = cmd; // 1. Base64 解码 (检测 base64 -d 管道) decoded = tryDecodeBase64Pipes(decoded); // 2. URL 解码 decoded = tryDecodeURL(decoded); // 3. Hex 解码 (\x72\x6d → rm) decoded = tryDecodeHex(decoded); // 4. Unicode 解码 decoded = tryDecodeUnicode(decoded); return [cmd, decoded]; // 原始 + 解码后都做检测 } ``` **B. 行为基线与异常检测 — 优先级: MEDIUM / 难度: HIGH** ``` 正常行为基线 (从历史 activity-*.jsonl 学习): - 用户平均每天 write 23 个文件 - bash 命令平均长度 45 字符 - 从未在 /etc/ 下写过文件 异常信号: - 突然 write 200 个文件 → 可能是误操作或恶意脚本 - bash 命令长度 > 500 → 可能是注入攻击 - 首次写入 /etc/passwd → 高危告警 ``` 实现: 在 hook-daemon 中维护滑动窗口统计, 超出 3σ 触发 ask。 **C. 钩子完整性自保护 — 优先级: HIGH / 难度: LOW** 防止钩子自身被篡改: ```javascript // 在 activity-logger.js 启动时校验所有钩子文件的 SHA256 const HOOK_CHECKSUMS = { 'block-sensitive-files.js': 'sha256:a1b2c3...', 'block-dangerous-commands.js': 'sha256:d4e5f6...', // ... }; // 不匹配时拒绝启动, 写入安全日志 ``` --- ## 六、MCP 生态升级 (MCP v2) ### 6.1 升级方向 **A. MCP 健康监测 — 优先级: HIGH / 难度: LOW** ```javascript // self-auditor D5 增强: 不仅检查配置, 还 ping 可达性 for (const [name, config] of Object.entries(mcpServers)) { const healthy = await pingMcpServer(name, config); // 记录: 启动耗时、是否可连接、版本号 } ``` **B. MCP 自动发现与推荐 — 优先级: MEDIUM / 难度: MEDIUM** 基于项目 package.json / requirements.txt 自动推荐: ``` 检测到 prisma 依赖 → 推荐 @prisma/mcp-server 检测到 supabase 依赖 → 推荐 @supabase/mcp-server 检测到 .github/workflows → 推荐 github-actions-mcp ``` **C. MCP 按需生命周期 — 优先级: LOW / 难度: MEDIUM** 当前全局 MCP 全部常驻。改为按需启动 + 空闲超时回收: ``` mcp-lifecycle: cold → 用户触发相关 intent → warm (启动进程) warm → 5 分钟无调用 → cold (回收进程) 好处: 减少内存占用, 7 个 npx 进程 → 按需 1-2 个 ``` --- ## 七、技能系统升级 (Skills v2) ### 7.1 升级方向 **A. 技能组合 (Skill Composition) — 优先级: HIGH / 难度: MEDIUM** 当前: 1 个输入 → 1 个技能。升级为可组合: ```yaml # SKILL.md 新增字段 composable: requires: [architect-expert] # 前置依赖 enhances: [backend-builder] # 可增强 conflicts: [frontend-expert] # 互斥 # 路由引擎: 当匹配到 database-tuning-expert # 且上下文含 "架构" → 自动注入 architect-expert 的关键指引 ``` **B. 技能版本与 A/B 测试 — 优先级: MEDIUM / 难度: LOW** ``` skills/ ├── frontend-expert/ │ ├── SKILL.md # v2 (stable, 当前版本) │ └── SKILL.v3-beta.md # v3 (beta, A/B 测试中) ``` 路由时按比例分流: 90% 走 v2, 10% 走 v3-beta。记录两者的用户满意度。 **C. 技能退役机制 — 优先级: LOW / 难度: LOW** 基于 activity-logger 数据自动识别: ``` 过去 90 天从未被调用的技能 → 标记为 dormant 连续 180 天 dormant → 建议归档 用户确认 → 移到 skills/_archived/ ``` --- ## 八、测试体系升级 (Testing v2) ### 8.1 现状痛点 | 问题 | 影响 | |------|------| | 128 单元测试覆盖功能路径 | 缺少边界值/模糊测试 | | 无性能基准 | 钩子延迟退化无法发现 | | production-sim 是黑盒 | 只验证"有日志", 不验证"日志正确" | ### 8.2 升级方向 **A. 性能基准测试 — 优先级: HIGH / 难度: LOW** ```javascript // hooks/__tests__/benchmark.test.js describe('性能基准', () => { it('block-dangerous-commands 应在 10ms 内完成', async () => { const start = performance.now(); await runHook('block-dangerous-commands', safePayload); expect(performance.now() - start).toBeLessThan(10); }); it('8 钩子串行总延迟应在 50ms 内', async () => { // 模拟一次完整的工具调用通过所有钩子 }); }); ``` **B. Fuzzing 测试 — 优先级: MEDIUM / 难度: MEDIUM** ```javascript // 用随机生成的命令字符串测试 block-dangerous-commands // 确保不会 crash, 且 fail-closed 生效 describe('Fuzzing', () => { for (let i = 0; i < 1000; i++) { const fuzz = generateRandomShellCommand(); it(`不应 crash: ${fuzz.slice(0,40)}...`, async () => { const result = await runHook('block-dangerous-commands', { command: fuzz }); expect(result.exitCode).toBeOneOf([0, 2]); // 只允许放行或拦截, 不允许崩溃 }); } }); ``` **C. 合约测试 (Contract Testing) — 优先级: MEDIUM / 难度: LOW** ```javascript // 验证 self-auditor 的输出能被 self-healer 正确消费 describe('auditor → healer 合约', () => { it('审计 JSON 应包含 findings 数组', () => { ... }); it('每个 finding 应有 id/severity/dimension/fix_hint', () => { ... }); it('healer 应能解析所有 severity 值', () => { ... }); }); ``` --- ## 九、升级优先级矩阵 按 **价值/成本比** 排序: | 优先级 | 升级项 | 价值 | 成本 | 建议版本 | |--------|--------|------|------|---------| | P0 | 规则外部化 (hooks/rules/*.json) | 高 | 低 | v3.8 | | P0 | 钩子拦截日志 (security-logger) | 高 | 低 | v3.8 | | P0 | 结构化进化日志 (JSONL) | 高 | 低 | v3.8 | | P0 | 性能基准测试 | 高 | 低 | v3.8 | | P1 | 指标仪表盘 (dashboard.js) | 高 | 低 | v3.9 | | P1 | 钩子完整性自保护 (SHA256) | 高 | 低 | v3.9 | | P1 | 多层编码解码器 | 高 | 低 | v3.9 | | P1 | 技能退役机制 | 中 | 低 | v3.9 | | P2 | Embedding 语义路由 | 高 | 中 | v4.0 | | P2 | 技能组合 (Composition) | 高 | 中 | v4.0 | | P2 | 三级自愈体系 | 高 | 中 | v4.0 | | P2 | AST 级命令分析 | 高 | 高 | v4.0 | | P3 | 长驻进程 Hook Daemon | 中 | 中 | v4.1 | | P3 | MCP 按需生命周期 | 低 | 中 | v4.1 | | P3 | 行为基线异常检测 | 中 | 高 | v4.1 | | P3 | Fuzzing 测试 | 中 | 中 | v4.1 | | P3 | 预测性审计 | 中 | 中 | v4.1 | --- ## 十、版本规划 ### v3.8 — 可观测性补全 (预计 1-2 天) ``` 新增: hooks/rules/*.json 规则外部化 新增: hooks/security-logger.js 拦截事件日志 升级: evolution-log.md → evolution-log.jsonl 新增: hooks/__tests__/benchmark.test.js ``` ### v3.9 — 安全加固 (预计 2-3 天) ``` 新增: scripts/dashboard.js 指标仪表盘 新增: hooks/integrity-check.js 钩子文件 SHA256 校验 升级: block-dangerous-commands.js 多层编码解码 新增: 技能退役机制 (基于 activity 日志) 新增: hooks/__tests__/contract.test.js 合约测试 ``` ### v4.0 — 智能路由 (预计 1 周) ``` 新增: skills-embeddings.json 语义向量缓存 升级: CLAUDE.md 路由引擎 → embedding + re-ranking 新增: SKILL.md composable 字段 + 技能组合 升级: self-healer Level 1 (配置自愈) 升级: block-dangerous-commands.js AST 解析 ``` ### v4.1 — 自主智能 (预计 2 周) ``` 升级: hooks → hook-daemon 长驻进程架构 新增: 行为基线 + 异常检测引擎 新增: 预测性审计 (进化日志模式挖掘) 升级: MCP 按需启停生命周期 新增: Fuzzing 测试套件 ```