v0.2.14
Agentao 0.2.14
Maintenance follow-up to 0.2.13 GA. The headline is a tool-call
resilience layer for local / open-source LLM backends whose
function-call output drifts from the OpenAI tool-call schema, so the
runtime can keep calling tools instead of crashing on minor
formatting violations. The same release also carries per-session
isolation polish, replay-schema drift gating in CI, the GitHub Actions
Node 24 prep, and disk-bounded log rotation.
No breaking changes. The full Added / Changed / Fixed / Packaging
breakdown is in the CHANGELOG.md [0.2.14] entry.
Highlights
-
Tool-call repair / outbound sanitize subsystem (
agentao/runtime/):
three cooperating modules sit between the LLM and the tool dispatcher
so models like GLM, DeepSeek, Kimi and local Ollama still land in a
runnable shape.arg_repair.py: conservative JSON repair for malformed function
arguments — double-encoded JSON, fenced JSON, lenient Python
literals, trailing commas, bracket imbalance. No punctuation
guessing.name_repair.py: fuzzy matching that maps near-miss tool names
(CamelCase / suffix variants) onto a registered tool when the score
is unambiguous.sanitize.py: outbound scrubbing — replaces lone UTF-16 surrogates
and re-emits canonical compact JSON for repaired arguments before
assistant / tool messages reach strict provider APIs.
Wired into
chat_loop,tool_planning, andtool_runner; repair is
invisible to the model itself (only logged), so prompt-cache
behaviour is preserved. Coverage:
tests/test_tool_argument_repair.py,tests/test_tool_name_repair.py,
tests/test_outbound_sanitize.py, helpertests/support/tool_calls.py.
Documented in developer-guide §5.1 ("Tool-call normalization"). -
Per-instance background-task store: the background-agent registry
is now per-Agentaoinstance rather than process-global, so
concurrent ACP sessions and multi-tenant embeddings no longer leak
handles across each other. Adds path-containment guards and prompt
diagnostics surfacing. -
Replay JSON Schema export + CI drift gate:
agentao/replay/
ships an exported JSON Schema (tests/test_replay_schema.py) and
fails fast in CI whenagentao/replay/events.pyevolves without the
schema being regenerated. -
ToolRunnerdecomposition: the monolithictool_runnerwas
split into focusedtool_planning,tool_runner(executor), and
tool_result_formattermodules underagentao/runtime/. Public
Agentao.chat()contract preserved. -
Bounded log rotation:
agentao.lognow uses
RotatingFileHandler(maxBytes=10_000_000, backupCount=5)instead of
a plainFileHandler, capping disk footprint at ~60 MB. The home-dir
fallback (~/.agentao/agentao.log) gets the same rotation. Long-
running sessions that previously grew the log into the hundreds of
megabytes now self-cap.
Packaging / CI
actions/upload-artifactv4 → v7,actions/download-artifactv4 →
v8,actions/setup-pythonv5 → v6 — clears the GitHub Node 24
default-runtime cutover (2026-06-02). (upload-artifacthas no v8
line yet; v7 is the current major.)setup-uvhad already moved
v6 → v7 in0.2.14.dev0.- Version pins refreshed from
0.2.13to0.2.14acrossdocs/ACP.md
and the developer-guide install / version-check examples.
Release Summary
- Version:
0.2.14 - Git tag:
v0.2.14 - 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.14. -
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.14
-
Create the GitHub release for
v0.2.14. -
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.14 entry.