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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.216",
3
+ "version": "2.0.218",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "homepage": "https://github.com/AnEntrypoint/gm",
@@ -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 spawnCwd = cwd || (lang === 'agent-browser' ? process.cwd() : undefined);
283
- const opts = { encoding: 'utf-8', timeout: 60000, windowsHide: true, ...(spawnCwd && { cwd: spawnCwd }), ...(stdin !== undefined && { input: stdin }) };
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
- const abBin = fs.existsSync(localBin('agent-browser')) ? localBin('agent-browser') : 'agent-browser';
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-gc",
3
- "version": "2.0.216",
3
+ "version": "2.0.218",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",