overmind-mcp 2.3.4 → 2.4.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/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
|
@@ -1,462 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
-
* INSTALL-DEPENDENCIES SCRIPT (SIMPLIFIÉ)
|
|
5
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
-
* Script cross-platform qui détecte et installe uniquement ce qui manque :
|
|
7
|
-
* - Docker Desktop / Docker Engine
|
|
8
|
-
* - PostgreSQL + pgvector (uniquement)
|
|
9
|
-
*
|
|
10
|
-
* Supporte: Windows (Docker Desktop), Linux (Docker Engine), macOS (Docker Desktop)
|
|
11
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import { execSync, spawn } from 'child_process';
|
|
15
|
-
import { existsSync } from 'fs';
|
|
16
|
-
import { join } from 'path';
|
|
17
|
-
import { fileURLToPath } from 'url';
|
|
18
|
-
import { dirname } from 'path';
|
|
19
|
-
import { createInterface } from 'readline';
|
|
20
|
-
|
|
21
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
-
const __dirname = dirname(__filename);
|
|
23
|
-
|
|
24
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
25
|
-
// UTILS
|
|
26
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
27
|
-
|
|
28
|
-
function logSection(title) {
|
|
29
|
-
console.log('\n╔══════════════════════════════════════════════════════════════════╗');
|
|
30
|
-
console.log(`║ ${title.padEnd(64)} ║`);
|
|
31
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function runCommand(cmd, options = {}) {
|
|
35
|
-
try {
|
|
36
|
-
return execSync(cmd, { stdio: 'pipe', encoding: 'utf8', ...options });
|
|
37
|
-
} catch {
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function runCommandAsync(cmd, description) {
|
|
43
|
-
return new Promise((resolve, reject) => {
|
|
44
|
-
console.log(`🔧 ${description}`);
|
|
45
|
-
console.log(` $ ${cmd}`);
|
|
46
|
-
|
|
47
|
-
const child = spawn(cmd, { shell: true, stdio: 'inherit' });
|
|
48
|
-
|
|
49
|
-
child.on('close', (code) => {
|
|
50
|
-
if (code === 0) {
|
|
51
|
-
console.log(`✅ ${description} terminé`);
|
|
52
|
-
resolve(true);
|
|
53
|
-
} else {
|
|
54
|
-
console.error(`❌ Erreur (code ${code})`);
|
|
55
|
-
reject(new Error(`Command failed with code ${code}`));
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
child.on('error', (err) => {
|
|
60
|
-
console.error('❌ Erreur:', err.message);
|
|
61
|
-
reject(err);
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function promptYesNo(question) {
|
|
67
|
-
const rl = createInterface({
|
|
68
|
-
input: process.stdin,
|
|
69
|
-
output: process.stdout,
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
return new Promise((resolve) => {
|
|
73
|
-
rl.question(`${question} (y/N): `, (answer) => {
|
|
74
|
-
rl.close();
|
|
75
|
-
resolve(answer.toLowerCase().startsWith('y'));
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function openUrl(url) {
|
|
81
|
-
const platform = process.platform;
|
|
82
|
-
|
|
83
|
-
if (platform === 'win32') {
|
|
84
|
-
runCommand(`start ${url}`, { stdio: 'ignore' });
|
|
85
|
-
} else if (platform === 'darwin') {
|
|
86
|
-
runCommand(`open ${url}`, { stdio: 'ignore' });
|
|
87
|
-
} else {
|
|
88
|
-
runCommand(`xdg-open ${url}`, { stdio: 'ignore' });
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
93
|
-
// DOCKER DETECTION
|
|
94
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
95
|
-
|
|
96
|
-
async function checkDocker() {
|
|
97
|
-
logSection('VÉRIFICATION DOCKER');
|
|
98
|
-
|
|
99
|
-
// Check if Docker is installed
|
|
100
|
-
const version = runCommand('docker --version');
|
|
101
|
-
if (!version) {
|
|
102
|
-
console.log('❌ Docker non trouvé');
|
|
103
|
-
return null;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
console.log('✅ Docker détecté:', version.trim());
|
|
107
|
-
|
|
108
|
-
// Detect Docker Desktop vs Docker Engine
|
|
109
|
-
const platform = process.platform;
|
|
110
|
-
|
|
111
|
-
if (platform === 'win32' || platform === 'darwin') {
|
|
112
|
-
// Windows/macOS: Check Docker Desktop
|
|
113
|
-
const desktopStatus = runCommand('docker info --format "{{.OperatingSystem}}"');
|
|
114
|
-
if (desktopStatus?.includes('Docker Desktop')) {
|
|
115
|
-
console.log('✅ Docker Desktop détecté');
|
|
116
|
-
return { type: 'desktop', platform };
|
|
117
|
-
}
|
|
118
|
-
} else if (platform === 'linux') {
|
|
119
|
-
// Linux: Docker Engine
|
|
120
|
-
console.log('✅ Docker Engine (Linux) détecté');
|
|
121
|
-
return { type: 'engine', platform };
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return { type: 'unknown', platform };
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
async function installDockerIfNeeded() {
|
|
128
|
-
const dockerInfo = await checkDocker();
|
|
129
|
-
|
|
130
|
-
if (dockerInfo) {
|
|
131
|
-
return dockerInfo;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
console.log('');
|
|
135
|
-
console.log('📥 Installation Docker requise:');
|
|
136
|
-
console.log(' • Windows: Docker Desktop for Windows');
|
|
137
|
-
console.log(' • macOS: Docker Desktop for Mac');
|
|
138
|
-
console.log(' • Linux: Docker Engine (apt/yum/dnf)');
|
|
139
|
-
console.log('');
|
|
140
|
-
|
|
141
|
-
const answer = await promptYesNo('Voulez-vous ouvrir le site de téléchargement ?');
|
|
142
|
-
if (answer) {
|
|
143
|
-
const url = 'https://www.docker.com/products/docker-desktop/';
|
|
144
|
-
openUrl(url);
|
|
145
|
-
console.log('✅ Navigateur ouvert. Installez Docker, puis relancez ce script.');
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
return null;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
152
|
-
// POSTGRESQL + PGVECTOR DETECTION & INSTALLATION
|
|
153
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
154
|
-
|
|
155
|
-
async function detectExistingPostgreSQL() {
|
|
156
|
-
logSection('DÉTECTION POSTGRESQL EXISTANT');
|
|
157
|
-
|
|
158
|
-
// 1. Check native PostgreSQL (psql command)
|
|
159
|
-
const nativePg = runCommand('psql --version');
|
|
160
|
-
if (nativePg) {
|
|
161
|
-
console.log('✅ PostgreSQL natif détecté:', nativePg.trim());
|
|
162
|
-
|
|
163
|
-
// Check if pgvector is installed
|
|
164
|
-
const pgvectorCheck = runCommand('psql -U postgres -t -c "SELECT extname FROM pg_extension WHERE extname = \'vector\';"');
|
|
165
|
-
if (pgvectorCheck?.includes('vector')) {
|
|
166
|
-
console.log('✅ pgvector est installé');
|
|
167
|
-
return { type: 'native', hasPgvector: true };
|
|
168
|
-
} else {
|
|
169
|
-
console.log('⚠️ pgvector NON installé (installation manuelle requise)');
|
|
170
|
-
return { type: 'native', hasPgvector: false };
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// 2. Check Docker containers with pgvector (multiple detection methods)
|
|
175
|
-
console.log('🔍 Recherche containers PostgreSQL avec pgvector...');
|
|
176
|
-
|
|
177
|
-
// Method A: Check by image name (pgvector/pgvector)
|
|
178
|
-
let containers = runCommand('docker ps --filter "ancestor=pgvector/pgvector" --format "{{.Names}}"', {
|
|
179
|
-
stdio: 'pipe'
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
// Method B: Check all containers with "pgvector" or "postgres" in name
|
|
183
|
-
if (!containers) {
|
|
184
|
-
containers = runCommand('docker ps --format "{{.Names}}" | grep -E "(pgvector|postgres)"', {
|
|
185
|
-
stdio: 'pipe',
|
|
186
|
-
shell: true
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
if (containers) {
|
|
191
|
-
const containerList = containers.trim().split('\n').filter(Boolean);
|
|
192
|
-
console.log(`✅ ${containerList.length} container(s) PostgreSQL détecté(s):`);
|
|
193
|
-
containerList.forEach(name => console.log(` • ${name}`));
|
|
194
|
-
|
|
195
|
-
// Check each container for pgvector
|
|
196
|
-
for (const container of containerList) {
|
|
197
|
-
try {
|
|
198
|
-
const pgvectorCheck = runCommand(
|
|
199
|
-
`docker exec ${container} psql -U postgres -t -c "SELECT extname FROM pg_extension WHERE extname = 'vector';" 2>&1`,
|
|
200
|
-
{ stdio: 'pipe' }
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
if (pgvectorCheck?.includes('vector')) {
|
|
204
|
-
console.log(`✅ pgvector actif dans ${container}`);
|
|
205
|
-
return { type: 'docker', container, hasPgvector: true };
|
|
206
|
-
}
|
|
207
|
-
} catch {
|
|
208
|
-
// Container might not be accessible, try next
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
console.log('⚠️ Containers trouvés mais SANS pgvector installé');
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
// 3. Check for any PostgreSQL container (might not have pgvector)
|
|
216
|
-
const allContainers = runCommand('docker ps --format "{{.Names}}"', {
|
|
217
|
-
stdio: 'pipe'
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
if (allContainers) {
|
|
221
|
-
const pgContainers = allContainers
|
|
222
|
-
.trim()
|
|
223
|
-
.split('\n')
|
|
224
|
-
.filter(name => name.toLowerCase().includes('postgres') || name.toLowerCase().includes('pgvector'));
|
|
225
|
-
|
|
226
|
-
if (pgContainers.length > 0) {
|
|
227
|
-
console.log(`⚠️ ${pgContainers.length} container(s) PostgreSQL détecté(s) SANS pgvector:`);
|
|
228
|
-
pgContainers.forEach(name => console.log(` • ${name}`));
|
|
229
|
-
console.log('');
|
|
230
|
-
console.log('💡 Le script va créer un nouveau container dédié.');
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
if (genericContainers) {
|
|
235
|
-
const containerList = genericContainers.trim().split('\n').filter(Boolean);
|
|
236
|
-
console.log(`⚠️ ${containerList.length} container(s) PostgreSQL détecté(s) SANS pgvector:`);
|
|
237
|
-
containerList.forEach(name => console.log(` • ${name}`));
|
|
238
|
-
console.log('');
|
|
239
|
-
console.log('💡 Ces containers n\'ont PAS pgvector. Le script va créer un nouveau container dédié.');
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
return null;
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
async function waitForPostgreSQL(containerName, maxWait = 60) {
|
|
246
|
-
console.log(`⏳ Attente démarrage PostgreSQL (max ${maxWait}s)...`);
|
|
247
|
-
|
|
248
|
-
for (let i = 0; i < maxWait; i++) {
|
|
249
|
-
try {
|
|
250
|
-
execSync(
|
|
251
|
-
`docker exec ${containerName} pg_isready -U postgres`,
|
|
252
|
-
{ stdio: 'pipe', encoding: 'utf8' }
|
|
253
|
-
);
|
|
254
|
-
console.log('✅ PostgreSQL prêt !');
|
|
255
|
-
return true;
|
|
256
|
-
} catch {
|
|
257
|
-
process.stdout.write('.');
|
|
258
|
-
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
console.log('');
|
|
263
|
-
console.log('❌ Timeout: PostgreSQL n\'a pas démarré à temps');
|
|
264
|
-
return false;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
async function installPostgreSQLDocker() {
|
|
268
|
-
logSection('INSTALLATION POSTGRESQL + PGVECTOR (DOCKER)');
|
|
269
|
-
|
|
270
|
-
const containerName = 'overmind-postgres-pgvector';
|
|
271
|
-
|
|
272
|
-
try {
|
|
273
|
-
// Pull image
|
|
274
|
-
console.log('📥 Téléchargement image pgvector/pgvector:pg16...');
|
|
275
|
-
await runCommandAsync(
|
|
276
|
-
'docker pull pgvector/pgvector:pg16',
|
|
277
|
-
'Téléchargement image'
|
|
278
|
-
);
|
|
279
|
-
|
|
280
|
-
// Remove existing container if present
|
|
281
|
-
try {
|
|
282
|
-
execSync(`docker inspect ${containerName}`, { stdio: 'pipe' });
|
|
283
|
-
console.log(`⚠️ Container ${containerName} existe déjà. Suppression...`);
|
|
284
|
-
execSync(`docker rm -f ${containerName}`, { stdio: 'pipe' });
|
|
285
|
-
} catch {
|
|
286
|
-
// Container doesn't exist, that's fine
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// Create volume if doesn't exist
|
|
290
|
-
try {
|
|
291
|
-
execSync('docker volume create overmind_postgres_data', { stdio: 'pipe' });
|
|
292
|
-
} catch {
|
|
293
|
-
// Volume might already exist
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
// Run container
|
|
297
|
-
console.log('🚀 Démarrage container PostgreSQL...');
|
|
298
|
-
const runCommand = [
|
|
299
|
-
'docker', 'run', '-d',
|
|
300
|
-
'--name', containerName,
|
|
301
|
-
'-p', '5432:5432',
|
|
302
|
-
'-e', 'POSTGRES_PASSWORD=overmind_temp_password_change_me',
|
|
303
|
-
'-e', 'POSTGRES_USER=postgres',
|
|
304
|
-
'-v', 'overmind_postgres_data:/var/lib/postgresql/data',
|
|
305
|
-
'--restart', 'unless-stopped',
|
|
306
|
-
'pgvector/pgvector:pg16'
|
|
307
|
-
].join(' ');
|
|
308
|
-
|
|
309
|
-
await runCommandAsync(runCommand, 'Démarrage PostgreSQL');
|
|
310
|
-
|
|
311
|
-
// Wait for PostgreSQL to be ready
|
|
312
|
-
const ready = await waitForPostgreSQL(containerName);
|
|
313
|
-
if (!ready) {
|
|
314
|
-
throw new Error('PostgreSQL n\'a pas démarré');
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
// Test connection
|
|
318
|
-
console.log('🔍 Test connexion PostgreSQL...');
|
|
319
|
-
await runCommandAsync(
|
|
320
|
-
`docker exec ${containerName} psql -U postgres -c "SELECT version();"`,
|
|
321
|
-
'Test connexion'
|
|
322
|
-
);
|
|
323
|
-
|
|
324
|
-
// Enable pgvector
|
|
325
|
-
console.log('🔧 Activation extension pgvector...');
|
|
326
|
-
await runCommandAsync(
|
|
327
|
-
`docker exec ${containerName} psql -U postgres -c "CREATE EXTENSION IF NOT EXISTS vector;"`,
|
|
328
|
-
'Activation pgvector'
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
// Verify pgvector
|
|
332
|
-
console.log('✅ Vérification pgvector...');
|
|
333
|
-
const result = runCommand(
|
|
334
|
-
`docker exec ${containerName} psql -U postgres -t -c "SELECT extname FROM pg_extension WHERE extname = 'vector';"`,
|
|
335
|
-
{ encoding: 'utf8', stdio: 'pipe' }
|
|
336
|
-
).trim();
|
|
337
|
-
|
|
338
|
-
if (result.includes('vector')) {
|
|
339
|
-
console.log('✅ pgvector installé avec succès !');
|
|
340
|
-
} else {
|
|
341
|
-
throw new Error('pgvector non trouvé');
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
console.log('');
|
|
345
|
-
console.log('🎉 PostgreSQL + pgvector installés !');
|
|
346
|
-
console.log('');
|
|
347
|
-
console.log('📋 Détails:');
|
|
348
|
-
console.log(` Container: ${containerName}`);
|
|
349
|
-
console.log(' Port: 5432');
|
|
350
|
-
console.log(' User: postgres');
|
|
351
|
-
console.log(' Password: overmind_temp_password_change_me (À CHANGER !)');
|
|
352
|
-
console.log(' Extension: vector (pgvector)');
|
|
353
|
-
|
|
354
|
-
return { type: 'docker', container: containerName, hasPgvector: true };
|
|
355
|
-
|
|
356
|
-
} catch (error) {
|
|
357
|
-
console.error('❌ Erreur installation PostgreSQL:', error.message);
|
|
358
|
-
console.error('');
|
|
359
|
-
console.log('💡 Solution manuelle:');
|
|
360
|
-
console.log(` docker run -d --name ${containerName} \\`);
|
|
361
|
-
console.log(' -p 5432:5432 \\');
|
|
362
|
-
console.log(' -e POSTGRES_PASSWORD=votre_pass \\');
|
|
363
|
-
console.log(' -e POSTGRES_USER=postgres \\');
|
|
364
|
-
console.log(' -v overmind_postgres_data:/var/lib/postgresql/data \\');
|
|
365
|
-
console.log(' --restart unless-stopped \\');
|
|
366
|
-
console.log(' pgvector/pgvector:pg16');
|
|
367
|
-
console.log('');
|
|
368
|
-
console.log('Ou en une ligne (Windows):');
|
|
369
|
-
console.log(` docker run -d --name ${containerName} -p 5432:5432 -e POSTGRES_PASSWORD=votre_pass -e POSTGRES_USER=postgres -v overmind_postgres_data:/var/lib/postgresql/data --restart unless-stopped pgvector/pgvector:pg16`);
|
|
370
|
-
return null;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
375
|
-
// MAIN
|
|
376
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
377
|
-
|
|
378
|
-
async function main() {
|
|
379
|
-
console.log('╔══════════════════════════════════════════════════════════════════╗');
|
|
380
|
-
console.log('║ ║');
|
|
381
|
-
console.log('║ 🗄️️ INSTALLATION POSTGRESQL + PGVECTOR ║');
|
|
382
|
-
console.log('║ Détection & Installation Automatique ║');
|
|
383
|
-
console.log('║ ║');
|
|
384
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
385
|
-
console.log('');
|
|
386
|
-
|
|
387
|
-
// Step 1: Check/Install Docker
|
|
388
|
-
const dockerInfo = await installDockerIfNeeded();
|
|
389
|
-
if (!dockerInfo) {
|
|
390
|
-
console.log('\n⚠️ Relancez ce script après avoir installé Docker.');
|
|
391
|
-
process.exit(1);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
console.log('');
|
|
395
|
-
console.log(`📊 Plateforme: ${dockerInfo.type} (${dockerInfo.platform})`);
|
|
396
|
-
console.log('');
|
|
397
|
-
|
|
398
|
-
// Step 2: Detect existing PostgreSQL
|
|
399
|
-
const existingPg = await detectExistingPostgreSQL();
|
|
400
|
-
|
|
401
|
-
if (existingPg && existingPg.hasPgvector) {
|
|
402
|
-
console.log('');
|
|
403
|
-
console.log('✅ PostgreSQL + pgvector sont déjà installés !');
|
|
404
|
-
|
|
405
|
-
if (existingPg.type === 'docker') {
|
|
406
|
-
console.log(` Container: ${existingPg.container}`);
|
|
407
|
-
console.log(' Port: 5432');
|
|
408
|
-
console.log(' User: postgres');
|
|
409
|
-
console.log(' Extension: vector (pgvector)');
|
|
410
|
-
} else if (existingPg.type === 'native') {
|
|
411
|
-
console.log(' Installation native détectée');
|
|
412
|
-
console.log(' Extension: vector (pgvector)');
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
console.log('');
|
|
416
|
-
console.log('🎉 Rien à installer !');
|
|
417
|
-
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Step 3: Install PostgreSQL + pgvector
|
|
422
|
-
console.log('');
|
|
423
|
-
console.log('📦 Installation de PostgreSQL + pgvector requise...');
|
|
424
|
-
|
|
425
|
-
const installResult = await installPostgreSQLDocker();
|
|
426
|
-
if (!installResult) {
|
|
427
|
-
console.log('\n⚠️ Installation échouée. Vérifiez les erreurs ci-dessus.');
|
|
428
|
-
process.exit(1);
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
// Success
|
|
432
|
-
logSection('✅ INSTALLATION TERMINÉE');
|
|
433
|
-
|
|
434
|
-
console.log(`
|
|
435
|
-
🎉 PostgreSQL + pgvector sont prêts !
|
|
436
|
-
|
|
437
|
-
📋 PROCHAINE ÉTAPE:
|
|
438
|
-
→ Relancez: overmind-setup
|
|
439
|
-
Ou manuellement: npm install -g overmind-mcp
|
|
440
|
-
|
|
441
|
-
💡 RAPPEL:
|
|
442
|
-
• Container: ${installResult.container}
|
|
443
|
-
• Port: 5432
|
|
444
|
-
• User: postgres
|
|
445
|
-
• Password: overmind_temp_password_change_me (CHANGEZ-LE !)
|
|
446
|
-
• Extension: vector (pgvector)
|
|
447
|
-
|
|
448
|
-
═════════════════════════════════════════════════════════════════════
|
|
449
|
-
`);
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
// Run main
|
|
453
|
-
// Check if this file is being run directly (not imported)
|
|
454
|
-
const modulePath = fileURLToPath(import.meta.url);
|
|
455
|
-
const isMainModule = process.argv[1] === modulePath;
|
|
456
|
-
|
|
457
|
-
if (isMainModule) {
|
|
458
|
-
main().catch((error) => {
|
|
459
|
-
console.error('\n❌ ERREUR FATALE:', error.message);
|
|
460
|
-
process.exit(1);
|
|
461
|
-
});
|
|
462
|
-
}
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
4
|
-
* POSTGRES-MANAGER - Gestion PostgreSQL OverMind
|
|
5
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
6
|
-
* Script simplifié pour gérer PostgreSQL + pgvector OverMind
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* overmind-postgres up Démarrer PostgreSQL
|
|
10
|
-
* overmind-postgres down Arrêter PostgreSQL
|
|
11
|
-
* overmind-postgres status Vérifier l'état
|
|
12
|
-
* overmind-postgres logs Voir les logs
|
|
13
|
-
* overmind-postgres reset Réinitialiser (⚠️ supprime les données)
|
|
14
|
-
* ═══════════════════════════════════════════════════════════════════════════════
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { execSync } from 'child_process';
|
|
18
|
-
import { existsSync } from 'fs';
|
|
19
|
-
import { join } from 'path';
|
|
20
|
-
import { fileURLToPath } from 'url';
|
|
21
|
-
import { dirname } from 'path';
|
|
22
|
-
|
|
23
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
24
|
-
const __dirname = dirname(__filename);
|
|
25
|
-
|
|
26
|
-
const PROJECT_ROOT = join(__dirname, '..');
|
|
27
|
-
const COMPOSE_FILE = join(PROJECT_ROOT, 'docker-compose.yml');
|
|
28
|
-
|
|
29
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
30
|
-
// UTILS
|
|
31
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
32
|
-
|
|
33
|
-
function logSection(title) {
|
|
34
|
-
console.log('\n╔══════════════════════════════════════════════════════════════════╗');
|
|
35
|
-
console.log(`║ ${title.padEnd(64)} ║`);
|
|
36
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function runCommand(cmd, options = {}) {
|
|
40
|
-
try {
|
|
41
|
-
return execSync(cmd, { stdio: 'inherit', ...options });
|
|
42
|
-
} catch (error) {
|
|
43
|
-
return null;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
48
|
-
// COMMANDS
|
|
49
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
50
|
-
|
|
51
|
-
function commandUp() {
|
|
52
|
-
logSection('DÉMARRAGE POSTGRESQL OVERMIND');
|
|
53
|
-
|
|
54
|
-
if (!existsSync(COMPOSE_FILE)) {
|
|
55
|
-
console.error('❌ Fichier docker-compose.yml non trouvé');
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
try {
|
|
60
|
-
runCommand(`docker-compose -f "${COMPOSE_FILE}" up -d`);
|
|
61
|
-
console.log('');
|
|
62
|
-
console.log('✅ PostgreSQL + pgvector démarré avec succès !');
|
|
63
|
-
console.log('');
|
|
64
|
-
console.log('📊 Connexion:');
|
|
65
|
-
console.log(' Host: localhost:5432');
|
|
66
|
-
console.log(' Database: overmind_memory');
|
|
67
|
-
console.log(' User: postgres');
|
|
68
|
-
console.log(' Password: overmind_temp_password_change_me');
|
|
69
|
-
console.log('');
|
|
70
|
-
console.log('💪 Extensions: pgvector (4096D) activé');
|
|
71
|
-
console.log('');
|
|
72
|
-
} catch (error) {
|
|
73
|
-
console.error('❌ Erreur démarrage PostgreSQL:', error.message);
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
function commandDown() {
|
|
79
|
-
logSection('ARRÊT POSTGRESQL OVERMIND');
|
|
80
|
-
|
|
81
|
-
if (!existsSync(COMPOSE_FILE)) {
|
|
82
|
-
console.error('❌ Fichier docker-compose.yml non trouvé');
|
|
83
|
-
process.exit(1);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
runCommand(`docker-compose -f "${COMPOSE_FILE}" down`);
|
|
88
|
-
console.log('');
|
|
89
|
-
console.log('✅ PostgreSQL arrêté avec succès !');
|
|
90
|
-
console.log('');
|
|
91
|
-
console.log('💡 Les données sont conservées dans le volume Docker.');
|
|
92
|
-
console.log('');
|
|
93
|
-
} catch (error) {
|
|
94
|
-
console.error('❌ Erreur arrêt PostgreSQL:', error.message);
|
|
95
|
-
process.exit(1);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function commandStatus() {
|
|
100
|
-
logSection('ÉTAT POSTGRESQL OVERMIND');
|
|
101
|
-
|
|
102
|
-
if (!existsSync(COMPOSE_FILE)) {
|
|
103
|
-
console.error('❌ Fichier docker-compose.yml non trouvé');
|
|
104
|
-
process.exit(1);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
try {
|
|
108
|
-
runCommand(`docker-compose -f "${COMPOSE_FILE}" ps`);
|
|
109
|
-
} catch (error) {
|
|
110
|
-
console.error('❌ Erreur vérification état:', error.message);
|
|
111
|
-
process.exit(1);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
function commandLogs() {
|
|
116
|
-
logSection('LOGS POSTGRESQL OVERMIND');
|
|
117
|
-
console.log(' (Ctrl+C pour sortir)');
|
|
118
|
-
console.log('');
|
|
119
|
-
|
|
120
|
-
if (!existsSync(COMPOSE_FILE)) {
|
|
121
|
-
console.error('❌ Fichier docker-compose.yml non trouvé');
|
|
122
|
-
process.exit(1);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
try {
|
|
126
|
-
runCommand(`docker-compose -f "${COMPOSE_FILE}" logs -f`);
|
|
127
|
-
} catch (error) {
|
|
128
|
-
// Ignore Ctrl+C
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function commandReset() {
|
|
133
|
-
logSection('RÉINITIALISATION POSTGRESQL OVERMIND');
|
|
134
|
-
console.log('');
|
|
135
|
-
console.log('⚠️ ATTENTION: Cette commande va SUPPRIMER TOUTES LES DONNÉES !');
|
|
136
|
-
console.log('');
|
|
137
|
-
|
|
138
|
-
const { confirm } = require('minimist')(process.argv.slice(2));
|
|
139
|
-
if (!confirm) {
|
|
140
|
-
console.log('❌ Annulé. Pour confirmer, utilisez: --confirm');
|
|
141
|
-
console.log(' overmind-postgres reset --confirm');
|
|
142
|
-
process.exit(0);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (!existsSync(COMPOSE_FILE)) {
|
|
146
|
-
console.error('❌ Fichier docker-compose.yml non trouvé');
|
|
147
|
-
process.exit(1);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
try {
|
|
151
|
-
console.log('🛑 Arrêt PostgreSQL...');
|
|
152
|
-
runCommand(`docker-compose -f "${COMPOSE_FILE}" down -v`);
|
|
153
|
-
|
|
154
|
-
console.log('🗑️ Suppression du volume Docker...');
|
|
155
|
-
runCommand('docker volume rm overmind-postgres-data', { stdio: 'inherit' });
|
|
156
|
-
|
|
157
|
-
console.log('');
|
|
158
|
-
console.log('✅ PostgreSQL réinitialisé avec succès !');
|
|
159
|
-
console.log('');
|
|
160
|
-
console.log('📊 Prochaine étape:');
|
|
161
|
-
console.log(' overmind-postgres up');
|
|
162
|
-
console.log('');
|
|
163
|
-
} catch (error) {
|
|
164
|
-
console.error('❌ Erreur réinitialisation:', error.message);
|
|
165
|
-
process.exit(1);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
function showHelp() {
|
|
170
|
-
console.log('╔══════════════════════════════════════════════════════════════════╗');
|
|
171
|
-
console.log('║ POSTGRES-MANAGER: Gestion PostgreSQL OverMind ║');
|
|
172
|
-
console.log('╠════════════════════════════════════════════════════════════════╣');
|
|
173
|
-
console.log('║ Usage: ║');
|
|
174
|
-
console.log('║ overmind-postgres up Démarrer PostgreSQL ║');
|
|
175
|
-
console.log('║ overmind-postgres down Arrêter PostgreSQL ║');
|
|
176
|
-
console.log('║ overmind-postgres status Verifier l\'etat ║');
|
|
177
|
-
console.log('║ overmind-postgres logs Voir les logs en temps réel ║');
|
|
178
|
-
console.log('║ overmind-postgres reset Réinitialiser (⚠️ données) ║');
|
|
179
|
-
console.log('║ ║');
|
|
180
|
-
console.log('║ Configuration: ║');
|
|
181
|
-
console.log('║ Host: localhost:5432 ║');
|
|
182
|
-
console.log('║ Database: overmind_memory ║');
|
|
183
|
-
console.log('║ User: postgres ║');
|
|
184
|
-
console.log('║ Extension: pgvector (4096D) ║');
|
|
185
|
-
console.log('║ ║');
|
|
186
|
-
console.log('║ Intégration OverMind: ║');
|
|
187
|
-
console.log('║ • Agents stockés dans overmind_agents ║');
|
|
188
|
-
console.log('║ • Mémoires vectorielles dans overmind_memories ║');
|
|
189
|
-
console.log('║ • Sessions dans overmind_sessions ║');
|
|
190
|
-
console.log('╚══════════════════════════════════════════════════════════════════╝');
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
194
|
-
// MAIN
|
|
195
|
-
// ═══════════════════════════════════════════════════════════════════════════════
|
|
196
|
-
|
|
197
|
-
const command = process.argv[2] || 'help';
|
|
198
|
-
|
|
199
|
-
switch (command) {
|
|
200
|
-
case 'up':
|
|
201
|
-
commandUp();
|
|
202
|
-
break;
|
|
203
|
-
case 'down':
|
|
204
|
-
commandDown();
|
|
205
|
-
break;
|
|
206
|
-
case 'status':
|
|
207
|
-
commandStatus();
|
|
208
|
-
break;
|
|
209
|
-
case 'logs':
|
|
210
|
-
commandLogs();
|
|
211
|
-
break;
|
|
212
|
-
case 'reset':
|
|
213
|
-
commandReset();
|
|
214
|
-
break;
|
|
215
|
-
case 'help':
|
|
216
|
-
default:
|
|
217
|
-
showHelp();
|
|
218
|
-
break;
|
|
219
|
-
}
|