gm-skill 2.0.1263 → 2.0.1265

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/README.md CHANGED
@@ -35,7 +35,7 @@ An earlier generation fanned out fifteen per-platform downstream repos (gm-cc, g
35
35
 
36
36
  ## Version
37
37
 
38
- `2.0.1263` — auto-bumped from the canonical `gm` repo. Every push to `AnEntrypoint/gm` (or any cascading sibling crate) republishes this package.
38
+ `2.0.1265` — auto-bumped from the canonical `gm` repo. Every push to `AnEntrypoint/gm` (or any cascading sibling crate) republishes this package.
39
39
 
40
40
  ## Source of truth
41
41
 
package/bin/bootstrap.js CHANGED
@@ -257,6 +257,7 @@ async function extractNpmPackageWasm(destPath, version) {
257
257
  obsEvent('bootstrap', 'npm.extract.start', { package: NPM_PACKAGE, version });
258
258
 
259
259
  const npxResolved = resolveWindowsExe('npx');
260
+ const isCmdShim = process.platform === 'win32' && /\.(cmd|bat)$/i.test(npxResolved);
260
261
  const result = spawnSync(
261
262
  npxResolved,
262
263
  [NPM_PACKAGE + '@' + version, '--prefix', tempDir],
@@ -265,8 +266,7 @@ async function extractNpmPackageWasm(destPath, version) {
265
266
  timeout: ATTEMPT_TIMEOUT_MS,
266
267
  encoding: 'utf8',
267
268
  windowsHide: true,
268
- // CREATE_NO_WINDOW inherited by all .cmd shims npm/npx spawn
269
- // during package extraction, so no conhost flash during install.
269
+ ...(isCmdShim ? { shell: true } : {}),
270
270
  ...(process.platform === 'win32' ? { creationFlags: 0x08000000 } : {}),
271
271
  }
272
272
  );
@@ -304,6 +304,10 @@ async function extractNpmPackageWithRetry(destPath, version) {
304
304
  log(`npx binary unresolvable (ENOENT); skipping retries, falling back`);
305
305
  throw err;
306
306
  }
307
+ if (err && (err.code === 'EINVAL' || /EINVAL/.test(String(err.message || '')))) {
308
+ log(`spawn EINVAL on npx shim; skipping retries, falling back`);
309
+ throw err;
310
+ }
307
311
  if (attempt < MAX_ATTEMPTS) {
308
312
  const wait = BACKOFF_MS[attempt - 1] || 120000;
309
313
  log(`backing off ${wait}ms`);
@@ -205,6 +205,7 @@ async function extractNpmPackageWasm(destPath, version) {
205
205
 
206
206
  const cmd = resolveWindowsExe('npm');
207
207
  const args = ['install', '--no-audit', '--no-fund', '--no-save', NPM_PACKAGE + '@' + version];
208
+ const isCmdShim = process.platform === 'win32' && /\.(cmd|bat)$/i.test(cmd);
208
209
 
209
210
  const result = spawnSync(cmd, args, {
210
211
  cwd: tempDir,
@@ -212,8 +213,7 @@ async function extractNpmPackageWasm(destPath, version) {
212
213
  timeout: ATTEMPT_TIMEOUT_MS,
213
214
  encoding: 'utf8',
214
215
  windowsHide: true,
215
- // CREATE_NO_WINDOW inherited by .cmd shims npm spawns during
216
- // package install, so no conhost flash during the extract step.
216
+ ...(isCmdShim ? { shell: true } : {}),
217
217
  ...(process.platform === 'win32' ? { creationFlags: 0x08000000 } : {}),
218
218
  });
219
219
 
@@ -305,6 +305,10 @@ async function extractNpmPackageWithRetry(destPath, version) {
305
305
  log(`npm binary unresolvable (ENOENT); skipping retries, falling back`);
306
306
  throw err;
307
307
  }
308
+ if (err && (err.code === 'EINVAL' || /EINVAL/.test(String(err.message || '')))) {
309
+ log(`spawn EINVAL on npm shim; skipping retries, falling back`);
310
+ throw err;
311
+ }
308
312
  if (attempt < MAX_ATTEMPTS) {
309
313
  const wait = BACKOFF_MS[attempt - 1] || 120000;
310
314
  log(`backing off ${wait}ms`);
@@ -299,6 +299,8 @@ function readCurrentSess() {
299
299
  return __sessCache.value;
300
300
  }
301
301
 
302
+ const __lockRejectedEmitAt = new Map();
303
+
302
304
  function logEvent(sub, event, fields) {
303
305
  if (process.env.GM_LOG_DISABLE) return;
304
306
  try {
@@ -1462,7 +1464,14 @@ async function runSpoolWatcher(instance, spoolDir) {
1462
1464
  const msg = JSON.stringify({ ok: false, reason: 'another-watcher-active', pid: pidStr, age_ms: age });
1463
1465
  console.error(`[plugkit-wasm] ${msg}; refusing to start`);
1464
1466
  try { fs.writeFileSync(path.join(spoolDir, '.lock-rejection.json'), msg); } catch (_) {}
1465
- try { logEvent('plugkit', 'watcher.lock-rejected', { holder_pid: pidStr, lock_age_ms: age }); } catch (_) {}
1467
+ try {
1468
+ const __now = Date.now();
1469
+ const __last = __lockRejectedEmitAt.get(pidStr) || 0;
1470
+ if (__now - __last > 60000) {
1471
+ __lockRejectedEmitAt.set(pidStr, __now);
1472
+ logEvent('plugkit', 'watcher.lock-rejected', { severity: 'info', holder_pid: pidStr, lock_age_ms: age });
1473
+ }
1474
+ } catch (_) {}
1466
1475
  process.exit(75);
1467
1476
  }
1468
1477
  } else {
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.1263",
3
+ "version": "2.0.1265",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -186,11 +186,13 @@ async function ensureRsLearningDaemonRunning() {
186
186
  // .cmd shims that bun-x downloads/launches never get a console window.
187
187
  // DETACHED_PROCESS (0x00000008) detaches the process group. Windows-only;
188
188
  // Node ignores creationFlags on POSIX.
189
- const proc = spawn(resolveWindowsExe('bun'), ['x', 'rs-learn@latest'], {
189
+ const bunExe = resolveWindowsExe('bun');
190
+ const proc = spawn(bunExe, ['x', 'rs-learn@latest'], {
190
191
  detached: true,
191
192
  stdio: 'ignore',
192
193
  windowsHide: true,
193
194
  env,
195
+ ...(process.platform === 'win32' && /\.(cmd|bat)$/i.test(bunExe) ? { shell: true } : {}),
194
196
  creationFlags: 0x08000000 | 0x00000008,
195
197
  });
196
198
 
@@ -237,11 +239,13 @@ async function ensureRsCodeinsightDaemonRunning() {
237
239
  CLAUDE_SESSION_ID: sessionId,
238
240
  });
239
241
 
240
- const proc = spawn(resolveWindowsExe('bun'), ['x', 'rs-codeinsight@latest'], {
242
+ const bunExe = resolveWindowsExe('bun');
243
+ const proc = spawn(bunExe, ['x', 'rs-codeinsight@latest'], {
241
244
  detached: true,
242
245
  stdio: 'ignore',
243
246
  windowsHide: true,
244
247
  env,
248
+ ...(process.platform === 'win32' && /\.(cmd|bat)$/i.test(bunExe) ? { shell: true } : {}),
245
249
  creationFlags: 0x08000000 | 0x00000008,
246
250
  });
247
251
 
@@ -283,11 +287,13 @@ async function ensureRsSearchDaemonRunning() {
283
287
  CLAUDE_SESSION_ID: sessionId,
284
288
  });
285
289
 
286
- const proc = spawn(resolveWindowsExe('bun'), ['x', 'rs-search@latest'], {
290
+ const bunExe = resolveWindowsExe('bun');
291
+ const proc = spawn(bunExe, ['x', 'rs-search@latest'], {
287
292
  detached: true,
288
293
  stdio: 'ignore',
289
294
  windowsHide: true,
290
295
  env,
296
+ ...(process.platform === 'win32' && /\.(cmd|bat)$/i.test(bunExe) ? { shell: true } : {}),
291
297
  creationFlags: 0x08000000 | 0x00000008,
292
298
  });
293
299
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.1263",
3
+ "version": "2.0.1265",
4
4
  "description": "Canonical universal harness — AI-native software engineering via skill-driven orchestration; bootstraps plugkit for task execution and session isolation. Install in any AI coding agent host.",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -39,7 +39,7 @@
39
39
  "gm.json"
40
40
  ],
41
41
  "dependencies": {
42
- "gm-plugkit": "^2.0.1263"
42
+ "gm-plugkit": "^2.0.1265"
43
43
  },
44
44
  "engines": {
45
45
  "node": ">=16.0.0"