SIGN IN SIGN UP

Self-heal missing tree-sitter.wasm by fetching from unpkg / jsdelivr

Round 11 shipped a binary that needs tree-sitter.wasm next to it
(bun --compile asset embedding was broken on Windows for every
mechanism we tried). The new freebuff/codebuff npm wrappers know to
extract the wasm from the release tarball next to the binary, but
the wrapper auto-updates only the binary, not itself — so users
who installed a pre-fix wrapper download the new binary, the
wrapper strips the wasm with the temp dir, and the new binary
crashes on first run.

Closing that loop in the binary itself: when init-node.ts's
locateFile fallback can't find a sibling tree-sitter.wasm, fetch it
synchronously from a CDN (unpkg, with jsdelivr as backup) and cache
it next to the binary. Subsequent runs short-circuit at the
existsSync check so the download only happens once.

Sync via execFileSync('curl', ...) because emscripten's locateFile
callback must return a path immediately. curl is built into macOS,
Linux, and Windows 10 1803+. If it isn't, we fall through to the
existing thrown error with a clear message.

WEB_TREE_SITTER_VERSION is pinned to match sdk/package.json — a wasm
built for a different web-tree-sitter runtime would crash with a
much more confusing error than "missing wasm".

Verified locally: deleted the sibling wasm, ran the binary,
download fired ("[tree-sitter] downloaded https://unpkg.com/..."),
file cached next to the binary, init succeeded; second run used the
cache and made no network calls.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
J
James Grugett committed
565d94944717822d03c89e4beb9ecdbf4a5a397b
Parent: 86ebd09