feat(aube): add first-class aube package manager support#1762
Open
okikio wants to merge 8 commits into
Open
Conversation
Add aube as a supported package manager alongside the existing pnpm-first repository workflow. - detect packageManager: aube@x.y.z plus aube lock/workspace files - auto-install pinned aube versions through vite_install - create native shims for aube, aubr, and aubx - dispatch install/add/remove/run/why flows through aube - update package-manager prompts, docs, issue metadata, and tests - preserve existing pnpm setup, lockfiles, scripts, and CI behavior Validated with vite_install command/package-manager tests and an end-to-end aube smoke test.
Aube is pnpm-compatible in the places Vite+ relies on a workspace YAML and pnpm-style manifest config, but its CLI surface and lockfile behavior differ enough that we need explicit handling. This updates workspace detection to treat aube-workspace.yaml as a first-class monorepo marker, prefers strict packageManager tool matching for aube shims, and teaches detection to recognize branch-specific aube lockfiles (aube-lock.*.yaml). On the package-management side, vp now translates add/install/outdated/remove/update/why/approve-builds and related flags to aube’s supported options (including pnpm-like --filter ordering), and emits warnings for flags aube doesn’t implement so we don’t silently mislead users.
This teaches the JS CLI layer to treat aube-workspace.yaml as a monorepo marker when walking up for config and workspace discovery. In create flows we also align Aube with pnpm’s workspace-YAML override behavior: newly scaffolded Aube monorepos prefer aube-workspace.yaml, and we keep the aliased vite/vitest devDeps so the workspace override remains observable (e.g. via vp why). Finally, Aube opts into the same auto-install ignore-scripts guard as pnpm to avoid failing early installs before users can approve build scripts.
vp migrate now treats Aube as pnpm-compatible while respecting its own workspace marker and manifest namespace. When migrating standalone projects, we decide between package.json config and a pnpm-compatible workspace YAML based on existing pnpm/aube fields, prefer the aube namespace when present, and apply the Vite+ overrides without clobbering unrelated user config. For YAML-based migrations we pick the right workspace file (pnpm-workspace.yaml when it exists, otherwise aube-workspace.yaml), and we remove Vite dependency selectors consistently across both pnpm and aube override maps.
Update the user-facing guides and READMEs to treat Aube as a supported package manager alongside pnpm/npm/yarn/bun, including its workspace markers, lockfiles, and shim alias pairs. RFCs are refreshed to keep flag mappings, examples, and wording consistent with the new pnpm/aube split (especially where pnpm-style workspace YAML and --filter ordering matter).
✅ Deploy Preview for viteplus-preview canceled.
|
Contributor
There was a problem hiding this comment.
Pull request overview
Note
Copilot was unable to run its full agentic suite in this review.
This PR adds first-class support for the Aube package manager across Vite+ docs/RFCs, TypeScript workspace utilities, and Rust package-manager dispatch/install logic.
Changes:
- Extend package-manager detection, shims, and command resolution to include
aube(plus its workspace YAML + lockfiles). - Teach migration/create/workspace utilities to treat
aube-workspace.yamlas a monorepo marker and handle pnpm-compatible workspace YAML semantics. - Update RFCs and documentation to reflect
pnpm/aubecapability parity and flag support.
Reviewed changes
Copilot reviewed 65 out of 65 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| rfcs/why-package-command.md | Updates why RFC docs to include Aube parity with pnpm where applicable |
| rfcs/update-package-command.md | Updates update RFC docs/matrices to include Aube mappings and support notes |
| rfcs/pm-command-group.md | Updates vp pm RFC docs to mark pnpm/aube-specific features |
| rfcs/outdated-package-command.md | Adds Aube mappings and notes for outdated and its format/pattern limitations |
| rfcs/link-unlink-package-commands.md | Updates link/unlink RFC docs to include pnpm/aube-specific behavior |
| rfcs/install-command.md | Updates install RFC docs/matrix and filtering notes to include Aube |
| rfcs/approve-builds-command.md | Updates approve-builds RFC docs to include Aube semantics |
| rfcs/add-remove-package-commands.md | Updates add/remove RFC docs and filter-pattern notes to include Aube |
| packages/cli/src/utils/workspace.ts | Adds aube-workspace.yaml detection and updates workspace YAML editing behavior |
| packages/cli/src/utils/prompts.ts | Extends auto-install ignore-scripts guard and interactive PM selection to include Aube |
| packages/cli/src/utils/tests/workspace.spec.ts | Adds tests for Aube workspace YAML precedence/creation behavior |
| packages/cli/src/types/package.ts | Adds PackageManager.aube constant with doc comment |
| packages/cli/src/resolve-vite-config.ts | Treats aube-workspace.yaml as a workspace-root marker during upward search |
| packages/cli/src/migration/migrator.ts | Extends migration rewriting to support pnpm-like/Aube namespaces + workspace YAML resolution |
| packages/cli/src/migration/bin.ts | Updates migration help text to mention pnpm/aube behavior |
| packages/cli/src/migration/tests/migrator.spec.ts | Adds migration tests for Aube workspace YAML + catalog resolution precedence |
| packages/cli/src/create/templates/monorepo.ts | Ensures monorepo template output uses aube-workspace.yaml for Aube projects |
| packages/cli/src/create/org-resolve.ts | Updates monorepo marker list in doc comment to include Aube workspace YAML |
| packages/cli/src/create/bin.ts | Updates create CLI help to list aube as a supported package-manager option |
| packages/cli/src/create/tests/org-resolve.spec.ts | Adds test that aube-workspace.yaml is treated as a monorepo marker |
| packages/cli/src/create/tests/monorepo.spec.ts | Extends aliased deps retention test coverage to Aube |
| packages/cli/binding/src/package_manager.rs | Adds Aube PM type mapping and monorepo detection via Aube workspace YAML |
| packages/cli/binding/src/exec/workspace.rs | Updates exec-workspace behavior comment to include Aube parity |
| packages/cli/README.md | Updates CLI README to mention Aube and its workspace YAML override instructions |
| docs/guide/why.md | Mentions Aube as a supported package manager in the docs narrative |
| docs/guide/run.md | Mentions aube run parity and updates filter syntax attribution to pnpm/aube |
| docs/guide/migrate.md | Updates migration guide notes to include pnpm/aube behavior |
| docs/guide/install.md | Documents Aube detection precedence, shims, rebuild behavior, and staged publishing notes |
| docs/guide/env.md | Documents Aube shim aliases (aube/aubr/aubx) alongside other PM shims |
| docs/.vitepress/theme/components/home/CoreFeature3Col.vue | Adds aube to homepage PM list |
| crates/vite_pm_cli/src/lib.rs | Updates crate docs to include Aube in PM detection list |
| crates/vite_pm_cli/src/cli.rs | Updates CLI flag docs to mark pnpm/aube-specific behavior where relevant |
| crates/vite_install/src/package_manager.rs | Implements Aube detection, download/install handling, shims, and tests |
| crates/vite_install/src/commands/why.rs | Extends why command resolution to treat Aube like pnpm where applicable |
| crates/vite_install/src/commands/whoami.rs | Routes Aube whoami through npm similarly to pnpm |
| crates/vite_install/src/commands/update.rs | Adds explicit Aube update mapping and tests |
| crates/vite_install/src/commands/unlink.rs | Extends unlink mapping to Aube |
| crates/vite_install/src/commands/stage.rs | Extends staged-publishing mapping to Aube |
| crates/vite_install/src/commands/remove.rs | Adds explicit Aube remove mapping and tests |
| crates/vite_install/src/commands/rebuild.rs | Extends rebuild mapping to Aube |
| crates/vite_install/src/commands/publish.rs | Extends publish mapping to Aube |
| crates/vite_install/src/commands/prune.rs | Extends prune mapping to Aube |
| crates/vite_install/src/commands/pack.rs | Extends pack mapping to Aube |
| crates/vite_install/src/commands/outdated.rs | Adds explicit Aube outdated mapping + warnings for unsupported flags + tests |
| crates/vite_install/src/commands/logout.rs | Routes Aube logout through npm similarly to pnpm |
| crates/vite_install/src/commands/login.rs | Routes Aube login through npm similarly to pnpm |
| crates/vite_install/src/commands/list.rs | Extends list mapping to pnpm/aube filter ordering |
| crates/vite_install/src/commands/link.rs | Extends link mapping to Aube |
| crates/vite_install/src/commands/install.rs | Extends install mapping to pnpm/aube filter ordering + docs |
| crates/vite_install/src/commands/dlx.rs | Extends dlx dispatch to Aube and fixes bin-path selection |
| crates/vite_install/src/commands/dist_tag.rs | Routes Aube dist-tag through npm similarly to pnpm |
| crates/vite_install/src/commands/dedupe.rs | Extends dedupe mapping to Aube |
| crates/vite_install/src/commands/config.rs | Extends config mapping to Aube |
| crates/vite_install/src/commands/cache.rs | Extends cache mapping to Aube and improves warning message |
| crates/vite_install/src/commands/audit.rs | Extends audit mapping to Aube |
| crates/vite_install/src/commands/approve_builds.rs | Adds explicit Aube approve-builds mapping + doc updates |
| crates/vite_install/src/commands/add.rs | Adds explicit Aube add mapping + tests |
| crates/vite_install/README.md | Updates crate README to mention Aube support |
| crates/vite_global_cli/src/shim/dispatch.rs | Updates comments/docs to include Aube in strict tool matching and Node handling notes |
| crates/vite_global_cli/src/commands/env/package_metadata.rs | Updates metadata doc to include Aube |
| crates/vite_global_cli/src/cli.rs | Updates comment to include Aube in PM forwarding |
| README.md | Updates top-level README to mention Aube and its workspace YAML override instructions |
| .github/workflows/test-vp-create.yml | Updates workflow assertions to treat Aube like pnpm for aliased deps retention |
| .github/ISSUE_TEMPLATE/bug_report.yml | Adds Aube to bug-report package-manager choices |
| .devcontainer/devcontainer-lock.json | Adds devcontainer feature lockfile for reproducible container setup |
Comments suppressed due to low confidence (4)
packages/cli/src/utils/prompts.ts:1
- The comment says “Aube follows pnpm's install semantics here, so it opts into the same guard”, but the current version gating still depends on
semver.coerce(packageManagerVersion). If Aube’s version is missing/“latest”/non-semver,coercedbecomesundefinedand the function will returnfalse, disabling the intended--ignore-scriptsguard for Aube. Consider handling Aube explicitly (e.g., always enable the guard for Aube, or add an Aube-specific version check with a sensible fallback when coercion fails) so behavior matches the documented intent.
crates/vite_install/src/package_manager.rs:1 download_aube_package_managernow requires executing a JS installer via"node"onPATH. In environments where Vite+ manages Node and the systemnodeisn’t available (or PATH is intentionally minimal, e.g., CI containers), this can make Aube PM download fail even though Vite+ could otherwise provide a Node runtime. Prefer invoking the Vite+-managed Node binary (or a resolved Node path used elsewhere in the project) instead of assumingnodeexists globally; alternatively, fail with a dedicated, actionable error that tells users how to provide a Node runtime at this stage.
packages/cli/src/migration/migrator.ts:1- The stale lint-staged detector includes
aubr,aubx, andaube run/aube x, but it does not match the common direct invocationaube lint-staged(nor anaube exec lint-stagedform, if supported). This can cause migrations to miss and not rewrite/remove stale hooks for Aube setups. Expand the alternation to includeaube(and any supported exec variant) so Aube projects get the same lint-staged migration behavior as pnpm/bun/npm.
packages/cli/src/utils/workspace.ts:1 doc.getIn(['packages'])is assumed to be aYAMLSeq, but if the YAML contains an unexpected type (e.g., a scalar/object due to manual edits),packages.add(...)will throw. To make this robust, validate that the node is actually a sequence before calling.add, and if it isn’t, replace/normalize it into aYAMLSeq(or emit a clear error) before mutating.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Updates existing global CLI snapshots and adds new fixtures for the aube package manager.
Updates local CLI snapshots and adds coverage for the aube package manager commands.
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
Signed-off-by: Okiki Ojo <okiki@thunderstrike.co>
Member
|
According to the discussion at #1593, the current user base of aube has not yet reached the required level. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
vpcommands,vp pmpassthrough, shims, create, and migrate).Context / Motivation
What Changed
packageManager,aube-workspace.yaml,aube-lock.yaml, andaube-lock.*.yaml(branch-specific lockfiles).aube/aubr/aubx) the same waypnpm/pnpxandnpm/npxare routed.@endevco/aube) and runs the native installer step so the expected binaries/shims exist after install.vpcommands +vp pm)approve-buildsandstageflows).aube-workspace.yamlas a first-class monorepo marker.aube.*config alongsidepnpm.*(including precedence where both exist).aube.User-Visible Behavior Changes
vp create --package-manager aubebecomes a supported option.vpdependency commands (install,add,remove,update,outdated,list,why,dlx,pack,prune,publish,cache, plusvp pm …) route to Aube when Aube is detected.pnpm/aubeparity where appropriate.Related Work
Tests
just checkjust testpnpm test:unitpnpm -F vite-plus snap-test-globaland review snapshot diffs (Aube fixtures + updated help output)Risk / Rollout Notes