Skip to content

perf(think): broadcast transcript deltas at turn boundaries - #2235

Closed
mattzcarey wants to merge 3 commits into
mainfrom
perf/think-delta-broadcasts
Closed

mattzcarey wants to merge 3 commits into
mainfrom
perf/think-delta-broadcasts

Conversation

@mattzcarey

@mattzcarey mattzcarey commented Sep 10, 2026 •

Copy link
Copy Markdown
Member

Problem

Think._broadcastMessages() serialises the whole cached transcript (up to the 32 MiB hydration budget) to every connected socket, and runs at least twice per turn: after the incoming persist and after the assistant cutover. On a long transcript every turn costs two full snapshots per client.

Change

Protocol (shared, packages/agents/src/chat) — this is a wire change:

  • New server→client frame cf_agent_chat_messages_delta { epoch, messages }: only the messages a turn boundary persisted (upsert by id; unknown ids append in order).
  • cf_agent_chat_messages gains an optional epoch naming the snapshot.
  • New client→server frame cf_agent_chat_client_capabilities { capabilities: { transcriptDeltas } }: useAgentChat declares it on every socket open, and the server sends deltas only to connections that declared it.
  • Backward compatible in both directions: a client that never declares transcriptDeltas (any older agents release) keeps receiving full snapshots; older servers never send a delta, and their epoch-less snapshots make the client refuse every delta.

Client (useAgentChat) — stores the epoch of the last snapshot applied and drops any delta whose epoch differs, so a delta arriving before its snapshot, or after the server re-derived its transcript, is never applied out of order. Delta upsert keeps the protected streaming assistant and the cross-tab observed accumulator exactly as the snapshot path does.

Server (think.ts) — _cacheEpoch bumps in _replaceCachedMessages (hydration, branch/regeneration resync, compaction, clear, repair). Each connection records the epoch of the last snapshot it was sent (connect, dropped-submit rollback, or broadcast). _broadcastMessagesDelta(ids) sends a delta only when every connection is aligned to the current epoch; otherwise it sends the full frame, which re-aligns everyone.

Now deltas: incoming persist (_handleChatRequest, chat() RPC, programmatic turns), addMessages, and the happy-path assistant cutover (WS and RPC).

Still a full snapshot, and why:

  • connect / resume / dropped-submit rollback — the client has no base
  • a connection that joined mid-stream — never received a snapshot (resume replays chunks only); forces the cutover broadcast to be full
  • regeneration / branch — the resync bumps the epoch; rows before the tail change
  • clear, compaction — the cache is re-derived (epoch bump)
  • transcript repair, orphan materialisation — rows the client never streamed change in place
  • stalled / errored partial re-anchors — left as-is (rare, safety over bytes)
  • post context-overflow retry — the client rendered chunks that were discarded without persisting; only a snapshot reconciles them (explicit _transcriptNeedsSnapshot flag at both comment sites)
  • any boundary where a persisted id is not in the cache (windowed cache, message stripped to nothing)

ai-chat is untouched server-side (still snapshots) but shares the client, so it can adopt the frame later.

Numbers

packages/think/src/tests/delta-broadcasts.test.ts (fails on main): 40-message transcript, one observer.

  • Before: 2 × cf_agent_chat_messages per turn, ~86 KiB each
  • After: 2 × cf_agent_chat_messages_delta, one row each (bench asserts < 1/20 of a snapshot)

Tests

  • Server: turn = two deltas on a large transcript; clear → next boundary is a snapshot with a new epoch then deltas; mid-stream connect gets a snapshot (and an aligned peer gets that same broadcast), then both are back on deltas.
  • Client (packages/think/src/react-tests/delta-broadcasts.test.tsx): delta before snapshot dropped; wrong epoch / other instance dropped; matching delta upserts and appends; newer snapshot re-keys the guard; epoch-less snapshot accepts no deltas.
  • Adjusted think-session, assistant-agent, and the e2e waitForMessagesBroadcast barrier to accept delta frames.

Suites: think workers 897/897, think react 7/7, ai-chat workers 653/653, agents chat 545/545, agents react 136/136.

Review fixes

  • Mid-turn addMessages / broadcast: false rows reached no client. Both paths suppress their own broadcast and used to ride the turn's next full snapshot; under deltas that frame names only the assistant row. Suppressed ids are now recorded (_deferTranscriptIds) and folded into the next transcript frame, cleared only once one reached every connection.
  • Old clients no longer go stale. Deltas are negotiated: cf_agent_chat_client_capabilities on every socket open, _transcriptDeltaCapable per connection on the server, and _everyConnectionAligned requires both alignment and capability — a single undeclared client holds everyone to snapshots rather than leaving it frozen.
  • Protected streaming assistant reconciles. The delta path now has the snapshot path's useAgentChat can reorder terminal HITL snapshots when protected assistant is followed by later assistant #1778 escape hatch (a later assistant after the protected one clears protection and trusts the server), and a delta naming a protected message is held rather than dropped: restoreProtectedStreamingAssistant applies the persisted copy when the stream finishes.
  • Id parity with the snapshot path. A row matched through a shared toolCallId now adopts the server's id instead of keeping the locally minted one.
  • _transcriptNeedsSnapshot is no longer cleared by a broadcast that excluded a live connection — that connection is still owed the snapshot.
  • Epoch is derived, not bumped blindly. _replaceCachedMessages keeps the epoch when the re-read leaves every row a client holds untouched (identical, or appended at the tail), so an over-budget windowed transcript — which re-reads storage at every incoming turn — stays on deltas instead of falling back to a snapshot every time. The comparison only runs when an aligned, delta-capable connection exists.
  • Delta completeness is now checked by resolved ids, not row count (a duplicated cache id could otherwise mask a missing row).
  • Added a minor changeset for agents and @cloudflare/think.

New tests: server — old client keeps snapshots, a mixed fleet holds everyone to snapshots until the old client leaves, mid-turn tool addMessages rows land on the boundary frame, broadcast: false rows land on the next one, deferred rows stay owed to an excluded connection, and an over-budget windowed transcript stays on deltas. Client — capability declared on open and re-declared on reconnect, server id adopted on a toolCallId match, protected assistant reconciled at stream end, #1778 hatch. Plus parseProtocolMessage coverage for the new frame.

Think's _broadcastMessages() serialised the whole cached transcript (up to
the 32 MiB hydration budget) to every socket at least twice per turn: after
the incoming persist and after the assistant cutover.

