From 5cbf8407fc9d31a2a69fd7cd02b110936b196c67 Mon Sep 17 00:00:00 2001 From: DavidKoleczek <45405824+DavidKoleczek@users.noreply.github.com> Date: Tue, 18 Aug 2026 16:05:04 -0400 Subject: [PATCH] chore(release): cut amplifier-agent 0.13.0 and amplifier-agent-ts 0.7.1 A coordinated release of two independently-versioned artifacts. The wire protocol is unchanged at 0.3.0, so the two are versioned on their own merits rather than in lockstep. amplifier-agent 0.12.0 -> 0.13.0 (minor: new capability) Two providers are pre-wired in bundle.md and accepted as host-config provider.module values: openai-chatgpt, which uses a ChatGPT subscription via OAuth device-code instead of an API key, and chat-completions, which reaches any server speaking the OpenAI Chat Completions wire format. Both are additive. Native Windows was unusable and is now fixed on three counts: an unconditional fcntl import took down every CLI command including --version, an unguarded os.setsid killed every run before it reached engine code, and stdio defaulting to the console code page crashed the final write of a reply that had already been generated and billed. amplifier-agent-ts 0.7.0 -> 0.7.1 (patch: fix only) Transport.terminate() waited on the child's 'close' event, whose precondition is EOF on stdout and stderr. Those pipe write-ends are inherited by every grandchild, so one subprocess outliving the engine held them open and terminate() hung for the lifetime of the orphan. 'exit' now also settles, after a 250ms drain window that preserves frame-delivery ordering for well-behaved children. Editing bundle.md changes its hash, which is part of the prepared-bundle cache key, so existing installs re-prepare on their next turn. Co-Authored-By: Amplifier --- CHANGELOG.md | 45 ++++++++++++++++++++++++++++++++ pyproject.toml | 2 +- uv.lock | 2 +- wrappers/typescript/package.json | 2 +- 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93c7b74b..5020fc41 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.13.0] — 2026-08-18 + ### Added - **ChatGPT provider.** `provider.module: "openai-chatgpt"` is now a valid host-config value, @@ -27,6 +29,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 selects the server, and `CHAT_COMPLETIONS_API_KEY` (optional) is sent only when set, since local servers commonly need none. Both are environment-only; the persisted credentials file is not consulted for this provider. Default model is `default`. +- **An installable agent skill for integrating the engine.** `npx skills add + microsoft/amplifier-agent` drops `skills/amplifier-agent/SKILL.md` into a + coding agent's skills directory, so the agent doing the integration knows how + to install the engine, choose among the five host surfaces (TypeScript SDK, + Python SDK, in-process library, HTTP face, raw CLI), and recognize the + failures a host hits first: `approval_unconfigured`, + `protocol_version_mismatch`, `binary_not_found`, lost session continuity, and + stdout/stderr parsing mistakes. Copying the file by hand works equally well. +- **Documentation restructured around a guides layer.** The README was a single + long page that mixed installing, integrating, and configuring; it is now an + overview that routes to task-scoped guides: `docs/INSTALL.md`, + `docs/INTEGRATION.md`, `docs/CONFIGURATION.md`, `docs/CLI.md`, + `docs/ARCHITECTURE.md`, and `docs/ECOSYSTEM.md`. Underneath them, + `docs/spec/` is new and is the normative contract: wire protocol, envelope + and errors, host config, CLI, HTTP face, wrapper contract, providers and + models, skills and modes, storage and workspace, bundle and cache, install + and distribution. Consult `docs/spec/` when you need to know what the engine + guarantees; the guides tell you how to use it. ### Fixed @@ -105,6 +125,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 unlocked would trade a documented platform limitation for a data-loss race. No behavior change on Linux or macOS. +## [ts-wrapper 0.7.1] — 2026-08-18 + +### Fixed + +- **`terminate()` could hang for as long as an orphaned grandchild lived, + rather than as long as the engine lived.** `Transport` resolved its exit + promise on the child's `'close'` event, which is correct in the normal case: + `'close'` fires only after stdout and stderr have reached EOF, which + guarantees every NDJSON frame has been delivered before the caller is told + the turn is over. But those pipe write-ends are inherited by every grandchild + the engine spawns, so a single subprocess that outlives its parent holds them + open, EOF never arrives, and `'close'` never fires. Any engine tool + subprocess that survives the engine reproduces this, as does a POSIX shell + that forks rather than execs. + + `'exit'` now also settles the promise, after a 250ms grace window that lets + the reader drain whatever the child already wrote, and then destroys the + stdio handles so they are released. `'close'` still wins the race for every + well-behaved child, so frame-delivery ordering is unchanged; the window only + bounds the pathological case. The grace timer is `unref`'d and cannot itself + hold the event loop open. + + Consumers that call `terminate()` (or rely on it during shutdown) no longer + need a timeout of their own to guard against this. + ## [0.12.0] — 2026-07-29 ### Added diff --git a/pyproject.toml b/pyproject.toml index 35ec4860..b72e9f1b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = 'amplifier-agent' -version = '0.12.0' +version = '0.13.0' requires-python = '>=3.12' license = 'MIT' dependencies = [ diff --git a/uv.lock b/uv.lock index b12d6356..66145a54 100644 --- a/uv.lock +++ b/uv.lock @@ -16,7 +16,7 @@ members = [ [[package]] name = "amplifier-agent" -version = "0.12.0" +version = "0.13.0" source = { editable = "." } dependencies = [ { name = "amplifier-foundation" }, diff --git a/wrappers/typescript/package.json b/wrappers/typescript/package.json index 685342e1..40503e28 100644 --- a/wrappers/typescript/package.json +++ b/wrappers/typescript/package.json @@ -1,6 +1,6 @@ { "name": "amplifier-agent-ts", - "version": "0.7.0", + "version": "0.7.1", "description": "TypeScript SDK for the Amplifier agent. Spawns and drives the amplifier-agent Python CLI over a stdio protocol.", "type": "module", "exports": {