overmind-mcp 2.4.0 → 2.4.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 +80 -107
- package/assets/overmind_mcp_pro_banner_v3.png +0 -0
- package/dist/bin/cli.js +7 -438
- package/dist/bin/cli.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/config.d.ts +1 -31
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +27 -19
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/sessions.d.ts +2 -3
- package/dist/lib/sessions.d.ts.map +1 -1
- package/dist/lib/sessions.js +25 -94
- package/dist/lib/sessions.js.map +1 -1
- package/dist/memory/MemoryFactory.d.ts +1 -15
- package/dist/memory/MemoryFactory.d.ts.map +1 -1
- package/dist/memory/MemoryFactory.js +3 -53
- package/dist/memory/MemoryFactory.js.map +1 -1
- package/dist/memory/PostgresMemoryProvider.d.ts +0 -7
- package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
- package/dist/memory/PostgresMemoryProvider.js +105 -180
- package/dist/memory/PostgresMemoryProvider.js.map +1 -1
- package/dist/server.d.ts +0 -41
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +26 -152
- package/dist/server.js.map +1 -1
- package/dist/services/AgentManager.d.ts.map +1 -1
- package/dist/services/AgentManager.js +11 -67
- package/dist/services/AgentManager.js.map +1 -1
- package/dist/services/ClaudeRunner.d.ts +0 -8
- package/dist/services/ClaudeRunner.d.ts.map +1 -1
- package/dist/services/ClaudeRunner.js +213 -514
- package/dist/services/ClaudeRunner.js.map +1 -1
- package/dist/services/ClineRunner.d.ts +0 -7
- package/dist/services/ClineRunner.d.ts.map +1 -1
- package/dist/services/ClineRunner.js +11 -80
- package/dist/services/ClineRunner.js.map +1 -1
- package/dist/services/GeminiRunner.d.ts +0 -6
- package/dist/services/GeminiRunner.d.ts.map +1 -1
- package/dist/services/GeminiRunner.js +58 -285
- package/dist/services/GeminiRunner.js.map +1 -1
- package/dist/services/KiloRunner.d.ts +0 -12
- package/dist/services/KiloRunner.d.ts.map +1 -1
- package/dist/services/KiloRunner.js +57 -441
- package/dist/services/KiloRunner.js.map +1 -1
- package/dist/services/OpenClawRunner.d.ts +0 -7
- package/dist/services/OpenClawRunner.d.ts.map +1 -1
- package/dist/services/OpenClawRunner.js +11 -79
- package/dist/services/OpenClawRunner.js.map +1 -1
- package/dist/services/OpenCodeRunner.d.ts +0 -7
- package/dist/services/OpenCodeRunner.d.ts.map +1 -1
- package/dist/services/OpenCodeRunner.js +11 -79
- package/dist/services/OpenCodeRunner.js.map +1 -1
- package/dist/services/QwenRunner.d.ts +19 -0
- package/dist/services/QwenRunner.d.ts.map +1 -0
- package/dist/services/QwenRunner.js +87 -0
- package/dist/services/QwenRunner.js.map +1 -0
- package/dist/services/TraeRunner.d.ts +19 -0
- package/dist/services/TraeRunner.d.ts.map +1 -0
- package/dist/services/TraeRunner.js +88 -0
- package/dist/services/TraeRunner.js.map +1 -0
- package/dist/tools/config_example.d.ts +4 -7
- package/dist/tools/config_example.d.ts.map +1 -1
- package/dist/tools/config_example.js +86 -191
- package/dist/tools/config_example.js.map +1 -1
- package/dist/tools/create_agent.d.ts +9 -15
- package/dist/tools/create_agent.d.ts.map +1 -1
- package/dist/tools/create_agent.js +9 -8
- package/dist/tools/create_agent.js.map +1 -1
- package/dist/tools/get_agent_configs.d.ts +4 -10
- package/dist/tools/get_agent_configs.d.ts.map +1 -1
- package/dist/tools/get_agent_configs.js.map +1 -1
- package/dist/tools/manage_agents.d.ts +18 -36
- package/dist/tools/manage_agents.d.ts.map +1 -1
- package/dist/tools/manage_agents.js +2 -2
- package/dist/tools/manage_agents.js.map +1 -1
- package/dist/tools/manage_prompts.d.ts +8 -13
- package/dist/tools/manage_prompts.d.ts.map +1 -1
- package/dist/tools/manage_prompts.js.map +1 -1
- package/dist/tools/memory_runs.d.ts +4 -3
- package/dist/tools/memory_runs.d.ts.map +1 -1
- package/dist/tools/memory_runs.js.map +1 -1
- package/dist/tools/memory_search.d.ts +4 -3
- package/dist/tools/memory_search.d.ts.map +1 -1
- package/dist/tools/memory_search.js.map +1 -1
- package/dist/tools/memory_store.d.ts +5 -11
- package/dist/tools/memory_store.d.ts.map +1 -1
- package/dist/tools/memory_store.js.map +1 -1
- package/dist/tools/run_agent.d.ts +16 -15
- package/dist/tools/run_agent.d.ts.map +1 -1
- package/dist/tools/run_agent.js +160 -128
- package/dist/tools/run_agent.js.map +1 -1
- package/dist/tools/run_claude.d.ts +3 -8
- package/dist/tools/run_claude.d.ts.map +1 -1
- package/dist/tools/run_claude.js +41 -59
- package/dist/tools/run_claude.js.map +1 -1
- package/dist/tools/run_cline.d.ts +4 -13
- package/dist/tools/run_cline.d.ts.map +1 -1
- package/dist/tools/run_cline.js +43 -55
- package/dist/tools/run_cline.js.map +1 -1
- package/dist/tools/run_gemini.d.ts +4 -13
- package/dist/tools/run_gemini.d.ts.map +1 -1
- package/dist/tools/run_gemini.js +33 -53
- package/dist/tools/run_gemini.js.map +1 -1
- package/dist/tools/run_kilo.d.ts +7 -17
- package/dist/tools/run_kilo.d.ts.map +1 -1
- package/dist/tools/run_kilo.js +41 -68
- package/dist/tools/run_kilo.js.map +1 -1
- package/dist/tools/run_openclaw.d.ts +4 -13
- package/dist/tools/run_openclaw.d.ts.map +1 -1
- package/dist/tools/run_openclaw.js +44 -52
- package/dist/tools/run_openclaw.js.map +1 -1
- package/dist/tools/run_opencode.d.ts +4 -13
- package/dist/tools/run_opencode.d.ts.map +1 -1
- package/dist/tools/run_opencode.js +39 -52
- package/dist/tools/run_opencode.js.map +1 -1
- package/dist/tools/run_qwen.d.ts +15 -0
- package/dist/tools/run_qwen.d.ts.map +1 -0
- package/dist/tools/run_qwen.js +61 -0
- package/dist/tools/run_qwen.js.map +1 -0
- package/dist/tools/run_trae.d.ts +15 -0
- package/dist/tools/run_trae.d.ts.map +1 -0
- package/dist/tools/run_trae.js +66 -0
- package/dist/tools/run_trae.js.map +1 -0
- package/dist/tools/shell_execute.d.ts +10 -0
- package/dist/tools/shell_execute.d.ts.map +1 -0
- package/dist/tools/shell_execute.js +24 -0
- package/dist/tools/shell_execute.js.map +1 -0
- package/package.json +25 -55
- package/.mcp.json.example +0 -21
- package/assets/overmind.png +0 -0
- package/bin/.gitkeep +0 -0
- package/bin/README.md +0 -34
- package/bin/install-overmind-unix.sh +0 -412
- package/bin/install-overmind-windows.bat +0 -407
- package/docs/README.md +0 -128
- package/docs/agent_control.md +0 -656
- package/docs/index.html +0 -493
- package/docs/library.html +0 -239
- package/docs/prompt.html +0 -1212
- package/docs/script.js +0 -428
- package/docs/styles.css +0 -2816
- package/scripts/auto-changelog.mjs +0 -132
- package/scripts/auto-install.mjs +0 -322
- package/scripts/install-dependencies.mjs +0 -462
- package/scripts/postgres-manager.mjs +0 -219
- package/scripts/postinstall.mjs +0 -538
- package/scripts/setup-overmind-db.mjs +0 -199
- package/scripts/setup-windows.js +0 -266
- package/scripts/setup.mjs +0 -397
- package/scripts/test-installation.mjs +0 -158
- package/scripts/uninstall.mjs +0 -238
package/scripts/postinstall.mjs
DELETED
|
@@ -1,538 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
-
* OVERMIND-MCP - POST-INSTALL AUTOMATIQUE (SIMPLIFIÉ)
|
|
5
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
-
* Script exécuté automatiquement après npm install -g overmind-mcp
|
|
7
|
-
* INSTALLE UNIQUEMENT :
|
|
8
|
-
* - Vérifie Docker
|
|
9
|
-
* - Installe PostgreSQL + pgvector (si absent)
|
|
10
|
-
* - Copie .env.example → .env
|
|
11
|
-
* - Copie .mcp.json.example → .mcp.json
|
|
12
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
import { execSync, spawn } from 'child_process';
|
|
16
|
-
import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
|
|
17
|
-
import { join } from 'path';
|
|
18
|
-
import { fileURLToPath } from 'url';
|
|
19
|
-
import { dirname } from 'path';
|
|
20
|
-
|
|
21
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
-
const __dirname = dirname(__filename);
|
|
23
|
-
|
|
24
|
-
const INSTALL_DIR = join(
|
|
25
|
-
process.env.HOME || process.env.USERPROFILE || process.env.HOMEPATH,
|
|
26
|
-
'.overmind'
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
30
|
-
// COLORS
|
|
31
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
32
|
-
|
|
33
|
-
const COLORS = {
|
|
34
|
-
cyan: '\x1b[36m',
|
|
35
|
-
green: '\x1b[32m',
|
|
36
|
-
yellow: '\x1b[33m',
|
|
37
|
-
red: '\x1b[31m',
|
|
38
|
-
white: '\x1b[37m',
|
|
39
|
-
reset: '\x1b[0m'
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
function log(color, str) {
|
|
43
|
-
console.log(`${color}${str}${COLORS.reset}`);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
function logSection(title) {
|
|
47
|
-
console.log('\n╔══════════════════════════════════════════════════════════════════╗');
|
|
48
|
-
console.log(`║ ${title.padEnd(64)} ║`);
|
|
49
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
function runCommand(cmd, options = {}) {
|
|
53
|
-
try {
|
|
54
|
-
return execSync(cmd, { stdio: 'pipe', encoding: 'utf8', ...options });
|
|
55
|
-
} catch {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
async function runCommandAsync(cmd, description) {
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
console.log(`🔧 ${description}`);
|
|
63
|
-
console.log(` $ ${cmd}`);
|
|
64
|
-
|
|
65
|
-
const child = spawn(cmd, { shell: true, stdio: 'inherit' });
|
|
66
|
-
|
|
67
|
-
child.on('close', (code) => {
|
|
68
|
-
if (code === 0) {
|
|
69
|
-
console.log(`✅ ${description} terminé`);
|
|
70
|
-
resolve(true);
|
|
71
|
-
} else {
|
|
72
|
-
console.error(`❌ Erreur (code ${code})`);
|
|
73
|
-
reject(new Error(`Command failed with code ${code}`));
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
child.on('error', (err) => {
|
|
78
|
-
console.error('❌ Erreur:', err.message);
|
|
79
|
-
reject(err);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
85
|
-
// INSTALLATION STEPS
|
|
86
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
87
|
-
|
|
88
|
-
async function checkDocker() {
|
|
89
|
-
logSection('VÉRIFICATION DOCKER');
|
|
90
|
-
|
|
91
|
-
const version = runCommand('docker --version');
|
|
92
|
-
if (!version) {
|
|
93
|
-
log(COLORS.red, '❌ Docker non trouvé');
|
|
94
|
-
console.log('');
|
|
95
|
-
log(COLORS.yellow, '📥 Installation Docker requise:');
|
|
96
|
-
|
|
97
|
-
const platform = process.platform;
|
|
98
|
-
if (platform === 'win32') {
|
|
99
|
-
console.log(' Windows: Docker Desktop, Rancher Desktop, ou Podman');
|
|
100
|
-
console.log(' https://www.docker.com/products/docker-desktop/');
|
|
101
|
-
} else if (platform === 'darwin') {
|
|
102
|
-
console.log(' macOS: Docker Desktop, Colima, OrbStack, ou Podman');
|
|
103
|
-
console.log(' https://www.docker.com/products/docker-desktop/');
|
|
104
|
-
} else {
|
|
105
|
-
console.log(' Linux: Docker Engine, Podman, ou rootless Docker');
|
|
106
|
-
console.log(' https://docs.docker.com/engine/install/');
|
|
107
|
-
console.log(' Podman: https://podman.io/getting-started/installation');
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
log(COLORS.cyan, '\nAprès installation de Docker, relancez: npm install -g overmind-mcp');
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
// Détecter le type d'implémentation Docker
|
|
115
|
-
let implType = 'Docker';
|
|
116
|
-
try {
|
|
117
|
-
const dockerInfo = runCommand('docker info --format "{{.ServerVersion}}"');
|
|
118
|
-
if (dockerInfo) {
|
|
119
|
-
// Essayer de détecter Podman
|
|
120
|
-
const podmanCheck = runCommand('docker info --format "{{.OperatingSystem}}"');
|
|
121
|
-
if (podmanCheck && podmanCheck.toLowerCase().includes('podman')) {
|
|
122
|
-
implType = 'Podman';
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
} catch (e) {
|
|
126
|
-
// Ignorer les erreurs de détection
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
log(COLORS.green, '✅ Docker détecté: ' + version.trim());
|
|
130
|
-
if (implType !== 'Docker') {
|
|
131
|
-
log(COLORS.cyan, ' Implémentation: ' + implType);
|
|
132
|
-
}
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
async function setupPostgreSQL() {
|
|
137
|
-
logSection('INSTALLATION POSTGRESQL + PGVECTOR');
|
|
138
|
-
|
|
139
|
-
// Check if already exists
|
|
140
|
-
const existingContainer = runCommand(
|
|
141
|
-
'docker ps --filter "name=postgres" --format "{{.Names}}"',
|
|
142
|
-
{ stdio: 'pipe' }
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
if (existingContainer) {
|
|
146
|
-
log(COLORS.green, '✅ PostgreSQL + pgvector déjà installé');
|
|
147
|
-
log(COLORS.cyan, ' Container: ' + existingContainer.trim());
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
log(COLORS.yellow, '📦 Installation PostgreSQL + pgvector...');
|
|
152
|
-
|
|
153
|
-
try {
|
|
154
|
-
await runCommandAsync(
|
|
155
|
-
'docker pull pgvector/pgvector:pg16',
|
|
156
|
-
'Téléchargement image'
|
|
157
|
-
);
|
|
158
|
-
|
|
159
|
-
// Remove existing if stopped
|
|
160
|
-
runCommand('docker rm -f overmind-postgres-pgvector', { stdio: 'pipe' });
|
|
161
|
-
|
|
162
|
-
const runCmd = [
|
|
163
|
-
'docker', 'run', '-d',
|
|
164
|
-
'--name', 'overmind-postgres-pgvector',
|
|
165
|
-
'-p', '5432:5432',
|
|
166
|
-
'-e', 'POSTGRES_PASSWORD=overmind_temp_password_change_me',
|
|
167
|
-
'-e', 'POSTGRES_USER=postgres',
|
|
168
|
-
'-v', 'overmind_postgres_data:/var/lib/postgresql/data',
|
|
169
|
-
'--restart', 'unless-stopped',
|
|
170
|
-
'pgvector/pgvector:pg16'
|
|
171
|
-
].join(' ');
|
|
172
|
-
|
|
173
|
-
await runCommandAsync(runCmd, 'Démarrage PostgreSQL');
|
|
174
|
-
|
|
175
|
-
log(COLORS.cyan, '\n⏳ Attente démarrage PostgreSQL (20s)...');
|
|
176
|
-
await new Promise(resolve => setTimeout(resolve, 20000));
|
|
177
|
-
|
|
178
|
-
// Enable pgvector
|
|
179
|
-
await runCommandAsync(
|
|
180
|
-
`docker exec overmind-postgres-pgvector psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"`,
|
|
181
|
-
'Activation pgvector'
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
log(COLORS.green, '\n✅ PostgreSQL + pgvector installés !');
|
|
185
|
-
return true;
|
|
186
|
-
} catch (error) {
|
|
187
|
-
log(COLORS.red, '❌ Erreur installation PostgreSQL: ' + error.message);
|
|
188
|
-
return false;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
async function setupConfigFiles() {
|
|
193
|
-
logSection('TÉLÉCHARGEMENT CONFIGURATIONS');
|
|
194
|
-
|
|
195
|
-
mkdirSync(INSTALL_DIR, { recursive: true });
|
|
196
|
-
|
|
197
|
-
log(COLORS.yellow, '📥 Téléchargement fichiers de configuration...');
|
|
198
|
-
|
|
199
|
-
const envExampleUrl = 'https://raw.githubusercontent.com/DeamonDev888/overmind-mcp/main/.env.example';
|
|
200
|
-
const mcpExampleUrl = 'https://raw.githubusercontent.com/DeamonDev888/overmind-mcp/main/.mcp.json.example';
|
|
201
|
-
|
|
202
|
-
try {
|
|
203
|
-
// Télécharger .env.example
|
|
204
|
-
const envExampleData = runCommand(`curl -sL --max-time 30 ${envExampleUrl}`);
|
|
205
|
-
if (envExampleData) {
|
|
206
|
-
writeFileSync(join(INSTALL_DIR, '.env.example'), envExampleData);
|
|
207
|
-
log(COLORS.green, '✅ .env.example téléchargé');
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Télécharger .mcp.json.example
|
|
211
|
-
const mcpExampleData = runCommand(`curl -sL --max-time 30 ${mcpExampleUrl}`);
|
|
212
|
-
if (mcpExampleData) {
|
|
213
|
-
writeFileSync(join(INSTALL_DIR, '.mcp.json.example'), mcpExampleData);
|
|
214
|
-
log(COLORS.green, '✅ .mcp.json.example téléchargé');
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
return true;
|
|
218
|
-
} catch (error) {
|
|
219
|
-
log(COLORS.red, '❌ Erreur téléchargement: ' + error.message);
|
|
220
|
-
return false;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
async function installPostgresMCP() {
|
|
225
|
-
logSection('INSTALLATION OVERMIND-POSTGRES-MCP');
|
|
226
|
-
|
|
227
|
-
log(COLORS.yellow, '📦 Installation du serveur MCP PostgreSQL...');
|
|
228
|
-
|
|
229
|
-
try {
|
|
230
|
-
// Vérifier si déjà installé
|
|
231
|
-
const checkInstalled = runCommand('npm list -g overmind-postgres-mcp', { stdio: 'pipe' });
|
|
232
|
-
|
|
233
|
-
if (checkInstalled && checkInstalled.includes('overmind-postgres-mcp')) {
|
|
234
|
-
log(COLORS.green, '✅ overmind-postgres-mcp déjà installé');
|
|
235
|
-
return true;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
await runCommandAsync(
|
|
239
|
-
'npm install -g overmind-postgres-mcp',
|
|
240
|
-
'Installation overmind-postgres-mcp'
|
|
241
|
-
);
|
|
242
|
-
|
|
243
|
-
log(COLORS.green, '✅ overmind-postgres-mcp installé avec succès !');
|
|
244
|
-
return true;
|
|
245
|
-
} catch (error) {
|
|
246
|
-
log(COLORS.yellow, "⚠️ Erreur installation overmind-postgres-mcp: " + error.message);
|
|
247
|
-
log(COLORS.cyan, "💡 Vous pouvez l'installer manuellement: npm install -g overmind-postgres-mcp");
|
|
248
|
-
return false; // Non bloquant
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function createEnvConfig() {
|
|
253
|
-
logSection('CRÉATION CONFIGURATION');
|
|
254
|
-
|
|
255
|
-
mkdirSync(INSTALL_DIR, { recursive: true });
|
|
256
|
-
|
|
257
|
-
const envFile = join(INSTALL_DIR, '.env');
|
|
258
|
-
const envExampleFile = join(INSTALL_DIR, '.env.example');
|
|
259
|
-
const mcpFile = join(INSTALL_DIR, '.mcp.json');
|
|
260
|
-
const mcpExampleFile = join(INSTALL_DIR, '.mcp.json.example');
|
|
261
|
-
const postgresEnvFile = join(INSTALL_DIR, '.env.postgres');
|
|
262
|
-
|
|
263
|
-
// Copier .env.example → .env si existe
|
|
264
|
-
if (existsSync(envExampleFile) && !existsSync(envFile)) {
|
|
265
|
-
let envContent;
|
|
266
|
-
|
|
267
|
-
if (process.platform === 'win32') {
|
|
268
|
-
envContent = runCommand(`type "${envExampleFile}"`, { stdio: 'pipe' });
|
|
269
|
-
} else {
|
|
270
|
-
envContent = runCommand(`cat "${envExampleFile}"`, { stdio: 'pipe' });
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
if (envContent) {
|
|
274
|
-
writeFileSync(envFile, envContent);
|
|
275
|
-
log(COLORS.green, '✅ .env créé (à partir de .env.example)');
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
// Créer .env minimal si n'existe pas
|
|
280
|
-
if (!existsSync(envFile)) {
|
|
281
|
-
const envContent = `# OverMind-MCP Environment Configuration
|
|
282
|
-
# Généré automatiquement par npm install
|
|
283
|
-
|
|
284
|
-
# PostgreSQL
|
|
285
|
-
POSTGRES_HOST=localhost
|
|
286
|
-
POSTGRES_PORT=5432
|
|
287
|
-
POSTGRES_USER=postgres
|
|
288
|
-
POSTGRES_PASSWORD=overmind_temp_password_change_me
|
|
289
|
-
POSTGRES_DB=overmind_memory
|
|
290
|
-
|
|
291
|
-
# OverMind
|
|
292
|
-
OVERMIND_WORKSPACE=${INSTALL_DIR}
|
|
293
|
-
OVERMIND_MEMORY_TYPE=postgres
|
|
294
|
-
|
|
295
|
-
# OpenTelemetry (optionnel)
|
|
296
|
-
OTEL_ENABLED=false
|
|
297
|
-
`;
|
|
298
|
-
writeFileSync(envFile, envContent);
|
|
299
|
-
log(COLORS.green, '✅ Configuration .env créée: ' + envFile);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
// Créer .env.postgres pour overmind-postgres-mcp
|
|
303
|
-
if (!existsSync(postgresEnvFile)) {
|
|
304
|
-
const postgresEnvContent = `# OverMind-PostgreSQL-MCP Configuration
|
|
305
|
-
# Généré automatiquement par OverMind-MCP
|
|
306
|
-
|
|
307
|
-
# Activer la base de données
|
|
308
|
-
USE_DATABASE=true
|
|
309
|
-
|
|
310
|
-
# PostgreSQL Configuration (compatible OverMind)
|
|
311
|
-
POSTGRES_HOST=localhost
|
|
312
|
-
POSTGRES_PORT=5432
|
|
313
|
-
POSTGRES_DATABASE=overmind_memory
|
|
314
|
-
POSTGRES_USER=postgres
|
|
315
|
-
POSTGRES_PASSWORD=overmind_temp_password_change_me
|
|
316
|
-
|
|
317
|
-
# Additional PostgreSQL Settings
|
|
318
|
-
POSTGRES_SSL=false
|
|
319
|
-
POSTGRES_MAX_CONNECTIONS=10
|
|
320
|
-
POSTGRES_IDLE_TIMEOUT=30000
|
|
321
|
-
|
|
322
|
-
# Environment
|
|
323
|
-
NODE_ENV=production
|
|
324
|
-
|
|
325
|
-
# OpenRouter Configuration (Qwen3 Embedding 8B - 4096D)
|
|
326
|
-
OPENROUTER_API_KEY=sk-or-v1-your_key_here
|
|
327
|
-
OPENROUTER_MODEL=qwen/qwen3-embedding-8b
|
|
328
|
-
EMBEDDING_PROVIDER=openrouter
|
|
329
|
-
EMBEDDING_DIMENSIONS=4096
|
|
330
|
-
EMBEDDING_CACHE_SIZE=1000
|
|
331
|
-
`;
|
|
332
|
-
writeFileSync(postgresEnvFile, postgresEnvContent);
|
|
333
|
-
log(COLORS.green, '✅ Configuration .env.postgres créée: ' + postgresEnvFile);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
// Copier .mcp.json.example → .mcp.json si existe
|
|
337
|
-
if (existsSync(mcpExampleFile) && !existsSync(mcpFile)) {
|
|
338
|
-
let mcpContent;
|
|
339
|
-
|
|
340
|
-
if (process.platform === 'win32') {
|
|
341
|
-
mcpContent = runCommand(`type "${mcpExampleFile}"`, { stdio: 'pipe' });
|
|
342
|
-
} else {
|
|
343
|
-
mcpContent = runCommand(`cat "${mcpExampleFile}"`, { stdio: 'pipe' });
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
if (mcpContent) {
|
|
347
|
-
writeFileSync(mcpFile, mcpContent);
|
|
348
|
-
log(COLORS.green, '✅ .mcp.json créé (à partir de .mcp.json.example)');
|
|
349
|
-
}
|
|
350
|
-
}
|
|
351
|
-
}
|
|
352
|
-
|
|
353
|
-
async function startPostgreSQL() {
|
|
354
|
-
logSection('VÉRIFICATION POSTGRESQL + PGVECTOR');
|
|
355
|
-
|
|
356
|
-
try {
|
|
357
|
-
// Vérifier si PostgreSQL existe déjà (n'importe quel container postgres)
|
|
358
|
-
const anyPostgres = runCommand(
|
|
359
|
-
'docker ps --filter "name=postgres" --filter "publish=5432" --format "{{.Names}}"',
|
|
360
|
-
{ stdio: 'pipe' }
|
|
361
|
-
);
|
|
362
|
-
|
|
363
|
-
if (anyPostgres) {
|
|
364
|
-
log(COLORS.green, '✅ PostgreSQL déjà actif sur le port 5432');
|
|
365
|
-
log(COLORS.cyan, ' Container: ' + anyPostgres.trim());
|
|
366
|
-
log(COLORS.yellow, ' 💡 Utilisation de PostgreSQL existant (pas de création OverMind)');
|
|
367
|
-
return true;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
// Vérifier si le container OverMind existe déjà
|
|
371
|
-
const overmindContainer = runCommand(
|
|
372
|
-
'docker ps -a --filter "name=overmind-postgres-pgvector" --format "{{.Names}}"',
|
|
373
|
-
{ stdio: 'pipe' }
|
|
374
|
-
);
|
|
375
|
-
|
|
376
|
-
if (overmindContainer) {
|
|
377
|
-
log(COLORS.yellow, '⚠️ Container OverMind existe mais non démarré');
|
|
378
|
-
await runCommandAsync(
|
|
379
|
-
'docker start overmind-postgres-pgvector',
|
|
380
|
-
'Démarrage container OverMind existant'
|
|
381
|
-
);
|
|
382
|
-
return true;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
log(COLORS.yellow, '🚀 Création et démarrage PostgreSQL + pgvector...');
|
|
386
|
-
|
|
387
|
-
await runCommandAsync(
|
|
388
|
-
'docker run -d --name overmind-postgres-pgvector -p 5432:5432 -e POSTGRES_PASSWORD=overmind_temp_password_change_me -e POSTGRES_USER=postgres -v overmind_postgres_data:/var/lib/postgresql/data --restart unless-stopped pgvector/pgvector:pg16',
|
|
389
|
-
'Création PostgreSQL OverMind'
|
|
390
|
-
);
|
|
391
|
-
|
|
392
|
-
log(COLORS.cyan, '\n⏳ Attente démarrage PostgreSQL (20s)...');
|
|
393
|
-
await new Promise(resolve => setTimeout(resolve, 20000));
|
|
394
|
-
|
|
395
|
-
return true;
|
|
396
|
-
} catch (error) {
|
|
397
|
-
log(COLORS.red, '\n⚠️ Erreur démarrage PostgreSQL: ' + error.message);
|
|
398
|
-
return false;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
async function validatePostgreSQL() {
|
|
403
|
-
logSection('VALIDATION POSTGRESQL');
|
|
404
|
-
|
|
405
|
-
log(COLORS.yellow, '🔍 Vérification PostgreSQL + pgvector...\n');
|
|
406
|
-
|
|
407
|
-
const containerName = runCommand(
|
|
408
|
-
'docker ps --filter "name=postgres" --format "{{.Names}}"',
|
|
409
|
-
{ stdio: 'pipe' }
|
|
410
|
-
);
|
|
411
|
-
|
|
412
|
-
if (containerName) {
|
|
413
|
-
log(COLORS.green, ` ✅ PostgreSQL + pgvector: ${containerName.trim()}`);
|
|
414
|
-
return true;
|
|
415
|
-
} else {
|
|
416
|
-
log(COLORS.red, ' ❌ PostgreSQL + pgvector: Non trouvé');
|
|
417
|
-
return false;
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
function showSummary() {
|
|
422
|
-
console.log('\n╔══════════════════════════════════════════════════════════════════╗');
|
|
423
|
-
console.log('║' + ' '.repeat(64) + '║');
|
|
424
|
-
console.log('║' + COLORS.green + ' ✅ INSTALLATION TERMINÉE !' + COLORS.reset + ' '.repeat(33) + '║');
|
|
425
|
-
console.log('║' + ' '.repeat(64) + '║');
|
|
426
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
427
|
-
console.log('');
|
|
428
|
-
log(COLORS.yellow, "📋 COMPOSANTS INSTALLÉS:");
|
|
429
|
-
console.log('');
|
|
430
|
-
console.log('┌─────────────────────────────────────────────────────────────────┐');
|
|
431
|
-
console.log('│ ' + COLORS.cyan + 'Ouvrez votre interface Docker (Containers)' + COLORS.reset + ' │');
|
|
432
|
-
console.log('│ ' + COLORS.cyan + 'Vous verrez le service OverMind actif:' + COLORS.reset + ' │');
|
|
433
|
-
console.log('│ ' + COLORS.green + ' • PostgreSQL + pgvector (Mémoire Vectorielle)' + COLORS.reset + ' │');
|
|
434
|
-
console.log('│ │');
|
|
435
|
-
console.log('│ ' + COLORS.green + ' • overmind-postgres-mcp (Serveur MCP PostgreSQL)' + COLORS.reset + ' │');
|
|
436
|
-
console.log('│ │');
|
|
437
|
-
console.log('│ ' + COLORS.yellow + 'Détails de connexion:' + COLORS.reset + ' │');
|
|
438
|
-
console.log('│ • Host: localhost:5432' + ' │');
|
|
439
|
-
console.log('│ • User: postgres' + ' │');
|
|
440
|
-
console.log('│ • Password: overmind_temp_password_change_me (À CHANGER !)' + ' │');
|
|
441
|
-
console.log('│ • Extension: vector (pgvector)' + ' │');
|
|
442
|
-
console.log('│ • Database: overmind_memory' + ' │');
|
|
443
|
-
console.log('└─────────────────────────────────────────────────────────────────┘');
|
|
444
|
-
console.log('');
|
|
445
|
-
log(COLORS.yellow, "📁 FICHIERS DE CONFIGURATION:");
|
|
446
|
-
console.log(" • ~/.overmind/.env (Configuration OverMind)");
|
|
447
|
-
console.log(" • ~/.overmind/.env.postgres (Configuration PostgreSQL MCP)");
|
|
448
|
-
console.log(" • ~/.overmind/.mcp.json (Configuration serveurs MCP)");
|
|
449
|
-
console.log('');
|
|
450
|
-
log(COLORS.yellow, "🔧 SERVEURS MCP ACTIFS:");
|
|
451
|
-
console.log(" • overmind (Orchestration d'agents)");
|
|
452
|
-
console.log(" • memory (Gestion mémoire vectorielle)");
|
|
453
|
-
console.log(" • overmind-postgres (PostgreSQL vectoriel)");
|
|
454
|
-
console.log('');
|
|
455
|
-
log(COLORS.yellow, "📚 DOCUMENTATION:");
|
|
456
|
-
console.log(" • https://github.com/DeamonDev888/overmind-mcp");
|
|
457
|
-
console.log(" • https://www.npmjs.com/package/overmind-mcp");
|
|
458
|
-
console.log(" • https://github.com/DeamonDev888/PostgreSQL-MCP-Serveur");
|
|
459
|
-
console.log('');
|
|
460
|
-
log(COLORS.yellow, "🎉 PROCHAINE ÉTAPE:");
|
|
461
|
-
console.log(" • Créez votre premier agent: overmind create-agent");
|
|
462
|
-
console.log(" • Ou listez les agents: overmind list-agents");
|
|
463
|
-
console.log(" • Gestion PostgreSQL: overmind-postgres up/status/down");
|
|
464
|
-
console.log('');
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
468
|
-
// MAIN
|
|
469
|
-
// ═════════════════════════════════════════════════════════════════════════════
|
|
470
|
-
|
|
471
|
-
async function main() {
|
|
472
|
-
console.log('╔══════════════════════════════════════════════════════════════════╗');
|
|
473
|
-
console.log('║' + ' '.repeat(64) + '║');
|
|
474
|
-
console.log('║' + COLORS.cyan + ' 🚀 OVERMIND-MCP - INSTALLATION AUTOMATIQUE' + COLORS.reset + ' '.repeat(25) + '║');
|
|
475
|
-
console.log('║' + ' '.repeat(64) + '║');
|
|
476
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
477
|
-
console.log('');
|
|
478
|
-
|
|
479
|
-
// Banner
|
|
480
|
-
console.log(COLORS.cyan + 'Ce script VA installer automatiquement:' + COLORS.reset);
|
|
481
|
-
console.log(' ✓ Vérifier Docker');
|
|
482
|
-
console.log(' ✓ Installer PostgreSQL + pgvector (si absent)');
|
|
483
|
-
console.log(' ✓ Télécharger fichiers de configuration');
|
|
484
|
-
console.log(' ✓ Installer overmind-postgres-mcp');
|
|
485
|
-
console.log(' ✓ Démarrer PostgreSQL + pgvector');
|
|
486
|
-
console.log(' ✓ Copier .env.example → .env');
|
|
487
|
-
console.log(' ✓ Copier .mcp.json.example → .mcp.json');
|
|
488
|
-
console.log(' ✓ Valider PostgreSQL');
|
|
489
|
-
console.log('');
|
|
490
|
-
|
|
491
|
-
// Step 1: Check Docker
|
|
492
|
-
const dockerOk = await checkDocker();
|
|
493
|
-
if (!dockerOk) {
|
|
494
|
-
return;
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
// Step 2: Setup PostgreSQL
|
|
498
|
-
await setupPostgreSQL();
|
|
499
|
-
|
|
500
|
-
// Step 3: Setup .env et .mcp.json
|
|
501
|
-
createEnvConfig();
|
|
502
|
-
|
|
503
|
-
// Step 4: Download config files
|
|
504
|
-
const downloaded = await setupConfigFiles();
|
|
505
|
-
|
|
506
|
-
// Step 5: Install overmind-postgres-mcp
|
|
507
|
-
if (downloaded) {
|
|
508
|
-
await installPostgresMCP();
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
// Step 6: Start PostgreSQL
|
|
512
|
-
if (downloaded) {
|
|
513
|
-
const started = await startPostgreSQL();
|
|
514
|
-
if (!started) {
|
|
515
|
-
log(COLORS.yellow, '\n⚠️ PostgreSQL non démarré automatiquement.');
|
|
516
|
-
}
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
// Step 7: Validate PostgreSQL
|
|
520
|
-
if (downloaded) {
|
|
521
|
-
const ok = await validatePostgreSQL();
|
|
522
|
-
if (ok) {
|
|
523
|
-
logSection('✅ POSTGRESQL + PGVECTOR EST ACTIF');
|
|
524
|
-
log(COLORS.green, '🎉 Installation réussie !');
|
|
525
|
-
} else {
|
|
526
|
-
logSection('⚠️ POSTGRESQL NON DÉMARRÉ');
|
|
527
|
-
}
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
// Show final summary
|
|
531
|
-
showSummary();
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
// Run main
|
|
535
|
-
main().catch((error) => {
|
|
536
|
-
console.error('\n❌ ERREUR FATALE:', error.message);
|
|
537
|
-
process.exit(1);
|
|
538
|
-
});
|