agent-runtime-kit 0.5.0__tar.gz → 0.5.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/CHANGELOG.md +75 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/PKG-INFO +4 -4
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/providers.md +24 -8
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/sdk-evolution-agent-design.md +120 -85
- agent_runtime_kit-0.5.2/docs/sdk-evolution-agent.md +294 -0
- agent_runtime_kit-0.5.2/examples/sdk_evolution_agent/behavior.py +1488 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/cli.py +321 -87
- agent_runtime_kit-0.5.2/examples/sdk_evolution_agent/collectors.py +941 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/current_state.py +9 -0
- agent_runtime_kit-0.5.2/examples/sdk_evolution_agent/inspection.py +129 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/models.py +61 -1
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/release_notes.py +45 -13
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/report.py +128 -4
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/schemas.py +20 -4
- agent_runtime_kit-0.5.2/examples/sdk_evolution_agent/snapshots.py +780 -0
- agent_runtime_kit-0.5.2/examples/sdk_evolution_agent/stages.py +1074 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/pyproject.toml +4 -10
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/antigravity.py +111 -50
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/compatibility.py +5 -5
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_antigravity_adapter.py +182 -15
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_sdk_contract.py +113 -2
- agent_runtime_kit-0.5.2/tests/test_sdk_evolution_agent.py +4461 -0
- agent_runtime_kit-0.5.2/tests/test_sdk_evolution_docs.py +358 -0
- agent_runtime_kit-0.5.0/docs/sdk-evolution-agent.md +0 -186
- agent_runtime_kit-0.5.0/examples/sdk_evolution_agent/behavior.py +0 -529
- agent_runtime_kit-0.5.0/examples/sdk_evolution_agent/collectors.py +0 -339
- agent_runtime_kit-0.5.0/examples/sdk_evolution_agent/snapshots.py +0 -242
- agent_runtime_kit-0.5.0/examples/sdk_evolution_agent/stages.py +0 -648
- agent_runtime_kit-0.5.0/tests/test_sdk_evolution_agent.py +0 -1735
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/.gitignore +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/LICENSE +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/README.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/api-stability.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/capability-matrix.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/live-smoke.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/quickstart.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/docs/task-control.md +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/__init__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/run_same_task.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/__init__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/__main__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/auth.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/events.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/examples/sdk_evolution_agent/pr.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/__init__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_control.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_errors.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_kit.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_runtime.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_schema.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/_types.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/__init__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/_common.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/claude.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/codex.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/adapters/diagnostics.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/events.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/py.typed +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/readiness.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/registry.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/support.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/testing/__init__.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/src/agent_runtime_kit/testing/fakes.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_adapter_common.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_adapter_protocol.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_claude_adapter.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_codex_adapter.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_control.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_core.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_events.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_kit.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_live_smoke.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_mestre_compatibility.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_optional_dependencies.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_provider_diagnostics.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_readiness.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_schema.py +0 -0
- {agent_runtime_kit-0.5.0 → agent_runtime_kit-0.5.2}/tests/test_support.py +0 -0
|
@@ -5,6 +5,81 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## 0.5.2 - 2026-09-19
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- Updated tested Claude Agent SDK to `0.2.157`, Google Antigravity SDK to
|
|
13
|
+
`0.1.17`, and the Codex SDK and its exactly coupled CLI to `0.154.0`.
|
|
14
|
+
- SDK evolution supports explicit model, reasoning effort and analysis executable
|
|
15
|
+
options, preserves older locked baselines in implementation history, and
|
|
16
|
+
constructs real Claude options and Codex wire parameters in candidate probes.
|
|
17
|
+
- Upgrade skill invocations now include necessary runtime adaptations,
|
|
18
|
+
verification, and a regular pull request. Explicit report-only and local-only
|
|
19
|
+
requests retain their narrower scope.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Antigravity permissive deny-lists preserve all unrelated tools when the SDK's
|
|
24
|
+
default tool set changes, including the `ask_question` change in 0.1.17.
|
|
25
|
+
- Codex release evidence uses the current official documentation endpoints.
|
|
26
|
+
- Antigravity preserves explicit `vertex=True` with an API key for Vertex
|
|
27
|
+
Express authentication, rejects mixed regional credentials, and refuses older
|
|
28
|
+
SDKs or configurations that would silently drop the requested endpoint.
|
|
29
|
+
- Release-note collection recognizes versions present only in a GitHub
|
|
30
|
+
discussion title and rejects unrelated or longer version-prefix matches.
|
|
31
|
+
- PyPI publication validates and uploads Core Metadata 2.5 distributions with
|
|
32
|
+
matching Twine support.
|
|
33
|
+
|
|
34
|
+
## 0.5.1 - 2026-08-29
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- SDK evolution reports now include recent-release implementation evidence:
|
|
39
|
+
shipped-file fingerprints, Python-definition diffs, opaque-runtime limits,
|
|
40
|
+
and implementation trends grounded in observed upstream artifacts.
|
|
41
|
+
- Exact baseline/candidate behavior probes now exercise adapter-owned semantic
|
|
42
|
+
contracts in reusable, credential-scrubbed disposable environments.
|
|
43
|
+
- Evolution artifacts now preserve independent upstream discovery, current and
|
|
44
|
+
prospective resolver results, exact candidate classifications, implementation
|
|
45
|
+
diffs, and stronger current-state provenance.
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- Updated tested vendor runtimes from Claude Agent SDK `0.2.106` to `0.2.148`,
|
|
50
|
+
OpenAI Codex SDK `0.1.0b3` to `0.147.0`, its coupled CLI binary `0.137.0a4`
|
|
51
|
+
to `0.147.0`, and Google Antigravity SDK `0.1.4` to `0.1.15`.
|
|
52
|
+
- Raised the validated Codex SDK range to `<0.148`; the standalone Codex CLI
|
|
53
|
+
`0.149.0` remains an inspected artifact rather than an install candidate
|
|
54
|
+
because Codex SDK `0.147.0` requires CLI `0.147.0` exactly.
|
|
55
|
+
- SDK freshness checks now bypass repository and ambient UV release cooloffs so
|
|
56
|
+
upstream discovery, prospective resolution, and applied locks describe the
|
|
57
|
+
same current package state.
|
|
58
|
+
- Direction-of-travel analysis now reports trends in actual upstream
|
|
59
|
+
implementations instead of emitting dependency upgrade or hold advice.
|
|
60
|
+
- The repository-owned upgrade skill is the canonical operator workflow for
|
|
61
|
+
report-first discovery, gated implementation, and separately authorized PR
|
|
62
|
+
publication.
|
|
63
|
+
|
|
64
|
+
### Fixed
|
|
65
|
+
|
|
66
|
+
- Candidate discovery no longer treats the current dependency bounds as proof
|
|
67
|
+
that no newer upstream release exists; excluded releases receive an
|
|
68
|
+
independent prospective resolver check.
|
|
69
|
+
- Missing optional SDKs, failed imports, skipped probes, malformed evidence, and
|
|
70
|
+
mismatched baseline/candidate versions can no longer produce a false-green
|
|
71
|
+
compatibility result or bypass implementation gates.
|
|
72
|
+
- Dependency application now updates project constraints, `uv.lock`, and the
|
|
73
|
+
compatibility manifest atomically, verifies exact inspected versions, and
|
|
74
|
+
restores all three artifacts if resolution or validation fails.
|
|
75
|
+
- Antigravity now maps short public session IDs deterministically to
|
|
76
|
+
provider-safe UUID conversation IDs while preserving the caller-visible
|
|
77
|
+
session identifier.
|
|
78
|
+
- Codex CLI binary snapshots use the correct import surface, and publication is
|
|
79
|
+
skipped for empty, unapplied, rolled-back, or unverified changes.
|
|
80
|
+
- Candidate installation and release-note collection now retry bounded transient
|
|
81
|
+
failures and report progress instead of appearing stalled.
|
|
82
|
+
|
|
8
83
|
## 0.5.0 - 2026-07-11
|
|
9
84
|
|
|
10
85
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: agent-runtime-kit
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: One typed runtime API for Claude, Codex, and Antigravity agent SDKs.
|
|
5
5
|
Project-URL: Homepage, https://github.com/ebarti/agent-runtime-kit
|
|
6
6
|
Project-URL: Repository, https://github.com/ebarti/agent-runtime-kit
|
|
@@ -22,13 +22,13 @@ Requires-Dist: jsonschema<5,>=4.18
|
|
|
22
22
|
Provides-Extra: all
|
|
23
23
|
Requires-Dist: claude-agent-sdk<0.3,>=0.2.87; extra == 'all'
|
|
24
24
|
Requires-Dist: google-antigravity<0.2,>=0.1.2; extra == 'all'
|
|
25
|
-
Requires-Dist: openai-codex<0.
|
|
25
|
+
Requires-Dist: openai-codex<0.155,>=0.1.0b3; extra == 'all'
|
|
26
26
|
Provides-Extra: antigravity
|
|
27
27
|
Requires-Dist: google-antigravity<0.2,>=0.1.2; extra == 'antigravity'
|
|
28
28
|
Provides-Extra: claude
|
|
29
29
|
Requires-Dist: claude-agent-sdk<0.3,>=0.2.87; extra == 'claude'
|
|
30
30
|
Provides-Extra: codex
|
|
31
|
-
Requires-Dist: openai-codex<0.
|
|
31
|
+
Requires-Dist: openai-codex<0.155,>=0.1.0b3; extra == 'codex'
|
|
32
32
|
Description-Content-Type: text/markdown
|
|
33
33
|
|
|
34
34
|
# agent-runtime-kit
|
|
@@ -188,16 +188,32 @@ constructor, `GEMINI_API_KEY`, or `GOOGLE_API_KEY`. Without an API key, the
|
|
|
188
188
|
adapter uses Vertex AI config with Google ADC when a project can be discovered
|
|
189
189
|
from ADC, `GOOGLE_CLOUD_PROJECT`, or `GCLOUD_PROJECT`; location defaults to
|
|
190
190
|
`global` unless `GOOGLE_CLOUD_LOCATION`, `GOOGLE_CLOUD_REGION`, or
|
|
191
|
-
`CLOUD_ML_REGION` is set.
|
|
192
|
-
|
|
191
|
+
`CLOUD_ML_REGION` is set. An explicit constructor `api_key` takes precedence over
|
|
192
|
+
ambient credentials. With `vertex=True`, that key selects Vertex Express mode
|
|
193
|
+
(supported by released `google-antigravity>=0.1.16` versions): no ADC, project,
|
|
194
|
+
or location is required. Older or unverifiable SDK releases raise
|
|
195
|
+
`UnsupportedTaskInputError` for Express mode; their existing authentication
|
|
196
|
+
modes remain available. Explicit project/location arguments cannot be combined
|
|
197
|
+
with Express mode. For example:
|
|
198
|
+
|
|
199
|
+
```python
|
|
200
|
+
runtime = AntigravityAgentRuntime(vertex=True, api_key=vertex_express_key)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Without an explicit key, an explicit
|
|
193
204
|
`AntigravityAgentRuntime(vertex=True, ...)` takes precedence over an ambient
|
|
194
205
|
`GEMINI_API_KEY`/`GOOGLE_API_KEY`, so a Vertex-configured runtime is never
|
|
195
|
-
silently redirected to the Gemini API by an exported environment key.
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
206
|
+
silently redirected to the Gemini API by an exported environment key. When no
|
|
207
|
+
model is supplied, the adapter preserves the vendor default (`gemini-3.8-flash`
|
|
208
|
+
in Antigravity 0.1.16); supply `default_model` or `AgentTask.model` when a stable
|
|
209
|
+
model selection is required. Under
|
|
210
|
+
`PERMISSIVE`, `disallowed_tools` becomes an explicit `enabled_tools` list of all
|
|
211
|
+
built-in tools minus the denied tools. Antigravity 0.1.17 changed its implicit
|
|
212
|
+
deny-list baseline to exclude `ask_question`; using an explicit list preserves
|
|
213
|
+
the adapter's existing all-tools contract. Under other postures the deny-list
|
|
214
|
+
is subtracted from the mode's narrower baseline, so denying one tool can never
|
|
215
|
+
re-enable others past that baseline. An allow-list and a deny-list are mutually
|
|
216
|
+
exclusive (the SDK forbids
|
|
201
217
|
combining enabled and disabled tool lists), so supplying both is rejected. Tool
|
|
202
218
|
names are validated against the
|
|
203
219
|
`BuiltinTools` enum (`"view_file"`, not `"Read"`). `budget_usd` and
|
|
@@ -14,7 +14,8 @@ or manual design stop.
|
|
|
14
14
|
The SDK evolution agent should answer these questions for every run:
|
|
15
15
|
|
|
16
16
|
- What package versions are installed, locked, and available upstream?
|
|
17
|
-
- Which
|
|
17
|
+
- Which newer upstream releases exist, which are excluded by current bounds,
|
|
18
|
+
and which exact versions are prospectively resolvable together?
|
|
18
19
|
- What changed in public API shape?
|
|
19
20
|
- What changed in documented behavior or product direction?
|
|
20
21
|
- Which adapter behavior contracts still pass on the candidate versions?
|
|
@@ -75,18 +76,22 @@ Step responsibilities:
|
|
|
75
76
|
`pyproject.toml`, `uv.lock`, installed distributions, package metadata,
|
|
76
77
|
configured source hints, local environment facts, and supported auth
|
|
77
78
|
availability. This produces raw facts, not recommendations.
|
|
78
|
-
- **Resolve update candidates**:
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
- **Resolve update candidates**: Build the candidate inventory from independent
|
|
80
|
+
upstream package metadata before consulting current constraints. Run both the
|
|
81
|
+
current targeted resolver preview and, when an upper bound excludes a newer
|
|
82
|
+
release, a no-mutation prospective preview in a temporary manifest with only
|
|
83
|
+
the excluding upper bound widened. Resolver output classifies feasibility; it
|
|
84
|
+
must not define away candidates hidden by the current manifest.
|
|
85
|
+
- **Inspect current and candidate APIs**: Treat `uv.lock` as the baseline and
|
|
86
|
+
inspect every exact compatible candidate. Reuse one credential-scrubbed
|
|
87
|
+
package/version environment for its snapshot and behavior probe. If an update
|
|
88
|
+
candidate has no exact candidate API diff, the run must not proceed to
|
|
89
|
+
implementation.
|
|
90
|
+
- **Inspect recent implementations**: When explicit candidate inspection is
|
|
91
|
+
enabled, inspect the three most recent published releases independently of
|
|
92
|
+
whether an update is pending. Fingerprint shipped files and Python AST
|
|
93
|
+
definitions, compare adjacent releases, and preserve opaque-artifact
|
|
94
|
+
limitations. This evidence is longitudinal analysis, not resolver input.
|
|
90
95
|
- **Collect changelog and release-note evidence**: Fetch or read official
|
|
91
96
|
changelogs, release pages, docs changelogs, repository releases, and package
|
|
92
97
|
metadata links. This step records what changed according to the vendor and
|
|
@@ -100,10 +105,12 @@ Step responsibilities:
|
|
|
100
105
|
snapshots, API diffs, release-note evidence, behavior probe results, source
|
|
101
106
|
references, and uncertainty into a compact bundle for the AI stages. This step
|
|
102
107
|
should preserve provenance so later reasoning can be traced back to evidence.
|
|
103
|
-
- **
|
|
104
|
-
`AgentTask`, to infer
|
|
105
|
-
|
|
106
|
-
|
|
108
|
+
- **Implementation-trend analysis through agent-runtime-kit**: Ask a runtime,
|
|
109
|
+
via `AgentTask`, to infer implementation patterns from exact recent-release
|
|
110
|
+
file and definition diffs, corroborated by API, behavior, and release-note
|
|
111
|
+
evidence. This step identifies whether changes look isolated or part of a
|
|
112
|
+
broader SDK implementation direction. It must not recommend upgrade, hold,
|
|
113
|
+
resolver, or lockfile actions; it does not own the implementation plan.
|
|
107
114
|
- **Architecture decision and update plan through agent-runtime-kit**: Ask a
|
|
108
115
|
runtime, via `AgentTask`, to turn direction analysis into the concrete plan:
|
|
109
116
|
adapter-only, test-only, docs-only, capability metadata change,
|
|
@@ -123,26 +130,26 @@ Step responsibilities:
|
|
|
123
130
|
report with the evidence bundle, analysis, decision, reviewer output,
|
|
124
131
|
uncertainty, blocked reasons, and the exact manual review questions. This is a
|
|
125
132
|
valid end state, not a failed run.
|
|
126
|
-
- **Apply safe implementation**:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
- **Apply safe implementation**: The built-in deterministic implementation lane
|
|
134
|
+
widens only excluding dependency upper bounds, refreshes the lock to the exact
|
|
135
|
+
inspected compatible versions, and rolls both files back on mismatch or
|
|
136
|
+
verification failure. Adapter, public API, test, or documentation changes are
|
|
137
|
+
scoped coding work triggered by a blocked report; they require regression
|
|
138
|
+
evidence and a green rerun before the dependency lane proceeds.
|
|
131
139
|
- **Run verification**: Run the verification commands required by the
|
|
132
140
|
architecture decision. At minimum, this should cover formatting/linting,
|
|
133
141
|
typing, unit tests, lock checks, report generation checks, and any available
|
|
134
142
|
live smoke needed for the affected runtime behavior.
|
|
135
143
|
- **Promote updated state to current baseline**: After implementation and
|
|
136
|
-
verification pass,
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
blocked, or manual-design-required runs must not replace the current baseline.
|
|
144
|
+
verification pass, record the updated lock/package/API/release-note/probe state
|
|
145
|
+
in `current_state.json`, tied to the verified workspace state. Failed, blocked,
|
|
146
|
+
or manual-design-required runs are never marked promoted.
|
|
140
147
|
- **Write report and optional draft PR**: Write the final local report with
|
|
141
148
|
evidence, decisions, implementation summary, baseline-promotion result, test
|
|
142
149
|
results, uncertainty, and manual checklist. If explicitly configured and
|
|
143
150
|
authenticated, create or update a draft PR. This step must never auto-merge.
|
|
144
151
|
|
|
145
|
-
Every box before
|
|
152
|
+
Every box before implementation-trend analysis is deterministic. AI stages may interpret
|
|
146
153
|
evidence, but they should not invent evidence that was not collected.
|
|
147
154
|
|
|
148
155
|
## Operating Modes
|
|
@@ -150,27 +157,34 @@ evidence, but they should not invent evidence that was not collected.
|
|
|
150
157
|
The default command should be report-only:
|
|
151
158
|
|
|
152
159
|
```bash
|
|
153
|
-
python -m examples.sdk_evolution_agent
|
|
160
|
+
uv run --locked python -m examples.sdk_evolution_agent \
|
|
161
|
+
--runtime fake \
|
|
162
|
+
--refresh-preview
|
|
154
163
|
```
|
|
155
164
|
|
|
156
165
|
This mode collects evidence, writes artifacts, runs the analysis stages through
|
|
157
|
-
the selected runtime, and stops before editing the workspace. The fake runtime
|
|
158
|
-
allowed only as a deterministic
|
|
159
|
-
schemas, not the quality of AI reasoning.
|
|
166
|
+
the selected runtime, and stops before editing the workspace. The fake runtime
|
|
167
|
+
is allowed only as a deterministic pipeline-shape harness. It proves the
|
|
168
|
+
pipeline and schemas, not upgrade safety or the quality of AI reasoning. When
|
|
169
|
+
updates exist, the default no-inspection run records incomplete candidate
|
|
170
|
+
evidence.
|
|
160
171
|
|
|
161
172
|
A real analysis run should select one configured runtime:
|
|
162
173
|
|
|
163
174
|
```bash
|
|
164
|
-
python -m examples.sdk_evolution_agent
|
|
165
|
-
|
|
166
|
-
python -m examples.sdk_evolution_agent
|
|
175
|
+
uv run --locked --extra claude python -m examples.sdk_evolution_agent \
|
|
176
|
+
--runtime claude-agent-sdk --refresh-preview --inspect-candidates
|
|
177
|
+
uv run --locked --extra codex python -m examples.sdk_evolution_agent \
|
|
178
|
+
--runtime codex-agent-sdk --refresh-preview --inspect-candidates
|
|
179
|
+
uv run --locked --extra antigravity python -m examples.sdk_evolution_agent \
|
|
180
|
+
--runtime antigravity-agent-sdk --refresh-preview --inspect-candidates
|
|
167
181
|
```
|
|
168
182
|
|
|
169
183
|
Before a Codex-backed run, prepare the dedicated SDK evolution auth home:
|
|
170
184
|
|
|
171
185
|
```bash
|
|
172
|
-
env -u UV_EXCLUDE_NEWER
|
|
173
|
-
uv run --extra codex python -m examples.sdk_evolution_agent.auth ensure-codex
|
|
186
|
+
env -u UV_EXCLUDE_NEWER \
|
|
187
|
+
uv run --locked --extra codex python -m examples.sdk_evolution_agent.auth ensure-codex
|
|
174
188
|
```
|
|
175
189
|
|
|
176
190
|
This helper owns the operator-readiness boundary for Codex-backed runs. It
|
|
@@ -188,9 +202,10 @@ Package filters narrow evidence collection for debugging, but normal evolution
|
|
|
188
202
|
runs should inspect all tracked packages:
|
|
189
203
|
|
|
190
204
|
```bash
|
|
191
|
-
python -m examples.sdk_evolution_agent \
|
|
205
|
+
uv run --locked --extra antigravity python -m examples.sdk_evolution_agent \
|
|
192
206
|
--runtime antigravity-agent-sdk \
|
|
193
207
|
--refresh-preview \
|
|
208
|
+
--inspect-candidates \
|
|
194
209
|
--package claude-agent-sdk \
|
|
195
210
|
--package openai-codex \
|
|
196
211
|
--package openai-codex-cli-bin \
|
|
@@ -201,15 +216,18 @@ python -m examples.sdk_evolution_agent \
|
|
|
201
216
|
since update candidates without candidate API snapshots are not actionable.
|
|
202
217
|
The shipped behavior deliberately inverts that default: candidate inspection
|
|
203
218
|
installs and imports freshly downloaded upstream code, so it is opt-in and
|
|
204
|
-
runs in a credential-scrubbed environment
|
|
205
|
-
|
|
219
|
+
runs in a credential-scrubbed environment. The same explicit flag is required
|
|
220
|
+
to install a locked baseline that is missing or drifted in the active
|
|
221
|
+
environment. When inspection is off, those gaps become explicit `skip` records
|
|
222
|
+
rather than claimed observations.
|
|
206
223
|
|
|
207
224
|
Implementation mode should remain explicitly gated:
|
|
208
225
|
|
|
209
226
|
```bash
|
|
210
|
-
python -m examples.sdk_evolution_agent \
|
|
227
|
+
uv run --locked --extra antigravity python -m examples.sdk_evolution_agent \
|
|
211
228
|
--runtime antigravity-agent-sdk \
|
|
212
229
|
--refresh-preview \
|
|
230
|
+
--inspect-candidates \
|
|
213
231
|
--implementation-enabled
|
|
214
232
|
```
|
|
215
233
|
|
|
@@ -230,30 +248,24 @@ The agent checks:
|
|
|
230
248
|
- `pyproject.toml` dependency declarations.
|
|
231
249
|
- `uv.lock` versions.
|
|
232
250
|
- Installed distributions in the local environment.
|
|
233
|
-
- PyPI
|
|
234
|
-
-
|
|
251
|
+
- Independent PyPI latest and recent-release metadata.
|
|
252
|
+
- Current constrained and prospective temporary-manifest
|
|
253
|
+
`uv lock --dry-run --exclude-newer false -P ...` output.
|
|
235
254
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
255
|
+
Upstream metadata is the source of truth for whether a newer direct SDK release
|
|
256
|
+
exists. Prospective resolution is the source of truth for the compatible set
|
|
257
|
+
that can be applied. For `openai-codex-cli-bin`, the compatible candidate is the
|
|
258
|
+
exact version required by the Codex SDK candidate; a newer standalone CLI
|
|
259
|
+
release remains visible but is classified as blocked by that coupling.
|
|
240
260
|
|
|
241
261
|
### 2. API Shape Evidence
|
|
242
262
|
|
|
243
|
-
The agent
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
inspects only the packages that need fresh facts:
|
|
250
|
-
|
|
251
|
-
- packages selected by the resolver for update,
|
|
252
|
-
- packages whose prior artifacts are missing,
|
|
253
|
-
- packages whose prior artifacts were produced by an older evidence schema,
|
|
254
|
-
- packages whose current locked or installed version no longer matches the
|
|
255
|
-
artifact baseline,
|
|
256
|
-
- packages needed to answer a specific adapter-compatibility question.
|
|
263
|
+
The agent treats the lockfile as the current SDK baseline. If the active Python
|
|
264
|
+
environment has drifted from `uv.lock`, it inspects the locked baseline in an
|
|
265
|
+
isolated virtualenv instead of using the installed package. Each run captures
|
|
266
|
+
fresh evidence for every selected package and every independently discovered
|
|
267
|
+
compatible candidate. A package/version environment is cached only within the
|
|
268
|
+
run, so its API snapshot and behavior probe reuse one exact install.
|
|
257
269
|
|
|
258
270
|
For importable packages, snapshots record:
|
|
259
271
|
|
|
@@ -272,15 +284,9 @@ This catches obvious adapter risks:
|
|
|
272
284
|
|
|
273
285
|
API shape is necessary but insufficient. It does not prove behavior.
|
|
274
286
|
|
|
275
|
-
After a successful implementation,
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
actually accepted, not against stale pre-update artifacts.
|
|
279
|
-
|
|
280
|
-
If the evidence schema changes, promotion should include a schema refresh of the
|
|
281
|
-
current package state even when the package version did not change. Otherwise
|
|
282
|
-
future runs may compare candidate evidence against artifacts that no longer mean
|
|
283
|
-
the same thing.
|
|
287
|
+
After a successful implementation, `uv.lock` becomes the next run's
|
|
288
|
+
authoritative baseline and `current_state.json` records the evidence that was
|
|
289
|
+
accepted.
|
|
284
290
|
|
|
285
291
|
### 3. Changelog and Release-Note Evidence
|
|
286
292
|
|
|
@@ -333,7 +339,7 @@ Behavior probes should cover these contracts:
|
|
|
333
339
|
|
|
334
340
|
| Contract | Why API diffs are not enough | Example probe |
|
|
335
341
|
| --- | --- | --- |
|
|
336
|
-
| Request construction |
|
|
342
|
+
| Request construction | Signatures can stay stable while validators or field meaning changes. | Construct the exact SDK options/config object with adapter-owned values; Antigravity includes provider-compatible mapped conversation IDs. |
|
|
337
343
|
| Permission mapping | Permission mode names can stay present while policy behavior changes. | Strict/default/permissive tests for each adapter. |
|
|
338
344
|
| Sandbox and workspace semantics | Behavior can shift across SDK or CLI layers without a Python signature change. | Codex sandbox enum and run argument contract tests, plus smoke where possible. |
|
|
339
345
|
| Streaming and event order | New message types may not break imports but may be dropped. | Feed fake vendor messages and assert emitted event order. |
|
|
@@ -347,6 +353,7 @@ Behavior probe output should be a first-class report artifact, for example:
|
|
|
347
353
|
```text
|
|
348
354
|
behavior_probes.json
|
|
349
355
|
behavior_diffs.json
|
|
356
|
+
behavior_summary.json
|
|
350
357
|
```
|
|
351
358
|
|
|
352
359
|
Each probe result should include:
|
|
@@ -358,15 +365,21 @@ Each probe result should include:
|
|
|
358
365
|
- stdout/stderr summary,
|
|
359
366
|
- skipped reason when optional credentials are missing.
|
|
360
367
|
|
|
361
|
-
`behavior_diffs.json` compares
|
|
362
|
-
candidate-version probes for
|
|
363
|
-
changes block implementation deterministically before any local lock
|
|
368
|
+
`behavior_diffs.json` compares observed locked-baseline probes against
|
|
369
|
+
candidate-version probes for independently inventoried compatible updates. Breaking candidate
|
|
370
|
+
probe changes block implementation deterministically before any local lock
|
|
371
|
+
update.
|
|
364
372
|
|
|
365
373
|
`behavior_probes.json` may include observed SDK fields or parameters that are
|
|
366
374
|
not part of the adapter contract. `behavior_diffs.json` compares the required
|
|
367
375
|
adapter contract, not every optional field. Public API and signature churn
|
|
368
376
|
remains visible in `api_diffs.json` and probe details, but it should only block
|
|
369
377
|
implementation when the required behavior contract fails or becomes ambiguous.
|
|
378
|
+
`behavior_summary.json` is the deterministic hand-off: `pass` means complete
|
|
379
|
+
unchanged evidence, `changed` means complete non-breaking evidence,
|
|
380
|
+
`incomplete` means required observations could not be proved, and `fail` means
|
|
381
|
+
a required contract failed or a breaking diff was observed. Missing, malformed,
|
|
382
|
+
or unknown summary states also block implementation.
|
|
370
383
|
|
|
371
384
|
### 5. Runtime-Generated Analysis
|
|
372
385
|
|
|
@@ -393,12 +406,19 @@ sequenceDiagram
|
|
|
393
406
|
|
|
394
407
|
The AI stages should receive compacted, source-referenced evidence. They should
|
|
395
408
|
not be asked to inspect the filesystem directly during report-only analysis.
|
|
409
|
+
The direction stage receives implementation diffs as primary evidence. Its
|
|
410
|
+
structured package status is `observed`, `opaque-runtime`, `no-transition`, or
|
|
411
|
+
`unavailable`; package freshness and resolver status are not implementation
|
|
412
|
+
trends. A deterministic postcondition replaces operational advice if a runtime
|
|
413
|
+
returns it in a trend field.
|
|
396
414
|
|
|
397
415
|
## Decision Gates
|
|
398
416
|
|
|
399
417
|
The agent should fail closed. Implementation is blocked when:
|
|
400
418
|
|
|
401
|
-
-
|
|
419
|
+
- independent discovery finds a candidate but the prospective no-cooloff
|
|
420
|
+
resolver preview is missing or failed,
|
|
421
|
+
- an exact candidate API diff is missing,
|
|
402
422
|
- release notes exist but were not collected,
|
|
403
423
|
- release notes are unavailable and the API or behavior evidence is ambiguous,
|
|
404
424
|
- behavior probes fail,
|
|
@@ -516,8 +536,11 @@ evidence.json
|
|
|
516
536
|
release_notes.json
|
|
517
537
|
api_snapshots/
|
|
518
538
|
api_diffs.json
|
|
539
|
+
implementation_snapshots/
|
|
540
|
+
implementation_diffs.json
|
|
519
541
|
behavior_probes.json
|
|
520
542
|
behavior_diffs.json
|
|
543
|
+
behavior_summary.json
|
|
521
544
|
current_state.json
|
|
522
545
|
direction_analysis.json
|
|
523
546
|
architecture_decision.json
|
|
@@ -534,7 +557,7 @@ report.md
|
|
|
534
557
|
- API diff count and affected packages,
|
|
535
558
|
- behavior probe status,
|
|
536
559
|
- current-state baseline promotion status,
|
|
537
|
-
-
|
|
560
|
+
- upstream implementation patterns across exact release intervals,
|
|
538
561
|
- architecture decision,
|
|
539
562
|
- reviewer status,
|
|
540
563
|
- implementation result,
|
|
@@ -549,9 +572,10 @@ artifact-aware. It should record:
|
|
|
549
572
|
- commit SHA or explicit dirty-worktree marker,
|
|
550
573
|
- lockfile hash,
|
|
551
574
|
- package names and accepted current versions,
|
|
552
|
-
- paths or content hashes for current API snapshots,
|
|
575
|
+
- paths or content hashes for current API and implementation snapshots,
|
|
553
576
|
- paths or content hashes for release-note evidence,
|
|
554
577
|
- paths or content hashes for behavior probe results,
|
|
578
|
+
- a path or content hash for the deterministic behavior summary,
|
|
555
579
|
- whether the baseline was promoted, refreshed, skipped, or blocked.
|
|
556
580
|
|
|
557
581
|
Promotion rules should be conservative:
|
|
@@ -569,9 +593,11 @@ Promotion rules should be conservative:
|
|
|
569
593
|
Changelogs are incomplete. They often omit small behavior changes and may lag
|
|
570
594
|
package releases.
|
|
571
595
|
|
|
572
|
-
API snapshots are shallow.
|
|
573
|
-
|
|
574
|
-
|
|
596
|
+
Public API snapshots are shallow. Implementation-history fingerprints add
|
|
597
|
+
file-level and Python-definition evidence, but hashes still cannot explain
|
|
598
|
+
behavior encoded in runtime binaries, generated models, callbacks, subprocesses,
|
|
599
|
+
environment variables, or remote services. Opaque artifacts must remain an
|
|
600
|
+
explicit limitation rather than being reverse-inferred from version numbers.
|
|
575
601
|
|
|
576
602
|
Live probes are environment-sensitive. They prove that one local credential and
|
|
577
603
|
runtime setup worked at one time. They do not replace unit or contract probes.
|
|
@@ -631,13 +657,22 @@ The example implements the deterministic evidence artifacts described above:
|
|
|
631
657
|
- `behavior_probes.json` records current and candidate adapter-contract probes.
|
|
632
658
|
- `behavior_diffs.json` records behavior differences between current and
|
|
633
659
|
candidate probes.
|
|
660
|
+
- `behavior_summary.json` records the recomputed deterministic status, counts,
|
|
661
|
+
and reasons handed to implementation guards and operators.
|
|
634
662
|
- `current_state.json` records the run baseline, lockfile hash, accepted
|
|
635
663
|
package versions, artifact hashes, and promotion status.
|
|
636
664
|
|
|
637
665
|
The implementation path is gated by deterministic checks before the local
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
666
|
+
manifest/lock update runs. A missing or failed prospective resolver preview,
|
|
667
|
+
missing candidate API diffs, unavailable required
|
|
668
|
+
release-note evidence, behavior summaries that are failed, incomplete, missing,
|
|
669
|
+
malformed, or unknown, reviewer rejection, `manual_design_required`, and
|
|
670
|
+
unresolved recursive self-adaptation all block implementation. When
|
|
671
|
+
implementation is allowed, the example widens only excluding direct dependency
|
|
672
|
+
bounds, applies the exact prospectively selected SDK set with freshness cutoffs
|
|
673
|
+
disabled, updates the compatibility manifest to the exact tested SDK and
|
|
674
|
+
coupled-runtime versions, verifies the resolved versions, and runs lint, typing,
|
|
675
|
+
tests, and lock checks. It restores the project manifest, lockfile, and
|
|
676
|
+
compatibility manifest on mismatch or verification failure. Only explicitly
|
|
677
|
+
requested draft-PR mode may stage the reported changed paths, commit, push, and
|
|
678
|
+
open a PR, and only after a verified non-empty update.
|