overmind-mcp 1.5.9 → 1.5.11

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.
Files changed (121) hide show
  1. package/dist/bin/cli.js +441 -15
  2. package/dist/bin/cli.js.map +1 -1
  3. package/dist/lib/InstallHelper.d.ts.map +1 -1
  4. package/dist/lib/InstallHelper.js +14 -13
  5. package/dist/lib/InstallHelper.js.map +1 -1
  6. package/dist/lib/config.d.ts +4 -0
  7. package/dist/lib/config.d.ts.map +1 -1
  8. package/dist/lib/config.js +5 -3
  9. package/dist/lib/config.js.map +1 -1
  10. package/dist/lib/envUtils.d.ts +10 -0
  11. package/dist/lib/envUtils.d.ts.map +1 -0
  12. package/dist/lib/envUtils.js +24 -0
  13. package/dist/lib/envUtils.js.map +1 -0
  14. package/dist/lib/logger.d.ts +8 -0
  15. package/dist/lib/logger.d.ts.map +1 -0
  16. package/dist/lib/logger.js +81 -0
  17. package/dist/lib/logger.js.map +1 -0
  18. package/dist/lib/modelMapping.d.ts +18 -0
  19. package/dist/lib/modelMapping.d.ts.map +1 -0
  20. package/dist/lib/modelMapping.js +88 -0
  21. package/dist/lib/modelMapping.js.map +1 -0
  22. package/dist/lib/sessions.d.ts +3 -3
  23. package/dist/lib/sessions.d.ts.map +1 -1
  24. package/dist/lib/sessions.js +55 -8
  25. package/dist/lib/sessions.js.map +1 -1
  26. package/dist/memory/PostgresMemoryProvider.d.ts +1 -0
  27. package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
  28. package/dist/memory/PostgresMemoryProvider.js +40 -2
  29. package/dist/memory/PostgresMemoryProvider.js.map +1 -1
  30. package/dist/server.d.ts.map +1 -1
  31. package/dist/server.js +24 -3
  32. package/dist/server.js.map +1 -1
  33. package/dist/services/AgentManager.d.ts.map +1 -1
  34. package/dist/services/AgentManager.js +25 -8
  35. package/dist/services/AgentManager.js.map +1 -1
  36. package/dist/services/ClaudeRunner.d.ts +3 -0
  37. package/dist/services/ClaudeRunner.d.ts.map +1 -1
  38. package/dist/services/ClaudeRunner.js +79 -19
  39. package/dist/services/ClaudeRunner.js.map +1 -1
  40. package/dist/services/ClineRunner.d.ts.map +1 -1
  41. package/dist/services/ClineRunner.js +6 -3
  42. package/dist/services/ClineRunner.js.map +1 -1
  43. package/dist/services/GeminiRunner.d.ts.map +1 -1
  44. package/dist/services/GeminiRunner.js +13 -6
  45. package/dist/services/GeminiRunner.js.map +1 -1
  46. package/dist/services/KiloRunner.d.ts +2 -0
  47. package/dist/services/KiloRunner.d.ts.map +1 -1
  48. package/dist/services/KiloRunner.js +121 -41
  49. package/dist/services/KiloRunner.js.map +1 -1
  50. package/dist/services/NousHermesRunner.d.ts +2 -0
  51. package/dist/services/NousHermesRunner.d.ts.map +1 -1
  52. package/dist/services/NousHermesRunner.js +25 -19
  53. package/dist/services/NousHermesRunner.js.map +1 -1
  54. package/dist/services/OpenClawRunner.d.ts.map +1 -1
  55. package/dist/services/OpenClawRunner.js +6 -3
  56. package/dist/services/OpenClawRunner.js.map +1 -1
  57. package/dist/services/OpenCodeRunner.d.ts.map +1 -1
  58. package/dist/services/OpenCodeRunner.js +6 -3
  59. package/dist/services/OpenCodeRunner.js.map +1 -1
  60. package/dist/services/QwenCliRunner.d.ts.map +1 -1
  61. package/dist/services/QwenCliRunner.js +6 -3
  62. package/dist/services/QwenCliRunner.js.map +1 -1
  63. package/dist/tools/config_example.d.ts +3 -1
  64. package/dist/tools/config_example.d.ts.map +1 -1
  65. package/dist/tools/config_example.js +59 -87
  66. package/dist/tools/config_example.js.map +1 -1
  67. package/dist/tools/create_agent.js +1 -1
  68. package/dist/tools/create_agent.js.map +1 -1
  69. package/dist/tools/initialization_check.js +13 -5
  70. package/dist/tools/initialization_check.js.map +1 -1
  71. package/dist/tools/metadata.d.ts.map +1 -1
  72. package/dist/tools/metadata.js +4 -2
  73. package/dist/tools/metadata.js.map +1 -1
  74. package/dist/tools/run_agent.d.ts +1 -22
  75. package/dist/tools/run_agent.d.ts.map +1 -1
  76. package/dist/tools/run_agent.js +26 -25
  77. package/dist/tools/run_agent.js.map +1 -1
  78. package/dist/tools/run_agent_cli.d.ts +20 -1
  79. package/dist/tools/run_agent_cli.d.ts.map +1 -1
  80. package/dist/tools/run_agent_cli.js +117 -26
  81. package/dist/tools/run_agent_cli.js.map +1 -1
  82. package/dist/tools/run_agents_parallel.d.ts +34 -0
  83. package/dist/tools/run_agents_parallel.d.ts.map +1 -0
  84. package/dist/tools/run_agents_parallel.js +104 -0
  85. package/dist/tools/run_agents_parallel.js.map +1 -0
  86. package/dist/tools/run_claude.d.ts +1 -1
  87. package/dist/tools/run_claude.d.ts.map +1 -1
  88. package/dist/tools/run_claude.js +22 -17
  89. package/dist/tools/run_claude.js.map +1 -1
  90. package/dist/tools/run_cline.d.ts.map +1 -1
  91. package/dist/tools/run_cline.js +44 -7
  92. package/dist/tools/run_cline.js.map +1 -1
  93. package/dist/tools/run_gemini.d.ts +0 -2
  94. package/dist/tools/run_gemini.d.ts.map +1 -1
  95. package/dist/tools/run_gemini.js +37 -8
  96. package/dist/tools/run_gemini.js.map +1 -1
  97. package/dist/tools/run_hermes.d.ts.map +1 -1
  98. package/dist/tools/run_hermes.js +54 -10
  99. package/dist/tools/run_hermes.js.map +1 -1
  100. package/dist/tools/run_kilo.d.ts +2 -0
  101. package/dist/tools/run_kilo.d.ts.map +1 -1
  102. package/dist/tools/run_kilo.js +53 -12
  103. package/dist/tools/run_kilo.js.map +1 -1
  104. package/dist/tools/run_openclaw.d.ts.map +1 -1
  105. package/dist/tools/run_openclaw.js +42 -7
  106. package/dist/tools/run_openclaw.js.map +1 -1
  107. package/dist/tools/run_opencode.d.ts.map +1 -1
  108. package/dist/tools/run_opencode.js +42 -7
  109. package/dist/tools/run_opencode.js.map +1 -1
  110. package/dist/tools/run_qwencli.d.ts.map +1 -1
  111. package/dist/tools/run_qwencli.js +32 -5
  112. package/dist/tools/run_qwencli.js.map +1 -1
  113. package/package.json +7 -2
  114. package/dist/test_all_mistral.d.ts +0 -2
  115. package/dist/test_all_mistral.d.ts.map +0 -1
  116. package/dist/test_all_mistral.js +0 -23
  117. package/dist/test_all_mistral.js.map +0 -1
  118. package/dist/test_hermes.d.ts +0 -2
  119. package/dist/test_hermes.d.ts.map +0 -1
  120. package/dist/test_hermes.js +0 -16
  121. package/dist/test_hermes.js.map +0 -1