Add a cf_agent_chat_messages_delta frame to the shared chat protocol that
carries only the messages a turn boundary persisted, plus the epoch of the
snapshot it applies to. cf_agent_chat_messages now carries that epoch too.
The client (useAgentChat) upserts deltas by id (append for unknown ids) and
drops any delta whose epoch differs from the last snapshot it applied, so a
delta can never land on the wrong base.

Server side, the cache epoch bumps whenever the live cache is wholesale
replaced (hydration, branch/regeneration resync, compaction, clear, repair)
and every connection records the epoch of the last snapshot it was sent. A
delta goes out only when every connection is aligned; otherwise the full
snapshot is sent and re-aligns them. Still full: connect/resume, transcript
repair, orphan materialisation, stalled/errored partial re-anchors, the
post-overflow-retry broadcast (streamed chunks were discarded; only a
snapshot reconciles them), and any boundary where an id is not in the cache.

Bench (think tests/delta-broadcasts): a turn on a 40-message transcript
costs two ~2 KiB deltas instead of two ~86 KiB snapshots.
@changeset-bot

changeset-bot Bot commented Sep 10, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5c34aab

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
agents Minor
@cloudflare/think Minor
@cloudflare/agent-think Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@agent-think

agent-think Bot commented Sep 10, 2026 •

Copy link
Copy Markdown
Contributor

🟡 agents import sizes

Measured 343 runtime imports as minified bundles. The primary size is gzip; raw minified size is included for diagnosis. An existing import growing by more than 10% is marked red. This report is informational.

Red Yellow Green Unchanged New Removed
0 103 0 240 0 0

Compared f6e556f3 with 5c34aaba. Open workflow run.

