UNPKG

overmind-mcp

Version:

Orchestrateur universel agents IA multi-modeles via MCP. Inclut le protocole 'Custom-Nickname' pour identifier vos agents avec des surnoms originaux (The Chaos Prophet, Shadow Sniper, etc.), l'isolation mémoire (Private Memory Context) et le support pour

123 lines • 4.91 kB
/** * ╔══════════════════════════════════════════════════════════════════════╗ * ║ OVERMIND BRIDGE — AgentRegistry (In-Memory State Tracker) ║ * ║ ║ * ║ Tracke l'état live de chaque agent : busy / idle / offline. ║ * ║ Sérialise les appels concurrents vers un même agent via mutex. ║ * ║ ║ * ║ ARCHITECTURE ║ * ║ ───────────── ║ * ║ OverBridgeServer → AgentRegistry → (mutex per agent) ║ * ║ → OverBridgeService.runAgent() ║ * ╚══════════════════════════════════════════════════════════════════════╝ */ import type { RunnerType } from './types.js'; import { type BridgeLogger } from './utils.js'; export type AgentLiveStatus = 'online' | 'offline' | 'busy' | 'idle'; export interface AgentLiveState { name: string; runner: RunnerType; status: AgentLiveStatus; /** PID du process si connu (via agent_control status) */ pid?: number; /** SessionId de l'appel en cours (si busy) */ currentSessionId?: string; /** Timestamp dernière activité (runAgent / heartbeat) */ lastActivityAt: number; /** Compteur de runs total depuis le boot du bridge */ totalRuns: number; /** Compteur de runs échoués */ totalErrors: number; /** Compteur A2A (combien de fois cet agent a été appelé par un autre agent) */ a2aReceived: number; /** Compteur A2A (combien de fois cet agent a appelé un autre agent) */ a2aSent: number; } export interface ListAgentsFilter { /** Filtre par status (ex: tous les 'busy') */ status?: AgentLiveStatus; /** Filtre par runner (ex: 'claude', 'hermes') */ runner?: RunnerType; } export declare class AgentRegistry { private readonly states; private readonly mutexes; private readonly log; constructor(logger?: BridgeLogger); /** * Récupère (ou crée) le mutex associé à un agent. * Garantit qu'un seul appel runAgent tourne à la fois par agent. */ private getMutex; /** * Exécute une fonction sous le mutex de l'agent. * Bloque si un autre run est en cours sur le même agent. */ withLock<T>(agentName: string, fn: () => Promise<T>): Promise<T>; /** * Vérifie si un run est actuellement en cours sur cet agent. */ isBusy(agentName: string): boolean; /** * Initialise ou met à jour l'état d'un agent. * Appelé au premier runAgent ou explicitement via register(). */ register(agentName: string, runner: RunnerType): AgentLiveState; /** * Marque un agent comme busy (run en cours). */ markBusy(agentName: string, sessionId?: string, pid?: number): void; /** * Marque un agent comme idle (run terminé, agent dispo). */ markIdle(agentName: string, success: boolean): void; /** * Marque un agent comme offline (kill, crash, ou jamais vu). */ markOffline(agentName: string): void; /** * Marque un agent comme online (vu récemment, pas en cours). */ markOnline(agentName: string): void; /** * Incrémente le compteur A2A received (cet agent a été appelé par un autre). */ incrementA2aReceived(agentName: string): void; /** * Incrémente le compteur A2A sent (cet agent a appelé un autre). */ incrementA2aSent(agentName: string): void; /** * Récupère l'état d'un agent. Retourne undefined si jamais vu. */ get(agentName: string): AgentLiveState | undefined; /** * Liste tous les agents connus, optionnellement filtrés. */ list(filter?: ListAgentsFilter): AgentLiveState[]; /** * Liste les agents actuellement busy (utile pour /status global). */ listBusy(): AgentLiveState[]; /** * Liste les agents online et idle (disponibles pour run). */ listAvailable(): AgentLiveState[]; /** * Statistiques globales du registry. */ stats(): { total: number; online: number; busy: number; offline: number; totalRuns: number; totalErrors: number; }; /** * Purge les agents offline depuis plus de `maxAgeMs`. * Évite que la map grossisse indéfiniment. */ prune(maxAgeMs?: number): number; } //# sourceMappingURL=AgentRegistry.d.ts.map