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
77 lines • 2.93 kB
JavaScript
import { z } from 'zod';
import { getMemoryProvider } from '../memory/MemoryFactory.js';
export const memoryRunsSchema = z.object({
runner: z
.string()
.optional()
.describe("Filtrer par runner (ex: 'claude', 'gemini', 'kilo', 'qwen'…). Vide = tous les runners."),
limit: z
.number()
.int()
.min(1)
.max(100)
.optional()
.default(20)
.describe('Nombre de runs à retourner'),
stats: z
.boolean()
.optional()
.default(false)
.describe("Afficher les statistiques globales d'orchestration"),
agent_name: z
.string()
.optional()
.describe('Filtrer par agent (détecté automatiquement si exécuté via OverMind)'),
});
export async function memoryRunsTool(args) {
const provider = getMemoryProvider();
// Priorité à l'agent détecté (Privacy)
const effectiveAgentName = process.env.OVERMIND_AGENT_NAME || args.agent_name;
if (args.stats) {
const s = await provider.getStats(effectiveAgentName);
const rows = s.byRunner
.map((r) => ` • **${r.runner}** : ${r.count} runs (${r.successes} ✅)`)
.join('\n');
const scopeLabel = effectiveAgentName ? `pour l'agent **${effectiveAgentName}**` : 'globales';
return {
content: [
{
type: 'text',
text: `📊 **OverMind Statistics (${scopeLabel})**\n\n- Runs totaux : **${s.totalRuns}**\n- Connaissances stockées : **${s.totalKnowledge}**\n\n**Par runner :**\n${rows || ' _(aucun run enregistré)_'}`,
},
],
};
}
const runs = await provider.getRecentRuns({
runner: args.runner,
limit: args.limit,
agentName: effectiveAgentName,
});
if (runs.length === 0) {
return {
content: [
{
type: 'text',
text: `📭 Aucun run enregistré${args.runner ? ` pour le runner **${args.runner}**` : ''}.`,
},
],
};
}
const lines = runs.map((r) => {
const date = new Date(r.created_at).toISOString().replace('T', ' ').slice(0, 19);
const status = r.success ? '✅' : '❌';
const dur = r.duration_ms ? `${(r.duration_ms / 1000).toFixed(1)}s` : '?';
const preview = (r.result ?? r.error ?? '').slice(0, 120);
const agentLabel = r.agent_name ? ` (${r.agent_name})` : '';
return `${status} **[${r.runner}${agentLabel}]** — ${date} — ${dur}\n> _${r.prompt.slice(0, 100)}_\n> ${preview}`;
});
return {
content: [
{
type: 'text',
text: `🕐 **${runs.length} run(s)${args.runner ? ` pour ${args.runner}` : ''}**\n\n${lines.join('\n\n')}`,
},
],
};
}
//# sourceMappingURL=memory_runs.js.map