overmind-mcp 2.8.6 → 2.8.7

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 (80) hide show
  1. package/bin/launch.bat +40 -0
  2. package/bin/launch.js +78 -0
  3. package/bin/launch.sh +46 -0
  4. package/bin/restart_mcp.bat +3 -0
  5. package/bin/start_server.bat +3 -0
  6. package/bin/test_mcp.bat +4 -0
  7. package/dist/bin/cli.js +13 -0
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/bin/launch.js +78 -0
  10. package/dist/bridge/BridgeProxy.d.ts +52 -0
  11. package/dist/bridge/BridgeProxy.d.ts.map +1 -0
  12. package/dist/bridge/BridgeProxy.js +265 -0
  13. package/dist/bridge/BridgeProxy.js.map +1 -0
  14. package/dist/bridge/OverBridgeService.d.ts +96 -0
  15. package/dist/bridge/OverBridgeService.d.ts.map +1 -0
  16. package/dist/bridge/OverBridgeService.js +334 -0
  17. package/dist/bridge/OverBridgeService.js.map +1 -0
  18. package/dist/bridge/index.d.ts +11 -0
  19. package/dist/bridge/index.d.ts.map +1 -0
  20. package/dist/bridge/index.js +11 -0
  21. package/dist/bridge/index.js.map +1 -0
  22. package/dist/bridge/types.d.ts +132 -0
  23. package/dist/bridge/types.d.ts.map +1 -0
  24. package/dist/bridge/types.js +19 -0
  25. package/dist/bridge/types.js.map +1 -0
  26. package/dist/bridge/utils.d.ts +48 -0
  27. package/dist/bridge/utils.d.ts.map +1 -0
  28. package/dist/bridge/utils.js +128 -0
  29. package/dist/bridge/utils.js.map +1 -0
  30. package/dist/lib/config.d.ts.map +1 -1
  31. package/dist/lib/config.js +11 -4
  32. package/dist/lib/config.js.map +1 -1
  33. package/dist/lib/envUtils.d.ts +2 -0
  34. package/dist/lib/envUtils.d.ts.map +1 -1
  35. package/dist/lib/envUtils.js +13 -2
  36. package/dist/lib/envUtils.js.map +1 -1
  37. package/dist/lib/logger.js +1 -1
  38. package/dist/lib/processRegistry.d.ts.map +1 -1
  39. package/dist/lib/processRegistry.js +34 -21
  40. package/dist/lib/processRegistry.js.map +1 -1
  41. package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
  42. package/dist/memory/PostgresMemoryProvider.js +14 -3
  43. package/dist/memory/PostgresMemoryProvider.js.map +1 -1
  44. package/dist/server.d.ts.map +1 -1
  45. package/dist/server.js +2 -1
  46. package/dist/server.js.map +1 -1
  47. package/dist/services/AgentManager.d.ts.map +1 -1
  48. package/dist/services/AgentManager.js +473 -97
  49. package/dist/services/AgentManager.js.map +1 -1
  50. package/dist/services/GeminiRunner.d.ts +18 -16
  51. package/dist/services/GeminiRunner.d.ts.map +1 -1
  52. package/dist/services/GeminiRunner.js +112 -126
  53. package/dist/services/GeminiRunner.js.map +1 -1
  54. package/dist/services/NousHermesRunner.d.ts.map +1 -1
  55. package/dist/services/NousHermesRunner.js +172 -56
  56. package/dist/services/NousHermesRunner.js.map +1 -1
  57. package/dist/tools/agent_control.d.ts +1 -1
  58. package/dist/tools/agent_control.d.ts.map +1 -1
  59. package/dist/tools/agent_control.js +4 -3
  60. package/dist/tools/agent_control.js.map +1 -1
  61. package/dist/tools/config_example.d.ts +1 -1
  62. package/dist/tools/create_agent.d.ts +1 -1
  63. package/dist/tools/manage_agents.d.ts +1 -1
  64. package/dist/tools/run_agent.d.ts +1 -1
  65. package/dist/tools/run_agent.d.ts.map +1 -1
  66. package/dist/tools/run_agent.js +3 -0
  67. package/dist/tools/run_agent.js.map +1 -1
  68. package/dist/tools/run_agents_parallel.d.ts +1 -1
  69. package/dist/tools/run_hermes.d.ts +1 -0
  70. package/dist/tools/run_hermes.d.ts.map +1 -1
  71. package/dist/tools/run_hermes.js +22 -15
  72. package/dist/tools/run_hermes.js.map +1 -1
  73. package/docs/provider-config-map.md +170 -105
  74. package/package.json +8 -10
  75. package/scripts/_db_check.py +10 -0
  76. package/scripts/status_check.py +20 -0
  77. package/dist/services/AntigravityRunner.d.ts +0 -42
  78. package/dist/services/AntigravityRunner.d.ts.map +0 -1
  79. package/dist/services/AntigravityRunner.js +0 -404
  80. package/dist/services/AntigravityRunner.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "name": "overmind-mcp",
