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