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:
@ -447,16 +447,16 @@ async fn close_kills_pty_removes_session_and_returns_code() {
|
||||
|
||||
let close = CloseTerminal::new(Arc::new(pty.clone()), Arc::clone(&sessions));
|
||||
let out = close
|
||||
.execute(CloseTerminalInput {
|
||||
session_id: sid(5),
|
||||
})
|
||||
.execute(CloseTerminalInput { session_id: sid(5) })
|
||||
.await
|
||||
.expect("close succeeds");
|
||||
|
||||
assert_eq!(out.code, Some(0));
|
||||
assert!(sessions.is_empty(), "session removed from registry");
|
||||
assert!(
|
||||
pty.calls().iter().any(|c| matches!(c, Call::Kill { id } if *id == sid(5))),
|
||||
pty.calls()
|
||||
.iter()
|
||||
.any(|c| matches!(c, Call::Kill { id } if *id == sid(5))),
|
||||
"kill called for the session"
|
||||
);
|
||||
}
|
||||
@ -477,9 +477,7 @@ async fn close_surfaces_signal_exit_as_none_code() {
|
||||
|
||||
let close = CloseTerminal::new(Arc::new(pty.clone()), Arc::clone(&sessions));
|
||||
let out = close
|
||||
.execute(CloseTerminalInput {
|
||||
session_id: sid(6),
|
||||
})
|
||||
.execute(CloseTerminalInput { session_id: sid(6) })
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(out.code, None);
|
||||
|
||||
Reference in New Issue
Block a user