fix(growth): 穷尽审计修复 — tracker timeline 断链 + 文档更新
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled

P1-1: tracker.rs record_learning 改为通过 MemoryEntry 存储
      (之前用 store_metadata 存但 get_timeline 用 find_by_prefix 读,
       两条路径不交叉,timeline 永远返回空)

P2-4: extractor.rs 移除未使用的 _llm_driver 绑定,改为 is_none() 检查

P2-5: lib.rs 模块文档更新,反映实际 17 个模块而非原始 4 个

profile_updater.rs: 添加注释说明只收集 update_field 支持的字段

测试: zclaw-growth 137 tests, zclaw-runtime 87 tests, 0 failures
This commit is contained in:
iven
2026-04-18 23:01:04 +08:00
parent 7cdcfaddb0
commit f358f14f12
3 changed files with 49 additions and 11 deletions

View File

@@ -5,10 +5,13 @@
//!
//! # Architecture
//!
//! The growth system consists of four main components:
//! The growth system consists of several subsystems:
//!
//! ## Memory Pipeline (L0-L2)
//!
//! 1. **MemoryExtractor** (`extractor`) - Analyzes conversations and extracts
//! preferences, knowledge, and experience using LLM.
//! preferences, knowledge, and experience using LLM. Supports combined extraction
//! (single LLM call for memories + experiences + profile signals).
//!
//! 2. **MemoryRetriever** (`retriever`) - Performs semantic search over
//! stored memories to find contextually relevant information.
@@ -19,6 +22,28 @@
//! 4. **GrowthTracker** (`tracker`) - Tracks growth metrics and evolution
//! over time.
//!
//! ## Evolution Engine (L1-L3)
//!
//! 5. **ExperienceStore** (`experience_store`) - FTS5-backed structured experience storage.
//!
//! 6. **PatternAggregator** (`pattern_aggregator`) - Collects high-frequency patterns for L2.
//!
//! 7. **SkillGenerator** (`skill_generator`) - LLM-driven SKILL.md content generation.
//!
//! 8. **QualityGate** (`quality_gate`) - Validates candidate skills (confidence, conflicts).
//!
//! 9. **EvolutionEngine** (`evolution_engine`) - Orchestrates L1/L2/L3 evolution phases.
//!
//! 10. **WorkflowComposer** (`workflow_composer`) - Extracts tool chain patterns for Pipeline YAML.
//!
//! 11. **FeedbackCollector** (`feedback_collector`) - Trust score management with decay.
//!
//! ## Support Modules
//!
//! 12. **VikingAdapter** (`viking_adapter`) - Storage abstraction (in-memory + SQLite backends).
//! 13. **Summarizer** (`summarizer`) - L0/L1 summary generation.
//! 14. **JsonUtils** (`json_utils`) - Shared JSON parsing utilities.
//!
//! # Storage
//!
//! All memories are stored in OpenViking with a URI structure:

View File

@@ -23,6 +23,10 @@ impl UserProfileUpdater {
/// 从提取结果中收集需要更新的画像字段
/// 返回 (field, value) 列表,由调用方负责实际的异步写入
///
/// 注意:只收集 UserProfileStore::update_field() 支持的字段。
/// ProfileSignals 中的 recent_topic / pain_point / preferred_tool
/// 需要 update_field 扩展后才能写入,当前跳过。
pub fn collect_updates(
&self,
extraction: &CombinedExtraction,

View File

@@ -66,21 +66,30 @@ impl GrowthTracker {
timestamp: Utc::now(),
};
// Store learning event
self.viking
.store_metadata(
&format!("agent://{}/events/{}", agent_id, session_id),
&event,
)
.await?;
// Store learning event as MemoryEntry so get_timeline can find it via find_by_prefix
let event_uri = format!("agent://{}/events/{}", agent_id, session_id);
let content = serde_json::to_string(&event)?;
let entry = crate::types::MemoryEntry {
uri: event_uri,
memory_type: MemoryType::Session,
content,
keywords: vec![agent_id.to_string(), session_id.to_string()],
importance: 5,
access_count: 0,
created_at: event.timestamp,
last_accessed: event.timestamp,
overview: None,
abstract_summary: None,
};
self.viking.store(&entry).await?;
// Update last learning time
// Update last learning time via metadata
self.viking
.store_metadata(
&format!("agent://{}", agent_id),
&AgentMetadata {
last_learning_time: Some(Utc::now()),
total_learning_events: None, // Will be computed
total_learning_events: None,
},
)
.await?;