Skip to content

fix(deps): update dependency clibuilder to v10 - #32

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/clibuilder-10.x
Open

fix(deps): update dependency clibuilder to v10#32
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/clibuilder-10.x

Conversation

@renovate

@renovate renovate Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
clibuilder ^9.1.0^10.0.0 age confidence

Release Notes

clibuilder/clibuilder (clibuilder)

v10.1.0

Compare Source

Minor Changes
  • c71f536: Report usage errors and exit non-zero.

    A clibuilder cli could not fail. lookupCommand already built a typed list of everything wrong with
    an invocation — unknown option, missing argument, extra arguments, a value of the wrong type — and
    builder threw it away and printed the help message with an exit code of 0. A command that knew
    it had failed had no way to say so either.

    • Usage errors are now reported by name (unknown option --bogus, missing required argument <target>) ahead of the help message, and the cli exits 2.
    • A config that fails its schema exits 1.
    • A command fails by throwing the new CliError, which carries an exitCode and optional help
      lines. parse() still resolves rather than rejecting, so the failure is reported instead of
      surfacing as an unhandled rejection.
    • New exports: CliError, exitCodes (success/error/usage — 0/1/2), and isCliError().
    • testCommand() returns the exitCode alongside result and messages, so a test can assert a
      failure without ending the test run.
    • --help and --version are accepted by every command, including sub-commands that declare no
      options of their own, and both still exit 0.

    The exit code is recorded on process.exitCode rather than applied with process.exit(), so
    pending stdout writes are not truncated.

    This changes the behavior of every cli built with clibuilder: an invocation with a typo used to
    exit 0 and now exits 2. The TypeScript surface is additive, which is why this is a minor rather
    than a major, but a caller downstream of your cli that ignored the exit code will now see it fail.

  • 2f4afde: Add --format to plugins list.

    plugins list --format <toon|text|json> picks how the installed plugins are rendered,
    matching plugins search. The default is toon, following the Agent eXperience
    Interface — a cli's plugin list is read by an agent far more often than by a person:

    plugins[2]: my-cli-plugin,@acme/my-cli-plugin-deploy
    help[1]: Run `plugins search` to find more plugins on npm
    

    Nothing installed is stated as the answer rather than left as silence, and it says
    installed because that is the whole difference from what search reports — nothing
    installed here says nothing about what exists on npm:

    plugins: 0 installed plugins found with keywords: my-cli-plugin
    help[1]: Run `plugins search` to find plugins to install
    

    --format text is the previous human-readable prose, unchanged, including its separate
    wording for none, one, and several. toon and json report one shape whatever the
    count. --format json emits { "plugins": [...] } alone, with no help line, so it
    survives a pipe into jq. The command still returns the plugin names to its caller.

  • 4925f20: Match plugins search keywords disjunctively, and add --format to its output.

    A cli declaring several keywords used to find only packages carrying all of them, so
    a plugin tagged with one of the cli's keywords was never listed. Each keyword is now
    searched on its own and the results are unioned, deduped, in keyword order.

    plugins search --format <toon|text|json> picks how that result is rendered. The default
    is toon, following the Agent eXperience Interface — a cli's plugin search is read by an
    agent far more often than by a person, and toon is the cheaper read for one:

    packages[2]: pkg-x,pkg-y
    help[1]: Run `plugins list` to see which of them are installed
    

    --format text is the previous human-readable prose, unchanged. --format json emits
    { "packages": [...] } alone, with no help line, so it survives a pipe into jq.

    --fields keywords adds which of the cli's keywords found each package — the question
    disjunctive matching makes worth asking, since one over-broad keyword can now pull in a
    package that is not a plugin at all. It is off by default: a cli with a single keyword
    would spend the column on a value every row repeats.

    packages[3]{name,keywords}:
      my-cli-plugin-alpha,my-cli-plugin
      shared-plugin,my-cli-plugin unional
      unional-tool,unional
    
Patch Changes
  • 033a38a: Reject an option value the option's type does not accept.

    A value that failed the option's schema used to be dropped and replaced by the option's
    default, so --format yaml quietly rendered toon and the caller had no way to tell.
    It is now reported as a usage error and the cli exits with 2, the same as an unknown
    option. An enum lists what it would have accepted, so the invocation can be fixed in one
    step:

    error: invalid value for option --format: expected one of: toon, text, json, received "yaml"
    

    This applies to every option whose type clibuilder does not convert itself — z.enum
    above all. Booleans and numbers already reported their own conversion errors and are
    unchanged.

v10.0.0

Compare Source

