hermes-agent/apps
Brooklyn Nicholson c064487dbe fix(desktop): guard against compiled .js shadowing .ts renderer sources
A stray tsc run can emit foo.js next to foo.ts under apps/shared/src or
apps/desktop/src. .gitignore hides the artifact from git status, but Vite
resolves extensionless imports .js-before-.ts, so the renderer silently runs
the stale compiled copy.

This bit for real: a Jul 16 artifact of websocket-url.js predated the #68250
getGatewayWsUrl contract change ({ ok, wsUrl } IPC result), so its old
'if (fresh) return fresh' handed the whole result object to new WebSocket(),
dialing ws://127.0.0.1:5174/[object%20Object] on every boot. The desktop app
could never connect, and the failure survived reboots and cache wipes because
the poison lived in src/.

Two layers:

- scripts/assert-no-stale-js.mjs runs before vite in dev:renderer and at the
  head of build; it fails loud with the exact shadowing files and the rm
  command when a .js sits next to a sibling .ts/.tsx in either src tree.
- JsonRpcGatewayClient.connect() now rejects non-ws:// URLs with a readable
  error instead of letting new WebSocket() coerce an object into
  [object%20Object], so any future contract skew fails diagnosably.
2026-07-22 10:27:50 -05:00
..
bootstrap-installer fix(bootstrap): download timeouts + BOM upgrade for pre-fix cached scripts (#67193 follow-up) 2026-07-19 14:08:48 +05:30
desktop fix(desktop): guard against compiled .js shadowing .ts renderer sources 2026-07-22 10:27:50 -05:00
shared fix(desktop): guard against compiled .js shadowing .ts renderer sources 2026-07-22 10:27:50 -05:00