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
|
|
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.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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gm-skill",
|
|
3
|
-
"version": "2.0.
|
|
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",
|