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.
- package/bin/launch.bat +40 -0
- package/bin/launch.js +78 -0
- package/bin/launch.sh +46 -0
- package/bin/restart_mcp.bat +3 -0
- package/bin/start_server.bat +3 -0
- package/bin/test_mcp.bat +4 -0
- package/dist/bin/cli.js +13 -0
- package/dist/bin/cli.js.map +1 -1
- package/dist/bin/launch.js +78 -0
- package/dist/bridge/BridgeProxy.d.ts +52 -0
- package/dist/bridge/BridgeProxy.d.ts.map +1 -0
- package/dist/bridge/BridgeProxy.js +265 -0
- package/dist/bridge/BridgeProxy.js.map +1 -0
- package/dist/bridge/OverBridgeService.d.ts +96 -0
- package/dist/bridge/OverBridgeService.d.ts.map +1 -0
- package/dist/bridge/OverBridgeService.js +334 -0
- package/dist/bridge/OverBridgeService.js.map +1 -0
- package/dist/bridge/index.d.ts +11 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +11 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/types.d.ts +132 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +19 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/bridge/utils.d.ts +48 -0
- package/dist/bridge/utils.d.ts.map +1 -0
- package/dist/bridge/utils.js +128 -0
- package/dist/bridge/utils.js.map +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/envUtils.d.ts +2 -0
- package/dist/lib/envUtils.d.ts.map +1 -1
- package/dist/lib/envUtils.js +13 -2
- package/dist/lib/envUtils.js.map +1 -1
- package/dist/lib/logger.js +1 -1
- package/dist/lib/processRegistry.d.ts.map +1 -1
- package/dist/lib/processRegistry.js +34 -21
- package/dist/lib/processRegistry.js.map +1 -1
- package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -1
- package/dist/memory/PostgresMemoryProvider.js +14 -3
- package/dist/memory/PostgresMemoryProvider.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/services/AgentManager.d.ts.map +1 -1
- package/dist/services/AgentManager.js +473 -97
- package/dist/services/AgentManager.js.map +1 -1
- package/dist/services/GeminiRunner.d.ts +18 -16
- package/dist/services/GeminiRunner.d.ts.map +1 -1
- package/dist/services/GeminiRunner.js +112 -126
- package/dist/services/GeminiRunner.js.map +1 -1
- package/dist/services/NousHermesRunner.d.ts.map +1 -1
- package/dist/services/NousHermesRunner.js +172 -56
- package/dist/services/NousHermesRunner.js.map +1 -1
- package/dist/tools/agent_control.d.ts +1 -1
- package/dist/tools/agent_control.d.ts.map +1 -1
- package/dist/tools/agent_control.js +4 -3
- package/dist/tools/agent_control.js.map +1 -1
- package/dist/tools/config_example.d.ts +1 -1
- package/dist/tools/create_agent.d.ts +1 -1
- package/dist/tools/manage_agents.d.ts +1 -1
- package/dist/tools/run_agent.d.ts +1 -1
- package/dist/tools/run_agent.d.ts.map +1 -1
- package/dist/tools/run_agent.js +3 -0
- package/dist/tools/run_agent.js.map +1 -1
- package/dist/tools/run_agents_parallel.d.ts +1 -1
- package/dist/tools/run_hermes.d.ts +1 -0
- package/dist/tools/run_hermes.d.ts.map +1 -1
- package/dist/tools/run_hermes.js +22 -15
- package/dist/tools/run_hermes.js.map +1 -1
- package/docs/provider-config-map.md +170 -105
- package/package.json +8 -10
- package/scripts/_db_check.py +10 -0
- package/scripts/status_check.py +20 -0
- package/dist/services/AntigravityRunner.d.ts +0 -42
- package/dist/services/AntigravityRunner.d.ts.map +0 -1
- package/dist/services/AntigravityRunner.js +0 -404
- 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.
|
|
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
|
|
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
|
-
|
|
80
|
-
"node": ">=20.0.0
|
|
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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"}
|