Major Changes
  • 7b17641: Require Node.js >= 20.19 and update find-installed-packages to ^4.0.0.

    engines.node moves from >= 18 to >= 20.19, matching what
    find-installed-packages@4 supports. Node 18 and 19 reached end of life, so
    there is no supported runtime left below that floor.

    v4 also changes how plugins are discovered. It walks the declared dependency
    graph and asks the runtime's module resolver where each package lives, instead
    of scanning node_modules. That fixes discovery under pnpm, Yarn Plug'n'Play,
    and workspaces where the tree is hoisted to the repo root. The trade-off: only
    declared dependencies are reported, so a plugin sitting in node_modules that
    nothing depends on is no longer found — add it to your package.json
    dependencies if you were relying on that.

v9.2.0

Compare Source

Minor Changes
  • 8703dcc: Add a typed plugin registry for content contributions and cross-plugin capabilities.

  • d709f62: Coerce argument and untyped-option values to match their declared types.

    Both fixes close a gap where the type system and the runtime disagreed about what run(args)
    receives.

    • Positional arguments are now coerced through the same conversion path options already use.
      type: z.number() yields a number, type: z.array(z.number()) yields number[], and a value
      that fails its schema is a usage error instead of being silently dropped. An array argument is
      variadic: it consumes the remaining positionals. Previously every argument arrived as a raw string,
      and z.array(z.number()) ended up undefined.
    • An option declared without a type now defaults to z.optional(z.boolean()) instead of
      z.optional(z.string()), so a flag yields a real true rather than the string 'true'.
      RunArgs has always inferred this case as boolean | undefined.

    Note two behavior changes for code that relied on the old runtime values:

    • --flag=somevalue on an option with no declared type is now a usage error. Declare
      type: z.string() to keep accepting a string value.
    • An argument declared with a type that has no string conversion (z.enum, z.literal) now has the
      raw argv string handed to its schema, which accepts or rejects it. It is no longer passed through
      unvalidated.
  • 9b629d0: Config subsystem: jsonc support, a public lookup/load API, and --show-config.

    JSONC config (#​341)

    .jsonc and .jsonc-suffixed rc files are now searched for, and .json files may contain comments
    and trailing commas. Parsing goes through jsonc-parser, so comment-like sequences inside strings
    are left alone — "http://example.com" is no longer at risk of being truncated at the //.

    The format is now chosen by extension rather than by trying every parser in turn. Extension-less
    candidates such as .apprc still infer their format from content (JSONC, then YAML, then module).
    One consequence: a .json file that is not valid JSON now reports a parse error naming the file,
    where before it was silently retried as YAML and could load as something unintended.

    Config lookup/load API (#​488)

    clibuilder now exports its config resolution, so plugins and tools can ask where a config came
    from, not just what it holds:

    • lookupConfig({ cwd }, name) — resolve the origin without reading the file
    • resolveConfig({ cwd, ui }, name) — the config plus its provenance
    • loadConfig, readConfigFile, getConfigFilenames, getConfigFormat, describeConfigSource

    A resolved source is { type: 'file', path, format }, { type: 'package.json', path, property },
    or { type: 'none' }. These are read-only; writing config back to disk is not supported yet.

    --show-config (#​317)

    A cli declaring config now accepts --show-config, which prints the resolved config and where it
    was loaded from — the matching file path, the package.json property, or that nothing was found.
    Clis without config do not advertise the option.

Patch Changes
  • 2efd5dc: Fix optional and variadic arguments in the help output.

    The Arguments: section tested the isOptional method instead of calling it, so a typed required
    argument rendered as [name] and an optional one as <name>, exactly backwards. Arguments now use
    the same notation as options: <name> when required, [name] when optional, with the declared type
    (=string, =number, =boolean) and a ... variadic marker.

    Arguments:
      <src=string>           the source
      [host=string]          the host
      <files=string...>      the files
    
  • 3fda89f: Resolve command aliases such as plugins ls when parsing CLI input.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@changeset-bot

changeset-bot Bot commented Aug 12, 2026

Copy link
Copy Markdown

⚠️ No Changeset found

Latest commit: f34f940

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@renovate
renovate Bot force-pushed the renovate/clibuilder-10.x branch from 29749a7 to aab568e Compare August 14, 2026 19:30
@codecov

codecov Bot commented Aug 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 100.00%. Comparing base (397fab7) to head (f34f940).

Additional details and impacted files
@@            Coverage Diff            @@
##              main       #32   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files            3         3           
  Lines           75        75           
  Branches        25        25           
=========================================
  Hits            75        75           
Flag Coverage Δ
unit 100.00% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@renovate
renovate Bot force-pushed the renovate/clibuilder-10.x branch from aab568e to a4d128c Compare August 15, 2026 18:11
@renovate
renovate Bot force-pushed the renovate/clibuilder-10.x branch from a4d128c to f34f940 Compare August 23, 2026 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants