gm-skill 2.0.1478 → 2.0.1480

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 +1 @@
1
- 0.1.606
1
+ 0.1.607
@@ -1 +1 @@
1
- cae0f0a36c2250cc49d4d96e949e9922fec46a5ceeab801ad2e6dd3bfcb0f2f4 plugkit.wasm
1
+ 7f7a79fee5b86ab2db88751602dc8817cdd9b6384409c6fe81f686e12c654653 plugkit.wasm
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.1478",
3
+ "version": "2.0.1480",
4
4
  "description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform binary, verifies SHA256, and starts the spool watcher daemon. Includes plugkit-wasm-wrapper for WASM-based spool watching.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -2771,6 +2771,14 @@ async function runSpoolWatcher(instance, spoolDir) {
2771
2771
  console.log(`[dispatch] → verb=${verb} task=${taskBase} body=${bodyBytes.length}b`);
2772
2772
  logEvent('plugkit', 'dispatch.start', { verb, task: taskBase, body_bytes: bodyBytes.length, cwd: process.cwd() });
2773
2773
 
2774
+ // Network-bound git verbs block the event loop for the duration of a push/fetch (~30s),
2775
+ // so the 5s heartbeat cannot fire and the supervisor would reap the watcher as hung
2776
+ // (the VERB ABORT). Stamp a busy_until window before the synchronous dispatch so the
2777
+ // supervisor's heartbeat-stale check honors it, exactly as the browser runner does.
2778
+ if (verb === 'git_finalize' || verb === 'git_push' || verb === 'git_fetch') {
2779
+ try { _writeStatusBusy(90000); } catch (_) {}
2780
+ }
2781
+
2774
2782
  if (verb === 'memorize-fire' || verb === 'transition' || verb === 'prd-resolve' || verb === 'mutable-resolve') {
2775
2783
  try { autoRecordBrowserEditsFromBody(body, process.cwd(), taskBase, verb); } catch (_) {}
2776
2784
  }
@@ -195,7 +195,15 @@ function checkWatcherHealth() {
195
195
  });
196
196
  return;
197
197
  }
198
- const age = Date.now() - (status.ts || 0);
198
+ const now = Date.now();
199
+ // A long synchronous verb (git_finalize's ~30s network push, a chromium spawn)
200
+ // blocks the heartbeat write. The verb advertises busy_until in .status.json; while
201
+ // that is in the future the watcher is busy, not hung — reaping it kills the verb
202
+ // mid-flight (the VERB ABORT). Honor busy_until exactly as the agent boot probe does.
203
+ if (status.busy_until && status.busy_until > now) {
204
+ return;
205
+ }
206
+ const age = now - (status.ts || 0);
199
207
  if (age > STATUS_STALE_MS) {
200
208
  logEvent('supervisor.heartbeat-stale', {
201
209
  watcher_pid: currentChildPid,
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.1478",
3
+ "version": "2.0.1480",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
@@ -17,5 +17,5 @@
17
17
  "publishConfig": {
18
18
  "access": "public"
19
19
  },
20
- "plugkitVersion": "0.1.606"
20
+ "plugkitVersion": "0.1.607"
21
21
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.1478",
3
+ "version": "2.0.1480",
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",