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

142 lines • 5.82 kB
/** * ╔══════════════════════════════════════════════════════════════════════╗ * ║ OVERMIND BRIDGE — MessageLog (Postgres Persistence) ║ * ║ ║ * ║ Persiste tous les messages agent↔agent et client→agent dans ║ * ║ Postgres pour audit, replay après crash, et statistiques. ║ * ║ ║ * ║ TABLE ║ * ║ ────── ║ * ║ bridge_messages ║ * ║ id UUID PK ║ * ║ from_agent TEXT NULL (NULL = client externe) ║ * ║ to_agent TEXT NOT NULL ║ * ║ runner TEXT NOT NULL ║ * ║ prompt TEXT NOT NULL ║ * ║ response TEXT NULL ║ * ║ status TEXT NOT NULL (pending|running|done|failed) ║ * ║ session_id TEXT NULL ║ * ║ metadata JSONB NULL (path, model, mode, discord ctx) ║ * ║ error TEXT NULL ║ * ║ created_at TIMESTAMPTZ ║ * ║ started_at TIMESTAMPTZ NULL ║ * ║ completed_at TIMESTAMPTZ NULL ║ * ║ duration_ms INTEGER NULL ║ * ╚══════════════════════════════════════════════════════════════════════╝ */ import { type BridgeLogger } from './utils.js'; import type { RunnerType } from './types.js'; export type MessageStatus = 'pending' | 'running' | 'done' | 'failed' | 'timeout'; export interface PersistedMessage { id: string; fromAgent: string | null; toAgent: string; runner: RunnerType; prompt: string; response: string | null; status: MessageStatus; sessionId: string | null; metadata: Record<string, unknown> | null; error: string | null; createdAt: Date; startedAt: Date | null; completedAt: Date | null; durationMs: number | null; } export interface CreateMessageInput { fromAgent?: string | null; toAgent: string; runner: RunnerType; prompt: string; sessionId?: string; metadata?: Record<string, unknown> | null; } export interface ListMessagesFilter { toAgent?: string; /** null = filtre les messages sans fromAgent (i.e. venant d'un client externe) */ fromAgent?: string | null; status?: MessageStatus; /** Limite de résultats (default: 50) */ limit?: number; /** Offset pour pagination (default: 0) */ offset?: number; /** Depuis N heures (ex: 24 = dernières 24h) */ sinceHours?: number; } export interface MessageLogConfig { host: string; port: number; user: string; password: string; database: string; /** SSL (default: false) */ ssl?: boolean; /** Pool min/max (default: 2/10) */ poolMin?: number; poolMax?: number; } export declare class MessageLog { private readonly config; private pool; private readonly log; private initialized; constructor(config: MessageLogConfig, logger?: BridgeLogger); /** * Initialise le pool Postgres et crée le schéma si nécessaire. * Idempotent : peut être appelé plusieurs fois sans danger. */ init(): Promise<void>; /** * Ferme proprement le pool. */ close(): Promise<void>; /** * Crée un message en status 'pending' et retourne son ID. */ create(input: CreateMessageInput): Promise<string>; /** * Marque un message comme 'running' (appel MCP en cours). */ markRunning(id: string, sessionId?: string): Promise<void>; /** * Marque un message comme 'done' avec sa réponse. */ markDone(id: string, response: string, sessionId?: string): Promise<void>; /** * Marque un message comme 'failed' avec erreur. */ markFailed(id: string, error: string): Promise<void>; /** * Marque un message comme 'timeout'. */ markTimeout(id: string): Promise<void>; /** * Récupère un message par ID. */ getById(id: string): Promise<PersistedMessage | null>; /** * Liste les messages avec filtres et pagination. */ list(filter?: ListMessagesFilter): Promise<PersistedMessage[]>; /** * Trouve les messages 'pending' ou 'running' depuis plus de X minutes (stuck). * Utile pour le replay automatique au redémarrage. */ findStuck(stuckAfterMinutes?: number): Promise<PersistedMessage[]>; /** * Statistiques globales du log. */ stats(sinceHours?: number): Promise<{ total: number; byStatus: Record<MessageStatus, number>; byRunner: Record<string, number>; avgDurationMs: number | null; }>; private assertReady; } /** * Charge la config Postgres depuis process.env (POSTGRES_*). * Utilise les variables déjà dans .env. */ export declare function loadMessageLogConfigFromEnv(): MessageLogConfig; //# sourceMappingURL=MessageLog.d.ts.map