gm-skill 2.0.1612 → 2.0.1613

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.
@@ -57,6 +57,7 @@ return {logs,errs,net,perf};
57
57
  - **Performance**: `performance.getEntriesByType('navigation')[0]` gives `loadEventEnd`/`domContentLoadedEventEnd`; `getEntriesByType('resource')` gives per-asset timing; `performance.now()`/`PerformanceObserver` for in-page measures. This is your profiler.
58
58
  - **Network timing**: `request.timing()` fields (`responseEnd`, `responseStart`, ...) are ALREADY relative to `startTime` -- use `Math.round(t.responseEnd)` directly for duration; subtracting `startTime` yields a garbage huge-negative (witnessed). `-1` means N/A.
59
59
  - **State**: expose any runtime value as `window.__x` in the app or via `page.evaluate(()=>{window.__x=...})`, then read it with another `page.evaluate` -- the live global beats a restart. Surface relevant state as a global on purpose so a single evaluate observes it.
60
+ - **Screenshots**: to actually SEE a screenshot, save it to a file and `Read` that path -- `await page.screenshot({path:'<abs>/shot.png'})` then `Read <abs>/shot.png` (the Read tool renders the PNG visually; witnessed). NEVER `return` the screenshot Buffer inline -- it stringifies to useless bytes in the envelope. The same applies to any binary: write it to a path, then Read the path.
60
61
 
61
62
  Profile to LOCATE (which call/resource is slow), then eliminate hypotheses by live measurement -- never a/b-test by restarting. The node side mirrors this: `exec_js` with `process.hrtime.bigint()`/`performance.now()` timing, `process.memoryUsage()`, and `stderr` stack capture is a genuine node profiler+debugger.
62
63
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.1612",
3
+ "version": "2.0.1613",
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": {
@@ -3109,6 +3109,7 @@ async function runSpoolWatcher(instance, spoolDir) {
3109
3109
 
3110
3110
  const ptr = Number(result & 0xffffffffn);
3111
3111
  const len = Number(result >> 32n);
3112
+ guardWasmRange(instance.exports.memory.buffer, ptr, len, `spool-dispatch:${verb}`);
3112
3113
  const resultBytes = new Uint8Array(instance.exports.memory.buffer, ptr, len);
3113
3114
  let resultStr = new TextDecoder().decode(resultBytes);
3114
3115
 
@@ -3818,6 +3819,7 @@ if (_isCliEntry) (async () => {
3818
3819
  const result = dispatch(verbPtr, verbBytes.length, bodyPtr, bodyBytes.length);
3819
3820
  const ptr = Number(result & 0xffffffffn);
3820
3821
  const len = Number(result >> 32n);
3822
+ guardWasmRange(instance.exports.memory.buffer, ptr, len, `cli-dispatch:${verb}`);
3821
3823
  const out = new TextDecoder().decode(new Uint8Array(instance.exports.memory.buffer, ptr, len));
3822
3824
  process.stdout.write(out);
3823
3825
  let parsed;
package/gm.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm",
3
- "version": "2.0.1612",
3
+ "version": "2.0.1613",
4
4
  "description": "Spool-dispatch orchestration engine with unified state machine, skills, and automated git enforcement",
5
5
  "author": "AnEntrypoint",
6
6
  "license": "MIT",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-skill",
3
- "version": "2.0.1612",
3
+ "version": "2.0.1613",
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",