Release engineering and test hygiene. Both packages are now published by CI with npm provenance,
and the test suite no longer depends on which CLIs happen to be installed on the machine running it.
SCHEMA_VERSION stays at 6 — no wire or API change.
Added
- Automated release pipeline —
.github/workflows/release.yml. It gates (build · test · lint ·
lint:deps), packs both packages, asserts the real tarballs before anything is irreversible, then
publishes core → server, smoke-installs the published package as an outside consumer, and creates
the git tag last so a tagged version is always a fully published one. - npm provenance on both packages — every tarball now carries a signed statement binding it to
the commit and workflow that built it, via OIDC trusted publishing. Provenance cannot be produced
by a localnpm publish, so this is new information for anyone auditing the supply chain.
Fixed
- The test suite no longer depends on a globally installed
codexCLI.configure-provider
verifies a codex tier by really spawningcodex --version, so roughly 15 tests passed or failed
according to the developer'sPATHrather than the code — and failed confusingly, with the
response'sprobefield simply absent because an unverified request never reaches the probe.
Those four test files now pinMMA_CODEX_BINto the running Node binary. The pin is per-file
rather than a global hook on purpose: applied globally it also reaches tests that drive a real
CodexCliSession, whose stdin write then EPIPEs against a process that is not codex. The test
that deliberately covers the codex-absent path still overrides it, so that case stays covered. - Two journal contract tests no longer depend on the developer's own journal. The
"skips the reviewer when invariants pass" tests inroute-contractandjournal-engine-route
merged onto node0001inprocess.cwd(), so they silently required the maintainer's real
gitignored<repo>/.mma/journal/to contain that node — and wrote into it as a side effect.
They passed on that one machine, failed on any fresh checkout, and their result depended on
which test file ran first in the same worker. Both now seed node0001in a throwaway cwd.
Changed
- The journal-latency benchmark gate is now ≥2x, down from ≥3x. The ratio measures ~7.2x on a
developer machine but ~2.99x on a shared CI runner, so a 3x threshold sat exactly on the boundary
and failed about half of all runs for reasons unrelated to the engine. 2x runs everywhere with
real margin and still catches the regression that matters — if the engine loses its index
advantage and falls back to scanning, the ratio collapses toward 1x. /mma-flowreview gate is capped at 3 rounds, down from 5. The advance rule is now per-round:
round 1 must be clean of critical and high findings, round 2 tolerates high (routed to backlog),
and round 3 applies its fixes and then always advances. Round 4 never runs.
Packages
@zhixuan92/multi-model-agent@5.16.1— https://www.npmjs.com/package/@zhixuan92/multi-model-agent/v/5.16.1@zhixuan92/multi-model-agent-core@5.16.1— https://www.npmjs.com/package/@zhixuan92/multi-model-agent-core/v/5.16.1
npm i -g @zhixuan92/multi-model-agent
Requires Node >= 22. Both packages are published with npm provenance from this workflow.