Changed imports (103)
Status Import Base gzip Head gzip Delta
🟡 agents/chat#parseProtocolMessage 2.5 KiB 2.6 KiB +77 B (+2.98%)
🟡 agents/chat#MessageType 2.4 KiB 2.5 KiB +58 B (+2.32%)
🟡 agents/chat#TIMED_OUT 2.3 KiB 2.4 KiB +43 B (+1.81%)
🟡 agents/chat#isReplayChunk 2.4 KiB 2.4 KiB +44 B (+1.8%)
🟡 agents/chat#CHAT_RECOVERING_FLAG_TTL_MS 2.3 KiB 2.3 KiB +42 B (+1.78%)
🟡 agents/chat#AutoContinuationController 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#CHAT_RECOVERY_ALARM_DEBOUNCE_MS 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_NO_PROGRESS_TIMEOUT_MS 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#normalizeToolInput 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#applyChunkToParts 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#CHAT_MESSAGE_TYPES 2.3 KiB 2.4 KiB +42 B (+1.78%)
🟡 agents/chat#CHAT_RECOVERY_STABLE_RETRY_DELAY_SECONDS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_OOM_RETRIES 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#KV_DELETE_MAX_KEYS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#AGENT_TOOL_STREAM_PROGRESS_BUMP_THROTTLE_MS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#CHAT_STREAM_PROGRESS_CREDIT_THROTTLE_MS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_ATTEMPTS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_WORK 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_STABLE_TIMEOUT_MS 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#ROW_MAX_BYTES 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#CHAT_RECOVERING_KEY 2.3 KiB 2.4 KiB +42 B (+1.77%)
🟡 agents/chat#CHAT_RECOVERY_TASK_NAME 2.3 KiB 2.4 KiB +42 B (+1.76%)
🟡 agents/chat#CHAT_RECOVERY_PROGRESS_KEY 2.3 KiB 2.4 KiB +42 B (+1.76%)
🟡 agents/chat#wrapChatFiberSnapshot 2.3 KiB 2.4 KiB +42 B (+1.76%)
🟡 agents/chat#chatRecoveryTaskRunOptions 2.4 KiB 2.5 KiB +44 B (+1.76%)
🟡 agents/chat#CHAT_RECOVERY_INCIDENT_KEY_PREFIX 2.3 KiB 2.4 KiB +42 B (+1.76%)
🟡 agents/chat#toolResultUpdate 2.4 KiB 2.4 KiB +43 B (+1.75%)
🟡 agents/chat#clientResolvableToolNames 2.3 KiB 2.4 KiB +42 B (+1.75%)
🟡 agents/chat#createAgentToolEventState 2.3 KiB 2.4 KiB +42 B (+1.75%)
🟡 agents/chat#readChatRecoveryProgress 2.3 KiB 2.4 KiB +42 B (+1.75%)
🟡 agents/chat#pendingChatTerminal 2.3 KiB 2.4 KiB +42 B (+1.75%)
🟡 agents/chat#reconcileOrphanPartial 2.4 KiB 2.4 KiB +43 B (+1.75%)
🟡 agents/chat#partAwaitsClientInteraction 2.4 KiB 2.4 KiB +43 B (+1.75%)
🟡 agents/chat#drainInteractionApplies 2.3 KiB 2.4 KiB +42 B (+1.75%)
🟡 agents/chat#recordChatTerminal 2.4 KiB 2.4 KiB +42 B (+1.74%)
🟡 agents/chat#AgentToolStreamProgressThrottle 2.4 KiB 2.4 KiB +42 B (+1.74%)
🟡 agents/chat#StreamProgressCreditThrottle 2.4 KiB 2.4 KiB +42 B (+1.74%)
🟡 agents/chat#interceptAgentToolBroadcast 2.5 KiB 2.5 KiB +44 B (+1.74%)
🟡 agents/chat#shouldCreditStreamProgress 2.4 KiB 2.4 KiB +42 B (+1.73%)
🟡 agents/chat#aiSdkRecoveryCodec 2.3 KiB 2.3 KiB +41 B (+1.73%)
🟡 agents/chat#CHAT_RECOVERY_INCIDENT_TTL_MS 2.3 KiB 2.3 KiB +41 B (+1.73%)
🟡 agents/chat#buildInClauseStrings 2.4 KiB 2.5 KiB +43 B (+1.73%)
🟡 agents/chat#MAX_BOUND_PARAMS 2.3 KiB 2.4 KiB +41 B (+1.73%)
🟡 agents/chat#hasIncompleteToolBatch 2.4 KiB 2.5 KiB +43 B (+1.72%)
🟡 agents/chat#applyToolUpdate 2.4 KiB 2.4 KiB +42 B (+1.72%)
🟡 agents/chat#buildChatRecoveringFrame 2.4 KiB 2.4 KiB +42 B (+1.72%)
🟡 agents/chat#CHAT_LAST_TERMINAL_KEY 2.3 KiB 2.4 KiB +41 B (+1.72%)
🟡 agents/chat#runChatRecoveryExhaustion 2.6 KiB 2.6 KiB +45 B (+1.72%)
🟡 agents/chat#sendIfOpen 2.4 KiB 2.4 KiB +42 B (+1.72%)
🟡 agents/chat#setChatRecovering 2.5 KiB 2.5 KiB +43 B (+1.71%)
🟡 agents/chat#resolveToolMergeId 2.4 KiB 2.4 KiB +42 B (+1.71%)
🟡 agents/chat#clearChatTerminal 2.3 KiB 2.4 KiB +41 B (+1.71%)
🟡 agents/chat#STREAM_RESUME_NONE_REASONS 2.3 KiB 2.4 KiB +41 B (+1.71%)
🟡 agents/chat#listActiveChatRecoveryIncidents 2.4 KiB 2.4 KiB +42 B (+1.7%)
🟡 agents/chat#toolApprovalUpdate 2.4 KiB 2.5 KiB +42 B (+1.7%)
🟡 agents/chat#ChatStreamStalledError 2.4 KiB 2.4 KiB +41 B (+1.7%)
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_TERMINAL_MESSAGE 2.4 KiB 2.4 KiB +41 B (+1.7%)
🟡 agents/chat#unwrapChatFiberSnapshot 2.4 KiB 2.5 KiB +42 B (+1.69%)
🟡 agents/chat#toolPartHasSettledResult 2.3 KiB 2.4 KiB +40 B (+1.67%)
🟡 agents/chat#pausedExecutionUpdate 2.4 KiB 2.4 KiB +41 B (+1.67%)
🟡 agents/chat#byteLength 2.5 KiB 2.5 KiB +42 B (+1.67%)
🟡 agents/chat#PreStreamTurns 2.6 KiB 2.7 KiB +45 B (+1.67%)
🟡 agents/chat#awaitWithDeadline 2.4 KiB 2.4 KiB +41 B (+1.67%)
🟡 agents/chat#createChatFiberSnapshot 2.5 KiB 2.5 KiB +42 B (+1.66%)
🟡 agents/chat#crossMessageToolResultUpdate 2.4 KiB 2.5 KiB +41 B (+1.66%)
🟡 agents/chat#bumpChatRecoveryProgress 2.4 KiB 2.4 KiB +40 B (+1.65%)
🟡 agents/chat#classifyAgentToolChildRecovery 2.4 KiB 2.5 KiB +41 B (+1.65%)
🟡 agents/chat#resolveChatRecoveryConfig 2.6 KiB 2.6 KiB +43 B (+1.64%)
🟡 agents/chat#sweepStaleChatRecoveryIncidents 2.4 KiB 2.5 KiB +41 B (+1.64%)
🟡 agents/chat#isPlatformFailure 2.6 KiB 2.7 KiB +44 B (+1.63%)
🟡 agents/chat#ContinuationState 2.7 KiB 2.7 KiB +44 B (+1.62%)
🟡 agents/chat#createChatTurnTaskDefinition 2.7 KiB 2.7 KiB +44 B (+1.62%)
🟡 agents/chat#iterateWithStallWatchdog 2.6 KiB 2.6 KiB +43 B (+1.62%)
🟡 agents/chat#sanitizeMessage 2.5 KiB 2.6 KiB +42 B (+1.62%)
🟡 agents/chat#AbortRegistry 2.5 KiB 2.6 KiB +42 B (+1.61%)
🟡 agents/chat#TurnQueue 2.6 KiB 2.7 KiB +43 B (+1.61%)
🟡 agents/chat#createChatRecoveryTaskDefinition 2.6 KiB 2.7 KiB +43 B (+1.61%)
🟡 agents/chat#repairInterruptedToolParts 2.6 KiB 2.7 KiB +43 B (+1.6%)
🟡 agents/chat#AgentToolProgressEmitter 2.7 KiB 2.7 KiB +43 B (+1.58%)
🟡 agents/chat#TextSegmentJoiner 2.7 KiB 2.7 KiB +43 B (+1.55%)
🟡 agents/chat#reconcileMessages 2.8 KiB 2.8 KiB +42 B (+1.48%)
🟡 agents/chat#StreamAccumulator 2.9 KiB 3.0 KiB +44 B (+1.46%)
🟡 agents/chat#SubmitConcurrencyController 2.9 KiB 2.9 KiB +43 B (+1.46%)
🟡 agents/chat#dispatchChatRecoveryToHandoff 3.0 KiB 3.1 KiB +45 B (+1.44%)
🟡 agents/chat#persistReconstructedOrphan 3.1 KiB 3.1 KiB +45 B (+1.44%)
🟡 agents/chat#ResumeHandshake 3.0 KiB 3.0 KiB +43 B (+1.42%)
🟡 agents/chat#broadcastTransition 3.2 KiB 3.2 KiB +45 B (+1.39%)
🟡 agents/chat#applyAgentToolEvent 3.2 KiB 3.2 KiB +44 B (+1.35%)
🟡 agents/chat#truncateOlderMessages 3.2 KiB 3.2 KiB +43 B (+1.33%)
🟡 agents/chat#enforceRowSizeLimit 3.5 KiB 3.6 KiB +44 B (+1.22%)
🟡 agents/chat#ChatRecoveryEngine 4.4 KiB 4.4 KiB +42 B (+0.94%)
🟡 agents/chat#ResumableStream 5.1 KiB 5.1 KiB +45 B (+0.87%)
🟡 agents/chat#createChatStreams 6.4 KiB 6.4 KiB +38 B (+0.58%)
🟡 agents/chat/react#useAgentChat 132.9 KiB 133.2 KiB +322 B (+0.24%)
🟡 agents/chat/react#getToolInput 3.1 KiB 3.1 KiB +2 B (+0.06%)
🟡 agents/chat/react#getToolCallId 3.1 KiB 3.1 KiB +2 B (+0.06%)
🟡 agents/chat/react#extractClientToolSchemas 3.2 KiB 3.2 KiB +2 B (+0.06%)
🟡 agents/chat/react#getToolOutput 3.1 KiB 3.1 KiB +1 B (+0.03%)
🟡 agents/chat/react#getToolApproval 3.1 KiB 3.1 KiB +1 B (+0.03%)
🟡 agents/chat#createToolsFromClientSchemas 114.3 KiB 114.3 KiB +37 B (+0.03%)
🟡 agents/chat/react#getToolPartState 3.2 KiB 3.2 KiB +1 B (+0.03%)
🟡 agents/chat/react#detectToolsRequiringConfirmation 3.3 KiB 3.3 KiB +1 B (+0.03%)
🟡 agents/chat/react#WebSocketChatTransport 5.7 KiB 5.7 KiB +1 B (+0.02%)
All 343 current runtime imports
Status Import Gzip Raw minified
⚪ agents#__DO_NOT_USE_WILL_BREAK__agentContext 261.1 KiB 1141.0 KiB
⚪ agents#__DO_NOT_USE_WILL_BREAK__withInvocationScope 261.1 KiB 1141.0 KiB
⚪ agents#Agent 261.1 KiB 1141.0 KiB
⚪ agents#AGENT_TOOL_MILESTONE_PART 261.1 KiB 1141.0 KiB
⚪ agents#AGENT_TOOL_PROGRESS_PART 261.1 KiB 1141.0 KiB
⚪ agents#buildAgentPath 261.7 KiB 1143.3 KiB
⚪ agents#buildAgentUrl 261.8 KiB 1143.7 KiB
⚪ agents#callable 261.1 KiB 1141.0 KiB
⚪ agents#camelCaseToKebabCase 261.1 KiB 1141.0 KiB
⚪ agents#createHeaderBasedEmailResolver 261.3 KiB 1141.4 KiB
⚪ agents#DEFAULT_AGENT_STATIC_OPTIONS 261.1 KiB 1141.0 KiB
⚪ agents#DurableObjectOAuthClientProvider 261.1 KiB 1141.0 KiB
⚪ agents#getAgentByName 261.1 KiB 1141.0 KiB
⚪ agents#getCurrentAgent 261.1 KiB 1141.0 KiB
⚪ agents#getSubAgentByName 261.4 KiB 1141.6 KiB
⚪ agents#isDurableObjectCodeUpdateReset 261.1 KiB 1141.0 KiB
⚪ agents#isDurableObjectMemoryLimitReset 261.1 KiB 1141.0 KiB
⚪ agents#isDurableObjectStorageReset 261.1 KiB 1141.0 KiB
⚪ agents#isPlatformTransientError 261.1 KiB 1141.0 KiB
⚪ agents#MCP_SERVER_ID_MAX_LENGTH 261.1 KiB 1141.0 KiB
⚪ agents#MessageType 261.2 KiB 1141.3 KiB
⚪ agents#normalizeServerId 261.1 KiB 1141.0 KiB
⚪ agents#parseSubAgentPath 261.1 KiB 1141.0 KiB
⚪ agents#routeAgentEmail 261.4 KiB 1141.7 KiB
⚪ agents#routeAgentRequest 261.7 KiB 1142.9 KiB
⚪ agents#routeSubAgentRequest 261.3 KiB 1141.5 KiB
⚪ agents#SqlError 261.1 KiB 1141.0 KiB
⚪ agents#StreamingResponse 261.1 KiB 1141.0 KiB
⚪ agents#SUB_PREFIX 261.1 KiB 1141.0 KiB
⚪ agents#unstable_callable 261.2 KiB 1141.2 KiB
⚪ agents/agent-tools#agentTool 112.5 KiB 538.2 KiB
⚪ agents/browser#BrowserConnector 50.5 KiB 176.6 KiB
⚪ agents/browser#browserContent 36.3 KiB 127.4 KiB
⚪ agents/browser#browserExtract 36.3 KiB 127.4 KiB
⚪ agents/browser#browserLinks 36.3 KiB 127.4 KiB
⚪ agents/browser#browserMarkdown 36.3 KiB 127.4 KiB
⚪ agents/browser#browserPdf 36.3 KiB 127.3 KiB
⚪ agents/browser#BrowserRenderingError 36.0 KiB 126.7 KiB
⚪ agents/browser#browserScrape 36.3 KiB 127.4 KiB
⚪ agents/browser#browserScreenshot 36.3 KiB 127.3 KiB
⚪ agents/browser#browserSnapshot 36.3 KiB 127.4 KiB
⚪ agents/browser#CdpSession 37.2 KiB 129.8 KiB
⚪ agents/browser#CodemodeRuntime 39.6 KiB 139.0 KiB
⚪ agents/browser#connectBrowser 37.8 KiB 131.4 KiB
⚪ agents/browser#connectBrowserSession 37.5 KiB 130.4 KiB
⚪ agents/browser#connectUrl 37.6 KiB 130.5 KiB
⚪ agents/browser#createBrowserSession 36.3 KiB 127.5 KiB
⚪ agents/browser#DEFAULT_EXEC_SWEEP_IDLE_MS 36.0 KiB 126.6 KiB
⚪ agents/browser#DEFAULT_SWEEP_IDLE_MS 36.0 KiB 126.6 KiB
⚪ agents/browser#deleteBrowserSession 36.1 KiB 126.9 KiB
⚪ agents/browser#DurableBrowserSessionStore 36.4 KiB 127.6 KiB
⚪ agents/browser#getBrowserRecording 36.2 KiB 127.1 KiB
⚪ agents/browser#listBrowserTargets 36.1 KiB 126.9 KiB
⚪ agents/browser#loadCdpSpec 36.6 KiB 128.3 KiB
⚪ agents/browser#runQuickAction 36.0 KiB 126.6 KiB
⚪ agents/browser/ai#createBrowserRuntime 147.0 KiB 632.8 KiB
⚪ agents/browser/ai#createBrowserTools 147.0 KiB 632.9 KiB
⚪ agents/browser/ai#createQuickActionTools 122.5 KiB 554.3 KiB
⚪ agents/browser/tanstack-ai#createBrowserTools 162.7 KiB 701.7 KiB
⚪ agents/channels#ChannelHost 3.3 KiB 9.1 KiB
⚪ agents/channels#consumeChunks 237 B 321 B
⚪ agents/channels#createUserIdentityStore 1.3 KiB 3.2 KiB
⚪ agents/channels#fallback 155 B 160 B
⚪ agents/channels#fallbackChannel 893 B 1.9 KiB
⚪ agents/channels#fanout 151 B 156 B
⚪ agents/channels#fanoutChannel 875 B 1.9 KiB
⚪ agents/channels#identityKey 178 B 223 B
⚪ agents/channels#isChannelMessageSurface 271 B 452 B
⚪ agents/channels#linkChannelIdentities 113 B 99 B
⚪ agents/channels#matchesPath 110 B 96 B
⚪ agents/channels#routes 307 B 507 B
⚪ agents/channels#UserIdentityConflictError 248 B 335 B
⚪ agents/channels/ai-sdk#createSendMessageTool 112.2 KiB 537.4 KiB
⚪ agents/channels/ai-sdk#toChannelChunks 112.5 KiB 538.4 KiB
⚪ agents/channels/email#email 23.5 KiB 75.4 KiB
⚪ agents/channels/email#inboundEmail 22.3 KiB 72.3 KiB
⚪ agents/channels/slack#slack 5.5 KiB 14.6 KiB
⚪ agents/channels/slack#slackWebhook 2.2 KiB 5.1 KiB
⚪ agents/channels/tanstack-ai#createSendMessageTool 16.2 KiB 68.4 KiB
⚪ agents/channels/telegram#telegram 3.8 KiB 10.3 KiB
⚪ agents/channels/telegram#telegramWebhook 1.6 KiB 3.6 KiB
⚪ agents/channels/voice#browserVoice 1010 B 2.2 KiB
🟡 agents/chat#AbortRegistry 2.6 KiB 9.0 KiB
🟡 agents/chat#AGENT_TOOL_STREAM_PROGRESS_BUMP_THROTTLE_MS 2.4 KiB 8.3 KiB
🟡 agents/chat#AgentToolProgressEmitter 2.7 KiB 9.6 KiB
🟡 agents/chat#AgentToolStreamProgressThrottle 2.4 KiB 8.4 KiB
🟡 agents/chat#aiSdkRecoveryCodec 2.3 KiB 8.3 KiB
🟡 agents/chat#applyAgentToolEvent 3.2 KiB 11.1 KiB
🟡 agents/chat#applyChunkToParts 2.4 KiB 8.3 KiB
🟡 agents/chat#applyToolUpdate 2.4 KiB 8.5 KiB
🟡 agents/chat#AutoContinuationController 2.4 KiB 8.3 KiB
🟡 agents/chat#awaitWithDeadline 2.4 KiB 8.5 KiB
🟡 agents/chat#broadcastTransition 3.2 KiB 11.5 KiB
🟡 agents/chat#buildChatRecoveringFrame 2.4 KiB 8.5 KiB
🟡 agents/chat#buildInClauseStrings 2.5 KiB 8.5 KiB
🟡 agents/chat#bumpChatRecoveryProgress 2.4 KiB 8.4 KiB
🟡 agents/chat#byteLength 2.5 KiB 8.6 KiB
🟡 agents/chat#CHAT_LAST_TERMINAL_KEY 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_MESSAGE_TYPES 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERING_FLAG_TTL_MS 2.3 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERING_KEY 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_ALARM_DEBOUNCE_MS 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_INCIDENT_KEY_PREFIX 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_INCIDENT_TTL_MS 2.3 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_PROGRESS_KEY 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_STABLE_RETRY_DELAY_SECONDS 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_RECOVERY_TASK_NAME 2.4 KiB 8.3 KiB
🟡 agents/chat#CHAT_STREAM_PROGRESS_CREDIT_THROTTLE_MS 2.4 KiB 8.3 KiB
🟡 agents/chat#ChatRecoveryEngine 4.4 KiB 15.4 KiB
🟡 agents/chat#chatRecoveryTaskRunOptions 2.5 KiB 8.7 KiB
🟡 agents/chat#ChatStreamStalledError 2.4 KiB 8.4 KiB
🟡 agents/chat#classifyAgentToolChildRecovery 2.5 KiB 8.6 KiB
🟡 agents/chat#clearChatTerminal 2.4 KiB 8.4 KiB
🟡 agents/chat#clientResolvableToolNames 2.4 KiB 8.4 KiB
🟡 agents/chat#ContinuationState 2.7 KiB 9.9 KiB
🟡 agents/chat#createAgentToolEventState 2.4 KiB 8.4 KiB
🟡 agents/chat#createChatFiberSnapshot 2.5 KiB 8.7 KiB
🟡 agents/chat#createChatRecoveryTaskDefinition 2.7 KiB 9.1 KiB
🟡 agents/chat#createChatStreams 6.4 KiB 22.2 KiB
🟡 agents/chat#createChatTurnTaskDefinition 2.7 KiB 9.0 KiB
🟡 agents/chat#createToolsFromClientSchemas 114.3 KiB 545.5 KiB
🟡 agents/chat#crossMessageToolResultUpdate 2.5 KiB 8.7 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_ATTEMPTS 2.4 KiB 8.3 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_OOM_RETRIES 2.4 KiB 8.3 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_MAX_WORK 2.4 KiB 8.3 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_NO_PROGRESS_TIMEOUT_MS 2.4 KiB 8.3 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_STABLE_TIMEOUT_MS 2.4 KiB 8.3 KiB
🟡 agents/chat#DEFAULT_CHAT_RECOVERY_TERMINAL_MESSAGE 2.4 KiB 8.4 KiB
🟡 agents/chat#dispatchChatRecoveryToHandoff 3.1 KiB 10.0 KiB
🟡 agents/chat#drainInteractionApplies 2.4 KiB 8.4 KiB
🟡 agents/chat#enforceRowSizeLimit 3.6 KiB 11.3 KiB
🟡 agents/chat#hasIncompleteToolBatch 2.5 KiB 8.7 KiB
🟡 agents/chat#interceptAgentToolBroadcast 2.5 KiB 8.8 KiB
🟡 agents/chat#isPlatformFailure 2.7 KiB 9.0 KiB
🟡 agents/chat#isReplayChunk 2.4 KiB 8.8 KiB
🟡 agents/chat#iterateWithStallWatchdog 2.6 KiB 8.9 KiB
🟡 agents/chat#KV_DELETE_MAX_KEYS 2.4 KiB 8.3 KiB
🟡 agents/chat#listActiveChatRecoveryIncidents 2.4 KiB 8.5 KiB
🟡 agents/chat#MAX_BOUND_PARAMS 2.4 KiB 8.3 KiB
🟡 agents/chat#MessageType 2.5 KiB 9.2 KiB
🟡 agents/chat#normalizeToolInput 2.4 KiB 8.3 KiB
🟡 agents/chat#parseProtocolMessage 2.6 KiB 9.3 KiB
🟡 agents/chat#partAwaitsClientInteraction 2.4 KiB 8.7 KiB
🟡 agents/chat#pausedExecutionUpdate 2.4 KiB 8.5 KiB
🟡 agents/chat#pendingChatTerminal 2.4 KiB 8.4 KiB
🟡 agents/chat#persistReconstructedOrphan 3.1 KiB 11.1 KiB
🟡 agents/chat#PreStreamTurns 2.7 KiB 9.4 KiB
🟡 agents/chat#readChatRecoveryProgress 2.4 KiB 8.4 KiB
🟡 agents/chat#reconcileMessages 2.8 KiB 9.7 KiB
🟡 agents/chat#reconcileOrphanPartial 2.4 KiB 8.6 KiB
🟡 agents/chat#recordChatTerminal 2.4 KiB 8.4 KiB
🟡 agents/chat#repairInterruptedToolParts 2.7 KiB 9.2 KiB
🟡 agents/chat#resolveChatRecoveryConfig 2.6 KiB 9.0 KiB
🟡 agents/chat#resolveToolMergeId 2.4 KiB 8.6 KiB
🟡 agents/chat#ResumableStream 5.1 KiB 16.9 KiB
🟡 agents/chat#ResumeHandshake 3.0 KiB 10.5 KiB
🟡 agents/chat#ROW_MAX_BYTES 2.4 KiB 8.3 KiB
🟡 agents/chat#runChatRecoveryExhaustion 2.6 KiB 9.0 KiB
🟡 agents/chat#sanitizeMessage 2.6 KiB 8.9 KiB
🟡 agents/chat#sendIfOpen 2.4 KiB 8.5 KiB
🟡 agents/chat#setChatRecovering 2.5 KiB 8.6 KiB
🟡 agents/chat#shouldCreditStreamProgress 2.4 KiB 8.4 KiB
🟡 agents/chat#STREAM_RESUME_NONE_REASONS 2.4 KiB 8.4 KiB
🟡 agents/chat#StreamAccumulator 3.0 KiB 10.8 KiB
🟡 agents/chat#StreamProgressCreditThrottle 2.4 KiB 8.4 KiB
🟡 agents/chat#SubmitConcurrencyController 2.9 KiB 10.4 KiB
🟡 agents/chat#sweepStaleChatRecoveryIncidents 2.5 KiB 8.6 KiB
🟡 agents/chat#TextSegmentJoiner 2.7 KiB 9.3 KiB
🟡 agents/chat#TIMED_OUT 2.4 KiB 8.3 KiB
🟡 agents/chat#toolApprovalUpdate 2.5 KiB 8.6 KiB
🟡 agents/chat#toolPartHasSettledResult 2.4 KiB 8.5 KiB
🟡 agents/chat#toolResultUpdate 2.4 KiB 8.6 KiB
🟡 agents/chat#truncateOlderMessages 3.2 KiB 10.5 KiB
🟡 agents/chat#TurnQueue 2.7 KiB 9.3 KiB
🟡 agents/chat#unwrapChatFiberSnapshot 2.5 KiB 8.6 KiB
🟡 agents/chat#wrapChatFiberSnapshot 2.4 KiB 8.3 KiB
⚪ agents/chat-sdk#ChatSdkStateAdapter 263.5 KiB 1152.6 KiB
⚪ agents/chat-sdk#ChatSdkStateAgent 262.8 KiB 1150.0 KiB
⚪ agents/chat-sdk#createChatSdkState 263.5 KiB 1152.6 KiB
⚪ agents/chat-sdk#defaultKeyShard 261.2 KiB 1141.2 KiB
⚪ agents/chat-sdk#defaultThreadShard 261.1 KiB 1141.0 KiB
🟡 agents/chat/react#detectToolsRequiringConfirmation 3.3 KiB 8.3 KiB
🟡 agents/chat/react#extractClientToolSchemas 3.2 KiB 8.3 KiB
⚪ agents/chat/react#getAgentMessages 3.4 KiB 8.6 KiB
🟡 agents/chat/react#getToolApproval 3.1 KiB 8.0 KiB
🟡 agents/chat/react#getToolCallId 3.1 KiB 8.0 KiB
🟡 agents/chat/react#getToolInput 3.1 KiB 8.0 KiB
🟡 agents/chat/react#getToolOutput 3.1 KiB 8.0 KiB
🟡 agents/chat/react#getToolPartState 3.2 KiB 8.2 KiB
🟡 agents/chat/react#useAgentChat 133.2 KiB 610.7 KiB
🟡 agents/chat/react#WebSocketChatTransport 5.7 KiB 17.1 KiB
⚪ agents/chat/transport#WebSocketChatTransport 2.8 KiB 9.2 KiB
⚪ agents/client#AgentClient 21.8 KiB 75.2 KiB
⚪ agents/client#AgentConnectionError 16.3 KiB 57.8 KiB
⚪ agents/client#agentFetch 19.7 KiB 69.0 KiB
⚪ agents/client#createStubProxy 16.4 KiB 57.8 KiB
⚪ agents/client#DEFAULT_CALL_TIMEOUT_MS 16.2 KiB 57.6 KiB
⚪ agents/client#isTerminalCloseEvent 16.3 KiB 57.6 KiB
⚪ agents/client#nativeCall 16.5 KiB 58.3 KiB
⚪ agents/client#NativeCallQueue 16.7 KiB 58.9 KiB
⚪ agents/client#splitCallOptions 16.3 KiB 57.7 KiB
⚪ agents/context#AgentContextProvider 412 B 792 B
⚪ agents/context#AgentSearchProvider 640 B 1.3 KiB
⚪ agents/context#ContextBlocks 87.4 KiB 429.7 KiB
⚪ agents/email#createAddressBasedEmailResolver 193 B 227 B
⚪ agents/email#createCatchAllEmailResolver 110 B 97 B
⚪ agents/email#createHeaderBasedEmailResolver 334 B 492 B
⚪ agents/email#createSecureReplyEmailResolver 718 B 1.3 KiB
⚪ agents/email#DEFAULT_MAX_AGE_SECONDS 56 B 39 B
⚪ agents/email#isAutoReplyEmail 201 B 249 B
⚪ agents/email#signAgentHeaders 424 B 812 B
⚪ agents/experimental/webmcp#registerWebMcp 85.2 KiB 295.8 KiB
⚪ agents/lifecycle#getCurrentAgent 376 B 798 B
⚪ agents/lifecycle#Lifecycle 8.4 KiB 26.1 KiB
⚪ agents/lifecycle#LifecycleCapability 497 B 999 B
⚪ agents/mcp#createLegacyMcpHandler 378.6 KiB 1583.3 KiB
⚪ agents/mcp#createMcpHandler 390.9 KiB 1628.5 KiB
⚪ agents/mcp#DurableObjectEventStore 345.1 KiB 1441.8 KiB
⚪ agents/mcp#ElicitRequestSchema 345.1 KiB 1441.8 KiB
⚪ agents/mcp#experimental_createMcpHandler 378.7 KiB 1583.6 KiB
⚪ agents/mcp#getMcpAuthContext 345.1 KiB 1441.9 KiB
⚪ agents/mcp#MCP_SERVER_ID_MAX_LENGTH 345.1 KiB 1441.9 KiB
⚪ agents/mcp#McpAgent 345.1 KiB 1441.8 KiB
⚪ agents/mcp#normalizeServerId 345.1 KiB 1441.8 KiB
⚪ agents/mcp#RPC_DO_PREFIX 345.1 KiB 1441.8 KiB
⚪ agents/mcp#RPCClientTransport 345.1 KiB 1441.8 KiB
⚪ agents/mcp#RPCServerTransport 345.1 KiB 1441.8 KiB
⚪ agents/mcp#SSEEdgeClientTransport 345.2 KiB 1442.1 KiB
⚪ agents/mcp#StreamableHTTPEdgeClientTransport 345.2 KiB 1442.1 KiB
⚪ agents/mcp#WorkerTransport 348.5 KiB 1458.7 KiB
⚪ agents/mcp/client#getNamespacedData 62.9 KiB 240.0 KiB
⚪ agents/mcp/client#MCP_SERVER_ID_MAX_LENGTH 62.9 KiB 239.9 KiB
⚪ agents/mcp/client#MCPClientManager 158.6 KiB 702.6 KiB
⚪ agents/mcp/client#normalizeServerId 63.0 KiB 240.2 KiB
⚪ agents/mcp/do-oauth-client-provider#DurableObjectOAuthClientProvider 2.1 KiB 6.6 KiB
⚪ agents/mcp/server#createMcpHandler 80.5 KiB 307.2 KiB
⚪ agents/mcp/server#getMcpAuthContext 64.0 KiB 245.5 KiB
⚪ agents/observability#channels 259 B 549 B
⚪ agents/observability#genericObservability 470 B 1.2 KiB
⚪ agents/observability#subscribe 324 B 668 B
⚪ agents/observability/ai#wrapAISDK 8.8 KiB 30.5 KiB
⚪ agents/queue#Queue 3.1 KiB 9.6 KiB
⚪ agents/react#_testUtils 19.3 KiB 66.4 KiB
⚪ agents/react#useAgent 27.1 KiB 89.9 KiB
⚪ agents/react#useAgentToolEvents 21.1 KiB 73.7 KiB
⚪ agents/routing#getAgentByName 795 B 1.7 KiB
⚪ agents/routing#routeAgentRequest 1.6 KiB 3.6 KiB
⚪ agents/routing#RoutedAgents 2.4 KiB 6.2 KiB
⚪ agents/schedule#getSchedulePrompt 85.8 KiB 424.7 KiB
⚪ agents/schedule#scheduleSchema 85.3 KiB 423.6 KiB
⚪ agents/schedule#unstable_getSchedulePrompt 85.9 KiB 424.9 KiB
⚪ agents/schedule#unstable_scheduleSchema 85.3 KiB 423.6 KiB
⚪ agents/schedules#Scheduler 6.8 KiB 22.0 KiB
⚪ agents/schedules/parser#getSchedulePrompt 85.8 KiB 424.7 KiB
⚪ agents/schedules/parser#scheduleSchema 85.3 KiB 423.6 KiB
⚪ agents/sessions#COMPACTION_PREFIX 147 B 160 B
⚪ agents/sessions#createCompactFunction 1.7 KiB 4.0 KiB
⚪ agents/sessions#isCompactionMessage 177 B 200 B
⚪ agents/sessions#Session 2.0 KiB 6.3 KiB
⚪ agents/sessions#Sessions 9.6 KiB 34.3 KiB
⚪ agents/skills#fromManifest 309.8 KiB 1084.0 KiB
⚪ agents/skills#parseSkillFrontmatter 328.4 KiB 1146.2 KiB
⚪ agents/skills#parseSkillMarkdown 328.6 KiB 1146.5 KiB
⚪ agents/skills#r2 330.2 KiB 1150.4 KiB
⚪ agents/skills#runner 369.0 KiB 1297.8 KiB
⚪ agents/skills#SkillRegistry 416.4 KiB 1581.7 KiB
⚪ agents/skills/compile#compileSkillScript 15.4 KiB 43.4 KiB
⚪ agents/skills/compile#isCompilableSkillScript 15.4 KiB 43.3 KiB
⚪ agents/state#State 1.1 KiB 2.4 KiB
⚪ agents/streams#DEFAULT_MAX_CHUNK_BYTES 94 B 96 B
⚪ agents/streams#sseResponse 857 B 1.6 KiB
⚪ agents/streams#StreamClosedError 175 B 212 B
⚪ agents/streams#StreamNotFoundError 215 B 276 B
⚪ agents/streams#Streams 4.3 KiB 13.9 KiB
⚪ agents/streams#StreamSerializationError 171 B 201 B
⚪ agents/tasks#DuplicateTaskStepError 328 B 463 B
⚪ agents/tasks#MAX_SERIALIZED_BYTES 190 B 232 B
⚪ agents/tasks#MissingTaskDefinitionError 358 B 536 B
⚪ agents/tasks#NonRetryableError 238 B 308 B
⚪ agents/tasks#TaskReplayDivergedError 341 B 483 B
⚪ agents/tasks#Tasks 8.9 KiB 31.8 KiB
⚪ agents/tasks#TaskSerializationError 258 B 339 B
⚪ agents/types#MessageType 211 B 365 B
⚪ agents/vite#default 353.8 KiB 1356.1 KiB
⚪ agents/voice#addSFUTracks 324 B 424 B
⚪ agents/voice#createSFUSession 255 B 306 B
⚪ agents/voice#createSFUWebSocketAdapter 331 B 429 B
⚪ agents/voice#decodeVarint 157 B 160 B
⚪ agents/voice#downsample48kStereoTo16kMono 238 B 324 B
⚪ agents/voice#encodePayloadToProtobuf 189 B 279 B
⚪ agents/voice#encodeVarint 129 B 122 B
⚪ agents/voice#extractPayloadFromProtobuf 271 B 425 B
⚪ agents/voice#iterateText 1.6 KiB 3.8 KiB
⚪ agents/voice#renegotiateSFUSession 329 B 428 B
⚪ agents/voice#SentenceChunker 550 B 1.1 KiB
⚪ agents/voice#sfuFetch 294 B 358 B
⚪ agents/voice#upsample16kMonoTo48kStereo 211 B 272 B
⚪ agents/voice#VOICE_PROTOCOL_VERSION 51 B 31 B
⚪ agents/voice#withVoice 9.5 KiB 32.7 KiB
⚪ agents/voice#withVoiceInput 4.8 KiB 16.0 KiB
⚪ agents/voice#WorkersAIFluxSTT 1.5 KiB 4.3 KiB
⚪ agents/voice#WorkersAINova3STT 1.6 KiB 4.3 KiB
⚪ agents/voice#WorkersAITTS 682 B 1.4 KiB
⚪ agents/voice/client#VOICE_PROTOCOL_VERSION 473 B 768 B
⚪ agents/voice/client#VoiceClient 10.1 KiB 31.6 KiB
⚪ agents/voice/client#WebSocketVoiceTransport 4.6 KiB 13.3 KiB
⚪ agents/voice/errors#logVoiceError 132 B 173 B
⚪ agents/voice/errors#toVoiceError 94 B 80 B
⚪ agents/voice/errors#voiceErrorMessage 125 B 111 B
⚪ agents/voice/errors#VoiceProviderError 190 B 345 B
⚪ agents/voice/react#useVoiceAgent 13.6 KiB 42.5 KiB
⚪ agents/voice/react#useVoiceInput 13.3 KiB 41.4 KiB
⚪ agents/voice/react#WebSocketVoiceTransport 7.4 KiB 21.3 KiB
⚪ agents/voice/sfu#addSFUTracks 323 B 424 B
⚪ agents/voice/sfu#createSFUSession 254 B 306 B
⚪ agents/voice/sfu#createSFUWebSocketAdapter 329 B 429 B
⚪ agents/voice/sfu#decodeVarint 155 B 160 B
⚪ agents/voice/sfu#downsample48kStereoTo16kMono 236 B 324 B
⚪ agents/voice/sfu#encodePayloadToProtobuf 188 B 279 B
⚪ agents/voice/sfu#encodeVarint 129 B 122 B
⚪ agents/voice/sfu#extractPayloadFromProtobuf 270 B 425 B
⚪ agents/voice/sfu#renegotiateSFUSession 329 B 428 B
⚪ agents/voice/sfu#sfuFetch 292 B 358 B
⚪ agents/voice/sfu#upsample16kMonoTo48kStereo 209 B 272 B
⚪ agents/voice/text#iterateText 1.6 KiB 3.8 KiB
⚪ agents/voice/text#SentenceChunker 549 B 1.1 KiB
⚪ agents/voice/types#VOICE_PROTOCOL_VERSION 51 B 31 B
⚪ agents/voice/workers-ai#WorkersAIFluxSTT 1.5 KiB 4.3 KiB
⚪ agents/voice/workers-ai#WorkersAINova3STT 1.6 KiB 4.3 KiB
⚪ agents/voice/workers-ai#WorkersAITTS 682 B 1.4 KiB
⚪ agents/websockets#CAPNWEB_TRANSPORT_QUERY 12.4 KiB 43.3 KiB
⚪ agents/websockets#CAPNWEB_TRANSPORT_VALUE 12.4 KiB 43.3 KiB
⚪ agents/websockets#capnWebTransportUrl 12.5 KiB 43.5 KiB
⚪ agents/websockets#CF_NO_PROTOCOL_KEY 12.4 KiB 43.3 KiB
⚪ agents/websockets#CF_READONLY_KEY 12.4 KiB 43.3 KiB
⚪ agents/websockets#isCapnWebTransportUpgrade 12.5 KiB 43.4 KiB
⚪ agents/websockets#registerInternalConnectionKeys 12.4 KiB 43.4 KiB
⚪ agents/websockets#WebSockets 20.0 KiB 69.3 KiB
⚪ agents/workflows#AgentWorkflow 262.4 KiB 1145.7 KiB
⚪ agents/workflows#WorkflowRejectedError 261.2 KiB 1141.2 KiB
⚪ agents/x402#normalizeNetwork 14.7 KiB 61.1 KiB
⚪ agents/x402#withX402 23.0 KiB 89.2 KiB
⚪ agents/x402#withX402Client 104.1 KiB 346.5 KiB

