feat(memory): injecter le rappel mémoire dans le convention file à l'activation (§14.5.4)
À l'activation d'un agent, LaunchAgent compose désormais une section « # Mémoire projet » dans le convention file généré (CLAUDE.md/AGENTS.md…), au même titre que les skills assignés (§14.2). Les agents lisent ainsi la mémoire projet sans aucun flag ni mécanisme propre à une CLI. - LaunchAgent reçoit le port MemoryRecall (Arc<dyn MemoryRecall>), résout le rappel (budget AGENT_MEMORY_RECALL_BUDGET=2048, requête = persona de l'agent) en best-effort : mémoire vide/absente ou erreur ⇒ section omise, le launch n'est jamais bloqué (comme un SkillRef dangling). - compose_convention_file gagne un argument `memory: &[MemoryIndexEntry]` (reste pure) ; section injectée seulement pour la stratégie conventionFile. - state.rs : une seule instance NaiveMemoryRecall partagée (recall + LaunchAgent). Tests: 57 binaires verts. compose_convention_file (vide ⇒ inchangé, ordre, cohabitation skills) + intégration LaunchAgent (section présente / absente / best-effort sur erreur / pas d'injection en stratégie env). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -184,6 +184,21 @@ impl SkillStore for FakeSkills {
|
||||
}
|
||||
}
|
||||
|
||||
/// An empty [`MemoryRecall`]: no project memory ⇒ no memory section injected,
|
||||
/// leaving the launch behaviour unchanged for the service-level tests.
|
||||
#[derive(Default)]
|
||||
struct FakeRecall;
|
||||
#[async_trait]
|
||||
impl domain::ports::MemoryRecall for FakeRecall {
|
||||
async fn recall(
|
||||
&self,
|
||||
_root: &ProjectPath,
|
||||
_query: &domain::ports::MemoryQuery,
|
||||
) -> Result<Vec<domain::MemoryIndexEntry>, domain::ports::MemoryError> {
|
||||
Ok(Vec::new())
|
||||
}
|
||||
}
|
||||
|
||||
/// A [`SkillStore`] that records every `save` so a `create_skill` dispatch can be
|
||||
/// asserted against the persisted skill (name + scope).
|
||||
#[derive(Clone, Default)]
|
||||
@ -414,6 +429,7 @@ fn fixture(contexts: FakeContexts) -> Fixture {
|
||||
Arc::clone(&sessions),
|
||||
Arc::new(bus.clone()),
|
||||
Arc::new(SeqIds::new()),
|
||||
Arc::new(FakeRecall),
|
||||
));
|
||||
let list = Arc::new(ListAgents::new(Arc::new(contexts.clone())));
|
||||
let close = Arc::new(CloseTerminal::new(
|
||||
|
||||
Reference in New Issue
Block a user