overmind-mcp 2.2.4 → 2.3.0
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/.mcp.json.example +21 -0
- package/README.md +59 -6
- package/bin/.gitkeep +0 -0
- package/bin/README.md +34 -0
- package/dist/lib/InstallHelper.js +1 -1
- package/dist/lib/processRegistry.d.ts +71 -0
- package/dist/lib/processRegistry.d.ts.map +1 -0
- package/dist/lib/processRegistry.js +275 -0
- package/dist/lib/processRegistry.js.map +1 -0
- package/dist/server.d.ts +14 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +58 -1
- package/dist/server.js.map +1 -1
- package/dist/services/ClaudeRunner.d.ts.map +1 -1
- package/dist/services/ClaudeRunner.js +59 -4
- package/dist/services/ClaudeRunner.js.map +1 -1
- package/dist/services/ClineRunner.d.ts.map +1 -1
- package/dist/services/ClineRunner.js +12 -1
- package/dist/services/ClineRunner.js.map +1 -1
- package/dist/services/GeminiRunner.d.ts.map +1 -1
- package/dist/services/GeminiRunner.js +18 -0
- package/dist/services/GeminiRunner.js.map +1 -1
- package/dist/services/KiloRunner.d.ts.map +1 -1
- package/dist/services/KiloRunner.js +28 -1
- package/dist/services/KiloRunner.js.map +1 -1
- package/dist/services/NousHermesRunner.d.ts.map +1 -1
- package/dist/services/NousHermesRunner.js +18 -5
- package/dist/services/NousHermesRunner.js.map +1 -1
- package/dist/services/OpenClawRunner.d.ts.map +1 -1
- package/dist/services/OpenClawRunner.js +12 -2
- package/dist/services/OpenClawRunner.js.map +1 -1
- package/dist/services/OpenCodeRunner.d.ts.map +1 -1
- package/dist/services/OpenCodeRunner.js +12 -1
- package/dist/services/OpenCodeRunner.js.map +1 -1
- package/dist/services/QwenCliRunner.d.ts.map +1 -1
- package/dist/services/QwenCliRunner.js +12 -1
- package/dist/services/QwenCliRunner.js.map +1 -1
- package/dist/tools/config_example.d.ts.map +1 -1
- package/dist/tools/config_example.js +23 -7
- package/dist/tools/config_example.js.map +1 -1
- package/dist/tools/get_agent_status.d.ts +29 -0
- package/dist/tools/get_agent_status.d.ts.map +1 -0
- package/dist/tools/get_agent_status.js +45 -0
- package/dist/tools/get_agent_status.js.map +1 -0
- package/dist/tools/kill_agent.d.ts +22 -0
- package/dist/tools/kill_agent.d.ts.map +1 -0
- package/dist/tools/kill_agent.js +33 -0
- package/dist/tools/kill_agent.js.map +1 -0
- package/dist/tools/stream_agent_output.d.ts +30 -0
- package/dist/tools/stream_agent_output.d.ts.map +1 -0
- package/dist/tools/stream_agent_output.js +44 -0
- package/dist/tools/stream_agent_output.js.map +1 -0
- package/dist/tools/wait_agent.d.ts +30 -0
- package/dist/tools/wait_agent.d.ts.map +1 -0
- package/dist/tools/wait_agent.js +68 -0
- package/dist/tools/wait_agent.js.map +1 -0
- package/docs/ASYNC_AGENT_INTEGRATION.md +311 -0
- package/docs/INDEX.md +144 -144
- package/docs/docs/OVERMIND_WORKFLOW_GUIDE.md +595 -0
- package/docs/docs/PROJECT_STRUCTURE.md +101 -0
- package/docs/docs/README_POSTGRES_INTEGRATION.md +229 -0
- package/package.json +5 -5
- package/scripts/auto-install.mjs +8 -8
- package/scripts/postgres-manager.mjs +1 -1
- package/scripts/postinstall.mjs +2 -2
- package/scripts/setup.mjs +8 -5
- package/docs/guides/DEPLOYMENT.md +0 -418
- package/docs/guides/SWARM_USAGE.md +0 -444
- /package/{install-overmind-unix.sh → bin/install-overmind-unix.sh} +0 -0
- /package/{install-overmind-windows.bat → bin/install-overmind-windows.bat} +0 -0
- /package/docs/{api/prompt → prompt}/Claude_code.md +0 -0
- /package/docs/{api/prompt → prompt}/Kilo.md +0 -0
- /package/docs/{api/prompt → prompt}/Kilo_Hermes.md +0 -0
- /package/docs/{api/prompt → prompt}/Minimax4.md +0 -0
|
@@ -0,0 +1,595 @@
|
|
|
1
|
+
# Guide Workflow Client OverMind
|
|
2
|
+
|
|
3
|
+
## 🎯 Architecture
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
VOTRE APPLICATION
|
|
7
|
+
↓
|
|
8
|
+
OVERMIND-BRIDGE (Wrapper)
|
|
9
|
+
↓
|
|
10
|
+
runAgent() (OverMind-MCP)
|
|
11
|
+
↓
|
|
12
|
+
AGENT LLM (Claude/Gemini/Kilo)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 📦 Étape 1: Créer le Bridge (overmind-bridge.ts)
|
|
18
|
+
|
|
19
|
+
Le **bridge** est votre service wrapper qui simplifie l'interaction avec OverMind.
|
|
20
|
+
|
|
21
|
+
### Code Complet
|
|
22
|
+
|
|
23
|
+
```typescript
|
|
24
|
+
/**
|
|
25
|
+
* OVERMIND-BRIDGE SERVICE
|
|
26
|
+
* Pont universel pour piloter Overmind programmatiquement
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
import "./env.js"; // ⚠️ OBLIGATOIRE EN PREMIER (initialisation contexte)
|
|
30
|
+
|
|
31
|
+
import { runAgent, getMemoryProvider } from "overmind-mcp";
|
|
32
|
+
import { RunnerType } from "./types.js";
|
|
33
|
+
|
|
34
|
+
export interface ExecutionResult {
|
|
35
|
+
success: boolean;
|
|
36
|
+
output?: string;
|
|
37
|
+
error: string;
|
|
38
|
+
duration: number;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export class OvermindBridge {
|
|
42
|
+
/**
|
|
43
|
+
* Exécute un agent IA avec une mission
|
|
44
|
+
* @param agentName Nom de l'agent configuré
|
|
45
|
+
* @param mission Prompt/instruction
|
|
46
|
+
* @param runner Type de moteur (claude/gemini/kilo/etc)
|
|
47
|
+
* @returns Résultat de l'exécution
|
|
48
|
+
*/
|
|
49
|
+
async request(
|
|
50
|
+
agentName: string,
|
|
51
|
+
mission: string,
|
|
52
|
+
runner: RunnerType = "claude",
|
|
53
|
+
autoResume: boolean = true,
|
|
54
|
+
cwd?: string,
|
|
55
|
+
): Promise<ExecutionResult> {
|
|
56
|
+
const start = Date.now();
|
|
57
|
+
try {
|
|
58
|
+
const result = await runAgent({
|
|
59
|
+
// @ts-expect-error - overmind-mcp uses 'qwen' internally
|
|
60
|
+
runner: runner === "qwencli" ? "qwen" : runner,
|
|
61
|
+
agentName,
|
|
62
|
+
prompt: mission,
|
|
63
|
+
autoResume,
|
|
64
|
+
cwd,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const duration = ((Date.now() - start) / 1000).toFixed(1);
|
|
68
|
+
|
|
69
|
+
if (result.isError) {
|
|
70
|
+
const errorText = result.content.find((c) => c.type === "text")?.text || "Unknown error";
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
error: errorText,
|
|
74
|
+
duration: parseFloat(duration),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const outputText = result.content.find((c) => c.type === "text")?.text || "";
|
|
79
|
+
|
|
80
|
+
return {
|
|
81
|
+
success: true,
|
|
82
|
+
output: outputText,
|
|
83
|
+
duration: parseFloat(duration),
|
|
84
|
+
error: "",
|
|
85
|
+
};
|
|
86
|
+
} catch (error: unknown) {
|
|
87
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
88
|
+
console.error(`[OvermindBridge] 💀 CRITICAL ERROR:`, msg);
|
|
89
|
+
return {
|
|
90
|
+
success: false,
|
|
91
|
+
error: msg,
|
|
92
|
+
duration: 0,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Enregistre une connaissance dans la mémoire Overmind
|
|
99
|
+
*/
|
|
100
|
+
async memory_store(
|
|
101
|
+
text: string,
|
|
102
|
+
source: "user" | "agent" | "pattern" | "decision" = "agent",
|
|
103
|
+
): Promise<string> {
|
|
104
|
+
try {
|
|
105
|
+
return await getMemoryProvider().storeKnowledge({ text, source });
|
|
106
|
+
} catch (err) {
|
|
107
|
+
console.error(`[OvermindBridge] 🧠 Memory Store Error:`, err);
|
|
108
|
+
return "";
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Recherche dans la mémoire Overmind (RAG)
|
|
114
|
+
*/
|
|
115
|
+
async memory_search(
|
|
116
|
+
query: string,
|
|
117
|
+
limit: number = 5,
|
|
118
|
+
): Promise<Array<{ text: string; score: number }>> {
|
|
119
|
+
try {
|
|
120
|
+
return await getMemoryProvider().searchMemory({ query, limit });
|
|
121
|
+
} catch (err) {
|
|
122
|
+
console.error(`[OvermindBridge] 🔍 Memory Search Error:`, err);
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Instance singleton
|
|
129
|
+
export const overmind = new OvermindBridge();
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Points Clés
|
|
133
|
+
|
|
134
|
+
✅ `import "./env.js"` **OBLIGATOIRE EN PREMIER** (initialisation contexte)
|
|
135
|
+
✅ Wrapper autour de `runAgent()` avec gestion d'erreurs
|
|
136
|
+
✅ Méthodes helper: `memory_store()` et `memory_search()`
|
|
137
|
+
✅ Instance singleton `overmind` pour usage facile
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 📋 Étape 2: Créer un Job/Workflow
|
|
142
|
+
|
|
143
|
+
### Structure d'un Job
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { overmind } from "../overmind-bridge.js";
|
|
147
|
+
import type { JobConfig } from "../types.js";
|
|
148
|
+
|
|
149
|
+
export const config: JobConfig = {
|
|
150
|
+
id: "001",
|
|
151
|
+
name: "Maintenance Agent Divers",
|
|
152
|
+
agent: "mainteneur_agent_divers",
|
|
153
|
+
mission: "OBJECTIF : Atteindre 0 défaut...",
|
|
154
|
+
runner: "claude",
|
|
155
|
+
frequency: JobFrequency.DAILY,
|
|
156
|
+
autoResume: false,
|
|
157
|
+
scheduleTime: { hour: 0, minute: 0 },
|
|
158
|
+
};
|
|
159
|
+
|
|
160
|
+
async function runStandalone() {
|
|
161
|
+
const res = await overmind.request(
|
|
162
|
+
config.agent,
|
|
163
|
+
config.mission,
|
|
164
|
+
config.runner,
|
|
165
|
+
config.autoResume,
|
|
166
|
+
"C:\\path\\to\\project", // cwd optionnel
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
if (res.success) {
|
|
170
|
+
console.log(`✅ Succès en ${res.duration}s`);
|
|
171
|
+
console.log(res.output);
|
|
172
|
+
|
|
173
|
+
// Mémoriser le résultat
|
|
174
|
+
await overmind.memory_store("Job 001 complété avec succès", "agent");
|
|
175
|
+
} else {
|
|
176
|
+
console.error(`❌ Erreur: ${res.error}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Exécution standalone
|
|
181
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(__filename)) {
|
|
182
|
+
runStandalone().catch((err) => {
|
|
183
|
+
console.error(err);
|
|
184
|
+
process.exit(1);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## 🚀 Étape 3: Patterns de Workflows
|
|
192
|
+
|
|
193
|
+
### Pattern 1: Maintenance Zero Tolerance
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
const zeroTolerancePrompt = `[ZERO TOLERANCE PROTOCOL v14.4] :
|
|
197
|
+
1. TARGET : Tu es dans C:\\path\\to\\project.
|
|
198
|
+
2. EXECUTE : npm run lint, npm run build, npm run test.
|
|
199
|
+
3. ANALYZE : S'il y a le MOINDRE warning, CORRIGE-LES immédiatement.
|
|
200
|
+
4. FINAL CHECK : Relance le cycle jusqu'à ZERO défaut.
|
|
201
|
+
5. STATUS : Score final 100/100 exigé.`;
|
|
202
|
+
|
|
203
|
+
const res = await overmind.request(
|
|
204
|
+
"mainteneur_agent_divers",
|
|
205
|
+
zeroTolerancePrompt,
|
|
206
|
+
"claude",
|
|
207
|
+
false,
|
|
208
|
+
"C:\\path\\to\\project"
|
|
209
|
+
);
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Pattern 2: Workflow Multi-Étapes
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// Étape 1: Analyser
|
|
216
|
+
const analysis = await overmind.request(
|
|
217
|
+
"analyste",
|
|
218
|
+
"Analyse ce code et identifie les problèmes..."
|
|
219
|
+
);
|
|
220
|
+
|
|
221
|
+
if (!analysis.success) {
|
|
222
|
+
throw new Error(analysis.error);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Étape 2: Corriger
|
|
226
|
+
const fix = await overmind.request(
|
|
227
|
+
"correcteur",
|
|
228
|
+
`Corrige les problèmes identifiés: ${analysis.output}`
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
// Étape 3: Vérifier
|
|
232
|
+
const verify = await overmind.request(
|
|
233
|
+
"verificateur",
|
|
234
|
+
"Vérifie que tout est corrigé..."
|
|
235
|
+
);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
### Pattern 3: Workflow Multi-Agents Parallèle
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
import { runAgents_parallel } from "overmind-mcp";
|
|
242
|
+
|
|
243
|
+
// Exécuter 3 agents en parallèle
|
|
244
|
+
const results = await runAgents_parallel({
|
|
245
|
+
agents: [
|
|
246
|
+
{
|
|
247
|
+
taskId: "lint",
|
|
248
|
+
runner: "claude",
|
|
249
|
+
agentName: "linter",
|
|
250
|
+
prompt: "Exécute npm run lint et corrige les warnings"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
taskId: "build",
|
|
254
|
+
runner: "claude",
|
|
255
|
+
agentName: "builder",
|
|
256
|
+
prompt: "Exécute npm run build et corrige les erreurs"
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
taskId: "test",
|
|
260
|
+
runner: "claude",
|
|
261
|
+
agentName: "tester",
|
|
262
|
+
prompt: "Exécute npm run test et corrige les failures"
|
|
263
|
+
}
|
|
264
|
+
],
|
|
265
|
+
waitAll: true // Attendre tous les agents
|
|
266
|
+
});
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Pattern 4: Retry avec Fallback
|
|
270
|
+
|
|
271
|
+
```typescript
|
|
272
|
+
async function executeWithRetry(
|
|
273
|
+
agentName: string,
|
|
274
|
+
mission: string,
|
|
275
|
+
maxRetries: number = 3
|
|
276
|
+
) {
|
|
277
|
+
for (let i = 0; i < maxRetries; i++) {
|
|
278
|
+
const res = await overmind.request(agentName, mission);
|
|
279
|
+
|
|
280
|
+
if (res.success) {
|
|
281
|
+
return res;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
console.warn(`Tentative ${i + 1}/${maxRetries} échouée`);
|
|
285
|
+
|
|
286
|
+
if (i < maxRetries - 1) {
|
|
287
|
+
// Attendre avant retry
|
|
288
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
throw new Error("Échec après " + maxRetries + " tentatives");
|
|
293
|
+
}
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### Pattern 5: Workflow avec Mémoire
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// 1. Rechercher dans la mémoire
|
|
300
|
+
const previous = await overmind.memory_search("maintenance workflow");
|
|
301
|
+
|
|
302
|
+
// 2. Créer le prompt avec contexte
|
|
303
|
+
const contextPrompt = `
|
|
304
|
+
CONTEXTE HISTORIQUE :
|
|
305
|
+
${previous.map(r => r.text).join("\n")}
|
|
306
|
+
|
|
307
|
+
MISSION ACTUELLE :
|
|
308
|
+
Maintenance Zero Tolerance du projet...
|
|
309
|
+
`;
|
|
310
|
+
|
|
311
|
+
// 3. Exécuter
|
|
312
|
+
const res = await overmind.request("mainteneur", contextPrompt);
|
|
313
|
+
|
|
314
|
+
// 4. Mémoriser le résultat
|
|
315
|
+
if (res.success) {
|
|
316
|
+
await overmind.memory_store(
|
|
317
|
+
`Maintenance complétée: ${res.output.substring(0, 100)}...`,
|
|
318
|
+
"agent"
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
---
|
|
324
|
+
|
|
325
|
+
## 🎨 Étape 4: Types et Configurations
|
|
326
|
+
|
|
327
|
+
### types.ts
|
|
328
|
+
|
|
329
|
+
```typescript
|
|
330
|
+
export type RunnerType =
|
|
331
|
+
| "claude"
|
|
332
|
+
| "gemini"
|
|
333
|
+
| "kilo"
|
|
334
|
+
| "qwencli"
|
|
335
|
+
| "openclaw"
|
|
336
|
+
| "cline"
|
|
337
|
+
| "opencode"
|
|
338
|
+
| "hermes";
|
|
339
|
+
|
|
340
|
+
export enum JobFrequency {
|
|
341
|
+
MANUAL = "MANUAL",
|
|
342
|
+
HOURLY = "HOURLY",
|
|
343
|
+
DAILY = "DAILY",
|
|
344
|
+
WEEKLY = "WEEKLY",
|
|
345
|
+
MONTHLY = "MONTHLY",
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
export interface JobConfig {
|
|
349
|
+
id: string;
|
|
350
|
+
name: string;
|
|
351
|
+
agent: string;
|
|
352
|
+
shortDescription: string;
|
|
353
|
+
mission: string;
|
|
354
|
+
runner: RunnerType;
|
|
355
|
+
frequency: JobFrequency;
|
|
356
|
+
autoResume: boolean;
|
|
357
|
+
scheduleTime?: { hour: number; minute: number };
|
|
358
|
+
secondScheduleTime?: { hour: number; minute: number };
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## 🔧 Étape 5: Bonnes Pratiques
|
|
365
|
+
|
|
366
|
+
### ✅ À Faire
|
|
367
|
+
|
|
368
|
+
1. **Initialiser le contexte en premier**
|
|
369
|
+
```typescript
|
|
370
|
+
import "./env.js"; // TOUJOURS EN PREMIER
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
2. **Gérer les erreurs**
|
|
374
|
+
```typescript
|
|
375
|
+
try {
|
|
376
|
+
const res = await overmind.request(...);
|
|
377
|
+
if (!res.success) {
|
|
378
|
+
console.error(res.error);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
} catch (err) {
|
|
382
|
+
console.error(err);
|
|
383
|
+
}
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
3. **Spécifier le cwd**
|
|
387
|
+
```typescript
|
|
388
|
+
const res = await overmind.request(
|
|
389
|
+
agent,
|
|
390
|
+
mission,
|
|
391
|
+
runner,
|
|
392
|
+
false,
|
|
393
|
+
"C:\\path\\to\\project" // cwd explicite
|
|
394
|
+
);
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
4. **Utiliser la mémoire**
|
|
398
|
+
```typescript
|
|
399
|
+
await overmind.memory_store("Information importante", "user");
|
|
400
|
+
const results = await overmind.memory_search("requete");
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
5. **Logger les durées**
|
|
404
|
+
```typescript
|
|
405
|
+
console.log(`Terminé en ${res.duration}s`);
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
### ❌ À Éviter
|
|
409
|
+
|
|
410
|
+
1. **Oublier l'initialisation du contexte**
|
|
411
|
+
```typescript
|
|
412
|
+
// ❌ FAUX
|
|
413
|
+
import { runAgent } from "overmind-mcp";
|
|
414
|
+
|
|
415
|
+
// ✅ CORRECT
|
|
416
|
+
import "./env.js";
|
|
417
|
+
import { runAgent } from "overmind-mcp";
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
2. **Ignorer les erreurs**
|
|
421
|
+
```typescript
|
|
422
|
+
// ❌ FAUX
|
|
423
|
+
await overmind.request(agent, mission);
|
|
424
|
+
|
|
425
|
+
// ✅ CORRECT
|
|
426
|
+
const res = await overmind.request(agent, mission);
|
|
427
|
+
if (!res.success) {
|
|
428
|
+
// Gérer l'erreur
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
3. **Prompt trop vague**
|
|
433
|
+
```typescript
|
|
434
|
+
// ❌ FAUX
|
|
435
|
+
await overmind.request(agent, "Corrige les erreurs");
|
|
436
|
+
|
|
437
|
+
// ✅ CORRECT
|
|
438
|
+
const prompt = `[ZERO TOLERANCE PROTOCOL] :
|
|
439
|
+
1. Exécute npm run lint
|
|
440
|
+
2. Corrige TOUTES les erreurs
|
|
441
|
+
3. Relance jusqu'à 0 défaut`;
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## 📚 Étape 6: Exemples Complets
|
|
447
|
+
|
|
448
|
+
### Exemple 1: Job de Maintenance Complet
|
|
449
|
+
|
|
450
|
+
```typescript
|
|
451
|
+
import { overmind } from "../overmind-bridge.js";
|
|
452
|
+
import type { JobConfig } from "../types.js";
|
|
453
|
+
import { JobFrequency } from "../types.js";
|
|
454
|
+
import path from "path";
|
|
455
|
+
import { fileURLToPath } from "url";
|
|
456
|
+
|
|
457
|
+
export const config: JobConfig = {
|
|
458
|
+
id: "001",
|
|
459
|
+
name: "Maintenance Zero Tolerance",
|
|
460
|
+
agent: "mainteneur",
|
|
461
|
+
shortDescription: "Lint/Build/Test complet",
|
|
462
|
+
mission: `OBJECTIF 0 DÉFAUT (v14.4) :
|
|
463
|
+
1. LINT : Atteindre 0 warning via 'npm run lint'
|
|
464
|
+
2. BUILD : Atteindre 0 erreur via 'npm run build'
|
|
465
|
+
3. TEST : 100% réussite via 'npm run test'
|
|
466
|
+
4. FIXING : Corriger activement tout écart`,
|
|
467
|
+
runner: "claude",
|
|
468
|
+
frequency: JobFrequency.DAILY,
|
|
469
|
+
autoResume: false,
|
|
470
|
+
scheduleTime: { hour: 0, minute: 0 },
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
async function runStandalone() {
|
|
474
|
+
console.log(`🚀 [MISSION: ${config.id}] ${config.name}`);
|
|
475
|
+
const startTime = Date.now();
|
|
476
|
+
|
|
477
|
+
try {
|
|
478
|
+
const prompt = `[ZERO TOLERANCE PROTOCOL v14.4] :
|
|
479
|
+
1. TARGET : Tu es dans C:\\path\\to\\project.
|
|
480
|
+
2. EXECUTE : npm run lint, npm run build, npm run test.
|
|
481
|
+
3. ANALYZE : S'il y a le MOINDRE warning, CORRIGE-LES.
|
|
482
|
+
4. FINAL CHECK : Relance jusqu'à ZERO défaut.
|
|
483
|
+
5. STATUS : Score final 100/100 exigé.
|
|
484
|
+
|
|
485
|
+
${config.mission}`;
|
|
486
|
+
|
|
487
|
+
const res = await overmind.request(
|
|
488
|
+
config.agent,
|
|
489
|
+
prompt,
|
|
490
|
+
config.runner,
|
|
491
|
+
false,
|
|
492
|
+
"C:\\path\\to\\project"
|
|
493
|
+
);
|
|
494
|
+
|
|
495
|
+
const duration = ((Date.now() - startTime) / 1000).toFixed(1);
|
|
496
|
+
|
|
497
|
+
if (res.success) {
|
|
498
|
+
console.log(`✅ Terminé en ${duration}s`);
|
|
499
|
+
console.log(res.output);
|
|
500
|
+
|
|
501
|
+
await overmind.memory_store(
|
|
502
|
+
`Job ${config.id} complété avec succès (0 défaut)`,
|
|
503
|
+
"agent"
|
|
504
|
+
);
|
|
505
|
+
} else {
|
|
506
|
+
console.error(`❌ Erreur: ${res.error}`);
|
|
507
|
+
}
|
|
508
|
+
} catch (err) {
|
|
509
|
+
console.error("Erreur critique:", err);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
// Exécution standalone
|
|
514
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
515
|
+
if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(__filename)) {
|
|
516
|
+
runStandalone().catch((err) => {
|
|
517
|
+
console.error(err);
|
|
518
|
+
process.exit(1);
|
|
519
|
+
});
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Exemple 2: Workflow Multi-Projets
|
|
524
|
+
|
|
525
|
+
```typescript
|
|
526
|
+
import { overmind } from "../overmind-bridge.js";
|
|
527
|
+
|
|
528
|
+
const PROJECTS = [
|
|
529
|
+
{ name: "agent-divers", path: "C:\\SierraChart\\ACS_Source\\BTCacsil\\agent_multi" },
|
|
530
|
+
{ name: "workflow", path: "C:\\Users\\Deamon\\Desktop\\Backup\\Serveur MCP\\Workflow" },
|
|
531
|
+
];
|
|
532
|
+
|
|
533
|
+
async function maintenanceAllProjects() {
|
|
534
|
+
const results = [];
|
|
535
|
+
|
|
536
|
+
for (const project of PROJECTS) {
|
|
537
|
+
console.log(`\n🔧 Maintenance de ${project.name}...`);
|
|
538
|
+
|
|
539
|
+
const res = await overmind.request(
|
|
540
|
+
"mainteneur",
|
|
541
|
+
`[MAINTENANCE PROJECT: ${project.name}]
|
|
542
|
+
1. cd ${project.path}
|
|
543
|
+
2. npm run lint
|
|
544
|
+
3. npm run build
|
|
545
|
+
4. npm run test
|
|
546
|
+
5. Corriger tous les défauts`,
|
|
547
|
+
"claude",
|
|
548
|
+
false,
|
|
549
|
+
project.path
|
|
550
|
+
);
|
|
551
|
+
|
|
552
|
+
results.push({
|
|
553
|
+
project: project.name,
|
|
554
|
+
success: res.success,
|
|
555
|
+
duration: res.duration,
|
|
556
|
+
output: res.output?.substring(0, 200) + "..."
|
|
557
|
+
});
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Rapport final
|
|
561
|
+
console.log("\n📊 RAPPORT GLOBAL:");
|
|
562
|
+
results.forEach(r => {
|
|
563
|
+
const icon = r.success ? "✅" : "❌";
|
|
564
|
+
console.log(`${icon} ${r.project}: ${r.duration}s`);
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
// Mémoriser
|
|
568
|
+
const successCount = results.filter(r => r.success).length;
|
|
569
|
+
await overmind.memory_store(
|
|
570
|
+
`Maintenance multi-projets: ${successCount}/${results.length} réussis`,
|
|
571
|
+
"agent"
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
maintenanceAllProjects().catch(console.error);
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
---
|
|
579
|
+
|
|
580
|
+
## 🎯 Conclusion
|
|
581
|
+
|
|
582
|
+
**Workflow Client OverMind = 3 Étapes**:
|
|
583
|
+
|
|
584
|
+
1. **overmind-bridge.ts** - Wrapper service autour de `runAgent()`
|
|
585
|
+
2. **jobs/JOB_XXX.ts** - Configurations et logique métier
|
|
586
|
+
3. **runStandalone()** - Exécution avec gestion d'erreurs
|
|
587
|
+
|
|
588
|
+
**Points Clés**:
|
|
589
|
+
- ✅ `import "./env.js"` OBLIGATOIRE EN PREMIER
|
|
590
|
+
- ✅ Gestion d'erreurs robuste
|
|
591
|
+
- ✅ Mémoire vectorielle pour persistence
|
|
592
|
+
- ✅ Multi-agents parallèle possibles
|
|
593
|
+
- ✅ Retry et fallback automatiques
|
|
594
|
+
|
|
595
|
+
**Architecture = Flexibilité Maximale**: Vous pouvez créer n'importe quel workflow en combinant ces patterns.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# 📁 Structure du Projet OverMind MCP
|
|
2
|
+
|
|
3
|
+
Organisation des dossiers et fichiers pour une meilleure navigation et maintenance.
|
|
4
|
+
|
|
5
|
+
## 📂 Arborescence
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
Workflow/
|
|
9
|
+
├── 📦 bin/ # Scripts d'installation
|
|
10
|
+
│ ├── install-overmind-unix.sh
|
|
11
|
+
│ ├── install-overmind-windows.bat
|
|
12
|
+
│ └── README.md
|
|
13
|
+
├── 📋 changelog/ # Historique des versions
|
|
14
|
+
│ ├── CHANGELOG.md
|
|
15
|
+
│ ├── CHANGELOG.2.0.7.md
|
|
16
|
+
│ ├── CHANGELOG_ENV_FIX.md
|
|
17
|
+
│ └── README.md
|
|
18
|
+
├── 🐳 docker/ # Configuration Docker
|
|
19
|
+
│ ├── docker-compose.yml
|
|
20
|
+
│ └── README.md
|
|
21
|
+
├── 🗄️ db/ # Scripts base de données
|
|
22
|
+
│ ├── init-db.sql
|
|
23
|
+
│ ├── init-overmind-db.sql
|
|
24
|
+
│ └── README.md
|
|
25
|
+
├── ⚙️ config/ # Configurations MCP
|
|
26
|
+
│ ├── mcp-config.json
|
|
27
|
+
│ └── README.md
|
|
28
|
+
├── 📚 docs/ # Documentation complète
|
|
29
|
+
│ ├── api/ # Documentation API
|
|
30
|
+
│ ├── guides/ # Guides d'utilisation
|
|
31
|
+
│ └── tools.md # Référence des outils
|
|
32
|
+
├── 🔧 scripts/ # Scripts de maintenance
|
|
33
|
+
│ ├── setup.mjs
|
|
34
|
+
│ ├── postgres-manager.mjs
|
|
35
|
+
│ └── uninstall.mjs
|
|
36
|
+
├── 💻 src/ # Code source
|
|
37
|
+
│ ├── bin/ # Points d'entrée CLI
|
|
38
|
+
│ ├── lib/ # Bibliothèques partagées
|
|
39
|
+
│ ├── services/ # Services métier
|
|
40
|
+
│ ├── tools/ # Outils MCP
|
|
41
|
+
│ └── server.ts # Serveur MCP principal
|
|
42
|
+
├── 🧪 tests/ # Tests unitaires
|
|
43
|
+
└── 📦 assets/ # Ressources (images, bannières)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 🎯 Organisation par type de fichier
|
|
47
|
+
|
|
48
|
+
### 📦 bin/ - Scripts d'installation
|
|
49
|
+
Contient les scripts pour installer OverMind MCP sur différents systèmes.
|
|
50
|
+
|
|
51
|
+
### 📋 changelog/ - Historique des versions
|
|
52
|
+
Tous les changelogs organisés par version avec format standardisé.
|
|
53
|
+
|
|
54
|
+
### 🐳 docker/ - Configuration Docker
|
|
55
|
+
Stack Docker Compose avec tous les services nécessaires.
|
|
56
|
+
|
|
57
|
+
### 🗄️ db/ - Scripts base de données
|
|
58
|
+
Scripts SQL pour l'initialisation et la maintenance PostgreSQL.
|
|
59
|
+
|
|
60
|
+
### ⚙️ config/ - Configurations MCP
|
|
61
|
+
Exemples de configurations MCP pour différents scénarios d'utilisation.
|
|
62
|
+
|
|
63
|
+
## 🔍 Navigation rapide
|
|
64
|
+
|
|
65
|
+
### Pour les développeurs
|
|
66
|
+
```bash
|
|
67
|
+
# Installer
|
|
68
|
+
bin/install-overmind-unix.sh
|
|
69
|
+
|
|
70
|
+
# Démarrer Docker
|
|
71
|
+
cd docker && docker-compose up -d
|
|
72
|
+
|
|
73
|
+
# Initialiser la BD
|
|
74
|
+
cat db/init-overmind-db.sql | docker exec -i overmind-postgres-pgvector psql -U postgres
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### Pour les utilisateurs
|
|
78
|
+
```bash
|
|
79
|
+
# Voir les changelogs
|
|
80
|
+
ls changelog/
|
|
81
|
+
|
|
82
|
+
# Lire la doc d'un dossier
|
|
83
|
+
cat config/README.md
|
|
84
|
+
cat docker/README.md
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## 📝 Conventions
|
|
88
|
+
|
|
89
|
+
### Nouveaux fichiers
|
|
90
|
+
- **Scripts** → `bin/`
|
|
91
|
+
- **Changelogs** → `changelog/`
|
|
92
|
+
- **Docker** → `docker/`
|
|
93
|
+
- **SQL** → `db/`
|
|
94
|
+
- **Config** → `config/`
|
|
95
|
+
- **Documentation** → `docs/`
|
|
96
|
+
|
|
97
|
+
### Avantages de cette organisation
|
|
98
|
+
1. **Navigation claire** - Chaque type de fichier a son emplacement
|
|
99
|
+
2. **Maintenance facilitée** - Scripts et config regroupés
|
|
100
|
+
3. **Documentation contextuelle** - README dans chaque dossier
|
|
101
|
+
4. **Professional** - Structure organisée selon les standards Node.js
|