Skip to content

v10.14.1

Latest

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:41
· 204 commits to main since this release

Built on Extension.js 4.1.33.

  • extension_wait {for: "rebuild"} no longer takes the compile write itself for a reconnected background. The engine stamps compiledAt and ts with two clock reads around a synchronous read, so whenever they crossed a millisecond boundary the ready.json write that recorded the compile already satisfied the reattach proof (runtime: "attached" with ts past compiledAt), and the wait answered reload.outcome: "reattached" at waitedMs 0, before any reload or when none would ever follow (a content-only edit), and on an engine that stamps reloadedAt it preempted the wait for that stamp 10.14.0 promised. The two engines now get the proof that fits each: on an engine that writes reloadedAt, the reattach answer is never given, the reload stamp alone settles the wait; on an older engine, which has only the write sequence to go by, the reconnect must be a later ready.json write whose ts passes the ts the compile write itself carried, not merely compiledAt, so that write can never be its own proof. reattached, still-detached and not-stamped keep their meaning for the older engine.
  • extension_eval with until keeps the whole call inside timeoutMs. Each poll ran with the call's own timeout (30000 by default) inside the engine's promise settle, and until checked its budget only between polls, so until: {timeoutMs: 50000} on a promise that never settles could run about 80 s, past the 60 s client request timeout the 50000 clamp exists for. Each poll's engine timeout is now the remaining until budget, with a 300 ms floor and a caller's smaller timeout still honored, so the call ends within timeoutMs plus one intervalMs.
  • extension_stop {browser} leaves a dev server whose command line names no --browser alone unless chrome, the engine's default, is the browser being stopped. A person's own npm run dev beside an MCP firefox session on the same project read as that session's process, was SIGKILLed by extension_stop {browser: "firefox"} and listed under reaped. A command line with no browser flag now counts as the engine default's, so a firefox or chromium stop keeps it running and a chrome stop ends it.
  • extension_screenshot writes its image only inside the project and only as a .png. path is resolved against projectPath and refused with E_BAD_REQUEST (status bad-request) when it lands outside it, by an absolute path or a ../ escape, or when it names a file that does not end in .png, so path: "src/manifest.json" no longer overwrites the manifest with image bytes. A folder is named with a trailing slash (shots/) or by an existing directory and gets the timestamped default name; a name such as shots that is neither a .png nor an existing folder is refused with a hint naming shots/, where it used to write a file literally called shots. The check runs before the browser is asked for pixels, the default location is unchanged, and the path description states the rules.