feat(memory): config embedders (LOT C2) + suggestion contextuelle (LOT C3) + contexte projet partagé
- LOT C2 (§14.5.3) : use cases de configuration des embedders déclaratifs (List/Save/Delete + DescribeEmbedderEngines : modèles ONNX recommandés, environnement local détecté, stratégies compilées). UI EmbedderSettings. - LOT C3 (§14.5.5) : suggestion contextuelle best-effort à l'activation quand la mémoire dépasse le budget de recall sans embedder configuré (event EmbedderSuggested, anti-spam 1×/session, « ne plus demander »). - Contexte projet partagé .ideai/CONTEXT.md (model-agnostic) injecté à tous les agents/profils au lancement, avant la persona. UI ProjectContextPanel. Tests : backend workspace vert (0 échec) ; frontend 306/306. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -129,6 +129,21 @@ pub enum DomainEventDto {
|
||||
/// Project id.
|
||||
project_id: String,
|
||||
},
|
||||
/// A project's memory crossed the recall budget while no embedder is configured
|
||||
/// (LOT C3 — §14.5.5): a one-time, dismissible "configure an embedder?" hint.
|
||||
#[serde(rename_all = "camelCase")]
|
||||
EmbedderSuggested {
|
||||
/// Project id.
|
||||
project_id: String,
|
||||
/// Whether a local Ollama-style embedding server was detected.
|
||||
ollama_detected: bool,
|
||||
/// Ids of recommended ONNX models already present in the local cache.
|
||||
onnx_cached: Vec<String>,
|
||||
/// Whether the HTTP capability is compiled in.
|
||||
vector_http_enabled: bool,
|
||||
/// Whether the in-process ONNX capability is compiled in.
|
||||
vector_onnx_enabled: bool,
|
||||
},
|
||||
/// Raw PTY output (normally routed to a per-session channel, not here).
|
||||
#[serde(rename_all = "camelCase")]
|
||||
PtyOutput {
|
||||
@ -163,11 +178,7 @@ impl From<&DomainEvent> for DomainEventDto {
|
||||
template_id: template_id.to_string(),
|
||||
version: version.get(),
|
||||
},
|
||||
DomainEvent::AgentDriftDetected {
|
||||
agent_id,
|
||||
from,
|
||||
to,
|
||||
} => Self::AgentDriftDetected {
|
||||
DomainEvent::AgentDriftDetected { agent_id, from, to } => Self::AgentDriftDetected {
|
||||
agent_id: agent_id.to_string(),
|
||||
from: from.get(),
|
||||
to: to.get(),
|
||||
@ -212,6 +223,19 @@ impl From<&DomainEvent> for DomainEventDto {
|
||||
DomainEvent::MemoryIndexRebuilt { project_id } => Self::MemoryIndexRebuilt {
|
||||
project_id: project_id.to_string(),
|
||||
},
|
||||
DomainEvent::EmbedderSuggested {
|
||||
project_id,
|
||||
ollama_detected,
|
||||
onnx_cached,
|
||||
vector_http_enabled,
|
||||
vector_onnx_enabled,
|
||||
} => Self::EmbedderSuggested {
|
||||
project_id: project_id.to_string(),
|
||||
ollama_detected: *ollama_detected,
|
||||
onnx_cached: onnx_cached.clone(),
|
||||
vector_http_enabled: *vector_http_enabled,
|
||||
vector_onnx_enabled: *vector_onnx_enabled,
|
||||
},
|
||||
DomainEvent::PtyOutput { session_id, bytes } => Self::PtyOutput {
|
||||
session_id: session_id.to_string(),
|
||||
bytes: bytes.clone(),
|
||||
|
||||
Reference in New Issue
Block a user