gm-codex 2.0.935 → 2.0.937

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-codex",
3
- "version": "2.0.935",
3
+ "version": "2.0.937",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",
package/bin/bootstrap.js CHANGED
@@ -338,6 +338,7 @@ async function bootstrap(opts) {
338
338
  log(`installed ${finalPath}`);
339
339
  obsEvent('bootstrap', 'install.done', { path: finalPath, version, kind: 'plugkit' });
340
340
  pruneOldVersions(root, version);
341
+ proactiveKillForNewInstall(version);
341
342
  // Best-effort rtk fetch: failures here never block plugkit usage
342
343
  try { await bootstrapRtk(verDir, version, wrapperDir, opts.silent); }
343
344
  catch (err) { log(`rtk fetch skipped: ${err.message}`); }
@@ -439,23 +440,67 @@ function writeDaemonVersion(v) {
439
440
  try { fs.writeFileSync(daemonVersionSentinel(), String(v)); } catch (_) {}
440
441
  }
441
442
 
443
+ function killPid(pid) {
444
+ if (!Number.isFinite(pid) || pid === process.pid || !pidAlive(pid)) return false;
445
+ try { process.kill(pid, 'SIGTERM'); }
446
+ catch (_) { try { process.kill(pid); } catch (_) {} }
447
+ if (os.platform() === 'win32' && pidAlive(pid)) {
448
+ try {
449
+ const { spawnSync } = require('child_process');
450
+ spawnSync('taskkill', ['/F', '/PID', String(pid)], { stdio: 'ignore', windowsHide: true });
451
+ } catch (_) {}
452
+ }
453
+ return true;
454
+ }
455
+
442
456
  function killRunningDaemons(reason) {
443
457
  const tmp = os.tmpdir();
444
- let killed = 0;
458
+ const killedPids = [];
445
459
  for (const pidFile of ['glootie-runner.pid', 'plugkit-runner.pid']) {
446
460
  const pidPath = path.join(tmp, pidFile);
447
461
  if (!fs.existsSync(pidPath)) continue;
448
462
  try {
449
463
  const pid = parseInt(fs.readFileSync(pidPath, 'utf8').trim(), 10);
450
- if (Number.isFinite(pid) && pid !== process.pid && pidAlive(pid)) {
451
- try { process.kill(pid, 'SIGTERM'); killed++; }
452
- catch (_) { try { process.kill(pid); killed++; } catch (_) {} }
464
+ if (killPid(pid)) {
465
+ killedPids.push(pid);
453
466
  obsEvent('bootstrap', 'daemon.killed', { pid, pidFile, reason });
454
467
  }
455
468
  try { fs.unlinkSync(pidPath); } catch (_) {}
456
469
  } catch (_) {}
457
470
  }
458
- return killed;
471
+ return killedPids;
472
+ }
473
+
474
+ function killSpoolWatcherInCwd(reason) {
475
+ try {
476
+ const pidPath = path.join(process.cwd(), '.gm', 'exec-spool', '.watcher.pid');
477
+ if (!fs.existsSync(pidPath)) return null;
478
+ const pid = parseInt(fs.readFileSync(pidPath, 'utf8').trim(), 10);
479
+ if (killPid(pid)) {
480
+ obsEvent('bootstrap', 'watcher.killed', { pid, reason });
481
+ try { fs.unlinkSync(pidPath); } catch (_) {}
482
+ return pid;
483
+ }
484
+ try { fs.unlinkSync(pidPath); } catch (_) {}
485
+ } catch (_) {}
486
+ return null;
487
+ }
488
+
489
+ function proactiveKillForNewInstall(installedVersion) {
490
+ try {
491
+ const recorded = readDaemonVersion();
492
+ if (recorded === installedVersion) return;
493
+ const reason = `install:${recorded || 'none'}->${installedVersion}`;
494
+ const killed = killRunningDaemons(reason);
495
+ const watcherPid = killSpoolWatcherInCwd(reason);
496
+ if (killed.length || watcherPid) {
497
+ const parts = [];
498
+ if (killed.length) parts.push(`daemon pid=${killed.join(',')} v${recorded || '?'}`);
499
+ if (watcherPid) parts.push(`watcher pid=${watcherPid}`);
500
+ try { process.stderr.write(`[bootstrap] killed stale ${parts.join(' + ')}, new binary ${installedVersion} ready\n`); } catch (_) {}
501
+ }
502
+ writeDaemonVersion(installedVersion);
503
+ } catch (_) {}
459
504
  }
460
505
 
461
506
  // Compare wrapper-pinned version against last-recorded daemon version. If
@@ -469,7 +514,7 @@ function killStaleDaemonIfVersionChanged(wrapperDir) {
469
514
  writeDaemonVersion(currentVersion);
470
515
  }
471
516
 
472
- module.exports = { bootstrap, resolveCachedBinary, resolveCachedRtk, platformKey, binaryName, rtkBinaryName, cacheRoot, obsEvent, killRunningDaemons, killStaleDaemonIfVersionChanged };
517
+ module.exports = { bootstrap, resolveCachedBinary, resolveCachedRtk, platformKey, binaryName, rtkBinaryName, cacheRoot, obsEvent, killRunningDaemons, killStaleDaemonIfVersionChanged, killSpoolWatcherInCwd, proactiveKillForNewInstall };
473
518
 
474
519
  if (require.main === module) {
475
520
  bootstrap({ silent: false })
@@ -1,6 +1,6 @@
1
- 2f008909f0fe9783acedc685470eab681002d43be40eae977017187539925986 plugkit-win32-x64.exe
2
- f246d023148a1f65f7a7bde08e9dccc83841c068a5b1dd34f46e37d766d8a236 plugkit-win32-arm64.exe
3
- 07a2d3b3e95b0ac17261c0dfa6866f003e45d570fddbcba39ac863c57f311b39 plugkit-darwin-x64
4
- a00b35762b2fbfca1cca4e4c3eae40ec211a801bb7d996eb1946383f25316941 plugkit-darwin-arm64
5
- 278234afe8d11822b2d87e900b34c0a574951820fbeacf27d576ebadc396fa7c plugkit-linux-x64
6
- b268c52275223d119f0b9d5f85671b98d3c24c222f53515604e14db16d1fb509 plugkit-linux-arm64
1
+ 4f3d001235da9db1a3185a9bbde831d684db76ac941c21199c5ad82dd91a20a8 plugkit-win32-x64.exe
2
+ af4f10c319b0b996ae1006637763dd41d353409c13378b78b1996bacec749064 plugkit-win32-arm64.exe
3
+ 4917fb7127480cf3ddc4e9ff8a1ab513a45c208227a6c374ebea416ec5dd6140 plugkit-darwin-x64
4
+ 0199429db63bb4f8d899812f4537ca9880c55482e54558a97c73d0d6c967adad plugkit-darwin-arm64
5
+ e106662a6089df18384af48609ea23946ce4418a6b3d36d5b78fd7c4db2cf496 plugkit-linux-x64
6
+ f87714cfe084cec4ed648484460280f9d16c371edef6c0d75bc6460326b7fb43 plugkit-linux-arm64
@@ -1 +1 @@
1
- 0.1.313
1
+ 0.1.314
package/bin/rtk.sha256 CHANGED
@@ -1,5 +1,5 @@
1
- f81c23c123617c67e9a4f61b98bfccf5604c19b9daca2f6a7eaae2d8b50bb7ae rtk-win32-x64.exe
2
- 67a5d550e1e3259b6d4a857a80bbe319e92a4ee1b2f9aaca4925ad5265e6a153 rtk-win32-arm64.exe
1
+ 94434f01ae5e8761b9af5e5dfbc0b9931bba58f69969c869378e0d1189b590f1 rtk-win32-x64.exe
2
+ 50c6d37252de7b1894eb786b6a8e5a980f0c1b2684b1e1bf661c941e566bcebc rtk-win32-arm64.exe
3
3
  1b1e792767ed0e1e6ca0e2f0a8de02e77b06dea2f5ae667278b94baf239fcdc3 rtk-darwin-x64
4
4
  9717978d9d6216ea50c94444e00e359479b6315a17bd48c16064b267c8b0b60d rtk-darwin-arm64
5
5
  a100d3defac54194144e5723aec57e6f286b42298c67145c8428815246c9ee56 rtk-linux-x64
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.935",
3
+ "version": "2.0.937",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -23,5 +23,5 @@
23
23
  "publishConfig": {
24
24
  "access": "public"
25
25
  },
26
- "plugkitVersion": "0.1.313"
26
+ "plugkitVersion": "0.1.314"
27
27
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-codex",
3
- "version": "2.0.935",
3
+ "version": "2.0.937",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.935",
3
+ "version": "2.0.937",
4
4
  "description": "State machine agent with hooks, skills, and automated git enforcement",
5
5
  "author": {
6
6
  "name": "AnEntrypoint",