diff --git a/CHANGELOG.md b/CHANGELOG.md index dc93738..0c1a25e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.17.0] — 2026-08-26 + ### Added - **Real per-turn token and cost usage, on the envelope and on both wrapper SDKs.** @@ -59,15 +61,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 engine on `0.4.0` fail the handshake loudly (`protocol_version_mismatch`) rather than silently misbehaving, so **upgrading the engine and both wrapper packages together is required.** -### Fixed - -- **The wrapper's `stderr_tail` cap now measures real UTF-8 bytes, not characters.** It previously - sliced a plain string, so on non-ASCII stderr the cap was wrong by roughly the size of the - encoding (a Japanese reply could overshoot a byte budget several times over). The cap is now - byte-accurate and never splits a codepoint, which means it may return a handful of bytes fewer - than the requested cap when trimming lands mid-character. The exported `STDERR_TAIL_BYTES` - constant keeps its name and its value (4096); it simply counts the right unit now. - - **`amplifier-agent run --prompt-file `,** a second transport for the prompt. The positional `PROMPT` argument remains valid and unchanged; the two are mutually exclusive. File contents are decoded as UTF-8 and delivered verbatim, with no stripping and no newline @@ -82,6 +75,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed +- **The wrapper's `stderr_tail` cap now measures real UTF-8 bytes, not characters.** It previously + sliced a plain string, so on non-ASCII stderr the cap was wrong by roughly the size of the + encoding (a Japanese reply could overshoot a byte budget several times over). The cap is now + byte-accurate and never splits a codepoint, which means it may return a handful of bytes fewer + than the requested cap when trimming lands mid-character. The exported `STDERR_TAIL_BYTES` + constant keeps its name and its value (4096); it simply counts the right unit now. + - **Wrappers now emit `--` before the positional prompt.** A prompt beginning with `-` was parsed as an option, so the turn died with exit 2 and `No such option` before the engine booted. The separator is emitted unconditionally rather than only for `-`-leading prompts. @@ -97,6 +97,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 fail to decode, and the reader turns a decode failure into a warning and reports no configured servers. The TypeScript wrapper was already correct. +### Notes + +- **This is a coordinated release. Upgrade the engine and the TypeScript SDK together.** + `amplifier-agent` moves to `0.17.0` and `amplifier-agent-ts` to `0.8.0`. Because + `PROTOCOL_VERSION` moved `0.3.0` -> `0.4.0`, an `amplifier-agent-ts` still on `0.7.1` will + refuse an engine on `0.17.0` with `protocol_version_mismatch`, and the reverse holds too. The + refusal is deliberate and loud; there is no silent-degradation path to fall back on. + +- **The Python SDK changes described above are on `main` but are not yet published.** + `amplifier-agent-py` has never had a release, so it is not part of this one. Its source already + carries the `0.4.0` protocol pin and the prompt-spill and MCP-encoding fixes; they reach + consumers with that package's first release. + ## [0.16.0] — 2026-08-25 ### Changed diff --git a/README.md b/README.md index e80f304..897d54e 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,7 @@ Host Application ← your code amplifier-agent CLI / HTTP face │ ← this repo (argv in, JSON envelope out) │ ↓ │ - ┌──────────────────────────────────────────┘ + ┌────────────────────────────────────────────┘ ↓ amplifier_agent_lib (the engine) ← this repo ``` diff --git a/pyproject.toml b/pyproject.toml index 5a385e4..f7cf372 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = 'amplifier-agent' -version = '0.16.0' +version = '0.17.0' requires-python = '>=3.12' license = 'MIT' dependencies = [ diff --git a/uv.lock b/uv.lock index 3edf683..d91b063 100644 --- a/uv.lock +++ b/uv.lock @@ -16,7 +16,7 @@ members = [ [[package]] name = "amplifier-agent" -version = "0.16.0" +version = "0.17.0" source = { editable = "." } dependencies = [ { name = "amplifier-foundation" }, diff --git a/wrappers/typescript/package.json b/wrappers/typescript/package.json index 40503e2..a0a341c 100644 --- a/wrappers/typescript/package.json +++ b/wrappers/typescript/package.json @@ -1,6 +1,6 @@ { "name": "amplifier-agent-ts", - "version": "0.7.1", + "version": "0.8.0", "description": "TypeScript SDK for the Amplifier agent. Spawns and drives the amplifier-agent Python CLI over a stdio protocol.", "type": "module", "exports": {