Skip to content

release: 0.11.5 - #369

Merged
stainless-app[bot] merged 6 commits into
mainfrom
release-please--branches--main--changes--next
May 29, 2026
Merged

release: 0.11.5#369
stainless-app[bot] merged 6 commits into
mainfrom
release-please--branches--main--changes--next

Conversation

@stainless-app

@stainless-appstainless-appBot commented May 26, 2026

Copy link
Copy Markdown
Contributor

Automated Release PR

0.11.5 (2026-05-29)

Full Changelog: v0.11.4...v0.11.5

Features

  • api: add cleaned_at field to task response types (38ed338)
  • deps: bump openai-agents to >=0.14.3 for scale-sandbox oai_agents adapter (#375) (e1b31d9)

Performance Improvements

  • tracing: span queue linger + per-loop httpx keepalive (#362) (feec842)

Chores

  • deps: drop unused runtime deps and exclude tests from wheel (#367) (f4303d1)

Refactors

  • types: promote protocol types to agentex.protocol.* (#371) (6f1c14f)

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.11.5 release PR, bundling four changesets: tracing performance improvements, a protocol-type module promotion, new cleaned_at fields on task response types, and dependency cleanup.

  • Tracing perf (perf(tracing): span queue linger + per-loop httpx keepalive #362):AsyncSpanQueue gains a configurable linger window (default 100 ms) to coalesce spans into larger batches, per-event-loop HTTP client caching via WeakKeyDictionary to restore connection keepalive safely, bounded retry on transient 429/5xx failures, and a dropped_spans counter for observability.
  • Protocol types (refactor(types): promote protocol types to agentex.protocol.* #371): Wire-protocol shapes (RPCMethod, CreateTaskParams, JSONRPCRequest, etc.) are promoted from agentex.lib.types.* to the new canonical agentex.protocol.* package; the old paths become re-export shims with identity-preserving tests to guard isinstance compatibility.
  • API surface (#38ed338):cleaned_at: Optional[datetime] added to Task, TaskListResponseItem, TaskRetrieveResponse, and TaskRetrieveByNameResponse.
  • Deps (chore(deps): drop unused runtime deps and exclude tests from wheel #367): Several test/dev-only packages (pytest, pytest-asyncio, ipykernel, datadog, anthropic, tzdata, tornado) removed from the runtime wheel; test directories excluded from the built wheel via hatch config.

Confidence Score: 5/5

Safe to merge — changes are well-scoped, each guarded by matching tests, and backward compatibility is explicitly validated.

All three major areas of change (span-queue drain overhaul, per-loop client caching, protocol-type promotion) are covered by new or updated unit tests that pin the exact contracts being changed. The retry/drop logic is internally consistent, the WeakKeyDictionary eviction is verified end-to-end, and the back-compat shims are identity-tested. Dependency removals are dev/test packages that were never appropriate in the runtime wheel.

No files require special attention.

Important Files Changed

FilenameOverview
src/agentex/lib/core/tracing/span_queue.pyMajor enhancement: adds linger batching, bounded queue, per-loop retry with attempts counter, and drop observability; logic is consistent and well-tested.
src/agentex/lib/core/tracing/processors/agentex_tracing_processor.pySwitches from a single shared client (keepalive=0) to a per-event-loop WeakKeyDictionary cache with keepalive=20; lazy construction and correct WeakKey eviction.
src/agentex/lib/core/tracing/processors/sgp_tracing_processor.pySame per-loop client cache pattern as the Agentex processor; also refactors disabled-check ordering (skip building spans when disabled), improving efficiency.
src/agentex/protocol/acp.pyNew canonical location for ACP wire types (moved verbatim from lib/types/acp.py); uses standard pydantic BaseModel, consistent with the original.
src/agentex/protocol/json_rpc.pyNew canonical location for JSON-RPC envelope types; correctly ports from_attributes=True and populate_by_name=True into an explicit ConfigDict after the switch from the custom BaseModel.
src/agentex/lib/types/acp.pyReduced to a back-compat re-export shim; all original public symbols preserved including RPC_SYNC_METHODS and PARAMS_MODEL_BY_METHOD.
src/agentex/lib/types/json_rpc.pyReduced to a back-compat re-export shim for JSONRPCError, JSONRPCRequest, JSONRPCResponse.
tests/test_protocol_shims.pyNew tests asserting symbol parity, object identity between shim and canonical paths, and preservation of model_config flags on JSON-RPC types.
pyproject.tomlVersion bump to 0.11.5; removes dev/test packages from runtime deps; opens openai-agents constraint to >=0.14.3,<0.15; adds wheel test-exclusion patterns.
src/agentex/types/task.pyAdds cleaned_at: Optional[datetime] = None field; straightforward API surface addition.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
E[enqueue span] --> S{_stopping?}
S -- yes --> D1[record_drop: shutting down]
S -- no --> Q{queue full?}
Q -- yes --> D2[record_drop: queue full]
Q -- no --> QI[put item on asyncio.Queue\nattempts=0]
QI --> DRAIN[drain loop: await queue.get]
DRAIN --> FIRST[batch = first item]
FIRST --> LINGER{linger_ms > 0\nand not stopping?}
LINGER -- yes --> WAIT[wait_for queue.get\nup to linger deadline]
WAIT --> MORE{more items\nor timeout?}
MORE -- more items --> BATCH_FULL{batch == batch_size?}
BATCH_FULL -- no --> WAIT
BATCH_FULL -- yes --> SPLIT
MORE -- timeout --> SPLIT[split START / END]
LINGER -- no --> DRAIN_NOW[drain_nowait until\nbatch_size or QueueEmpty]
DRAIN_NOW --> SPLIT
SPLIT --> PROC[_process_items per event_type\ngather per-processor _handle]
PROC --> TRY{processor call\nsucceeds?}
TRY -- yes --> CLEAR[batch.clear loop back]
CLEAR --> DRAIN
TRY -- no --> RETRY{retryable status\n429/5xx?}
RETRY -- no --> D3[record_drop: permanent failure]
RETRY -- yes --> ATCHECK{attempts+1 < max_retries?}
ATCHECK -- no --> D4[record_drop: retries exhausted]
ATCHECK -- yes --> REENQUEUE[_reenqueue\nattempts+1, processors=p]
REENQUEUE --> Q2{queue full?}
Q2 -- yes --> D5[record_drop: queue full on retry]
Q2 -- no --> DRAIN
subgraph PerLoopCache [Per-event-loop client cache]
LC[asyncio.get_running_loop] --> WKD[WeakKeyDictionary lookup]
WKD -- miss --> BUILD[_build_client keepalive=20]
BUILD --> STORE[store in WeakKeyDictionary]
WKD -- hit --> USE[reuse existing client]
end
PROC -.->|HTTP call via| PerLoopCache
Loading

Reviews (6): Last reviewed commit: "release: 0.11.5" | Re-trigger Greptile

)
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from ee2b10f to 97dae2aCompareMay 26, 2026 23:16
@stainless-appstainless-appBot changed the title release: 0.11.5release: 0.12.0May 26, 2026
@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from 97dae2a to 4bbaa85CompareMay 26, 2026 23:17
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from 4bbaa85 to ae01a46CompareMay 27, 2026 15:36
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: Michael Chou <michael.chou@scale.com>
@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from ae01a46 to 0b5ae6bCompareMay 29, 2026 01:03
@smoreinissmoreinis changed the title release: 0.12.0release: 0.11.5May 29, 2026
@stainless-app

Copy link
Copy Markdown
ContributorAuthor

Release version edited manually

The Pull Request version has been manually set to 0.11.5 and will be used for the release.

If you instead want to use the version number 0.12.0 generated from conventional commits, just remove the label autorelease: custom version from this Pull Request.

@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from 0b5ae6b to f6782a0CompareMay 29, 2026 02:21
danielmillerpand others added 2 commits May 29, 2026 00:16
…ts adapter (#375)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@stainless-app
stainless-appBotforce-pushed the release-please--branches--main--changes--next branch from f6782a0 to 8f16e2eCompareMay 29, 2026 04:16
@socket-security

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

DiffPackageSupply Chain
Security
VulnerabilityQualityMaintenanceLicense
Updatedopenai-agents@​0.14.1 ⏵ 0.14.888+1100100100100

View full report

@danielmillerp
danielmillerp self-requested a review May 29, 2026 04:23
@stainless-app
stainless-appBot merged commit 3a4b812 into mainMay 29, 2026
45 checks passed
@stainless-app
stainless-appBot deleted the release-please--branches--main--changes--next branch May 29, 2026 04:28
@stainless-app

Copy link
Copy Markdown
ContributorAuthor

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@danielmillerp@max-parke-scale@smoreinis