gm-gc 2.0.216 → 2.0.218
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/gemini-extension.json +1 -1
- package/hooks/pre-tool-use-hook.js +6 -50
- package/package.json +1 -1
package/gemini-extension.json
CHANGED
|
@@ -279,8 +279,9 @@ const run = () => {
|
|
|
279
279
|
const langExts = { nodejs: 'mjs', typescript: 'ts', deno: 'ts', python: 'py', bash: 'sh', powershell: 'ps1', go: 'go', rust: 'rs', c: 'c', cpp: 'cpp', java: 'java' };
|
|
280
280
|
|
|
281
281
|
const spawnDirect = (bin, args, stdin) => {
|
|
282
|
-
const
|
|
283
|
-
const
|
|
282
|
+
const isAb = lang === 'agent-browser';
|
|
283
|
+
const spawnCwd = cwd || (isAb ? process.cwd() : undefined);
|
|
284
|
+
const opts = { encoding: 'utf-8', timeout: 60000, windowsHide: true, ...(isAb && IS_WIN && { shell: true }), ...(spawnCwd && { cwd: spawnCwd }), ...(stdin !== undefined && { input: stdin }) };
|
|
284
285
|
const r = spawnSync(bin, args, opts);
|
|
285
286
|
if (!r.stdout && !r.stderr && r.error) return `[spawn error: ${r.error.message}]`;
|
|
286
287
|
const out = (r.stdout || '').trimEnd(), err = stripFooter(r.stderr || '').trimEnd();
|
|
@@ -365,47 +366,12 @@ const run = () => {
|
|
|
365
366
|
const wrapped = `const __result = await (async () => {\n${safeCode}\n})();\nif (__result !== undefined) { if (typeof __result === 'object') { console.log(JSON.stringify(__result, null, 2)); } else { console.log(__result); } }`;
|
|
366
367
|
result = runWithFile(lang || 'nodejs', wrapped);
|
|
367
368
|
} else if (lang === 'agent-browser') {
|
|
368
|
-
|
|
369
|
+
// agent-browser reads agent-browser.json from cwd automatically (headed, profile, session, etc.)
|
|
370
|
+
// Just run with shell:true so .cmd wrappers resolve, and use process.cwd() so config is picked up
|
|
371
|
+
const abBin = 'agent-browser';
|
|
369
372
|
const AB_CMDS = new Set(['open','goto','navigate','close','quit','exit','back','forward','reload','click','dblclick','type','fill','press','check','uncheck','select','drag','upload','hover','focus','scroll','scrollintoview','wait','screenshot','pdf','snapshot','get','is','find','eval','connect','tab','frame','dialog','state','session','network','cookies','storage','set','trace','profiler','record','console','errors','highlight','inspect','diff','keyboard','mouse','install','upgrade','confirm','deny','auth','device','window']);
|
|
370
373
|
const AB_GLOBAL_FLAGS = new Set(['--cdp','--headed','--headless','--session','--session-name','--auto-connect','--profile','--allow-file-access','--color-scheme','-p','--platform','--device']);
|
|
371
374
|
const AB_GLOBAL_FLAGS_WITH_VALUE = new Set(['--cdp','--session','--session-name','--profile','--color-scheme','-p','--platform','--device']);
|
|
372
|
-
function loadAbProfile(dir) {
|
|
373
|
-
if (!dir) return { flags: [], env: {} };
|
|
374
|
-
const candidates = ['agent-browser.json', '.agent-browser.json'];
|
|
375
|
-
for (const name of candidates) {
|
|
376
|
-
try {
|
|
377
|
-
const cfg = JSON.parse(fs.readFileSync(path.join(dir, name), 'utf8'));
|
|
378
|
-
const flags = [], env = {};
|
|
379
|
-
if (cfg.headed) { flags.push('--headed'); env.AGENT_BROWSER_HEADED = '1'; }
|
|
380
|
-
if (cfg.headless) flags.push('--headless');
|
|
381
|
-
if (cfg.profile) { flags.push('--profile', cfg.profile); env.AGENT_BROWSER_PROFILE = cfg.profile; }
|
|
382
|
-
if (cfg.cdp) flags.push('--cdp', String(cfg.cdp));
|
|
383
|
-
if (cfg.platform || cfg.p) flags.push('-p', cfg.platform || cfg.p);
|
|
384
|
-
if (cfg.device) flags.push('--device', cfg.device);
|
|
385
|
-
if (cfg['allow-file-access']) flags.push('--allow-file-access');
|
|
386
|
-
if (cfg['color-scheme']) { flags.push('--color-scheme', cfg['color-scheme']); env.AGENT_BROWSER_COLOR_SCHEME = cfg['color-scheme']; }
|
|
387
|
-
return { flags, env };
|
|
388
|
-
} catch {}
|
|
389
|
-
}
|
|
390
|
-
return { flags: [], env: {} };
|
|
391
|
-
}
|
|
392
|
-
const { flags: abProfileFlags, env: abProfileEnv } = loadAbProfile(process.cwd());
|
|
393
|
-
// If profile config exists and no daemon is running, pre-start the daemon with correct cwd
|
|
394
|
-
if (abProfileFlags.length > 0) {
|
|
395
|
-
const portFile = path.join(os.tmpdir(), 'agent-shell.port');
|
|
396
|
-
const daemonRunning = fs.existsSync(portFile);
|
|
397
|
-
if (!daemonRunning) {
|
|
398
|
-
// Start daemon in background from correct cwd so it picks up agent-browser.json
|
|
399
|
-
require('child_process').spawn(abBin, ['open', 'about:blank'], {
|
|
400
|
-
detached: true, stdio: 'ignore',
|
|
401
|
-
cwd: process.cwd(),
|
|
402
|
-
env: { ...process.env, ...abProfileEnv },
|
|
403
|
-
windowsHide: true
|
|
404
|
-
}).unref();
|
|
405
|
-
// Wait for daemon to bind
|
|
406
|
-
spawnSync('cmd.exe', ['/c', 'ping -n 3 127.0.0.1 > nul'], { windowsHide: true, timeout: 5000 });
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
375
|
const AB_SESSION_STATE = path.join(os.tmpdir(), 'gm-ab-sessions.json');
|
|
410
376
|
function readAbSessions() { try { return JSON.parse(fs.readFileSync(AB_SESSION_STATE, 'utf8')); } catch { return {}; } }
|
|
411
377
|
function writeAbSessions(s) { try { fs.writeFileSync(AB_SESSION_STATE, JSON.stringify(s)); } catch {} }
|
|
@@ -434,16 +400,6 @@ const run = () => {
|
|
|
434
400
|
if (isClose) delete sessions[sessionName];
|
|
435
401
|
writeAbSessions(sessions);
|
|
436
402
|
const openSessions = Object.entries(sessions);
|
|
437
|
-
function mergeProfileFlags(userGlobalArgs) {
|
|
438
|
-
const userFlagSet = new Set(userGlobalArgs.filter(f => f.startsWith('-')));
|
|
439
|
-
const filtered = [];
|
|
440
|
-
for (let i = 0; i < abProfileFlags.length; i++) {
|
|
441
|
-
const f = abProfileFlags[i];
|
|
442
|
-
if (f.startsWith('-') && userFlagSet.has(f)) { if (AB_GLOBAL_FLAGS_WITH_VALUE.has(f)) i++; continue; }
|
|
443
|
-
filtered.push(f);
|
|
444
|
-
}
|
|
445
|
-
return [...filtered, ...userGlobalArgs];
|
|
446
|
-
}
|
|
447
403
|
if (AB_CMDS.has(firstWord)) {
|
|
448
404
|
const lines = safeCode.split('\n').map(l => l.trim()).filter(Boolean);
|
|
449
405
|
if (lines.length === 1) {
|