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
Copy link
Copy Markdown
Contributor

@stainless-app stainless-app Bot commented May 26, 2026

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

Filename Overview
src/agentex/lib/core/tracing/span_queue.py Major 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.py Switches 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.py Same 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.py New 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.py New 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.py Reduced 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.py Reduced to a back-compat re-export shim for JSONRPCError, JSONRPCRequest, JSONRPCResponse.
tests/test_protocol_shims.py New tests asserting symbol parity, object identity between shim and canonical paths, and preservation of model_config flags on JSON-RPC types.
pyproject.toml Version 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.py Adds 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-app Bot force-pushed the release-please--branches--main--changes--next branch from ee2b10f to 97dae2a Compare May 26, 2026 23:16
@stainless-app stainless-app Bot changed the title release: 0.11.5 release: 0.12.0 May 26, 2026
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 97dae2a to 4bbaa85 Compare May 26, 2026 23:17
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@stainless-app stainless-app Bot force-pushed the release-please--branches--main--changes--next branch from 4bbaa85 to ae01a46 Compare May 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-app Bot force-pushed the release-please--branches--main--changes--next branch from ae01a46 to 0b5ae6b Compare May 29, 2026 01:03
@smoreinis smoreinis changed the title release: 0.12.0 release: 0.11.5 May 29, 2026
@stainless-app
Copy link
Copy Markdown
Contributor Author

stainless-app Bot commented May 29, 2026

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-app Bot force-pushed the release-please--branches--main--changes--next branch from 0b5ae6b to f6782a0 Compare May 29, 2026 02:21
danielmillerp and 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-app Bot force-pushed the release-please--branches--main--changes--next branch from f6782a0 to 8f16e2e Compare May 29, 2026 04:16
@socket-security
Copy link
Copy Markdown

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

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
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-app Bot merged commit 3a4b812 into main May 29, 2026
45 checks passed
@stainless-app stainless-app Bot deleted the release-please--branches--main--changes--next branch May 29, 2026 04:28
@stainless-app
Copy link
Copy Markdown
Contributor Author

stainless-app Bot commented May 29, 2026

Sign up for free to 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