Skip to content

chore!: release 0.4.0 — host config layer, surface cleanup, conformance restored#33

Merged
manojp99 merged 8 commits into
mainfrom
chore/version-bump-0.4.0
Jun 3, 2026
Merged

chore!: release 0.4.0 — host config layer, surface cleanup, conformance restored#33
manojp99 merged 8 commits into
mainfrom
chore/version-bump-0.4.0

Conversation

@manojp99

@manojp99 manojp99 commented Jun 3, 2026

Copy link
Copy Markdown
Collaborator

Coordinated version bump for the host-config-layer release. Bundles five merged PRs (#27, #29, #30, #31, #32) into a single release tag with full CHANGELOG.

Versions

Component Before After
Wire protocol 0.2.0 0.3.0 (BREAKING)
Engine (amplifier-agent) 0.3.0 0.4.0 (BREAKING)
Python wrapper 0.3.0 0.4.0 (BREAKING)
TypeScript wrapper (amplifier-agent-ts) 0.4.0 (published to npm) 0.5.0 (BREAKING)

TS wrapper bump rationale: 0.4.0 is already published to npm (PR #17 release window). Since that publish, PRs #27, #29, #30, #31 have removed breaking surface from the TS wrapper API (SpawnAgentParams.host, HostCapabilities, mcpConfigPath, envAllowlist, envExtra, allowProtocolSkew). We can't republish 0.4.0 with different code, and the accumulated changes aren't a patch. Bumping to 0.5.0 puts the next npm release on a fresh, unpublished version. Override in a follow-up commit if there's a prior decision to keep TS major.minor tied to engine major.minor that I'm missing.

What's in the release

See CHANGELOG.md for the full entry. Highlights:

  • Host config layer (--config <path> / $AMPLIFIER_AGENT_CONFIG) with 5 pass-through blocks: mcp, approval, provider, allowProtocolSkew, skills
  • 5 argv flags + 2 env vars removed (subsumed by host config or env-var injection)
  • hostCapabilities surface fully removed (engine + wrappers + wire)
  • Conformance suite restored to green with new baseline + skew-override fixtures

Wire protocol skew is enforced

Old wrappers pinned to protocol "0.2.0" will hard-fail handshake against this engine with protocol_version_mismatch, exit 2. This is the intended behavior — old wrappers emit argv/wire shapes this engine doesn't accept.

Manually verified on this branch:

$ uv run amplifier-agent --version
amplifier-agent, version 0.4.0

$ uv run amplifier-agent run --protocol-version 0.2.0 --session-id sm "hi"; echo "EXIT=$?"
{... "code": "protocol_version_mismatch" ...}
EXIT=2

$ uv run amplifier-agent run --protocol-version 0.3.0 --session-id sm "hi"; echo "EXIT=$?"
{... "reply": "..." ...}
EXIT=0

Tests

All suites at baseline:

Suite Result
Engine (uv run pytest --ignore=wrappers) 519 passed, 3 failed (pre-existing baseline), 3 skipped
Python wrapper 54 passed
TypeScript wrapper 66 passed (12 files)
Conformance TS 7 passed
Conformance Py 7 passed

The 3 pre-existing engine failures are all in tests/cli/test_mode_a_v2_envelope.py and reference the --mcp-servers flag that was removed in PR #24 — residual cleanup tracked separately, not regressed by this PR.

Cross-repo migration

Three accumulated breaking changes that downstream consumers (notably amplifier-module-provider-nc) must catch up on — see CHANGELOG "Cross-repo follow-ups" section.

Manoj Prabhakar Paidiparthy added 5 commits June 3, 2026 13:19
Bump the wire protocol version to reflect accumulated backward-incompatible
changes shipped under the 0.4.0 release window:

  - metadata.hostCapabilities removed from response envelope (#27)
  - InitializeParams.host removed (#27)
  - InitializeParams.mcpServers renamed to mcpConfigPath (#24)
  - skills field added (host config skills: block, #30)

Old wrappers pinned to '0.2.0' should hard-fail handshake with a typed
protocol_version_mismatch error and exit 2 — verified manually:

    $ uv run amplifier-agent run --protocol-version 0.2.0 --session-id sm 'hi'
    {... "code": "protocol_version_mismatch" ...}
    EXIT=2

    $ uv run amplifier-agent run --protocol-version 0.3.0 --session-id sm 'hi'
    {... "reply": "..." ...}
    EXIT=0

Updated sites (audited via 'git grep "0.2.0" src/ tests/'):

  - src/amplifier_agent_lib/protocol/methods.py — PROTOCOL_VERSION constant
  - src/amplifier_agent_lib/protocol/spec.md — regenerated artifact
  - 9 conformance fixtures' protocolVersion: literals (setup + initialize params)
  - version_skew.yaml — serverVersion in expected error.data
  - 6 test files pinning protocolVersion in wrapper-side InitializeParams

Left as historical references (per release-issue guidance):

  - loader.py docstring example (illustrative fixture shape)
  - test_protocol_conformance_fixtures.py's self-contained _VALID_FIXTURE
    (loader smoke test, not engine-compat)
  - serverInfo.version: "0.2.0" in fixture script result blocks
    (not asserted by conformance harness — engine emits __version__ at
    runtime; fixture scripts are descriptive, only the explicit
    assertions: block is verified)

BREAKING CHANGE: Wire protocol 0.2.0 -> 0.3.0. Old wrappers pinned to 0.2.0
will hard-fail handshake with protocol_version_mismatch (exit 2). Reinstall
both engine and wrapper, or set allowProtocolSkew: true in host config.
Engine version bump for the host-config-layer release window. Pairs with
the wire PROTOCOL_VERSION bump (0.2.0 -> 0.3.0) and consolidates argv/wire
surface removals shipped in PRs #27, #29, #30, #31.

Verified:
  $ uv run amplifier-agent --version
  amplifier-agent, version 0.4.0

BREAKING CHANGE: Engine version 0.3.0 -> 0.4.0. Wire protocol 0.2.0 -> 0.3.0
shipped in the same release. Old wrappers fail handshake. See CHANGELOG.md
for the full argv/wire/API removal list.
Python wrapper version bump to pair with the engine 0.4.0 release.
Same major.minor as engine — the two move together.

The wrapper's compiled PROTOCOL_VERSION (sourced from amplifier_agent_lib)
follows the engine bump 0.2.0 -> 0.3.0 transitively.

BREAKING CHANGE: SpawnAgentParams API removed envAllowlist, envExtra,
allowProtocolSkew, host, and mcpConfigPath fields across PRs #27, #29, #31.
Callers must migrate to host_config (JSON file passed via --config or
$AMPLIFIER_AGENT_CONFIG) or env var injection (AMPLIFIER_MCP_CONFIG).
The TS wrapper jumps minor (0.4.0 -> 0.5.0) rather than tracking the
engine's major.minor (0.4.0) because of release-window history:

  - 0.4.0 was already published to npm (verified: 'npm view
    amplifier-agent-ts versions' lists 0.3.0, 0.3.1, 0.4.0)
  - 0.4.0 was published by PR #17 (path-based MCP config delivery,
    pre-#27/#29/#30/#31)
  - Since the 0.4.0 publish, PRs #27, #29, #30, #31 have all landed,
    removing breaking surface from the TS wrapper API:
      * SpawnAgentParams.host / HostCapabilities type (#27)
      * mcpConfigPath field + argv emission (#29)
      * envAllowlist / envExtra / allowProtocolSkew fields (#31)

We cannot republish 0.4.0 with different code, and the accumulated changes
are breaking (not a patch). Bumping to 0.5.0 puts the next npm release on
a fresh, unpublished version. If you have context I'm missing about a
prior decision to keep TS major.minor tied to engine major.minor, override
with a follow-up bump.

BREAKING CHANGE: TS wrapper API removed SpawnAgentParams.host,
HostCapabilities type, InitializeHostParams type (#27); mcpConfigPath field
+ argv emission (#29); envAllowlist, envExtra, allowProtocolSkew fields
(#31). Callers must migrate to AMPLIFIER_MCP_CONFIG env var and a
host_config JSON file passed via --config.
, #32)

Replace the [Unreleased] section with a full [0.4.0] - 2026-06-03 entry
that consolidates the host-config-layer release window:

  PR #27 - Host config layer + drop hostCapabilities surface
  PR #29 - Drop --mcp-config-path argv (subsumed by host config + env var)
  PR #30 - host-config skills: block + tool-skills bundle composition
  PR #31 - Drop env-allowlist, env-extra, allow-protocol-skew from wrappers
  PR #32 - Restore conformance suite

Highlights:
  - 4 argv flags + 1 env var removed (subsumed by host config layer)
  - hostCapabilities fully removed from envelope, initialize, and wrapper API
  - 5th host-config block 'skills:' (D11/D12/D13)
  - Wire protocol 0.2.0 -> 0.3.0 (BREAKING)
  - Engine 0.3.0 -> 0.4.0, Python wrapper 0.3.0 -> 0.4.0, TS wrapper 0.4.0 -> 0.5.0

Also documents the cross-repo follow-ups that downstream consumers
(notably amplifier-module-provider-nc) must catch up on but are NOT
part of this release.
@manojp99 manojp99 force-pushed the chore/version-bump-0.4.0 branch from 0e2d740 to eb6b592 Compare June 3, 2026 20:26
Manoj Prabhakar Paidiparthy added 3 commits June 3, 2026 13:30
The CI workflow uses astral-sh/setup-uv@v3 with enable-cache: true, which
defaults to globbing **/uv.lock to compute the cache key. With uv.lock
gitignored, every CI run failed at the install step with:

  No matches found for glob **/uv.lock

Committing uv.lock fixes CI and aligns with Astral's recommended practice
for reproducible builds. Catches reproducibility drift between contributors
and CI/DTU. The lock is ~150KB.

This was a pre-existing CI break on main (every recent CI run failing) that
this version-bump release is unblocking as part of release-readiness.
tests/test_conformance_parity.py::test_ts_and_py_runners_agree[*] shells
out to 'pnpm exec tsx runner_ts.ts' to cross-validate the TS runner against
the Python runner. The Python CI job had no Node.js or pnpm installed, so
all 10 parametrized cases failed with:

  FileNotFoundError: [Errno 2] No such file or directory: 'pnpm'

Adds setup-node@v4, pnpm/action-setup@v3, and a pnpm-install step in
wrappers/conformance/ before pytest runs. Pre-existing CI gap that this
release branch is closing as part of release-readiness.
Closes the last 4 Python CI failures on this release branch.

(1) tests/cli/test_config_show.py::test_config_show_reports_default_when_env_absent

Click's CliRunner.invoke(env=...) MERGES the env dict with os.environ instead
of replacing it. GitHub Actions runners set XDG_CONFIG_HOME by default, which
leaked into the test and made source='env:XDG_CONFIG_HOME' instead of the
'default' the test was asserting. Now uses monkeypatch.delenv() to explicitly
remove XDG_CONFIG_HOME / XDG_CACHE_HOME / XDG_STATE_HOME before invoking.

(2) tests/cli/test_mode_a_v2_envelope.py

The three test_mcp_servers_* tests (inline_json_parsed, at_path_form,
malformed_json_yields_argv_envelope) target the --mcp-servers argv flag.
That flag was renamed to --mcp-config-path by PR #24 and then fully removed
by PR #29. The tests have been failing as 'pre-existing baseline' through
PRs #27, #29, #31, #32, and #33's earlier baselines. They test removed
surface and should never have been kept.

Replaced with an inline comment naming the removal context and pointing at
the removal guardrail at tests/cli/test_drop_mcp_config_path_flag.py.

Local: 532 passed, 3 skipped, 0 failed (full pytest tests/).
@manojp99 manojp99 merged commit caa9d45 into main Jun 3, 2026
2 of 3 checks passed
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.

1 participant