hermes-agent/apps/shared
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
..
src fix(desktop): guard against compiled .js shadowing .ts renderer sources 2026-07-22 10:27:50 -05:00
eslint.config.mjs refactor(lint): hoist shared eslint + prettier config to root 2026-07-16 01:42:02 +05:30
package.json feat(themes): cross-surface theme SDK — one skin themes CLI, TUI, and desktop 2026-07-21 21:00:42 -05:00
tsconfig.json fix(desktop): move tsconfig to es2023 2026-06-15 12:07:17 -04:00