--- title: 变更日志 updated: 2026-04-15 status: active tags: [log, history] --- # 变更日志 > Append-only 操作记录。格式: `## [日期] 类型 | 描述` ## 2026-04-15 feat | Heartbeat 统一健康系统 - **feat(runtime)**: health_snapshot.rs — 统一健康快照收集器 (LLM连接/记忆/会话/系统资源) - **feat(runtime)**: heartbeat.rs 重构 — HeartbeatManager + HealthSnapshot 集成 - **feat(desktop)**: HealthPanel.tsx — 桌面端健康状态面板组件 - **chore(desktop)**: 删除 intelligence-client/ 目录 9 个废弃文件 - **docs**: TRUTH.md + wiki 数字同步 (Tauri 183命令, React 105组件, lib 76文件, intelligence 16文件) - 验证: cargo check 0 error, tsc 0 error ## 2026-04-15 fix | 聊天定时功能断链接通 — NlScheduleParser + _reminder Hand - **fix(runtime)**: NlScheduleParser 接入 chat.rs — has_schedule_intent() 意图检测 + parse_nl_schedule() cron 解析 - **fix(hands)**: 新增 _reminder 系统内部 Hand — 定时触发器桥接 - **fix(kernel)**: TriggerManager hand_id 验证放宽 — `_` 前缀系统 Hand 免验证 - **fix(desktop)**: agent_chat_stream 定时拦截 — 确认消息通过 LoopEvent::Delta 流式返回 - **docs(wiki)**: hands-skills.md 新增定时提醒链路说明 - 验证: cargo check 0 error, 49 tests passed, Tauri MCP 实操验证 "每天早上9点提醒我查房" → cron `0 9 * * *` 确认消息正确显示 ## 2026-04-15 fix | 发布前冲刺 Day1 — 5项修复 + 2项标注 + 文档同步 - **fix(saas)**: SSE 用量统计一致性 — 回写 usage_records 真实 token + 消除 relay_requests 双重计数 - **fix(saas)**: relay_tasks 超时自动清理 — 每5分钟扫描 processing>10min 标记 failed - **fix(desktop)**: 模型自动路由 — 首次登录自动选择第一个可用模型 (saasStore + connectionStore) - **chore**: Cargo warnings 清零 — 39→0 (仅剩 sqlx-postgres 外部依赖) - **chore**: Tauri 命令 @reserved 全量标注 — 89个 (孤儿命令 0) - **docs**: TRUTH.md 数字更新 (Tauri 182命令、95 invoke、89 @reserved、0 孤儿) - 验证: tsc 0错误、vitest 344通过、cargo check 0 warning、pnpm build 成功 ## 2026-04-15 fix | 三端联调 V2 — SSE Token 捕获修复 + 调试环境文档 - **fix(saas)**: SseUsageCapture 增加 `stream_done` 标志,修复 SSE 路径 Token 始终为 0 的根因 - **fix(saas)**: `parse_sse_line` 兼容 `data:` 和 `data: ` 两种前缀 + `total_tokens` 兜底 - **docs(wiki)**: development.md 新增完整调试环境信息(Windows 环境要求/数据库/端口/账号/启动顺序) - **docs(wiki)**: known-issues.md 新增 V2 联调测试结果(17 项通过 + 3 项待处理) - 验证方式: Chrome DevTools MCP + Tauri MCP 实际界面操作 ## [2026-04-14] docs | Wiki 全量更新 — 2026-04-14 代码验证驱动 - 全部 12 个 wiki 页面基于最新代码扫描验证更新 - 关键数字修正: Rust 77K行(274 .rs)、Tauri 189命令、SaaS 137 routes、Admin 17页、SaaS 16模块 - known-issues: V13-GAP 全部标记已修复 + 三端联调测试结果 - middleware: 14层 runtime + 10层 SaaS HTTP 完整清单 - saas: 16模块(含industry)、20迁移/42表、137 routes - routing: SaaS降级流程、Store含industryStore、lib/85文件 - chat: 14层中间件经过 - butler: 行业配置接入ButlerPanel - development: Admin 17页、SaaS 137 routes - log: 链接三端联调测试报告 ## [2026-04-14] fix | 三端联调测试 2 P0 + 6 P1 修复 - P0: SaaS 模型选择残留模型 ID → 模型可用性前置校验 - P1: API 密钥页崩溃 / 桌面端 401 恢复 / 用量统计全零 / 行业选择 500 / 管理员订阅 500 / SaaS 启动崩溃 - 完整报告: `docs/INTEGRATION_TEST_REPORT_20260414_V2.md` ## [2026-04-13] fix | V13 审计 6 项修复全部完成 - FIX-01~06: TrajectoryRecorder注册 + industryStore接入 + 知识搜索 + webhook标注 + 结构化UI + PersistentMemoryStore移除 - 提交: c167ea4 + fd3e7fd ## [2026-04-12] audit | V13 系统性功能审计 — 6 项新发现 - 全系统功能一致性审计完成, 总体健康度 82/100 (V12: 76) - P1 新发现 3 项: TrajectoryRecorder 未注册中间件链, industryStore 无组件导入, 桌面端无 Knowledge Search - P2 新发现 3 项: Webhook 孤儿表, Structured Data Source 无 Admin UI, PersistentMemoryStore 遗留 - 修正 V12 错误认知 5 项: Butler/MCP/Gateway/Presentation 已接通, Reflection driver 已修复 - TRUTH.md 数字校准: Tauri 184→191, SaaS 122→136, @reserved 33→24, dead_code 76→43 - 完整报告: `docs/features/audit-v13/V13-FULL-REPORT.md` ## [2026-04-12] fix | 三轮审计修复 — 3 HIGH + 4 MEDIUM 清零 - H1: status disabled→inactive 统一 + source 补 admin 映射 - H2: experience.rs format_for_injection XML 转义 - H3: TriggerContext industry_keywords 全局缓存接通 - M2: ID 自动生成移除中文 + 无 ASCII 手动提示 - M3: TS CreateIndustryRequest 补 id 字段 - M4: ListIndustriesQuery deny_unknown_fields ## [2026-04-12] feat | 知识库 Phase D — 统一搜索 + 种子知识冷启动 - search/recommend API 返回 UnifiedSearchResult (文档+结构化双通道合并) - POST /api/v1/knowledge/seed 种子知识冷启动接口 (幂等, admin权限) - seed_knowledge: 按标题+行业查重, source='distillation', tags标记行业 - SearchRequest 扩展: search_structured/search_documents/industry_id 字段 - 167 行新增, 4 文件变更 ## [2026-04-12] fix | 二次审计修复 — 2 CRITICAL + 4 HIGH + 2 MEDIUM - C-1: Industries.tsx 创建弹窗缺少 id → 添加 id 输入 + name 自动生成 - C-2: Accounts.tsx handleSave 部分 save → try/catch + handleClose 统一 - V1: viking_commands Mutex 跨 await → Arc clone 后释放 Mutex - I1+I2: 误导性"相关度"分数移除 + pain point XML 转义 - S1+S2: industry status 枚举白名单 + id 格式正则验证 - H-3+H-4: 编辑模态数据竞争守卫 + useEffect editingId 守卫 ## [2026-04-12] feat | 知识库 Phase B+C — 文档提取器 + multipart 文件上传 - extractors.rs: PDF(pdf-extract) + DOCX(zip+quick-xml) + Excel(calamine) 三格式提取 - 格式路由 detect_format() → RAG 通道或结构化通道 - POST /api/v1/knowledge/upload multipart 文件上传 - PDF/DOCX/Markdown → RAG 管线,Excel → structured_rows JSONB 存储 - 结构化数据源 API: GET/DELETE /api/v1/structured/sources + /rows + /query - 修复 industry/service.rs SaasError::Database 类型不匹配 - 累计新增 849 行,7 文件变更 ## [2026-04-12] fix | 审计修复 — 4 CRITICAL + 5 HIGH 全部解决 - C1: SQL 注入风险 → industry/service.rs 参数化查询 ($N 绑定) - C2: INDUSTRY_CONFIGS 死链 → Kernel 共享 Arc + ButlerRouter 共享实例 - C3: IndustryListItem 缺字段 → keywords_count + 时间戳补全 - C4: 非事务性行业绑定 → batch ANY($1) 验证 + 事务 DELETE+INSERT - H8: Accounts.tsx 竞态 → mutate→mutateAsync + confirmLoading 双检测 - H9: XML 注入未转义 → xml_escape() 辅助函数 - H10: update 覆盖 source → 保留原始值 - H11: 面包屑 /industries 映射缺失 ## [2026-04-12] feat | 行业配置 + 管家主动性 全栈 5 Phase 实施 Phase 1 — 行业配置基础 (13 files, 886 insertions): - SaaS industries + account_industries 表 (migration v15) - 4 内置行业: 医疗/教育/制衣/电商 (keywords/prompt/pain_seeds) - ButlerRouter 动态行业关键词注入 (Arc>>) - 8 SaaS API handlers (list/create/update/fullConfig/accountIndustries) Phase 2 — 学习循环基础 (5 files, 271 insertions): - 5 触发信号: PainConfirmed/PositiveFeedback/ComplexToolChain/UserCorrection/IndustryPattern - Experience 增加 industry_context + source_trigger 维度 - experience_store keywords 含行业标签 Phase 3 — Tauri 行业配置加载 (6 files, 310 insertions): - desktop saas-industry.ts mixin (4 API methods) - industryStore.ts (Zustand + persist, 离线缓存) - viking_load_industry_keywords Tauri 命令 (JSON String → Rust struct) Phase 4 — Admin 行业管理 (6 files, 564 insertions): - Industries.tsx: 行业列表 + 编辑弹窗(关键词/prompt/痛点种子) + 新建弹窗 - Accounts.tsx 增强: 行业授权多选 + 主行业标记 - /industries 路由 + ShopOutlined 侧边栏导航 Phase 5 — 主动行为激活 (3 files, 152 insertions): - 注入格式升级: [路由上下文] → XML fencing (Hermes 策略) - 跨会话连续性: pre_hook 注入活跃痛点 + 相关经验 - 触发信号持久化: store_trigger_experience() 模板提取零 LLM 成本 ## [2026-04-11] chore | 发布前准备 — 版本号统一 + 数字校准 + 安全加固 1. Cargo.toml 版本 0.1.0 → 0.9.0-beta.1 (workspace 统一) 2. TRUTH.md 数字全面校准 — Rust 代码 66K→74.6K、Tauri 命令 182→184、SaaS .route() 140→122 等 10 项 3. CSP 加固 — 添加 `object-src 'none'` 4. .env.example 补充 SaaS 关键环境变量 (JWT_SECRET/TOTP_KEY/Admin 凭据) 5. 安全检查通过 — 无硬编码密钥、SQL 全参数化、Cookie 三件套完整 ## [2026-04-11] fix | 模型路由链路修复 — 消除硬编码不匹配模型 1. summarizer_adapter.rs — "glm-4-flash" 硬编码 fallback → 未配置时明确报错 (fail fast) 2. saas-relay-client.ts — 'glm-4-flash-250414' 硬编码 fallback → 未获取模型时报错 3. Wiki routing.md — 新增完整模型路由文档 (Tauri SaaS Relay 主路径 + 辅助 LLM + Browser 模式) ## [2026-04-11] fix | Skill/MCP 调用链路修复 3 个断点 1. Anthropic Driver ToolResult 格式 — ContentBlock 添加 ToolResult 变体, tool_call_id 不再丢弃 2. 前端 callMcpTool 参数名 — serviceName/toolName/args → service_name/tool_name/arguments 3. MCP 工具桥接 ToolRegistry — McpToolWrapper + Kernel mcp_adapters 共享状态 + 启停同步 4. Wiki 更新 — hands-skills.md 添加 Skill 调用链路 + MCP 架构文档 ## [2026-04-11] fix | 发布内测前修复 6 批次 - Batch 1: 新用户 llm_routing 默认改为 relay (SQL + migration) - Batch 2: SaaS URL 集中配置化 (VITE_SAAS_URL, 5处硬编码消除) - Batch 3: Gateway URL 配置化 + Rust panic hook 崩溃报告 - Batch 4: UX 文案修复 — 新/老用户区分 + 去政务化 + 忘记密码 - Batch 5: 移除空壳"行业资讯" Tab + Provider URL 去重统一到 api-urls.ts - Batch 6: 版本号 0.1.0 → 0.9.0-beta.1 + updater 插件预留 ## [2026-04-11] docs | Wiki 全面更新 — 代码验证驱动 - 全部 10 个 wiki 页面基于代码扫描验证更新(非文档推测) - 关键数字修正: Rust 95K行(335 .rs文件, 原文档66K)、Tauri命令 190/183、SaaS路由 121、前端组件 104、lib/ 85 文件 - 测试函数修正: ~1,055 (872内联+183集成,原文档仅计#[test]) - 新增中间件完整注册清单(14层runtime + 6层SaaS HTTP) - 新增 Store 完整目录结构(17 文件 + chat/4 子store) - 新增 Pipeline 模板完整目录树(17 YAML, 8 行业目录) - 新增 Hands 测试数分布 - 新增 memory Tauri 命令完整列表(16 个) - 新增代码健康度指标(TODO/FIXME 仅 8 个) - 修正管家模式描述: 关键词路由 → 语义路由(TF-IDF) - 新增 artifactStore 到 chat Store 拆分列表 ## [2026-04-11] init | 创建 wiki 知识库 - 从 TRUTH.md / ARCHITECTURE_BRIEF.md / CLAUDE.md 编译 8 个 wiki 页面 - 创建 index.md 入口 + 7 个主题页 - CLAUDE.md 添加 @wiki/index.md 引用 ## [2026-04-10] fix | 发布前修复批次 - ButlerRouter 语义路由 — SemanticSkillRouter TF-IDF 替代关键词 - P1-04 AuthGuard 竞态 — 三态守卫 + cookie 先验证 - P2-03 限流 — Cross 测试共享 token - P1-02 浏览器聊天 — Playwright SaaS fixture - BREAKS.md 全部 P0/P1/P2 已修复 ## [2026-04-09] feat | Hermes Intelligence Pipeline 4 Chunk - Chunk1 ExperienceStore+Extractor (10 tests) - Chunk2 UserProfileStore+Profiler (14 tests) - Chunk3 NlScheduleParser (16 tests) - Chunk4 TrajectoryRecorder+Compressor (18 tests) - 中间件 13→14 层 (+TrajectoryRecorder@650) - Schema v2→v4 (user_profiles + trajectory tables) ## [2026-04-09] feat | 管家模式发布前实施完成 - ButlerRouter + 冷启动 + 简洁UI - 痛点持久化 SQLite - 桥测试 43 通过 ## [2026-04-07] feat | 管家能力激活 - Tauri 命令 183→189 (+6 butler) - multi-agent feature 默认启用 - ButlerPanel UI 3 区 - DataMaskingMiddleware@90 ## [2026-04-03] fix | 前端改进 + 数字校准 - Pipeline 8 invoke 接通前端 - Viking 5 孤立 invoke 清理 - SaaS API 93→131 (新增 knowledge/billing/role) - scheduled_task Admin V2 完整接入 ## [2026-04-02] fix | P0/P1 全部修复 - 2 P0 崩溃修复 - 9 P1 功能失效修复 - 7 P1.5 代码质量修复 - TRUTH.md 初始创建 --- > 更新规则: 每次重大变更后追加一条,最新在最上面 ### [2026-04-13] V13 审计 6 项修复全部完成 - FIX-01 (P1): TrajectoryRecorderMiddleware 注册到 create_middleware_chain() @650,Hermes 轨迹数据开始流入 - FIX-02 (P1): industryStore 接入 ButlerPanel,桌面端展示行业专长卡片 + 自动拉取 - FIX-03 (P1): 桌面端知识库搜索 — saas-knowledge mixin + VikingPanel SaaS KB 搜索 UI - FIX-04 (P2): Webhook 孤儿迁移标注 deprecated + down migration 注释 - FIX-05 (P2): Admin Knowledge 新增"结构化数据"Tab (CRUD + 行浏览) - FIX-06 (P2): PersistentMemoryStore 全量移除 — persistent.rs 611→57行,删除死 embedding global + 2 @reserved 命令 + viking_commands 冗余配置,Tauri 命令 191→189 - 文件: 13 个 (Rust 5 + TS 7 + docs 1), 提交: c167ea4 + fd3e7fd + 本轮 - P0: memory_search 空查询 min_similarity 默认值; hand_trigger null→handAutoTrigger; 重启后 chat 路由竞态修复 - P1: AgentInfo 扩展 UserProfile 桥接; 反思阈值降低 5→3; 反思 state restore peek+pop 竞态修复 - P2: 演化历史可展开差异视图; 管家 Tab 条件 header + 空状态引导 - 文件: 14 个 (Rust 5 + TS 9), 10 次提交