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
TypeScript
/**
* ╔══════════════════════════════════════════════════════════════════════╗
* ║ 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