3
- "version": "2.8.6",
4
- "preferGlobal": true,
3
+ "version": "2.8.7",
5
4
  "description": "Orchestrateur universel agents IA multi-modeles via MCP. Inclut le protocole 'Custom-Nickname' pour identifier vos agents avec des surnoms originaux (The Chaos Prophet, Shadow Sniper, etc.), l'isolation mémoire (Private Memory Context) et le support pour QwenCli et Nous Hermes. Installation automatique des dépendances Docker (PostgreSQL, pgvector) inclus.",
6
5
  "type": "module",
7
6
  "main": "dist/index.js",
@@ -45,14 +44,15 @@
45
44
  "version": "changeset version && node scripts/auto-changelog.mjs",
46
45
  "release": "pnpm run build && changeset publish",
47
46
  "prepublishOnly": "pnpm run rebuild",
48
- "postinstall": "node scripts/postinstall.mjs || exit 0",
47
+ "postinstall": "node scripts/postinstall.mjs",
49
48
  "setup": "overmind-setup",
50
49
  "setup:deps": "node scripts/install-dependencies.mjs",
51
50
  "postgres:up": "overmind-postgres-mcp up",
52
51
  "postgres:down": "overmind-postgres-mcp down",
53
52
  "postgres:status": "overmind-postgres-mcp status",
54
53
  "postgres:logs": "overmind-postgres-mcp logs",
55
- "postgres:reset": "overmind-postgres-mcp reset"
54
+ "postgres:reset": "overmind-postgres-mcp reset",
55
+ "prebuild": "node -e \"try{require('fs').copyFileSync('bin/launch.js','dist/bin/launch.js');console.log('Copied launch.js')}catch{console.log('dist/bin not ready yet')}\""
56
56
  },
57
57
  "keywords": [
58
58
  "mcp",
@@ -76,8 +76,8 @@
76
76
  "url": "https://discord.gg/4AR82phtBz"
77
77
  },
78
78
  "homepage": "https://deamondev888.github.io/overmind-mcp/",
