chore: release main#424
Open
stainless-app[bot] wants to merge 10 commits into
Open
Conversation
… delivery adapters, emitter) (#412)
…gModel (#355) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Declan Brady <declan.brady@scale.com> Co-authored-by: Nitesh Dhanpal <NiteshDhanpal@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
a191216 to
bc0de88
Compare
…quivalence [AGX1-373] (#414)
bc0de88 to
4265db1
Compare
Comment on lines
+174
to
+179
| elif isinstance(event, StreamTaskMessageDelta): | ||
| if event.index is not None and event.delta is not None: | ||
| if isinstance(event.delta, TextDelta) and event.delta.text_delta: | ||
| accumulated.setdefault(event.index, []).append(event.delta.text_delta) | ||
| elif isinstance(event.delta, ReasoningContentDelta) and event.delta.content_delta: | ||
| accumulated.setdefault(event.index, []).append(event.delta.content_delta) |
There was a problem hiding this comment.
ReasoningSummaryDelta not accumulated in payload comparison — both _yield_logical_deliveries (here) and _auto_send_logical_deliveries (line 394) handle TextDelta and ReasoningContentDelta but silently drop ReasoningSummaryDelta events. A fixture that streams reasoning summaries as deltas would have both channels produce an identical (truncated) payload, so a regression where one channel drops summary deltas would pass the cross-channel assertion undetected.
Prompt To Fix With AI
This is a comment left during a code review.
Path: tests/lib/core/harness/conformance/runner.py
Line: 174-179
Comment:
`ReasoningSummaryDelta` not accumulated in payload comparison — both `_yield_logical_deliveries` (here) and `_auto_send_logical_deliveries` (line 394) handle `TextDelta` and `ReasoningContentDelta` but silently drop `ReasoningSummaryDelta` events. A fixture that streams reasoning summaries as deltas would have both channels produce an identical (truncated) payload, so a regression where one channel drops summary deltas would pass the cross-channel assertion undetected.
How can I resolve this? If you propose a fix, please make it concise.4265db1 to
5f73947
Compare
40522a9 to
dc4d0af
Compare
dc4d0af to
d01f757
Compare
d01f757 to
d5e53aa
Compare
d5e53aa to
eea2ce6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
✨ Stainless prepared a new release
agentex-client: 0.15.0
0.15.0 (2026-06-23)
Full Changelog: agentex-client-v0.14.0...agentex-client-v0.15.0
Features
Bug Fixes
agentex-sdk: 0.14.0
0.14.0 (2026-06-23)
Full Changelog: agentex-sdk-v0.13.2...agentex-sdk-v0.14.0
Features
This pull request is managed by Stainless's GitHub App.
The semver version number is based on included commit messages. Alternatively, you can manually set the version number in the title of this pull request.
For a better experience, it is recommended to use either rebase-merge or squash-merge when merging this pull request.
🔗 Stainless website
📚 Read the docs
🙋 Reach out for help or questions
Greptile Summary
This is the 0.15.0 / 0.14.0 release PR, cutting changes already merged to main. The core addition is a unified harness surface (
src/agentex/lib/core/harness/) that gives every agent harness a shared path for streaming delivery, span derivation, and turn-usage reporting viaUnifiedEmitter,SpanDeriver, andSpanTracer. On top of that foundation, two new tap modules are introduced for parsing the Claude Codestream-jsonformat and the Codexexec --jsonevent stream, and the OpenAI Agents SDK is adapted via a newOpenAITurnwrapper. TheTemporalStreamingModelis extended to stream tool-call argument deltas incrementally instead of buffering them silently.UnifiedEmitterties a canonicalStreamTaskMessage*stream to either yield (sync HTTP ACP) or auto-send (async/Temporal) delivery, with span derivation as a side effect.convert_claude_code_to_agentex_eventsandconvert_codex_to_agentex_eventsare added and exported fromagentex.lib.adk, along withClaudeCodeTurnandCodexTurnimplementing theHarnessTurnprotocol.TemporalStreamingModelnow opens astreaming_task_message_contextper function call and streamsToolRequestDeltaupdates; a defensive cleanup loop closes any orphaned contexts on truncated streams.Confidence Score: 5/5
Safe to merge — all changes are additive new harness infrastructure and tap implementations built on already-merged commits; no existing call sites are broken.
The new harness surface introduces well-isolated, well-tested modules. The only issues found are documentation inconsistencies that do not affect runtime behavior.
adk/docs/harness.md and src/agentex/lib/adk/_modules/_codex_sync.py both have stale documentation that should be updated.
Important Files Changed
Flowchart
%%{init: {'theme': 'neutral'}}%% flowchart TD A["Harness Tap\n(pydantic-ai / LangGraph /\nOpenAI / claude-code / codex)"] -->|"canonical StreamTaskMessage* stream"| B["HarnessTurn\n(events + usage())"] B --> C["UnifiedEmitter"] C -->|"yield_turn()"| D["yield_events()\n(passthrough + tracing)"] C -->|"auto_send_turn()"| E["auto_send()\n(adk.streaming contexts + tracing)"] D --> F["Caller yields events\nover HTTP response"] E --> G["Redis / Task stream\n(adk.streaming)"] D --> H["SpanDeriver to SpanTracer"] E --> H H --> I["adk.tracing\n(span open/close)"]%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%% flowchart TD A["Harness Tap\n(pydantic-ai / LangGraph /\nOpenAI / claude-code / codex)"] -->|"canonical StreamTaskMessage* stream"| B["HarnessTurn\n(events + usage())"] B --> C["UnifiedEmitter"] C -->|"yield_turn()"| D["yield_events()\n(passthrough + tracing)"] C -->|"auto_send_turn()"| E["auto_send()\n(adk.streaming contexts + tracing)"] D --> F["Caller yields events\nover HTTP response"] E --> G["Redis / Task stream\n(adk.streaming)"] D --> H["SpanDeriver to SpanTracer"] E --> H H --> I["adk.tracing\n(span open/close)"]Reviews (4): Last reviewed commit: "chore: release main" | Re-trigger Greptile