/** * AgentStatusTracker — subscribes to EventBus events and keeps the * SessionRegistry updated with live agent status. * * Created once per process during boot. Listens for: * - agent.run.started / agent.run.completed → agent status changes * - tool.started / tool.executed → current tool tracking * - brain.ask_human → waiting_user status * - fleet events (subagent spawn/start/done) → agent entries * * @module agent-status-tracker */ import type { EventBus } from './kernel/events.js'; import type { AgentEntry, SessionRegistry } from './session-registry.js'; export interface AgentStatusTrackerOptions { events: EventBus; registry: SessionRegistry; /** Session id whose live agent state is mirrored by this tracker. */ sessionId?: string | (() => string | undefined) | undefined; /** Leader agent name shown in the registry. Default: "leader". */ leaderName?: string | undefined; /** * Best-effort callback fired after each registry write settles. Used to nudge * local WebUI servers (FleetNotifier) so cross-process status reaches the map * without waiting on their file-watch/poll. Never block or throw. */ onUpdate?: (() => void) | undefined; } export declare class AgentStatusTracker { private readonly events; private readonly registry; private readonly sessionId; private readonly leaderName; private agents; private lastAgents; private leaderStatus; private leaderCurrentTool; private leaderCurrentTask; private leaderIterations; private leaderToolCalls; private leaderCostUsd; private leaderTokensIn; private leaderTokensOut; private leaderCtxPct; private leaderModel; private leaderPartialText; private leaderStartedAt; private leaderRecentTools; private leaderRecentMail; private leaderTodos; private leaderLatestPrompt; private leaderLatestPromptAt; private leaderActivity; private leaderPendingTools; private subagentPendingTools; private seenIncomingMail; private seenOutgoingMail; private static readonly SEEN_MAIL_LIMIT; private rememberMailId; private unsubscribers; private readonly onUpdate; private sweepTimer; private partialTimer; /** Serialize registry writes so concurrent flush() calls don't race. */ private flushPromise; constructor(opts: AgentStatusTrackerOptions); /** Current full agent list (leader + subagents) as of the last flush. */ getAgents(): AgentEntry[]; start(): void; stop(): void; /** * Coalesce streamed-text flushes: at most one registry write per * {@link PARTIAL_FLUSH_THROTTLE_MS} while text streams in, so per-token * deltas never thrash the cross-process registry file. */ private schedulePartialFlush; /** * Remove subagents that have been finished (idle/error) for longer than * {@link AGENT_REAP_MS}. Running / streaming / waiting_user agents are kept * regardless of age — only *not-working* agents are reaped. */ private sweep; private flush; private currentSessionId; private acceptsSession; private markLeaderStarted; private captureLeaderContext; } //# sourceMappingURL=agent-status-tracker.d.ts.map