79
- "engines": {
80
- "node": ">=20.0.0 <=25"
79
+ "engines": {
80
+ "node": ">=20.0.0"
81
81
  },
82
82
  "packageManager": "pnpm@10.18.0",
83
83
  "devDependencies": {
@@ -85,10 +85,10 @@
85
85
  "@eslint/js": "^10.0.1",
86
86
  "@types/node": "^25.6.2",
87
87
  "@types/pg": "^8.20.0",
88
- "@types/pino": "^7.0.5",
89
88
  "eslint": "^10.3.0",
90
89
  "eslint-config-prettier": "^10.1.8",
91
90
  "globals": "^17.6.0",
91
+ "pino-pretty": "^13.1.3",
92
92
  "prettier": "^3.8.3",
93
93
  "rimraf": "^6.1.3",
94
94
  "typescript": "^6.0.3",
@@ -102,13 +102,11 @@
102
102
  "overmind-postgres-mcp": "^1.3.0",
103
103
  "pg": "^8.20.0",
104
104
  "pino": "^10.3.1",
105
- "pino-pretty": "^13.1.3",
106
105
  "pino-roll": "^4.0.0",
107
106
  "tinyglobby": "^0.2.16",
108
- "tslib": "^2.8.1",
109
107
  "zod": "^4.4.3"
110
108
  },
111
109
  "peerDependencies": {
112
110
  "tslib": "^2.0.0"
113
111
  }
114
- }
112
+ }
@@ -0,0 +1,10 @@
1
+
2
+ import psycopg2
3
+ conn = psycopg2.connect(host="localhost", port=5432, dbname="financial_analyst", user="postgres")
4
+ cur = conn.cursor()
5
+ cur.execute("SELECT id, ligne, qte, description FROM bt_materiaux WHERE bon_id = 5 ORDER BY ligne")
6
+ rows = cur.fetchall()
7
+ print("MATERIAUX_BON5:", len(rows))
8
+ for r in rows:
9
+ print("LIGNE", r[1], "QTE", r[2], "DESC:", r[3][:80])
10
+ conn.close()
@@ -0,0 +1,20 @@
1
+ import psycopg2
2
+ conn = psycopg2.connect(host='localhost', port=5433, dbname='financial_analyst', user='postgres')
3
+ cur = conn.cursor()
4
+ cur.execute('''SELECT s.id, s.date_debut, s.date_fin, c.no_contrat, e.nom as employe
5
+ FROM bt_semaines s
6
+ JOIN bt_contrats c ON s.contrat_id = c.id
7
+ JOIN bt_employes e ON s.employe_id = e.id
8
+ ORDER BY s.date_debut DESC LIMIT 5''')
9
+ rows = cur.fetchall()
10
+ print('Dernieres semaines:')
11
+ for r in rows:
12
+ print(f' ID={r[0]} | {r[1]} a {r[2]} | contrat={r[3]} | employe={r[4]}')
13
+
14
+ cur.execute('SELECT COUNT(*) FROM bt_semaines')
15
+ print(f'Total semaines: {cur.fetchone()[0]}')
16
+
17
+ cur.execute('SELECT COUNT(*) FROM bt_employes WHERE actif=true')
18
+ print(f'Employes actifs: {cur.fetchone()[0]}')
19
+
20
+ conn.close()
@@ -1,42 +0,0 @@
1
- /**
2
- * AntigravityRunner — Exécute des agents IA via Antigravity IDE CLI
3
- *
4
- * Antigravity CLI est le runner natif de Google pour l'agent Antigravity.
5
- * Il est bundlé dans Antigravity IDE (C:\Users\Deamon\AppData\Local\Programs\Antigravity IDE\)
6
- *
7
- *-différences avec l'ancien gemini-cli:
8
- * - CLI intégré n'utilise pas npm (@google/gemini-cli)
9
- * - Authentification via Google OAuth interne (pas de fichier .env externe)
10
- * - Configuration par projet via .antigravity/ local
11
- * - Modes: GENERAL, CONTEXT_CHECK, PLAN, COMMAND, CASCADE, EVAL, ANTIGRAVITY_REVIEW, etc.
12
- */
13
- export interface RunAgentOptions {
14
- prompt: string;
15
- agentName?: string;
16
- sessionId?: string;
17
- autoResume?: boolean;
18
- cwd?: string;
19
- configPath?: string;
20
- silent?: boolean;
21
- model?: string;
22
- /** Mode Antigravity (défaut: GENERAL) */
23
- mode?: 'GENERAL' | 'CONTEXT_CHECK' | 'PLAN' | 'COMMAND' | 'CASCADE' | 'EVAL' | 'ANTIGRAVITY_REVIEW' | 'MQUERY' | 'COMMIT_MESSAGE' | 'CHECKPOINT' | 'FAST_APPLY';
24
- }
25
- export interface RunAgentResult {
26
- result: string;
27
- sessionId?: string;
28
- error?: string;
29
- rawOutput?: string;
30
- model?: string;
31
- nickname?: string;
32
- fallbackUsed?: string;
33
- }
34
- export declare class AntigravityRunner {
35
- private config;
36
- private timeoutMs;
37
- private tempFiles;
38
- constructor();
39
- private cleanupTempFiles;
40
- runAgent(options: RunAgentOptions): Promise<RunAgentResult>;
41
- }
42
- //# sourceMappingURL=AntigravityRunner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AntigravityRunner.d.ts","sourceRoot":"","sources":["../../src/services/AntigravityRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAsGH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE,SAAS,GAAG,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,oBAAoB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAC;CACjK;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAgB;;IAOjC,OAAO,CAAC,gBAAgB;IAclB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAiXlE"}
@@ -1,404 +0,0 @@
1
- /**
2
- * AntigravityRunner — Exécute des agents IA via Antigravity IDE CLI
3
- *
4
- * Antigravity CLI est le runner natif de Google pour l'agent Antigravity.
5
- * Il est bundlé dans Antigravity IDE (C:\Users\Deamon\AppData\Local\Programs\Antigravity IDE\)
6
- *
7
- *-différences avec l'ancien gemini-cli:
8
- * - CLI intégré n'utilise pas npm (@google/gemini-cli)
9
- * - Authentification via Google OAuth interne (pas de fichier .env externe)
10
- * - Configuration par projet via .antigravity/ local
11
- * - Modes: GENERAL, CONTEXT_CHECK, PLAN, COMMAND, CASCADE, EVAL, ANTIGRAVITY_REVIEW, etc.
12
- */
13
- import fs from 'fs';
14
- import path from 'path';
15
- import { spawn } from 'child_process';
16
- import { CONFIG, resolveConfigPath } from '../lib/config.js';
17
- import { getLastSessionId, saveSessionId } from '../lib/sessions.js';
18
- import { interpolateEnvVars } from '../lib/envUtils.js';
19
- import { withSpan } from '../lib/telemetry.js';
20
- import { loadEnvQuietly } from '../lib/loadEnv.js';
21
- import pino from 'pino';
22
- import { registerProcess, linkSessionToPid, appendOutput, updateProcessStatus, killProcessTree, } from '../lib/processRegistry.js';
23
- const logger = pino({ name: 'AntigravityRunner' });
24
- // ============================================================================
25
- // CHEMINS ANTIGRAVITY (nouveaux pour Antigravity)
26
- // ============================================================================
27
- /** Dossier d'installation d'Antigravity IDE */
28
- const ANTIGRAVITY_IDE_PATH = path.join(process.env.LOCALAPPDATA || '', 'Programs', 'Antigravity IDE');
29
- /** CLI Antigravity (Electron wrapper) */
30
- const ANTIGRAVITY_CLI_EXE = path.join(ANTIGRAVITY_IDE_PATH, 'Antigravity IDE.exe');
31
- /** Resources/app pour les outils internes */
32
- const ANTIGRAVITY_RESOURCES_APP = path.join(ANTIGRAVITY_IDE_PATH, 'resources', 'app');
33
- /** Bin containing language_server */
34
- const ANTIGRAVITY_BIN = path.join(ANTIGRAVITY_RESOURCES_APP, 'extensions', 'antigravity', 'bin');
35
- /** Language server pour les opérations de code */
36
- const ANTIGRAVITY_LANGUAGE_SERVER = path.join(ANTIGRAVITY_BIN, 'language_server_windows_x64.exe');
37
- /** Dossier .antigravity local par agent */
38
- function getAgentAntigravityDir(agentName, configPath) {
39
- const baseDir = configPath || process.cwd();
40
- return path.resolve(baseDir, '.antigravity', agentName ? `agent_${agentName}` : 'default');
41
- }
42
- /**
43
- * Vérifie si Antigravity IDE est installé
44
- */
45
- function isAntigravityInstalled() {
46
- return fs.existsSync(ANTIGRAVITY_CLI_EXE);
47
- }
48
- /**
49
- * Récupère le CLI à utiliser (Antigravity ou fallback)
50
- */
51
- function getAntigravityCommand() {
52
- if (isAntigravityInstalled()) {
53
- // Utiliser Antigravity IDE CLI (Electron-based)
54
- return {
55
- command: ANTIGRAVITY_CLI_EXE,
56
- args: [],
57
- useElectron: true,
58
- };
59
- }
60
- // Fallback: pas d'Antigravity installé
61
- return {
62
- command: 'echo',
63
- args: ['Antigravity IDE non installé'],
64
- useElectron: false,
65
- };
66
- }
67
- // ============================================================================
68
- // ANTIGRAVITYRUNNER
69
- // ============================================================================
70
- export class AntigravityRunner {
71
- config;
72
- timeoutMs;
73
- tempFiles = [];
74
- constructor() {
75
- this.config = CONFIG.CLAUDE;
76
- this.timeoutMs = CONFIG.TIMEOUT_MS || 900000; // 15 min default
77
- }
78
- cleanupTempFiles() {
79
- for (const tempFile of this.tempFiles) {
80
- try {
81
- if (fs.existsSync(tempFile)) {
82
- fs.unlinkSync(tempFile);
83
- logger.debug({ tempFile }, 'Cleaned up temp file');
84
- }
85
- }
86
- catch (err) {
87
- logger.warn({ tempFile, error: err }, 'Failed to cleanup temp file');
88
- }
89
- }
90
- this.tempFiles = [];
91
- }
92
- async runAgent(options) {
93
- // Load .env files first
94
- const cwd = options.cwd || process.cwd();
95
- loadEnvQuietly(path.join(cwd, '.env'));
96
- loadEnvQuietly(path.join(cwd, '../Workflow/.env'));
97
- const { prompt, agentName, autoResume, mode = 'GENERAL' } = options;
98
- let { sessionId } = options;
99
- const { PATHS } = this.config;
100
- // ========================================================================
101
- // VÉRIFICATION ANTIGRAVITY
102
- // ========================================================================
103
- if (!isAntigravityInstalled()) {
104
- return {
105
- result: '',
106
- error: `ANTIGRAVITY_NOT_INSTALLED: Antigravity IDE non trouvé.\nInstallez depuis: C:\\Users\\Deamon\\AppData\\Local\\Programs\\Antigravity IDE\\Antigravity IDE.exe`,
107
- };
108
- }
109
- // ========================================================================
110
- // ENV + SESSION
111
- // ========================================================================
112
- const agentCustomEnv = {
113
- ...process.env,
114
- ...(agentName ? { OVERMIND_AGENT_NAME: agentName } : {}),
115
- };
116
- // Auto Resume
117
- if (autoResume && agentName && !sessionId) {
118
- const lastId = await getLastSessionId(agentName, options.configPath, 'antigravity');
119
- if (lastId) {
120
- sessionId = lastId;
121
- }
122
- }
123
- // ========================================================================
124
- // SYSTEM PROMPT LOADING
125
- // ========================================================================
126
- let finalPrompt = prompt;
127
- if (agentName) {
128
- try {
129
- const settingsDir = path.dirname(PATHS.SETTINGS);
130
- let agentPromptPath = resolveConfigPath(path.join(settingsDir, 'agents', `${agentName}.md`), options.configPath);
131
- if (!fs.existsSync(agentPromptPath)) {
132
- agentPromptPath = resolveConfigPath(path.join(path.dirname(settingsDir), 'agents', `${agentName}.md`), options.configPath);
133
- }
134
- if (fs.existsSync(agentPromptPath)) {
135
- const systemPrompt = fs.readFileSync(agentPromptPath, 'utf8');
136
- finalPrompt = `${systemPrompt}\n\n[USER QUERY]:\n${prompt}`;
137
- }
138
- }
139
- catch (err) {
140
- logger.warn({ agentName, error: err }, 'Failed to load agent prompt');
141
- }
142
- }
143
- // ========================================================================
144
- // ANTIGRAVITY CONFIG (oauth, settings, mcp)
145
- // ========================================================================
146
- const agentAntigravityDir = getAgentAntigravityDir(agentName, options.configPath);
147
- // Créer le dossier .antigravity/<agent> si nécessaire
148
- if (!fs.existsSync(agentAntigravityDir)) {
149
- fs.mkdirSync(agentAntigravityDir, { recursive: true });
150
- }
151
- // IMPORTANT: Antigravity utilise son propre système d'auth OAuth
152
- // Pas besoin de sync les creds comme avec gemini-cli (c'était pour Gemini)
153
- // Antigravity a son propre token store dans %APPDATA%/Antigravity/
154
- // ========================================================================
155
- // MCP CONFIG POUR ANTIGRAVITY
156
- // ========================================================================
157
- const mcpPath = path.join(agentAntigravityDir, 'mcp.json');
158
- if (agentName) {
159
- const settingsDir = path.dirname(PATHS.SETTINGS);
160
- const agentSettingsPath = resolveConfigPath(path.join(settingsDir, `settings_${agentName}.json`), options.configPath);
161
- if (fs.existsSync(agentSettingsPath)) {
162
- let settings = JSON.parse(fs.readFileSync(agentSettingsPath, 'utf8'));
163
- settings = interpolateEnvVars(settings);
164
- if (settings.env) {
165
- Object.assign(agentCustomEnv, settings.env);
166
- }
167
- // Copier le MCP config si existant
168
- const originalMcpPath = resolveConfigPath(PATHS.MCP, options.configPath);
169
- if (fs.existsSync(originalMcpPath)) {
170
- const fullMcp = JSON.parse(fs.readFileSync(originalMcpPath, 'utf8'));
171
- let mcpToUse = fullMcp;
172
- if (settings.enableAllProjectMcpServers === false &&
173
- Array.isArray(settings.enabledMcpjsonServers)) {
174
- const filteredMcp = { mcpServers: {} };
175
- for (const serverName of settings.enabledMcpjsonServers) {
176
- if (fullMcp.mcpServers && fullMcp.mcpServers[serverName]) {
177
- filteredMcp.mcpServers[serverName] = fullMcp.mcpServers[serverName];
178
- }
179
- }
180
- mcpToUse = filteredMcp;
181
- }
182
- fs.writeFileSync(mcpPath, JSON.stringify(mcpToUse, null, 2));
183
- this.tempFiles.push(mcpPath);
184
- logger.info({ mcpPath }, 'MCP configuration synchronized for Antigravity');
185
- }
186
- }
187
- }
188
- // ========================================================================
189
- // SPAWN ANTIGRAVITY CLI
190
- // ========================================================================
191
- const isWin = process.platform === 'win32';
192
- // Antigravity utilise ELECTRON_RUN_AS_NODE pour invoquer le CLI interne
193
- const antigravityCmd = getAntigravityCommand();
194
- const argsSpawn = [];
195
- // Pour Antigravity CLI mode agent
196
- // Arguments via variables d'environnement + paramètres CLI
197
- if (antigravityCmd.useElectron) {
198
- // Antigravity CLI via Electron
199
- argsSpawn.push(ELECTRON_RUN_AS_NODE = '1', ANTIGRAVITY_CLI_EXE,
200
- // CLI args pour Antigravity
201
- '--chat', '--mode', mode, '--agent', agentName || 'default', '--project', agentAntigravityDir);
202
- }
203
- else {
204
- // Fallback - juste un message d'erreur
205
- argsSpawn.push('-c', `echo Antigravity non installé`);
206
- }
207
- // Mode Antigravity (pour le prompt)
208
- agentCustomEnv.ANTIGRAVITY_MODE = mode;
209
- agentCustomEnv.ANTIGRAVITY_PROJECT_DIR = agentAntigravityDir;
210
- agentCustomEnv.ANTIGRAVITY_AGENT_NAME = agentName || 'default';
211
- // Session si resume
212
- if (sessionId) {
213
- agentCustomEnv.ANTIGRAVITY_SESSION_ID = sessionId;
214
- }
215
- else if (autoResume) {
216
- agentCustomEnv.ANTIGRAVITY_RESUME = 'latest';
217
- }
218
- const runImpl = async (span) => {
219
- span.setAttribute('agentName', agentName || '');
220
- span.setAttribute('runner', 'antigravity');
221
- span.setAttribute('mode', mode);
222
- return new Promise((resolve) => {
223
- let resolved = false;
224
- const safeResolve = (value) => {
225
- if (!resolved) {
226
- resolved = true;
227
- resolve(value);
228
- }
229
- };
230
- // Construction de la commande
231
- let command;
232
- let spawnArgs;
233
- if (isAntigravityInstalled()) {
234
- // Exécuter via Electron en mode CLI
235
- command = process.execPath; // node
236
- spawnArgs = [
237
- ANTIGRAVITY_CLI_EXE,
238
- '--chat',
239
- '--mode', mode,
240
- ];
241
- // Ajouter le prompt via fichier temporaire pour éviter les problèmes de quotes
242
- const promptFile = path.join(agentAntigravityDir, '.prompt_temp.md');
243
- fs.writeFileSync(promptFile, finalPrompt, 'utf8');
244
- this.tempFiles.push(promptFile);
245
- spawnArgs.push('--prompt-file', promptFile);
246
- if (agentName) {
247
- spawnArgs.push('--agent', agentName);
248
- }
249
- if (sessionId) {
250
- spawnArgs.push('--resume', sessionId);
251
- }
252
- else if (autoResume) {
253
- spawnArgs.push('--resume', 'latest');
254
- }
255
- // Config Antigravity
256
- spawnArgs.push('--antigravity-dir', agentAntigravityDir);
257
- spawnArgs.push('--output-format', 'json');
258
- spawnArgs.push('--approval-mode', 'yolo');
259
- }
260
- else {
261
- command = 'echo';
262
- spawnArgs = ['Antigravity IDE non installé'];
263
- }
264
- const child = spawn(command, spawnArgs, {
265
- cwd: options.cwd || process.cwd(),
266
- shell: false,
267
- windowsHide: true,
268
- env: agentCustomEnv,
269
- });
270
- // Register process
271
- if (child.pid) {
272
- void registerProcess(child.pid, {
273
- agentName: agentName || '',
274
- runner: 'antigravity',
275
- configPath: options.configPath,
276
- });
277
- }
278
- let stdout = '';
279
- let stderr = '';
280
- const MAX_BUF = 10 * 1024 * 1024;
281
- const cleanup = () => {
282
- child.stdout?.removeAllListeners();
283
- child.stderr?.removeAllListeners();
284
- child.removeAllListeners();
285
- };
286
- child.stdout?.on('data', (data) => {
287
- const d = data.toString();
288
- if (child.pid && d) {
289
- void appendOutput(child.pid, d, options.configPath);
290
- }
291
- if (stdout.length + d.length > MAX_BUF)
292
- stdout = stdout.slice(-MAX_BUF);
293
- else
294
- stdout += d;
295
- });
296
- child.stderr?.on('data', (data) => {
297
- const d = data.toString();
298
- if (child.pid && d) {
299
- void appendOutput(child.pid, d, options.configPath);
300
- }
301
- if (stderr.length + d.length > MAX_BUF)
302
- stderr = stderr.slice(-MAX_BUF);
303
- else
304
- stderr += d;
305
- });
306
- const timeout = setTimeout(async () => {
307
- if (child.pid)
308
- await killProcessTree(child.pid);
309
- else
310
- child.kill();
311
- await new Promise((res) => setTimeout(res, 5000));
312
- if (!child.killed) {
313
- if (child.pid)
314
- await killProcessTree(child.pid);
315
- else
316
- child.kill('SIGKILL');
317
- }
318
- if (child.pid) {
319
- void updateProcessStatus(child.pid, 'failed', null, options.configPath);
320
- }
321
- cleanup();
322
- safeResolve({ result: '', error: 'TIMEOUT', rawOutput: stdout + stderr });
323
- }, this.timeoutMs);
324
- child.on('error', (err) => {
325
- clearTimeout(timeout);
326
- safeResolve({ result: '', error: `SPAWN_ERROR: ${err.message}`, rawOutput: '' });
327
- });
328
- child.on('close', async (code) => {
329
- clearTimeout(timeout);
330
- cleanup();
331
- if (code !== 0 && !stdout) {
332
- return safeResolve({
333
- result: '',
334
- error: code === 41 ? '🔑 Erreur Auth/API Key (OAuth/GCloud)' : `EXIT_CODE_${code}`,
335
- rawOutput: stderr,
336
- });
337
- }
338
- try {
339
- let jsonOutput = null;
340
- const trimmedStdout = stdout.trim();
341
- try {
342
- jsonOutput = JSON.parse(trimmedStdout);
343
- }
344
- catch (_) {
345
- // Parser failure - try to extract JSON from output
346
- const lastBrace = trimmedStdout.lastIndexOf('}');
347
- const firstBrace = trimmedStdout.lastIndexOf('{', lastBrace);
348
- if (firstBrace !== -1 && lastBrace !== -1) {
349
- try {
350
- jsonOutput = JSON.parse(trimmedStdout.substring(firstBrace, lastBrace + 1));
351
- }
352
- catch {
353
- // Ignore parsing errors
354
- }
355
- }
356
- }
357
- if (jsonOutput) {
358
- const resultText = jsonOutput.reply ||
359
- jsonOutput.result ||
360
- jsonOutput.output ||
361
- stdout.trim();
362
- const newSessionId = jsonOutput.session_id || sessionId;
363
- if (newSessionId && agentName) {
364
- await saveSessionId(agentName, newSessionId, options.configPath, 'antigravity');
365
- if (child.pid) {
366
- void linkSessionToPid(newSessionId, child.pid, options.configPath);
367
- }
368
- }
369
- return safeResolve({
370
- result: resultText,
371
- sessionId: newSessionId,
372
- rawOutput: stdout,
373
- });
374
- }
375
- // No JSON - return raw output
376
- safeResolve({
377
- result: stdout.trim(),
378
- sessionId: sessionId,
379
- rawOutput: stdout,
380
- });
381
- }
382
- catch {
383
- safeResolve({
384
- result: stdout.trim(),
385
- sessionId: sessionId,
386
- rawOutput: stdout,
387
- });
388
- }
389
- });
390
- if (child.stdin) {
391
- child.stdin.end();
392
- }
393
- });
394
- };
395
- const result = await withSpan('antigravity.runAgent', runImpl, {
396
- agentName: agentName || '',
397
- runner: 'antigravity',
398
- });
399
- // Cleanup
400
- this.cleanupTempFiles();
401
- return result;
402
- }
403
- }
404
- //# sourceMappingURL=AntigravityRunner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AntigravityRunner.js","sourceRoot":"","sources":["../../src/services/AntigravityRunner.ts"],"names":[],"mappings":"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"}