overmind-mcp 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/processRegistry.d.ts +2 -0
- package/dist/lib/processRegistry.d.ts.map +1 -1
- package/dist/lib/processRegistry.js +21 -2
- package/dist/lib/processRegistry.js.map +1 -1
- package/dist/server.d.ts +16 -28
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +62 -69
- package/dist/server.js.map +1 -1
- package/dist/services/GeminiRunner.d.ts.map +1 -1
- package/dist/services/GeminiRunner.js +4 -1
- package/dist/services/GeminiRunner.js.map +1 -1
- package/dist/tools/agent_control.d.ts +101 -0
- package/dist/tools/agent_control.d.ts.map +1 -0
- package/dist/tools/agent_control.js +320 -0
- package/dist/tools/agent_control.js.map +1 -0
- package/docs/INDEX.md +11 -6
- package/docs/agent_control.md +656 -0
- package/docs/tools.md +27 -2
- package/package.json +1 -1
- package/dist/tools/get_agent_status.d.ts +0 -29
- package/dist/tools/get_agent_status.d.ts.map +0 -1
- package/dist/tools/get_agent_status.js +0 -45
- package/dist/tools/get_agent_status.js.map +0 -1
- package/dist/tools/kill_agent.d.ts +0 -22
- package/dist/tools/kill_agent.d.ts.map +0 -1
- package/dist/tools/kill_agent.js +0 -33
- package/dist/tools/kill_agent.js.map +0 -1
- package/dist/tools/stream_agent_output.d.ts +0 -30
- package/dist/tools/stream_agent_output.d.ts.map +0 -1
- package/dist/tools/stream_agent_output.js +0 -44
- package/dist/tools/stream_agent_output.js.map +0 -1
- package/dist/tools/wait_agent.d.ts +0 -30
- package/dist/tools/wait_agent.d.ts.map +0 -1
- package/dist/tools/wait_agent.js +0 -68
- package/dist/tools/wait_agent.js.map +0 -1
- package/docs/changelog/CHANGELOG.add.md +0 -106
- package/docs/changelog/CHANGELOG.md +0 -339
- package/docs/docs/OVERMIND_WORKFLOW_GUIDE.md +0 -595
- package/docs/docs/PROJECT_STRUCTURE.md +0 -101
- package/docs/docs/README_POSTGRES_INTEGRATION.md +0 -229
- package/docs/prompt/Claude_code.md +0 -74
- package/docs/prompt/Kilo.md +0 -74
- package/docs/prompt/Kilo_Hermes.md +0 -170
- package/docs/prompt/Minimax4.md +0 -96
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getProcessStatus, killAgent, } from '../lib/processRegistry.js';
|
|
3
|
+
/**
|
|
4
|
+
* agent_control — Outil MCP unifié pour contrôler le cycle de vie des agents OverMind
|
|
5
|
+
* ================================================================================
|
|
6
|
+
*
|
|
7
|
+
* Cet outil remplace les 4 outils individuels précédents :
|
|
8
|
+
* - get_agent_status → action: "status"
|
|
9
|
+
* - stream_agent_output → action: "stream"
|
|
10
|
+
* - kill_agent → action: "kill"
|
|
11
|
+
* - wait_agent → action: "wait"
|
|
12
|
+
*
|
|
13
|
+
* L'UNIFICATION est intentionnelle :
|
|
14
|
+
* - Un seul appel MCP pour la toolbox du client (pas 4 imports)
|
|
15
|
+
* - Cohérence des paramètres (agentName, runner, config communs)
|
|
16
|
+
* - Comportement déterministe : chaque action a une sémantique claire
|
|
17
|
+
* - Debugging simplifié : une seule source de vérité
|
|
18
|
+
*
|
|
19
|
+
* ─── SÉMANTIQUE DES ACTIONS ──────────────────────────────────────────────────
|
|
20
|
+
*
|
|
21
|
+
* status ─── Lecture pure, zero side-effect
|
|
22
|
+
* → Retourne l'état courant du process (pid, status, sessionId, outputBuffer)
|
|
23
|
+
* → NE MODIFIE PAS le registry (pas de mise à jour de timestamps artificiels)
|
|
24
|
+
* → Use-case : dashboard, polling léger, diagnostic
|
|
25
|
+
*
|
|
26
|
+
* stream ─── Lecture + indicateur de complétude
|
|
27
|
+
* → Retourne outputBuffer ET un flag isComplete
|
|
28
|
+
* → Use-case : récupérer la sortie en temps réel sans savoir si c'est fini
|
|
29
|
+
* → Option sinceTimestamp pour ne récupérer que le增量 (si implémenté)
|
|
30
|
+
*
|
|
31
|
+
* kill ─── Action destructive, irréversible
|
|
32
|
+
* → Tue le process tree via taskkill /F /T (Windows) ou kill -9 (Unix)
|
|
33
|
+
* → Met à jour le status → 'failed' dans le registry
|
|
34
|
+
* → Use-case : abort d'urgence, kill-switch
|
|
35
|
+
*
|
|
36
|
+
* wait ─── Blocage async avec polling
|
|
37
|
+
* → Poll toutes les 1s jusqu'à status !== 'running' ou timeout
|
|
38
|
+
* → Retourne le résultat final (outputBuffer ou erreur)
|
|
39
|
+
* → Use-case : synchronisation dans un workflow d'orchestration
|
|
40
|
+
*
|
|
41
|
+
* ─── ÉTATS DU PROCESS ─────────────────────────────────────────────────────────
|
|
42
|
+
*
|
|
43
|
+
* running → Process actif, PID valide, output en cours d'accumulation
|
|
44
|
+
* done → Process terminé avec code 0, outputBuffer gelé
|
|
45
|
+
* failed → Process terminé avec erreur (exit code != 0 ou crash)
|
|
46
|
+
* orphaned → Parent mort mais child tourne encore (detecté via isPidAlive)
|
|
47
|
+
*
|
|
48
|
+
* ─── ERREURS COMMUNES ─────────────────────────────────────────────────────────
|
|
49
|
+
*
|
|
50
|
+
* AGENT_NOT_FOUND → Agent absent du registry (jamais lancé ou déjà nettoyé)
|
|
51
|
+
* AGENT_NOT_RUNNING → Action "kill" sur un agent déjà terminé
|
|
52
|
+
* KILL_FAILED → taskkill/kill a échoué (pas assez de permissions, etc.)
|
|
53
|
+
* WAIT_TIMEOUT → Action "wait" a atteint le timeout sans terminaison
|
|
54
|
+
* ORPHANED_PROCESS → Status 'orphaned' détecté (process zombie)
|
|
55
|
+
*
|
|
56
|
+
* ─── EXEMPLES ─────────────────────────────────────────────────────────────────
|
|
57
|
+
*
|
|
58
|
+
* // Vérifier si un agent tourne encore
|
|
59
|
+
* agent_control({ agentName: "sniper_analyst", runner: "kilo", action: "status" })
|
|
60
|
+
*
|
|
61
|
+
* // Récupérer la sortie sans bloquer
|
|
62
|
+
* agent_control({ agentName: "sniper_analyst", runner: "kilo", action: "stream" })
|
|
63
|
+
*
|
|
64
|
+
* // Forcer l'arrêt d'un agent
|
|
65
|
+
* agent_control({ agentName: "sniper_analyst", runner: "kilo", action: "kill" })
|
|
66
|
+
*
|
|
67
|
+
* // Attendre la fin d'un agent (max 5 min)
|
|
68
|
+
* agent_control({ agentName: "sniper_analyst", runner: "kilo", action: "wait", timeoutMs: 300000 })
|
|
69
|
+
*/
|
|
70
|
+
// ─── SCHÉMA ZOD ────────────────────────────────────────────────────────────────
|
|
71
|
+
export const agentControlSchema = z
|
|
72
|
+
.object({
|
|
73
|
+
agentName: z.string().describe('Nom unique de l agent à contrôler'),
|
|
74
|
+
runner: z
|
|
75
|
+
.enum(['claude', 'gemini', 'kilo', 'qwencli', 'openclaw', 'cline', 'opencode', 'hermes'])
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Type de runner de l'agent (optionnel — déduit du registry si omis)"),
|
|
78
|
+
config: z
|
|
79
|
+
.string()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe('Chemin racine Overmind (dossier contenant .claude/)'),
|
|
82
|
+
action: z
|
|
83
|
+
.enum(['status', 'stream', 'kill', 'wait'])
|
|
84
|
+
.describe('Action à effectuer.\n' +
|
|
85
|
+
' status — Lire l\'état courant (pid, status, sessionId, outputBuffer)\n' +
|
|
86
|
+
' stream — Lire l\'output en temps réel + flag isComplete\n' +
|
|
87
|
+
' kill — Forcer l\'arrêt du process tree (irréversible)\n' +
|
|
88
|
+
' wait — Bloquer jusqu\'à terminaison naturelle (max timeoutMs)'),
|
|
89
|
+
timeoutMs: z
|
|
90
|
+
.number()
|
|
91
|
+
.optional()
|
|
92
|
+
.default(900000)
|
|
93
|
+
.describe('Timeout pour action="wait" en ms (défaut: 900000 = 15 min)'),
|
|
94
|
+
sinceTimestamp: z
|
|
95
|
+
.number()
|
|
96
|
+
.optional()
|
|
97
|
+
.describe('Pour action="stream" : ne retourner que l\'output après ce timestamp (ms epoch)'),
|
|
98
|
+
})
|
|
99
|
+
.passthrough();
|
|
100
|
+
/** Construit un rapport d'état formaté depuis une ProcessEntry */
|
|
101
|
+
function formatStatus(entry, _action) {
|
|
102
|
+
const lines = [];
|
|
103
|
+
lines.push(`**Agent:** ${entry.agentName}`);
|
|
104
|
+
lines.push(`**Runner:** ${entry.runner || 'inconnu'}`);
|
|
105
|
+
lines.push(`**Status:** ${entry.status}`);
|
|
106
|
+
lines.push(`**Started:** ${new Date(entry.ts).toISOString()}`);
|
|
107
|
+
if (entry.pid)
|
|
108
|
+
lines.push(`**PID:** ${entry.pid}`);
|
|
109
|
+
if (entry.id)
|
|
110
|
+
lines.push(`**Session ID:** ${entry.id}`);
|
|
111
|
+
if (entry.exitCode !== null && entry.exitCode !== undefined) {
|
|
112
|
+
lines.push(`**Exit Code:** ${entry.exitCode}`);
|
|
113
|
+
}
|
|
114
|
+
if (entry.lastOutputAt) {
|
|
115
|
+
lines.push(`**Last Output:** ${new Date(entry.lastOutputAt).toISOString()}`);
|
|
116
|
+
}
|
|
117
|
+
const bufLen = entry.outputBuffer?.length ?? 0;
|
|
118
|
+
if (bufLen > 0) {
|
|
119
|
+
lines.push(`\n**Output Buffer (${bufLen} chars):**`);
|
|
120
|
+
// On limite l'output dans le rapport à 2000 derniers caractères
|
|
121
|
+
const preview = entry.outputBuffer.slice(-2000);
|
|
122
|
+
lines.push('```');
|
|
123
|
+
lines.push(preview);
|
|
124
|
+
lines.push('```');
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
lines.push('\n_(output vide ou pas encore de sortie)_');
|
|
128
|
+
}
|
|
129
|
+
return lines.join('\n');
|
|
130
|
+
}
|
|
131
|
+
/** Récupère l'entrée depuis le registry ou retourne une erreur structurée */
|
|
132
|
+
async function resolveEntry(agentName, runner, configPath) {
|
|
133
|
+
const entry = await getProcessStatus(agentName, runner, configPath);
|
|
134
|
+
if (!entry) {
|
|
135
|
+
return {
|
|
136
|
+
error: `Agent "${agentName}" (runner: ${runner || 'any'}) non trouvé dans le registry. ` +
|
|
137
|
+
`Il n'est pas en cours d'exécution ou a été nettoyé (TTL 1h après terminaison).`,
|
|
138
|
+
code: 'AGENT_NOT_FOUND',
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return entry;
|
|
142
|
+
}
|
|
143
|
+
/** Action STATUS — lecture pure */
|
|
144
|
+
async function doStatus(agentName, runner, configPath) {
|
|
145
|
+
const resolved = await resolveEntry(agentName, runner, configPath);
|
|
146
|
+
if ('error' in resolved) {
|
|
147
|
+
return { content: [{ type: 'text', text: resolved.error }], isError: true };
|
|
148
|
+
}
|
|
149
|
+
const isZombie = resolved.status === 'running' && !!resolved.pid;
|
|
150
|
+
return {
|
|
151
|
+
content: [{ type: 'text', text: formatStatus(resolved, 'status') }],
|
|
152
|
+
isError: isZombie,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/** Action STREAM — lecture + complétude */
|
|
156
|
+
async function doStream(agentName, runner, configPath, sinceTimestamp) {
|
|
157
|
+
const resolved = await resolveEntry(agentName, runner, configPath);
|
|
158
|
+
if ('error' in resolved) {
|
|
159
|
+
return { content: [{ type: 'text', text: resolved.error }], isError: true };
|
|
160
|
+
}
|
|
161
|
+
const isComplete = resolved.status === 'done' ||
|
|
162
|
+
resolved.status === 'failed' ||
|
|
163
|
+
resolved.status === 'orphaned';
|
|
164
|
+
const output = resolved.outputBuffer || '';
|
|
165
|
+
// Filtering by sinceTimestamp is best-effort if lastOutputAt is available
|
|
166
|
+
if (sinceTimestamp && resolved.lastOutputAt && resolved.lastOutputAt > sinceTimestamp) {
|
|
167
|
+
// NOTE: per-chunk timestamps ne sont pas encore implémentés dans processRegistry.
|
|
168
|
+
// Pour l'instant on retourne tout l'outputBuffer. La filtering precise
|
|
169
|
+
// nécéssite d'ajouter un tableau de chunks avec timestamps dans ProcessEntry.
|
|
170
|
+
}
|
|
171
|
+
const lines = [];
|
|
172
|
+
lines.push(`**Agent:** ${resolved.agentName}`);
|
|
173
|
+
lines.push(`**Status:** ${resolved.status}`);
|
|
174
|
+
lines.push(`**isComplete:** ${isComplete}`);
|
|
175
|
+
if (resolved.pid)
|
|
176
|
+
lines.push(`**PID:** ${resolved.pid}`);
|
|
177
|
+
if (resolved.lastOutputAt) {
|
|
178
|
+
lines.push(`**Last Output At:** ${new Date(resolved.lastOutputAt).toISOString()}`);
|
|
179
|
+
}
|
|
180
|
+
lines.push(`\n**Output (${output.length} chars):**`);
|
|
181
|
+
lines.push('```');
|
|
182
|
+
lines.push(output || '(no output yet)');
|
|
183
|
+
lines.push('```');
|
|
184
|
+
return {
|
|
185
|
+
content: [{ type: 'text', text: lines.join('\n') }],
|
|
186
|
+
isError: isComplete && resolved.status === 'failed',
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/** Action KILL — destruction */
|
|
190
|
+
async function doKill(agentName, runner, configPath) {
|
|
191
|
+
const resolved = await resolveEntry(agentName, runner, configPath);
|
|
192
|
+
if ('error' in resolved) {
|
|
193
|
+
return { content: [{ type: 'text', text: resolved.error }], isError: true };
|
|
194
|
+
}
|
|
195
|
+
if (resolved.status !== 'running') {
|
|
196
|
+
return {
|
|
197
|
+
content: [
|
|
198
|
+
{
|
|
199
|
+
type: 'text',
|
|
200
|
+
text: `Agent "${agentName}" n'est pas en cours d'exécution (status: ${resolved.status}). ` +
|
|
201
|
+
`Impossible de tuer un agent déjà terminé.`,
|
|
202
|
+
},
|
|
203
|
+
],
|
|
204
|
+
isError: true,
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
const killResult = await killAgent(agentName, runner, configPath);
|
|
208
|
+
if (!killResult.killed) {
|
|
209
|
+
return {
|
|
210
|
+
content: [
|
|
211
|
+
{
|
|
212
|
+
type: 'text',
|
|
213
|
+
text: `Échec du kill pour "${agentName}". ` +
|
|
214
|
+
`Le process n'a pas pu être terminé (possible: permissions insuffisantes, ` +
|
|
215
|
+
`process déjà terminé entre-temps).`,
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
isError: true,
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
content: [
|
|
223
|
+
{
|
|
224
|
+
type: 'text',
|
|
225
|
+
text: `Agent "${agentName}" tué avec succès (PID: ${killResult.pid}). ` +
|
|
226
|
+
`Status mis à jour → 'failed' dans le registry.`,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/** Action WAIT — blocage async */
|
|
232
|
+
async function doWait(agentName, runner, configPath, timeoutMs) {
|
|
233
|
+
const start = Date.now();
|
|
234
|
+
const pollInterval = 1000; // 1 seconde entre chaque poll
|
|
235
|
+
// Premier check immédiat
|
|
236
|
+
{
|
|
237
|
+
const resolved = await resolveEntry(agentName, runner, configPath);
|
|
238
|
+
if ('error' in resolved) {
|
|
239
|
+
return { content: [{ type: 'text', text: resolved.error }], isError: true };
|
|
240
|
+
}
|
|
241
|
+
if (resolved.status === 'done') {
|
|
242
|
+
return {
|
|
243
|
+
content: [
|
|
244
|
+
{
|
|
245
|
+
type: 'text',
|
|
246
|
+
text: resolved.outputBuffer || 'Agent terminé avec succès.',
|
|
247
|
+
},
|
|
248
|
+
],
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
if (resolved.status === 'failed' || resolved.status === 'orphaned') {
|
|
252
|
+
return {
|
|
253
|
+
content: [
|
|
254
|
+
{
|
|
255
|
+
type: 'text',
|
|
256
|
+
text: `Agent terminé avec erreur (${resolved.status}):\n\n${resolved.outputBuffer || 'N/A'}`,
|
|
257
|
+
},
|
|
258
|
+
],
|
|
259
|
+
isError: true,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// Boucle de polling
|
|
264
|
+
while (Date.now() - start < timeoutMs) {
|
|
265
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
266
|
+
const resolved = await resolveEntry(agentName, runner, configPath);
|
|
267
|
+
if ('error' in resolved) {
|
|
268
|
+
return { content: [{ type: 'text', text: resolved.error }], isError: true };
|
|
269
|
+
}
|
|
270
|
+
if (resolved.status === 'done') {
|
|
271
|
+
return {
|
|
272
|
+
content: [
|
|
273
|
+
{
|
|
274
|
+
type: 'text',
|
|
275
|
+
text: resolved.outputBuffer || 'Agent terminé avec succès.',
|
|
276
|
+
},
|
|
277
|
+
],
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
if (resolved.status === 'failed' || resolved.status === 'orphaned') {
|
|
281
|
+
return {
|
|
282
|
+
content: [
|
|
283
|
+
{
|
|
284
|
+
type: 'text',
|
|
285
|
+
text: `Agent terminé avec erreur (${resolved.status}):\n\n${resolved.outputBuffer || 'N/A'}`,
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
isError: true,
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
// Status still 'running' — continue polling
|
|
292
|
+
}
|
|
293
|
+
// Timeout atteint
|
|
294
|
+
return {
|
|
295
|
+
content: [
|
|
296
|
+
{
|
|
297
|
+
type: 'text',
|
|
298
|
+
text: `Timeout de ${timeoutMs}ms atteint. ` +
|
|
299
|
+
`L'agent "${agentName}" est toujours en cours d'exécution (status: running). ` +
|
|
300
|
+
`Utilisez action="kill" pour forcer l'arrêt ou augmentez timeoutMs.`,
|
|
301
|
+
},
|
|
302
|
+
],
|
|
303
|
+
isError: true,
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
// ─── FONCTION PRINCIPALE ───────────────────────────────────────────────────────
|
|
307
|
+
export async function agentControl(args) {
|
|
308
|
+
const { agentName, runner, config: configPath, action, timeoutMs, sinceTimestamp } = args;
|
|
309
|
+
switch (action) {
|
|
310
|
+
case 'status':
|
|
311
|
+
return doStatus(agentName, runner, configPath);
|
|
312
|
+
case 'stream':
|
|
313
|
+
return doStream(agentName, runner, configPath, sinceTimestamp);
|
|
314
|
+
case 'kill':
|
|
315
|
+
return doKill(agentName, runner, configPath);
|
|
316
|
+
case 'wait':
|
|
317
|
+
return doWait(agentName, runner, configPath, timeoutMs ?? 900000);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
//# sourceMappingURL=agent_control.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent_control.js","sourceRoot":"","sources":["../../src/tools/agent_control.ts"],"names":[],"mappings":"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"}
|
package/docs/INDEX.md
CHANGED
|
@@ -97,13 +97,18 @@ Documentation des prompts système pour chaque runner :
|
|
|
97
97
|
- Hermes
|
|
98
98
|
- Minimax 4
|
|
99
99
|
|
|
100
|
+
## 🛠️ Reference des Outils
|
|
101
|
+
|
|
102
|
+
### [`agent_control.md`](./agent_control.md)
|
|
103
|
+
Contrôle unifié du cycle de vie des agents OverMind via le Process Registry.
|
|
104
|
+
- Remplace les 4 outils précédents : get_agent_status, stream_agent_output, kill_agent, wait_agent
|
|
105
|
+
- Patterns async : fire & forget, blocking wait, orchestration séquentielle, fan-out parallèle
|
|
106
|
+
- Dashboard temps réel par PID
|
|
107
|
+
- Lookup par sessionId, timestamp, PID
|
|
108
|
+
- Codes d'erreur structurés
|
|
109
|
+
|
|
100
110
|
### [`api/tools.md`](./api/tools.md)
|
|
101
|
-
Référence complète des outils MCP
|
|
102
|
-
- `run_agent` - Exécuter un agent
|
|
103
|
-
- `create_agent` - Créer un nouvel agent
|
|
104
|
-
- `list_agents` - Lister les agents
|
|
105
|
-
- `memory_search` - Recherche mémoire
|
|
106
|
-
- `run_agents_parallel` - Exécution parallèle
|
|
111
|
+
Référence complète des outils MCP (14 outils)
|
|
107
112
|
|
|
108
113
|
## 📝 Changelog
|
|
109
114
|
|