GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | ||||||||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | ||||||||||||||||||||||||
GeezerVison is showing github.com — chore: release main by stainless-app[bot] · Pull Request #443 · scaleapi/scale-agentex-python Conversation
|
| Filename | Overview |
|---|---|
| src/agentex/lib/core/temporal/plugins/openai_agents/run.py | New run_turn helper wires TemporalStreamingHooks correctly; module docstring names a non-existent emit_messages=False parameter (should be emit_tool_requests=False) |
| src/agentex/lib/core/temporal/plugins/openai_agents/hooks/hooks.py | Adds emit_tool_requests/emit_tool_responses/emit_handoffs flags and per-tool SGP spans; best-effort tracing guards are correct; close_open_tool_spans drains orphaned spans on runner termination |
| src/agentex/lib/adk/_modules/_openai_sync.py | Addresses previous review issues: text items now always claim a fresh index (no reasoning/text index collision), reasoning items emit Done, and argument parsing is guarded via _safe_parse_arguments |
| src/agentex/lib/adk/_modules/_claude_code_sync.py | Content-based deduplication (_streamed_texts / _streamed_thinkings) replaces fragile block-index approach; handles interleaved and post-stream assistant envelopes correctly |
| src/agentex/lib/core/harness/span_derivation.py | Reasoning spans now accumulate chain-of-thought / summary text from deltas and emit it as span output on close, matching the existing tool-span pattern |
| src/agentex/lib/core/harness/tracer.py | New _as_span_payload coerces non-dict inputs/outputs (e.g. reasoning string) so the SGP API no longer silently drops them with 422 errors |
| src/agentex/lib/core/temporal/plugins/openai_agents/models/temporal_streaming_model.py | Adds hosted/server-side tool surfacing; contains unreachable task_id check at line 656 that duplicates the guard at line 639 |
| src/agentex/lib/adk/_modules/_openai_turn.py | Clean OpenAITurn adapter; usage aggregation is defensive and deferred until stream exhaustion |
| src/agentex/lib/adk/_modules/_langgraph_sync.py | Adds emit_langgraph_messages for non-streaming (ainvoke) LangGraph agents; handles both string and list content from AIMessage correctly |
| src/agentex/lib/cli/commands/init.py | Adds Claude Code and Codex templates across async/sync/temporal modes; pre-existing package-manager cancellation gap is noted in previous threads |
%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant Caller
participant run_turn
participant Runner
participant TemporalStreamingModel
participant TemporalStreamingHooks
Caller->>run_turn: run_turn(agent, input, task_id, trace_id, ...)
run_turn->>TemporalStreamingHooks: "new(emit_tool_requests=False, emit_tool_responses=True, trace_id=...)"
run_turn->>Runner: "Runner.run(agent, input, hooks=hooks)"
loop per LLM call
Runner->>TemporalStreamingModel: get_response(...)
TemporalStreamingModel-->>Caller: StreamTaskMessageStart(ToolRequestContent)
TemporalStreamingModel-->>Caller: "StreamTaskMessageDelta*(ToolRequestDelta)"
TemporalStreamingModel-->>Caller: StreamTaskMessageFull(ToolRequestContent)
TemporalStreamingModel-->>Caller: "StreamTaskMessageStart/Delta*/Full (text/reasoning)"
end
Runner->>TemporalStreamingHooks: on_tool_start(ctx, agent, tool)
Note over TemporalStreamingHooks: emit_tool_requests=False skip UI post
TemporalStreamingHooks->>adk.tracing: start_span(tool_name, arguments)
Runner->>TemporalStreamingHooks: on_tool_end(ctx, agent, tool, result)
TemporalStreamingHooks-->>Caller: stream_lifecycle_content(ToolResponseContent)
TemporalStreamingHooks->>adk.tracing: "end_span(span, output=result)"
run_turn->>TemporalStreamingHooks: close_open_tool_spans() [finally]
run_turn-->>Caller: OpenAIAgentsTurnResult(result, usage)
%%{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"}}}%%
sequenceDiagram
participant Caller
participant run_turn
participant Runner
participant TemporalStreamingModel
participant TemporalStreamingHooks
Caller->>run_turn: run_turn(agent, input, task_id, trace_id, ...)
run_turn->>TemporalStreamingHooks: "new(emit_tool_requests=False, emit_tool_responses=True, trace_id=...)"
run_turn->>Runner: "Runner.run(agent, input, hooks=hooks)"
loop per LLM call
Runner->>TemporalStreamingModel: get_response(...)
TemporalStreamingModel-->>Caller: StreamTaskMessageStart(ToolRequestContent)
TemporalStreamingModel-->>Caller: "StreamTaskMessageDelta*(ToolRequestDelta)"
TemporalStreamingModel-->>Caller: StreamTaskMessageFull(ToolRequestContent)
TemporalStreamingModel-->>Caller: "StreamTaskMessageStart/Delta*/Full (text/reasoning)"
end
Runner->>TemporalStreamingHooks: on_tool_start(ctx, agent, tool)
Note over TemporalStreamingHooks: emit_tool_requests=False skip UI post
TemporalStreamingHooks->>adk.tracing: start_span(tool_name, arguments)
Runner->>TemporalStreamingHooks: on_tool_end(ctx, agent, tool, result)
TemporalStreamingHooks-->>Caller: stream_lifecycle_content(ToolResponseContent)
TemporalStreamingHooks->>adk.tracing: "end_span(span, output=result)"
run_turn->>TemporalStreamingHooks: close_open_tool_spans() [finally]
run_turn-->>Caller: OpenAIAgentsTurnResult(result, usage)
Reviews (10): Last reviewed commit: "chore: release main" | Re-trigger Greptile
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…g handler (#430) Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
…ing handler (#431) Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
38f3e69 to
c26eb73
Compare
…ort (#432) Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: OpenAI <[email protected]>
c26eb73 to
6665513
Compare
6665513 to
beee3cc
Compare
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
beee3cc to
d470497
Compare
…435) Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
d470497 to
2b2856c
Compare
Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
2b2856c to
764d347
Compare
…alStreamingModel (#442) Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>
764d347 to
9e9e3fa
Compare
9e9e3fa to
23bb002
Compare
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
23bb002 to
063fbc8
Compare
063fbc8 to
9d953cf
Compare
There was an error while loading. Please reload this page.
|
🤖 Release is at https://github.com/scaleapi/scale-agentex-python/releases/tag/agentex-client-v0.16.0 🌻 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
|
🤖 Release is at https://github.com/scaleapi/scale-agentex-python/releases/tag/agentex-sdk-v0.15.0 🌻 |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
…caleapi#506 (scaleapi#4) * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * feat(adk): allow all ClaudeAgentOptions in run_claude_agent_activity * release: 0.9.8 * Bump LiteLLM and urllib3 * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * fix(client): preserve hardcoded query params when merging with user params * codegen metadata * codegen metadata * codegen metadata * release: 0.9.9 * feat(adk): Revamp run_claude_agent_activity to use more streaming (scaleapi#309) * codegen metadata * Fix cost bug (scaleapi#313) * codegen metadata * release: 0.9.10 * Fix crash when .dockerignore file is missing during cloud build The build context preparation crashes with FileNotFoundError when a manifest specifies a dockerignore path but the file doesn't exist on disk. This adds an existence check and logs a warning instead of crashing, so builds proceed with no ignore patterns. Co-Authored-By: Claude Opus 4.6 <[email protected]> * feat: add AgentCard for self-describing agent capabilities (scaleapi#296) * Add AgentCard feature for self-describing agent capabilities via registration_metadata * Add tests for AgentCard feature, fix PEP 604 union unwrap in extract_literal_values * Fix ruff import sorting in __init__.py and test file * Fix pyright strict errors: use Enum isinstance checks, add override decorators in tests * Add AgentCard.from_states() classmethod for list[State] + initial_state usage * Minimize registration.py diff: only add agent_card param and merge logic * Add missing AGENTEX_DEPLOYMENT_ID to test mock env vars * fix(temporal): allowing-ACP-temporal-telemetry * fix: Temporal Union deserialization causing tool_response messages to be lost Temporal's payload converter deserializes Union types by trying each variant in order. ToolResponseContent was silently misdeserialized as TextContent (both share 'author' and 'content' fields), creating text messages instead of tool_response messages in the database. Fix: hooks now pass .model_dump() dicts to the activity, and the activity reconstructs the correct Pydantic model using the 'type' discriminator. Also fix test polling to handle the DONE/tool_response ordering race condition. * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * feat(api): api update * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * fix: ensure file data are only sent as 1 parameter * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * release: 0.10.0 * Add ShellTool support to TemporalStreamingModel openai-agents introduced a next-generation ShellTool (replacing LocalShellTool) that carries an environment config like {"type": "local", "skills": [...]}. The Temporal streaming model was dropping it with "Unknown tool type: ShellTool, skipping", so agents running through AgentEx/Temporal lost the tool entirely even though plain Runner.run(...) worked. Serialize ShellTool to the Responses API "shell" payload, defaulting environment to {"type": "local"} when unset. Import is guarded so users on older openai-agents versions (ShellTool not yet exported) continue to work. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * Upgrade openai-agents to 0.14.1 and temporalio to >=1.26.0 ShellTool (the next-gen replacement for LocalShellTool) is only exported in modern openai-agents versions. With the old 0.4.2 pin the ShellTool branch added in the prior commit was unreachable by default-install users. Bumps: - openai-agents 0.4.2 -> 0.14.1 - temporalio >=1.18.2 -> >=1.26.0 (matches the version that supports ShellTool serialization in temporalio.contrib.openai_agents) Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * Narrow ComputerTool.computer union for Responses API serialization openai-agents 0.14 widened ComputerTool.computer to accept factory types (ComputerCreate/ComputerProvider) that don't expose environment or dimensions. Match the upstream pattern: narrow to Computer / AsyncComputer before reading those attributes, and validate that environment/dimensions are set. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * release: 0.10.1 * add support for Temporal PayloadCodec (scaleapi#328) * codegen metadata * codegen metadata * perf(client): optimize file structure copying in multipart requests * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * feat(api): api update * fix(adk): fix to queue drain (scaleapi#327) Co-authored-by: Declan Brady <[email protected]> * codegen metadata * Add task_id to span creation (scaleapi#329) * release: 0.10.2 * fix(tests): repair test_streaming_model so all 28 tests run and pass (scaleapi#334) Four pre-existing bugs left this entire test file unrunnable on main (4 failures + 24 errors); fixing them here so the suite actually exercises TemporalStreamingModel and protects against regressions. Bug 1 (24 errors): `conftest.py` defines fixture `mock_adk_streaming` (no underscore) but every test in TestStreamingModelSettings and TestStreamingModelTools requested it as `_mock_adk_streaming`, so pytest failed to resolve the fixture before the body ever ran. The fixture is ``autouse=True`` and the param value was never used in any test body, so the parameter was vestigial — replaced with `_streaming_context_vars`, which provides the ContextVar setup these tests now actually need. Bug 2 (4 failures): `TemporalStreamingModel.get_response()` reads `task_id`, `trace_id`, and `parent_span_id` from ContextVars populated by `ContextInterceptor` from request headers in real Temporal flows. Tests had been passing `task_id=...` as a kwarg, which is silently swallowed by `**kwargs` and ignored, so all three ContextVars stayed at their defaults and the validation at the top of `get_response` raised before any work happened. New `_streaming_context_vars` fixture in conftest sets all three vars (and resets them on teardown), simulating what `ContextInterceptor` does in production. Bug 3 (test_computer_tool): A recent commit narrowed `ComputerTool` serialization to require an actual `Computer`/`AsyncComputer` instance, but `sample_computer_tool` still built a bare `MagicMock`. Switched to `MagicMock(spec=Computer)` so the production isinstance check passes. Bug 4 (3 streaming-context tests): The 3 tests in TestStreamingModelBasics that assert on `streaming_task_message_context` calls built event sequences with raw `MagicMock(type="...")`. Production dispatches via `isinstance(event, ResponseOutputItemAddedEvent)` etc., which `MagicMock` without `spec` never satisfies, so dispatch was silently skipped and the assertions failed. Switched to `MagicMock(spec=...)` for each event type — passes isinstance without triggering pydantic validation on the event's required fields. Also fixed `test_task_id_threading` which had been asserting against a hardcoded `task_id="test_task_12345"` that was never actually threaded anywhere (the kwarg was ignored, just like in Bug 2); it now asserts against the value yielded by the fixture, which is the value production reads from the ContextVar. After all four fixes: 28/28 pass, ruff clean, pyright clean. * release: 0.10.3 (scaleapi#330) * feat(api): api update * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * chore(internal): more robust bootstrap script * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * fix: use correct field name format for multipart file arrays * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * feat: support setting headers via env * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * codegen metadata * fix: allow litellm security patch (scaleapi#336) * fix(adk): Always inject headers on execute activity (scaleapi#337) * perf(streaming): coalesce per-token publishes to Redis (50ms / 128-char window) (scaleapi#333) * perf(streaming): coalesce per-token publishes to Redis (50ms / 128-char window) Per-token Redis publishes from TemporalStreamingModel were adding ~45s (56-62%) overhead to agent response latency, mostly from head-of-line blocking on the model's event loop: each `await streaming_context.stream_update(...)` inside the OpenAI stream `async for` paused token consumption until the publish round-trip completed. This change introduces a `CoalescingBuffer` driven by an `asyncio.Event`, so the producer never awaits on Redis. Deltas are merged consecutive-only (preserving character order in every (type, index) channel) and flushed on a 50ms timer, on a 128-char size threshold, or immediately for the first delta to keep perceived responsiveness high. The buffer's `close()` drains remaining deltas before the DONE event, so consumers see the full sequence in order. A new `StreamingMode = Literal["off", "per_token", "coalesced"]` lives in `streaming.py` as the single source of truth and is plumbed through the adk streaming module, `StreamingService.streaming_task_message_context`, and `StreamingTaskMessageContext`. Default is `"coalesced"` everywhere, so all 13+ existing context callers (claude_agents, langgraph, litellm provider, openai sync provider, etc.) benefit automatically. * chore(streaming): fix import ordering (ruff I001) * fix(streaming): address greptile review findings - _run: when CancelledError is raised mid-flush in the for-loop, re-enqueue the in-flight item plus any remaining items in the local `drained` list back into self._buf so close()'s final drain can recover them. Previously the local `drained` list was unreachable after CancelledError exited the for-loop, causing the last coalesced batch to be silently dropped on close-during-flush races. Trade-off: the in-flight item may be duplicated on the consumer side (Redis pub may have completed before cancel was delivered), which is preferable to silent loss for streaming UX. - _merge_pair: replace `return b` fallback with AssertionError. All six current TaskMessageDelta variants have explicit isinstance branches, so the fallback is unreachable today. But _can_merge returns True for any same-type pair, so adding a 7th delta variant without updating _merge_pair would silently drop `a`'s accumulated content. Asserting turns a future silent data-loss into an immediate, diagnosable crash. * test(streaming): add coalescing-layer tests; loosen one model assertion After merging the test-suite repair from main (scaleapi#334) into this branch, one model test (test_responses_api_streaming) regressed because its assert_called_with strict-matched all kwargs of streaming_task_message_context and didn't tolerate the new `streaming_mode='coalesced'` kwarg this PR adds. Switched to assert_called() + targeted kwarg checks so the test verifies what it cares about (task_id threading) without locking in implementation details. Replaced the ad-hoc smoke scripts that lived in conversation with a real pytest module at tests/lib/core/services/adk/test_streaming.py covering: - _delta_char_len, _can_merge, _merge_pair: per-channel correctness + None-handling - _merge_consecutive: pure-text collapse, cross-channel order preservation, per-channel reconstruction matches per-token semantics - CoalescingBuffer: first-delta-immediate flush within ~20ms, size-threshold flush before timer fires, multi-delta coalescing within one window, idle close, add-after-close no-op - CoalescingBuffer cancel-during-flush regression test for the P1 fix: five queued chunks must all surface across publishes when close() cancels mid-flush (asserts substring presence rather than exact ordering, since the documented trade-off allows duplicates of the in-flight item) - StreamingTaskMessageContext mode dispatch: "off" suppresses publishes but persists full content, "per_token" publishes each delta synchronously, "coalesced" batches and persists full content * chore(streaming): route TemporalStreamingModel logger through make_logger The model file used raw ``logging.getLogger("agentex.temporal.streaming")``, which returns a logger with no handler attached and no level configured — so the existing ``[TemporalStreamingModel] Initialized ... streaming_mode=...`` INFO log was silently dropped, making it impossible to verify at runtime that a coalesced (or any) streaming mode was actually wired. Switch to the SDK's ``make_logger`` helper (level=INFO, RichHandler in local mode, StreamHandler otherwise) used everywhere else in the SDK. The explicit logger name ``agentex.temporal.streaming`` is preserved so any external logging configuration targeting that name keeps working. * codegen metadata * feat(api): api update * release: 0.10.3 --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Brandon Allen <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> * release: 0.10.4 (scaleapi#338) Co-authored-by: alvinkam2001 <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * feat(openai_agents): expose real `usage`, `response_id`, plumb `previous_response_id`, opt-in `prompt_cache_key` for stateful responses and prompt caching (scaleapi#335) Co-authored-by: Stas Moreinis <[email protected]> * build(deps) bump scale-gp-beta to 0.2.0 (scaleapi#344) * release: 0.10.5 (scaleapi#343) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Alvin Kam <[email protected]> * Fix Redis stream leak: MAXLEN on xadd + sliding TTL on stream keys (scaleapi#339) * ci: add conventional commit and PR base checks (scaleapi#346) * release: 0.11.0 (scaleapi#345) Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * fix: render .env.example template in agentex init (scaleapi#351) Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> * release: 0.11.1 (scaleapi#350) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Devon Peticolas <[email protected]> * release: 0.11.2 (scaleapi#357) Co-authored-by: Declan Brady <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * release: 0.11.3 (scaleapi#358) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> * release: 0.11.4 (scaleapi#364) Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> * release: 0.11.5 (scaleapi#369) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> * release: 0.11.6 (scaleapi#376) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> * release: 0.11.7 (scaleapi#382) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> * release: 0.11.8 (scaleapi#386) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: James Cardenas <[email protected]> * release: 0.11.9 (scaleapi#389) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: James Cardenas <[email protected]> * release: 0.12.0 (scaleapi#390) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> * chore: release main (scaleapi#393) Co-authored-by: Jerome Romualdez <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Nitesh Dhanpal <[email protected]> * chore: release main (scaleapi#404) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#411) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: James Cardenas <[email protected]> Co-authored-by: Nitesh Dhanpal <[email protected]> * chore: release main (scaleapi#424) Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Vijay Kalmath <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Daniel Miller <[email protected]> * chore: release main (scaleapi#443) Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: OpenAI <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#448) Co-authored-by: Endre Berki <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#452) Co-authored-by: Jerome Romualdez <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#456) Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: Max Parke <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#457) Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Vijay Kalmath <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Daniel Miller <[email protected]> * chore: release main (scaleapi#461) Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Levi Lentz <[email protected]> * chore: release main (scaleapi#463) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Declan Brady <[email protected]> * chore: release main (scaleapi#464) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Declan Brady <[email protected]> * chore: release main (scaleapi#475) Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Deepthi Rao <[email protected]> * chore: release main (scaleapi#479) Co-authored-by: Deepthi Rao <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#483) Co-authored-by: Deepthi Rao <[email protected]> Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]> Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> * chore: release main (scaleapi#487) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Javed Shaik <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Alvin Kam <[email protected]> * chore: release main (scaleapi#492) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> * chore: release main (scaleapi#499) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Claude Opus 4.8 <[email protected]> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Alvin Kam <[email protected]> * codegen metadata * feat(tracing): add opt-in commit SHA stamping for SGP spans (scaleapi#505) Co-authored-by: Claude Opus 5 <[email protected]> * codegen metadata * chore: release main (scaleapi#506) Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Cynthia Wang <[email protected]> Co-authored-by: Claude Opus 5 <[email protected]> Co-authored-by: Rishav Chakravarti <[email protected]> Co-authored-by: Declan Brady <[email protected]> * ci: guard production-only workflows so they no-op on staging The promote model keeps staging main and production main SHA-identical, so every workflow file is shared. Four of them are production-app-specific and have none of their secrets on staging, where they would run and fail red on every codegen push -- and permanently red staging CI is what makes a genuinely red build invisible. Guarded on github.repository: agentex-tutorials-test (TUTORIAL_* keys), build-and-push-tutorial-agent (PACKAGE_TOKEN), harness-integration, and publish-pypi (matching the ts side, whose publish-npm is already guarded). Entry jobs only -- dependents skip via needs -- except test-summary, which is if: always() and so needed the condition ANDed. ci.yml is deliberately left unguarded: it references no secrets and running the SDK's own lint/test on staging is a useful signal that codegen is sound. Co-Authored-By: Claude Opus 5 <[email protected]> * ci(bandit): read scan results from file instead of passing them as argv The 'Format results appropriately from results.json' step passed the entire results file as a single shell argument: jq --argjson scanResults "$(<tmp.json)" ... Linux caps one argv entry at MAX_ARG_STRLEN (128KB, 32 pages) regardless of the much larger total ARG_MAX, so once a scan produced more than ~128KB of findings the step died with 'Argument list too long' (exit 126) and failed the whole job -- even though 'shell: bash {0}' and the comment above it intend the logging step to be non-fatal. --slurpfile reads the file directly, so the payload size stops mattering. It wraps the file's values in an array, hence the [0]. Verified to produce byte-identical output to the old form on small inputs, and to handle 20k findings (3.2MB) where the old form exits non-zero. This surfaced on the staging reconciliation PR, where bandit's baseline scan runs against a main branch that has no Python in it -- so every finding in all 792 files landed in results.json at once. Co-Authored-By: Claude Opus 5 <[email protected]> --------- Co-authored-by: stainless-app[bot] <142633134+stainless-app[bot]@users.noreply.github.com> Co-authored-by: Declan Brady <[email protected]> Co-authored-by: Raj Krishnan <[email protected]> Co-authored-by: Daniel Miller <[email protected]> Co-authored-by: Claude Opus 4.6 <[email protected]> Co-authored-by: Prassanna Ravishankar <[email protected]> Co-authored-by: Bruce Pannaman <[email protected]> Co-authored-by: Bruce Pannaman <[email protected]> Co-authored-by: Endre Berki <[email protected]> Co-authored-by: Levi Lentz <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: Brandon Allen <[email protected]> Co-authored-by: alvinkam2001 <[email protected]> Co-authored-by: Devon Peticolas <[email protected]> Co-authored-by: Jean Lucas <[email protected]> Co-authored-by: Michael Chou <[email protected]> Co-authored-by: Max Parke <[email protected]> Co-authored-by: Matteo Librizzi <[email protected]> Co-authored-by: Stas Moreinis <[email protected]> Co-authored-by: James Cardenas <[email protected]> Co-authored-by: Jerome Romualdez <[email protected]> Co-authored-by: Nitesh Dhanpal <[email protected]> Co-authored-by: Vijay Kalmath <[email protected]> Co-authored-by: OpenAI <[email protected]> Co-authored-by: Cursor <[email protected]> Co-authored-by: Levi Lentz <[email protected]> Co-authored-by: Deepthi Rao <[email protected]> Co-authored-by: Javed Shaik <[email protected]> Co-authored-by: Cynthia Wang <[email protected]> Co-authored-by: Rishav Chakravarti <[email protected]> Co-authored-by: stlc-bot <[email protected]>
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.