|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project are documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), |
| 6 | +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 7 | + |
| 8 | +## 0.1.1 - 2026-06-11 |
| 9 | + |
| 10 | +### Fixed |
| 11 | + |
| 12 | +- **Codex approval-mode mapping was inverted** and is now corrected. `STRICT` and |
| 13 | + `CAUTIOUS` map to `deny_all` (never escalate beyond the sandbox); `DEFAULT` and |
| 14 | + `PERMISSIVE` map to `auto_review` (escalations are auto-adjudicated). Previously a |
| 15 | + `STRICT` caller could have escalations auto-approved and a `PERMISSIVE` caller had |
| 16 | + them hard-denied — exactly backwards. |
| 17 | +- Antigravity MCP stdio server configuration no longer crashes: the required `name` |
| 18 | + field is now passed to the SDK model. |
| 19 | +- The `mypy` strict gate now passes identically in core-only and all-extras |
| 20 | + environments (per-module import overrides replace inline ignores). |
| 21 | +- Claude reports `finish_reason="max_turns"` when a turn is truncated by the |
| 22 | + max-turns limit instead of a generic failure. |
| 23 | +- Codex honors `TurnResult.status`: a `failed` or `interrupted` turn maps to the |
| 24 | + matching `finish_reason` and surfaces the structured error message instead of being |
| 25 | + reported as success. |
| 26 | + |
| 27 | +### Changed |
| 28 | + |
| 29 | +- **Antigravity DEFAULT permission posture is now safer.** With no `allowed_tools`, |
| 30 | + `DEFAULT` (and `CAUTIOUS`) now use the nondestructive toolset (no `run_command`) |
| 31 | + instead of granting all tools plus an allow-all policy. `STRICT` (or any read-only |
| 32 | + filesystem) uses the read-only toolset with no `allow_all` policy; `PERMISSIVE` |
| 33 | + keeps all tools. |
| 34 | +- **Unsupported task fields now raise `UnsupportedTaskInputError` instead of being |
| 35 | + silently ignored.** Codex rejects `allowed_tools`, `disallowed_tools`, `budget_usd`, |
| 36 | + and `permissions.network` (MCP was already rejected); Antigravity rejects |
| 37 | + `budget_usd` and `permissions.network`, and rejects combining an allow-list with a |
| 38 | + deny-list (the SDK requires them to be mutually exclusive); Claude rejects |
| 39 | + `permissions.network`. Only Claude maps `budget_usd`. |
| 40 | +- Missing-SDK and missing-credential paths now raise the typed |
| 41 | + `AgentRuntimeUnavailableError` instead of a bare `RuntimeError`. |
| 42 | +- Antigravity session and app-data storage moved from a world-shared |
| 43 | + `/tmp/agent-runtime-kit` path to `$XDG_CACHE_HOME/agent-runtime-kit` (default |
| 44 | + `~/.cache/agent-runtime-kit`, created `0o700`), overridable via |
| 45 | + `AntigravityAgentRuntime(data_dir=...)`. Sessions now survive reboots and are not |
| 46 | + exposed to other users on multi-user machines. |
| 47 | +- Antigravity maps `disallowed_tools` to `CapabilitiesConfig.disabled_tools` and |
| 48 | + validates tool names against the `BuiltinTools` enum, raising a typed error for an |
| 49 | + unknown name instead of leaking a raw validation error. |
| 50 | +- Build now requires `hatchling>=1.26` (for the PEP 639 `license = "MIT"` string), |
| 51 | + and the deprecated `License :: OSI Approved :: MIT License` classifier was removed. |
| 52 | + |
| 53 | +### Added |
| 54 | + |
| 55 | +- Claude streaming is now real: incremental output deltas and |
| 56 | + `tool_requested`/`tool_completed` events are emitted while the SDK runs. |
| 57 | +- Codex tool audits are now produced, parsed from `TurnResult.items` (command |
| 58 | + executions, MCP tool calls, dynamic tool calls, and web searches). |
| 59 | +- Claude records vendor-option kwargs it had to drop due to SDK drift in |
| 60 | + `AgentResult.metadata["dropped_options"]`, keeping silent omissions observable. |
| 61 | +- A continuous-integration workflow runs `ruff`, `mypy`, and `pytest` across |
| 62 | + Python 3.10–3.13 in both the core-only and all-extras dependency lanes, and the |
| 63 | + PyPI publish workflow now gates on a test job before building. |
| 64 | +- `tests/test_sdk_contract.py` introspects the real vendor SDK surfaces and |
| 65 | + auto-skips when the SDKs are not installed. |
| 66 | +- An sdist allowlist ensures only `src`, `tests`, `docs`, `examples`, `README.md`, |
| 67 | + `LICENSE`, and `pyproject.toml` are packaged for PyPI (internal planning |
| 68 | + artifacts, `uv.lock`, and caches are no longer shipped). |
| 69 | + |
| 70 | +## 0.1.0 |
| 71 | + |
| 72 | +- Initial release: one typed async runtime API for the Claude, Codex, and |
| 73 | + Antigravity agent SDKs, with capability diagnostics, event sinks, and adapters. |
0 commit comments