gm-skill 2.0.1635 → 2.0.1636
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/gm-plugkit/package.json +1 -1
- package/gm-plugkit/plugkit-wasm-wrapper.js +7 -3
- package/gm.json +1 -1
- package/package.json +1 -1
- package/skills/gm/SKILL.md +1 -1
package/gm-plugkit/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-plugkit",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1636",
|
|
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": {
|
|
@@ -308,7 +308,7 @@ function injectUpdateWarning(parsed) {
|
|
|
308
308
|
if (!upd || !upd.installed || !upd.latest || upd.installed === upd.latest) return;
|
|
309
309
|
const target = (parsed.data && typeof parsed.data === 'object') ? parsed.data : parsed;
|
|
310
310
|
target.update_available = { installed: upd.installed, latest: upd.latest, update_url: upd.update_url || null };
|
|
311
|
-
target.update_warning = `STALE RUNTIME: running plugkit ${upd.installed} but ${upd.latest} is published
|
|
311
|
+
target.update_warning = `STALE RUNTIME: running plugkit ${upd.installed} but ${upd.latest} is published. The watcher auto-updates when idle (cache-busted self-respawn to latest), so this usually clears on its own within a few minutes; just keep working. If it persists, re-run the idempotent boot to land latest now: bun x gm-plugkit@latest spool (add --kill-stale-watchers first only if it stays stuck). Set PLUGKIT_NO_AUTO_UPDATE=1 to pin. This warning repeats until the running version catches up.`;
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
function mergeAutoRecallIntoInstructionResponse(resultStr, autoRecall) {
|
|
@@ -2904,6 +2904,10 @@ async function runSpoolWatcher(instance, spoolDir) {
|
|
|
2904
2904
|
let _selfStaleProbeErrorLogged = false;
|
|
2905
2905
|
function probeGmPlugkitSelfStale() {
|
|
2906
2906
|
try {
|
|
2907
|
+
if (process.env.PLUGKIT_NO_AUTO_UPDATE === '1') return;
|
|
2908
|
+
const { sids: _ifSids } = (typeof inflightPids === 'function') ? inflightPids() : { sids: new Set() };
|
|
2909
|
+
if (_ifSids.size > 0) return;
|
|
2910
|
+
if ((Date.now() - lastActivityMs) < 30000) return;
|
|
2907
2911
|
const ownPkgVersionFile = path.join(GM_TOOLS_ROOT, 'gm-plugkit.version');
|
|
2908
2912
|
const ownPkgJsonFile = path.join(__dirname, 'package.json');
|
|
2909
2913
|
let own = null;
|
|
@@ -2975,7 +2979,7 @@ async function runSpoolWatcher(instance, spoolDir) {
|
|
|
2975
2979
|
try {
|
|
2976
2980
|
const cp = _childProcess;
|
|
2977
2981
|
const bunPath = process.env.GM_BUN_PATH || 'bun';
|
|
2978
|
-
const bustCache =
|
|
2982
|
+
const bustCache = true;
|
|
2979
2983
|
if (bustCache) {
|
|
2980
2984
|
try { cp.execFileSync(bunPath, ['pm', 'cache', 'rm'], { stdio: 'ignore', timeout: 30000, windowsHide: true }); } catch (_) {}
|
|
2981
2985
|
try {
|
|
@@ -3002,7 +3006,7 @@ async function runSpoolWatcher(instance, spoolDir) {
|
|
|
3002
3006
|
env: { ...process.env, PLUGKIT_BOOT_REASON: 'self-respawn-from-self-stale' },
|
|
3003
3007
|
});
|
|
3004
3008
|
child.unref();
|
|
3005
|
-
try { logEvent('plugkit', '
|
|
3009
|
+
try { logEvent('plugkit', 'update.auto-applying', { running_version: own, latest_version: latest, cache_busted: bustCache, attempt: (respawnGuard.attempts || 0) + 1, note: 'auto-update: cache-busted self-respawn to latest' }); } catch (_) {}
|
|
3006
3010
|
try { fs.writeFileSync(path.join(spoolDir, '.shutdown-reason.json'), JSON.stringify({ reason: 'gm-plugkit-self-stale', ts: Date.now(), pid: process.pid, running_version: own, latest_version: latest })); } catch (_) {}
|
|
3007
3011
|
const myPid = process.pid;
|
|
3008
3012
|
const respawnDeadline = Date.now() + 90000;
|
package/gm.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-skill",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.1636",
|
|
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",
|
package/skills/gm/SKILL.md
CHANGED
|
@@ -34,7 +34,7 @@ Every turn: dispatch `instruction`, read it, follow the imperative, dispatch the
|
|
|
34
34
|
cat .gm/exec-spool/.status.json 2>/dev/null; echo ---; cat .gm/exec-spool/.turn-summary.json 2>/dev/null; echo ---; date +%s%3N
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
`.turn-summary.json` carries `phase`, `last_skill`, `prd_pending`, `last_instruction_ts`, `last_instruction_age_ms`, `long_gap_threshold_ms`, `browser_sessions_alive`, `update_available`, `deviations_30m`, `watcher_uptime_ms`. Age over threshold: your next non-orienting verb is gated, dispatch `instruction` first. `update_available` non-null:
|
|
37
|
+
`.turn-summary.json` carries `phase`, `last_skill`, `prd_pending`, `last_instruction_ts`, `last_instruction_age_ms`, `long_gap_threshold_ms`, `browser_sessions_alive`, `update_available`, `deviations_30m`, `watcher_uptime_ms`. Age over threshold: your next non-orienting verb is gated, dispatch `instruction` first. `update_available` non-null: the watcher auto-updates itself when idle (cache-busted self-respawn to latest), so it usually clears on its own within a few minutes -- keep working. To land it immediately, just re-run the idempotent `bun x gm-plugkit@latest spool` (blocks until serving); only add `--kill-stale-watchers` first if it stays stuck across several turns. `PLUGKIT_NO_AUTO_UPDATE=1` pins the version. `deviations_30m` non-zero indicates active drift to investigate before continuing.
|
|
38
38
|
|
|
39
39
|
Compare `.status.json` `ts` to the printed epoch: gap > 15000 = dead, boot it. Exception: a future `busy_until` means a long verb (browser/chromium spawn blocks the heartbeat ~15-18s) -- wait, do not boot a second watcher.
|
|
40
40
|
|