feat(growth,kernel,runtime): Embedding 接通 + 自学习自动化 — A线+B线 6 项实现
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

A线 Embedding 接通:
- A1: MemoryRetriever.set_embedding_client() + GrowthIntegration.configure_embedding()
  + Kernel.set_embedding_client() + viking_configure_embedding 传播到 Kernel
- A2: Skill 路由替换 new_tf_idf_only() 为 EmbeddingAdapter + LlmSkillFallback

B线 自学习自动化:
- B1: evolution_bridge.rs — candidate_to_manifest() (PromptOnly, disabled by default)
- B2: Kernel::generate_and_register_skill() 全链路 (LLM→parse→QualityGate→manifest→persist)
- B3: EvolutionMiddleware 双模式 (auto_mode 跳过注入, 留给 kernel 自动处理)
- B4: QualityGate 加固 (body ≥100字符 + 必须含标题 + 置信度上限 1.0)

验证: 934 tests PASS, 0 failures
This commit is contained in:
iven
2026-04-21 15:21:03 +08:00
parent 74ce6d4adc
commit 5b5491a08f
13 changed files with 330 additions and 8 deletions

View File

@@ -602,9 +602,11 @@ fn parse_uri(uri: &str) -> Result<(String, MemoryType, String), String> {
/// Configure embedding for semantic memory search
/// Configures SqliteStorage (VikingStorage) embedding for FTS5 + semantic search.
/// Also propagates to Kernel's skill router and memory retriever.
// @connected
#[tauri::command]
pub async fn viking_configure_embedding(
kernel_state: tauri::State<'_, crate::kernel_commands::KernelState>,
provider: String,
api_key: String,
model: Option<String>,
@@ -621,12 +623,23 @@ pub async fn viking_configure_embedding(
let client_viking = crate::llm::EmbeddingClient::new(config_viking);
let adapter = crate::embedding_adapter::TauriEmbeddingAdapter::new(client_viking);
let arc_adapter = std::sync::Arc::new(adapter);
// 1. Configure SqliteStorage (existing behavior)
storage
.configure_embedding(std::sync::Arc::new(adapter))
.configure_embedding(arc_adapter.clone())
.await
.map_err(|e| format!("Failed to configure embedding: {}", e))?;
// 2. Propagate to Kernel for skill router + memory retriever
{
let mut kernel_lock = kernel_state.lock().await;
if let Some(ref mut k) = *kernel_lock {
k.set_embedding_client(arc_adapter);
tracing::info!("[VikingCommands] Embedding propagated to Kernel skill router + memory retriever");
}
}
tracing::info!("[VikingCommands] Embedding configured with provider: {}", provider);
Ok(EmbeddingConfigResult {