From 93e7d519ce4e1e821ce8e6d1be384cc4c1061eaf Mon Sep 17 00:00:00 2001 From: zhanghanduo Date: Wed, 7 Oct 2026 19:33:58 +0800 Subject: [PATCH] chore: prepare AgentCore 0.16.0 release Co-Authored-By: Claude Opus 5.5 (1M context) --- CHANGELOG.md | 10 ++++++++++ changes/73.feature.md | 1 - pyproject.toml | 2 +- uv.lock | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) delete mode 100644 changes/73.feature.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2e34638..19bfd8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,16 @@ the GitHub Release body, so a release with no entry here fails. Versioning follows [docs/versioning.md](docs/versioning.md). +## [0.16.0] - 2026-10-07 + +### Changed + +- The opportunistic recovery for an invalid streamed tool call now retries with streaming instead of a non-streaming `chat` replay, so the retry's attempt events carry `recovery_action="retry_streaming"` instead of `replay_non_streaming`. Calls that match the previous empty-required-arguments condition keep the `stream_empty_tool_arguments` / `stream_empty_args_replay` reasons and the `stream_empty_args_*` response metadata; newly detected cases (invalid JSON or a non-object for tools without required fields) use `stream_invalid_tool_call`. When a native call is still invalid after the retry, the attempt finishes as `accepted_degraded` with reason `invalid_tool_call` and the call returns an error tool result (`error_kind="invalid_arguments"`) instead of running the tool. Consumers asserting the old replay transport, its event names, or `accepted` for such attempts should update those assertions; set `LoopConfig(tool_argument_validation="off")` to keep only the legacy retry condition. AgentCore now depends on `jsonschema>=4.20,<5`. + +### Added + +- Streaming can now be selected independently of token observers (`LoopConfig.stream_transport`, `call_llm(stream=...)`). Native tool calls are checked before execution according to the new `LoopConfig.tool_argument_validation` (`"structural"` by default, `"strict"` for full JSON Schema, `"off"`). Invalid streamed calls are retried once using streaming, and invalid native calls that remain return an explicit tool error instead of running. Blank arguments count as `{}`, text-mode calls and tool-side type coercion are unaffected, malformed tool schemas never fail a call, and native calls missing an id get a generated one instead of breaking history replay. + ## [0.15.0] - 2026-10-07 ### Changed diff --git a/changes/73.feature.md b/changes/73.feature.md deleted file mode 100644 index b0dbcc3..0000000 --- a/changes/73.feature.md +++ /dev/null @@ -1 +0,0 @@ -Streaming can now be selected independently of token observers (`LoopConfig.stream_transport`, `call_llm(stream=...)`). Native tool calls are checked before execution according to the new `LoopConfig.tool_argument_validation` (`"structural"` by default, `"strict"` for full JSON Schema, `"off"`). Invalid streamed calls are retried once using streaming, and invalid native calls that remain return an explicit tool error instead of running. Blank arguments count as `{}`, text-mode calls and tool-side type coercion are unaffected, malformed tool schemas never fail a call, and native calls missing an id get a generated one instead of breaking history replay. diff --git a/pyproject.toml b/pyproject.toml index f70ce54..553c452 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "apodex-agent-core" -version = "0.15.0" +version = "0.16.0" description = "Shared, product-neutral runtime primitives for Apodex agents" readme = "README.md" license = "Apache-2.0" diff --git a/uv.lock b/uv.lock index e16ee30..75a286a 100644 --- a/uv.lock +++ b/uv.lock @@ -50,7 +50,7 @@ wheels = [ [[package]] name = "apodex-agent-core" -version = "0.15.0" +version = "0.16.0" source = { editable = "." } dependencies = [ { name = "anthropic", extra = ["bedrock"] },