From 3d430a07d65afd95340e2dae5ea23437bca9b740 Mon Sep 17 00:00:00 2001 From: Colin McDonnell <3084745+colinhacks@users.noreply.github.com> Date: Wed, 29 Jul 2026 10:05:32 -0700 Subject: [PATCH 1/4] aube: sync upstream v1.35.0 Merges jdx/aube v1.32.0..v1.35.0 (79 commits) into the vendored tree via the venue-less 3-way merge in .claude/skills/aube-bump. 28 files conflicted textually; the compiler surfaced 3 more in files git merged silently. Behavior changes users can hit: - `add` gains three refusal surfaces from upstream: similar-name blocking, host-routed confirmation prompts, and minimumPackageAge, which defaults to 43200 minutes (30 days) and fails closed. A public package name first registered inside that window now prompts interactively or fails with ERR_AUBE_NEW_PACKAGE_NAME; missing registry creation-time metadata fails with ERR_AUBE_PACKAGE_AGE_CHECK_FAILED. - node-gyp bootstrap runs in-process under the project lock instead of re-execing. Upstream's rationale for the rewrite is the embedding case nub is: current_exe() names the host program, not aube. - `update` no longer prefers a deprecated version inside a range. - RuntimeProvenance::Embedder now renders the embedder name ("nub") where it previously rendered the literal "embedder". - A fat64 Mach-O bin target is now classified native. Fork delta that dissolved because upstream adopted it: registry-name patches on npm-aliased installs, native-bin direct exec, and the exec.rs is_native_executable_target gate. nub's EmbedderRuntime seam was dead code on nub's side and gave way to upstream's; nub's EngineContext ladder is re-sited into it and still drives the augmentation. Two nub-side repairs: - Gate npmrc_entry_is_supported to match its only caller, read_single, which is behind config-tui. Embedders building default-features = false dropped the caller but kept the helper, tripping dead_code under -D warnings. - Pin nub's #394 invariant (native targets force the symlink layout even when preferSymlinkedExecutables is false) with a test. It was untested, and upstream v1.35.0 ships a test asserting the opposite behavior, which is removed here with a provenance note. --- .claude/skills/aube-bump/SKILL.md | 12 +- Cargo.lock | 82 +- crates/nub-cli/src/pm_engine/vite_compat.rs | 14 +- vendor/aube/.github/renovate.json | 6 + .../.github/workflows/auto-merge-release.yml | 2 +- vendor/aube/.github/workflows/bench-pr.yml | 129 - .../aube/.github/workflows/bench-refresh.yml | 8 +- vendor/aube/.github/workflows/ci.yml | 133 +- .../aube/.github/workflows/copr-publish.yml | 2 +- vendor/aube/.github/workflows/docs.yml | 6 +- vendor/aube/.github/workflows/ffi.yml | 6 +- vendor/aube/.github/workflows/node-addon.yml | 6 +- .../aube/.github/workflows/perf-backfill.yml | 241 ++ vendor/aube/.github/workflows/perf-pr.yml | 159 + vendor/aube/.github/workflows/perf.yml | 89 + vendor/aube/.github/workflows/ppa-publish.yml | 2 +- vendor/aube/.github/workflows/pr-closer.yml | 2 +- .../.github/workflows/publish-homebrew.yml | 2 +- vendor/aube/.github/workflows/publish-npm.yml | 2 +- .../aube/.github/workflows/publish-smoke.yml | 2 +- vendor/aube/.github/workflows/release-plz.yml | 12 +- vendor/aube/.github/workflows/release.yml | 16 +- vendor/aube/.github/workflows/zizmor.yml | 4 +- vendor/aube/.gitignore | 1 + vendor/aube/.rules | 10 +- vendor/aube/Cargo.lock | 802 ++-- vendor/aube/Cargo.toml | 40 +- vendor/aube/README.md | 2 +- vendor/aube/UPSTREAM | 6 +- vendor/aube/aube.usage.kdl | 3491 ++++++++++++++--- vendor/aube/benchmarks/results.json | 224 +- vendor/aube/bin/cargo-semver-checks | 3 + vendor/aube/crates/aube-codes/CHANGELOG.md | 26 + vendor/aube/crates/aube-codes/src/errors.rs | 42 + vendor/aube/crates/aube-codes/src/warnings.rs | 21 + vendor/aube/crates/aube-ffi/abi-symbols.txt | 20 + vendor/aube/crates/aube-ffi/src/lib.rs | 2 +- vendor/aube/crates/aube-linker/CHANGELOG.md | 27 + vendor/aube/crates/aube-linker/src/builder.rs | 14 + vendor/aube/crates/aube-linker/src/hoisted.rs | 5 +- vendor/aube/crates/aube-linker/src/lib.rs | 5 + vendor/aube/crates/aube-linker/src/link.rs | 57 +- .../crates/aube-linker/src/materialize.rs | 5 +- vendor/aube/crates/aube-linker/src/patches.rs | 9 +- vendor/aube/crates/aube-linker/src/sweep.rs | 29 + vendor/aube/crates/aube-linker/src/sys.rs | 633 ++- vendor/aube/crates/aube-linker/src/tests.rs | 101 + vendor/aube/crates/aube-lockfile/CHANGELOG.md | 16 + .../crates/aube-lockfile/src/graph_hash.rs | 72 +- vendor/aube/crates/aube-lockfile/src/lib.rs | 80 + vendor/aube/crates/aube-manifest/CHANGELOG.md | 29 + .../crates/aube-manifest/src/workspace.rs | 32 + .../aube-manifest/src/workspace/config.rs | 87 +- .../aube-manifest/src/workspace/edits.rs | 3 + vendor/aube/crates/aube-node/src/lib.rs | 2 +- vendor/aube/crates/aube-registry/CHANGELOG.md | 18 + .../aube/crates/aube-registry/src/client.rs | 1 + .../aube-registry/src/client/endpoints.rs | 187 +- vendor/aube/crates/aube-resolver/CHANGELOG.md | 35 + vendor/aube/crates/aube-resolver/build.rs | 70 +- vendor/aube/crates/aube-resolver/src/error.rs | 53 +- vendor/aube/crates/aube-resolver/src/lib.rs | 8 +- .../aube/crates/aube-resolver/src/primer.rs | 25 + .../aube-resolver/src/resolve/vulnerable.rs | 10 +- .../crates/aube-resolver/src/semver_util.rs | 48 +- vendor/aube/crates/aube-resolver/src/tests.rs | 74 + vendor/aube/crates/aube-resolver/src/trust.rs | 234 +- vendor/aube/crates/aube-runtime/CHANGELOG.md | 16 + vendor/aube/crates/aube-runtime/src/error.rs | 10 + .../aube/crates/aube-runtime/src/platform.rs | 29 +- .../crates/aube-runtime/src/self_install.rs | 51 +- vendor/aube/crates/aube-scripts/CHANGELOG.md | 16 + vendor/aube/crates/aube-scripts/src/lib.rs | 117 +- vendor/aube/crates/aube-settings/CHANGELOG.md | 29 + vendor/aube/crates/aube-settings/build.rs | 5 +- .../aube/crates/aube-settings/settings.toml | 194 +- .../aube/crates/aube-settings/src/values.rs | 72 + vendor/aube/crates/aube-store/CHANGELOG.md | 16 + vendor/aube/crates/aube-store/src/lib.rs | 96 +- vendor/aube/crates/aube-util/CHANGELOG.md | 12 + .../aube/crates/aube-workspace/CHANGELOG.md | 16 + vendor/aube/crates/aube-workspace/src/lib.rs | 324 +- vendor/aube/crates/aube/CHANGELOG.md | 75 + vendor/aube/crates/aube/Cargo.toml | 4 +- vendor/aube/crates/aube/assets/aubx.usage.kdl | 1 + .../crates/aube/assets/completion.usage.kdl | 15 + .../aube/crates/aube/assets/extra.usage.kdl | 15 + vendor/aube/crates/aube/src/argv.rs | 15 + .../aube/crates/aube/src/command_effects.rs | 338 ++ .../aube/crates/aube/src/commands/activate.rs | 136 +- .../crates/aube/src/commands/add/filtered.rs | 8 +- .../aube/crates/aube/src/commands/add/mod.rs | 48 +- .../aube/src/commands/add/supply_chain.rs | 185 +- .../aube/src/commands/add_supply_chain.rs | 793 +++- vendor/aube/crates/aube/src/commands/audit.rs | 202 +- .../crates/aube/src/commands/auto_install.rs | 21 +- .../aube/src/commands/catalog_discovery.rs | 82 + .../aube/crates/aube/src/commands/catalogs.rs | 113 + vendor/aube/crates/aube/src/commands/check.rs | 13 +- vendor/aube/crates/aube/src/commands/ci.rs | 2 +- vendor/aube/crates/aube/src/commands/clean.rs | 60 +- .../crates/aube/src/commands/completion.rs | 442 ++- .../crates/aube/src/commands/config/mod.rs | 37 +- .../crates/aube/src/commands/deploy/mod.rs | 2 +- vendor/aube/crates/aube/src/commands/dlx.rs | 45 +- .../aube/crates/aube/src/commands/doctor.rs | 17 +- vendor/aube/crates/aube/src/commands/exec.rs | 521 ++- .../crates/aube/src/commands/fs_helpers.rs | 36 +- .../aube/crates/aube/src/commands/global.rs | 10 +- .../crates/aube/src/commands/install/args.rs | 18 +- .../aube/src/commands/install/control.rs | 53 + .../src/commands/install/critical_path.rs | 15 +- .../crates/aube/src/commands/install/delta.rs | 7 +- .../crates/aube/src/commands/install/fetch.rs | 8 +- .../aube/src/commands/install/finalize.rs | 33 +- .../crates/aube/src/commands/install/gvs.rs | 829 +++- .../aube/src/commands/install/layout.rs | 2 +- .../aube/src/commands/install/lifecycle.rs | 12 +- .../crates/aube/src/commands/install/link.rs | 6 +- .../crates/aube/src/commands/install/mod.rs | 37 +- .../commands/install/node_gyp_bootstrap.rs | 140 +- .../aube/src/commands/install/resolve.rs | 6 +- .../aube/src/commands/install/settings.rs | 81 +- .../aube/src/commands/install/startup.rs | 50 +- vendor/aube/crates/aube/src/commands/list.rs | 10 +- vendor/aube/crates/aube/src/commands/login.rs | 44 +- vendor/aube/crates/aube/src/commands/mod.rs | 46 +- vendor/aube/crates/aube/src/commands/node.rs | 49 +- .../aube/crates/aube/src/commands/outdated.rs | 36 +- .../crates/aube/src/commands/package_spec.rs | 156 +- .../crates/aube/src/commands/patch_remove.rs | 1 + vendor/aube/crates/aube/src/commands/run.rs | 272 +- .../aube/crates/aube/src/commands/runtime.rs | 2 +- .../aube/src/commands/script_settings.rs | 28 +- .../aube/src/commands/security_scanner.rs | 6 +- .../aube/src/commands/settings_context.rs | 109 +- .../crates/aube/src/commands/trust/check.rs | 307 ++ .../crates/aube/src/commands/trust/mod.rs | 24 + .../aube/crates/aube/src/commands/update.rs | 245 +- .../aube/crates/aube/src/commands/version.rs | 125 +- vendor/aube/crates/aube/src/embed.rs | 188 +- vendor/aube/crates/aube/src/engines.rs | 58 +- vendor/aube/crates/aube/src/lib.rs | 66 +- vendor/aube/crates/aube/src/main.rs | 60 +- vendor/aube/crates/aube/src/pnpmfile.rs | 8 +- vendor/aube/crates/aube/src/progress/mod.rs | 48 +- vendor/aube/crates/aube/src/runtime.rs | 940 +++-- vendor/aube/crates/aube/src/state.rs | 8 + vendor/aube/crates/aube/src/tool_shims.rs | 2 + vendor/aube/crates/aube/tests/e2e.rs | 26 + vendor/aube/crates/aube/tests/embed.rs | 34 + vendor/aube/docs/.vitepress/config.mts | 1 + vendor/aube/docs/cli/access.md | 1 + vendor/aube/docs/cli/access/get.md | 1 + vendor/aube/docs/cli/access/get/status.md | 1 + vendor/aube/docs/cli/access/grant.md | 1 + vendor/aube/docs/cli/access/list.md | 1 + .../docs/cli/access/list/collaborators.md | 1 + vendor/aube/docs/cli/access/list/packages.md | 1 + vendor/aube/docs/cli/access/ls.md | 1 + vendor/aube/docs/cli/access/revoke.md | 1 + vendor/aube/docs/cli/access/set.md | 1 + vendor/aube/docs/cli/activate.md | 1 + vendor/aube/docs/cli/add.md | 5 +- vendor/aube/docs/cli/approve-builds.md | 1 + vendor/aube/docs/cli/audit.md | 5 +- vendor/aube/docs/cli/bin.md | 1 + vendor/aube/docs/cli/bugs.md | 1 + vendor/aube/docs/cli/cache.md | 1 + vendor/aube/docs/cli/cache/delete.md | 1 + vendor/aube/docs/cli/cache/list-registries.md | 1 + vendor/aube/docs/cli/cache/list.md | 1 + vendor/aube/docs/cli/cache/prune.md | 1 + vendor/aube/docs/cli/cache/view.md | 1 + vendor/aube/docs/cli/cat-file.md | 1 + vendor/aube/docs/cli/cat-index.md | 1 + vendor/aube/docs/cli/check.md | 1 + vendor/aube/docs/cli/ci.md | 1 + vendor/aube/docs/cli/clean.md | 1 + vendor/aube/docs/cli/commands.json | 484 ++- vendor/aube/docs/cli/completion.md | 1 + vendor/aube/docs/cli/config.md | 1 + vendor/aube/docs/cli/config/delete.md | 1 + vendor/aube/docs/cli/config/explain.md | 1 + vendor/aube/docs/cli/config/find.md | 1 + vendor/aube/docs/cli/config/get.md | 1 + vendor/aube/docs/cli/config/list.md | 1 + vendor/aube/docs/cli/config/set.md | 1 + vendor/aube/docs/cli/config/tui.md | 1 + vendor/aube/docs/cli/dedupe.md | 1 + vendor/aube/docs/cli/deploy.md | 1 + vendor/aube/docs/cli/deprecate.md | 1 + vendor/aube/docs/cli/deprecations.md | 1 + vendor/aube/docs/cli/diag.md | 1 + vendor/aube/docs/cli/diag/analyze.md | 1 + vendor/aube/docs/cli/diag/compare.md | 1 + vendor/aube/docs/cli/dist-tag.md | 1 + vendor/aube/docs/cli/dist-tag/add.md | 1 + vendor/aube/docs/cli/dist-tag/ls.md | 1 + vendor/aube/docs/cli/dist-tag/rm.md | 1 + vendor/aube/docs/cli/doctor.md | 1 + vendor/aube/docs/cli/fetch.md | 1 + vendor/aube/docs/cli/find-hash.md | 1 + vendor/aube/docs/cli/ignored-builds.md | 1 + vendor/aube/docs/cli/import.md | 1 + vendor/aube/docs/cli/index.md | 8 +- vendor/aube/docs/cli/init.md | 1 + vendor/aube/docs/cli/install.md | 1 + vendor/aube/docs/cli/licenses.md | 1 + vendor/aube/docs/cli/link.md | 1 + vendor/aube/docs/cli/list.md | 7 +- vendor/aube/docs/cli/login.md | 1 + vendor/aube/docs/cli/logout.md | 1 + vendor/aube/docs/cli/outdated.md | 1 + vendor/aube/docs/cli/pack.md | 1 + vendor/aube/docs/cli/patch-commit.md | 1 + vendor/aube/docs/cli/patch-remove.md | 5 +- vendor/aube/docs/cli/patch.md | 1 + vendor/aube/docs/cli/peers.md | 1 + vendor/aube/docs/cli/peers/check.md | 1 + vendor/aube/docs/cli/prefix.md | 1 + vendor/aube/docs/cli/prune.md | 1 + vendor/aube/docs/cli/publish.md | 1 + vendor/aube/docs/cli/purge.md | 1 + vendor/aube/docs/cli/query.md | 1 + vendor/aube/docs/cli/rebuild.md | 1 + vendor/aube/docs/cli/remove.md | 1 + vendor/aube/docs/cli/root.md | 1 + vendor/aube/docs/cli/runtime.md | 1 + vendor/aube/docs/cli/runtime/list.md | 1 + vendor/aube/docs/cli/runtime/set.md | 1 + vendor/aube/docs/cli/sbom.md | 1 + vendor/aube/docs/cli/sponsors.md | 1 + vendor/aube/docs/cli/stage.md | 1 + vendor/aube/docs/cli/store.md | 1 + vendor/aube/docs/cli/store/add.md | 1 + vendor/aube/docs/cli/store/path.md | 1 + vendor/aube/docs/cli/store/prune.md | 1 + vendor/aube/docs/cli/store/status.md | 1 + vendor/aube/docs/cli/trust.md | 11 + vendor/aube/docs/cli/trust/check.md | 75 + vendor/aube/docs/cli/undeprecate.md | 1 + vendor/aube/docs/cli/unlink.md | 1 + vendor/aube/docs/cli/unpublish.md | 1 + vendor/aube/docs/cli/update.md | 1 + vendor/aube/docs/cli/version.md | 3 +- vendor/aube/docs/cli/view.md | 1 + vendor/aube/docs/cli/why.md | 1 + vendor/aube/docs/embedding/rust.md | 73 + vendor/aube/docs/error-codes.data.json | 54 + vendor/aube/docs/installation.md | 5 + .../package-manager/global-virtual-store.md | 62 +- .../aube/docs/package-manager/node-runtime.md | 8 +- vendor/aube/docs/package-manager/scripts.md | 5 + vendor/aube/docs/pnpm-users.md | 7 + vendor/aube/docs/security.md | 56 +- vendor/aube/docs/settings/index.md | 200 +- .../aube/docs/trust-policy-exceptions.data.ts | 49 + vendor/aube/docs/trust-policy-exceptions.md | 112 + vendor/aube/mise.lock | 109 +- vendor/aube/mise.toml | 45 +- vendor/aube/release.json | 4 +- vendor/aube/scripts/generate-primer.mjs | 16 +- vendor/aube/tak.toml | 68 + vendor/aube/test/clean.bats | 48 +- vendor/aube/test/config.bats | 37 + vendor/aube/test/dlx.bats | 23 + vendor/aube/test/exec.bats | 20 + .../aube/test/fixtures/web-login-server.mjs | 15 +- vendor/aube/test/list.bats | 22 + vendor/aube/test/login.bats | 26 + vendor/aube/test/nextjs_gvs_autodisable.bats | 58 +- vendor/aube/test/optional_platform.bats | 42 + vendor/aube/test/outdated.bats | 44 + vendor/aube/test/patch.bats | 40 + vendor/aube/test/run.bats | 144 + vendor/aube/test/runtime.bats | 24 + vendor/aube/test/settings.bats | 104 + .../aube/test/test_helper/common_setup.bash | 12 +- vendor/aube/test/update.bats | 134 +- 280 files changed, 15541 insertions(+), 2846 deletions(-) delete mode 100644 vendor/aube/.github/workflows/bench-pr.yml create mode 100644 vendor/aube/.github/workflows/perf-backfill.yml create mode 100644 vendor/aube/.github/workflows/perf-pr.yml create mode 100644 vendor/aube/.github/workflows/perf.yml create mode 100755 vendor/aube/bin/cargo-semver-checks create mode 100644 vendor/aube/crates/aube-ffi/abi-symbols.txt create mode 100644 vendor/aube/crates/aube/assets/aubx.usage.kdl create mode 100644 vendor/aube/crates/aube/assets/completion.usage.kdl create mode 100644 vendor/aube/crates/aube/assets/extra.usage.kdl create mode 100644 vendor/aube/crates/aube/src/command_effects.rs create mode 100644 vendor/aube/crates/aube/src/commands/trust/check.rs create mode 100644 vendor/aube/crates/aube/src/commands/trust/mod.rs create mode 100644 vendor/aube/docs/cli/trust.md create mode 100644 vendor/aube/docs/cli/trust/check.md create mode 100644 vendor/aube/docs/trust-policy-exceptions.data.ts create mode 100644 vendor/aube/docs/trust-policy-exceptions.md create mode 100644 vendor/aube/tak.toml diff --git a/.claude/skills/aube-bump/SKILL.md b/.claude/skills/aube-bump/SKILL.md index b1bc6a5e6..7c74bf46c 100644 --- a/.claude/skills/aube-bump/SKILL.md +++ b/.claude/skills/aube-bump/SKILL.md @@ -245,12 +245,18 @@ applies. Reverting was correct. Let the tests arbitrate; don't defend a graft. Grep after every bump — if one vanished, a resolution was wrong: ```sh -grep -rn "workspace_markers\|lockfile_basename\|EmbedderProfile\|read_branded_pnpm_config\|env_prefix\|cache_namespace\|engine_context\|env_overlay\|path_prepends\|runtime_node\|cold_path" vendor/aube/crates +grep -rn "workspace_markers\|lockfile_basename\|virtual_store_subdir\|branded_env_alias_enabled\|read_branded_pnpm_config\|env_prefix\|cache_namespace\|engine_context\|env_overlay\|path_prepends\|runtime_node\|cold_path" vendor/aube/crates ``` - **Embedder profile plumbing** — `env_prefix`, `cache_namespace`, `lockfile_basename`, - `workspace_markers`, `read_branded_pnpm_config` gating. Holds the brand + config boundary. Largely - upstreamed, so it usually converges rather than conflicts. + `workspace_markers`, `virtual_store_subdir`, `read_branded_pnpm_config` gating. Holds the brand + + config boundary. Largely upstreamed, so it usually converges rather than conflicts. The profile type + is `Embedder` (`aube-util/src/identity.rs`), reached via `aube_util::embedder()`. + `virtual_store_subdir` earns its place in the grep: the v1.35 bump auto-merged two upstream call sites + that hardcoded `aube_store::VIRTUAL_STORE_SUBDIR` (`"virtual-store"`) over nub's profile-named leaf, + with **no conflict markers** — it would have shipped silently. `branded_env_alias_enabled` + (`aube-util/src/env.rs`) is the single switch gating every `AUBE_*` alias in `settings.toml`, so each + bump's new branded settings inherit the boundary from it alone. - **Linker** — GVS, collective hidden tree as the sole phantom mechanism, per-package force-materialization (`diskMaterializePackages`), workspace-spanning hoisted planning, memoized clonedir probes, whole-dir `clonefile` on macOS, direct-exec of native bins. diff --git a/Cargo.lock b/Cargo.lock index 5e890b4a6..96c906588 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,7 +203,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "aube" -version = "1.32.0" +version = "1.35.0" dependencies = [ "ambient-id", "aube-codes", @@ -224,7 +224,7 @@ dependencies = [ "ci_info", "clap", "clap_usage", - "clx", + "clx 3.0.2", "console", "demand", "diffy", @@ -261,7 +261,7 @@ dependencies = [ [[package]] name = "aube-codes" -version = "1.32.0" +version = "1.35.0" dependencies = [ "serde", "serde_json", @@ -269,7 +269,7 @@ dependencies = [ [[package]] name = "aube-linker" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-lockfile", @@ -296,7 +296,7 @@ dependencies = [ [[package]] name = "aube-lockfile" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -320,7 +320,7 @@ dependencies = [ [[package]] name = "aube-manifest" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-util", @@ -337,7 +337,7 @@ dependencies = [ [[package]] name = "aube-registry" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -362,7 +362,7 @@ dependencies = [ [[package]] name = "aube-resolver" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-lockfile", @@ -390,7 +390,7 @@ dependencies = [ [[package]] name = "aube-runtime" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -413,7 +413,7 @@ dependencies = [ [[package]] name = "aube-scripts" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -432,7 +432,7 @@ dependencies = [ [[package]] name = "aube-settings" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-util", @@ -444,7 +444,7 @@ dependencies = [ [[package]] name = "aube-store" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-util", "base64", @@ -469,7 +469,7 @@ dependencies = [ [[package]] name = "aube-util" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "blake3", @@ -489,7 +489,7 @@ dependencies = [ [[package]] name = "aube-workspace" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -844,9 +844,9 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "clap_usage" -version = "2.0.3" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7179a7bcab80d71e4524ae4a384cb9180b6ca3eb30d8e398add707541989ce4a" +checksum = "46d067625f5704e5722fe7e46407fef7e79680d6dfd045d29036149d90ec044b" dependencies = [ "clap", "usage-lib", @@ -863,7 +863,23 @@ dependencies = [ "serde", "serde_json", "strum", - "tera", + "tera 1.20.1", + "thiserror 2.0.18", + "unicode-width 0.2.2", +] + +[[package]] +name = "clx" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a65674abcd65c2846d6bfc4c9816ab9177b15277a18a78aa1691683ce63095" +dependencies = [ + "console", + "nix 0.31.3", + "serde", + "serde_json", + "strum", + "tera 2.1.0", "thiserror 2.0.18", "unicode-width 0.2.2", ] @@ -2167,6 +2183,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b4baf93f58d4425749ca49a51c50ebab072c5df6994d08fed93541c331481dc" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.18" @@ -2689,7 +2714,7 @@ dependencies = [ "aube-workspace", "base64", "clap", - "clx", + "clx 2.1.0", "console", "demand", "dirs-next", @@ -3867,9 +3892,9 @@ dependencies = [ [[package]] name = "roff" -version = "0.2.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" +checksum = "323c417e1d9665a65b263ec744ba09030cfb277e9daa0b018a4ab62e57bc8189" [[package]] name = "rustc-demangle" @@ -4830,6 +4855,15 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "tera" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "511f07fd91a70e92efbe4793d111aaa9035f8474dd157aaa1e31e7c27f5051da" +dependencies = [ + "serde", +] + [[package]] name = "termcolor" version = "1.4.1" @@ -5370,14 +5404,14 @@ dependencies = [ [[package]] name = "usage-lib" -version = "2.18.2" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1851c9ddbc3a428af152852227363e7f66b73ca2ce732c8db3c2d4ab37eb63d2" +checksum = "b60d4043943b220cc7269576a383ff2d62ab00f208f10d94b2496791729f8b02" dependencies = [ "clap", "heck", "indexmap 2.14.0", - "itertools 0.14.0", + "itertools 0.15.0", "kdl", "log", "miette", @@ -5386,7 +5420,7 @@ dependencies = [ "serde", "shell-words", "strum", - "tera", + "tera 2.1.0", "thiserror 2.0.18", "versions", "xx", diff --git a/crates/nub-cli/src/pm_engine/vite_compat.rs b/crates/nub-cli/src/pm_engine/vite_compat.rs index 2d400c766..109eb485a 100644 --- a/crates/nub-cli/src/pm_engine/vite_compat.rs +++ b/crates/nub-cli/src/pm_engine/vite_compat.rs @@ -234,9 +234,17 @@ pub(crate) fn vite_lt_8_1(version: &str) -> bool { /// embedder-namespaced to `~/.cache/nub/pm`). This is the realpath prefix of /// every store-resident served module, so it is the value Vite must allow. The /// leaf name comes from the active embedder (`store` under nub), matching what -/// `aube_store::Store::virtual_store_dir` writes, so the two never drift. The -/// embedder profile is registered by the time install runs, so -/// `aube_store::dirs::cache_dir()` resolves the nub namespace. +/// `aube_store::Store::virtual_store_dir` writes. The embedder profile is +/// registered by the time install runs, so `aube_store::dirs::cache_dir()` +/// resolves the nub namespace. +/// +/// Only the DEFAULT location is reproduced here. aube v1.35.0 added the +/// `globalVirtualStoreDir` / `cacheDir` settings, which relocate the real store +/// at runtime; the resolver for those (`commands::settings_context:: +/// global_virtual_store_dir`) is `pub(crate)` to the aube crate, so nub cannot +/// consult it without widening that surface. A project that sets either setting +/// therefore gets a `.modules.yaml` naming the default path rather than the +/// relocated one, and Vite would not be told to allow the real store. fn global_virtual_store_dir() -> Option { aube_store::dirs::cache_dir().map(|c| c.join(aube_util::embedder().virtual_store_subdir)) } diff --git a/vendor/aube/.github/renovate.json b/vendor/aube/.github/renovate.json index f94204c37..491947f76 100644 --- a/vendor/aube/.github/renovate.json +++ b/vendor/aube/.github/renovate.json @@ -8,6 +8,12 @@ "matchManagers": ["cargo"], "matchPackageNames": ["/^sigstore-/"], "groupName": "sigstore crates" + }, + { + "description": "decmpfs 0.1.2 fails to compile for musl targets (FICLONE ioctl request typed c_ulong, which is c_int on musl). Hold at 0.1.0 until upstream fixes it.", + "matchManagers": ["cargo"], + "matchPackageNames": ["decmpfs"], + "allowedVersions": "<=0.1.0" } ] } diff --git a/vendor/aube/.github/workflows/auto-merge-release.yml b/vendor/aube/.github/workflows/auto-merge-release.yml index 52a8c31a7..c0b80ace9 100644 --- a/vendor/aube/.github/workflows/auto-merge-release.yml +++ b/vendor/aube/.github/workflows/auto-merge-release.yml @@ -18,7 +18,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 fetch-tags: true diff --git a/vendor/aube/.github/workflows/bench-pr.yml b/vendor/aube/.github/workflows/bench-pr.yml deleted file mode 100644 index 431dec542..000000000 --- a/vendor/aube/.github/workflows/bench-pr.yml +++ /dev/null @@ -1,129 +0,0 @@ -name: pr-bench - -on: - workflow_dispatch: - pull_request: - types: [opened, synchronize] - -permissions: - contents: read - issues: write - pull-requests: write - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -env: - CARGO_INCREMENTAL: "0" - -jobs: - bench: - name: Compare PR performance - if: github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-plz-') - runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=aube-rust-linux - timeout-minutes: 45 - steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 - with: - fetch-depth: 0 - submodules: recursive - persist-credentials: false - - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1.6.0 - with: - cache: rust - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 - with: - install: false - env: - MISE_LOCKED: "1" - - name: Restore hermetic bench registry cache - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 - with: - path: ~/.cache/aube-bench/registry - key: aube-bench-registry-${{ runner.os }}-v1 - - # Compare fresh base/head measurements from the same runner instead - # of diffing against committed benchmarks/results.json. The warm - # install scenario is syscall-heavy enough that stale cross-run - # baselines routinely look like false regressions. - - name: Benchmark PR base - run: | - if [ -n "$BASE_SHA" ]; then - git checkout --detach "$BASE_SHA" - cargo build --release - RESULTS_JSON=/tmp/aube-bench-base.json \ - BENCH_TOOLS=aube,bun,pnpm \ - BENCH_SCENARIOS=gvs-warm,gvs-cold \ - BENCH_PHASES=0 \ - RUNS=3 \ - WARMUP=1 \ - BENCH_HERMETIC=1 \ - BENCH_BANDWIDTH=500mbit \ - BENCH_LATENCY=50ms \ - AUBE_FORCE_METADATA_PRIMER=true \ - mise x aqua:sharkdp/hyperfine@latest github:pnpm/pnpm@latest bun@latest node@24 -- bash benchmarks/bench.sh - exit 0 - fi - cp benchmarks/results.json /tmp/aube-bench-base.json - env: - BASE_SHA: ${{ github.event.pull_request.base.sha }} - - # TODO: switch pnpm back to `aqua:pnpm/pnpm@latest` once aqua's - # pnpm registry entry stops looking for `pnpm-linux-x64.tar.gz` - # (pnpm publishes plain binaries, not tarballs). - - name: Benchmark PR head - run: | - if [ -n "$HEAD_SHA" ]; then - git checkout --detach "$HEAD_SHA" - fi - cargo build --release - RESULTS_JSON=/tmp/aube-bench-head.json \ - BENCH_TOOLS=aube,bun,pnpm \ - BENCH_SCENARIOS=gvs-warm,gvs-cold \ - BENCH_PHASES=1 \ - RUNS=3 \ - WARMUP=1 \ - BENCH_HERMETIC=1 \ - BENCH_BANDWIDTH=500mbit \ - BENCH_LATENCY=50ms \ - AUBE_FORCE_METADATA_PRIMER=true \ - mise x aqua:sharkdp/hyperfine@latest github:pnpm/pnpm@latest bun@latest node@24 -- bash benchmarks/bench.sh - env: - HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} - - - name: Summarize change - run: node benchmarks/summarize-results-change.mts /tmp/aube-bench-base.json /tmp/aube-bench-head.json > /tmp/aube-bench-summary.md - - - name: Write benchmark summary - if: github.event_name == 'pull_request' - run: cat /tmp/aube-bench-summary.md >> "$GITHUB_STEP_SUMMARY" - - - name: Comment on PR - if: github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository - env: - GH_TOKEN: ${{ github.token }} - GH_REPO: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} - BASE_SHA: ${{ github.event.pull_request.base.sha }} - HEAD_SHA: ${{ github.event.pull_request.head.sha }} - run: | - marker='' - base_short="${BASE_SHA:0:12}" - head_short="${HEAD_SHA:0:12}" - { - printf '%s\n' "$marker" - cat /tmp/aube-bench-summary.md - printf '\n' - printf '_%s vs %s | freshly benchmarked base/head | aube/bun/pnpm | 2 scenarios | 3 runs | 500mbit/50ms | generated by Codex._\n' "$head_short" "$base_short" - } > /tmp/aube-bench-comment.md - - existing="$(gh api "repos/$GH_REPO/issues/$PR_NUMBER/comments" --paginate \ - --jq ".[] | select(.body | contains(\"$marker\")) | .id" | tail -n1)" - if [ -n "$existing" ]; then - gh api --method PATCH "repos/$GH_REPO/issues/comments/$existing" \ - --field body="$(cat /tmp/aube-bench-comment.md)" - else - gh api --method POST "repos/$GH_REPO/issues/$PR_NUMBER/comments" \ - --field body="$(cat /tmp/aube-bench-comment.md)" - fi diff --git a/vendor/aube/.github/workflows/bench-refresh.yml b/vendor/aube/.github/workflows/bench-refresh.yml index fad41b36a..65b19e0d6 100644 --- a/vendor/aube/.github/workflows/bench-refresh.yml +++ b/vendor/aube/.github/workflows/bench-refresh.yml @@ -40,7 +40,7 @@ jobs: workspace: ${{ steps.drift.outputs.workspace }} bench: ${{ steps.drift.outputs.bench }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Compare workspace vs bench version @@ -77,16 +77,16 @@ jobs: contents: write pull-requests: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 token: ${{ secrets.AUBE_GH_TOKEN }} submodules: recursive persist-credentials: false - - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1.6.0 + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 with: cache: rust - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 env: MISE_LOCKED: "1" - name: Restore hermetic bench registry cache diff --git a/vendor/aube/.github/workflows/ci.yml b/vendor/aube/.github/workflows/ci.yml index 92792543b..c550f3e68 100644 --- a/vendor/aube/.github/workflows/ci.yml +++ b/vendor/aube/.github/workflows/ci.yml @@ -44,15 +44,15 @@ jobs: env: RUSTFLAGS: "-D warnings" steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1.6.0 + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 with: cache: rust - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 # zizmor: ignore[cache-poisoning] PRs restore only; saves are restricted to main with: - cache: false + cache_save: ${{ github.ref == 'refs/heads/main' }} - run: mise run build - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: @@ -73,15 +73,15 @@ jobs: env: RUSTFLAGS: "-D warnings" steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1.6.0 + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 with: cache: rust - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 # zizmor: ignore[cache-poisoning] PRs restore only; saves are restricted to main with: - cache: false + cache_save: ${{ github.ref == 'refs/heads/main' }} - run: node benchmarks/validate-results.mts - run: mise run test - run: mise run lint @@ -100,6 +100,100 @@ jobs: fi - run: mise run docs:build + # Guards the embedding API surfaces `embed` introduced against + # unintended breaks: + # * Rust library crates (aube-codes/aube-settings/aube-util) via + # cargo-semver-checks, baselined against main. + # * The C ABI export set via the cdylib's dynamic symbol table diffed + # against the frozen crates/aube-ffi/abi-symbols.txt manifest. + # A Rust break is allowed only when the PR is explicitly marked + # breaking — a `!` in the conventional-commit title (feat(ffi)!: ...), + # a `BREAKING CHANGE:` footer in the body, or the `breaking-api` + # label — the same signals that drive release-plz's major bump, so the + # gate and the version bump agree. + # Symbol drift always blocks (keeps the manifest honest); removing an + # export shows as a manifest deletion in the diff and must ride a + # breaking PR. + api-stability: + # PR-time gate only: the checks read `github.event.pull_request.*` and + # baseline against main, which is meaningless on push/tag/dispatch runs + # (those fields are undefined there). `final` treats the resulting + # `skipped` as a pass. + if: github.event_name == 'pull_request' + runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=aube-rust-linux + timeout-minutes: 20 + permissions: + contents: read + env: + RUSTFLAGS: "-D warnings" + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + fetch-depth: 0 + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 + with: + cache: rust + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 # zizmor: ignore[cache-poisoning] PRs restore only; saves are restricted to main + with: + cache_save: ${{ github.ref == 'refs/heads/main' }} + - name: Fetch semver baseline + run: git fetch --no-tags origin +refs/heads/main:refs/remotes/origin/main + - name: Determine breaking-change override + id: gate + env: + PR_TITLE: ${{ github.event.pull_request.title }} + PR_BODY: ${{ github.event.pull_request.body }} + PR_LABELS: ${{ toJSON(github.event.pull_request.labels.*.name) }} + run: | + breaking=false + # conventional-commit breaking marker: type(scope)!: or type!: + if printf '%s' "$PR_TITLE" | grep -qE '^[a-z]+(\([^)]*\))?!:'; then breaking=true; fi + # conventional-commit breaking footer in the body (release-plz + # honors `BREAKING CHANGE:` / `BREAKING-CHANGE:` for the major bump). + if printf '%s' "$PR_BODY" | grep -qE '^BREAKING[ -]CHANGE:'; then breaking=true; fi + if printf '%s' "$PR_LABELS" | grep -q '"breaking-api"'; then breaking=true; fi + echo "breaking=$breaking" >> "$GITHUB_OUTPUT" + echo "breaking override: $breaking" + - name: Rust embedding API — cargo-semver-checks + id: semver + continue-on-error: true + # Version pinned in bin/cargo-semver-checks (mise tool-stub). + run: | + ./bin/cargo-semver-checks semver-checks \ + --baseline-rev origin/main \ + --package aube-codes --package aube-settings --package aube-util + - name: C ABI — frozen export set + id: ffi + continue-on-error: true + run: | + cargo build --locked --profile ffi -p aube-ffi + grep -vE '^[[:space:]]*(#|$)' crates/aube-ffi/abi-symbols.txt | sort -u > /tmp/abi-expected.txt + nm -D --defined-only --extern-only target/ffi/libaube_ffi.so \ + | awk '{ print $3 }' | grep '^aube_' | sort -u > /tmp/abi-actual.txt + diff -u /tmp/abi-expected.txt /tmp/abi-actual.txt + - name: Enforce API stability + if: always() + env: + SEMVER: ${{ steps.semver.outcome }} + FFI: ${{ steps.ffi.outcome }} + BREAKING: ${{ steps.gate.outputs.breaking }} + run: | + fail=0 + if [ "$FFI" = failure ]; then + echo "::error::C ABI exports drifted from crates/aube-ffi/abi-symbols.txt. Update the manifest to match; removing or renaming an export is a breaking change — also mark the PR breaking (a '!' in the title or the 'breaking-api' label)." + fail=1 + fi + if [ "$SEMVER" = failure ]; then + if [ "$BREAKING" = true ]; then + echo "::notice::Rust embedding API compatibility check failed; allowed because this PR is marked breaking. Inspect the cargo-semver-checks output to confirm the failure is expected." + else + echo "::error::Rust embedding API compatibility check failed. Inspect the cargo-semver-checks output above. If it reports an intentional breaking change, mark the PR breaking: a '!' in the conventional-commit title (e.g. feat(settings)!: ...), a 'BREAKING CHANGE:' footer in the body, or the 'breaking-api' label." + fail=1 + fi + fi + exit $fail + # BATS integration shards. Linux runs 4 shards (matches Buildkite), # macOS runs 2. Keep these on GitHub-hosted runners: the jail-build # tests assert native OS sandbox behavior that does not match the @@ -148,7 +242,7 @@ jobs: AUBE_BATS_SHARD_INDEX: ${{ matrix.shard }} AUBE_BATS_SHARD_COUNT: ${{ matrix.count }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Install GNU parallel (ubuntu) @@ -157,9 +251,9 @@ jobs: - name: Install GNU parallel (macos) if: startsWith(matrix.os, 'macos') run: brew install parallel - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 # zizmor: ignore[cache-poisoning] PRs restore only; saves are restricted to main with: - cache: false + cache_save: ${{ github.ref == 'refs/heads/main' }} - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: name: aube-${{ matrix.os }} @@ -193,7 +287,7 @@ jobs: env: AUBE_CI_OS: ${{ startsWith(matrix.os, 'ubuntu') && 'linux' || 'macos' }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - name: Install GNU parallel (ubuntu) @@ -202,9 +296,9 @@ jobs: - name: Install GNU parallel (macos) if: startsWith(matrix.os, 'macos') run: brew install parallel - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 # zizmor: ignore[cache-poisoning] PRs restore only; saves are restricted to main with: - cache: false + cache_save: ${{ github.ref == 'refs/heads/main' }} - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 with: name: aube-${{ matrix.os }} @@ -228,7 +322,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 # zizmor: ignore[cache-poisoning] save-if gates writes to main; PRs read-only @@ -244,6 +338,8 @@ jobs: # Aggregator that required-status-checks can target. If any upstream job # failed, was cancelled, or was skipped, this step exits non-zero so the PR is # blocked. Lets the branch-protection rule depend on one name instead of ten. + # Exception: jobs in SKIP_OK below (api-stability, a PR-only gate) are allowed + # to skip on push/tag/dispatch runs without failing the aggregate. final: needs: - build @@ -251,6 +347,7 @@ jobs: - bats - bats-serial - windows + - api-stability runs-on: namespace-profile-endev-linux-amd64 timeout-minutes: 2 permissions: {} @@ -267,12 +364,18 @@ jobs: import os import sys + # Jobs whose `if:` legitimately skips them on non-PR runs. A skip + # here is a pass; every other job must actually succeed. + SKIP_OK = {"api-stability"} + needs = json.loads(os.environ["NEEDS_JSON"]) failed = False for name, data in sorted(needs.items()): result = data.get("result", "unknown") if result == "success": print(f"::notice::{name}: {result}") + elif result == "skipped" and name in SKIP_OK: + print(f"::notice::{name}: {result} (allowed to skip)") else: print(f"::error::{name}: {result}") failed = True diff --git a/vendor/aube/.github/workflows/copr-publish.yml b/vendor/aube/.github/workflows/copr-publish.yml index c2c3cd8c5..90e8c3dc7 100644 --- a/vendor/aube/.github/workflows/copr-publish.yml +++ b/vendor/aube/.github/workflows/copr-publish.yml @@ -80,7 +80,7 @@ jobs: echo "TAG=$TAG" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ env.TAG }} fetch-depth: 0 diff --git a/vendor/aube/.github/workflows/docs.yml b/vendor/aube/.github/workflows/docs.yml index 64d96d000..f082c9a9a 100644 --- a/vendor/aube/.github/workflows/docs.yml +++ b/vendor/aube/.github/workflows/docs.yml @@ -28,14 +28,14 @@ jobs: contents: read steps: - name: Checkout - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 persist-credentials: false - - uses: namespacelabs/nscloud-cache-action@58bf6e08898e88803c098e2b522668541cd3b2e3 # v1.6.0 + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 with: cache: rust - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 - name: Build aube run: cargo build - name: Setup Pages diff --git a/vendor/aube/.github/workflows/ffi.yml b/vendor/aube/.github/workflows/ffi.yml index f888e7fac..7ef369191 100644 --- a/vendor/aube/.github/workflows/ffi.yml +++ b/vendor/aube/.github/workflows/ffi.yml @@ -91,7 +91,7 @@ jobs: timeout-minutes: 60 permissions: { contents: read } steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: { persist-credentials: false, ref: "${{ inputs.tag || github.ref }}" } - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: { node-version: "24", package-manager-cache: false } @@ -158,11 +158,11 @@ jobs: runs-on: ubuntu-latest permissions: { contents: read, id-token: write, attestations: write } steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: { persist-credentials: false, ref: "${{ inputs.tag || github.ref }}" } - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: { node-version: "24", package-manager-cache: false } - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: tool_versions: | bun 1.3.11 diff --git a/vendor/aube/.github/workflows/node-addon.yml b/vendor/aube/.github/workflows/node-addon.yml index 51ea7b3d1..79247e397 100644 --- a/vendor/aube/.github/workflows/node-addon.yml +++ b/vendor/aube/.github/workflows/node-addon.yml @@ -66,7 +66,7 @@ jobs: timeout-minutes: 60 permissions: { contents: read } steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: { persist-credentials: false, ref: "${{ inputs.tag || github.ref }}" } - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: { node-version: "24", package-manager-cache: false } @@ -137,11 +137,11 @@ jobs: runs-on: ubuntu-latest permissions: { contents: read, id-token: write, attestations: write } steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: { persist-credentials: false, ref: "${{ inputs.tag || github.ref }}" } - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 with: { node-version: "24", package-manager-cache: false } - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: tool_versions: bun 1.3.11 install_args: bun diff --git a/vendor/aube/.github/workflows/perf-backfill.yml b/vendor/aube/.github/workflows/perf-backfill.yml new file mode 100644 index 000000000..5936570c0 --- /dev/null +++ b/vendor/aube/.github/workflows/perf-backfill.yml @@ -0,0 +1,241 @@ +name: perf-backfill + +# Seeds refs/notes/tak with measurements of already-published aube binaries, so +# the performance history starts with a real series instead of one point. +# +# The alternative is rebuilding aube at 64 historical commits, which is hours of +# compute and fails outright on old commits whose dependencies no longer +# resolve. Downloading what was already published takes minutes and measures the +# exact artifact users installed. +# +# Dispatch-only, and effectively idempotent: release binaries are immutable, so +# a second run produces byte-identical records that cat_sort_uniq collapses on +# merge. Re-running is harmless, just pointless. +# +# Split into two jobs so the repository-write token is never present while +# downloaded binaries are executing. `measure` runs 64 historical executables +# and holds only a read token; `publish` holds the write token and runs nothing +# but git. + +on: + workflow_dispatch: + inputs: + limit: + description: Most recent releases to measure + required: false + default: "64" + type: string + +permissions: {} + +concurrency: + group: perf-backfill + cancel-in-progress: false + +jobs: + measure: + name: Measure released binaries + # Same runner class as perf.yml. Absolute instruction counts shift between + # machine types by more than a real regression does, so the backfilled + # series and the ongoing one have to come from the same kind of machine. + runs-on: namespace-profile-endev-linux-amd64 + timeout-minutes: 60 + permissions: + contents: read # listing releases and downloading assets; no write here + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + # tak resolves each release tag to the commit it points at, so a + # measurement lands on the commit that produced it rather than on + # HEAD. That needs the tags, and a shallow checkout has none. + fetch-depth: 0 + persist-credentials: false + + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + env: + MISE_LOCKED: "1" + + - name: Install valgrind + run: | + command -v valgrind || { + sudo apt-get update + sudo apt-get install -y --no-install-recommends valgrind + } + valgrind --version + + # `sbom` rather than tak's default of `--version`. aube's `-V` is + # documented as "print version and check for updates", and a subject that + # talks to the network cannot hold a stable instruction count. + # + # `sbom` reads only the committed lockfile — no node_modules, no store, no + # registry — so it needs no setup and cannot be perturbed. It was checked + # against releases sampled across the whole range, back to v1.0.0-beta.1, + # and works on all of them; `prefix` does not exist that far back. + # + # Separate bench name from the CI series on purpose. These are release + # artifacts built by the release pipeline; perf.yml measures a plain + # `cargo build --release`. Plotting them on one axis would compare build + # configurations, not commits. + # + # The fixture path is absolute so it does not depend on the working + # directory tak happens to run each downloaded binary from. + # + # This step executes 64 binaries downloaded from the releases API. The + # token in scope is read-only, so what they inherit is worth nothing + # beyond what a public clone already grants. + - name: Backfill from published releases + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + LIMIT: ${{ inputs.limit }} + run: | + tak backfill --bench release-graph --limit "$LIMIT" -- \ + -C "$GITHUB_WORKSPACE/fixtures/medium" sbom + + # A bundle is how the notes reach the publish job: it carries the ref and + # its object closure in one file, and `git fetch` restores it exactly. + # Passing the records as text would mean re-deriving the ref on the far + # side and getting the cat_sort_uniq byte-ordering right by hand. + - name: Bundle the notes + run: | + git bundle create notes.bundle refs/notes/tak + git bundle verify notes.bundle + + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: tak-notes + path: notes.bundle + retention-days: 1 + if-no-files-found: error + + - name: Summary + env: + LIMIT: ${{ inputs.limit }} + run: | + { + echo "Measured up to ${LIMIT} releases as \`release-graph\`." + echo + echo '```' + tak history 2>&1 | head -40 + echo '```' + } >> "$GITHUB_STEP_SUMMARY" + + publish: + name: Publish measurements + needs: measure + # Only main publishes. workflow_dispatch can be pointed at any branch or + # tag, and refs/notes/tak is a shared baseline. A dispatch from a branch + # still measures and still prints its numbers in the summary above — it + # just keeps them out of the shared series, which matters because a branch + # may have changed the fixture or the subject while keeping the bench name. + if: github.ref == 'refs/heads/main' + runs-on: namespace-profile-endev-linux-amd64 + timeout-minutes: 10 + permissions: + contents: write # pushing refs/notes/tak is a write to this repository + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + # Tags, so the validation below can check that every note attaches to + # a commit some release tag points at. Fetched here rather than + # trusted from the measure job's checkout, which untrusted binaries + # ran inside. + fetch-depth: 0 + persist-credentials: false + + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + env: + MISE_LOCKED: "1" + + - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8 + with: + name: tak-notes + + # The measure job runs 64 downloaded executables in a writable checkout, + # so anything it hands over is untrusted input crossing into a job that + # can write to the repository. Everything below runs before the write + # token is in scope. + # + # What this defends is the shape and placement of the data, not its + # truthfulness. A subject that lies about its own performance cannot be + # caught here, and no arrangement of jobs could catch it, because the + # subject *is* the measurement. What it stops is a tampered bundle + # carrying extra refs, notes on unrelated objects, records for another + # benchmark, or non-numeric metrics into this repository. + - name: Verify the bundle carries only measurements + env: + EXPECTED_BENCH: release-graph + run: | + git bundle verify notes.bundle + + refs=$(git bundle list-heads notes.bundle | awk '{print $2}') + if [ "$refs" != "refs/notes/tak" ]; then + echo "::error::bundle carries unexpected refs:" + printf '%s\n' "$refs" + exit 1 + fi + + git fetch notes.bundle 'refs/notes/tak:refs/notes/tak' + + # Notes may only attach to a commit a release tag resolves to. + # Backfill measures published releases and nothing else, so a note + # anywhere else was not written by the run we asked for. + # + # Peeled commits only. tak resolves a tag with `rev-parse tag^{commit}` + # and records against that, so an annotated tag's own object is + # somewhere tak never writes — accepting it would leave a slot for a + # valid-looking record on an object the measurement never touched. + # The %(if) picks the peeled commit for annotated tags and the object + # itself for lightweight ones, where they are the same thing. + git for-each-ref refs/tags \ + --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end)' \ + | grep -v '^$' | sort -u > /tmp/tag-objects + + git notes --ref=tak list > /tmp/note-list + bad=0 + notes=0 + records=0 + while read -r _blob target; do + notes=$((notes + 1)) + if ! grep -qx "$target" /tmp/tag-objects; then + echo "::error::note on $target, which no release tag points at" + bad=1 + continue + fi + # Shape alone would accept a forged record, so this also pins the + # schema version, the benchmark name, and that metrics are numbers. + git notes --ref=tak show "$target" > /tmp/note-body + while IFS= read -r line; do + [ -z "$line" ] && continue + records=$((records + 1)) + printf '%s' "$line" | jq -e --arg want "$EXPECTED_BENCH" ' + type == "object" + and .v == 1 + and .bench == $want + and (.metrics | type == "object") + and (.metrics | length > 0) + and ([.metrics[] | type] | all(. == "number")) + ' > /dev/null 2>&1 || { echo "::error::rejected on $target: $line"; bad=1; } + done < /tmp/note-body + done < /tmp/note-list + + if [ "$bad" -ne 0 ]; then exit 1; fi + if [ "$records" -eq 0 ]; then + echo "::error::the bundle contains no measurements" + exit 1 + fi + echo "verified $records records across $notes tagged commits" + + # `tak push` rather than a plain `git push`: it re-fetches and merges with + # cat_sort_uniq when it loses a race, which it can against perf.yml. + # + # persist-credentials: false means the push needs its own auth. Same + # pattern as perf.yml and bench-refresh.yml: re-point origin rather than + # pushing to a one-shot URL, so tak's retry path has a remote to fetch + # from. + - name: Push measurements + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + run: | + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${REPOSITORY}.git" + tak push diff --git a/vendor/aube/.github/workflows/perf-pr.yml b/vendor/aube/.github/workflows/perf-pr.yml new file mode 100644 index 000000000..bb760bcda --- /dev/null +++ b/vendor/aube/.github/workflows/perf-pr.yml @@ -0,0 +1,159 @@ +name: perf-pr + +# Measures this pull request and compares it against the commit it branched +# from, then says so in a comment and fails if an instruction count rose beyond +# the gate. +# +# The gate is the point. A chart on a dashboard is something nobody opens; a +# failing check on the pull request that caused the regression is read by the +# person who can still do something about it. +# +# Nothing here writes to refs/notes/tak. A pull request's measurements are +# recorded locally, used for the comparison, and discarded with the runner. Only +# main contributes to the history — a branch's numbers are not the trunk's, and +# a series that mixes them cannot be read. + +on: + pull_request: + types: [opened, synchronize, reopened] + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: "0" + +jobs: + compare: + name: Compare instruction counts + if: github.event_name == 'pull_request' + # Same runner class as perf.yml and perf-backfill.yml. Absolute counts shift + # between machine types by more than a real regression does, so a comparison + # across runner classes is not a comparison — tak refuses to make one, and + # the report would say "nothing was compared" instead of anything useful. + runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=aube-rust-linux + timeout-minutes: 40 + permissions: + contents: read + pull-requests: write # the sticky comment + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + # The branch commit, not the merge commit actions/checkout defaults to + # for a pull_request event. That default is synthetic: it exists only + # for the run, changes whenever main advances, and measuring it would + # attribute a number to a commit nobody can check out. It would also + # make the footer below name a commit the measurement is not of. + ref: ${{ github.event.pull_request.head.sha }} + # Needed twice over: to find the merge base, and for the sparkline, + # which walks twenty commits of trunk history. + fetch-depth: 0 + persist-credentials: false + + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 + with: + cache: rust + + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + with: + cache_save: false + env: + MISE_LOCKED: "1" + + - name: Install valgrind + run: | + command -v valgrind || { + sudo apt-get update + sudo apt-get install -y --no-install-recommends valgrind + } + valgrind --version + + # `--record` writes a git note locally and nothing more. There is no + # `tak push` in this workflow and there should never be one. + - name: Measure this pull request + run: mise run perf:record + + - name: Find the base commit + id: base + env: + BASE_REF: ${{ github.base_ref }} + run: | + git fetch --quiet origin "$BASE_REF" + # The merge base, not the branch tip: comparing against a moving + # target attributes other people's commits to this pull request. + base=$(git merge-base "origin/$BASE_REF" HEAD) + echo "sha=$base" >> "$GITHUB_OUTPUT" + echo "comparing against $base on $BASE_REF" + + # Deliberately not `continue-on-error`. That would hide a compare that + # died for an unrelated reason behind a green check. The exit code is + # captured, the comment is posted either way, and a later step re-raises + # it — so a regression always arrives with the table that explains it. + - name: Compare against the base + env: + BASE_SHA: ${{ steps.base.outputs.sha }} + run: | + set +e + tak compare "$BASE_SHA" > /tmp/tak-report.md + echo $? > /tmp/tak-gate-status + set -e + cat /tmp/tak-report.md + cat /tmp/tak-report.md >> "$GITHUB_STEP_SUMMARY" + + # Skipped for pull requests from forks, which get a read-only token. The + # comparison and the gate still run there; only the comment is missing. + - name: Comment on the pull request + if: github.event.pull_request.head.repo.full_name == github.repository + env: + GH_TOKEN: ${{ github.token }} + GH_REPO: ${{ github.repository }} + PR_NUMBER: ${{ github.event.pull_request.number }} + BASE_SHA: ${{ steps.base.outputs.sha }} + HEAD_SHA: ${{ github.event.pull_request.head.sha }} + run: | + marker='' + # The backticks below are markdown, not command substitution, and + # single quotes are what keeps them literal. + # shellcheck disable=SC2016 + { + printf '%s\n' "$marker" + printf '### Instruction counts\n\n' + cat /tmp/tak-report.md + printf '\n`%s` vs `%s` · measured on this runner, not pushed to the history.\n' \ + "${HEAD_SHA:0:12}" "${BASE_SHA:0:12}" + } > /tmp/tak-comment.md + + # One comment per pull request, edited in place. A new comment on + # every push buries the conversation under numbers. + existing="$(gh api "repos/$GH_REPO/issues/$PR_NUMBER/comments" --paginate \ + --jq ".[] | select(.body | contains(\"$marker\")) | .id" | tail -n1)" + if [ -n "$existing" ]; then + gh api --method PATCH "repos/$GH_REPO/issues/comments/$existing" \ + --field body="$(cat /tmp/tak-comment.md)" + else + gh api --method POST "repos/$GH_REPO/issues/$PR_NUMBER/comments" \ + --field body="$(cat /tmp/tak-comment.md)" + fi + + # `always()` because a step that fails stops the ones after it, and the + # gate is the reason this workflow exists. Without it, a `gh api` hiccup + # in the comment step would skip the gate entirely: the job would still go + # red, but for the wrong reason and with no regression error to read. + - name: Fail on a regression + if: always() + run: | + if [ ! -f /tmp/tak-gate-status ]; then + echo "::error::the comparison never ran — nothing was gated" + exit 1 + fi + status=$(cat /tmp/tak-gate-status) + if [ "$status" -ne 0 ]; then + echo "::error::an instruction count rose beyond the gate — see the table in the comment or the job summary" + exit "$status" + fi diff --git a/vendor/aube/.github/workflows/perf.yml b/vendor/aube/.github/workflows/perf.yml new file mode 100644 index 000000000..499d23d6f --- /dev/null +++ b/vendor/aube/.github/workflows/perf.yml @@ -0,0 +1,89 @@ +name: perf + +# Records aube's startup cost for every commit that lands on main, into the +# git-notes ref `refs/notes/tak`. The data lives in this repository — there is +# no external service holding it, and `git fetch origin refs/notes/tak:refs/notes/tak` +# gets you the whole history. +# +# Only runs post-merge. A PR-time gate is the eventual goal, but a gate needs a +# baseline series to compare against, and right now there is none. This builds +# that baseline. + +on: + push: + branches: ["main"] + workflow_dispatch: + +permissions: {} + +# Never two at once. Concurrent runs race the notes push; tak retries with a +# cat_sort_uniq merge so nothing is lost, but serialising avoids the churn. +# cancel-in-progress is off deliberately: every commit gets a measurement, and +# a cancelled run is a hole in the series. +concurrency: + group: perf + cancel-in-progress: false + +env: + CARGO_TERM_COLOR: always + CARGO_INCREMENTAL: "0" + +jobs: + measure: + name: Measure + # Pinned to one runner class on purpose. Absolute instruction counts shift + # between machine types by more than a real regression does, so a series + # that wanders between runners is unreadable. + runs-on: namespace-profile-endev-linux-amd64;overrides.cache-tag=aube-rust-linux + timeout-minutes: 30 + permissions: + contents: write # pushing refs/notes/tak is a write to this repository + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - uses: namespacelabs/nscloud-cache-action@c5f8dab7560444c4bf8dbc64f1b203431873c547 # v1.6.1 + with: + cache: rust + + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 + env: + MISE_LOCKED: "1" + + # cachegrind is the whole point: it counts instructions, which reproduce + # to ~0.02% run-to-run where wall clock on this same hardware moves by + # 4-20%. Without it tak still records timing, but the series stops being + # precise enough to detect anything. + - name: Install valgrind + run: | + command -v valgrind || { + sudo apt-get update + sudo apt-get install -y --no-install-recommends valgrind + } + valgrind --version + + - name: Measure and record + run: mise run perf:record + + # persist-credentials: false means the push needs its own auth. Same + # pattern as bench-refresh.yml: re-point origin rather than pushing to a + # one-shot URL, so tak's retry path has a remote to fetch from when it + # loses a race. + # + # Only main publishes. workflow_dispatch can be pointed at any branch or + # tag, and refs/notes/tak is a shared baseline that should hold main's + # history and nothing else. Gating the push rather than the whole job + # means a dispatch on a branch still measures and still prints its + # numbers in the summary — it just keeps them local. + - name: Push measurements + if: github.ref == 'refs/heads/main' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + run: | + git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${REPOSITORY}.git" + tak push + + - name: Summary + run: tak history >> "$GITHUB_STEP_SUMMARY" diff --git a/vendor/aube/.github/workflows/ppa-publish.yml b/vendor/aube/.github/workflows/ppa-publish.yml index ff2e99487..24dbac8de 100644 --- a/vendor/aube/.github/workflows/ppa-publish.yml +++ b/vendor/aube/.github/workflows/ppa-publish.yml @@ -87,7 +87,7 @@ jobs: echo "TAG=$TAG" >> "$GITHUB_ENV" - name: Checkout repository - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ env.TAG }} fetch-depth: 0 diff --git a/vendor/aube/.github/workflows/pr-closer.yml b/vendor/aube/.github/workflows/pr-closer.yml index 9089ca9b9..eed50ebcc 100644 --- a/vendor/aube/.github/workflows/pr-closer.yml +++ b/vendor/aube/.github/workflows/pr-closer.yml @@ -18,4 +18,4 @@ jobs: checks: read statuses: read steps: - - uses: jdx/pr-closer@ddc40dfad5567fc7296a2463880c618344d26055 # v1.1.0 + - uses: jdx/pr-closer@9e82f2808d88b029f0a980696725d7d6d62f3c6f # v1.2.0 diff --git a/vendor/aube/.github/workflows/publish-homebrew.yml b/vendor/aube/.github/workflows/publish-homebrew.yml index f4a8e4bc1..e72303205 100644 --- a/vendor/aube/.github/workflows/publish-homebrew.yml +++ b/vendor/aube/.github/workflows/publish-homebrew.yml @@ -58,7 +58,7 @@ jobs: echo "tag=$TAG" >> "$GITHUB_OUTPUT" echo "version=${TAG#v}" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ steps.tag.outputs.tag }} persist-credentials: false diff --git a/vendor/aube/.github/workflows/publish-npm.yml b/vendor/aube/.github/workflows/publish-npm.yml index b17a725dc..97cfd49dd 100644 --- a/vendor/aube/.github/workflows/publish-npm.yml +++ b/vendor/aube/.github/workflows/publish-npm.yml @@ -75,7 +75,7 @@ jobs: fi fi echo "tag=$TAG" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ steps.tag.outputs.tag }} persist-credentials: false diff --git a/vendor/aube/.github/workflows/publish-smoke.yml b/vendor/aube/.github/workflows/publish-smoke.yml index 1197940e9..79a811d0b 100644 --- a/vendor/aube/.github/workflows/publish-smoke.yml +++ b/vendor/aube/.github/workflows/publish-smoke.yml @@ -56,7 +56,7 @@ jobs: ;; esac - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false diff --git a/vendor/aube/.github/workflows/release-plz.yml b/vendor/aube/.github/workflows/release-plz.yml index 7ebd8c1a6..4e0da9331 100644 --- a/vendor/aube/.github/workflows/release-plz.yml +++ b/vendor/aube/.github/workflows/release-plz.yml @@ -32,7 +32,7 @@ jobs: outputs: tag: ${{ steps.tag.outputs.tag }} steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 token: ${{ secrets.AUBE_GH_TOKEN }} @@ -190,12 +190,12 @@ jobs: permissions: contents: write steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: refs/tags/${{ needs.release-plz-release.outputs.tag }} submodules: recursive persist-credentials: false - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: install_args: communique - name: Enhance GitHub release with communique @@ -257,7 +257,7 @@ jobs: group: release-plz-${{ github.ref }} cancel-in-progress: false steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: fetch-depth: 0 token: ${{ secrets.AUBE_GH_TOKEN }} @@ -268,10 +268,10 @@ jobs: # of silently re-resolving `"latest"` pins and rewriting mise.lock. # release-plz refuses to run against a dirty tree, and intentional # lockfile bumps should land via their own PR. - - uses: jdx/mise-action@e6a8b3978addb5a52f2b4cd9d91eafa7f0ab959d # v4.2.0 + - uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 env: MISE_LOCKED: "1" - - uses: taiki-e/install-action@43aecc8d72668fbcfe75c31400bc4f890f1c5853 # v2.83.2 + - uses: taiki-e/install-action@a6b2e2dcd845ddd7f509ce4f3ed3d922b80cc5d9 # v2.84.0 with: tool: release-plz - name: Configure git identity diff --git a/vendor/aube/.github/workflows/release.yml b/vendor/aube/.github/workflows/release.yml index cdecab723..3b8df38d5 100644 --- a/vendor/aube/.github/workflows/release.yml +++ b/vendor/aube/.github/workflows/release.yml @@ -80,7 +80,7 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref != '' && fromJSON(inputs.dry_run || 'false') && inputs.ref || format('refs/tags/{0}', inputs.tag) }} submodules: recursive @@ -105,15 +105,19 @@ jobs: exit 1 fi out="crates/aube-resolver/data/primer-top${AUBE_PRIMER_TOP}-v${AUBE_PRIMER_VERSION_CAP}-s${schema}.rkyv.json" + popular_out="crates/aube-resolver/data/popular-top100000-v1.json" node scripts/generate-primer.mjs \ --top "$AUBE_PRIMER_TOP" \ --versions "$AUBE_PRIMER_VERSION_CAP" \ - --out "$out" + --out "$out" \ + --popular-names-out "$popular_out" echo "path=$out" >> "$GITHUB_OUTPUT" - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 with: name: metadata-primer - path: ${{ steps.primer.outputs.path }} + path: | + ${{ steps.primer.outputs.path }} + crates/aube-resolver/data/popular-top100000-v1.json # Non-PGO Windows targets (untested PGO toolchain). Built via taiki-e # straight from the release profile. `aarch64-unknown-linux-musl` lives @@ -140,7 +144,7 @@ jobs: runner: windows-latest build-tool: cargo steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref != '' && fromJSON(inputs.dry_run || 'false') && inputs.ref || format('refs/tags/{0}', inputs.tag) }} submodules: recursive @@ -233,7 +237,7 @@ jobs: env: TARGET: aarch64-unknown-linux-musl steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref != '' && fromJSON(inputs.dry_run || 'false') && inputs.ref || format('refs/tags/{0}', inputs.tag) }} submodules: recursive @@ -362,7 +366,7 @@ jobs: build-tool: cargo bolt: false steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: ref: ${{ inputs.ref != '' && fromJSON(inputs.dry_run || 'false') && inputs.ref || format('refs/tags/{0}', inputs.tag) }} submodules: recursive diff --git a/vendor/aube/.github/workflows/zizmor.yml b/vendor/aube/.github/workflows/zizmor.yml index cfd45d620..09ed4ad07 100644 --- a/vendor/aube/.github/workflows/zizmor.yml +++ b/vendor/aube/.github/workflows/zizmor.yml @@ -13,9 +13,9 @@ jobs: permissions: contents: read steps: - - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 with: persist-credentials: false - - uses: zizmorcore/zizmor-action@192e21d79ab29983730a13d1382995c2307fbcaa # v0.5.7 + - uses: zizmorcore/zizmor-action@6599ee8b7a49aef6a770f63d261d214911a7ce02 # v0.6.0 with: advanced-security: false diff --git a/vendor/aube/.gitignore b/vendor/aube/.gitignore index 529a8cb2e..658ed8254 100644 --- a/vendor/aube/.gitignore +++ b/vendor/aube/.gitignore @@ -8,3 +8,4 @@ /.claude/ /crates/aube-resolver/data/primer-top*.json /crates/aube-resolver/data/primer-top*.rkyv.zst +/crates/aube-resolver/data/popular-top*.json diff --git a/vendor/aube/.rules b/vendor/aube/.rules index 923a36cd1..5f5cedbe3 100644 --- a/vendor/aube/.rules +++ b/vendor/aube/.rules @@ -62,10 +62,11 @@ support: doc_phrasing: link Discussions, never "file an issue" or "open an issue" github_interactions: - comments: when posting comments on GitHub PRs or Discussions, include a note naming the AI coding assistant that generated the comment - examples[2]: - - "*This comment was generated by Codex.*" - - "*This comment was generated by Claude.*" + ai_disclosure: + surfaces: pull request descriptions, reviews, pull request comments, and discussion posts + format: "*AI-assisted — Tool: ; model: /; version: .*" + identifiers: use the exact model and version identifiers exposed by the runtime + unavailable: never infer or guess identifiers; use unavailable when either value is not exposed error_codes: intent: every error/warning aube emits carries a stable ERR_AUBE_*/WARN_AUBE_* identifier so CI scripts and ndjson reporters can branch on the code instead of substring-matching the human message @@ -251,4 +252,3 @@ forbidden[7]: - TODO without tracking link - single-use wrappers (1-3 lines called once, inline it) - feature flags or backwards-compat shims for one-time ops - diff --git a/vendor/aube/Cargo.lock b/vendor/aube/Cargo.lock index 509574fa3..2810063ad 100644 --- a/vendor/aube/Cargo.lock +++ b/vendor/aube/Cargo.lock @@ -80,16 +80,7 @@ dependencies = [ "secrecy", "serde", "serde_json", - "thiserror 2.0.18", -] - -[[package]] -name = "android_system_properties" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" -dependencies = [ - "libc", + "thiserror 2.0.19", ] [[package]] @@ -150,9 +141,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.103" +version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3" +checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470" [[package]] name = "approx" @@ -211,7 +202,7 @@ dependencies = [ "http", "reqwest", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "tower-service", ] @@ -229,13 +220,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.89" +version = "0.1.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb" +checksum = "ae36dc4177970ef04fde5178d3e2429882def40e57a451f919c098f72baa6cec" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -246,7 +237,7 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "aube" -version = "1.32.0" +version = "1.35.0" dependencies = [ "ambient-id", "assert_cmd", @@ -310,7 +301,7 @@ dependencies = [ [[package]] name = "aube-codes" -version = "1.32.0" +version = "1.35.0" dependencies = [ "serde", "serde_json", @@ -318,7 +309,7 @@ dependencies = [ [[package]] name = "aube-ffi" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube", "aube-codes", @@ -331,7 +322,7 @@ dependencies = [ [[package]] name = "aube-linker" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-lockfile", @@ -351,14 +342,14 @@ dependencies = [ "sha2 0.11.0", "strum", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "xx", ] [[package]] name = "aube-lockfile" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -378,14 +369,14 @@ dependencies = [ "smallvec", "sonic-rs", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "yaml_serde", ] [[package]] name = "aube-manifest" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-util", @@ -395,7 +386,7 @@ dependencies = [ "serde_yaml", "sonic-rs", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "yaml_serde", "yamlpatch", "yamlpath", @@ -403,7 +394,7 @@ dependencies = [ [[package]] name = "aube-node" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube", "aube-codes", @@ -418,7 +409,7 @@ dependencies = [ [[package]] name = "aube-registry" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -439,7 +430,7 @@ dependencies = [ "sonic-rs", "tar", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "wiremock", @@ -449,7 +440,7 @@ dependencies = [ [[package]] name = "aube-resolver" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-lockfile", @@ -470,7 +461,7 @@ dependencies = [ "sonic-rs", "tar", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "zstd", @@ -478,7 +469,7 @@ dependencies = [ [[package]] name = "aube-runtime" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -493,7 +484,7 @@ dependencies = [ "sha2 0.11.0", "tar", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "xx", @@ -502,7 +493,7 @@ dependencies = [ [[package]] name = "aube-scripts" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -513,7 +504,7 @@ dependencies = [ "miette", "regex", "seccompiler", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "windows-sys 0.61.2", @@ -521,7 +512,7 @@ dependencies = [ [[package]] name = "aube-settings" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -534,7 +525,7 @@ dependencies = [ [[package]] name = "aube-store" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-util", "base64", @@ -553,14 +544,14 @@ dependencies = [ "sonic-rs", "tar", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "xx", "zstd", ] [[package]] name = "aube-util" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "blake3", @@ -573,7 +564,7 @@ dependencies = [ "serde", "serde_json", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "webpki-root-certs", @@ -581,7 +572,7 @@ dependencies = [ [[package]] name = "aube-workspace" -version = "1.32.0" +version = "1.35.0" dependencies = [ "aube-codes", "aube-manifest", @@ -589,7 +580,7 @@ dependencies = [ "miette", "pathdiff", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", ] @@ -601,9 +592,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.17.1" +version = "1.17.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" +checksum = "00bdb5da18dac48ca2cc7cd4a98e533e8635a58e2361d13a1a4ee3888e0d72f1" dependencies = [ "aws-lc-sys", "untrusted 0.7.1", @@ -612,9 +603,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" +checksum = "43103168cc76fe62678a375e722fc9cb3a0146159ac5828bc4f0dfd755c2224c" dependencies = [ "cc", "cmake", @@ -682,9 +673,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.13.0" +version = "2.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4388bee8683e3d04af747c73422af53102d2bd24d9eadb6cbc100baef4b43f8" +checksum = "b588b76d00fde79687d7646a9b5bdf3cc0f655e0bbd080335a95d7e96f3587da" [[package]] name = "blake3" @@ -743,9 +734,9 @@ dependencies = [ [[package]] name = "bstr" -version = "1.12.3" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cee35f73844aa3014bb606320a6c1f010249dbdf43342fe54b5a4f6a8ed4b79" +checksum = "1f7dc094d718f2e1c1559ad110e27eeaae14a5465d3d56dd6dbd793079fbd530" dependencies = [ "memchr", "regex-automata", @@ -784,7 +775,7 @@ checksum = "89385e82b5d1821d2219e0b095efa2cc1f246cbf99080f3be46a1a85c0d392d9" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -816,9 +807,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.67" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17dd265a7d0f31ef544e1b20e03add05d3b45b491b633b10d67145d2acc1a38" +checksum = "5add81bb678e6cb321aff7fa0dc7689ad82b112dbc032cea19f91d6b8e3582b9" dependencies = [ "find-msvc-tools", "jobserver", @@ -834,9 +825,9 @@ checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "cfg_aliases" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" +checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] name = "chacha20" @@ -849,39 +840,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "chrono" -version = "0.4.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aa79e62e7697b8e29b513a68abacf485adcd1fe8284a4316c5ae868e6633327" -dependencies = [ - "iana-time-zone", - "num-traits", - "windows-link 0.2.1", -] - -[[package]] -name = "chrono-tz" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" -dependencies = [ - "parse-zoneinfo", - "phf", - "phf_codegen", -] - [[package]] name = "ci_info" version = "0.14.15" @@ -920,9 +878,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" +checksum = "d91e0c145792ef73a6ad36d27c75ac09f1832222a3c209689d90f534685ee5b7" dependencies = [ "clap_builder", "clap_derive", @@ -939,9 +897,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.6.0" +version = "4.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" +checksum = "f09628afdcc538b57f3c6341e9c8e9970f18e4a481690a64974d7023bd33548b" dependencies = [ "anstream", "anstyle", @@ -951,14 +909,14 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.6.1" +version = "4.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2ce8604710f6733aa641a2b3731eaa1e8b3d9973d5e3565da11800813f997a9" +checksum = "d012d2b9d65aca7f18f4d9878a045bc17899bba951561ba5ec3c2ba1eed9a061" dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -969,9 +927,9 @@ checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "clap_usage" -version = "2.0.3" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7179a7bcab80d71e4524ae4a384cb9180b6ca3eb30d8e398add707541989ce4a" +checksum = "46d067625f5704e5722fe7e46407fef7e79680d6dfd045d29036149d90ec044b" dependencies = [ "clap", "usage-lib", @@ -979,9 +937,9 @@ dependencies = [ [[package]] name = "clx" -version = "2.1.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20daab9df9e49b0478215055d38362d5973043b7a4af836a58968760755e9a9f" +checksum = "03a65674abcd65c2846d6bfc4c9816ab9177b15277a18a78aa1691683ce63095" dependencies = [ "console", "nix 0.31.3", @@ -989,7 +947,7 @@ dependencies = [ "serde_json", "strum", "tera", - "thiserror 2.0.18", + "thiserror 2.0.19", "unicode-width 0.2.2", ] @@ -1268,7 +1226,7 @@ version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d8b9f2e4c67f833b660cdb0a3523065869fb35570177239812ed4c905aeff87b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "crossterm_winapi", "derive_more", "document-features", @@ -1316,9 +1274,9 @@ dependencies = [ [[package]] name = "ctor" -version = "1.0.8" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb22e947478ccf9dc44d8922042c677a63fbb88f2cb468521d1145816e5087cb" +checksum = "e9bb72bb94fdc1bd619f4c18cc91ecf6302aeb333d31b3c6ec0bb841cd920209" [[package]] name = "darling" @@ -1340,7 +1298,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn", + "syn 2.0.119", ] [[package]] @@ -1351,7 +1309,7 @@ checksum = "ac3984ec7bd6cfa798e62b4a642426a5be0e68f9401cfc2a01e3fa9ea2fcdb8d" dependencies = [ "darling_core", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1409,7 +1367,7 @@ dependencies = [ "defmt-parser", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1418,18 +1376,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "10d60334b3b2e7c9d91ef8150abfb6fa4c1c39ebbcf4a81c2e346aad939fee3e" dependencies = [ - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "demand" -version = "2.0.3" +version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c96e17936c1a2340dde9999f89a2f749020a3dd3f8bcf5c321741047b15ca024" +checksum = "6c7f0bec8d94f8eb4d2efec0325ef991480abab44dc42f2f3cbf10c41aeb73fc" dependencies = [ "console", "fuzzy-matcher", "itertools 0.15.0", + "libc", "signal-hook 0.4.4", "termcolor", ] @@ -1455,7 +1414,7 @@ checksum = "8034092389675178f570469e6c3b0465d3d30b4505c294a6550db47f3c17ad18" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1483,15 +1442,9 @@ dependencies = [ "proc-macro2", "quote", "rustc_version", - "syn", + "syn 2.0.119", ] -[[package]] -name = "deunicode" -version = "1.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abd57806937c9cc163efc8ea3910e00a62e2aeb0b8119f1793a978088f8f6b04" - [[package]] name = "difflib" version = "0.4.0" @@ -1500,9 +1453,9 @@ checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" [[package]] name = "diffy" -version = "0.5.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05264ab2aab4fb952fc4b0f3f6eff1ddfb4563064053a4ea174d91537584a769" +checksum = "10aec8f7f9393bd6a4f2762be0ceb012d3cbe2478987258cc9960de148561914" dependencies = [ "hashbrown 0.17.1", ] @@ -1536,7 +1489,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1568,9 +1521,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e" +checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "encode_unicode" @@ -1604,7 +1557,7 @@ checksum = "67c78a4d8fdf9953a5c9d458f9efe940fd97a0cab0941c075a813ac594733827" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -1641,9 +1594,9 @@ checksum = "dd2e7510819d6fbf51a5545c8f922716ecfb14df168a3242f7d33e0239efe6a1" [[package]] name = "fastrand" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" +checksum = "da7c62ceae207dd37ea5b845da6a0696c799f85e97da1ab5b7910be3c1c80223" [[package]] name = "faststr" @@ -1748,9 +1701,9 @@ dependencies = [ [[package]] name = "futures" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b147ee9d1f6d097cef9ce628cd2ee62288d963e16fb287bd9286455b241382d" +checksum = "a88cf1f829d945f548cf8fec32c61b1f202b6d93b45848602fc02af4b12ad218" dependencies = [ "futures-channel", "futures-core", @@ -1763,9 +1716,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" +checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" dependencies = [ "futures-core", "futures-sink", @@ -1773,15 +1726,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e3450815272ef58cec6d564423f6e755e25379b217b0bc688e295ba24df6b1d" +checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" [[package]] name = "futures-executor" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf29c38818342a3b26b5b923639e7b1f4a61fc5e76102d4b1981c6dc7a7579d" +checksum = "6754879cc9f2c66f88c6e5c35344bb0bdb0708b0352b1201815667c7eabc7458" dependencies = [ "futures-core", "futures-task", @@ -1790,38 +1743,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" +checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" [[package]] name = "futures-macro" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b" +checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "futures-sink" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c39754e157331b013978ec91992bde1ac089843443c49cbc7f46150b0fad0893" +checksum = "e34418ac499d6305c2fb5ad0ed2f6ac998c5f8ca209b4510f7f94242c647e307" [[package]] name = "futures-task" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "037711b3d59c33004d3856fbdc83b99d4ff37a24768fa1be9ce3538a1cde4393" +checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" [[package]] name = "futures-util" -version = "0.3.32" +version = "0.3.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "389ca41296e6190b48053de0321d02a77f32f8a5d2461dd38762c0593805c6d6" +checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" dependencies = [ "futures-channel", "futures-core", @@ -1900,15 +1853,15 @@ checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" +checksum = "e4eba85ea1d0a966a983acd07deee566e67395d2d96b6fb39e62b5a833f1eb0b" [[package]] name = "globset" -version = "0.4.18" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52dfc19153a48bde0cbd630453615c8151bce3a5adfac7a0aebfbf0a1e1f57e3" +checksum = "e47d37d2ae4464254884b60ab7071be2b876a9c35b696bd018ddcc76847309cd" dependencies = [ "aho-corasick", "bstr", @@ -1917,17 +1870,6 @@ dependencies = [ "regex-syntax", ] -[[package]] -name = "globwalk" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" -dependencies = [ - "bitflags 2.13.0", - "ignore", - "walkdir", -] - [[package]] name = "h2" version = "0.4.15" @@ -2021,7 +1963,7 @@ dependencies = [ "ipnet", "jni", "rand 0.10.2", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "tokio", "tracing", @@ -2042,7 +1984,7 @@ dependencies = [ "prefix-trie", "rand 0.10.2", "ring", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "tracing", "url", @@ -2069,7 +2011,7 @@ dependencies = [ "resolv-conf", "smallvec", "system-configuration", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", ] @@ -2098,9 +2040,9 @@ dependencies = [ [[package]] name = "http-body" -version = "1.0.1" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +checksum = "ca2a8f2913ee65f60facd6a5905613afaa448497a0230cc41ce022d93290bc2c" dependencies = [ "bytes", "http", @@ -2108,9 +2050,9 @@ dependencies = [ [[package]] name = "http-body-util" -version = "0.1.3" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" +checksum = "e9f41fd6a08e4d4ec69df65976da761afd5ad5e58a9d4acb46bd1c953a9e3ff2" dependencies = [ "bytes", "futures-core", @@ -2131,15 +2073,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humansize" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" -dependencies = [ - "libm", -] - [[package]] name = "hybrid-array" version = "0.4.13" @@ -2151,9 +2084,9 @@ dependencies = [ [[package]] name = "hyper" -version = "1.10.1" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55281c53a1894c864990125767da440a4e630446785086f52523b20033b74498" +checksum = "d22053281f852e11534f5198498373cbb59295120a20771d90f7ed1897490a72" dependencies = [ "atomic-waker", "bytes", @@ -2211,30 +2144,6 @@ dependencies = [ "windows-registry", ] -[[package]] -name = "iana-time-zone" -version = "0.1.65" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470" -dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core 0.62.2", -] - -[[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" -dependencies = [ - "cc", -] - [[package]] name = "icu_collections" version = "2.2.0" @@ -2346,9 +2255,9 @@ dependencies = [ [[package]] name = "ignore" -version = "0.4.28" +version = "0.4.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2adf14691c72bcfc1058740436a35bdd3ae9c07d1a941ef00b749e9ea16aefa7" +checksum = "7f8a7b8211e695a1d0cd91cace480d4d0bd57667ab10277cc412c5f7f4884f83" dependencies = [ "crossbeam-deque", "globset", @@ -2401,7 +2310,7 @@ dependencies = [ "indoc", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2492,11 +2401,12 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "jiff" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "961d16382652bfdd8c6f68b223b26a8c93e0d475c672f414411db31c6c5c900e" +checksum = "668b7183bd07af9a4885f5c35b0cc5c83c4607a913c16b7e17291832910d2dcc" dependencies = [ "defmt", + "jiff-core", "jiff-static", "jiff-tzdb-platform", "log", @@ -2506,15 +2416,25 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "jiff-core" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7feca88439efe53da3754500c1851dedf3cb36c524dd5cf8225cc0794de95d09" +dependencies = [ + "defmt", +] + [[package]] name = "jiff-static" -version = "0.2.32" +version = "0.2.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0879bd39df99c4c5e2c6615ccc026391a423dde10532c573e6086eb94a802cc" +checksum = "3a69dcb3a21cfb32ce1cd056169337ca284af0766dd766e7878819b251a49204" dependencies = [ + "jiff-core", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2544,7 +2464,7 @@ dependencies = [ "jni-sys", "log", "simd_cesu8", - "thiserror 2.0.18", + "thiserror 2.0.19", "walkdir", "windows-link 0.2.1", ] @@ -2559,7 +2479,7 @@ dependencies = [ "quote", "rustc_version", "simd_cesu8", - "syn", + "syn 2.0.119", ] [[package]] @@ -2578,7 +2498,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38c0b942f458fe50cdac086d2f946512305e5631e720728f2a61aabcd47a6264" dependencies = [ "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2620,7 +2540,7 @@ checksum = "bde5057d6143cc94e861d90f591b9303d6716c6b9602309150bd068853c10899" dependencies = [ "hashbrown 0.16.1", "portable-atomic", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -2636,13 +2556,13 @@ dependencies = [ [[package]] name = "landlock" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "635839550ae8b90d9fd2571460a6645dc0aec070225956ca7a2831ed31d2795d" +checksum = "aa9b598524037d06d8466ec364866121281a2398c343ae8640b28bbe7be50cdb" dependencies = [ "enumflags2", "libc", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -2704,7 +2624,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f50e8f47623268b5407192d26876c4d7f89d686ca130fdc53bced4814cd29f8" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] @@ -2816,7 +2736,7 @@ checksum = "db5b29714e950dbb20d5e6f74f9dcec4edbcc1067bb7f8ed198c097b8c1a818b" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -2852,9 +2772,9 @@ dependencies = [ [[package]] name = "mio" -version = "1.2.1" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02bd0af71c67b473010cbbc60715ee815645a4dc942899111f494b4b737d6fda" +checksum = "30d65c71f1ce40ab09135ce117d742b9f8a19ff91a41a8b57ed50bc2de59c427" dependencies = [ "libc", "log", @@ -2896,16 +2816,16 @@ checksum = "4568f25ccbd45ab5d5603dc34318c1ec56b117531781260002151b8530a9f931" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi" -version = "3.10.5" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6826e5ddc15589b2d68c8ad5321c18e85d40488e93e32962f362e572669bccf6" +checksum = "de33522036981030a75c231829566bc63414e08101a6f5ff4ac6cef19c8e0941" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "ctor", "futures", "napi-build", @@ -2923,36 +2843,36 @@ checksum = "c9c366d2c8c60b86fa632df75f745509b52f9128f91a6bad4c796e44abb505e1" [[package]] name = "napi-derive" -version = "3.5.10" +version = "3.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fe526e81c105d3640516fcde83909dd1afe757c0d7a15af58830b5bc0fb9a1" +checksum = "a49c513341a61a16a10af6efcce46b30d0822ba2d4fb197d24d33dfc199c78d5" dependencies = [ "convert_case 0.11.0", "ctor", "napi-derive-backend", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-derive-backend" -version = "5.1.2" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514281397bcddd9ea9a876c7a21a57bff2374237a000ca9a64ea0211ec1993e2" +checksum = "4747005fa3e2c9989ac45a723a514c5db2411238b72981a3cda4c701a9dfea17" dependencies = [ "convert_case 0.11.0", "proc-macro2", "quote", "semver", - "syn", + "syn 2.0.119", ] [[package]] name = "napi-sys" -version = "3.2.3" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73e43cf2eb0bd1bf95a43c07c076ebd2da5d1e015a71c3d201faeffffcc0ecac" +checksum = "85fbf1fa9f1babfe396d74bbbf52b3643770243e8f5b0b46715d4caf7f0dfc9a" dependencies = [ "libloading", ] @@ -2969,7 +2889,7 @@ version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -2981,7 +2901,7 @@ version = "0.31.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf20d2fde8ff38632c426f1165ed7436270b44f199fc55284c38276f9db47c3d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "cfg-if", "cfg_aliases", "libc", @@ -3231,7 +3151,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3257,15 +3177,6 @@ dependencies = [ "windows-link 0.2.1", ] -[[package]] -name = "parse-zoneinfo" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" -dependencies = [ - "regex", -] - [[package]] name = "pathdiff" version = "0.2.3" @@ -3297,86 +3208,6 @@ version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" -[[package]] -name = "pest" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47627dd7305c6a2d6c8c6bcd24c5a4c17dbbf425f4f9c5313e724b38fc9782e9" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b4254325ecad416ab689e27ba51da03ba01a9632bc6e108f5fe7c3c4ad29d58" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c4c0e91ead7a8f7acecbca6f003fc2e8282b1dbe2dd9c9d2f16aba42995e0a7" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9744bc48116fee06334924bb5f2bad41eed5e89bd26e29b0b799f9a3f82c210" -dependencies = [ - "pest", -] - -[[package]] -name = "phf" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aef8048c789fa5e851558d709946d6d79a8ff88c0440c587967f8e94bfb1216a" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c80231409c20246a13fddb31776fb942c38553c51e871f8cbd687a4cfb5843d" -dependencies = [ - "phf_shared", - "rand 0.8.7", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - [[package]] name = "pin-project-lite" version = "0.2.17" @@ -3401,9 +3232,9 @@ dependencies = [ [[package]] name = "portable-atomic" -version = "1.13.1" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c33a9471896f1c69cecef8d20cbe2f7accd12527ce60845ff44c153bb2a21b49" +checksum = "3d20d5497ef88037a52ff98267d066e7f11fcc5e99bbfbd58a42336193aacec3" [[package]] name = "portable-atomic-util" @@ -3481,9 +3312,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.106" +version = "1.0.107" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" dependencies = [ "unicode-ident", ] @@ -3496,10 +3327,10 @@ checksum = "4b45fcc2344c680f5025fe57779faef368840d0bd1f42f216291f0dc4ace4744" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.13.0", + "bitflags 2.13.1", "num-traits", "rand 0.9.5", - "rand_chacha 0.9.0", + "rand_chacha", "rand_xorshift", "regex-syntax", "rusty-fork", @@ -3524,7 +3355,7 @@ checksum = "7347867d0a7e1208d93b46767be83e2b8f978c3dad35f775ac8d8847551d6fe1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -3547,7 +3378,7 @@ dependencies = [ "rustc-hash", "rustls", "socket2", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "web-time", @@ -3570,7 +3401,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.18", + "thiserror 2.0.19", "tinyvec", "tracing", "web-time", @@ -3592,9 +3423,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.46" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbc457d0c7a0759a614551b11a6409e5951f6c7537be1f1b7682b9ae9230368" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" dependencies = [ "proc-macro2", ] @@ -3620,24 +3451,13 @@ dependencies = [ "ptr_meta", ] -[[package]] -name = "rand" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22f6172bdec972074665ed81ed53b71da00bfc44b65a753cfde883ec4c702a1a" -dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - [[package]] name = "rand" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9ef1d0d795eb7d84685bca4f72f3649f064e6641543d3a8c415898726a57b41" dependencies = [ - "rand_chacha 0.9.0", + "rand_chacha", "rand_core 0.9.5", ] @@ -3652,16 +3472,6 @@ dependencies = [ "rand_core 0.10.1", ] -[[package]] -name = "rand_chacha" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" -dependencies = [ - "ppv-lite86", - "rand_core 0.6.4", -] - [[package]] name = "rand_chacha" version = "0.9.0" @@ -3677,9 +3487,6 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" -dependencies = [ - "getrandom 0.2.17", -] [[package]] name = "rand_core" @@ -3733,7 +3540,7 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cbb175c433c8e28a809d1f5773a2ae96e68c0ce40db865cbab1020bf33ae479c" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "compact_str", "hashbrown 0.17.1", "itertools 0.14.0", @@ -3742,7 +3549,7 @@ dependencies = [ "palette", "serde", "strum", - "thiserror 2.0.18", + "thiserror 2.0.19", "unicode-segmentation", "unicode-truncate", "unicode-width 0.2.2", @@ -3766,7 +3573,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "66e3d19bcc9130ca376277d93b60767ff121ace3be06f5f95f81dd68956407d1" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "hashbrown 0.17.1", "indoc", "instability", @@ -3806,27 +3613,27 @@ version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", ] [[package]] name = "ref-cast" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f354300ae66f76f1c85c5f84693f0ce81d747e2c3f21a45fef496d89c960bf7d" +checksum = "216e8f773d7923bcba9ceb86a86c93cabb3903a11872fc3f138c49630e50b96d" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.25" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" +checksum = "2c9283685feec7d69af75fb0e858d5e7378f33fe4fc699383b2916ab9273e03c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -3843,9 +3650,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0e75113e14dc5acb068cd0786884f214f1312650a3d36d269f5c4f3cdee8a2" +checksum = "f020237b6c8eed93db2e2cb53c00c60a8e1bc73da7d073199a1180401450218d" dependencies = [ "aho-corasick", "memchr", @@ -3855,9 +3662,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.15" +version = "0.4.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f388202e4b80542a0921078cc23b6333bcf1409c1e3f86404cae4766a6131db" +checksum = "8fcfdb36bda0c880c5931cdc7a2bcdc8ba4556847b9d912bca70bc94708711ad" dependencies = [ "aho-corasick", "memchr", @@ -3972,14 +3779,14 @@ checksum = "c0ed1a78a1b19d184b0daa629dd9a024573173ec7d485b287cb369fb3607cc1c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "roff" -version = "0.2.2" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88f8660c1ff60292143c98d08fc6e2f654d722db50410e3f3797d40baaf9d8f3" +checksum = "323c417e1d9665a65b263ec744ba09030cfb277e9daa0b018a4ab62e57bc8189" [[package]] name = "rustc-demangle" @@ -4008,7 +3815,7 @@ version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "errno", "libc", "linux-raw-sys", @@ -4017,9 +3824,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "3c54fcab019b409d04215d3a17cb438fd7fbf192ee61461f20f4fe18704bc138" dependencies = [ "aws-lc-rs", "once_cell", @@ -4043,9 +3850,9 @@ dependencies = [ [[package]] name = "rustls-pki-types" -version = "1.15.0" +version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "764899a24af3980067ee14bc143654f297b22eaebfe3c7b6b211920a5a59b046" +checksum = "2f4925028c7eb5d1fcdaf196971378ed9d2c1c4efc7dc5d011256f76c99c0a96" dependencies = [ "web-time", "zeroize", @@ -4162,7 +3969,7 @@ version = "3.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7f4bc775c73d9a02cde8bf7b2ec4c9d12743edf609006c7facc23998404cd1d" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.10.1", "core-foundation-sys", "libc", @@ -4181,9 +3988,9 @@ dependencies = [ [[package]] name = "self_cell" -version = "1.2.2" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b12e76d157a900eb52e81bc6e9f3069344290341720e9178cde2407113ac8d89" +checksum = "2ab42ca02749e120097e328d91d415325bdf43b1c72c4c8badf37375fe40a813" [[package]] name = "semver" @@ -4193,9 +4000,9 @@ checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "serde" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" dependencies = [ "serde_core", "serde_derive", @@ -4203,29 +4010,29 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.228" +version = "1.0.229" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] name = "serde_json" -version = "1.0.150" +version = "1.0.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8014e44b4736ed0538adeecded0fce2a272f22dc9578a7eb6b2d9993c74cfb9" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" dependencies = [ "indexmap 2.14.0", "itoa", @@ -4426,7 +4233,7 @@ dependencies = [ "sigstore-rekor", "sigstore-tsa", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -4446,7 +4253,7 @@ dependencies = [ "signature", "sigstore-types", "spki", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "x509-cert", ] @@ -4464,7 +4271,7 @@ dependencies = [ "sigstore-crypto", "sigstore-oidc", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", ] @@ -4478,7 +4285,7 @@ dependencies = [ "hex", "sigstore-crypto", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -4496,7 +4303,7 @@ dependencies = [ "serde_json", "sigstore-crypto", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "url", ] @@ -4515,7 +4322,7 @@ dependencies = [ "sigstore-crypto", "sigstore-merkle", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "url", ] @@ -4535,7 +4342,7 @@ dependencies = [ "sigstore-trust-root", "sigstore-tsa", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "x509-cert", ] @@ -4554,7 +4361,7 @@ dependencies = [ "sigstore-crypto", "sigstore-tuf", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "x509-cert", ] @@ -4578,7 +4385,7 @@ dependencies = [ "rustls-webpki", "sigstore-crypto", "sigstore-types", - "thiserror 2.0.18", + "thiserror 2.0.19", "tracing", "x509-cert", "x509-tsp", @@ -4600,7 +4407,7 @@ dependencies = [ "sigstore-crypto", "sigstore-types", "tempfile", - "thiserror 2.0.18", + "thiserror 2.0.19", "tokio", "tracing", "url", @@ -4617,20 +4424,20 @@ dependencies = [ "pem", "serde", "serde_json", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] name = "simd-adler32" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "703d5c7ef118737c72f1af64ad2f6f8c5e1921f818cdcb97b8fe6fc69bf66214" +checksum = "3a219298ac11a56ea9a6d2120044824d6f01aeb034955e7af7bc16858527deea" [[package]] name = "simd_cesu8" -version = "1.1.1" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94f90157bb87cddf702797c5dadfa0be7d266cdf49e22da2fcaa32eff75b2c33" +checksum = "11031e251abf8611c80f460e19dbdeb54a66db918e49c65a7065b46ac7aec520" dependencies = [ "rustc_version", "simdutf8", @@ -4642,28 +4449,12 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" -[[package]] -name = "siphasher" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" - [[package]] name = "slab" version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c790de23124f9ab44544d7ac05d60440adc586479ce501c1d6d7da3cd8c9cf5" -[[package]] -name = "slug" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" -dependencies = [ - "deunicode", - "wasm-bindgen", -] - [[package]] name = "smallvec" version = "1.15.2" @@ -4675,9 +4466,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52d1cfed4120b4d927bf7c0f86d2087a4a7d6027c906d9f9d525a80573b9be51" +checksum = "c3d1e2c7f27f8d4cb10542a02c49005dbd6e93095799d6f3be745fae9f8fedd4" dependencies = [ "libc", "windows-sys 0.61.2", @@ -4709,7 +4500,7 @@ dependencies = [ "simdutf8", "sonic-number", "sonic-simd", - "thiserror 2.0.18", + "thiserror 2.0.19", "zmij", ] @@ -4774,14 +4565,14 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "subfeature" -version = "1.26.1" +version = "1.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e685ca3f1f2cd09b04ada9642ea26a0dd7bcf52f963ace408b0279f192f7465f" +checksum = "f6be2c63b5abd9caec364547309f51653179b216193c7be5e70dcf0c1c84d418" dependencies = [ "memchr", "regex", @@ -4817,9 +4608,20 @@ checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" [[package]] name = "syn" -version = "2.0.118" +version = "2.0.119" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "872831b642d1a07999a962a351ed35b955ea2cfc8f3862091e2a240a84f17297" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "3.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ae57f904213ebb649ce6895b8a66c66f0203b9319718f69a5612a065b1422" +checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3" dependencies = [ "proc-macro2", "quote", @@ -4843,7 +4645,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -4852,7 +4654,7 @@ version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a13f3d0daba03132c0aa9767f98351b3488edc2c100cda2d2ec2b04f3d8d3c8b" dependencies = [ - "bitflags 2.13.0", + "bitflags 2.13.1", "core-foundation 0.9.4", "system-configuration-sys", ] @@ -4891,7 +4693,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32497e9a4c7b38532efcdebeef879707aa9f794296a4f0244f6f69e9bc8574bd" dependencies = [ "fastrand", - "getrandom 0.3.4", + "getrandom 0.4.3", "once_cell", "rustix", "windows-sys 0.61.2", @@ -4899,24 +4701,11 @@ dependencies = [ [[package]] name = "tera" -version = "1.20.1" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8004bca281f2d32df3bacd59bc67b312cb4c70cea46cbd79dbe8ac5ed206722" +checksum = "511f07fd91a70e92efbe4793d111aaa9035f8474dd157aaa1e31e7c27f5051da" dependencies = [ - "chrono", - "chrono-tz", - "globwalk", - "humansize", - "lazy_static", - "percent-encoding", - "pest", - "pest_derive", - "rand 0.8.7", - "regex", "serde", - "serde_json", - "slug", - "unicode-segmentation", ] [[package]] @@ -4971,11 +4760,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +checksum = "09a43598840e33d5b0331f38c5e30d13bb11c11210a4b58f0d9b18a5a5eefcd9" dependencies = [ - "thiserror-impl 2.0.18", + "thiserror-impl 2.0.19", ] [[package]] @@ -4986,18 +4775,18 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "thiserror-impl" -version = "2.0.18" +version = "2.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +checksum = "43cbfe0cf76104d42a574802844187e84a305e531ed54455f11fbde0f10541cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 3.0.3", ] [[package]] @@ -5011,9 +4800,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.53" +version = "0.3.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18dfaaeddcb932337b5e7866ee7d0ce9b76d2fd092997146f187ec09b4558a50" +checksum = "3e1d5e639ff6bab73cb6885cc7e7b1de96c3f32c68ec55f3952614bec1092244" dependencies = [ "deranged", "libc", @@ -5083,14 +4872,14 @@ checksum = "2d2e76690929402faae40aebdda620a2c0e25dd6d3b9afe48867dfd95991f4bd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] name = "tokio" -version = "1.52.3" +version = "1.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc7f01b389ac15039e4dc9531aa973a135d7a4135281b12d7c1bc79fd57fffe" +checksum = "202caea871b69668250d242070849eb495be178ed697a3e98aebce5bc81a0bed" dependencies = [ "bytes", "libc", @@ -5105,13 +4894,13 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.7.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496" +checksum = "6328af13490e73a9b4694030fafd93f8c8c6a9dede33e821c3fc63eddf8042ba" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5126,23 +4915,24 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.18" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" +checksum = "494815d09bf52b5548659851081238f0ca39ff638363907596da739561c62c52" dependencies = [ "bytes", "futures-core", "futures-sink", "futures-util", + "libc", "pin-project-lite", "tokio", ] [[package]] name = "toml" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81f3d15e84cbcd896376e6730314d59fb5a87f31e4b038454184435cd57defee" +checksum = "53c96ecdfa941c8fc4fcaed14f99ada8ebed502eef533015095a07e3301d4c3c" dependencies = [ "indexmap 2.14.0", "serde_core", @@ -5150,7 +4940,7 @@ dependencies = [ "toml_datetime", "toml_parser", "toml_writer", - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] @@ -5164,18 +4954,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.1.2+spec-1.1.0" +version = "1.1.3+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" +checksum = "1d38ac1cf9b95face32296c0a3ede1fdc270627c9d9c02a7274dd6d960dc4d56" dependencies = [ - "winnow 1.0.3", + "winnow 1.0.4", ] [[package]] name = "toml_writer" -version = "1.1.1+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756daf9b1013ebe47a8776667b466417e2d4c5679d441c26230efd9ef78692db" +checksum = "7d56353a2a665ad0f41a421187180aab746c8c325620617ad883a99a1cbe66d2" [[package]] name = "tower" @@ -5199,7 +4989,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4cfcf7e2740e6fc6d4d688b4ef00650406bb94adf4731e43c096c3a19fe40840" dependencies = [ "async-compression", - "bitflags 2.13.0", + "bitflags 2.13.1", "bytes", "futures-core", "futures-util", @@ -5246,7 +5036,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5358,12 +5148,6 @@ version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6f5e870be6c3b371b77fe0ee0bafb859fa4964b4404c27de1d380043c4dda20" -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - [[package]] name = "unarray" version = "0.1.4" @@ -5443,14 +5227,14 @@ dependencies = [ [[package]] name = "usage-lib" -version = "2.18.2" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1851c9ddbc3a428af152852227363e7f66b73ca2ce732c8db3c2d4ab37eb63d2" +checksum = "b60d4043943b220cc7269576a383ff2d62ab00f208f10d94b2496791729f8b02" dependencies = [ "clap", "heck", "indexmap 2.14.0", - "itertools 0.14.0", + "itertools 0.15.0", "kdl", "log", "miette", @@ -5460,7 +5244,7 @@ dependencies = [ "shell-words", "strum", "tera", - "thiserror 2.0.18", + "thiserror 2.0.19", "versions", "xx", ] @@ -5479,9 +5263,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.23.5" +version = "1.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea5fab0d6c3c01ae70085a09cb03d4c7a1d6314e2b3e075392783396d724ca0a" +checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -5595,7 +5379,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn", + "syn 2.0.119", "wasm-bindgen-shared", ] @@ -5643,9 +5427,9 @@ dependencies = [ [[package]] name = "webpki-root-certs" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d46a5a140e6f7afeccd8eae97eff335163939eac8b929834875168b29b3d267" +checksum = "b96554aa2acc8ccdb7e1c9a58a7a68dd5d13bccc69cd124cb09406db612a1c9b" dependencies = [ "rustls-pki-types", ] @@ -5786,7 +5570,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -5797,7 +5581,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -6073,9 +5857,9 @@ dependencies = [ [[package]] name = "winnow" -version = "1.0.3" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0592e1c9d151f854e6fd382574c3a0855250e1d9b2f99d9281c6e6391af352f1" +checksum = "23b97319f7b8343df12cc98938e5c3eb436064524c8d2b4e30a1d3a36eecdf81" [[package]] name = "wiremock" @@ -6165,7 +5949,7 @@ dependencies = [ "regex", "sha2 0.11.0", "strsim", - "thiserror 2.0.18", + "thiserror 2.0.19", ] [[package]] @@ -6191,7 +5975,7 @@ dependencies = [ "line-index", "serde_json", "subfeature", - "thiserror 2.0.18", + "thiserror 2.0.19", "yaml_serde", "yamlpath", ] @@ -6205,7 +5989,7 @@ dependencies = [ "line-index", "self_cell", "serde", - "thiserror 2.0.18", + "thiserror 2.0.19", "tree-sitter", "tree-sitter-iter", "tree-sitter-yaml", @@ -6230,28 +6014,28 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.54" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7cbbc0a705a0fd05cc3676525980d2bf5a9bc4adac6d6475209a7887cf59d19" +checksum = "b5a105cd7b140f6eeec8acff2ea38135d3cab283ada58540f629fe51e46696eb" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.54" +version = "0.8.55" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5" +checksum = "0fe976fb70c78cd64cccfe3a6fc142244e8a77b70959b30faf9d0ac37ee228eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -6271,7 +6055,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", "synstructure", ] @@ -6292,7 +6076,7 @@ checksum = "3c50655cbb0fe3fc43170059e702f1ce5e19b84cec58dc87b037a09935c2f328" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -6325,7 +6109,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.119", ] [[package]] @@ -6350,9 +6134,9 @@ checksum = "b142a20ec14a91d5bc708c1dc21b080c550113d8aa77afa29635673a65dd02c5" [[package]] name = "zmij" -version = "1.0.22" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd2f034a4bebf216c9e4b7083603e024cf930873fd67830cfb083c9fa33129d9" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" [[package]] name = "zopfli" diff --git a/vendor/aube/Cargo.toml b/vendor/aube/Cargo.toml index ec5803637..337cbecca 100644 --- a/vendor/aube/Cargo.toml +++ b/vendor/aube/Cargo.toml @@ -31,7 +31,7 @@ inherits = "release" panic = "unwind" [workspace.package] -version = "1.32.0" +version = "1.35.0" edition = "2024" # DELIBERATE NUB FORK DELTA — do not converge to upstream on a sync. # Upstream holds this at 1.91 so mise (which embeds aube's library crates and @@ -67,7 +67,9 @@ yaml_serde = "0.10.4" # yamlpatch uses yaml_serde for patch payloads; serde_yaml remains only # for the manual block injector that works around nested Add formatting. yamlpatch = "1.25" -yamlpath = "1.25" +# yamlpath 1.28 does not declare the Rust 1.97 requirement it inherits +# from tree-sitter-iter 1.28, so resolver 3 cannot avoid it. +yamlpath = ">=1.25, <1.28" serde_yaml = "0.9" sonic-rs = "0.5" toml = "1.1" @@ -102,7 +104,11 @@ reflink-copy = "0.1" # applied to native addons as they land in the CAS. The `addon` feature # unwraps a napi `--compress` hybrid back to the raw `.node` before the # kernel re-compresses it transparently. -decmpfs = { version = "0.1", features = ["addon"] } +# Pinned to 0.1.0: 0.1.2's FICLONE reflink path types the ioctl request as +# `libc::c_ulong`, which is `libc::Ioctl` on glibc but `c_int` on musl, so it +# fails to compile for *-unknown-linux-musl. Unpin once +# https://github.com/SocketDev/decmpfs releases a fix. +decmpfs = { version = "=0.1.0", features = ["addon"] } glob = "0.3" # BurntSushi's gitignore matcher (from ripgrep). Used by `aube pack` / # `aube publish` to honor `.npmignore` / `.gitignore` with full @@ -152,7 +158,7 @@ libc = "0.2" seccompiler = "0.5" # Progress UI -clx = "2" +clx = "3" # Logging tracing = "0.1" @@ -190,19 +196,19 @@ diffy = "0.5" # Internal crates — `version` is required so `cargo publish` can resolve # transitive crate dependencies via crates.io. release-plz keeps these # versions in sync with [workspace.package].version during release PRs. -aube = { path = "crates/aube", version = "1.32.0", default-features = false } -aube-codes = { path = "crates/aube-codes", version = "1.32.0" } -aube-settings = { path = "crates/aube-settings", version = "1.32.0" } -aube-resolver = { path = "crates/aube-resolver", version = "1.32.0" } -aube-registry = { path = "crates/aube-registry", version = "1.32.0" } -aube-store = { path = "crates/aube-store", version = "1.32.0" } -aube-linker = { path = "crates/aube-linker", version = "1.32.0" } -aube-lockfile = { path = "crates/aube-lockfile", version = "1.32.0" } -aube-manifest = { path = "crates/aube-manifest", version = "1.32.0" } -aube-runtime = { path = "crates/aube-runtime", version = "1.32.0" } -aube-scripts = { path = "crates/aube-scripts", version = "1.32.0" } -aube-workspace = { path = "crates/aube-workspace", version = "1.32.0" } -aube-util = { path = "crates/aube-util", version = "1.32.0" } +aube = { path = "crates/aube", version = "1.35.0", default-features = false } +aube-codes = { path = "crates/aube-codes", version = "1.35.0" } +aube-settings = { path = "crates/aube-settings", version = "1.35.0" } +aube-resolver = { path = "crates/aube-resolver", version = "1.35.0" } +aube-registry = { path = "crates/aube-registry", version = "1.35.0" } +aube-store = { path = "crates/aube-store", version = "1.35.0" } +aube-linker = { path = "crates/aube-linker", version = "1.35.0" } +aube-lockfile = { path = "crates/aube-lockfile", version = "1.35.0" } +aube-manifest = { path = "crates/aube-manifest", version = "1.35.0" } +aube-runtime = { path = "crates/aube-runtime", version = "1.35.0" } +aube-scripts = { path = "crates/aube-scripts", version = "1.35.0" } +aube-workspace = { path = "crates/aube-workspace", version = "1.35.0" } +aube-util = { path = "crates/aube-util", version = "1.35.0" } [profile.dev] debug = 1 diff --git a/vendor/aube/README.md b/vendor/aube/README.md index 35912d853..630c0f8a0 100644 --- a/vendor/aube/README.md +++ b/vendor/aube/README.md @@ -30,7 +30,7 @@ ## Why Try It -**[Fast installs](https://aube.jdx.dev/benchmarks).** Warm installs are about 3x faster than pnpm and ~1.5x faster than Bun in the current benchmarks. Repeat test commands run up to 32x faster than pnpm and up to 4x faster than Bun. +**[Fast installs](https://aube.jdx.dev/benchmarks).** Warm installs are about 5x faster than pnpm and about 2x faster than Bun in the current benchmarks. Repeat test commands run up to 40x faster than pnpm and up to 8x faster than Bun. **[Existing lockfiles](https://aube.jdx.dev/package-manager/lockfiles).** Reads and writes `pnpm-lock.yaml`, `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock`, and `bun.lock` in place. diff --git a/vendor/aube/UPSTREAM b/vendor/aube/UPSTREAM index b23c547b3..f07f1c50c 100644 --- a/vendor/aube/UPSTREAM +++ b/vendor/aube/UPSTREAM @@ -7,6 +7,6 @@ # # UPDATE THIS IN THE SAME COMMIT that changes the vendored tree's upstream base. -commit = 9f2f5f8255 -tag = v1.32.0 -venue = nubjs/aube nub-fork +commit = fff2bb681a +tag = v1.35.0 +venue = derived at bump time from this tree via `git commit-tree` — nothing stored diff --git a/vendor/aube/aube.usage.kdl b/vendor/aube/aube.usage.kdl index 554625e33..5410d0dc4 100644 --- a/vendor/aube/aube.usage.kdl +++ b/vendor/aube/aube.usage.kdl @@ -1,30 +1,58 @@ +// @generated by usage-cli from clap metadata +min_usage_version "4.0" name aube bin aube -version "1.32.0" +version "1.35.0" about "A fast Node.js package manager" usage "Usage: aube [OPTIONS] [COMMAND]" flag "-C --dir --cd --prefix" help="Change to directory before running (like `make -C` or `mise --cd`)" global=#true { arg } flag "-F --filter" help="Scope command execution to workspace packages matching PATTERN" var=#true global=#true { - long_help "Scope command execution to workspace packages matching PATTERN.\n\nSupports exact names (`my-pkg`), globs (`@scope/*`, `*-plugin`), paths (`./packages/api`), graph selectors (`pkg...`, `...pkg`), git-ref selectors (`[origin/main]`), and exclusions (`!pkg`). Repeatable; matches are OR-ed.\n\nCurrently honored by `run`, `test`, `start`, `stop`, `restart`, `install`, `exec`, `list`, `publish`, `deploy`, `add`, `remove`, `update`, `why`, and implicit-script invocations." - arg + long_help #""" +Scope command execution to workspace packages matching PATTERN. + +Supports exact names (`my-pkg`), globs (`@scope/*`, `*-plugin`), paths (`./packages/api`), graph selectors (`pkg...`, `...pkg`), git-ref selectors (`[origin/main]`), and exclusions (`!pkg`). Repeatable; matches are OR-ed. + +Currently honored by `run`, `test`, `start`, `stop`, `restart`, `install`, `exec`, `list`, `publish`, `deploy`, `add`, `remove`, `update`, `why`, and implicit-script invocations. +"""# + arg } flag "-r --recursive" help="Run the command across every workspace package" global=#true { - long_help "Run the command across every workspace package.\n\nEquivalent to `--filter=*`; if `--filter` is also given, `--recursive` is a no-op and the explicit filter wins. Honored by the same commands as `--filter`." + long_help #""" +Run the command across every workspace package. + +Equivalent to `--filter=*`; if `--filter` is also given, `--recursive` is a no-op and the explicit filter wins. Honored by the same commands as `--filter`. +"""# } flag "-v --verbose" help="Enable verbose/debug logging (shortcut for `--loglevel debug`)" global=#true flag "-V --version" help="Print version and check for updates" global=#true { - long_help "Print version and check for updates.\n\nManual flag so we can run the async update notifier alongside the version print — clap's auto `Action::Version` exits inside `parse_from`, before the tokio runtime is built." + long_help #""" +Print version and check for updates. + +Manual flag so we can run the async update notifier alongside the version print — clap's auto `Action::Version` exits inside `parse_from`, before the tokio runtime is built. +"""# } flag --aggregate-output help="Group workspace command output after each package finishes" hide=#true global=#true { - long_help "Group workspace command output after each package finishes.\n\nAccepted for pnpm compatibility; aube's workspace fanout is currently sequential, so output is already grouped." + long_help #""" +Group workspace command output after each package finishes. + +Accepted for pnpm compatibility; aube's workspace fanout is currently sequential, so output is already grouped. +"""# } flag --color help="Force colored output even when stderr is not a TTY" global=#true { - long_help "Force colored output even when stderr is not a TTY.\n\nOverrides `NO_COLOR` / `CLICOLOR=0`. Mutually exclusive with `--no-color`." + long_help #""" +Force colored output even when stderr is not a TTY. + +Overrides `NO_COLOR` / `CLICOLOR=0`. Mutually exclusive with `--no-color`. +"""# } flag --diag help="Enable cold-install deep diagnostics. Modes: summary — sum_ms / mean / max / %wall table at end trace — summary + critical path + starvation + what-if + lifecycle live — like trace, plus print every span >= 100ms to stderr live full — like trace, plus write JSONL trace to a file (defaults to ./aube-diag.jsonl)" global=#true { - long_help "Enable cold-install deep diagnostics. Modes: summary — sum_ms / mean / max / %wall table at end trace — summary + critical path + starvation + what-if + lifecycle live — like trace, plus print every span >= 100ms to stderr live full — like trace, plus write JSONL trace to a file (defaults to ./aube-diag.jsonl)\n\nQuick form: `--diag` with no value defaults to `trace`. Output file path can be set via `--diag-file`. Threshold for live mode via `--diag-threshold-ms`." + long_help #""" +Enable cold-install deep diagnostics. Modes: summary — sum_ms / mean / max / %wall table at end trace — summary + critical path + starvation + what-if + lifecycle live — like trace, plus print every span >= 100ms to stderr live full — like trace, plus write JSONL trace to a file (defaults to ./aube-diag.jsonl) + +Quick form: `--diag` with no value defaults to `trace`. Output file path can be set via `--diag-file`. Threshold for live mode via `--diag-threshold-ms`. +"""# arg } flag --diag-file help="Path for `--diag full` JSONL trace (default: ./aube-diag.jsonl)" global=#true { @@ -34,17 +62,33 @@ flag --diag-threshold-ms help="Live-mode threshold: only print spans whose durat arg } flag --fail-if-no-match help="Error when a workspace selector matches no packages" global=#true { - long_help "Error when a workspace selector matches no packages.\n\nAccepted globally; selected commands already fail on empty matches." + long_help #""" +Error when a workspace selector matches no packages. + +Accepted globally; selected commands already fail on empty matches. +"""# } flag --filter-prod help="Production-only variant of `--filter`" var=#true global=#true { - long_help "Production-only variant of `--filter`.\n\nSame selector grammar as `--filter`, but graph walks (`pkg...`, `...pkg`) only follow `dependencies` / `optionalDependencies` / `peerDependencies` edges — `devDependencies` (and packages reachable solely through them) are skipped. Non-graph forms (exact name, glob, path, `[git-ref]`) behave identically to `--filter`. Repeatable; can be combined with `--filter`." + long_help #""" +Production-only variant of `--filter`. + +Same selector grammar as `--filter`, but graph walks (`pkg...`, `...pkg`) only follow `dependencies` / `optionalDependencies` / `peerDependencies` edges — `devDependencies` (and packages reachable solely through them) are skipped. Non-graph forms (exact name, glob, path, `[git-ref]`) behave identically to `--filter`. Repeatable; can be combined with `--filter`. +"""# arg } flag --ignore-workspace help="Ignore workspace discovery for commands that support workspace fanout" hide=#true global=#true { - long_help "Ignore workspace discovery for commands that support workspace fanout.\n\nParsed for pnpm compatibility." + long_help #""" +Ignore workspace discovery for commands that support workspace fanout. + +Parsed for pnpm compatibility. +"""# } flag --include-workspace-root help="Include the workspace root in recursive workspace operations" hide=#true global=#true { - long_help "Include the workspace root in recursive workspace operations.\n\nParsed for pnpm compatibility." + long_help #""" +Include the workspace root in recursive workspace operations. + +Parsed for pnpm compatibility. +"""# } flag --loglevel help="Set the log level. Logs at or above this level are shown" global=#true { arg { @@ -52,429 +96,872 @@ flag --loglevel help="Set the log level. Logs at or above this level are shown" } } flag --no-color help="Disable colored output" global=#true { - long_help "Disable colored output.\n\nOverrides `FORCE_COLOR` / `CLICOLOR_FORCE` and sets `NO_COLOR=1` so downstream libraries (miette, clx, child processes) all see the same choice." + long_help #""" +Disable colored output. + +Overrides `FORCE_COLOR` / `CLICOLOR_FORCE` and sets `NO_COLOR=1` so downstream libraries (miette, clx, child processes) all see the same choice. +"""# } flag --reporter help="Output format: default, append-only, ndjson, silent" global=#true { - long_help "Output format: default, append-only, ndjson, silent.\n\n`default` renders the progress UI when stderr is a TTY; `append-only` disables the progress UI in favor of plain line-at-a-time logs; `ndjson` swaps the tracing fmt layer for the JSON formatter (one JSON object per log event on stderr) and is what tooling wrappers should consume; `silent` suppresses all non-error output (alias for `--loglevel silent`)." + long_help #""" +Output format: default, append-only, ndjson, silent. + +`default` renders the progress UI when stderr is a TTY; `append-only` disables the progress UI in favor of plain line-at-a-time logs; `ndjson` swaps the tracing fmt layer for the JSON formatter (one JSON object per log event on stderr) and is what tooling wrappers should consume; `silent` suppresses all non-error output (alias for `--loglevel silent`). +"""# arg { choices default append-only ndjson silent } } flag --silent help="Suppress all non-error output (alias for `--loglevel silent`)" global=#true flag --stream help="Stream workspace command output as each child process writes it" hide=#true global=#true { - long_help "Stream workspace command output as each child process writes it.\n\nAccepted for pnpm compatibility; aube's workspace fanout is currently sequential." + long_help #""" +Stream workspace command output as each child process writes it. + +Accepted for pnpm compatibility; aube's workspace fanout is currently sequential. +"""# } flag --use-stderr help="Route lifecycle and workspace command output through stderr" hide=#true global=#true { - long_help "Route lifecycle and workspace command output through stderr.\n\nAccepted for pnpm compatibility." + long_help #""" +Route lifecycle and workspace command output through stderr. + +Accepted for pnpm compatibility. +"""# } flag --workspace-packages help="Prefer workspace packages when resolving dependencies" hide=#true global=#true { - long_help "Prefer workspace packages when resolving dependencies.\n\nParsed for pnpm compatibility; aube already resolves workspace packages when a workspace is present." + long_help #""" +Prefer workspace packages when resolving dependencies. + +Parsed for pnpm compatibility; aube already resolves workspace packages when a workspace is present. +"""# } flag --workspace-root help="Run from the workspace root regardless of the current package" global=#true flag "-y --yes" help="Automatically answer yes to prompts" hide=#true global=#true { - long_help "Automatically answer yes to prompts.\n\nParsed for pnpm compatibility; aube does not currently prompt on these paths." + long_help #""" +Automatically answer yes to prompts. + +Parsed for pnpm compatibility; aube does not currently prompt on these paths. +"""# } -cmd __node-gyp-bootstrap hide=#true help="Bootstrap aube's cached node-gyp and print the executable path" { +cmd __node-gyp-bootstrap hide=#true help="Bootstrap aube's cached node-gyp and print the executable path" effect=write { arg } -cmd access subcommand_required=#true help="Manage package access and visibility on the registry" { +cmd access subcommand_required=#true help="Manage package access and visibility on the registry" effect=read { flag --json help="Emit registry responses as JSON when the subcommand has a result" flag --otp help="One-time password from a 2FA authenticator; sent as `npm-otp`" { arg } flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } - cmd get subcommand_required=#true help="Get package visibility status" { - cmd status help="Get a package's public or restricted status" { + cmd get subcommand_required=#true help="Get package visibility status" effect=read { + cmd status help="Get a package's public or restricted status" effect=read { arg help="Package name" } } - cmd grant help="Grant a team read-only or read-write access to a package" { + cmd grant help="Grant a team read-only or read-write access to a package" effect=write { arg help="`read-only` or `read-write`" arg help="Team in `@scope:team` form" arg help="Package name" } - cmd list subcommand_required=#true help="List packages visible to a user, organization, or team" { - cmd collaborators help="List collaborators for a package, optionally filtering to one user" { + cmd list subcommand_required=#true help="List packages visible to a user, organization, or team" effect=read { + cmd collaborators help="List collaborators for a package, optionally filtering to one user" effect=read { arg help="Package name" arg "[USER]" help="Optional user name" required=#false } - cmd packages help="List packages visible to the current user or an optional entity" { + cmd packages help="List packages visible to the current user or an optional entity" effect=read { arg "[ENTITY]" help="User, `@organization`, or `@scope:team`" required=#false } } - cmd ls help="Alias for `list packages`" { + cmd ls help="Alias for `list packages`" effect=read { arg "[ENTITIES]…" help="User, `@organization`, or `@scope:team`. Also accepts pnpm's `packages [ENTITY]` compatibility form. Accepted forms are `aube access ls [ENTITY]` and `aube access ls packages [ENTITY]`" required=#false var=#true } - cmd revoke help="Revoke a team's access to a package" { + cmd revoke help="Revoke a team's access to a package" effect=destructive { arg help="Team in `@scope:team` form" arg help="Package name" } - cmd set help="Set package visibility or a publish MFA requirement" { + cmd set help="Set package visibility or a publish MFA requirement" effect=write { arg help="`status=public|private|restricted` or `mfa=none|publish|automation`" arg help="Package name" } } -cmd activate help="Emit shell activation code for runtime tool shims" { +cmd activate help="Emit shell activation code for runtime tool shims" effect=write { arg help="Shell to emit activation code for" { choices bash fish zsh } } -cmd add help="Add a dependency" { +cmd add help="Add a dependency" effect=write { alias a flag "-D --save-dev" help="Add as dev dependency" flag "-E --save-exact" help="Pin the exact resolved version (no `^` prefix)" flag "-g --global" help="Install the package globally" { - long_help "Install the package globally.\n\nInstalls into the aube/pnpm global directory and links its binaries into the global bin directory. Mirrors `pnpm add -g`." + long_help #""" +Install the package globally. + +Installs into the aube/pnpm global directory and links its binaries into the global bin directory. Mirrors `pnpm add -g`. +"""# } flag "-O --save-optional" help="Add as optional dependency" flag --allow-build help="Pre-approve a dependency's lifecycle scripts as part of the add" var=#true { - long_help "Pre-approve a dependency's lifecycle scripts as part of the add.\n\nWrites `allowBuilds: { : true }` into the workspace yaml (or `package.json#aube.allowBuilds`) before the install runs, so the named package's `preinstall` / `install` / `postinstall` scripts execute on this invocation. Repeatable — pass the flag once per package. Mirrors `pnpm add --allow-build=`.\n\nConflicts with `--no-save`, which only snapshots `package.json` and the lockfile and would leave an orphaned approval in the workspace yaml on restore. Also conflicts with `--deny-build` for the same package name." + long_help #""" +Pre-approve a dependency's lifecycle scripts as part of the add. + +Writes `allowBuilds: { : true }` into the workspace yaml (or `package.json#aube.allowBuilds`) before the install runs, so the named package's `preinstall` / `install` / `postinstall` scripts execute on this invocation. Repeatable — pass the flag once per package. Mirrors `pnpm add --allow-build=`. + +Conflicts with `--no-save`, which only snapshots `package.json` and the lockfile and would leave an orphaned approval in the workspace yaml on restore. Also conflicts with `--deny-build` for the same package name. +"""# arg } - flag --allow-low-downloads help="Bypass the [`lowDownloadThreshold`] confirm prompt / refusal for this invocation" { - long_help "Bypass the [`lowDownloadThreshold`] confirm prompt / refusal for this invocation.\n\n`aube add` looks up each candidate's weekly download count and prompts (interactive) or fails (CI) when the count is below [`lowDownloadThreshold`]. The flag is intended for the cases where you've already verified the package out-of-band — adding a brand-new niche tool, a fresh fork, an internal scratch package — and don't want the prompt to interrupt scripted workflows. Does not affect the OSV malicious-package check, which remains a hard block." + flag --allow-low-downloads help="Bypass the similar-name, new-name, and [`lowDownloadThreshold`] confirm prompts / refusals for this invocation" { + long_help #""" +Bypass the similar-name, new-name, and [`lowDownloadThreshold`] confirm prompts / refusals for this invocation. + +`aube add` looks up each candidate's weekly download count and prompts (interactive) or fails (CI) when the count is below [`lowDownloadThreshold`], resembles a top-100,000 npm package, or is newer than [`minimumPackageAge`]. The flag is intended for cases where you've already verified the package out-of-band. It does not affect the OSV malicious-package check, which remains a hard block. +"""# } flag --dangerously-allow-all-builds help="Allow every dependency's lifecycle scripts to run" { - long_help "Allow every dependency's lifecycle scripts to run.\n\nBypasses the `allowBuilds` allowlist for this invocation. Do not use in CI. Mirrors pnpm's `--dangerously-allow-all-builds`." + long_help #""" +Allow every dependency's lifecycle scripts to run. + +Bypasses the `allowBuilds` allowlist for this invocation. Do not use in CI. Mirrors pnpm's `--dangerously-allow-all-builds`. +"""# } flag --deny-build help="Mark a dependency's lifecycle scripts as reviewed and denied" var=#true { - long_help "Mark a dependency's lifecycle scripts as reviewed and denied.\n\nWrites `allowBuilds: { : false }` into the workspace yaml (or `package.json#aube.allowBuilds`) before the install runs, so the named package's lifecycle scripts stay skipped without tripping `strictDepBuilds=true`. Repeatable — pass the flag once per package.\n\nConflicts with `--no-save`, which only snapshots `package.json` and the lockfile and would leave an orphaned denial in the workspace yaml on restore. Also conflicts with `--allow-build` for the same package name and with `--dangerously-allow-all-builds`." + long_help #""" +Mark a dependency's lifecycle scripts as reviewed and denied. + +Writes `allowBuilds: { : false }` into the workspace yaml (or `package.json#aube.allowBuilds`) before the install runs, so the named package's lifecycle scripts stay skipped without tripping `strictDepBuilds=true`. Repeatable — pass the flag once per package. + +Conflicts with `--no-save`, which only snapshots `package.json` and the lockfile and would leave an orphaned denial in the workspace yaml on restore. Also conflicts with `--allow-build` for the same package name and with `--dangerously-allow-all-builds`. +"""# arg } flag --ignore-scripts help="Skip lifecycle scripts (no-op; aube already skips by default)" hide=#true flag --no-save help="Install without persisting the dependency to `package.json`" { - long_help "Install without persisting the dependency to `package.json`.\n\nSnapshots `package.json` and the lockfile, links the named packages into `node_modules`, and then restores both files — so the dependency is usable for the current process but the project's committed state is untouched.\n\nHandy for one-off experiments and for scripts that install a tool transiently. Mirrors `pnpm add --no-save`. Conflicts with `-g`/`--global`, which has to persist the install to its global manifest." + long_help #""" +Install without persisting the dependency to `package.json`. + +Snapshots `package.json` and the lockfile, links the named packages into `node_modules`, and then restores both files — so the dependency is usable for the current process but the project's committed state is untouched. + +Handy for one-off experiments and for scripts that install a tool transiently. Mirrors `pnpm add --no-save`. Conflicts with `-g`/`--global`, which has to persist the install to its global manifest. +"""# } flag --no-save-workspace-protocol help="Inverse of `--save-workspace-protocol`" { - long_help "Inverse of `--save-workspace-protocol`.\n\nForces the manifest specifier into a registry-style spec (`^`) for this invocation, even when `linkWorkspacePackages` matched a local sibling. The install pipeline still prefers the local workspace copy at resolve time — this flag only controls what's written to `package.json`. Mirrors `pnpm add --no-save-workspace-protocol`." + long_help #""" +Inverse of `--save-workspace-protocol`. + +Forces the manifest specifier into a registry-style spec (`^`) for this invocation, even when `linkWorkspacePackages` matched a local sibling. The install pipeline still prefers the local workspace copy at resolve time — this flag only controls what's written to `package.json`. Mirrors `pnpm add --no-save-workspace-protocol`. +"""# } flag --save-catalog help="Save the new dependency into the workspace's default catalog" { - long_help "Save the new dependency into the workspace's default catalog.\n\nWrites `catalog:` into `package.json` and seeds/upserts the resolved range under `catalog:` in the workspace yaml. Mirrors `pnpm add --save-catalog`.\n\nWorkspace and aliased specs (`workspace:*`, `npm:`, `jsr:`) are never catalogized — the manifest gets the original spec and the catalog yaml is left alone. If the package is already in the target catalog, the existing entry is preserved (never overwritten); the manifest then gets `catalog:` only when the existing entry is compatible with the user's range.\n\nConflicts with `--no-save`: catalog mutations write to the workspace yaml, which the `--no-save` restore path doesn't snapshot — combining the two would silently leave an orphaned catalog entry behind." + long_help #""" +Save the new dependency into the workspace's default catalog. + +Writes `catalog:` into `package.json` and seeds/upserts the resolved range under `catalog:` in the workspace yaml. Mirrors `pnpm add --save-catalog`. + +Workspace and aliased specs (`workspace:*`, `npm:`, `jsr:`) are never catalogized — the manifest gets the original spec and the catalog yaml is left alone. If the package is already in the target catalog, the existing entry is preserved (never overwritten); the manifest then gets `catalog:` only when the existing entry is compatible with the user's range. + +Conflicts with `--no-save`: catalog mutations write to the workspace yaml, which the `--no-save` restore path doesn't snapshot — combining the two would silently leave an orphaned catalog entry behind. +"""# } flag --save-catalog-name help="Save the new dependency into a *named* catalog" { - long_help "Save the new dependency into a *named* catalog.\n\nWrites the entry to `catalogs.` in the workspace yaml and `catalog:` into `package.json`. Same workspace/alias exclusions and `--no-save` conflict as `--save-catalog`. Mirrors `pnpm add --save-catalog-name=`." + long_help #""" +Save the new dependency into a *named* catalog. + +Writes the entry to `catalogs.` in the workspace yaml and `catalog:` into `package.json`. Same workspace/alias exclusions and `--no-save` conflict as `--save-catalog`. Mirrors `pnpm add --save-catalog-name=`. +"""# arg } flag --save-peer help="Add as a peer dependency (written to `peerDependencies` in package.json)" { - long_help "Add as a peer dependency (written to `peerDependencies` in package.json).\n\nBy convention you usually pair this with `--save-dev` so the peer is also installed for local development; that's what pnpm does." + long_help #""" +Add as a peer dependency (written to `peerDependencies` in package.json). + +By convention you usually pair this with `--save-dev` so the peer is also installed for local development; that's what pnpm does. +"""# } flag --save-workspace-protocol help="Force the manifest specifier into `workspace:` form for this invocation, overriding `saveWorkspaceProtocol` from the workspace yaml / `.npmrc` / env" { - long_help "Force the manifest specifier into `workspace:` form for this invocation, overriding `saveWorkspaceProtocol` from the workspace yaml / `.npmrc` / env.\n\nOnly meaningful when `linkWorkspacePackages` (or a workspace sibling already exists for the named package). With this flag the entry written to `package.json` is `workspace:^` (rolling) or `workspace:^` (pinned), depending on the resolved `saveWorkspaceProtocol` value." + long_help #""" +Force the manifest specifier into `workspace:` form for this invocation, overriding `saveWorkspaceProtocol` from the workspace yaml / `.npmrc` / env. + +Only meaningful when `linkWorkspacePackages` (or a workspace sibling already exists for the named package). With this flag the entry written to `package.json` is `workspace:^` (rolling) or `workspace:^` (pinned), depending on the resolved `saveWorkspaceProtocol` value. +"""# } flag "-w --workspace" help="Add the dependency to the workspace root's `package.json`" { - long_help "Add the dependency to the workspace root's `package.json`.\n\nApplies regardless of the current working directory: walks up from cwd looking for `aube-workspace.yaml`, `pnpm-workspace.yaml`, or a `package.json` with a `workspaces` field and runs the add against that directory." + long_help #""" +Add the dependency to the workspace root's `package.json`. + +Applies regardless of the current working directory: walks up from cwd looking for `aube-workspace.yaml`, `pnpm-workspace.yaml`, or a `package.json` with a `workspaces` field and runs the add against that directory. +"""# } flag "-W --ignore-workspace-root-check" help="Allow `add` to run in a workspace root" { - long_help "Allow `add` to run in a workspace root.\n\nBy default aube refuses to add dependencies to the root `package.json` of a workspace (a directory containing `aube-workspace.yaml`, `pnpm-workspace.yaml`, or a `package.json` with a `workspaces` field) because deps added there end up shared by every package and usually reflect a mistake. Pass this flag to opt in. Mirrors `pnpm add -W`." + long_help #""" +Allow `add` to run in a workspace root. + +By default aube refuses to add dependencies to the root `package.json` of a workspace (a directory containing `aube-workspace.yaml`, `pnpm-workspace.yaml`, or a `package.json` with a `workspaces` field) because deps added there end up shared by every package and usually reflect a mistake. Pass this flag to opt in. Mirrors `pnpm add -W`. +"""# } flag --frozen-lockfile help="Error if the lockfile drifts from package.json" flag --no-frozen-lockfile help="Always re-resolve, even if the lockfile is up to date" flag --prefer-frozen-lockfile help="Use the lockfile when fresh, re-resolve when stale" flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } flag "--disable-global-virtual-store --disable-gvs" help="Force the shared global virtual store off for this invocation" { - long_help "Force the shared global virtual store off for this invocation.\n\nPackages are materialized inside the project's virtual store instead of symlinked from `~/.cache/aube/virtual-store/`." + long_help #""" +Force the shared global virtual store off for this invocation. + +Packages are materialized inside the project's virtual store instead of symlinked from `~/.cache/aube/virtual-store/`. +"""# } flag "--enable-global-virtual-store --enable-gvs" help="Force the shared global virtual store on for this invocation" { - long_help "Force the shared global virtual store on for this invocation.\n\nOverrides CI's default per-project materialization and the `disableGlobalVirtualStoreForPackages` auto-disable heuristic." + long_help #""" +Force the shared global virtual store on for this invocation. + +Overrides CI's default per-project materialization and the `disableGlobalVirtualStoreForPackages` auto-disable heuristic. +"""# } arg "[PACKAGES]…" help="Package(s) to add" required=#false var=#true } -cmd approve-builds help="Approve ignored dependency build scripts" { - long_help "Approve ignored dependency build scripts.\n\nWrites entries under `allowBuilds` in `aube-workspace.yaml` (or `pnpm-workspace.yaml` if present)." +cmd approve-builds help="Approve ignored dependency build scripts" effect=write { + long_help #""" +Approve ignored dependency build scripts. + +Writes entries under `allowBuilds` in `aube-workspace.yaml` (or `pnpm-workspace.yaml` if present). +"""# flag --all help="Approve every pending ignored build without prompting" flag "-g --global" help="Operate on globally-installed packages instead of the current project" - arg "[PKG]…" help="Packages to approve directly, skipping the picker" help_long="Packages to approve directly, skipping the picker.\n\nEach name must match a currently-ignored build. Unknown names are rejected so a typo cannot silently no-op." required=#false var=#true + arg "[PKG]…" help="Packages to approve directly, skipping the picker" help_long=#""" +Packages to approve directly, skipping the picker. + +Each name must match a currently-ignored build. Unknown names are rejected so a typo cannot silently no-op. +"""# required=#false var=#true } -cmd audit help="Check installed packages against the registry advisory DB" { - after_long_help "Examples:\n\n $ aube audit\n Severity Package Vulnerable Title\n moderate minimatch <3.0.5 Regular Expression Denial of Service\n https://github.com/advisories/GHSA-f8q6-p94x\n\n 1 vulnerability found\n\n # Only fail on high and above\n $ aube audit --audit-level high\n\n # Skip optional deps and dev deps\n $ aube audit --prod --no-optional\n\n # Pipe into jq\n $ aube audit --json | jq '.advisories | length'\n\n # Clean\n $ aube audit\n No known vulnerabilities found\n" - flag --audit-level help="Only print advisories at or above this severity" default=low { - long_help "Only print advisories at or above this severity.\n\nOne of: `info`, `low`, `moderate`, `high`, `critical`. Default: `low`." +cmd audit help="Check installed packages against the registry advisory DB" effect=read { + after_long_help #""" +Examples: + + $ aube audit + Severity Package Vulnerable Title + moderate minimatch <3.0.5 Regular Expression Denial of Service + https://github.com/advisories/GHSA-f8q6-p94x + + 1 vulnerability found + + # Only fail on high and above + $ aube audit --audit-level high + + # Skip optional deps and dev deps + $ aube audit --prod --no-optional + + # Pipe into jq + $ aube audit --json | jq '.advisories | length' + + # Clean + $ aube audit + No known vulnerabilities found + +"""# + flag --audit-level help="Only print advisories at or above this severity" { + long_help #""" +Only print advisories at or above this severity. + +One of: `info`, `low`, `moderate`, `high`, `critical`. Defaults to `audit.level` (or legacy `auditLevel`), then `low`. +"""# arg { choices info low moderate high critical } } flag "-D --dev" help="Only audit `devDependencies`" flag --fix help="Fix advisories" { - long_help "Fix advisories.\n\nBare `--fix` writes package.json overrides for backwards compatibility. `--fix=update` refreshes the lockfile without writing overrides." + long_help #""" +Fix advisories. + +Bare `--fix` writes package.json overrides for backwards compatibility. `--fix=update` refreshes the lockfile without writing overrides. +"""# arg { choices update override } } flag --ignore help="Drop advisories whose ID matches one of these values" var=#true { - long_help "Drop advisories whose ID matches one of these values.\n\nMatches against the numeric npm advisory `id`, `github_advisory_id` (`GHSA-…`), and any entry in `cves[]` (case-insensitive). Repeatable; comma-separated values are also accepted." + long_help #""" +Drop advisories whose ID matches one of these values. + +Matches against the numeric npm advisory `id`, `github_advisory_id` (`GHSA-…`), and any entry in `cves[]` (case-insensitive). Repeatable; comma-separated values are also accepted. +"""# arg } flag --ignore-registry-errors help="Use exit code 0 if the registry responds with an error" { - long_help "Use exit code 0 if the registry responds with an error.\n\nUseful when audit checks run in CI and the registry has a hiccup." + long_help #""" +Use exit code 0 if the registry responds with an error. + +Useful when audit checks run in CI and the registry has a hiccup. +"""# } flag --ignore-unfixable help="Drop advisories that have no non-vulnerable upgrade" { - long_help "Drop advisories that have no non-vulnerable upgrade.\n\nFilters out advisories for which no non-vulnerable version is available in the package's packument. Same \"best non-vulnerable\" logic as `--fix`: an advisory is kept only when an upgrade path exists." + long_help #""" +Drop advisories that have no non-vulnerable upgrade. + +Filters out advisories for which no non-vulnerable version is available in the package's packument. Same "best non-vulnerable" logic as `--fix`: an advisory is kept only when an upgrade path exists. +"""# } flag "-i --interactive" help="Pick which advisories to fix interactively" flag --json help="Emit the report as JSON (pnpm-compatible shape) instead of a table" flag --no-optional help="Skip `optionalDependencies`" flag "-P --prod --production" help="Only audit `dependencies` and `optionalDependencies`" flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } } -cmd bin help="Print the path to `node_modules/.bin`" { - after_long_help "Examples:\n\n $ aube bin\n /home/user/project/node_modules/.bin\n\n $ aube bin -g\n /home/user/.local/share/aube/global/node_modules/.bin\n\n # From a workspace package, -w prints the workspace-root bin directory\n $ cd packages/app\n $ aube bin\n /home/user/project/packages/app/node_modules/.bin\n $ aube bin -w\n /home/user/project/node_modules/.bin\n\n # Extend PATH with the project bin directory\n $ export PATH=\"$(aube bin):$PATH\"\n" +cmd bin help="Print the path to `node_modules/.bin`" effect=read { + after_long_help #""" +Examples: + + $ aube bin + /home/user/project/node_modules/.bin + + $ aube bin -g + /home/user/.local/share/aube/global/node_modules/.bin + + # From a workspace package, -w prints the workspace-root bin directory + $ cd packages/app + $ aube bin + /home/user/project/packages/app/node_modules/.bin + $ aube bin -w + /home/user/project/node_modules/.bin + + # Extend PATH with the project bin directory + $ export PATH="$(aube bin):$PATH" + +"""# flag "-g --global" help="Print the global bin directory instead of the project's" flag "-w --workspace-root --workspace" help="Print the workspace-root bin directory instead of the current package's" { - long_help "Print the workspace-root bin directory instead of the current package's.\n\nMirrors `pnpm bin -w`: from a sub-package, resolves the enclosing workspace root and prints its `node_modules/.bin`. No-op when no workspace root exists above cwd (single-project install), so the flag is safe to leave in shell aliases." + long_help #""" +Print the workspace-root bin directory instead of the current package's. + +Mirrors `pnpm bin -w`: from a sub-package, resolves the enclosing workspace root and prints its `node_modules/.bin`. No-op when no workspace root exists above cwd (single-project install), so the flag is safe to leave in shell aliases. +"""# } } -cmd bugs help="Open package bug tracker URLs" { +cmd bugs help="Open package bug tracker URLs" effect=read { alias issues - after_long_help "Examples:\n\n $ aube bugs\n\n $ aube bugs react\n\n $ aube issues react react-dom\n" + after_long_help #""" +Examples: + + $ aube bugs + + $ aube bugs react + + $ aube issues react react-dom + +"""# flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } arg "[PACKAGES]…" help="Packages to open bug trackers for. Defaults to the current project" required=#false var=#true } -cmd cache subcommand_required=#true help="Inspect and manage the packument metadata cache" { - cmd delete help="Delete metadata cache for the specified package(s)" { - long_help "Delete metadata cache for the specified package(s).\n\nSupports glob patterns; matches against the package name (e.g. `lodash`, `@babel/*`)." - arg … help="One or more package name patterns" help_long="One or more package name patterns.\n\nGlob metacharacters (`*`, `?`, `[...]`) are supported." var=#true +cmd cache subcommand_required=#true help="Inspect and manage the packument metadata cache" effect=read { + cmd delete help="Delete metadata cache for the specified package(s)" effect=write { + long_help #""" +Delete metadata cache for the specified package(s). + +Supports glob patterns; matches against the package name (e.g. `lodash`, `@babel/*`). +"""# + arg … help="One or more package name patterns" help_long=#""" +One or more package name patterns. + +Glob metacharacters (`*`, `?`, `[...]`) are supported. +"""# var=#true } - cmd list help="List the available packages in the metadata cache" { - long_help "List the available packages in the metadata cache.\n\nOptional glob filters narrow the result; with no filter every cached package is listed." - arg "[PATTERNS]…" help="Optional glob patterns to filter the listing" help_long="Optional glob patterns to filter the listing.\n\nWith no patterns, every cached package is printed." required=#false var=#true + cmd list help="List the available packages in the metadata cache" effect=read { + long_help #""" +List the available packages in the metadata cache. + +Optional glob filters narrow the result; with no filter every cached package is listed. +"""# + arg "[PATTERNS]…" help="Optional glob patterns to filter the listing" help_long=#""" +Optional glob patterns to filter the listing. + +With no patterns, every cached package is printed. +"""# required=#false var=#true } - cmd list-registries help="List configured registries from the project + user `.npmrc`" { - long_help "List configured registries from the project + user `.npmrc`.\n\nAube stores all packuments in a single flat directory (unlike pnpm's per-host layout), so this prints the registries you're currently configured to talk to rather than the registries that happen to be in the cache." + cmd list-registries help="List configured registries from the project + user `.npmrc`" effect=read { + long_help #""" +List configured registries from the project + user `.npmrc`. + +Aube stores all packuments in a single flat directory (unlike pnpm's per-host layout), so this prints the registries you're currently configured to talk to rather than the registries that happen to be in the cache. +"""# } - cmd prune help="Remove stale extracted primer files from the metadata cache" { + cmd prune help="Remove stale extracted primer files from the metadata cache" effect=write { flag --age-days help="Minimum age in days before an old primer file is removed" default="30" { arg } flag --dry-run help="Do not actually delete anything" } - cmd view help="View the cached metadata for a single package" { - long_help "View the cached metadata for a single package.\n\nPrints a summary (versions, dist-tags, ETag, fetched-at) by default; `--json` dumps the raw cache file." + cmd view help="View the cached metadata for a single package" effect=read { + long_help #""" +View the cached metadata for a single package. + +Prints a summary (versions, dist-tags, ETag, fetched-at) by default; `--json` dumps the raw cache file. +"""# flag --json help="Dump the raw on-disk cache JSON instead of a summary" arg help="Package name (scoped names like `@babel/core` are accepted)" } } -cmd cat-file help="Print a file from the global store by integrity or hex hash" { - arg help="File hash to look up" help_long="File hash to look up.\n\nAccepts `sha512-` (pnpm integrity format) or a raw hex CAS digest." +cmd cat-file help="Print a file from the global store by integrity or hex hash" effect=read { + arg help="File hash to look up" help_long=#""" +File hash to look up. + +Accepts `sha512-` (pnpm integrity format) or a raw hex CAS digest. +"""# } -cmd cat-index help="Print the cached package index JSON for `@`" { - arg help="Package to inspect, in `name@version` form (e.g. `lodash@4.17.21`, `@babel/core@7.26.0`)" help_long="Package to inspect, in `name@version` form (e.g. `lodash@4.17.21`, `@babel/core@7.26.0`).\n\nAn exact version is required — ranges and dist-tags aren't resolved here." +cmd cat-index help="Print the cached package index JSON for `@`" effect=read { + arg help="Package to inspect, in `name@version` form (e.g. `lodash@4.17.21`, `@babel/core@7.26.0`)" help_long=#""" +Package to inspect, in `name@version` form (e.g. `lodash@4.17.21`, `@babel/core@7.26.0`). + +An exact version is required — ranges and dist-tags aren't resolved here. +"""# } -cmd check help="Verify installed packages can resolve their declared deps" { - long_help "Verify installed packages can resolve their declared deps.\n\nWalks the `node_modules/` symlink tree and confirms every dependency in each `package.json` resolves to a real entry." - after_long_help "Examples:\n\n $ aube check\n node_modules symlink tree is consistent (checked 248 packages).\n\n # With issues\n $ aube check\n 2 broken dependency links found:\n\n vscode-languageserver@9.0.1\n ✕ cannot resolve: vscode-languageserver-protocol@3.17.5\n\n vscode-languageserver-protocol@3.17.5\n ✕ cannot resolve: vscode-languageserver-types@3.17.5\n ✕ cannot resolve: vscode-jsonrpc@8.2.1\n\n # Machine-readable\n $ aube check --json\n" +cmd check help="Verify installed packages can resolve their declared deps" effect=read { + long_help #""" +Verify installed packages can resolve their declared deps. + +Walks the `node_modules/` symlink tree and confirms every dependency in each `package.json` resolves to a real entry. +"""# + after_long_help #""" +Examples: + + $ aube check + node_modules symlink tree is consistent (checked 248 packages). + + # With issues + $ aube check + 2 broken dependency links found: + + vscode-languageserver@9.0.1 + ✕ cannot resolve: vscode-languageserver-protocol@3.17.5 + + vscode-languageserver-protocol@3.17.5 + ✕ cannot resolve: vscode-languageserver-types@3.17.5 + ✕ cannot resolve: vscode-jsonrpc@8.2.1 + + # Machine-readable + $ aube check --json + +"""# flag --json help="Emit a JSON report instead of the human-readable list" } -cmd ci help="Clean install: delete node_modules, then install with frozen lockfile" { +cmd ci help="Clean install: delete node_modules, then install with frozen lockfile" effect=write { alias clean-install alias ic install-clean hide=#true - long_help "Clean install: delete node_modules, then install with frozen lockfile.\n\nUse in CI to guarantee a reproducible install from the committed lockfile." + long_help #""" +Clean install: delete node_modules, then install with frozen lockfile. + +Use in CI to guarantee a reproducible install from the committed lockfile. +"""# flag --ignore-scripts help="Skip lifecycle scripts (no-op; aube already skips by default)" flag --no-optional help="Skip optionalDependencies; don't install optional native modules" flag --frozen-lockfile help="Error if the lockfile drifts from package.json" flag --no-frozen-lockfile help="Always re-resolve, even if the lockfile is up to date" flag --prefer-frozen-lockfile help="Use the lockfile when fresh, re-resolve when stale" flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } flag "--disable-global-virtual-store --disable-gvs" help="Force the shared global virtual store off for this invocation" { - long_help "Force the shared global virtual store off for this invocation.\n\nPackages are materialized inside the project's virtual store instead of symlinked from `~/.cache/aube/virtual-store/`." + long_help #""" +Force the shared global virtual store off for this invocation. + +Packages are materialized inside the project's virtual store instead of symlinked from `~/.cache/aube/virtual-store/`. +"""# } flag "--enable-global-virtual-store --enable-gvs" help="Force the shared global virtual store on for this invocation" { - long_help "Force the shared global virtual store on for this invocation.\n\nOverrides CI's default per-project materialization and the `disableGlobalVirtualStoreForPackages` auto-disable heuristic." + long_help #""" +Force the shared global virtual store on for this invocation. + +Overrides CI's default per-project materialization and the `disableGlobalVirtualStoreForPackages` auto-disable heuristic. +"""# } } -cmd clean help="Remove `node_modules` across every workspace project" { - long_help "Remove `node_modules` across every workspace project.\n\n`--lockfile` / `-l` also deletes lockfiles. A `clean` script in the root `package.json` overrides the built-in." +cmd clean help="Remove `node_modules` across every workspace project" effect=write { + long_help #""" +Remove `node_modules` across every workspace project. + +`--lockfile` / `-l` also deletes lockfiles. A `clean` script in the root `package.json` overrides the built-in. +"""# flag "-l --lockfile" help="Also remove lockfiles at the workspace root" { - long_help "Also remove lockfiles at the workspace root.\n\nTargets `aube-lock.yaml`, `pnpm-lock.yaml`, `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock`, and `bun.lock`." + long_help #""" +Also remove lockfiles at the workspace root. + +Targets `aube-lock.yaml`, `pnpm-lock.yaml`, `package-lock.json`, `npm-shrinkwrap.json`, `yarn.lock`, and `bun.lock`. +"""# } } -cmd completion help="Generate shell completions (bash, zsh, fish)" { +cmd completion help="Generate shell completions (bash, zsh, fish)" effect=read { + flag --complete help="Emit dynamic candidates for the shell completion engine" hide=#true { + arg { + choices package bin workspace setting patch + } + } + flag --query help="Current word being completed" hide=#true default="" { + arg + } arg help="The shell to generate completions for (bash, zsh, fish)" } -cmd config help="Read and write settings in `.npmrc`" { +cmd config help="Read and write settings in `.npmrc`" effect=read { alias c hide=#true flag --all help="Also list settings that have no value set" { - long_help "Also list settings that have no value set.\n\nRenders one row per setting in `settings.toml`, with the default and description shown for unset entries.\n\nOnly valid with `--location merged` (the default), since a per-file view can't distinguish \"not set anywhere\" from \"set in the other file\" and would render misleading defaults." + long_help #""" +Also list settings that have no value set. + +Renders one row per setting in `settings.toml`, with the default and description shown for unset entries. + +Only valid with `--location merged` (the default), since a per-file view can't distinguish "not set anywhere" from "set in the other file" and would render misleading defaults. +"""# } flag --json help="Emit all entries as a JSON object keyed by setting name" { - long_help "Emit all entries as a JSON object keyed by setting name.\n\nMatches `pnpm config list --json`. Honors `--all` and `--location` the same way the default text output does." + long_help #""" +Emit all entries as a JSON object keyed by setting name. + +Matches `pnpm config list --json`. Honors `--all` and `--location` the same way the default text output does. +"""# } flag --local help="Shortcut for `--location project`" { - long_help "Shortcut for `--location project`.\n\nConflicts with `--all` since `--all` only makes sense against the merged view — see the `--all` docs for why." + long_help #""" +Shortcut for `--location project`. + +Conflicts with `--all` since `--all` only makes sense against the merged view — see the `--all` docs for why. +"""# } flag --location help="Which config location(s) to list" { - long_help "Which config location(s) to list.\n\n`merged` (default) walks `~/.npmrc`, user aube config, then the project's `.npmrc` with last-write-wins precedence, matching how install reads config." + long_help #""" +Which config location(s) to list. + +`merged` (default) walks `~/.npmrc`, user aube config, then the project's `.npmrc` with last-write-wins precedence, matching how install reads config. +"""# arg { choices merged user project global } } - cmd delete help="Delete a key from aube config or the selected `.npmrc` file" { + cmd delete help="Delete a key from aube config or the selected `.npmrc` file" effect=destructive { alias rm remove unset flag --local help="Shortcut for `--location project`" flag --location help="Which config location to act on" default=user { - long_help "Which config location to act on.\n\nDefaults to `user`. Delete sweeps both aube's own config (`~/.config/aube/config.toml` at user-scope, `/.config/aube/config.toml` at project-scope) and the matching `.npmrc`, so the call works regardless of which file the value was originally written to." + long_help #""" +Which config location to act on. + +Defaults to `user`. Delete sweeps both aube's own config (`~/.config/aube/config.toml` at user-scope, `/.config/aube/config.toml` at project-scope) and the matching `.npmrc`, so the call works regardless of which file the value was originally written to. +"""# arg { choices user project global } } - arg help="The setting key" help_long="The setting key.\n\nAccepts either a pnpm canonical name (e.g. `autoInstallPeers`) or an `.npmrc` alias (e.g. `auto-install-peers`)." + arg help="The setting key" help_long=#""" +The setting key. + +Accepts either a pnpm canonical name (e.g. `autoInstallPeers`) or an `.npmrc` alias (e.g. `auto-install-peers`). +"""# } - cmd explain help="Explain a known setting, including defaults and supported config sources" { + cmd explain help="Explain a known setting, including defaults and supported config sources" effect=read { arg help="Setting key, `.npmrc` alias, env var, workspace YAML key, or CLI flag" } - cmd find help="Search known settings by name, source key, or description" { + cmd find help="Search known settings by name, source key, or description" effect=read { alias search arg … help="Words to search for" var=#true } - cmd get help="Print the effective value of a key" { + cmd get help="Print the effective value of a key" effect=read { flag --json help="Emit the value as JSON" { - long_help "Emit the value as JSON.\n\nMatches `pnpm config get --json`: a missing key renders as `undefined`, a found value is JSON-encoded." + long_help #""" +Emit the value as JSON. + +Matches `pnpm config get --json`: a missing key renders as `undefined`, a found value is JSON-encoded. +"""# } flag --local help="Shortcut for `--location project`" flag --location help="Which config location(s) to read" default=merged { - long_help "Which config location(s) to read.\n\nDefaults to `merged` — the last-write-wins view of user aube config, `~/.npmrc`, then `./.npmrc`, matching what install actually sees. Use `user` or `project` to restrict the lookup." + long_help #""" +Which config location(s) to read. + +Defaults to `merged` — the last-write-wins view of user aube config, `~/.npmrc`, then `./.npmrc`, matching what install actually sees. Use `user` or `project` to restrict the lookup. +"""# arg { choices merged user project global } } - arg help="The setting key" help_long="The setting key.\n\nAccepts either a pnpm canonical name (e.g. `autoInstallPeers`) or an `.npmrc` alias (e.g. `auto-install-peers`)." + arg help="The setting key" help_long=#""" +The setting key. + +Accepts either a pnpm canonical name (e.g. `autoInstallPeers`) or an `.npmrc` alias (e.g. `auto-install-peers`). +"""# } - cmd list help="Print every key/value from aube config and selected `.npmrc` file(s)" { + cmd list help="Print every key/value from aube config and selected `.npmrc` file(s)" effect=read { alias ls flag --all help="Also list settings that have no value set" { - long_help "Also list settings that have no value set.\n\nRenders one row per setting in `settings.toml`, with the default and description shown for unset entries.\n\nOnly valid with `--location merged` (the default), since a per-file view can't distinguish \"not set anywhere\" from \"set in the other file\" and would render misleading defaults." + long_help #""" +Also list settings that have no value set. + +Renders one row per setting in `settings.toml`, with the default and description shown for unset entries. + +Only valid with `--location merged` (the default), since a per-file view can't distinguish "not set anywhere" from "set in the other file" and would render misleading defaults. +"""# } flag --json help="Emit all entries as a JSON object keyed by setting name" { - long_help "Emit all entries as a JSON object keyed by setting name.\n\nMatches `pnpm config list --json`. Honors `--all` and `--location` the same way the default text output does." + long_help #""" +Emit all entries as a JSON object keyed by setting name. + +Matches `pnpm config list --json`. Honors `--all` and `--location` the same way the default text output does. +"""# } flag --local help="Shortcut for `--location project`" { - long_help "Shortcut for `--location project`.\n\nConflicts with `--all` since `--all` only makes sense against the merged view — see the `--all` docs for why." + long_help #""" +Shortcut for `--location project`. + +Conflicts with `--all` since `--all` only makes sense against the merged view — see the `--all` docs for why. +"""# } flag --location help="Which config location(s) to list" { - long_help "Which config location(s) to list.\n\n`merged` (default) walks `~/.npmrc`, user aube config, then the project's `.npmrc` with last-write-wins precedence, matching how install reads config." + long_help #""" +Which config location(s) to list. + +`merged` (default) walks `~/.npmrc`, user aube config, then the project's `.npmrc` with last-write-wins precedence, matching how install reads config. +"""# arg { choices merged user project global } } } - cmd set help="Write a key=value pair to aube config or the selected `.npmrc` file" { + cmd set help="Write a key=value pair to aube config or the selected `.npmrc` file" effect=write { flag --local help="Shortcut for `--location project`" flag --location help="Which config location to write to" default=user { - long_help "Which config location to write to.\n\nDefaults to `user`. Writes land in `.npmrc` for the npm-shared surface — per-host auth/cert templates, scoped registries, and settings tagged `npmShared = true` in the settings registry (`registry`, `proxy` / `https-proxy`, `engine-strict`, `ignore-scripts`, etc.) — so npm and yarn read the same value. Aube-only and pnpm-only settings, plus unknown keys, land in aube's own config (`~/.config/aube/config.toml` at user scope, `/.config/aube/config.toml` at project scope) where sibling tools don't see them.\n\nDotted writes for aube map settings (`allowBuilds.`, `overrides.`, …) edit one entry at a time. At project scope (`--local`) they land in `pnpm-workspace.yaml#.` or `package.json#aube..` if no workspace yaml exists, the same place install reads from. User-scope dotted writes for these maps error: aube only reads them per project." + long_help #""" +Which config location to write to. + +Defaults to `user`. Writes land in `.npmrc` for the npm-shared surface — per-host auth/cert templates, scoped registries, and settings tagged `npmShared = true` in the settings registry (`registry`, `proxy` / `https-proxy`, `engine-strict`, `ignore-scripts`, etc.) — so npm and yarn read the same value. Aube-only and pnpm-only settings, plus unknown keys, land in aube's own config (`~/.config/aube/config.toml` at user scope, `/.config/aube/config.toml` at project scope) where sibling tools don't see them. + +Dotted writes for aube map settings (`allowBuilds.`, `overrides.`, …) edit one entry at a time. At project scope (`--local`) they land in `pnpm-workspace.yaml#.` or `package.json#aube..` if no workspace yaml exists, the same place install reads from. User-scope dotted writes for these maps error: aube only reads them per project. +"""# arg { choices user project global } @@ -482,189 +969,361 @@ cmd config help="Read and write settings in `.npmrc`" { arg help="Setting key (canonical name or `.npmrc` alias)" arg help="Value to write. Stored verbatim after `key=`" } - cmd tui help="Browse known settings in an interactive terminal UI" + cmd tui help="Browse known settings in an interactive terminal UI" effect=write } cmd create help="Scaffold a project from a `create-*` starter kit (via dlx)" { flag --fetch-retries help="Number of retry attempts for failed registry fetches" { - long_help "Number of retry attempts for failed registry fetches.\n\nOverrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs." + long_help #""" +Number of retry attempts for failed registry fetches. + +Overrides `fetchRetries` / `fetch-retries` from `.npmrc` / `aube-workspace.yaml` when set. Pair with `--fetch-timeout` to fail fast in scripted test runs. +"""# arg } flag --fetch-retry-factor help="Exponential backoff factor between retry attempts" { - long_help "Exponential backoff factor between retry attempts.\n\nOverrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap." + long_help #""" +Exponential backoff factor between retry attempts. + +Overrides `fetchRetryFactor` / `fetch-retry-factor` from `.npmrc` / `aube-workspace.yaml` when set. Integer-only — the underlying `FetchPolicy.retry_factor` is `u32`. Fractional values like `1.5` are rejected by clap. +"""# arg } flag --fetch-retry-maxtimeout help="Upper bound (ms) on the computed retry backoff" { - long_help "Upper bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Upper bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMaxtimeout` / `fetch-retry-maxtimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-retry-mintimeout help="Lower bound (ms) on the computed retry backoff" { - long_help "Lower bound (ms) on the computed retry backoff.\n\nOverrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set." + long_help #""" +Lower bound (ms) on the computed retry backoff. + +Overrides `fetchRetryMintimeout` / `fetch-retry-mintimeout` from `.npmrc` / `aube-workspace.yaml` when set. +"""# arg } flag --fetch-timeout help="Per-request HTTP timeout in milliseconds" { - long_help "Per-request HTTP timeout in milliseconds.\n\nOverrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together." + long_help #""" +Per-request HTTP timeout in milliseconds. + +Overrides `fetchTimeout` / `fetch-timeout` from `.npmrc` / `aube-workspace.yaml` when set. Applied via `reqwest`'s `.timeout()` so it covers headers + body together. +"""# arg } flag --registry help="Override the default registry URL for this invocation" { - long_help "Override the default registry URL for this invocation.\n\nUse this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes." + long_help #""" +Override the default registry URL for this invocation. + +Use this npm registry URL for package metadata, tarballs, audit requests, dist-tags, and registry writes. +"""# arg } - arg "[PARAMS]…" help="Template package name followed by any args to pass through to the scaffold binary" help_long="Template package name followed by any args to pass through to the scaffold binary.\n\nThe first positional is the template; the rest are forwarded verbatim to `create-