overmind-mcp 2.0.0 → 2.0.2
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/README.md +145 -139
- package/dist/server.d.ts +40 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +104 -61
- package/dist/server.js.map +1 -1
- package/dist/services/ClaudeRunner.d.ts.map +1 -1
- package/dist/services/ClaudeRunner.js +68 -47
- package/dist/services/ClaudeRunner.js.map +1 -1
- package/docs/INDEX.md +144 -0
- package/docs/README.md +128 -0
- package/docs/api/prompt/Claude_code.md +74 -0
- package/docs/api/prompt/Kilo.md +74 -0
- package/docs/api/prompt/Kilo_Hermes.md +170 -0
- package/docs/api/prompt/Minimax4.md +96 -0
- package/docs/changelog/CHANGELOG.add.md +106 -0
- package/docs/changelog/CHANGELOG.md +339 -0
- package/docs/guides/DEPLOYMENT.md +418 -0
- package/docs/guides/SWARM_USAGE.md +444 -0
- package/docs/index.html +569 -0
- package/docs/library.html +239 -0
- package/docs/prompt.html +1212 -0
- package/docs/script.js +428 -0
- package/docs/styles.css +2816 -0
- package/docs/tools.md +794 -0
- package/package.json +26 -11
- package/scripts/docker-manager.mjs +200 -0
- package/scripts/install-dependencies.mjs +462 -0
- package/scripts/postinstall.mjs +192 -0
- package/scripts/setup-overmind-db.mjs +199 -0
- package/scripts/setup-windows.js +264 -0
- package/scripts/setup.mjs +394 -0
- package/scripts/uninstall.mjs +224 -0
- package/dist/tools/metadata.d.ts +0 -20
- package/dist/tools/metadata.d.ts.map +0 -1
- package/dist/tools/metadata.js +0 -246
- package/dist/tools/metadata.js.map +0 -1
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
* SETUP SCRIPT - Installation Automatique OverMind
|
|
5
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
* Script principal qui installe TOUTES les dépendances nécessaires à OverMind:
|
|
7
|
+
* - Docker (si pas présent)
|
|
8
|
+
* - PostgreSQL + pgvector (si pas présent)
|
|
9
|
+
* - RabbitMQ
|
|
10
|
+
* - Temporal
|
|
11
|
+
* - Configuration automatique
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* overmind-setup [--full]
|
|
15
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { execSync, spawn } from 'child_process';
|
|
19
|
+
import { copyFileSync, existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
20
|
+
import { join } from 'path';
|
|
21
|
+
import { fileURLToPath } from 'url';
|
|
22
|
+
import { dirname } from 'path';
|
|
23
|
+
import { createInterface } from 'readline';
|
|
24
|
+
|
|
25
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
26
|
+
const __dirname = dirname(__filename);
|
|
27
|
+
const projectRoot = join(__dirname, '..');
|
|
28
|
+
const INSTALL_DIR = join(process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH, '.overmind');
|
|
29
|
+
|
|
30
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
31
|
+
// UTILS
|
|
32
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
33
|
+
|
|
34
|
+
function logSection(title) {
|
|
35
|
+
console.log('\n╔══════════════════════════════════════════════════════════════════╗');
|
|
36
|
+
console.log(`║ ${title.padEnd(64)} ║`);
|
|
37
|
+
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function runCommand(cmd, description) {
|
|
41
|
+
console.log(`\n🔧 ${description}`);
|
|
42
|
+
console.log(` $ ${cmd}`);
|
|
43
|
+
try {
|
|
44
|
+
execSync(cmd, { stdio: 'inherit' });
|
|
45
|
+
console.log(`✅ ${description} terminé`);
|
|
46
|
+
return true;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
console.error(`❌ Erreur: ${error.message}`);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function runCommandAsync(cmd, description) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
console.log(`\n🔧 ${description}`);
|
|
56
|
+
console.log(` $ ${cmd}`);
|
|
57
|
+
const child = spawn(cmd, { shell: true, stdio: 'inherit' });
|
|
58
|
+
|
|
59
|
+
child.on('close', (code) => {
|
|
60
|
+
if (code === 0) {
|
|
61
|
+
console.log(`✅ ${description} terminé`);
|
|
62
|
+
resolve(true);
|
|
63
|
+
} else {
|
|
64
|
+
console.error(`❌ Erreur (code ${code})`);
|
|
65
|
+
reject(new Error(`Command failed with code ${code}`));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
child.on('error', (err) => {
|
|
70
|
+
console.error('❌ Erreur:', err.message);
|
|
71
|
+
reject(err);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function promptYesNo(question) {
|
|
77
|
+
const rl = createInterface({
|
|
78
|
+
input: process.stdin,
|
|
79
|
+
output: process.stdout,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const answer = await new Promise((resolve) => {
|
|
83
|
+
rl.question(`${question} (y/N): `, (answer) => {
|
|
84
|
+
rl.close();
|
|
85
|
+
resolve(answer.toLowerCase().startsWith('y'));
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return answer;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
93
|
+
// CHECKS
|
|
94
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
95
|
+
|
|
96
|
+
function checkDocker() {
|
|
97
|
+
try {
|
|
98
|
+
execSync('docker --version', { stdio: 'pipe' });
|
|
99
|
+
return true;
|
|
100
|
+
} catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function checkPostgreSQL() {
|
|
106
|
+
try {
|
|
107
|
+
execSync('docker ps --filter "name=postgres" --format "{{.Names}}"', { stdio: 'pipe' });
|
|
108
|
+
return true;
|
|
109
|
+
} catch {
|
|
110
|
+
try {
|
|
111
|
+
execSync('psql --version', { stdio: 'pipe' });
|
|
112
|
+
return true;
|
|
113
|
+
} catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
120
|
+
// INSTALLATION STEPS
|
|
121
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
122
|
+
|
|
123
|
+
async function installDocker() {
|
|
124
|
+
logSection('INSTALLATION DOCKER');
|
|
125
|
+
|
|
126
|
+
if (checkDocker()) {
|
|
127
|
+
console.log('✅ Docker est déjà installé');
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
console.log('ℹ️ Docker non trouvé.');
|
|
132
|
+
console.log('');
|
|
133
|
+
console.log('📥 Docker Desktop est requis pour OverMind-MCP:');
|
|
134
|
+
console.log(' - Windows: https://www.docker.com/products/docker-desktop/');
|
|
135
|
+
console.log(' - Mac: https://www.docker.com/products/docker-desktop/');
|
|
136
|
+
console.log('');
|
|
137
|
+
console.log('📋 Instructions:');
|
|
138
|
+
console.log(' 1. Téléchargez et installez Docker Desktop');
|
|
139
|
+
console.log(' 2. Démarrez Docker Desktop');
|
|
140
|
+
console.log(' 3. Relancez: overmind-setup --full');
|
|
141
|
+
console.log('');
|
|
142
|
+
|
|
143
|
+
const answer = await promptYesNo('Voulez-vous ouvrir le site de téléchargement maintenant ?');
|
|
144
|
+
if (answer) {
|
|
145
|
+
const url = process.platform === 'win32'
|
|
146
|
+
? 'https://www.docker.com/products/docker-desktop/'
|
|
147
|
+
: 'https://www.docker.com/products/docker-desktop/';
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
execSync(`start ${url}`, { stdio: 'inherit' });
|
|
151
|
+
console.log('✅ Navigateur ouvert. Attendez l\'installation de Docker.');
|
|
152
|
+
} catch {
|
|
153
|
+
console.log('⚠️ Impossible d\'ouvrir le navigateur automatiquement.');
|
|
154
|
+
console.log(` Ouvrez manuellement: ${url}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function installPostgreSQL() {
|
|
162
|
+
logSection('INSTALLATION POSTGRESQL + PGVECTOR');
|
|
163
|
+
|
|
164
|
+
if (checkPostgreSQL()) {
|
|
165
|
+
console.log('✅ PostgreSQL est déjà installé');
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
console.log('🐳 Installation PostgreSQL + pgvector en Docker...');
|
|
170
|
+
console.log('');
|
|
171
|
+
|
|
172
|
+
try {
|
|
173
|
+
// Pull and start PostgreSQL container
|
|
174
|
+
console.log('📥 Téléchargement image pgvector/pgvector:pg16...');
|
|
175
|
+
execSync('docker pull pgvector/pgvector:pg16', { stdio: 'inherit' });
|
|
176
|
+
|
|
177
|
+
console.log('🚀 Démarrage container PostgreSQL...');
|
|
178
|
+
const runCommand = `docker run -d --name postgres-pgvector \\
|
|
179
|
+
-p 5432:5432 \\
|
|
180
|
+
-e POSTGRES_PASSWORD=overmind_temp_password_change_me \\
|
|
181
|
+
-e POSTGRES_USER=postgres \\
|
|
182
|
+
-v postgres_data:/var/lib/postgresql/data \\
|
|
183
|
+
--restart unless-stopped \\
|
|
184
|
+
pgvector/pgvector:pg16`;
|
|
185
|
+
|
|
186
|
+
await runCommandAsync(runCommand, 'Démarrage PostgreSQL');
|
|
187
|
+
|
|
188
|
+
// Wait for PostgreSQL to be ready
|
|
189
|
+
console.log('⏳ Attente démarrage PostgreSQL (30s)...');
|
|
190
|
+
await new Promise((resolve) => setTimeout(resolve, 30000));
|
|
191
|
+
|
|
192
|
+
// Verify pgvector
|
|
193
|
+
console.log('🔍 Vérification pgvector...');
|
|
194
|
+
await runCommandAsync(
|
|
195
|
+
'docker exec postgres-pgvector psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"',
|
|
196
|
+
'Activation pgvector'
|
|
197
|
+
);
|
|
198
|
+
|
|
199
|
+
console.log('✅ PostgreSQL + pgvector installés avec succès !');
|
|
200
|
+
return true;
|
|
201
|
+
|
|
202
|
+
} catch (error) {
|
|
203
|
+
console.error('❌ Erreur installation PostgreSQL:', error.message);
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
function setupConfigurationFiles() {
|
|
209
|
+
logSection('CONFIGURATION OVERMIND');
|
|
210
|
+
|
|
211
|
+
// Create install directory
|
|
212
|
+
if (!existsSync(INSTALL_DIR)) {
|
|
213
|
+
mkdirSync(INSTALL_DIR, { recursive: true });
|
|
214
|
+
console.log('✅ Dossier créé:', INSTALL_DIR);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// Copy docker-compose file
|
|
218
|
+
const dockerComposePath = join(projectRoot, 'docker-compose.overmind.yml');
|
|
219
|
+
const destComposePath = join(INSTALL_DIR, 'docker-compose.overmind.yml');
|
|
220
|
+
|
|
221
|
+
if (existsSync(dockerComposePath)) {
|
|
222
|
+
copyFileSync(dockerComposePath, destComposePath);
|
|
223
|
+
console.log('✅ docker-compose.overmind.yml copié');
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Copy .env.example if .env doesn't exist
|
|
227
|
+
const envExamplePath = join(projectRoot, '.env.example');
|
|
228
|
+
const envPath = join(INSTALL_DIR, '.env');
|
|
229
|
+
|
|
230
|
+
if (!existsSync(envPath) && existsSync(envExamplePath)) {
|
|
231
|
+
copyFileSync(envExamplePath, envPath);
|
|
232
|
+
console.log('✅ .env créé (à éditer avec vos credentials)');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// Copy docker-manager script
|
|
236
|
+
const dockerManagerPath = join(__dirname, 'docker-manager.mjs');
|
|
237
|
+
const destManagerPath = join(INSTALL_DIR, 'docker-manager.mjs');
|
|
238
|
+
|
|
239
|
+
copyFileSync(dockerManagerPath, destManagerPath);
|
|
240
|
+
console.log('✅ Scripts Docker installés');
|
|
241
|
+
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
async function startDockerServices() {
|
|
246
|
+
logSection('DÉMARRAGE SERVICES DOCKER');
|
|
247
|
+
|
|
248
|
+
const composeFile = join(INSTALL_DIR, 'docker-compose.overmind.yml');
|
|
249
|
+
|
|
250
|
+
console.log('🚀 Démarrage RabbitMQ + Temporal...');
|
|
251
|
+
try {
|
|
252
|
+
await runCommandAsync(
|
|
253
|
+
`docker-compose -f "${composeFile}" up -d`,
|
|
254
|
+
'Démarrage services'
|
|
255
|
+
);
|
|
256
|
+
console.log('✅ Services Docker démarrés');
|
|
257
|
+
console.log('');
|
|
258
|
+
console.log('🌐 Interfaces disponibles:');
|
|
259
|
+
console.log(' 📊 RabbitMQ: http://localhost:15672');
|
|
260
|
+
console.log(' 📈 Temporal: http://localhost:8088');
|
|
261
|
+
return true;
|
|
262
|
+
} catch (error) {
|
|
263
|
+
console.error('❌ Erreur démarrage Docker:', error.message);
|
|
264
|
+
return false;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
async function createOvermindDatabase() {
|
|
269
|
+
logSection('CRÉATION BASE OVERMIND');
|
|
270
|
+
|
|
271
|
+
// Import and run setup-overmind-db.mjs
|
|
272
|
+
const setupDbPath = join(__dirname, 'setup-overmind-db.mjs');
|
|
273
|
+
|
|
274
|
+
try {
|
|
275
|
+
copyFileSync(setupDbPath, destDbPath);
|
|
276
|
+
|
|
277
|
+
// Run it
|
|
278
|
+
await runCommandAsync(
|
|
279
|
+
`node "${destDbPath}"`,
|
|
280
|
+
'Initialisation DB OverMind'
|
|
281
|
+
);
|
|
282
|
+
return true;
|
|
283
|
+
} catch (error) {
|
|
284
|
+
console.error('❌ Erreur création DB:', error.message);
|
|
285
|
+
return false;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
290
|
+
// MAIN
|
|
291
|
+
// ═══════════════════════════════════════════════════════════════════════════════
|
|
292
|
+
|
|
293
|
+
async function main() {
|
|
294
|
+
const args = process.argv.slice(2);
|
|
295
|
+
const isFull = args.includes('--full');
|
|
296
|
+
|
|
297
|
+
console.log('╔══════════════════════════════════════════════════════════════════╗');
|
|
298
|
+
console.log('║ ║');
|
|
299
|
+
console.log('║ 🧠 OVERMIND-MCP: SETUP AUTOMATISÉ COMPLET ║');
|
|
300
|
+
console.log('║ ║');
|
|
301
|
+
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
302
|
+
console.log('');
|
|
303
|
+
|
|
304
|
+
if (!isFull) {
|
|
305
|
+
console.log('ℹ️ USAGE: overmind-setup [--full]');
|
|
306
|
+
console.log('');
|
|
307
|
+
console.log(' --full: Installe TOUTES les dépendances (Docker, PostgreSQL, etc.)');
|
|
308
|
+
console.log(' et configure OverMind automatiquement');
|
|
309
|
+
console.log('');
|
|
310
|
+
console.log(' Sans --full: Prépare juste les fichiers de configuration');
|
|
311
|
+
console.log('');
|
|
312
|
+
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
// Step 1: Check Docker
|
|
317
|
+
const hasDocker = checkDocker();
|
|
318
|
+
if (!hasDocker) {
|
|
319
|
+
const installed = await installDocker();
|
|
320
|
+
if (!installed) {
|
|
321
|
+
console.log('\n❌ SETUP ANNULÉ - Docker est requis pour le mode complet');
|
|
322
|
+
console.log(' Installez Docker Desktop et relancez: overmind-setup --full');
|
|
323
|
+
process.exit(1);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
// Step 2: Check PostgreSQL
|
|
328
|
+
const hasPostgreSQL = checkPostgreSQL();
|
|
329
|
+
if (!hasPostgreSQL) {
|
|
330
|
+
const installed = await installPostgreSQL();
|
|
331
|
+
if (!installed) {
|
|
332
|
+
console.log('\n❌ SETUP ANNULÉ - PostgreSQL est requis pour le mode complet');
|
|
333
|
+
process.exit(1);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
// Step 3: Setup configuration files
|
|
338
|
+
setupConfigurationFiles();
|
|
339
|
+
|
|
340
|
+
// Step 4: Start Docker services
|
|
341
|
+
const servicesStarted = await startDockerServices();
|
|
342
|
+
if (!servicesStarted) {
|
|
343
|
+
console.log('\n❌ SETUP ANNULÉ - Impossible de démarrer les services');
|
|
344
|
+
process.exit(1);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// Step 5: Create OverMind database
|
|
348
|
+
const dbCreated = await createOvermindDatabase();
|
|
349
|
+
if (!dbCreated) {
|
|
350
|
+
console.log('\n❌ SETUP ANNULÉ - Impossible de créer la base OverMind');
|
|
351
|
+
process.exit(1);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// Success!
|
|
355
|
+
logSection('✅ SETUP COMPLET TERMINÉ AVEC SUCCÈS');
|
|
356
|
+
|
|
357
|
+
console.log(`
|
|
358
|
+
🎉 OVERMIND-MCP EST PRÊT !
|
|
359
|
+
|
|
360
|
+
📋 SERVICES ACTIFS:
|
|
361
|
+
✅ PostgreSQL + pgvector (Vector DB 4096D)
|
|
362
|
+
✅ RabbitMQ (Message Broker)
|
|
363
|
+
✅ Temporal (Workflow Orchestrator)
|
|
364
|
+
✅ OverMind Agents (prêt à l'emploi)
|
|
365
|
+
|
|
366
|
+
🌐 INTERFACES:
|
|
367
|
+
📊 RabbitMQ Management: http://localhost:15672
|
|
368
|
+
📈 Temporal Web: http://localhost:8088
|
|
369
|
+
🗄️ PostgreSQL: localhost:5432
|
|
370
|
+
|
|
371
|
+
🚀 COMMANDES DISPONIBLES:
|
|
372
|
+
overmind create-agent --name expert --runner claude
|
|
373
|
+
overmind run-agent --runner claude --prompt "Analyse..."
|
|
374
|
+
overmind-infra up/down/status/logs
|
|
375
|
+
|
|
376
|
+
📚 DOCUMENTATION:
|
|
377
|
+
- https://deamondev888.github.io/overmind-mcp/
|
|
378
|
+
- https://github.com/DeamonDev888/overmind-mcp
|
|
379
|
+
- Discord: https://discord.gg/4AR82phtBz
|
|
380
|
+
|
|
381
|
+
💡 PREMIER TEST:
|
|
382
|
+
overmind create-agent --name test --runner claude --prompt "Test d'OverMind"
|
|
383
|
+
|
|
384
|
+
═══════════════════════════════════════════════════════════════════════
|
|
385
|
+
`);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
// Run main
|
|
389
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
390
|
+
main().catch((error) => {
|
|
391
|
+
console.error('\n❌ ERREUR FATALE:', error.message);
|
|
392
|
+
process.exit(1);
|
|
393
|
+
});
|
|
394
|
+
}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
+
* UNINSTALL SCRIPT — OverMind-MCP
|
|
5
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
+
* Désinstallation propre : supprime containers, volumes, images, config.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* overmind uninstall # interactif (recommandé)
|
|
10
|
+
* overmind uninstall --force # skip prompts,Tout supprime
|
|
11
|
+
* ═══════════════════════════════════════════════════════════════════════════════
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { execSync } from 'child_process';
|
|
15
|
+
import { existsSync, rmSync } from 'fs';
|
|
16
|
+
import { join, dirname } from 'path';
|
|
17
|
+
import { fileURLToPath } from 'url';
|
|
18
|
+
import { createInterface } from 'readline';
|
|
19
|
+
|
|
20
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
21
|
+
const __dirname = dirname(__filename);
|
|
22
|
+
|
|
23
|
+
const INSTALL_DIR = join(process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH, '.overmind');
|
|
24
|
+
const FORCE = process.argv.includes('--force');
|
|
25
|
+
|
|
26
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
27
|
+
// UTILS
|
|
28
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
function p(prompt) {
|
|
31
|
+
return new Promise((resolve) => {
|
|
32
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
33
|
+
rl.question(prompt, (answer) => { rl.close(); resolve(answer); });
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async function yesNo(question, def = false) {
|
|
38
|
+
const answer = await p(`${question} ${def ? '[Y/n]' : '[y/N]'}: `);
|
|
39
|
+
return answer.toLowerCase().startsWith('y');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function log(msg) { console.log(msg); }
|
|
43
|
+
function section(title) {
|
|
44
|
+
console.log(`\n╔${'═'.repeat(68)}╗`);
|
|
45
|
+
console.log(`║ ${title.padEnd(66)} ║`);
|
|
46
|
+
console.log(`╚${'═'.repeat(68)}╝`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function cmd(command, label) {
|
|
50
|
+
try {
|
|
51
|
+
execSync(command, { stdio: 'pipe' });
|
|
52
|
+
log(`✅ ${label}`);
|
|
53
|
+
return true;
|
|
54
|
+
} catch (e) {
|
|
55
|
+
const msg = e.message || '';
|
|
56
|
+
if (msg.includes('No such container') || msg.includes('no such container')) {
|
|
57
|
+
log(`⚠️ ${label} (déjà absent)`);
|
|
58
|
+
} else if (msg.includes('No such volume')) {
|
|
59
|
+
log(`⚠️ ${label} (volume déjà absent)`);
|
|
60
|
+
} else {
|
|
61
|
+
log(`❌ ${label} — ${msg.split('\n')[0]}`);
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
68
|
+
// DETECTION & LISTING
|
|
69
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
70
|
+
|
|
71
|
+
function listContainers() {
|
|
72
|
+
const names = ['postgres-pgvector', 'overmind-rabbitmq', 'overmind-temporal', 'overmind-temporal-web'];
|
|
73
|
+
return names.filter((n) => {
|
|
74
|
+
try {
|
|
75
|
+
execSync(`docker inspect ${n}`, { stdio: 'pipe' });
|
|
76
|
+
return true;
|
|
77
|
+
} catch { return false; }
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function listVolumes() {
|
|
82
|
+
const names = ['postgres_data', 'rabbitmq_data'];
|
|
83
|
+
return names.filter((n) => {
|
|
84
|
+
try {
|
|
85
|
+
execSync(`docker volume inspect ${n}`, { stdio: 'pipe' });
|
|
86
|
+
return true;
|
|
87
|
+
} catch { return false; }
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function listImages() {
|
|
92
|
+
const imgs = ['pgvector/pgvector:pg16', 'rabbitmq:3.13-management', 'temporalio/auto-setup:1.24.0', 'temporalio/web:1.24.0'];
|
|
93
|
+
return imgs.filter((img) => {
|
|
94
|
+
try {
|
|
95
|
+
execSync(`docker image inspect ${img}`, { stdio: 'pipe' });
|
|
96
|
+
return true;
|
|
97
|
+
} catch { return false; }
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
102
|
+
// MAIN
|
|
103
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
104
|
+
|
|
105
|
+
async function main() {
|
|
106
|
+
console.log(`\n╔${'═'.repeat(68)}╗`);
|
|
107
|
+
console.log(`║ ║`);
|
|
108
|
+
console.log(`║ 🧹 OVERMIND-MCP — DÉSINSTALLATION PROPRE ║`);
|
|
109
|
+
console.log(`║ ║`);
|
|
110
|
+
console.log(`╚${'═'.repeat(68)}╝`);
|
|
111
|
+
|
|
112
|
+
// ── 1. Containers actifs ──────────────────────────────────────────────
|
|
113
|
+
const containers = listContainers();
|
|
114
|
+
const volumes = listVolumes();
|
|
115
|
+
const images = listImages();
|
|
116
|
+
const hasInstallDir = existsSync(INSTALL_DIR);
|
|
117
|
+
|
|
118
|
+
if (!containers.length && !volumes.length && !images.length && !hasInstallDir) {
|
|
119
|
+
log('\n✅ OverMind-MCP ne laisse aucune trace détectable.');
|
|
120
|
+
log(' Supprimez le package manuellement :\n npm uninstall -g overmind-mcp\n');
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
log('\n📋 Éléments OverMind détectés sur cette machine :\n');
|
|
125
|
+
|
|
126
|
+
if (containers.length) {
|
|
127
|
+
log(' Containers :');
|
|
128
|
+
containers.forEach((c) => log(` - ${c}`));
|
|
129
|
+
} else {
|
|
130
|
+
log(' Containers : aucun');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
if (volumes.length) {
|
|
134
|
+
log(' Volumes Docker :');
|
|
135
|
+
volumes.forEach((v) => log(` - ${v}`));
|
|
136
|
+
} else {
|
|
137
|
+
log(' Volumes Docker : aucun');
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (images.length) {
|
|
141
|
+
log(' Images Docker (↺ réutilisables) :');
|
|
142
|
+
images.forEach((i) => log(` - ${i}`));
|
|
143
|
+
} else {
|
|
144
|
+
log(' Images Docker : aucune');
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (hasInstallDir) {
|
|
148
|
+
log(` Config ~/.overmind/ : présent`);
|
|
149
|
+
} else {
|
|
150
|
+
log(' Config ~/.overmind/ : absent');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
if (FORCE) {
|
|
154
|
+
log('\n⚠️ Mode --force : suppression sans confirmation.\n');
|
|
155
|
+
} else {
|
|
156
|
+
log('\n⏳ Les données des volumes Docker seront DÉTRUITES.\n');
|
|
157
|
+
const confirm = await yesNo('Procéder à la désinstallation ?');
|
|
158
|
+
if (!confirm) { log('\n🛑 Annulé.'); return; }
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ── 2. Stop & remove containers ───────────────────────────────────────
|
|
162
|
+
section('SUPPRESSION CONTENEURS');
|
|
163
|
+
for (const c of containers) {
|
|
164
|
+
cmd(`docker stop ${c}`, `Stop ${c}`);
|
|
165
|
+
cmd(`docker rm -f ${c}`, `Remove ${c}`);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// ── 3. Remove volumes ─────────────────────────────────────────────────
|
|
169
|
+
if (FORCE || await yesNo('\n🗑️ Supprimer les volumes Docker (DESTRUCTIF) ?')) {
|
|
170
|
+
section('SUPPRESSION VOLUMES');
|
|
171
|
+
for (const v of volumes) {
|
|
172
|
+
cmd(`docker volume rm ${v}`, `Remove volume ${v}`);
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
log('\n⚠️ Volumes conservés (données PostgreSQL intactes).');
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// ── 4. Remove images ────────────────────────────────────────────────────
|
|
179
|
+
if (FORCE || await yesNo('\n🗑️ Supprimer les images OverMind Docker (~3-4 GB) ?')) {
|
|
180
|
+
section('SUPPRESSION IMAGES');
|
|
181
|
+
for (const img of images) {
|
|
182
|
+
cmd(`docker rmi ${img}`, `Remove image ${img}`);
|
|
183
|
+
}
|
|
184
|
+
} else {
|
|
185
|
+
log('\n⚠️ Images conservées.');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// ── 5. Remove ~/.overmind ──────────────────────────────────────────────
|
|
189
|
+
if (FORCE || await yesNo('\n📁 Supprimer ~/.overmind/ (config + .env avec credentials) ?')) {
|
|
190
|
+
section('SUPPRESSION CONFIG');
|
|
191
|
+
if (existsSync(INSTALL_DIR)) {
|
|
192
|
+
try {
|
|
193
|
+
rmSync(INSTALL_DIR, { recursive: true, force: true });
|
|
194
|
+
log(`✅ ~/.overmind/ supprimé`);
|
|
195
|
+
} catch (e) {
|
|
196
|
+
log(`❌ ~/.overmind/ : ${e.message.split('\n')[0]}`);
|
|
197
|
+
}
|
|
198
|
+
} else {
|
|
199
|
+
log('⚠️ ~/.overmind/ déjà absent');
|
|
200
|
+
}
|
|
201
|
+
} else {
|
|
202
|
+
log('\n⚠️ Config ~/.overmind/ conservée.');
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// ── Done ───────────────────────────────────────────────────────────────
|
|
206
|
+
section('DÉSINSTALLATION TERMINÉE');
|
|
207
|
+
console.log(`
|
|
208
|
+
✅ OverMind-MCP a été retiré proprement.
|
|
209
|
+
|
|
210
|
+
📋 Pour désinstaller complètement le package NPM :
|
|
211
|
+
npm uninstall -g overmind-mcp
|
|
212
|
+
|
|
213
|
+
💡 Si vous réinstallez plus tard :
|
|
214
|
+
npm install -g overmind-mcp
|
|
215
|
+
overmind-setup --full # (si vous voulez le Mode Avancé)
|
|
216
|
+
|
|
217
|
+
══════════════════════════════════════════════════════════════════════
|
|
218
|
+
`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
main().catch((e) => {
|
|
222
|
+
console.error('\n❌ ERREUR FATALE:', e.message);
|
|
223
|
+
process.exit(1);
|
|
224
|
+
});
|
package/dist/tools/metadata.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const metadataSchema: z.ZodObject<{
|
|
3
|
-
path: z.ZodDefault<z.ZodString>;
|
|
4
|
-
depth: z.ZodDefault<z.ZodNumber>;
|
|
5
|
-
includeStats: z.ZodDefault<z.ZodBoolean>;
|
|
6
|
-
}, z.core.$strip>;
|
|
7
|
-
export declare function metadataTool(args: z.infer<typeof metadataSchema>): Promise<{
|
|
8
|
-
isError: boolean;
|
|
9
|
-
content: {
|
|
10
|
-
type: "text";
|
|
11
|
-
text: string;
|
|
12
|
-
}[];
|
|
13
|
-
} | {
|
|
14
|
-
content: {
|
|
15
|
-
type: "text";
|
|
16
|
-
text: string;
|
|
17
|
-
}[];
|
|
18
|
-
isError?: undefined;
|
|
19
|
-
}>;
|
|
20
|
-
//# sourceMappingURL=metadata.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../src/tools/metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;iBAIzB,CAAC;AAuNH,wBAAsB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC;;;;;;;;;;;;GAoDtE"}
|