fix(orchestrator): délégation inter-agent toujours headless, jamais d'injection PTY
La conversation inter-agent (idea_ask_agent) doit rester strictement headless : la cible répond via une session structured capturée par IdeA, sans jamais écrire dans le PTY d'une cellule visible ni fermer le terminal que l'utilisateur observe. - lifecycle: flag `allow_structured_alongside_pty` — ouvre une session structured pour la délégation sans fermer le PTY visible (coexistence). - orchestrator/service: `ensure_structured_session` ne ferme plus le PTY visible ; mapping typé de l'erreur no-reply ; coexistence PTY/structured. - infrastructure/input: garantit zéro `DelegationReady` et zéro write PTY pour une délégation headless, même quand l'entrée est `front_owned`. - app-tauri (commands/state): câblage du flag de coexistence. - tests: fixtures portées vers le modèle structured/headless, assertions cibles mises à jour (aucun #[ignore] ajouté, aucun test retiré). Validé réel : cargo build OK ; orchestrator_service 60/0, agent_lifecycle 62/0, structured_launch_d3 22/0, infrastructure input 35/0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -1194,9 +1194,16 @@ mod tests {
|
||||
#[test]
|
||||
fn enqueue_silent_marks_busy_without_delivery() {
|
||||
let bus = Arc::new(RecordingBus::default());
|
||||
let inbox = MediatedInbox::new(Arc::new(InMemoryMailbox::new()), Arc::new(FixedClock(1)))
|
||||
.with_events(Arc::clone(&bus) as Arc<dyn EventBus>);
|
||||
let pty = Arc::new(FakePty::new());
|
||||
let inbox = MediatedInbox::with_pty(
|
||||
Arc::new(InMemoryMailbox::new()),
|
||||
Arc::new(FixedClock(1)),
|
||||
Arc::clone(&pty) as Arc<dyn PtyPort>,
|
||||
)
|
||||
.with_events(Arc::clone(&bus) as Arc<dyn EventBus>);
|
||||
let a = agent(1);
|
||||
inbox.bind_handle_with_submit(a, handle(1), SubmitConfig::default());
|
||||
inbox.set_front_attached(a, true);
|
||||
|
||||
inbox.enqueue_silent(a, ticket(10, "headless turn"));
|
||||
|
||||
@ -1206,6 +1213,10 @@ mod tests {
|
||||
bus.delegation_ready().is_empty(),
|
||||
"headless bookkeeping must not leak a prompt to the terminal"
|
||||
);
|
||||
assert!(
|
||||
pty.writes.lock().unwrap().is_empty(),
|
||||
"headless bookkeeping must not write into the visible PTY"
|
||||
);
|
||||
assert_eq!(inbox.mailbox.pending(&a), 1);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user