mirror of
https://github.com/getpaseo/paseo.git
synced 2026-07-29 12:01:31 +00:00
* nix: share npmDeps FOD between paseo and paseo-desktop
The daemon and desktop derivations share package-lock.json, so their
npmDeps FODs contain byte-identical content. But Nix names the FOD
store path with the consuming pname prefix, so paseo-<v>-npm-deps and
paseo-desktop-<v>-npm-deps resolve to different store paths despite
identical bytes. Building both runs prefetch-npm-deps twice in
parallel; on a clean store this downloads the entire registry
(~1-2 GB of tarballs) twice over the wire.
Wire paseo through as a callPackage arg of the desktop drv and
inherit (paseo) npmDeps. One FOD, one fetch, one store path.
Override path becomes paseo.override { npmDepsHash = "..."; } — the
desktop drv picks up the overridden npmDeps transitively. Downstream
flakes that previously did paseo-desktop.override { npmDepsHash }
need to either drop the desktop-side override (recommended) or pass
the overridden daemon through as paseo-desktop.override { paseo }.
* nix: trace daemon runtime closure with @vercel/nft
The daemon Nix installPhase used to `cp -a node_modules $out/lib/paseo/`,
shipping every package in the hoisted root — Expo, React Native, Metro,
Electron, ML stacks, ~1700 third-party deps the daemon never `require()`s
at runtime. Result: ~2.6 GB store path for a daemon whose actual runtime
closure is a tiny fraction of that.
Replace it with static module-graph tracing via @vercel/nft (the same
library Vercel and Next.js use for serverless bundling). The new
installPhase runs `node scripts/trace-daemon.mjs`, which:
1. Calls nodeFileTrace on three entry points — cli/dist/index.js,
server/dist/scripts/supervisor-entrypoint.js, and the forked
server/dist/server/terminal/terminal-worker-process.js. The worker
needs to be a separate entry because nft does not follow fork()
process boundaries.
2. Unions the trace result with an explicit list of non-JS runtime
inputs nft does not detect: shell-integration assets read via
readFileSync, the Silero VAD ONNX model loaded by the sherpa
provider, .env.example, the CLI shebang script, and node-pty's
compiled prebuilt binary for the host platform.
3. Ignores cross-platform native variants we explicitly do not ship
(sherpa-onnx-*, @mariozechner/clipboard-*) and node-fetch's
optional `encoding` peer.
installPhase consumes the file list, copies each entry into
$out/lib/paseo/ preserving its repo-relative path, and wraps two bin
entries (paseo, paseo-server) via makeWrapper.
Verified end-to-end:
- daemon $out drops from ~2.6 GB to ~131 MB (≈95% reduction)
- paseo --version, paseo --help work from the new $out
- paseo-server boots, HTTP server reaches "Server listening" within
~40 ms, no missing-module errors in the bootstrap log
- speech features degrade gracefully when sherpa-onnx-* / model files
are absent (the documented behaviour for the Nix build, unchanged)
@vercel/nft added to root devDependencies (1.5.0); used only at
build time by the Nix derivation.
* fix(nix): gitignore result
* fix(nix): refresh npm deps hash post-rebase
The conflict resolution during rebase kept the trace-daemon hash, but
the merged package-lock.json combines upstream's lockfile updates with
the @vercel/nft addition, so the hash needed to be recomputed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
91 lines
1.1 KiB
Plaintext
91 lines
1.1 KiB
Plaintext
# Dependencies
|
|
node_modules/
|
|
|
|
# Build outputs
|
|
build/
|
|
dist/
|
|
.next/
|
|
out/
|
|
result
|
|
|
|
# Environment variables
|
|
.env
|
|
.env.test
|
|
.env.local
|
|
.env.test.local
|
|
.env*.local
|
|
.dev.vars
|
|
**/.dev.vars
|
|
|
|
# Logs
|
|
*.log
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
pnpm-debug.log*
|
|
|
|
# OS files
|
|
.DS_Store
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
|
|
# TypeScript
|
|
*.tsbuildinfo
|
|
tsconfig.tsbuildinfo
|
|
|
|
# IDEs
|
|
.vscode/
|
|
.idea/
|
|
*.sublime-*
|
|
|
|
# Testing
|
|
coverage/
|
|
|
|
# Playwright
|
|
test-results/
|
|
**/test-results/
|
|
|
|
# Vercel
|
|
.vercel/
|
|
|
|
# Expo
|
|
.expo/
|
|
|
|
# Misc
|
|
*.pem
|
|
.vercel
|
|
|
|
# Local Claude configuration
|
|
CLAUDE.local.md
|
|
|
|
# Task CLI
|
|
.tasks/
|
|
|
|
.debug.conversations/
|
|
.debug/
|
|
.paseo/
|
|
.wrangler/
|
|
**/.wrangler/
|
|
**/.tanstack/
|
|
|
|
# Local agent/tooling artifacts (do not commit)
|
|
PLAN.md
|
|
.valknut/
|
|
valknut-report.html/
|
|
valknut-report.json/
|
|
**/.playwright-mcp/
|
|
**/.paseo-provider-history/
|
|
.claude/settings.local.json
|
|
**/.claude/settings.local.json
|
|
.claude/scheduled_tasks.lock
|
|
.claude/worktrees/
|
|
.plans/
|
|
packages/server/src/server/fixtures/dictation/dictation-debug-largest.wav
|
|
packages/server/src/server/fixtures/dictation/dictation-debug-largest.transcript.txt
|
|
|
|
/artifacts
|
|
packages/desktop/.cache/
|
|
packages/desktop/src-tauri/resources/managed-runtime/
|
|
app.json
|