Reported by agent-think[bot].

@pkg-pr-new

pkg-pr-new Bot commented Sep 10, 2026

Copy link
Copy Markdown

Open in StackBlitz

agents

npm i https://pkg.pr.new/agents@2235

@cloudflare/ai-chat

npm i https://pkg.pr.new/@cloudflare/ai-chat@2235

@cloudflare/codemode

npm i https://pkg.pr.new/@cloudflare/codemode@2235

hono-agents

npm i https://pkg.pr.new/hono-agents@2235

@cloudflare/shell

npm i https://pkg.pr.new/@cloudflare/shell@2235

@cloudflare/think

npm i https://pkg.pr.new/@cloudflare/think@2235

@cloudflare/voice

npm i https://pkg.pr.new/@cloudflare/voice@2235

@cloudflare/worker-bundler

npm i https://pkg.pr.new/@cloudflare/worker-bundler@2235

commit: 4ec3570

Review fixes on the delta-broadcast turn boundaries:

- Deltas are now negotiated. `useAgentChat` sends
  `cf_agent_chat_client_capabilities` on every socket open and Think only
  sends `cf_agent_chat_messages_delta` to connections that declared
  `transcriptDeltas`. An older `agents` client silently drops the unknown
  frame — and with it the turn's transcript update — so it keeps getting
  full snapshots instead.
- Rows written while a broadcast was suppressed (`addMessages` mid-turn from
  a tool `execute`, or `broadcast: false`) are recorded and folded into the
  next transcript frame. They used to ride the next full snapshot; under
  deltas they reached no client at all.
- `_transcriptNeedsSnapshot` and the deferred rows are only settled by a
  broadcast that actually reached every connection — one that excluded a
  live connection still owes it.
- Client parity with the snapshot path: the #1778 escape hatch (a later
  assistant after the protected one clears protection), a delta naming a
  protected message is held and applied when the stream finishes rather
  than dropped, and a row matched through a shared `toolCallId` adopts the
  server's id.
- The cache epoch is derived: `_replaceCachedMessages` keeps it when the
  re-read leaves every row a client holds untouched, so an over-budget
  windowed transcript (which re-reads storage every incoming turn) stays on
  deltas instead of falling back to a snapshot each time.
- Delta completeness is checked by resolved ids, not row count.

Adds a minor changeset for `agents` and `@cloudflare/think`.
@mattzcarey

Copy link
Copy Markdown
Member Author

Closing: Think is moving onto the driver-based ThinkHarness (#2396). This will be revisited there.

@mattzcarey mattzcarey closed this Sep 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant