Root cause: esbuild 0.27.3 misparses `node-pty` inside JSDoc comments as a
code expression `node - pty` (subtraction). This produces a bare
`ReferenceError: node is not defined` at app.asar/dist-electron/main.js:35
on startup.
Fixes:
- terminal-manager.ts: replace JSDoc block with line comments and remove all
literal `node-pty` strings (reference docs/handover instead)
- build-electron.mjs: clean dist-electron/ before every build to prevent
stale artifact contamination in app.asar
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Root cause: electron-builder's @electron/rebuild only rebuilds native
modules found in the `files` config. Since better-sqlite3 enters the
app through extraResources (via .next/standalone/), it was skipped.
The afterPack hook was copying the system Node.js ABI (127) instead
of the required Electron ABI (143).
Fix:
- afterPack now explicitly calls `npx electron-rebuild` targeting the
exact Electron version and architecture from the build context
- Falls back to @electron/rebuild programmatic API if CLI fails
- Fails the build if rebuild cannot complete (no silent failures)
- Adds file size logging for verification
- Excludes `release/` from extraResources to prevent recursive nesting
- Adds startup ABI compatibility check in Electron main process with
friendly error dialog instead of cryptic crash
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The afterPack script only searched macOS-specific paths
(CodePilot.app/Contents/Resources) for better_sqlite3.node replacement.
Add Windows/Linux path (resources/standalone/) so the native module
ABI fix works on all platforms.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add afterPack hook that copies the @electron/rebuild-compiled
better_sqlite3.node into the standalone resources directory.
Previously the standalone copy retained the system Node ABI from
next build, causing MODULE_VERSION mismatch at runtime.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace symlinks in .next/standalone with real copies for electron-builder
- Exclude electron/, dist-electron/, scripts/, release/ from tsconfig
- Use arm64 target instead of universal to avoid native module merge issues
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Full-featured desktop application built with Next.js + Electron:
- Streaming chat with Claude Code via Agent SDK
- Session management with SQLite persistence
- Project file tree and file preview
- MCP server and custom skills management
- Permission controls with Code/Plan/Ask modes
- Dark/light theme, token tracking
- macOS DMG packaging with electron-builder
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>