Repository navigation
chore(deps): update minor dependencies (minor) - #34
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
|
Note renovate[bot] opened this pull request, so PR Lens left it undrawn. Comment
|
🚀 Deploying Preview to Cloudflare 🚀Preview URL: https://renovate-minor-dependencies-agntn-tools.oritwoen.workers.dev (commit eaa310f)This URL reflects your latest Preview deploymentPreview Deployments by commit
View all previews: View all previews ↗ |
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
12 times, most recently
from
October 11, 2026 20:40
baf838a to
7527af7
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
8 times, most recently
from
October 19, 2026 10:41
c7ade05 to
dd97546
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
6 times, most recently
from
October 25, 2026 08:30
4a83be6 to
e393ec6
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
3 times, most recently
from
October 26, 2026 05:07
15c34bc to
b16928a
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
from
October 26, 2026 23:50
b16928a to
27ae686
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.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
2.2.0→2.4.02.2.0→2.4.01.31.0→1.32.22.2.0→2.4.02.2.0→2.4.026.2.0→26.6.526.6.60.24.0→0.30.10.31.05.13.0→5.15.0v26.10.0→26.12.1v26.13.04.5.2→4.6.24.6.31.3.34→1.4.31.3.34→1.4.31.0.0→1.4.01.0.0→1.4.04.128.0→4.152.04.154.0(+1)Release Notes
modelcontextprotocol/typescript-sdk (@modelcontextprotocol/client)
v2.4.0Compare Source
Minor Changes
#3057
c05225aThanks @steipete! -ServerEventtakes optionalparams, which thesubscriptions/listenrouter delivers with its own subscription ID, so a gateway can forward change notifications with their_metaand extension params.#3047
46d9c99Thanks @KKonstantinov, @tobi-oye, @mattzcarey! - Add the Skills extension (SEP-2640), reachable through newext/skillssubpaths; package root exports are unchanged.@modelcontextprotocol/server/ext/skills:SkillsExtension(attach(server)servesskills/list,skills/get,resources/directory/readand askill://{+path}resource template),SkillsExtension.load(files)returning aSkillCatalogwithentriesandreload(), theSkillFilesstorage adapter withmemorySkillFiles,SkillSourcefor generated catalogs,skillEntry, andSkillCatalogError. Invalid skills are skipped with a warning (onWarning), or fail understrict. A file whose bytes are valid UTF-8 is served astext, whatever its MIME type; any other file as a base64blob.@modelcontextprotocol/server/ext/skills/node:loadSkills(folder)andnodeSkillFiles(folder).@modelcontextprotocol/client/ext/skills:SkillsClientwithlist()(throws on an invalid entry;skipInvalid: truekeeps the valid ones and returns the rest ininvalid),get(),read(skill, path?)(size, digest andSKILL.mdfrontmatter verified,SkillVerificationErroron a mismatch; a copy from the response cache that fails a check is fetched once more withcacheMode: 'refresh'first) andreadDirectory().@modelcontextprotocol/core/ext/skills: schemas, types and constants, includingSKILL_LIMITS. The result schemas follow the stable spec, sottlMsandcacheScopeare required.SkillsExtension.attachis@experimental: how an extension is wired to a server may change in a minor release. The rest of the Skills API is stable.Works on 2025-11-25 and 2026-07-28. On 2026-07-28 only, the server sends the caching fields (
ttlMs,cacheScope), andSkillsClientrequires them and returns them fromlist(),get()andreadDirectory().Patch Changes
#3083
ef38c67Thanks @claude! - The bundled Ajv validator is now built with fast-uri 3.1.8 (was 3.1.0). fast-uri 3.1.6 and later reject a$idor$refwhose text before the first colon is not a valid URI scheme (my_tool:output), or whose URN namespace is not valid (urn:my_tool:output): a schema that uses one no longer compiles, and a tool that carries it fails with an invalid-schema error. An underscore without a colon (my_tool_output) and a$refinto#/$defs/...or#/definitions/...are not affected.#2960
43c45f4Thanks @claude! - A server whose tool putsx-mcp-headeron anumber-typed parameter keeps checking that tool'sMcp-Param-*headers ontools/call, as 2.3.0 does: a header that is missing for a value in the body, or that disagrees with the body, is answered400with JSON-RPC error-32020. Clients on a 2026-07-28 connection other than stdio no longer list such a tool and send noMcp-Param-*headers for it, so a call that carries a value for a declared parameter is rejected the same way; the server logs a warning each time tools are listed. Use an integer (z.int()) or remove the annotation.#3081
5820f79Thanks @claude! - A tooloutputSchemawhose root is a$refto atype: "object"entry of its own$defsordefinitions(what zod writes forz.object({...}).meta({ id })), or a union of such refs, is now treated as an object schema. On 2025-era connections the tool's schema andstructuredContentare no longer wrapped in{ result: ... }, so a 2025-era client that readstructuredContent.resultfor such a tool now readsstructuredContent. On every era the advertised schema gainstype: "object"at its root.#3057
c05225aThanks @steipete! - Connecting aServerorMcpServerto aPerRequestHTTPServerTransportclassified at a modern revision thatsupportedProtocolVersionslists and the SDK implements now binds that revision, instead of answering-32022.#3005
b381559Thanks @chaeyn! - Reflect resource and resource templateupdate({ title })changes in list responses. Preserve other metadata and individual resource titles when a template supplies list entries.#3002
895007fThanks @Hugo-DDT! -createMcpHandlernow sendsAllow: POSTon every405it answers to a non-POST request, withlegacy: 'stateless'(the default) and withlegacy: 'reject'.#2762
b022522Thanks @pcarleton! -x-mcp-headeron anumber-typed tool parameter is now rejected, matching the 2026-07-28 spec ("Parameters with typenumberare not permitted"; clients MUST exclude such tools fromtools/list). Previouslynumberwas accepted only to satisfy an older conformance fixture that has since been corrected.integer,stringandbooleanare unaffected.Updated dependencies [
46d9c99]:v2.3.1Compare Source
Patch Changes
v2.3.0Compare Source
Minor Changes
#2929
40f8f4eThanks @claude! -requireBearerAuthandverifyBearerTokentake a new optionalexpectedResource, which makes them accept only tokens issued for this resource (the token's audience). Set it to the value your authorization server puts into tokens meant for this server, usually the server's URL. When it is set, a token is accepted only if the verifier reports that value inAuthInfo.resource; the two are compared as strings, ignoring a fragment and one trailing slash. A token reported for another value, or for none, is answered401 invalid_tokenwith the usualWWW-Authenticatechallenge. When it is not set, nothing changes. To use it, passexpectedResourceand haveverifyAccessTokenfillAuthInfo.resource, for example from theaudclaim. The option is declared on a new exported type,VerifyBearerTokenOptions, which extendsBearerAuthOptions;BearerAuthOptionsitself is unchanged. The ExpressrequireBearerAuthpasses the option through. With Express,@modelcontextprotocol/expresshas to be upgraded to this release as well: 2.0.1 does not pass the option on, so nothing is compared. Its options type does not have the option, so TypeScript reports anexpectedResourcewritten in a call to the 2.0.1requireBearerAuthas an error.#2926
6d8dbc6Thanks @claude! -McpServernow accepts amaxToolInputElementsoption that limits the number of elements in tool-call arguments: the largest combined number of array elements and object members a singletools/callargumentspayload may contain. It is off by default, so behavior is unchanged unless you set it. When it is set and a call exceeds it, that call is answered with anisError: truetool result that names the limit, before the input schema runs, and the server keeps serving. Set it above the largest arguments your tools legitimately accept;maxRequestBodySizeremains the primary limit on request size. The value must be a number of at least 1, orInfinityfor no limit; any other value is rejected at construction. The options type is exported asMcpServerOptions.#2918
84804c2Thanks @claude! - AServerorMcpServernow serves one connection at a time, and a Streamable HTTP server transport without sessions (sessionIdGenerator: undefined) serves one request. An app that uses one server object, or one stateless transport, for every HTTP request fails on the second request after this upgrade. Build the server and the transport per request instead.What keeps working without a change:
createMcpHandler(buildServer)andserveStdio(buildServer), wherebuildServerreturns a new server on every call.sessionIdGenerator).close().Client.What fails now, how it shows, and what to change:
const server = new McpServer(...)outside the handler,await server.connect(transport)inside it): the second HTTP request the process receives fails, and so does every later one.connect()rejects with anSdkErrorof codeALREADY_CONNECTED. If the handler closes the transport when the response ends, requests that arrive one after the other still work and a request that overlaps another one fails. Change: movenew McpServer(...)and its registrations into the handler.sessionIdGenerator: undefined): the second HTTP request fails.WebStandardStreamableHTTPServerTransport.handleRequest()rejects withStateless transport cannot be reused across requests. Create a new transport per request., andNodeStreamableHTTPServerTransport.handleRequest()answers500. Change: build the server and the transport inside the handler and connect them there.createMcpHandler(() => server)with a server built once: a request that arrives after the previous response has been read to its end still works. A request that arrives while another one is being served is answered500with the JSON-RPC error-32603(Internal server error); the reason is reported only through theonerroroption. Change: pass a function that builds the server, as increateMcpHandler(buildServer).initializerequest of the second session fails withALREADY_CONNECTED. Change: build a server per session.What the caller sees when
connect()orhandleRequest()rejects depends on the host. Express 5, Fastify and Hono answer500. A plainnode:httplistener without its own error handling gets an unhandled rejection, which ends the process.The README examples of
@modelcontextprotocol/express,@modelcontextprotocol/fastify,@modelcontextprotocol/honoand@modelcontextprotocol/node, and the handler examples in the JSDoc ofWebStandardStreamableHTTPServerTransportandNodeStreamableHTTPServerTransport, now build a server and a transport per request.#2907
e55f9acThanks @claude! -allowedOriginsandvalidateOriginHeaderaccept lowercase entries of the form<scheme>://*, such asmoz-extension://*orchrome-extension://*, which admit every origin of that scheme. This lets a server admit MCP clients that run as a browser extension when the extension ID cannot be listed, as on Firefox, where it differs on every install.http://*andhttps://*are not honoured, and the defaults are unchanged.Patch Changes
#2599
5238fbaThanks @freya0926! - A server can now serve, and a client can now call,tasks/getandtasks/cancelof the Tasks extension (SEP-2663) on a 2026-07-28 connection, when the handler is registered and the request is sent with an explicit schema. Every other method that a protocol revision removed is still refused. If one server factory serves both eras and such a handler is meant for 2025-era clients only, register it only whenctx.era === 'legacy'.#2107
2fc49eaThanks @pragnyanramtha! -prompts/getwithoutargumentsno longer fails with "Invalid arguments" when every argument of the prompt is optional. A missingargumentsis now validated as{}, as it already is fortools/call, so a top-level.optional()or.default(...)onargsSchemano longer seesundefined.#2889
4d94e7bThanks @claude! -registerToolno longer converts tool schemas up front, so a server built per request stops converting every tool on every request. The warning about an invalidx-mcp-headerdeclaration now appears each time tools are listed, not when the tool is registered.#2908
633dd3eThanks @claude! - Thelicensefield of the package manifests is nowApache-2.0; theLICENSEfile shipped in each package carries the full terms, including the MIT text for earlier contributions. No code change.#2841
2237555Thanks @sharziki! -McpServer.registerPrompt()now types the callback correctly when noargsSchemais given: its one parameter is the server context. Before, readingctx.mcpReqthere was a type error although it worked at runtime. Prompts registered with anargsSchemaare unchanged.Updated dependencies [
633dd3e]:cloudflare/agents (agents)
v0.30.1Compare Source
Patch Changes
9c79ba1Thanks @ben-reitz! - FixPiHarnesswithonWakenot resuming a sleeping Pi task, such as a compaction retry, while another task is running (#2683). See How recovery works.v0.30.0Compare Source
This release adds support for Pi 1.4 and makes
PiHarnessrecover more reliably from evictions, crashes and storage errors.Highlights
agents/harness/pinow runs on Pi 1.4.PiHarnesspasses Pi'sonWakethrough your harness factory, so a Durable Object sleeps until Pi's next task is due instead of staying in memory.PiHarnesswakes from Pi'swake(), so a task stopped by Pi's restart limit no longer keeps the object awake.parkedinpending(), andretry()runs them again.Upgrading
Update Pi to
~1.4.0(@earendil-works/pi-durable,pi-ai,pi-agent-core) and install@earendil-works/chordalongside them. Pi 1.4 migrates session storage to a schema Pi 1.3 cannot open, so a deployment cannot roll back past this release.Check pi-durable's 1.4.0 changelog for its breaking changes, such as the removal of
TaskRuntime.sleep(), the newsleepingtask status, and the restart limit that parks a crash-looping task after 5 restarts.Pass
onWaketoHarness.open, as in the diff below. Without it, the harness still works but logs a warning, and the object stays in memory while Pi's tasks sleep.If you create Pi's registry at module scope, move it into your class, as a field or in the factory. Our tool examples showed module scope before this release. Pi keeps every
Harnesssubscribed to its registry until it closes, and an evicted object never closes it, so a module-level registry keeps every evicted object's harness in memory.Keep the harness factory safe to run more than once. It now runs again when Pi reopens after a storage error.
Handle the new
parkedstatus if you switch onPiPendingOperation.status.Existing objects need no migration step. Wake jobs left by earlier releases are handed over to the new wake job on first start.
Minor Changes
#2617
cfe9d0fThanks @ben-reitz! - Support Pi 1.4: the Pi peer range is now~1.4.0. Pi 1.4 migrates SQLite session storage to a schema that Pi 1.3 cannot open, so a deployment cannot roll back past this release. See Pi harness.#2619
4b535dcThanks @ben-reitz! -PiHarnesshands its factory anonWaketo pass toHarness.open, so the Durable Object can hibernate while Pi's tasks sleep. Add it to your factory:harness: ({ storage, context, onWake }) => Harness.open(storage, { ...options, onWake }, context). Without it the harness still works and logs a warning. See Pi harness.#2624
3954859Thanks @ben-reitz! -PiHarnessshows operations stopped by Pi's restart limit asparkedinpending(), andretry()runs them again. See Pi harness.Patch Changes
#2644
f404547Thanks @ben-reitz! - Lifecycle arms a fallback alarm while its job queue holds jobs, before startup runs in an alarm and after a startup that queued jobs throws, so a failed startup cannot leave queued jobs without a wake. See Lifecycle.#2653
fc4cd24Thanks @ben-reitz! - Stop Lifecycle startup keeping an evicted Durable Object in memory when a capability's startup leaves a promise pending, asPiHarnessdoes when it opens Pi. See Pi harness.#2643
e117121Thanks @ben-reitz! -agents/models/pi-aireports a cut-off or idle model stream with wording pi's retry policy treats as transient, so pi retries the turn instead of failing it. See Models with pi-ai.#2617
cfe9d0fThanks @ben-reitz! -agents/harness/pinow uses chord's own context helpers, so install@earendil-works/chordalongside pi-durable and pi-ai. See Pi harness.#2648
000fcafThanks @ben-reitz! -PiHarnessopens pi again after a storage error closes it, instead of failing every call until the object restarts. See How recovery works.#2618
3e91dedThanks @ben-reitz! -PiHarnesswakes from Pi'swake()with one job per object, so a task parked by Pi's restart limit no longer keeps the Durable Object awake. See Pi harness.#2649
91a8f61Thanks @ben-reitz! -PiHarnesskeeps its wake job when a step fails, retrying with a backoff up to 10 minutes, and counts a memory-limit reset during the job's wait against the alarm memory-limit breaker. See How recovery works.v0.29.0Compare Source
Minor Changes
8c720d3Thanks @mattzcarey! - Agent Skills read and write a@cloudflare/computerWorkspace, for both projection andskills.runner(). See Upgrading to a Computer workspace.Patch Changes
#2584
3b3a88eThanks @ben-reitz! -Browsercreates and closes its Browser Run sessions with the binding's typedacquire()andcloseSession(), falling back to the HTTP API in fully local dev. See Browser.#2615
05843e4Thanks @mattzcarey! - Chat recovery now seals a turn afterchatRecovery.maxInterruptedAttemptsinterrupted attempts (default 5), so a turn that exceeds the Durable Object memory limit on every run no longer retries forever;maxOomRetriesis deprecated. See Stream Recovery.#2604
5d6f5d6Thanks @mattzcarey! -createAItakes{ accountId, apiToken }in place ofbinding, to use a gateway in another account or to run outside a Worker. See the models docs.#2622
2c68a71Thanks @mattzcarey! -createAItranscribes with@cf/deepgram/nova-3. See the models docs.#2576
b048873Thanks @mattzcarey! -createAIno longer uses AI Gateway's deprecated Universal Endpoint. Model ids, now including catalog ids likeanthropic/claude-opus-4.8, run onenv.AI.run; model objects go to the provider-native path. AddsbyokAlias, fixes pi-ai catalog models and dynamic routes, and letsagents/models/opencodetake catalog ids. See the models docs.#2589
841cc18Thanks @mattzcarey! -createAIresumes a catalog or dynamic route stream that drops mid-answer, with nothing lost or repeated. See the models docs.#2594
cc34652Thanks @ben-reitz! -agents/models/pi-airesolves Claude ids from pi-ai 1.2's gateway catalog under AI Gateway's spelling,anthropic/claude-opus-4.8. See Models for pi-ai.#2594
cc34652Thanks @ben-reitz! - Support Pi 1.3: the Pi web search, web fetch, browser, and skills tools returnoutput, and the Pi peer range is now~1.3.0. See Pi harness.#2621
e80a201Thanks @ben-reitz! -PiHarnesssubmit()andsteer()now accept pi-durable'sentryoption, which labels an input with a transcript kind of your own (for exampleapp.approval) instead ofpi.user. Before, the harness had no way to pass it. See Label input the user did not type.#2616
65ddec8Thanks @ben-reitz! -openPiSessionStorenow uses pi-durable's own Durable Object SQLite adapter, so several Pi storages in one object share its operation queue. See Pi harness.v0.28.1Compare Source
Patch Changes
#2571
1bd2bc5Thanks @mattzcarey! -createAI(agents/models/ai-sdk,agents/models/pi-ai) adds thezdrgateway option, andvendorKey: "request"for AI SDK models routed with your own vendor key. See docs/agents/models.md.#2572
b7c6ab9Thanks @mattzcarey! -createAI(agents/models/ai-sdk,agents/models/pi-ai) takes AI Gateway dynamic routes asai("dynamic/<route>"). See docs/agents/models.md.#2573
80719a5Thanks @mattzcarey! - Update@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.2.0 and@modelcontextprotocol/sdkto 1.31.0. See Model Context Protocol.#2574
131af4bThanks @mattzcarey! - Update@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.3.1 and@modelcontextprotocol/sdkto 1.32.1. The MCP client transports now follow redirects only within the same origin. See Model Context Protocol.#2574
131af4bThanks @mattzcarey! -McpAgentnow answers requests for a session ended withDELETEwith 404 straight away, instead of serving it until deferred teardown runs, andcreateMcpHandlerrejects a Legacy request whose factory returns an instance still serving another request without closing that instance. See Transport.#2568
46570f5Thanks @mattzcarey! -OpenCodeHarness:session.events()now returns a stream with a snapshot of the session and then its events, translated into the same kindsPiHarnessreports:run_start/run_end,operation_start/operation_end(with the resultwait()returns),message_start/message_end,text_delta,reasoning_delta,tool_start/tool_end, permissions and compaction. It replaces the async iterable of OpenCode's raw events; those are still available, durable and resumable, fromsession.log(). The OpenCode example now gives the model Workspace tools from@cloudflare/computerin place of OpenCode's local file and shell tools.v0.28.0Compare Source
Minor Changes
#2484
dedbee4Thanks @ben-reitz! - AddbrowserTool()toagents/browser/pi. See Persistent browser.#2473
6614955Thanks @mattzcarey! - Makeagents/lifecyclestable along with theScheduler(agents/schedules),State(agents/state),WebSockets(agents/websockets) andMCPClientManager(agents/mcp/client) capabilities. See Lifecycle.Patch Changes
#2540
b65956eThanks @mattzcarey! -ThinkHarnessnow keeps its sessions and operations in the sharedagents/harness/store. Migrations are performed on first run. See ThinkHarness: Recovery.#2522
bcf5d20Thanks @ben-reitz! - Addagents/webfetch, aweb_fetchtool that reads a URL as Markdown, JSON, or text (HTML, PDF, and Office documents via Worker AI). See Fetch the Web.v0.27.0Compare Source
This release adds four new experimental harnesses and a
web_searchtool, and reorganizes the experimental Channels API.AiSdkHarness,ThinkHarness,ContainerHarness(which runs Claude Code or Codex in a Container) andOpenCodeHarness, all with the same shape asPiHarness.agents/websearch: aweb_searchtool over Cloudflare's Web Search API for pi, the AI SDK and TanStack AI.agents/experimental/channels: Channels is being rebuilt around conversations and turns, and the oldagents/channelsentry point has been removed. The new API includesChannelGateway, the Web Channel and its client, an AI SDK chat transport, and a newnpx agents tuiterminal client.useAgentChatreconnects,WebChannelClient, MCP credential cleanup onremoveServer(), and x402 with MCP SDK v2.Minor Changes
#2434
0ebeae5Thanks @cjol! - AddAiSdkHarnessfrom the newagents/harness/ai-sdkentry point, which runs each message withstreamTextand keeps sessions and transcripts in the Durable Object, soChannels.forHarnesscan serve an AI SDK model. The same entry point exports the AI SDK message conversions it is built on andcreateSendMessageTool, an AI SDK tool that sends a message to a surface through the gateway.#2431
6393265Thanks @cjol! - AddChannelstoagents/experimental/channels: a Lifecycle capability that serves an agent harness's sessions as conversations to every surface that joins them, with durable, resumable responses onStreams. Connect a harness withChannels.forHarness(harness, { channels }). The entry point also exports the turn protocol types and a draft harness interface (AgentHarness), which may change.#2429
df4cbd6Thanks @cjol! - Breaking: remove the first pass ofagents/channelsand move Channels toagents/experimental/channels.The
agents/channelsentry points are gone, along withChannelHost, thefallbackandfanoutcomposites, and the AI SDK, TanStack AI and Voice helpers from the first pass. Slack, Telegram and Email move toagents/experimental/channels/slack,agents/experimental/channels/telegramandagents/experimental/channels/email, and keep verified ingress and normalization. Channels is being rebuilt around conversations and turns; the new API is experimental and may change between releases.#2432
752cdc3Thanks @cjol! - AddChannelGatewaytoagents/experimental/channels: the Worker entry point that verifies channel webhooks, takes Web Channel upgrades throughweb()fromagents/experimental/channels/web, routes each to the agent object that holds its conversation, and delivers outbound messages. Every Channel that takes ingress needs aparticipantcallback, where the application says who the sender is; Channels never picks an identity. The agent object is the authorization boundary: by default each participant gets one of their own, and aroutecallback can share one between participants or refuse them.#2436
062d091Thanks @cjol! - AddWebChannelChatTransport(agents/experimental/channels/web/ai-sdk), an AI SDKChatTransportover the Web Channel, so AI SDK UIs can join a Channels conversation.#2433
6e6c58aThanks @cjol! - Add the Web Channel (agents/experimental/channels/web) and its client (agents/experimental/channels/web/client), which connect browsers and terminals to a conversation over the agent's WebSockets: live transcript and turns, approvals, client tool results, and creating, forking, resetting, listing and following conversations.WebSocketsgainsusefor protocol handlers that run before the configured ones.#2502
66ae955Thanks @ben-reitz! - Addagents/websearch, aweb_searchtool over Cloudflare's Web Search API for the pi harness, the AI SDK, and TanStack AI. See Search the Web.Patch Changes
#2480
1923625Thanks @cjol! -AiSdkHarness:session.wait(operationId, signal)now rejects straight away whensignalis already aborted, instead of staying pending until the operation settles.#2463
1e97e11Thanks @cjol! -AiSdkHarnessno longer fails to start when it has stored sessions.onStartlisted sessions while listing each one's pending work, and Durable Object storage allows one openkv.list()at a time, so a restarted agent stopped acknowledging messages.#2502
66ae955Thanks @ben-reitz! -AiSdkHarnesspasses its tools toconvertToModelMessages, so a tool'stoModelOutputalso shapes its results on later turns instead of the model getting the raw output as JSON.#2488
98ec934Thanks @ben-reitz! -browserToolnow has its own tool description instead of codemode's generic one. It covers thecdpAPI, common CDP mistakes, and the run time limit, so the model no longer runscodemode.searchfirst. It also explains how to take a smaller screenshot when one is over the 1 MB result limit. See Persistent browser.#2437
5a7643eThanks @cjol! - Addnpx agents tui <url>, a terminal client for a conversation's Web Channel.It streams the transcript with highlighted Markdown, collapsible reasoning and tool cards, and shows messages and turns from every surface live. It answers approvals inline, lets a person type a client tool's result, and cancels the running turn with Esc.
--headeradds headers to the WebSocket upgrade, andCF_ACCESS_CLIENT_ID/CF_ACCESS_CLIENT_SECRETare sent as an Access service token. Its dependencies are bundled intodist/cli.js, so installingagentsadds none.#2514
1203bddThanks @mattzcarey! - Add experimentalagents/harness/container,agents/harness/container/daemon,agents/harness/container/runtimeandagents/harness/store. Everything in them may change before it stabilizes.ContainerHarnessruns an agent CLI such as Claude Code or Codex in a Cloudflare Container (ctx.container) and drives it from a Durable Object, with the same interface asPiHarness(prompt,submit,wait,abort,messages,pending,session(id),sessions). Typed presets (claudeCode(),codex(),containerAgent()) say what runs: the harness builds the container fromcloudflare/debian-trixieat runtime and snapshots it, so there is no image to build, andContainerEgressadds credentials (apiKey,baseUrl,headers) outside the container, which only ever sees a placeholder key. The container stops after an idle timeout (five minutes by default) and the next prompt starts a new one in which the CLI resumes its own session; a container lost mid-run settles that run ascontainer_lost(or reruns it withonContainerLost: "retry"), and an object evicted mid-run reattaches and replays what it missed.agents/harness/container/runtimeis the daemon's Node runtime withcliAdapter, for images that bring their own CLI;agents/harness/container/daemonis its runtime-agnostic core; andagents/harness/storeis a session store on the object's SQLite that any harness can use.#2475 [
7a4c6c0](https://redirect.github.com/cloudflare/agents/commit/7a4cConfiguration
📅 Schedule: (in timezone Europe/Warsaw)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.