336 lines
20 KiB
Markdown
336 lines
20 KiB
Markdown
---
|
||
title: 变更日志
|
||
updated: 2026-04-22
|
||
status: active
|
||
tags: [log, history]
|
||
---
|
||
|
||
# 变更日志
|
||
|
||
> Append-only 操作记录。格式: `## [日期] 类型 | 描述`
|
||
|
||
## [2026-04-22] docs | Wiki 一致性修复 — 数字/格式/重复内容清理
|
||
- **index.md**: 数据流图中间件 15→14 层
|
||
- **chat.md**: 中间件层引用 15→14 层
|
||
- **development.md**: 稳定化约束中间件 15→14 层
|
||
- **memory.md**: 删除"前端 Tauri 命令"与"API 接口"重复的 VikingStorage/Intelligence 表(保留 API 接口章节)
|
||
- **log.md**: 统一所有标题格式为 `## [YYYY-MM-DD] 类型 |`(27行);删除重复的 `# 变更日志` 标题;修正历史条目中"中间件 15层"→"14层";DataMasking 条目补充 Evolution@78
|
||
|
||
## [2026-04-22] fix | 跨会话记忆断裂修复 (commit adf0251)
|
||
- **根因**: 3个断裂点
|
||
1. `profile_store`未连接 — `create_middleware_chain()`中GrowthIntegration未设置UserProfileStore, extract_combined()的profile_signals被静默丢弃
|
||
2. 双数据库不一致 — UserProfileStore写入data.db, agent_get读取memories.db, 两库隔离导致UserProfile永远读不到
|
||
3. 缺少关键日志 — 提取/存储/检索链路无info级别日志
|
||
- **修复**: `with_profile_store(memory.pool())` + agent_get改用`kernel.memory()` + Kernel暴露`memory()`方法 + growth.rs增强日志
|
||
- **验证**: Tauri端E2E — 会话A提取6记忆+4 profile signals → 新会话B成功注入记忆 → 管家Tab显示用户画像+近期话题+53条记忆
|
||
|
||
## [2026-04-22] feat | 管家Tab记忆展示增强
|
||
- **变更**: MemorySection.tsx 重写 — L1摘要并行加载 + 按类型分组(偏好/知识/经验/会话) + 用户画像卡片(行业/角色/沟通风格/近期话题)
|
||
- **数据源**: viking_ls+viking_read(L1) + agent_get(userProfile)
|
||
|
||
## [2026-04-22] refactor | DataMasking 完全移除
|
||
- **变更**: 删除 `data_masking.rs` (367行) + loop_runner unmask 逻辑 + saas-relay-client.ts 前端 mask/unmask
|
||
- **原因**: 正则过度匹配中文文本(commit 73d50fd 已禁用),NLP方案未排期,彻底移除减少维护负担
|
||
- **影响**: 中间件链 15→14 层,loop_runner 简化,SaaS relay 路径不再做前端脱敏
|
||
- **中间件链**: `Evolution@78, ButlerRouter@80, Compaction@100, Memory@150, Title@180, SkillIndex@200, DanglingTool@300, ToolError@350, ToolOutputGuard@360, Guardrail@400, LoopGuard@500, SubagentLimit@550, TrajectoryRecorder@650, TokenCalibration@700`
|
||
|
||
## [2026-04-22] fix | Agent 搜索功能修复 — glm 空参数 + schema 简化 + 排版修复 (commit 5816f56 + 81005c3)
|
||
|
||
**根因**: glm-5.1 不理解 `oneOf`+`const` 复杂 JSON Schema,tool_calls arguments 始终为空 `{}`。
|
||
加上 DuckDuckGo 被墙导致搜索引擎选择不正确,以及 stripToolNarration 破坏了 markdown 排版。
|
||
|
||
**修复 3 项**:
|
||
1. `researcher.rs` input_schema 扁平化 + `_fallback_query` 回退 (5816f56)
|
||
2. `loop_runner.rs` 空参数检测 → 注入用户消息作为查询 (5816f56)
|
||
3. `ChatArea.tsx` stripToolNarration 改为行级过滤,保留 markdown 结构 (81005c3)
|
||
|
||
**影响文件**: `crates/zclaw-hands/src/hands/researcher.rs`, `crates/zclaw-runtime/src/loop_runner.rs`, `desktop/src/components/ChatArea.tsx`
|
||
|
||
**验证**: E2E 搜索 "今日科技新闻" — Baidu + Bing CN 并行返回 10 条结果,LLM 生成排版正确的回复
|
||
|
||
## [2026-04-21] fix | Phase 0+1 突破之路 — 8 项基础链路修复 (commit c1dea6e + 9a2611d)
|
||
|
||
**Phase 0 地基修复 (2 项)**:
|
||
- 经验积累覆盖 bug: store_experience() URI 确定性覆盖 → 合并+累积 reuse_count (experience_store.rs)
|
||
- Skill 工具调用断裂: PromptOnlySkill 纯文本 → complete_with_tools() 桥接 (skill.rs + runner.rs + adapters.rs)
|
||
|
||
**Phase 1 用户可感知修复 (6 项)**:
|
||
- Hand 执行前端字段映射: instance_id → runId (kernel-hands.ts + gateway-api.ts)
|
||
- Heartbeat 痛点感知: PAIN_POINTS_CACHE + VikingStorage 持久化 + 未解决痛点检查 (heartbeat.rs)
|
||
- Browser Hand 委托消息: pending_execution → delegated_to_frontend + 中文摘要 (browser.rs)
|
||
- 跨会话记忆检索增强: IdentityRecall 模式 26→54 + 弱身份信号(9个) + 低结果 fallback (query.rs + retriever.rs)
|
||
- Twitter Hand 凭据持久化: SetCredentials action + 文件持久化 + 启动恢复 (twitter.rs)
|
||
- Browser 测试适配: 新响应格式断言修复
|
||
|
||
验证: cargo check 0 error | cargo test 912 PASS | tsc --noEmit 0 error
|
||
|
||
## [2026-04-21] test | Phase 2 自学习闭环验证 — 进化引擎全链路确认 (commit d95fda3)
|
||
|
||
**审计发现**: 进化引擎管道已完整连接,Phase 0 的 reuse_count 修复是唯一缺失拼图。
|
||
- 经验累积 → PatternAggregator(>=3) → EvolutionEngine → EvolutionMiddleware(@78) → <evolution-suggestion> 注入
|
||
- L2 SkillGenerator + QualityGate 代码完整,标记 @reserved 用于全自动化(后续)
|
||
- 当前"人在环"模式:检测到可进化模式 → 提示用户确认 → 不自动生成
|
||
|
||
**6 个集成测试**: 经验累积触发/阈值过滤/多模式独立/SkillGenerator prompt/QualityGate验证/FeedbackCollector计分。全量 918 PASS。
|
||
|
||
## [2026-04-21] fix | 穷尽审计后 3 项修复 (browser doc / experience_store warn / identity pattern count)
|
||
|
||
- browser.rs: 过时文档注释 `pending_execution` → `delegated_to_frontend`
|
||
- experience_store.rs: merge 反序列化失败时添加 `warn!()` 日志 + fallback 覆写
|
||
- wiki/log.md: identity_patterns 数量更正 43→54
|
||
|
||
验证: cargo check 0 error | cargo test 112 PASS (growth+hands)
|
||
|
||
## [2026-04-20] fix | 50 轮功能链路审计 7 项断链修复 (commit f291736)
|
||
|
||
**审计报告**: `docs/test-evidence/FUNCTIONAL_CHAIN_AUDIT_2026_04_20.md`
|
||
通过率 42/50 (84%),发现 2 P0 + 3 P1 + 2 P2 断链。
|
||
|
||
**P0 修复**:
|
||
- B-MEM-2 跨会话记忆丢失: IdentityRecall 查询意图 + scope-only 检索 + GrowthIntegration 缓存
|
||
- B-HAND-1 Hands 未触发: HandTool wrapper + tool registry 注册 7 个 Hands
|
||
|
||
**P1 修复**:
|
||
- B-SCHED-4 一次性定时: RE_ONE_SHOT_TODAY 同日触发模式
|
||
- B-CHAT-2 工具循环: 连续失败计数器 (3次上限)
|
||
- B-CHAT-5 Stream 竞态: cancelCooldown 500ms
|
||
|
||
## [2026-04-19] docs | Wiki 全量深度梳理 — 11 页同步至代码实际状态
|
||
|
||
- **index.md**: 全面更新关键数字 — Rust 102K行/357文件/987测试、Store 25、组件 102、lib 75、@reserved 97、中间件 14层、SQL 38文件/42表、dead_code 0;新增进化引擎架构说明;修正 Hands 7注册(非9);Pipeline 18模板
|
||
- **routing.md**: Store 列表删除 workflowBuilderStore(已不存在)、新增 saas/ 子模块(5文件)拆分;路由决策从4分支修正为5分支+降级;lib/ 计数 76→75
|
||
- **hands-skills.md**: Hands 从"9启用"修正为"7注册"(6 TOML + _reminder);新增"已删除 Hands"节(Whiteboard/Slideshow/Speech 空壳清理);HAND.toml 9→6
|
||
- **saas.md**: SaaS 模块从"16+distill"修正为精确16目录;SQL迁移从"20文件"修正为"38文件(21up+17down)";CREATE TABLE 从104修正为42
|
||
- **known-issues.md**: 代码健康度指标全面更新 — @reserved 89→97、dead_code 16→0、TODO Rust 3→1、Rust测试 684→797
|
||
- **memory.md**: 新增进化引擎(EvolutionEngine)完整模块结构(19文件);新增 FeedbackCollector/PatternAggregator/QualityGate/SkillGenerator/WorkflowComposer 描述
|
||
- **butler.md**: Intelligence 层从5文件扩展到16文件完整清单;新增 experience/health_snapshot/personality_detector 等
|
||
- **pipeline.md**: 模板数从17修正为18;修正模板分布总计公式
|
||
- **chat.md**: 中间件层引用 14层(含Evolution@78)
|
||
- **development.md**: 稳定化约束数字全面更新(Store 25、中间件 14、组件 102);分层职责同步
|
||
- **验证方式**: 3路并行代码分析(Rust crates/前端/TRUTH交叉) + 20+ grep/find 命令实际验证
|
||
|
||
## [2026-04-19] fix | 穷尽审计修复 — CRITICAL×1 + HIGH×6 + MEDIUM×4
|
||
|
||
- C1: mark_key_429 设 is_active=FALSE,自动恢复路径可达化
|
||
- H1+H2: 重试查询补全日志 + fallthrough 错误信息修正 (RateLimited)
|
||
- H3+H4+M3+M4+M5: agentStore 提取 classifyAgentError() 类型化错误 + 全 CRUD 统一
|
||
- H5+H6: auth.ts 提取 triggerReconnect(),login/TOTP/restore 三路径统一
|
||
- M1: toggle_key_active(true) 清除 cooldown_until
|
||
|
||
## [2026-04-19] fix | 发布前审计 5 项修复
|
||
|
||
- P0-1: key_pool.rs Provider Key cooldown 过期自动恢复(is_active=false → true)
|
||
- P0-2: agentStore.ts createClone/createFromTemplate 友好错误信息(502/503/401 分类)
|
||
- P1-2: auth.ts login 成功后触发 connectionStore.connect() 重新配置 kernel token
|
||
- P1-3: health_snapshot heartbeat engine 未初始化时返回 pending 快照(不再报错)
|
||
- P1-1: configStore.ts loadSkillsCatalog 增加延迟重试(最多2次,1.5s/3s 间隔)
|
||
|
||
## [2026-04-19] chore | sqlx 0.7→0.8 统一 + 测试覆盖补充
|
||
|
||
- sqlx workspace 0.7→0.8.6 + libsqlite3-sys 0.27→0.30,消除 pgvector 引入的双版本
|
||
- 零源码修改,719→797 测试全通过
|
||
- zclaw-protocols +43 测试: MCP types serde / transport config / domain roundtrips
|
||
- zclaw-skills +47 测试: SKILL.md/TOML parsing / auto-classify / PromptOnlySkill / types roundtrips
|
||
|
||
## [2026-04-18] fix | 审计后续 3 项修复
|
||
|
||
- Shell Hands 残留清理 3 处 (message.rs 注释/profiler 偏好/handStore mock)
|
||
- FTS5 CJK 查询修复: sanitize_fts_query 从精确短语改为 token OR 组合
|
||
- WASM HTTP 响应大小限制: Content-Length 预检 + 1MB 上限
|
||
- zclaw-growth 集成测试 2/2 修复, 全量 651 测试 0 失败
|
||
|
||
## [2026-04-18] fix | 深度审计修复 — WASM 安全 + 编译路径
|
||
|
||
- CRITICAL: zclaw_file_read 路径遍历修复 (组件级过滤)
|
||
- CRITICAL: zclaw_http_fetch SSRF 防护 (scheme 白名单 + 私有 IP 阻止)
|
||
- CRITICAL: A2A 始终编译 (移除 zclaw-protocols a2a feature gate)
|
||
- MEDIUM: FactCategory cfg(test) 导入修复
|
||
- 移除 kernel/desktop multi-agent feature (不再控制任何代码)
|
||
- 563 测试全通过
|
||
|
||
## [2026-04-17] refactor | Phase 4A multi-agent feature gate 移除
|
||
|
||
- 8 个文件移除 33 处 `#[cfg(feature = "multi-agent")]`
|
||
- zclaw-kernel default features 新增 multi-agent,始终编译
|
||
- A2A router、agents、adapters 代码不再条件编译
|
||
|
||
## [2026-04-17] feat | Phase 4B WASM host 函数真实实现
|
||
|
||
- zclaw_log: 读取 guest 内存字符串 + debug! 日志
|
||
- zclaw_http_fetch: ureq v3 同步 GET (10s timeout, network_allowed 守卫)
|
||
- zclaw_file_read: 沙箱 /workspace 读取 + 路径校验防逃逸
|
||
- 新增 ureq v3 workspace 依赖 (wasm feature gated)
|
||
- 25 测试全通过,workspace check 零错误
|
||
|
||
## [2026-04-17] refactor | Phase 3A loop_runner 双路径合并
|
||
|
||
- middleware_chain 从 Option<MiddlewareChain> 改为 MiddlewareChain (Default = 空链)
|
||
- 移除 6 处 `use_middleware` 分支 + 2 处 legacy loop_guard inline path
|
||
- 移除 loop_guard field + Mutex import + circuit_breaker_triggered 变量
|
||
- Kernel create_middleware_chain() 返回非 Option,messaging.rs 调用简化
|
||
- 1154→1023 行,净减 131 行;`cargo check --workspace` ✓ | `cargo test` ✓
|
||
|
||
## [2026-04-17] refactor | Phase 2A Pipeline→Kernel 解耦
|
||
|
||
- Pipeline 代码中无任何 `zclaw_kernel` 引用,`Cargo.toml` 中的依赖是空壳
|
||
- 移除后 `cargo check --workspace --exclude zclaw-saas` ✓
|
||
- 依赖图简化: Pipeline 不再拉入 Kernel 及其传递依赖
|
||
|
||
## [2026-04-17] refactor | Phase 2B saasStore 拆分为子模块
|
||
|
||
- 1025行单文件 → 5个子模块 + barrel re-export
|
||
- saas/types.ts(103行) + shared.ts(93行) + auth.ts(362行) + billing.ts(84行) + index.ts(309行)
|
||
- saasStore.ts 缩减为 15行 re-export barrel,25+ 消费者零改动
|
||
- `tsc --noEmit` ✓
|
||
|
||
## [2026-04-17] refactor | Phase 5 移除空壳 Hand — Whiteboard/Slideshow/Speech
|
||
|
||
- **Rust**: 删除 whiteboard.rs(422行) + slideshow.rs(797行) + speech.rs(442行)
|
||
- **前端**: 删除 WhiteboardCanvas + SlideshowRenderer + speech-synth + 类型/常量
|
||
- **配置**: 删除 3 个 HAND.toml
|
||
- Hands 9→6 启用 (Browser/Collector/Researcher/Clip/Twitter/Quiz + Reminder系统内部)
|
||
- 净减 ~5400 行,`cargo check` ✓ | `tsc --noEmit` ✓
|
||
|
||
## [2026-04-17] feat | Phase 1 错误体系重构 — ErrorKind + code + Serialize
|
||
|
||
- **Rust**: `zclaw-types/error.rs` 新增 `ErrorKind` (17种) + `error_codes` (E4040-E5110)
|
||
- ZclawError 新增 `kind()` / `code()` 方法 + `Serialize` impl (零破坏性)
|
||
- 12 个新测试: kind 映射 + code 稳定性 + JSON 序列化
|
||
- **前端**: `error-types.ts` 新增 `RustErrorKind` / `RustErrorDetail` / `tryParseRustError()`
|
||
- `classifyError()` 优先解析结构化错误 → 17 种中文标题映射
|
||
|
||
## [2026-04-17] fix | Phase 0 阻碍项修复 — 流式事件/CI/中文化
|
||
|
||
- **BLK-2**: loop_runner.rs 22 处 `let _ = tx.send()` 替换为 `if let Err(e) { tracing::warn!(...) }`,修复流式事件静默丢失
|
||
- **BLK-5**: 50+ 英文字符串翻译为中文 (HandApprovalModal/ChatArea/AuditLogsPanel 等 7 组件)
|
||
- **BLK-6**: CI/Release workflow 添加 `--exclude zclaw-saas`,无 DB 时 CI 绿灯
|
||
- **验证**: `cargo check --workspace --exclude zclaw-saas` ✓ | `tsc --noEmit` ✓
|
||
|
||
## [2026-04-17] fix | M4 Admin 权限守卫 + L1 文档同步
|
||
|
||
- **BUG-M4**: 新增 `admin_guard_middleware` (auth/mod.rs),在中间件层拦截非 admin 请求
|
||
- `billing::admin_routes()` 和 `account::admin_routes()` 挂载时加 guard layer
|
||
- 非_admin 用户访问 admin 端点统一返回 403 (无论 body 是否合法)
|
||
- `account/mod.rs` 拆分 `admin_routes()` (dashboard 端点独立)
|
||
- **BUG-L1**: 字段名已在代码中统一为 `pain_seed_categories`,同步 wiki/butler.md/log.md 文档
|
||
|
||
## [2026-04-17] test | 回归验证 — 13/13 PASS,全部 04-17 bug 修复确认
|
||
|
||
- Phase 1: 6 项 bug 修复回归 (H1/H2/M1/M2/M3/M5) 全部 PASS
|
||
- Phase 2: Pipeline (list/create/run) + Skill (75 + route_intent) 全部 PASS
|
||
- Phase 3: Kernel init + chat_stream + health_snapshot 全部 PASS
|
||
- BUG-L2 Pipeline 反序列化已验证修复
|
||
- 记忆系统健康: 381 条记忆, 12 agent, FTS5+TF-IDF 工作正常
|
||
- 详见 [[known-issues#04-17 回归验证]]
|
||
|
||
## [2026-04-17] test | 全系统功能 E2E 测试 — 129 链路覆盖
|
||
|
||
- 129 条链路全量测试 (Tauri MCP + Chrome DevTools MCP + HTTP API)
|
||
- 82 PASS / 20 PARTIAL / 1 FAIL / 26 SKIP,有效通过率 79.1%
|
||
- **0 CRITICAL** 失败,核心聊天链路完整闭环
|
||
- 新发现 2 HIGH + 5 MEDIUM + 2 LOW bug
|
||
- SaaS API 覆盖率 ~78% (50/64 端点已测试)
|
||
- 完整报告: `docs/test-evidence/2026-04-17/E2E_TEST_REPORT_2026_04_17.md`
|
||
- 详见 [[known-issues]]
|
||
|
||
## [2026-04-17] fix | 7 项 E2E Bug 修复 — Dashboard 404 / 记忆去重 / 记忆注入 / invoice_id / Prompt 版本
|
||
|
||
- **fix(admin)**: Dashboard 404 — 路由注册修复
|
||
- **fix(memory)**: viking_add 记忆去重 — URI+content 双重校验
|
||
- **fix(memory)**: 跨会话记忆注入修复 — FTS5→注入环节断裂修复
|
||
- **fix(billing)**: invoice_id 暴露给用户端
|
||
- **fix(prompt)**: 版本号自增修复
|
||
- **fix(memory)**: viking_find agent 隔离
|
||
- **fix(industry)**: API 字段名统一 (pain_seeds → pain_seed_categories)
|
||
- commit: a504a40
|
||
|
||
## [2026-04-16] fix | Agent 面板信息不随对话更新 — 事件时序 + clones 刷新
|
||
|
||
- **fix(desktop)**: Agent 面板信息不随对话更新 — 事件时序 + clones 刷新
|
||
- commit: 1309101
|
||
|
||
## [2026-04-16] fix | 3 项 P0 安全/功能修复 + TRUTH.md 数字校准
|
||
|
||
- **fix(saas)**: 3 项 P0 修复 (详见 [[known-issues]])
|
||
- TRUTH.md 数字同步更新
|
||
- commit: 0d79993
|
||
|
||
## [2026-04-16] fix | 5 项 E2E 测试 Bug 修复
|
||
|
||
- Agent 502 / 错误持久化 / 模型标记 / 侧面板 / 记忆页
|
||
- commit: a0d1392
|
||
|
||
## [2026-04-16] fix | useButlerInsights 使用 resolvedAgentId 查询痛点/方案
|
||
|
||
- commit: 7db9eb2
|
||
|
||
## [2026-04-16] fix | Heartbeat 参数名 + Relay 解密自愈 + 设置清理
|
||
|
||
- **fix(heartbeat)**: Tauri invoke 参数名修正 snake_case → camelCase (`f6c5dd2`)
|
||
- intelligence-client.ts 3 处 invoke 调用: agentId/taskCount/totalEntries 等
|
||
- 教训: Tauri 2.x 默认 rename_all=camelCase
|
||
- **fix(relay)**: API Key 解密失败自愈 — 启动迁移 + 容错跳过 (`b69dc61`)
|
||
- key_pool: 解密失败 skip 到下一个 key (不再 500)
|
||
- key_pool: heal_provider_keys() 启动自愈迁移
|
||
- **chore(settings)**: 删除用量统计和积分详情页面 (`7dea456`)
|
||
- 与"订阅与计费"功能重复,-240 行
|
||
|
||
## [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`
|
||
|
||
---
|
||
|
||
> 更新规则: 每次重大变更后追加一条,最新在最上面
|