package/dist/bin/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import fs from 'fs';
3
3
  import path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
+ import { PassThrough } from 'stream';
5
6
  const __filename = fileURLToPath(import.meta.url);
6
7
  const __dirname = path.dirname(__filename);
7
8
  // Helper to manually parse .env without any noisy console.logs from external packages (dotenvx corrupts MCP JSON streams)
@@ -14,9 +15,7 @@ function loadEnvQuietly(envPath) {
14
15
  if (match) {
15
16
  const key = match[1];
16
17
  let value = match[2] || '';
17
- // Remove inline comments and trailing spaces
18
18
  value = value.replace(/\s*#.*$/, '').trim();
19
- // Remove surrounding quotes if present
20
19
  if (value.startsWith('"') && value.endsWith('"'))
21
20
  value = value.slice(1, -1);
22
21
  else if (value.startsWith("'") && value.endsWith("'"))
@@ -31,24 +30,340 @@ function loadEnvQuietly(envPath) {
31
30
  // Ignore silently
32
31
  }
33
32
  }
33
+ // 🪄 Auto-formatteur de .env — Classifie tous les providers connus, préserve les valeurs
34
+ function autoFormatEnvFile(envPath) {
35
+ try {
36
+ if (!fs.existsSync(envPath))
37
+ return;
38
+ const content = fs.readFileSync(envPath, 'utf8');
39
+ // Parser robuste : ignore commentaires, lit les lignes KEY=VALUE (valeur peut contenir '=')
40
+ const envVars = {};
41
+ for (const line of content.split('\n')) {
42
+ const trimmed = line.trim();
43
+ if (!trimmed || trimmed.startsWith('#'))
44
+ continue;
45
+ const eqIdx = trimmed.indexOf('=');
46
+ if (eqIdx === -1)
47
+ continue;
48
+ const key = trimmed.slice(0, eqIdx).trim();
49
+ const value = trimmed.slice(eqIdx + 1).trim();
50
+ if (key)
51
+ envVars[key] = value;
52
+ }
53
+ if (Object.keys(envVars).length === 0)
54
+ return;
55
+ const usedKeys = new Set();
56
+ // Tri naturel pour les clés avec suffixes numériques (KEY, KEY_2, KEY_3…)
57
+ function naturalSort(pairs) {
58
+ return pairs.sort((a, b) => a[0].localeCompare(b[0], undefined, { numeric: true, sensitivity: 'base' }));
59
+ }
60
+ function extract(prefix, exactMatch = false) {
61
+ const res = [];
62
+ const prefixes = Array.isArray(prefix) ? prefix : [prefix];
63
+ for (const key of Object.keys(envVars)) {
64
+ if (usedKeys.has(key))
65
+ continue;
66
+ const matches = exactMatch
67
+ ? prefixes.includes(key)
68
+ : prefixes.some((p) => key.startsWith(p));
69
+ if (matches) {
70
+ res.push([key, envVars[key]]);
71
+ usedKeys.add(key);
72
+ }
73
+ }
74
+ return naturalSort(res);
75
+ }
76
+ // ─── SECTIONS ──────────────────────────────────────────────────────────────
77
+ const sections = [
78
+ // ── Overmind Infrastructure ──
79
+ {
80
+ title: '🌐 OVERMIND CORE & INFRASTRUCTURE',
81
+ vars: extract(['OVERMIND_WORKSPACE', 'OVERMIND_MEMORY_TYPE'], true),
82
+ },
83
+ { title: '⚙️ GLOBAL SETTINGS', vars: extract(['API_TIMEOUT_MS'], true) },
84
+ { title: '🗄️ DATABASE (PostgreSQL / pgvector)', vars: extract('POSTGRES_') },
85
+ { title: '🧠 EMBEDDINGS & VECTOR MEMORY', vars: extract('OVERMIND_EMBEDDING_') },
86
+ // ── LLM Providers (Europe / USA) ──
87
+ { title: '🤖 LLM PROVIDER - Mistral AI 🇫🇷', vars: extract('MISTRAL_') },
88
+ { title: '🤖 LLM PROVIDER - OpenAI 🇺🇸', vars: extract('OPENAI_') },
89
+ { title: '🤖 LLM PROVIDER - Anthropic 🇺🇸', vars: extract('ANTHROPIC_') },
90
+ {
91
+ title: '🤖 LLM PROVIDER - Google Gemini 🇺🇸',
92
+ vars: extract(['GEMINI_API_KEY', 'GEMINI_MODEL', 'GOOGLE_API_KEY', 'GOOGLE_GENERATIVE_AI_API_KEY'], true),
93
+ },
94
+ {
95
+ title: '🤖 LLM PROVIDER - NVIDIA NIM 🇺🇸',
96
+ vars: [
97
+ ...extract(['NVAPI_KEY', 'NVIDIA_API_KEY', 'NVIDIA_API_BASE'], true),
98
+ ...extract('NVIDIA_'),
99
+ ],
100
+ },
101
+ {
102
+ title: '🤖 LLM PROVIDER - OpenRouter 🇺🇸',
103
+ vars: extract(['OPENROUTER_API_KEY', 'OPENROUTER_BASE_URL', 'OPENROUTER_MODEL'], true),
104
+ },
105
+ {
106
+ title: '🤖 LLM PROVIDER - xAI / Grok 🇺🇸',
107
+ vars: extract(['XAI_API_KEY', 'XAI_BASE_URL', 'GROK_API_KEY', 'GROK_MODEL'], true),
108
+ },
109
+ { title: '🤖 LLM PROVIDER - Groq 🇺🇸', vars: extract('GROQ_') },
110
+ { title: '🤖 LLM PROVIDER - Together AI 🇺🇸', vars: extract('TOGETHER_') },
111
+ { title: '🤖 LLM PROVIDER - Cohere 🇺🇸', vars: extract('COHERE_') },
112
+ { title: '🤖 LLM PROVIDER - Replicate 🇺🇸', vars: extract('REPLICATE_') },
113
+ {
114
+ title: '🤖 LLM PROVIDER - HuggingFace 🇺🇸',
115
+ vars: extract(['HUGGINGFACE_API_KEY', 'HF_TOKEN', 'HUGGING_FACE_HUB_TOKEN'], true),
116
+ },
117
+ { title: '🤖 LLM PROVIDER - Perplexity 🇺🇸', vars: extract('PERPLEXITY_') },
118
+ { title: '🤖 LLM PROVIDER - SambaNova 🇺🇸', vars: extract('SAMBANOVA_') },
119
+ {
120
+ title: '🤖 LLM PROVIDER - Azure OpenAI ☁️',
121
+ vars: extract([
122
+ 'AZURE_API_KEY',
123
+ 'AZURE_API_BASE',
124
+ 'AZURE_OPENAI_API_KEY',
125
+ 'AZURE_OPENAI_ENDPOINT',
126
+ 'AZURE_OPENAI_API_VERSION',
127
+ ], true),
128
+ },
129
+ {
130
+ title: '🤖 LLM PROVIDER - ElevenLabs 🎙️',
131
+ vars: extract(['ELEVENLABS_API_KEY', 'ELEVENLABS_VOICE_ID', 'ELEVENLABS_MODEL_ID'], true),
132
+ },
133
+ {
134
+ title: '🤖 LLM PROVIDER - AWS Bedrock ☁️',
135
+ vars: extract([
136
+ 'AWS_ACCESS_KEY_ID',
137
+ 'AWS_SECRET_ACCESS_KEY',
138
+ 'AWS_SESSION_TOKEN',
139
+ 'AWS_REGION',
140
+ 'AWS_DEFAULT_REGION',
141
+ 'AWS_ENDPOINT_URL',
142
+ ], true),
143
+ },
144
+ // ── LLM Providers (Chine / Asie) ──
145
+ { title: '🤖 LLM PROVIDER - DeepSeek 🇨🇳', vars: extract('DEEPSEEK_') },
146
+ { title: '🤖 LLM PROVIDER - Alibaba DashScope 🇨🇳', vars: extract('ALIBABA_') },
147
+ {
148
+ title: '🤖 LLM PROVIDER - Qwen (DashScope) 🇨🇳',
149
+ vars: extract([
150
+ 'QWEN_API_KEY',
151
+ 'QWEN_BASE_URL',
152
+ 'QWEN_MODEL',
153
+ 'DASHSCOPE_API_KEY',
154
+ 'DASHSCOPE_BASE_URL',
155
+ ], true),
156
+ },
157
+ { title: '🤖 LLM PROVIDER - SiliconFlow 🇨🇳', vars: extract('SILICONFLOW_') },
158
+ {
159
+ title: '🤖 LLM PROVIDER - Minimax 🇨🇳',
160
+ vars: [...extract('MINIMAXI_'), ...extract('MINIMAX_')],
161
+ },
162
+ { title: '🤖 LLM PROVIDER - Ilmu AI / Z.AI 🇨🇳', vars: extract('Z_AI_') },
163
+ {
164
+ title: '🤖 LLM PROVIDER - Moonshot / Kimi 🇨🇳',
165
+ vars: extract(['MOONSHOT_API_KEY', 'MOONSHOT_BASE_URL', 'MOONSHOT_MODEL', 'KIMI_API_KEY'], true),
166
+ },
167
+ {
168
+ title: '🤖 LLM PROVIDER - Baidu / ERNIE 🇨🇳',
169
+ vars: extract(['BAIDU_API_KEY', 'ERNIE_API_KEY', 'WENXIN_API_KEY'], true),
170
+ },
171
+ {
172
+ title: '🤖 LLM PROVIDER - ZhipuAI / GLM 🇨🇳',
173
+ vars: [...extract(['ZHIPU_API_KEY', 'GLM_API_KEY'], true), ...extract('ZHIPUAI_')],
174
+ },
175
+ // ── Services & Intégrations ──
176
+ {
177
+ title: '💬 SERVICE - Discord',
178
+ vars: extract([
179
+ 'DISCORD_TOKEN',
180
+ 'DISCORD_BOT_TOKEN',
181
+ 'DISCORD_CHANNEL_ID',
182
+ 'DISCORD_GUILD_ID',
183
+ 'DISCORD_WEBHOOK_URL',
184
+ 'DISCORD_CLIENT_ID',
185
+ 'DISCORD_CLIENT_SECRET',
186
+ ], true),
187
+ },
188
+ {
189
+ title: '🐦 SERVICE - Twitter / X',
190
+ vars: extract([
191
+ 'TWITTER_API_KEY',
192
+ 'TWITTER_API_SECRET',
193
+ 'TWITTER_ACCESS_TOKEN',
194
+ 'TWITTER_ACCESS_SECRET',
195
+ 'TWITTER_BEARER_TOKEN',
196
+ 'X_API_KEY',
197
+ 'X_BEARER_TOKEN',
198
+ 'X_API_SECRET',
199
+ 'X_ACCESS_TOKEN',
200
+ 'X_ACCESS_SECRET',
201
+ ], true),
202
+ },
203
+ {
204
+ title: '📱 SERVICE - Telegram',
205
+ vars: extract(['TELEGRAM_BOT_TOKEN', 'TELEGRAM_CHAT_ID'], true),
206
+ },
207
+ {
208
+ title: '📱 SERVICE - Twilio / SMS',
209
+ vars: extract([
210
+ 'TWILIO_ACCOUNT_SID',
211
+ 'TWILIO_AUTH_TOKEN',
212
+ 'TWILIO_PHONE_NUMBER',
213
+ 'TWILIO_API_KEY',
214
+ 'TWILIO_API_SECRET',
215
+ ], true),
216
+ },
217
+ {
218
+ title: '🐙 SERVICE - GitHub',
219
+ vars: extract([
220
+ 'GITHUB_TOKEN',
221
+ 'GITHUB_API_KEY',
222
+ 'GH_TOKEN',
223
+ 'GITHUB_CLIENT_ID',
224
+ 'GITHUB_CLIENT_SECRET',
225
+ ], true),
226
+ },
227
+ {
228
+ title: '▲ SERVICE - Vercel',
229
+ vars: extract([
230
+ 'VERCEL_TOKEN',
231
+ 'VERCEL_API_TOKEN',
232
+ 'VERCEL_PROJECT_ID',
233
+ 'VERCEL_ORG_ID',
234
+ 'VERCEL_TEAM_ID',
235
+ ], true),
236
+ },
237
+ {
238
+ title: '🔺 SERVICE - Supabase',
239
+ vars: extract(['SUPABASE_URL', 'SUPABASE_ANON_KEY', 'SUPABASE_SERVICE_ROLE_KEY', 'SUPABASE_JWT_SECRET'], true),
240
+ },
241
+ { title: '🎮 SERVICE - Riot Games', vars: extract(['RIOT_API_KEY', 'RIOT_REGION'], true) },
242
+ {
243
+ title: '🔍 SERVICE - Search (Serper/Tavily)',
244
+ vars: extract(['SERPER_API_KEY', 'TAVILY_API_KEY', 'SERPAPI_KEY', 'BRAVE_SEARCH_API_KEY'], true),
245
+ },
246
+ {
247
+ title: '📰 SERVICE - Market Data & News',
248
+ vars: extract([
249
+ 'FINNHUB_API_KEY',
250
+ 'NEWSAPI_KEY',
251
+ 'ALPHAVANTAGE_API_KEY',
252
+ 'POLYGON_API_KEY',
253
+ 'TIINGO_API_KEY',
254
+ ], true),
255
+ },
256
+ ];
257
+ // Clés restantes non classifiées → section fourre-tout
258
+ const uncategorized = [];
259
+ for (const key of Object.keys(envVars)) {
260
+ if (!usedKeys.has(key))
261
+ uncategorized.push([key, envVars[key]]);
262
+ }
263
+ if (uncategorized.length > 0) {
264
+ sections.push({ title: '📁 AUTRES / NON-CLASSIFIÉS', vars: naturalSort(uncategorized) });
265
+ }
266
+ // ─── RENDU ──────────────────────────────────────────────────────────────────
267
+ let newContent = '';
268
+ for (const section of sections) {
269
+ if (section.vars.length > 0) {
270
+ newContent += `# ==========================================\n`;
271
+ newContent += `# ${section.title}\n`;
272
+ newContent += `# ==========================================\n`;
273
+ for (const [k, v] of section.vars) {
274
+ newContent += `${k}=${v}\n`;
275
+ }
276
+ newContent += `\n`;
277
+ }
278
+ }
279
+ // N'écrire sur le disque que si quelque chose a changé (optimisation I/O)
280
+ if (content.trim() !== newContent.trim()) {
281
+ fs.writeFileSync(envPath, newContent.trim() + '\n', 'utf8');
282
+ }
283
+ }
284
+ catch (_e) {
285
+ // Ignorer silencieusement pour ne pas crasher le boot
286
+ }
287
+ }
288
+ const localEnvPath = path.resolve(__dirname, '../../.env');
289
+ // Auto-détection et injection de OVERMIND_WORKSPACE s'il est manquant
290
+ try {
291
+ const workspacePath = path.resolve(__dirname, '../../');
292
+ if (!fs.existsSync(localEnvPath)) {
293
+ fs.writeFileSync(localEnvPath, `OVERMIND_WORKSPACE=${workspacePath}\n`, 'utf8');
294
+ }
295
+ else {
296
+ const currentContent = fs.readFileSync(localEnvPath, 'utf8');
297
+ if (!currentContent.includes('OVERMIND_WORKSPACE=')) {
298
+ fs.appendFileSync(localEnvPath, `\nOVERMIND_WORKSPACE=${workspacePath}\n`, 'utf8');
299
+ }
300
+ }
301
+ }
302
+ catch (_e) {
303
+ // Ignorer l'erreur silencieusement
304
+ }
305
+ // Classifie et réorganise automatiquement le .env à chaque démarrage d'Overmind
306
+ autoFormatEnvFile(localEnvPath);
34
307
  // Load OverMind's specific environment variables
35
- loadEnvQuietly(path.resolve(__dirname, '../../.env'));
308
+ loadEnvQuietly(localEnvPath);
36
309
  // Inherit PostgreSQL Server environment variables (Database credentials, Embeddings)
37
310
  loadEnvQuietly(path.resolve(__dirname, '../../../serveur_PostGreSQL/.env'));
38
- // Suppress experimental warnings (like node:sqlite) to avoid breaking MCP handshake
39
- process.removeAllListeners('warning');
311
+ // 🔍 Vérification des configurations critiques
312
+ function checkMissingConfigs() {
313
+ const missingCore = [];
314
+ const missingDb = [];
315
+ // Vérification CORE
316
+ if (!process.env.OVERMIND_WORKSPACE)
317
+ missingCore.push('OVERMIND_WORKSPACE');
318
+ if (!process.env.OVERMIND_MEMORY_TYPE)
319
+ missingCore.push('OVERMIND_MEMORY_TYPE');
320
+ // Vérification DB
321
+ if (!process.env.POSTGRES_HOST)
322
+ missingDb.push('POSTGRES_HOST');
323
+ if (!process.env.POSTGRES_DATABASE)
324
+ missingDb.push('POSTGRES_DATABASE');
325
+ if (!process.env.POSTGRES_USER)
326
+ missingDb.push('POSTGRES_USER');
327
+ if (!process.env.POSTGRES_PASSWORD)
328
+ missingDb.push('POSTGRES_PASSWORD');
329
+ if (missingCore.length > 0) {
330
+ console.error(`\n[Overmind] ⚠️ ATTENTION : Configuration 'CORE & INFRASTRUCTURE' incomplète !`);
331
+ console.error(`[Overmind] ❌ Il manque : ${missingCore.join(', ')}\n`);
332
+ }
333
+ if (missingDb.length > 0) {
334
+ console.error(`\n[Overmind] ⚠️ ATTENTION : Configuration 'DATABASE' incomplète (Imported from postgresql-server) !`);
335
+ console.error(`[Overmind] ❌ Il manque : ${missingDb.join(', ')}\n`);
336
+ }
337
+ }
338
+ checkMissingConfigs();
339
+ import { rootLogger } from '../lib/logger.js';
40
340
  // 💥 ERROR HANDLING: Catch everything to avoid silent EOFs
41
341
  process.on('uncaughtException', (err) => {
42
- console.error('💥 UNCAUGHT EXCEPTION:', err);
342
+ rootLogger.fatal({ err }, '💥 UNCAUGHT EXCEPTION');
343
+ rootLogger.flush();
344
+ process.exit(1);
43
345
  });
44
346
  process.on('unhandledRejection', (reason, promise) => {
45
- console.error('💥 UNHANDLED REJECTION at:', promise, 'reason:', reason);
347
+ rootLogger.fatal({ reason, promise }, '💥 UNHANDLED REJECTION');
348
+ rootLogger.flush();
349
+ });
350
+ // Ensure logs are flushed on exit
351
+ process.on('SIGINT', () => {
352
+ rootLogger.info('🛑 Received SIGINT, flushing logs...');
353
+ rootLogger.flush();
354
+ process.exit(0);
355
+ });
356
+ process.on('SIGTERM', () => {
357
+ rootLogger.info('🛑 Received SIGTERM, flushing logs...');
358
+ rootLogger.flush();
359
+ process.exit(0);
46
360
  });
47
361
  // 🛡️ SHIELD: Prevent any library from logging to stdout during initialization
48
362
  // This is critical for MCP servers because any non-JSON output on stdout kills the handshake (EOF).
49
- console.log = (...args) => console.error(...args);
50
- console.info = (...args) => console.error(...args);
51
- console.warn = (...args) => console.error(...args);
363
+ console.log = (...args) => rootLogger.info(args.length > 1 ? { args } : args[0]);
364
+ console.info = (...args) => rootLogger.info(args.length > 1 ? { args } : args[0]);
365
+ console.warn = (...args) => rootLogger.warn(args.length > 1 ? { args } : args[0]);
366
+ console.error = (...args) => rootLogger.error(args.length > 1 ? { args } : args[0]);
52
367
  // 🛡️ ULTIMATE SHIELD: Proxy process.stdout.write to redirect non-JSON data to stderr
53
368
  const originalStdoutWrite = process.stdout.write.bind(process.stdout);
54
369
  process.stdout.write = function (chunk, encoding, callback) {
@@ -59,13 +374,124 @@ process.stdout.write = function (chunk, encoding, callback) {
59
374
  callback = encoding;
60
375
  encoding = undefined;
61
376
  }
62
- // Allow JSON-RPC (starts with {) and empty/newline chunks (often used by transport)
63
- if (trimmed.startsWith('{') || trimmed === '') {
377
+ // Skip empty chunks or pure whitespace (often used as delimiters/keep-alive)
378
+ if (trimmed === '') {
64
379
  return originalStdoutWrite(chunk, encoding, callback);
65
380
  }
66
- // Redirect everything else to stderr
381
+ // Allow JSON-RPC (starts with { or [)
382
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
383
+ try {
384
+ const parsed = JSON.parse(trimmed);
385
+ // BLOCK ARRAYS on stdout (Batch responses are not standard in MCP)
386
+ if (Array.isArray(parsed)) {
387
+ rootLogger.warn({ raw: str }, '🛡️ [SHIELD] Blocked array-as-JSON-RPC on stdout');
388
+ return process.stderr.write(chunk, encoding, callback);
389
+ }
390
+ // Check for JSON-RPC (Response or Notification)
391
+ if (parsed.jsonrpc === '2.0') {
392
+ return originalStdoutWrite(chunk, encoding, callback);
393
+ }
394
+ // Block non-RPC JSON
395
+ rootLogger.warn({ raw: str }, '🛡️ [SHIELD] Blocked non-JSON-RPC (Object) on stdout');
396
+ return process.stderr.write(chunk, encoding, callback);
397
+ }
398
+ catch (e) {
399
+ // Malformed JSON-like content
400
+ rootLogger.debug({ raw: str, err: e.message }, '🛡️ [SHIELD] Blocked malformed JSON-like content on stdout');
401
+ return process.stderr.write(chunk, encoding, callback);
402
+ }
403
+ }
404
+ // Redirect everything else to stderr (via Pino)
405
+ rootLogger.debug({ raw: trimmed }, '🛡️ [SHIELD] Intercepted non-JSON stdout write');
67
406
  return process.stderr.write(chunk, encoding, callback);
68
407
  };
408
+ // 🛡️ STDIN INTERCEPTOR: Detect and unroll JSON-RPC Batches [req1, req2]
409
+ // FastMCP/Zod only support single objects. Intercepting before FastMCP starts.
410
+ // FIX: batch chunks may arrive split across multiple data events — buffer until
411
+ // bracket-balanced so endsWith(']') is reliable even for large/fragmented batches.
412
+ const originalStdin = process.stdin;
413
+ const stdinProxy = new PassThrough();
414
+ let stdinBuffer = '';
415
+ function tryFlushBatch(raw) {
416
+ const trimmed = raw.trim();
417
+ if (!trimmed.startsWith('['))
418
+ return false;
419
+ // Count brackets to detect a complete batch (handles nested objects inside items)
420
+ let depth = 0;
421
+ let inString = false;
422
+ let escape = false;
423
+ for (const ch of trimmed) {
424
+ if (escape) {
425
+ escape = false;
426
+ continue;
427
+ }
428
+ if (ch === '\\' && inString) {
429
+ escape = true;
430
+ continue;
431
+ }
432
+ if (ch === '"') {
433
+ inString = !inString;
434
+ continue;
435
+ }
436
+ if (inString)
437
+ continue;
438
+ if (ch === '[' || ch === '{')
439
+ depth++;
440
+ else if (ch === ']' || ch === '}')
441
+ depth--;
442
+ }
443
+ if (depth !== 0)
444
+ return false; // incomplete — keep buffering
445
+ try {
446
+ const parsed = JSON.parse(trimmed);
447
+ if (Array.isArray(parsed)) {
448
+ rootLogger.warn({ count: parsed.length }, '[SHIELD] Unrolling JSON-RPC BATCH on STDIN');
449
+ for (const item of parsed) {
450
+ stdinProxy.write(JSON.stringify(item) + '\n');
451
+ }
452
+ return true;
453
+ }
454
+ }
455
+ catch (_e) {
456
+ // Malformed JSON — fall through, pass raw to FastMCP
457
+ }
458
+ return false;
459
+ }
460
+ originalStdin.on('data', (chunk) => {
461
+ const str = chunk.toString();
462
+ const trimmed = str.trim();
463
+ // 🔍 [DEBUG] Log every incoming chunk that looks like JSON
464
+ if (trimmed.startsWith('{') || trimmed.startsWith('[')) {
465
+ rootLogger.debug({
466
+ length: trimmed.length,
467
+ preview: trimmed.substring(0, 100),
468
+ isBatch: trimmed.startsWith('['),
469
+ }, '[SHIELD] STDIN chunk received');
470
+ }
471
+ // Accumulate batch fragments until bracket-balanced
472
+ if (stdinBuffer.length > 0 || trimmed.startsWith('[')) {
473
+ stdinBuffer += str;
474
+ if (tryFlushBatch(stdinBuffer)) {
475
+ stdinBuffer = '';
476
+ return;
477
+ }
478
+ // Still incomplete — keep buffering (but cap to 1MB to avoid unbounded growth)
479
+ if (stdinBuffer.length < 1_048_576)
480
+ return;
481
+ // Overflow: flush raw and reset
482
+ rootLogger.warn({ length: stdinBuffer.length }, '[SHIELD] STDIN batch buffer overflow — flushing raw');
483
+ stdinProxy.write(stdinBuffer);
484
+ stdinBuffer = '';
485
+ return;
486
+ }
487
+ stdinProxy.write(chunk);
488
+ });
489
+ // Hijack process.stdin for FastMCP and any other consumers
490
+ Object.defineProperty(process, 'stdin', {
491
+ value: stdinProxy,
492
+ writable: false,
493
+ configurable: true,
494
+ });
69
495
  // Setup completed - Dynamically import server components AFTER process.env is configured
70
496
  const { createServer } = await import('../server.js');
71
497
  const { updateConfig } = await import('../lib/config.js');
@@ -86,7 +512,7 @@ if (settingsPath || mcpPath) {
86
512
  // Do NOT log to stderr during MCP initialization as it can cause EOF errors in some clients
87
513
  }
88
514
  const server = createServer();
89
- console.error(`[Overmind] 🚀 Démarrage du serveur...`);
515
+ rootLogger.info('[Overmind] [START] Démarrage du serveur...');
90
516
  server.start({ transportType: 'stdio' });
91
- console.error(`[Overmind] Serveur prêt sur STDIO.`);
517
+ rootLogger.info('[Overmind] [READY] Serveur prêt sur STDIO.');
92
518
  //# sourceMappingURL=cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/bin/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"InstallHelper.d.ts","sourceRoot":"","sources":["../../src/lib/InstallHelper.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAiEjD,CAAC;AAEF,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCtG"}
1
+ {"version":3,"file":"InstallHelper.d.ts","sourceRoot":"","sources":["../../src/lib/InstallHelper.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAiEjD,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA+C5C"}
@@ -7,7 +7,7 @@ export const CLIS_METADATA = {
7
7
  command: 'claude',
8
8
  versionCmd: 'claude --version',
9
9
  installCmd: 'npm install -g @anthropic-ai/claude-code',
10
- url: 'https://www.npmjs.com/package/@anthropic-ai/claude-code'
10
+ url: 'https://www.npmjs.com/package/@anthropic-ai/claude-code',
11
11
  },
12
12
  kilo: {
13
13
  name: 'Kilo Code',
@@ -15,57 +15,57 @@ export const CLIS_METADATA = {
15
15
  versionCmd: 'kilo --version',
16
16
  installCmd: 'npm install -g kilo-auto',
17
17
  url: 'https://github.com/Kilo-Org/kilocode',
18
- requiredVersion: '7.2.14'
18
+ requiredVersion: '7.2.14',
19
19
  },
20
20
  qwencli: {
21
21
  name: 'Qwen Code CLI',
22
22
  command: 'qwen',
23
23
  versionCmd: 'qwen --version',
24
24
  installCmd: 'npm install -g @qwen-code/qwen-code',
25
- url: 'https://www.npmjs.com/package/@qwen-code/qwen-code'
25
+ url: 'https://www.npmjs.com/package/@qwen-code/qwen-code',
26
26
  },
27
27
  hermes: {
28
28
  name: 'Hermes Agent',
29
29
  command: 'hermes',
30
30
  versionCmd: 'hermes --version',
31
31
  installCmd: 'pip install git+https://github.com/NousResearch/hermes-agent.git',
32
- url: 'https://github.com/NousResearch/hermes-agent'
32
+ url: 'https://github.com/NousResearch/hermes-agent',
33
33
  },
34
34
  gemini: {
35
35
  name: 'Gemini CLI',
36
36
  command: 'gemini',
37
37
  versionCmd: 'gemini --version',
38
38
  installCmd: 'npm install -g @google/gemini-cli',
39
- url: 'https://github.com/google/gemini-cli'
39
+ url: 'https://github.com/google/gemini-cli',
40
40
  },
41
41
  openclaw: {
42
42
  name: 'OpenClaw',
43
43
  command: 'openclaw',
44
44
  versionCmd: 'openclaw --version',
45
45
  installCmd: 'npm install -g openclaw',
46
- url: 'https://github.com/OpenClaw/OpenClaw'
46
+ url: 'https://github.com/OpenClaw/OpenClaw',
47
47
  },
48
48
  cline: {
49
49
  name: 'Cline CLI',
50
50
  command: 'cline',
51
51
  versionCmd: 'cline --version',
52
52
  installCmd: 'npm install -g cline',
53
- url: 'https://github.com/cline/cline'
53
+ url: 'https://github.com/cline/cline',
54
54
  },
55
55
  opencode: {
56
56
  name: 'OpenCode',
57
57
  command: 'opencode',
58
58
  versionCmd: 'opencode --version',
59
59
  installCmd: 'npm install -g opencode',
60
- url: 'https://github.com/OpenCode/OpenCode'
60
+ url: 'https://github.com/OpenCode/OpenCode',
61
61
  },
62
62
  trae: {
63
63
  name: 'Trae CLI',
64
64
  command: 'trae',
65
65
  versionCmd: 'trae --version',
66
66
  installCmd: 'https://www.trae.ai/download',
67
- url: 'https://www.trae.ai/'
68
- }
67
+ url: 'https://www.trae.ai/',
68
+ },
69
69
  };
70
70
  export async function verifyInstallation(runnerKey) {
71
71
  const meta = CLIS_METADATA[runnerKey];
@@ -80,13 +80,14 @@ export async function verifyInstallation(runnerKey) {
80
80
  try {
81
81
  const { stdout } = await execAsync(meta.versionCmd);
82
82
  const version = stdout.trim();
83
- if (!version.includes(meta.requiredVersion) && !version.startsWith(meta.requiredVersion.split('.')[0])) {
83
+ if (!version.includes(meta.requiredVersion) &&
84
+ !version.startsWith(meta.requiredVersion.split('.')[0])) {
84
85
  return {
85
86
  ok: false,
86
87
  message: `⚠️ **Version Incorrecte pour ${meta.name}** : détectée ${version} (Attendu: ${meta.requiredVersion})\n\n` +
87
88
  `Veuillez mettre à jour le CLI pour garantir la compatibilité :\n` +
88
89
  `\`${meta.installCmd}\`\n\n` +
89
- `Plus d'infos : ${meta.url}`
90
+ `Plus d'infos : ${meta.url}`,
90
91
  };
91
92
  }
92
93
  }
@@ -105,7 +106,7 @@ export async function verifyInstallation(runnerKey) {
105
106
  `**Comment l'installer :**\n` +
106
107
  `1. Exécutez : \`${meta.installCmd}\`\n` +
107
108
  `2. Ou téléchargez le kit ici : ${meta.url}\n\n` +
108
- `Une fois installé, redémarrez votre terminal ou le serveur MCP.`
109
+ `Une fois installé, redémarrez votre terminal ou le serveur MCP.`,
109
110
  };
110
111
  }
111
112
  }