diff --git a/docs/superpowers/plans/2026-04-07-openviking-verification-report.md b/docs/superpowers/plans/2026-04-07-openviking-verification-report.md new file mode 100644 index 0000000..c6db1b9 --- /dev/null +++ b/docs/superpowers/plans/2026-04-07-openviking-verification-report.md @@ -0,0 +1,58 @@ +# OpenViking 模块端到端验证报告 + +Chunk 1 — 2026-04-07 + +## 模块状态总览 + +| 模块 | 状态 | Tauri 命令 | 前端触发 | 持久化 | 测试 | +|------|------|-----------|---------|--------|------| +| Extractor | ✅ running | 2 已注册 | streamStore 对话后触发 ✅ | SqliteStorage ✅ | 3 e2e + 2 unit | +| Reflection | ✅ running | 6 已注册 | streamStore + hooks ✅ | VikingStorage ✅ | 4 (2 new) | +| Heartbeat | ✅ running | 10 已注册 | saasStore 登录后触发 ✅ | VikingStorage ✅ | 2 unit | +| Compaction | ✅ running | 4 已注册 | Middleware chain (priority 100) | VikingStorage ✅ | 4 unit | +| VikingInject | ✅ running | 1 已注册 | Middleware chain (priority 150) | VikingStorage ✅ | 覆盖于 growth tests | + +## 详细发现 + +### Extractor (记忆提取) +- **链路**: streamStore → MemoryExtractor(TS) → extractAndStoreMemories → Tauri → Rust SessionExtractor → SqliteStorage +- **前端**: 有完整的 LLM + 规则提取,支持中文模式 +- **Rust**: 有 LLM + 规则提取,但规则仅支持英文模式 +- **注意**: 存在双重提取(TS MemoryExtractor 和 Rust SessionExtractor 各提取一次),功能正常但有性能浪费 +- **新测试**: `extract_and_store_creates_memories`, `extract_preference_from_conversation`, `no_extraction_without_llm_driver` + +### Reflection (反思进化) +- **链路**: streamStore → intelligenceClient.reflection → Tauri → ReflectionEngine; 同时 intelligence_hooks → ReflectionEngine +- **LLM 分析**: 支持,带规则回退 +- **持久化**: state + result + history 全部存储到 VikingStorage +- **注意**: 前端和后端都调用 record_conversation(),导致双重计数 +- **新测试**: `test_reflection_cycle_full`, `test_reflection_generates_identity_proposals` + +### Heartbeat (心跳检查) +- **链路**: saasStore login → deviceHeartbeat; 同时 intelligence_hooks → record_interaction +- **内置检查**: check_pending_tasks, check_memory_health, check_idle_greeting, check_personality_improvement, check_learning_opportunities — 全部有真实实现 +- **配置**: 默认 30 分钟间隔,静默时段 22:00-08:00 +- **注意**: Tauri 命令 `heartbeat_start` 通过 saasStore 登录后调用,不是 app init 时自动启动 + +### Compaction (对话压缩) +- **链路**: CompactionMiddleware (priority 100) 在 create_middleware_chain 中注册 +- **Memory Flush**: `flush_old_messages_to_memory` 在压缩前将用户/助手消息存储到 VikingStorage +- **摘要**: 规则提取(主题 + 结论 + 技术上下文),支持 LLM 增强 +- **阈值**: soft 15k tokens, hard 20k tokens + +### VikingInject (记忆注入) +- **链路**: MemoryMiddleware (priority 150) 在 create_middleware_chain 中注册 +- **注入流程**: before_completion → viking_find → 格式化记忆 → 注入 system prompt +- **Tauri 命令**: `viking_inject_prompt` 已注册但前端未直接调用(middleware 自动处理) +- **测试**: zclaw-growth 78 个测试全通过 + +## 结论 + +**所有 5 个模块端到端链路完整,功能正常。** 无断链。 + +建议优化(非阻塞): +1. Extractor 双重提取 — 合并为单次提取路径 +2. Reflection 双重计数 — 统一为单一触发路径 +3. Heartbeat 自动启动 — 考虑在 app init 时启动而非仅在 saasStore 登录后 + +**Chunk 1 验证通过,可以进入 Chunk 2/3/4。**