chore(release): cut amplifier-agent 0.13.0 and amplifier-agent-ts 0.7.1 - #131
Merged
Merged
Conversation
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 <amplifier@microsoft.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Coordinated release of two independently-versioned artifacts from this repo.
amplifier-agent(engine + CLI)v0.13.0amplifier-agent-ts(TS SDK)wrapper-v0.7.1amplifier-agent-pyis not released here. Its only diff sincev0.12.0is deleted tests; the source has not moved, and PyPI trusted-publisher setup for that package is not in place yet. It stays at 0.3.0 with zeropy-v*tags.What changes for users
Engine 0.13.0 (minor: new capability)
Two providers are now pre-wired in
bundle.mdand accepted asprovider.modulevalues in host config:openai-chatgptbacks onto a ChatGPT Plus/Pro/Team subscription rather than a per-token API key, talking to the ChatGPT backend (Codex API). Auth is OAuth device-code, driven by the provider module at mount time and cached to~/.amplifier/openai-chatgpt-oauth.json.auth set openai-chatgptis refused, as withgithub-copilot, because there is no static key to store.chat-completionsintegrates any server speaking the OpenAI Chat Completions wire format (llama.cpp, vLLM, LM Studio, LocalAI, SGLang, TGI), distinct fromopenai, which uses the Responses API. Its credential is an endpoint, not a key:CHAT_COMPLETIONS_BASE_URLis required andCHAT_COMPLETIONS_API_KEYis sent only when set, since local servers commonly need none.Native Windows was unusable and is fixed on three counts, each of which independently killed the CLI:
fcntlimport inmigration.pysat on the eager import path, so every command failed withModuleNotFoundError,--versionincluded. It is now imported optionally, andamplifier-agent migrateexits 1 with amigration-unsupportederror rather than locking as a no-op, because the migrations move user data and re-check preconditions under the lock.os.setsid/os.getsidin theruncallback raisedAttributeErrorbefore any engine code ran. Now gated onhasattr. This does not give Windows an equivalent containment guarantee, and the limitation is recorded indocs/spec/wrapper-contract.mdrather than papered over.main()now reconfigures stdout/stderr to UTF-8. Not gated on platform: POSIX underLC_ALL=C PYTHONUTF8=0fails identically.Also user-visible: an installable agent skill (
npx skills add microsoft/amplifier-agent) so a coding agent knows how to integrate the engine, and a documentation restructure into task-scoped guides over a new normativedocs/spec/layer.TS SDK 0.7.1 (patch: fix only)
Transport.terminate()resolved on the child's'close'event, whose precondition is EOF on stdout and stderr. Those pipe write-ends are inherited by every grandchild the engine spawns, so a single subprocess outliving its parent held them open, EOF never arrived, andterminate()hung for the lifetime of the orphan rather than the lifetime of the engine.'exit'now also settles the promise, after a 250ms drain window that lets the reader finish the buffer before the stdio handles are destroyed.'close'still wins the race for every well-behaved child, so frame-delivery ordering is unchanged; the window only bounds the pathological case.Scope of impact
Coordinated across two components, but not a wire change.
PROTOCOL_VERSIONis unchanged at0.3.0, so no wrapper/engine coordination is required and neither SDK will refuse the other's engine. The engine and TS SDK are versioned on their own merits here rather than in lockstep.Editing
bundle.mdchanges its hash, and that hash is part of the prepared-bundle cache key, so existing installs re-prepare on their next turn.The
amplifier-foundationgit pin is unchanged; this is not a pin-consumption release.Downstream:
amplifier-app-opencodedoes not need a floor bumpMIN_AGENT_VERSIONstays at0.12.0. The floor is a requirement statement, not a mirror of the latest release, and nothing opencode depends on changed:src/amplifier_agent_http/has zero changes in this range.GET /v1/models,/v1/skills,/v1/modesare unchanged. Theresources.pydiff is pyright suppression comments only.provider_sources.pyandconfig/loader.pychanges are purely additive: two catalog entries, two credential-resolution branches, two accepted module names.runstdout envelope, theserveendpoint contract, and--host-confighandling are unchanged.A floor bump forces every opencode user through a reinstall, so raising it for an engine change opencode cannot observe has a real cost and no benefit. The new providers are available to opencode users who configure them without the floor moving.
amplifier-app-paperclipandamplifier-app-nanoclawcaret-pinamplifier-agent-ts, and 0.7.1 is a patch, so it propagates without action from either.Verification
make verifypasses clean:tests/e2e/is not covered by this run or by CI, since it requires a DTU.Merging this publishes nothing
Publication is triggered by tag push, not by merge. After this merges,
v0.13.0andwrapper-v0.7.1are pushed from the tip ofmain, and those tags are what triggerpublish-python.yml,publish-wrapper.yml, andrelease-notes.yml. Git is the supported install channel for the engine, so the GitHub Release created by the tag is what users actually receive.