v0.2.15
Agentao 0.2.15
Maintenance follow-up to 0.2.14. Headline: ACP control-plane
parity — the missing session/set_model, session/set_mode, and
session/list_models handlers land so Zed and other ACP clients can
drive model switching, permission-mode toggles, and capability
discovery without falling back to environment-restart workarounds.
The same release also carries three correctness fixes around the ACP
stdio channel and an LLM streaming gap that affected thinking-model
backends.
No breaking changes. The full Added / Fixed / Packaging breakdown is
in the CHANGELOG.md [0.2.15] entry.
Highlights
- Three new ACP session handlers (
agentao/acp/session_set_model.py,
session_set_mode.py,session_list_models.py):session/set_model— applymodel/contextLength/maxTokens
independently on a running session viaagent.set_model()and
agent.context_manager.max_tokens/agent.llm.max_tokens.
Each knob is optional; a request carrying onlymodeldoes not
reset the caller's existing context/cap. The handler holds the
session's idle turn lock so an in-flightsession/promptcannot
observe a model/window/cap change mid-stream. Conversation
history and tool state are preserved.session/set_mode— togglePermissionEnginepermission mode
(default/acceptEdits/bypassPermissions/plan) per
session, matching ACP's permission-mode contract.session/list_models— callagent.list_available_models()and
cache the result onAcpSessionState.last_known_models. On
provider lookup failure, returns the cached list with a
warningfield instead of a JSON-RPC error so a transient
outage doesn't blank the UI.- Shared session-validation helper in
agentao/acp/_handler_utils.py
(single point for "does thissession_idexist, is it ours,
did the client send a well-formed request").
- Preserve outsider log handlers across
LLMClientreconstruction
(agentao/llm/client.py): the package-root logger eviction now only
drops handlers tagged with_agentao_llm_file_handler=True. The ACP
stderr-guard handler installed byAcpServeris no longer collateral
damage whenset_modelor repeated test reconstructions trigger a
newLLMClient. - Capture
reasoning_contentin streaming mode (agentao/llm/client.py):
thinking-model output that arrives on the streamingdeltawas
silently dropped while non-streamingmessage.reasoning_content
worked. Streaming now mirrors the non-streaming path so reasoning
text reaches the transportTHINKINGevent without backend-shape
drift. - Detach subprocess stdin in the shell tool (
agentao/tools/shell.py):
subprocess.Popen(..., stdin=subprocess.DEVNULL)so any child
process that reads stdin (e.g. an interactive prompt slipped into a
shell call) cannot consume — and corrupt — the ACP JSON-RPC stdin
channel that the parent process owns.
Tests
tests/test_acp_session_set_model.py— 484 lines / 31 cases covering
set_model, set_mode, list_models, including permission-engine
interaction, session-id validation, and error paths.tests/test_chat_stream_reasoning.py— verifies the streaming
reasoning_content capture matches non-streaming behaviour.tests/test_llm_handler_marker.py— asserts handler tagging and
preservation across repeatedLLMClientreconstruction (the
scenarioset_modeltriggers).tests/test_shell_stdin_devnull.py— confirms subprocessstdinis
detached from the parent's stdin in the shell tool.
Packaging / CI
.gitignore: ignore rotated*.log.*files (avoid tracking the
bounded-rotation artifacts introduced in0.2.14)..github/workflows/ci.yml:actions/upload-artifactpinned at v7
(v8 does not exist; resolved on-branch in commite84fc0b).
Release Summary
- Version:
0.2.15 - Git tag:
v0.2.15 - GitHub release type: regular release, not pre-release
- Publish workflow:
.github/workflows/publish.yml
Install
pip install -U agentaoMaintainer Checklist
-
Ensure
agentao/__init__.pyreports0.2.15(drop the.dev0
suffix from0.2.15.dev0). -
Run the smoke path:
uv run python -m pytest tests/ && uv build && uv run twine check dist/*. -
Push the tag:
git push origin v0.2.15
-
Create the GitHub release for
v0.2.15. -
Leave Set as a pre-release unchecked so
.github/workflows/publish.ymlpublishes to PyPI (the workflow's
tag-vs-package version consistency check will validate alignment
before upload).
Full Changelog
See CHANGELOG.md for the 0.2.15 entry.