chore: version packages - #28
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
4 times, most recently
from
August 12, 2026 08:54
ec7d7ee to
a5d1d90
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 25, 2026 08:37
a5d1d90 to
2995ece
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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
a2a-claude@0.4.0
Minor Changes
f3c7062: Handle Claude rate limit events instead of failing the turn generically.
Rate-limit signals were previously unrecognised:
rate_limit_event,system/api_retry, and assistantrate_limiterrors all fell through to adebug log, and the turn surfaced as
failedwith"Error during execution."A rejection now ends the turn immediately with an
input-requiredstatus namingthe limit type and reset time, plus structured metadata (
reason,rateLimitType,resetsAt,resetsAtIso,utilization, anderrorCode/canPurchaseCreditswhen the SDK reports them). The task stays non-terminal, sothe client continues the same conversation on the same task once the limit
resets. Configurable via
rateLimit.taskStatefor clients that require aterminal state.
This does not shorten the SDK's own retry behaviour: a
system/api_retryisdeliberately treated as a warning that does not end the turn, so the SDK's
internal retries still run to exhaustion inside the same
timeouts.promptwindow. The turn ends only once the SDK gives up and emits an assistant
rate_limiterror. Those retries are at least visible now, asrate_limitsideband events with
action: "retrying"carrying the SDK'sattempt,maxRetries, anddelayMs.A rejection whose overage window is still open is treated as a warning rather
than a rejection, since the request may proceed on overage credits; if it does
not, the assistant
rate_limiterror still ends the turn. Limit details arenever fabricated — a limit type or reset time is inherited by a later signal
only from a snapshot that reported pressure, utilization is never inherited, and
a reset time that is not in the future is dropped.
Adds a
rate_limitsideband event type to@a2a-wrapper/core, gated byfeatures.emitRateLimitEvents.41e2d82: Hold the A2A Task open while Claude has background work in flight.
A Task used to reach a terminal state as soon as Claude's first turn ended —
even when that turn had just started a background process and said it was
waiting on the result. A2A gives an agent no way to open a new turn against a
terminal Task, so the follow-up report had nowhere to land.
The Task now stays in
workingfor as long as Claude reports background workrunning, and completes only once a turn ends with nothing left. Each turn
publishes its own
responseartifact and a non-finalworkingstatus updatewhose
metadata.backgroundTaskslists what is still in flight. Chains of anylength work this way, as rounds of one Task rather than several Tasks.
Controlled by
features.holdTaskForBackgroundWork(defaulttrue; setfalsefor the old complete-at-first-result behavior) andfeatures.emitBackgroundTaskEvents(defaulttrue), which publishes a newbackground_taskssideband event — added to@a2a-wrapper/core— each timethe live set changes.
Bumps
@anthropic-ai/claude-agent-sdkfrom0.3.202to0.3.245. Thefeature needs at least
0.3.235, the first version to emitbackground_tasks_changed.Three changes apply even with
holdTaskForBackgroundWorkoff:makes the SDK close the CLI subprocess's stdin on the first result, which
ends the process before a second round is possible. This is not switchable.
agent_started/agent_finishedare emitted once per A2A Task rather thanonce per SDK turn.
responseartifact.
See the a2a-claude README for caveats, including how
claude.maxTurnsandtimeouts.promptnow span a held-open Task's rounds.ddc0861: Allow
timeouts.promptto be disabled by setting it to0(or any value<= 0). Previously every turn was bounded at ten minutes by default with no way to opt out, which cut off legitimately long-running turns.Negative values were also a footgun:
setTimeoutcoerces a negative delay to the next tick, soprompt: -1— the intuitive spelling for "no timeout" — aborted the turn immediately instead of disabling the bound. The timer is now armed only for positive values, matching the "set to0to disable" convention already used forhealthCheck.a9101a1: Breaking: a rate limit now always fails the task. The
rateLimit.taskStateconfig option is removed.
It previously defaulted to
input-required, on the reasoning that leaving thetask open let the client continue the same conversation. That reasoning does not
hold:
ctx.taskonly suppresses the initialTaskrecord; the prompt sent is always the new user message, and there is noreplay or continue-previous-turn logic. A follow-up on the open task is just a
new prompt appended to the conversation — exactly what a new task would send.
contextId→ Claude session mapping inSessionManager, which is indifferentto how a task ended. A new task on the same
contextIdresumes the identicalClaude session.
input-requiredmeans the agent lacks information. A rate limit lacksquota; nothing the client sends unblocks it, only elapsed time. Clients with
generic
input-requiredhandling would prompt a human for input nobody wants.final: truewas also internallyinconsistent.
The status message now always points at the
contextIdrather than the closedtask, and still carries the structured metadata (
reason,rateLimitType,resetsAt,resetsAtIso,utilization) that an orchestrator needs to scheduleits own retry.
features.emitRateLimitEventsis unchanged.Migration: remove any
rateLimitblock from your config. If your orchestratoralerts on failed tasks, key the suppression on
metadata.reason === "rate_limit".3ec9e49: Breaking: session expiry is now disabled by default (
session.ttldefaultsto
0), and the background cleanup sweep with it (session.cleanupIntervalalso defaults to
0). Set"session.ttl": 3600000and"session.cleanupInterval": 300000to restore the previous behaviour.Previously sessions expired one hour after their first message regardless of
activity, which silently dropped the
contextId→ Claude session mapping andmade a conversation lose all of its context with no error and only an
info-level log line. Evicting the record reclaimed no disk either — the wrappernever deletes SDK session files, so eviction orphaned the transcript rather than
removing it.
session.ttl <= 0now disables expiry in both eviction paths. A positivettlbehaves as before.
cleanupIntervalis only ever consulted whenttl > 0— with expiry off thereis nothing to sweep — so leaving it at
300000alongsidettl: 0was deadconfiguration that read as if it did something. It now defaults to
0to match,and both example configs drop it entirely. If you set
ttlon its own you getexpiry via the lazy check in
getOrCreate, but a context that is never usedagain holds its record until the process exits; set
cleanupIntervaltoo if youwant that reclaimed. Both disabled states are now logged at startup, so neither
can be lost silently.
Known consequence: if a Claude session's on-disk transcript is removed while the
server is running, the stored
contextId→sessionIdmapping is now pinned forthe life of the process instead of being evicted within the hour, so turns on
that context keep failing to resume until the server restarts. Previously the
one-hour expiry masked this by self-healing.
Patch Changes
@a2a-wrapper/core@2.1.0
Minor Changes
f3c7062: Handle Claude rate limit events instead of failing the turn generically.
Rate-limit signals were previously unrecognised:
rate_limit_event,system/api_retry, and assistantrate_limiterrors all fell through to adebug log, and the turn surfaced as
failedwith"Error during execution."A rejection now ends the turn immediately with an
input-requiredstatus namingthe limit type and reset time, plus structured metadata (
reason,rateLimitType,resetsAt,resetsAtIso,utilization, anderrorCode/canPurchaseCreditswhen the SDK reports them). The task stays non-terminal, sothe client continues the same conversation on the same task once the limit
resets. Configurable via
rateLimit.taskStatefor clients that require aterminal state.
This does not shorten the SDK's own retry behaviour: a
system/api_retryisdeliberately treated as a warning that does not end the turn, so the SDK's
internal retries still run to exhaustion inside the same
timeouts.promptwindow. The turn ends only once the SDK gives up and emits an assistant
rate_limiterror. Those retries are at least visible now, asrate_limitsideband events with
action: "retrying"carrying the SDK'sattempt,maxRetries, anddelayMs.A rejection whose overage window is still open is treated as a warning rather
than a rejection, since the request may proceed on overage credits; if it does
not, the assistant
rate_limiterror still ends the turn. Limit details arenever fabricated — a limit type or reset time is inherited by a later signal
only from a snapshot that reported pressure, utilization is never inherited, and
a reset time that is not in the future is dropped.
Adds a
rate_limitsideband event type to@a2a-wrapper/core, gated byfeatures.emitRateLimitEvents.41e2d82: Hold the A2A Task open while Claude has background work in flight.
A Task used to reach a terminal state as soon as Claude's first turn ended —
even when that turn had just started a background process and said it was
waiting on the result. A2A gives an agent no way to open a new turn against a
terminal Task, so the follow-up report had nowhere to land.
The Task now stays in
workingfor as long as Claude reports background workrunning, and completes only once a turn ends with nothing left. Each turn
publishes its own
responseartifact and a non-finalworkingstatus updatewhose
metadata.backgroundTaskslists what is still in flight. Chains of anylength work this way, as rounds of one Task rather than several Tasks.
Controlled by
features.holdTaskForBackgroundWork(defaulttrue; setfalsefor the old complete-at-first-result behavior) andfeatures.emitBackgroundTaskEvents(defaulttrue), which publishes a newbackground_taskssideband event — added to@a2a-wrapper/core— each timethe live set changes.
Bumps
@anthropic-ai/claude-agent-sdkfrom0.3.202to0.3.245. Thefeature needs at least
0.3.235, the first version to emitbackground_tasks_changed.Three changes apply even with
holdTaskForBackgroundWorkoff:makes the SDK close the CLI subprocess's stdin on the first result, which
ends the process before a second round is possible. This is not switchable.
agent_started/agent_finishedare emitted once per A2A Task rather thanonce per SDK turn.
responseartifact.
See the a2a-claude README for caveats, including how
claude.maxTurnsandtimeouts.promptnow span a held-open Task's rounds.a2a-antigravity@0.2.1
Patch Changes
a2a-codex@1.7.1
Patch Changes
a2a-copilot@1.8.1
Patch Changes
a2a-opencode@1.7.1
Patch Changes