feat(agents): pont Codex inter-agents + readiness/heartbeat lot 1
Deux chantiers livrés au vert (workspace entier : domain+application+
infrastructure 42 + app-tauri --lib 128, 0 échec).
## Codex inter-agents
- domaine: McpConfigStrategy::TomlConfigHome { target, home_env } +
toml_config_home(...); AgentProfile::materializes_idea_bridge()
(whitelist Claude/ConfigFile + Codex/TomlConfigHome); McpServerWiring
+ encodeur TOML.
- application: lifecycle apply_mcp_config bras TomlConfigHome (écrit
{runDir}/<target>, pousse (home_env, parent) dans spec.env);
guard_mcp_bridge_supported ré-exprimée via materializes_idea_bridge();
catalogue Codex porte toml_config_home(".codex/config.toml","CODEX_HOME").
- app-tauri: is_codex_mcp_profile, migrate_codex_run_dir,
mcp_server_entry_toml.
- tests: matrice domaine TomlConfigHome + round-trip dual Claude/Codex
sur loopback réel (fakes, zéro token).
## Readiness/heartbeat lot 1
- domaine: readiness.rs — ReadinessPolicy::classify (Final => TurnEnded),
variantes ReplyEvent::Heartbeat / ToolActivity.
- application: drain_with_readiness consulte la policy et appelle
mark_idle sur le signal déterministe; branché dans ask_agent.
Corrige la cause racine: une cible qui ne renvoie qu'un Final (sans
idea_reply) débloque désormais sa file Busy.
- infrastructure: adapters de session émettent Heartbeat/ToolActivity.
- tests: drain_with_readiness_lot1 (points QA 5 & 6) verts.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -71,6 +71,19 @@ pub enum DomainEvent {
|
||||
/// `true` when a turn is in flight, `false` when the agent is idle.
|
||||
busy: bool,
|
||||
},
|
||||
/// An agent's **liveness** (alive/stalled) changed (lot 2, chantier
|
||||
/// readiness/heartbeat). Emitted **once per transition** by the stall detector:
|
||||
/// `Alive→Stalled` when no proof of liveness arrived for longer than the profile's
|
||||
/// `stall_after_ms`, and `Stalled→Alive` when a late battement (delta / tool
|
||||
/// activity / heartbeat) revives it or the agent returns to `Idle`. Discrete,
|
||||
/// low-frequency beacon (no spam) relayed to the front so the mediated-input view
|
||||
/// can badge a frozen agent. Purely advisory — the FIFO and the turn keep running.
|
||||
AgentLivenessChanged {
|
||||
/// The agent whose liveness changed.
|
||||
agent_id: AgentId,
|
||||
/// The new liveness state.
|
||||
liveness: crate::input::AgentLiveness,
|
||||
},
|
||||
/// An agent's runtime profile was changed (hot-swap of the AI engine).
|
||||
AgentProfileChanged {
|
||||
/// The agent.
|
||||
|
||||
Reference in New Issue
Block a user