Repository navigation
[release] v0.125.2 - #7826
[release] v0.125.2#7826
Conversation
A time limit used to end a turn like a provider refusal: the runner destroyed the harness session and dropped the turn's work from both the native transcript and the text replay. The next message then started over with only the person's messages. Stop the harness the way a Stop does when the total, idle or tool-call limit trips. When it answers, keep the turn as the resume point with its work. The text replay keeps a time-limited turn's work too, and marks a command without a result as an unknown outcome.
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
… once A long, healthy turn was stopped with output_limit_exceeded after 58 minutes and 245 tool calls. The budget counted every provider update for the whole turn, and Pi resends the full output of a running command on every progress update (twice, in content and rawOutput). A few test runs used most of the 16 MiB, although the runner keeps only the final result. The budget now applies per step (one model reply or one tool call), so a runaway step is still stopped. A tool progress update is charged only for the bytes it adds over the largest earlier update of the same call. A looser turn backstop (64 MiB, 500,000 updates) stays as a safety net. The user-facing message is unchanged; the runner log names the limit.
…g flags The two per-organization rollout flags now cover every organization, so the master switches decide alone: AGENTA_LLM_GATEWAY_ENABLED for the LLM gateway and AGENTA_WALLETS_ENABLED for the wallet. - Remove core/rollout/switches.py and AGENTA_ROLLOUT_FLAGS_ENABLED. - Remove the wallet shadow mode. With the wallet on, every admission point enforces, as every organization does in production today. - The wallet summary still returns mode, now off or enforce. - The gateway default stays off.
…rivate agents in channels A chat that came from Slack or Telegram was read-only for every person: the sharing rules made channel sessions view only. Members now send to project-visible channel chats like any project chat. A private agent may now answer in a channel. Only its owner binds it, a make-private no longer turns its bindings off, and the channel chats it creates are private to its owner. Only the owner's bindings run the private agent and act in those chats, and only the channel's own run creates a channel thread's session.
…running A Stop through POST /sessions/streams/ (and a watchdog takeover or a newer turn) moves the session's running turn while the runner still streams. The next live-frame batch failed the running-owner check with 403. The runner reads every 403 as lost access, so it ended the turn with access_denied and skipped the turn's own records: the partial answer and the done record were lost. A frame of a turn that is not the running one now answers 409 when the caller may run the session and the session exists. That check is always the full session check, never the turn's admission, which the request may have read before the Stop. A hidden or unknown session, a caller who may only view, and a caller who lost the capability keep their 403, so a runner whose person lost access still ends access_denied. Every refused frame still publishes nothing. Runners already deployed read 409 as a dropped frame batch, so this API change alone fixes them. No added statement or round trip on the running-frame, record or send paths.
…ts follow the owner's ruling
feat(sdk): add Claude Haiku 5.5 to the model catalogs
Website previewPreview URL: https://pr-7826-agenta-website-preview.mahmoud-637.workers.dev Built from |
Railway Preview Environment
Dependent tests finished. Post /preview for manual review. Environment absence verified; retained storage requires separate provider accounting. Post |
The tracer records every tool_call_update with new arguments as its own event, so those copies stay in memory. Only progress updates without arguments get the growth-only charge now.
Rebased on release/v0.125.2 and relocked with uv 0.11.14, the uv version the services Dockerfile pins, so the lockfile keeps revision 3.
The update that completes or fails a tool call is kept as its result, so a reused call id could otherwise keep many results while each was charged only for its growth. The stop message now names the turn limits when the turn backstop trips.
… the cancel as cancelled A prompt that ended on its own in the cancel window, with an error above all, may hold content a provider refused, so the failed-turn rule applies to it.
[docs] Update API reference docs
📘 Docs preview
Pages changed in this pull request This comment updates in place on every push. |
fix(api): keep the partial answer after Stop and end the turn as stopped
A first send waits for the workflow before it goes out. If the user opened another session meanwhile, the workflow query that was still loading never reached the unsubscribed atom the request builder reads, so the send timed out and the failure path deleted the fresh session row. Hold the workflow subscription while the request is built, so the send goes out off screen. When a send still fails after the screen closed, keep the session and store the message as a failed task that the chat screen offers again with its retry.
fix(api): make the embed token scan linear
…i-2026.10.18 chore(deps): bump certifi from 2026.6.17 to 2026.10.18 in /services
…step [fix] Apply the runner output budget per step, not per turn
fix(services): install the mcp package litellm needs for MCP tools
…me-limit fix(runner): keep a turn's work when a time limit ends it
chore(api): remove the llm-gateway-rollout and wallets-rollout PostHog flags
…ound the secret reads Concurrent references to one integration each crawled the whole provider catalog when the cache was cold. Concurrent calls for the same catalog now share one fetch. The named-secret reads keep at most 8 requests in flight, so a long list cannot wait out the HTTP pool and read as missing.
…l's fallback list Pi 0.99.1 does not know claude-haiku-5-5, so the runner registered it with the compat of the first anthropic built-in (claude-fable-5). That compat carries allowedFallbackModels, Pi sent a fallbacks field, and the gateway refused every turn with HTTP 400 routing_field_not_allowed. The span cost was also $0. - Add anthropic/claude-haiku-5-5 to PI_MODELS_AHEAD_OF_CATALOG, inheriting from claude-haiku-4-5 with the prices from the SDK curated catalog. - An unknown model now borrows only the compat its closest siblings share, and a registered id never inherits allowedFallbackModels.
…session-switch fix(frontend): keep a sent message when the user switches sessions
…l-calls perf(api,sdk): run the agent turn-start lookups in parallel
… price tier; list it in the Pi picker - Haiku 5.5 rejects budget_tokens thinking, so inherit Sonnet 5.5's request surface (forceAdaptiveThinking, 1M context, 128K output) instead of Haiku 4.5's, and add the 5x price tier above 100,000 input tokens. - Add anthropic/claude-haiku-5-5 to the Anthropic default models, so the Pi model picker lists it next to Haiku 4.5.
fix(runner): make Haiku 5.5 run on Pi and list it in the picker
…before it is sent A message typed on Home or an agent's page waits on the chat screen until the transcript, the vault and the setup step answer. Opening another chat during that wait unmounted the only code that sends it, so it never went out, the session got no rail row, and the rail link carries no agent, so coming back showed "This chat does not exist". When the chat screen leaves a session whose task was not on its way, mark the task failed and list the session in the rail. On return the chat screen takes the agent from the task and shows the "Message not sent" card with Retry. Retry also waits for a template's connect step.
fix(frontend): keep a first message when the user opens another chat before it is sent
fix(api,frontend): let people write to channel chats in /m and keep private agents in channels
mmabrouk
left a comment
There was a problem hiding this comment.
🤖 The AI agent says: Approved on Mahmoud's instruction after the v0.125.2 production deploy went green in US (workflow 29 runs 40476720492 and 40477766440) and EU (runs 40479740192 and 40481870851), deployed in two steps per region, with live checks passing in both regions.
New version v0.125.2 in
Final QA
fix(runner): keep a turn's work when a time limit ends it #7823 On a stage, set the runner's
AGENTA_RUNNER_RUN_TOTAL_TIMEOUT_MSlow (for example 120000), and run a Pi agent turn that runs several shell commands for longer than that. After the time-limit error, send "continue". Pass: the agent goes on from its earlier work and does not run the earlier commands again, and the runner log showsstage=harness_cancel sent=true settled=truefor that turn.[fix] Apply the runner output budget per step, not per turn #7829 On a stage, run an agent turn with many tool calls and one tool that prints a lot of output while it runs (for example a long test suite). Pass: the turn finishes with no
output_limit_exceeded, and the tool's final result shows in the session.fix(services): install the mcp package litellm needs for MCP tools #7830 On a stage, send a completion request with an
mcptool through services. Pass: no HTTP 500 with "No module named 'mcp'".perf(api,sdk): run the agent turn-start lookups in parallel #7832 On a stage, send to an agent with several tools (two or more from one integration), a model connection and a few named secrets. Pass: the turn starts and runs as before, and the services log shows a shorter wait before the runner starts. Also send to an agent whose tool resolve fails (for example a removed connection). Pass: the same error as before reaches the user.
fix(frontend): keep a sent message when the user switches sessions #7834 In /m, open a new agent session, send the first message, and switch to another session right away (use network throttling). Come back after 20 s. Pass: the turn ran. Then block the workflow revision request in devtools, send, and switch away. Come back. Pass: the session is still listed and shows "Message not sent" with "Retry message", and Retry sends the saved text.