Note
7.3.0 is available on π PyPI and π GitHub.
- Breaking: [mpm] Move the declarative-manager schema, validation and class factory into the new
meta_package_manager.definitionsmodule, out ofmeta_package_manager.config(which keeps the loading policy: trust gate, override application, registration passes) andmeta_package_manager.manager(which keeps the base class only). - Breaking: [mpm] Move the cross-manager fan-out machinery (
collect_from_managers,collect_per_package,OperationTrail, the shared-lock families and the jobs policy) into the newmeta_package_manager.dispatchmodule, out ofmeta_package_manager.execution(which keeps the single-subprocess engine). - Breaking: [mpm] Move the per-command column registries and the table-projection and serialization helpers into the new
meta_package_manager.tablesmodule, which also absorbs themeta_package_manager.sortingmodule and itsSortableFieldvocabulary. - Breaking: [mpm]
meta_package_manager.sbomno longer re-exports the SBOM writers: import them frommeta_package_manager.sbom.base,meta_package_manager.sbom.spdxandmeta_package_manager.sbom.cyclonedx. - [mpm] Manager definitions gain three schema features: per-refinement
searchargument templates (exact_args,extended_argsandid_name_only_args, spliced at their{marker}position when the matchingmpm searchflag is active, and advertising native support), a[N]list-index suffix on JSON field selectors, andsudo = trueon query operations for tools that gate even their read-only listings behind root. - [mpm] Malformed JSON output from a manager's query now logs a warning tagged with the manager ID and yields no packages, instead of crashing the command; built-in managers and config-defined operations share the same
parse_jsonimplementation. - [choco] Convert from a Python class to a bundled configuration definition, the native exact and ID-restricted search switches declared through the new refinement templates.
- [macports] Convert from a Python class to a bundled configuration definition, the native exact/extended search switches declared through the new refinement templates. The optional description column of its search results is no longer populated.
- [stew] Convert from a Python class to a bundled configuration definition, its two installed-listing regexes merged into one alternation, with no functional change.
- [zerobrew] Convert from a Python class to a bundled configuration definition, its installed-versions array read through the new
[N]field selector, with no functional change. - [mpm] The
--query,--exactand--overwriteoptions ofdumpandsbomnow share a single definition and help text. - [mpm] Fix the bar-plugin labeller file rule, whose glob targeted a directory and could never match the plugin's module files.
- [bar-plugin] The
<xbar.version>header tracks the package version again: it fell out of the version-bump configuration during thebump-my-versionmigration and was stuck at7.0.0.dev0. - [mpm] Sudo priming now probes the credential cache before any prompt: found warm (a prior
sudo --validate, aNOPASSWDrule), it is silently kept alive for the whole run. The password notice names the escalating managers and the subcommand (apt needs administrator rights to upgrade: enter your password.), thesudoprompt is branded ([mpm] password for apt:), and the no-terminal warning names the managers left to fail fast. A host whosesudois missing or cannot be run logs a warning instead of crashing. - [mpm] Add an
internal_sudomarker for managers whose CLI runssudoitself mid-run and is never wrapped bympm:caskandfinkadopt it, and manager definitions may set it as a config field. A warm credential cache found at priming time is now kept alive for internal escalators too. - [mpm] A mutating call of an internal escalator that goes silent for 30 seconds on a terminal, with no warm credential cache, now logs a warning that it may be waiting on a hidden password prompt, quoting its last output line. Addresses #1938.
- [mpm]
--verbosity INFOnow discloses every package manager CLI invocation as a reproducible$-prompt line, forced environment variables included. Version-detection probes stay atDEBUG. - [mpm] The output of package manager CLIs now streams to
DEBUGlogs live, line by line and tagged with the manager ID, instead of being dumped once the call completes. Closes #528. - [mpm] Streamed CLI output and manager-scoped log lines glue the manager ID into their level prefix (
debug:mas: ...,warning:gem: Could not list installed packages.), making logs grep-able by manager. Closes #530. - [mpm] Disclosed CLI invocations are themed by token family: dim prompt sigil, environment name/value assignment pairs, highlighted binary name (directory plain, in the
$-prompt and spawn-trace lines), option-styled flags. - [mpm]
--no-colornow also strips the color of log lines emitted from background threads (streamed subprocess output, concurrent fan-outs). - [mpm] The capability probe logs one answered
DEBUGline per manager (brew implements installed.) instead of an unanswered question exposing the raw class repr. - [mpm] Add
-0/--zero-exit: action commands then report per-package failures without gating automation on a non-zero exit code. Usage and configuration errors keep exiting2. - [mpm] Add a
--columnsoption to the table-rendering subcommands (managers,installed,outdated,search,which): a comma-separated list of column IDs restricts and reorders the table, SQL-SELECT-style, validated against each command's column registry.mpm search's description column joins the registry:--descriptionis now a shorthand for selecting it, and an explicit--columnsselection wins. Serialized formats keep the full structured payload. - [mpm] The
mpm managerstable's binary-path highlighting is delegated to click-extra'shighlight_bin_name, the same renderer as the$-prompt and spawn-trace log lines. - [mpm] Log lines emitted while a progress spinner animates now print on their own line above it, instead of garbling the in-progress frame.
- [mpm] Delegate subprocess spawning, output streaming, timeout enforcement and Ctrl+C child termination to
click-extra, raising its floor from8.3.0to8.4.0. - [mpm] Authenticate the GitHub API release lookups in the Guix, Nix and yay cooldown workflow jobs, which flaked on the anonymous rate limit.
- [mpm] The per-manager table of the augmentations page now renders live at Sphinx build time, derived from the capability declarations in the manager implementations. Drops
steamcmd's stale full-upgrade --allrow. - [mpm] The PyPI keywords and the labeller file/content rules in
pyproject.tomlare now generated from the manager pool bydocs/docs_update.py. Every bundled manager gains labeller coverage, definition-file globs are anchored on their full stem, and thechocotaleykeyword typo is fixed. - [mpm] Bundled manager definitions now embed their version-probe and parser output samples in a
[samples]table of their own TOML file; the test suite derives its checks from the shipped files instead of hardcoded per-manager fixtures. - [bar-plugin] Version differences are now highlighted in the outdated-package menu lines, with the same coloring as
mpm outdated: common prefix gray, installed suffix red, latest suffix green. Package lines carryansi=trueso both SwiftBar and Xbar render the colors. - [mpm] Delegate
--cooldownduration parsing and the cross-command--sort-bymachinery to click-extra, keeping the same per-table sorting semantics.-s/--sort-bynow renders at the end of its option group in help screens. - [mpm]
mpm whichjoins the sortable-table commands instead of ignoring--sort-by, its manager column leading the default sort. - [mpm]
docs/docs_update.pynow renders thepyproject.tomllabel arrays inpyproject-fmt's canonical style, ending the pull-request ping-pong between theupdate-docsandformat-pyprojectautofix jobs. A new test asserts the rewritten sections stay apyproject-fmtfixpoint. - [mpm] The
dumpand Brewfile provenance headers and the bar-plugin upgrade notice now write the bare package version, dropping theirvprefix. - [cask]
upgrade --allnow passes--greedytobrew upgradewhen auto-updating packages are included, matching theoutdatedbehavior. Auto-updating casks reported as outdated were never upgraded. Closes #1940. - [pipx]
outdatednow relies on pipx's nativepipx list --outdatedquery on pipx1.16.0and newer: all venvs are checked in a single call, each by its own backend (pip or uv). Older pipx keeps the previous per-venv pip probes.
Full changelog: v7.2.0...v7.3.0