Build and package the native app
Scope and prerequisites
Section titled “Scope and prerequisites”Work in the repository’s desktop/ directory. The native source is Electron, React and TypeScript; it is not the static interface atlas and not the marketing website. Use a Windows x64 environment, a Node version compatible with the pinned toolchain, and the committed dependency lockfile. Model weights stay outside the application package.
These are actual scripts from desktop/package.json:
Set-Location .\desktopnpm cinpm run typechecknpm testnpm run buildnpm startnpm start launches Electron and can initialize the private runtime. Run it deliberately on a machine where that ownership is appropriate. npm run dev starts the controlled development path; do not expose a development renderer to untrusted network content.
Assets and runtime
Section titled “Assets and runtime”The build prepares self-hosted fonts, identity assets, companion art, Windows icons and third-party notices. The exact frozen About-derived PNG is a source asset; ordinary verification must not overwrite it with a new random frame. Dynamic visual QA and static icon generation are separate operations.
npm run prepare:runtime prepares verified runtime resources. Read the script’s pinned manifest, supported backend and licensing before running it. Do not substitute a binary solely because its filename matches. Record distribution identity separately from the engine’s reported revision.
Packaging
Section titled “Packaging”npm run distThe packaging script uses verified Electron, compiled ASAR, runtime resources, Windows metadata and the available Inno Setup toolchain. It emits a portable distribution, per-user installer and provenance artifacts. The resulting installer is not publisher-signed merely because the compiler is signed.
Exclude model files, personal app profiles, developer caches and service credentials. Verify installed files against the release manifest and exercise the actual packaged and installed executable; a development Electron pass is insufficient.
Release gate
Section titled “Release gate”Check native security settings, fonts/assets, all five pages, exact context validation, actual model load/generation, Stop/recovery, unload, persistence and owned-port shutdown. Use an explicit isolated profile for automation. After closing it, verify the normal profile branch without test messages or model loading.
Avoid concurrent GPU tests and CPU-heavy builds while benchmarking. Preserve raw receipts and classify failures correctly: an automation selector error is different from an engine error, and a user changing pages can hide a completed response. No source-control repository URL is invented by these docs; coordinate the actual publication workflow with the project owner.