Skip to content

feat(cli): use bun install for externalized packages that don't require cross-platform resolution #1366

@potofpie

Description

@potofpie

The server bundler (packages/cli/src/cmd/build/vite/server-bundler.ts) unconditionally uses npm install --os=linux --cpu=x64 --force to install all externalized runtime packages into .agentuity/node_modules/ during production builds. This was done because packages like sharp have platform-specific native binaries distributed as optional dependencies, and bun has no equivalent to npm's --os/--cpu flags for overriding target platform during install.

However, the code already scans each package's optionalDependencies for linux-x64 entries (lines 175-194) and collects them into platformOptionalDeps. When this list is empty — meaning none of the externalized packages have platform-specific native deps — npm's cross-platform flags serve no purpose. A plain bun install would work fine.
In practice, most projects only externalize pure JS packages like ws. The sharp, chromium-bidi, and fsevents entries in the runtimeExternals list
are defensive — they're only installed if they actually exist in the project's node_modules.

Proposed change

In server-bundler.ts around lines 204-225, split the install into two paths:

  • If platformOptionalDeps.length > 0: use npm install --os=linux --cpu=x64 --force (current behavior, unchanged)
  • If platformOptionalDeps.length === 0: use bun install instead
    Advantages
  • Removes npm as a hard dependency for the majority of projects that don't use packages with native platform-specific binaries
  • More correct — doesn't apply cross-platform flags when there's nothing cross-platform to resolve
  • Slightly faster installs for the common case
    Tradeoffs
  • Adds a second code path for package installation
  • Less impactful now that sandbox-agentuity includes npm

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions