Repository navigation
chore(deps): update minor dependencies (minor) - #34
Merged
Merged
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
6 times, most recently
from
November 1, 2026 11:34
13a6ed4 to
cb90e89
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
2 times, most recently
from
November 2, 2026 12:38
c205ffe to
a9f305f
Compare
oritwoen
approved these changes
Nov 2, 2026
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
2 times, most recently
from
November 2, 2026 21:11
c739e57 to
eb06a81
Compare
renovate
Bot
force-pushed
the
renovate/minor-dependencies
branch
from
November 2, 2026 21:32
eb06a81 to
f83286d
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.026.2.0→26.6.60.24.0→0.32.00.33.0v26.10.0→26.13.01.3.34→1.4.31.0.0→1.4.01.0.0→1.4.04.128.0→4.156.04.157.0(+2)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
v2.3.0Compare Source
Minor Changes
433eb41Thanks @claude! - The HTTP client transports and the OAuth client helpers now follow a redirect only when it stays within the origin of the request (same scheme, host and port, or http to https on the same host with default ports) and keeps the method (a 307 or 308, or any redirect of a GET). Any other redirect is not followed. A transport then fails the request with an error that names the target; the session is kept and later messages still send. OAuth metadata discovery moves on to the next well-known URL, and any other OAuth request fails with an error that gives the status. Same-origin redirects that keep the method keep working on Node, up to five in a row, and no code changes are needed there. If your endpoint redirects to another origin, configure the transport with the URL it redirects to. ArequestInit.redirectof'error'or'manual'is passed to fetch as it is for the requests a transport sends to the server (POST, GET and DELETE of the Streamable HTTP transport, POST of the SSE transport); for its OAuth requests, and for any other value,requestInit.redirectis not consulted by default. Browsers do not expose the target of a redirect to a page, so there a redirected request fails instead of being followed. SettingredirectPolicy: 'follow'on a transport leaves its redirects to the fetch implementation, as before this change.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'.#2846
63c0fcaThanks @Sthreal! - Receiving a large message as a single SSE event over Streamable HTTP, such as a tool result of tens of megabytes, is now fast: a 50 MB result that took about 13 seconds arrives in under a second. The client now requireseventsource-parser3.0.8 or later.SSEClientTransportreads through theeventsourcepackage and gets the same speed-up once that also resolveseventsource-parser3.0.8 or later.#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.#2903
e765b3bThanks @claude! - WithversionNegotiationin'auto'or pin mode, aserver/discoverprobe answered with a 2xx that carries no usable reply (a body thatis not JSON under
application/json, a bare204, a missing or unaccepted content type) still rejectsconnect()withEraNegotiationFailed; an empty SSE stream or a202surfaces as the probe timeout instead. The message now saysthe server answered with an unusable reply (...)instead of reading like a network failure. To connect to a 2025 server behind a front thatanswers the probe this way, pass
connect(transport, { prior: { kind: 'legacy' } })or usemode: 'legacy'.#2905
c0cd01aThanks @claude! -SSEClientTransportnow retries the SSE connection once afteronUnauthorized()resolves, as documented. If the retry is also answered with 401,start()rejects withSdkHttpError(ClientHttpAuthentication) instead of callingonUnauthorized()again. A 401 on a later reconnect of a stream that had opened still gets one refresh.Updated dependencies [
633dd3e]:cloudflare/agents (agents)
v0.32.0Compare Source
Minor Changes
#2752
34cbd30Thanks @mattzcarey! - Addexperimental_registerOpenTelemetry()toagents/observability, which records spans from OpenTelemetry-instrumented libraries as Workers trace spans. Experimental and subject to change.#2771
54ae3e8Thanks @mattzcarey! - Breaking:agents/skillsnow loads Agent Skills from Computer Workspace files (workspace()), R2 (r2()), or code (manifest()), checksSKILL.mdagainst the Agent Skills spec, and replacesSkillRegistrywithloadSkillCatalog()andcreateSkillTools()(fromagents/skills/tools/ai-sdk);parseSkill()follows the spec's guide for agents, loading skills that break a rule with warnings;runner()moved toagents/skills/runner; theagents:skillsVite import andagents/skills/compileare removed. See Agent Skills.Patch Changes
#2763
df85805Thanks @mattzcarey! - Agents SDK spans (agent lifecycle,wrapAISDK, Think) now set span statuserroron failure, where the Workers runtime supportsSpan.setStatus(); attributes are unchanged. See Observability.#2737
08747d9Thanks @mattzcarey! - Mark the package side-effect free (apart from the CLI), so bundlers drop the modules a Worker doesn't use.import { routeAgentRequest } from "agents"no longer bundles the MCP client.#2744
a2d371eThanks @mattzcarey! - Update@modelcontextprotocol/clientand@modelcontextprotocol/serverto 2.4.0 and@modelcontextprotocol/sdkto 1.32.2, and add aclientMetadataUrloption toDurableObjectOAuthClientProviderfor OAuth Client ID Metadata Documents. See MCP client.#2740
8cf6da1Thanks @mattzcarey! -agents/models/pi-aiparses streamed chat-completions tool-call arguments incrementally, instead of re-parsing the whole argument text on every delta.#2766
b372289Thanks @github-actions! - Allow@tanstack/ai1.x in the optional peer dependency ranges, and type the TanStack AI tools so they compile against both 0.x and 1.x. See TanStack AI.v0.31.0Compare Source
This release adds internal hostnames to the browser. Give a Browser Run browser hostnames such as
preview.internal, and its requests to them go to your agent instead of the internet, so the model can open a dev server, a workspace folder or another Worker in the same browser it uses for the web.Highlights
browserRun()asinternalHosts. Serve each one from afetchfunction on your agent or from another Worker. See Internal hostnames.targetschema, and the model chooses what it serves withbrowser.assignHost(), such as a container port or a folder in its workspace. Without a target, a host always serves the same thing.@modelcontextprotocol/sdkand@modelcontextprotocol/serverare now optional peer dependencies, so apps that don't serve MCP no longer install them.agents/models/ai-sdkandagents/models/pi-aiare no longer experimental. See Models.createMcpHandlerpasses the verified token from@cloudflare/workers-oauth-provider1.x to tool callbacks ascontext.http.authInfo.createAIfromagents/models/pi-aisends pi-ai's Anthropic betas for catalog Claude models.PiWhenBusyaccepts"reject".browserToolimprovements: the model's code runs in its own Dynamic Worker instead of on codemode, and is stopped from outside that Worker if it overruns its timeout. It can no longer close the browser or create a Live View link.this.browser.session()lets your own code drive the same browser.createBrowserTools,createBrowserRuntime,BrowserConnectorand the Quick Action helpers are deprecated in favour ofbrowserTool.Upgrading
You only need to make changes if you serve MCP or use
browserTool.If you serve MCP or use
agents/x402oragents/experimental/webmcp:Add the MCP packages to your
package.jsonat the versions this release expects, since your package manager no longer installs them. Until you do, builds fail with an unresolved import.agents/mcp(McpAgent,WorkerTransport,createLegacyMcpHandler) andagents/x402:@modelcontextprotocol/sdk@1.32.1and@modelcontextprotocol/server@2.3.1agents/mcp/server(createMcpHandler):@modelcontextprotocol/server@2.3.1agents/experimental/webmcp:@modelcontextprotocol/sdk@1.32.1See Upgrading an existing
McpAgentserver.Import client helpers such as
RPCClientTransportfromagents/mcp/clientinstead ofagents/mcp. MCP client code needs neither package.If you use
browserTool:Remove the
CodemodeRuntimeexport from your Worker unlesscreateBrowserToolsstill uses it, and removectxfrombrowserTool's options. Keep theLOADERbinding and keep@cloudflare/codemodeinstalled for now.Update instructions of your own that mention
cdp.send, such as a system prompt. The tool's description already teaches the new call:Read
noticeinstead ofrestarted,newTabsandcallsif your code inspects results.noticesays in sentences whether the browser restarted, the page opened tabs, or another chat closed or shares the tab.PiBrowserToolDetailsnow has onlyexecutionIdandstatus.Minor Changes
#2673
865a57eThanks @ben-reitz! - AddinternalHoststobrowserRun()provider: set internal hostnames the browser can reach through your agent. Allow the model to point these hostnames at specific targets like container ports or workspace folders withbrowser.assignHost(). See Internal hostnames.#2667
03b4609Thanks @ben-reitz! -browserToolnow runs the model's code in its own Dynamic Worker instead of on codemode, so it needs noctxorCodemodeRuntimeexport (keep@cloudflare/codemodeinstalled for now) and its output has nocallslog;browser.session()gives your own code the same connection to the browser. See Persistent browser.#2634
565e37cThanks @mattzcarey! -@modelcontextprotocol/sdkand@modelcontextprotocol/serverare now optional peer dependencies, so add them to yourpackage.jsonif you useagents/mcp,agents/mcp/server,agents/x402oragents/experimental/webmcp. See Upgrading an existingMcpAgentserver.Patch Changes
#2668
183c141Thanks @ben-reitz! -browserTool's model code now calls abrowserglobal (browser.cdp(...),browser.spec({ domain })) instead ofcdp.send(...), and the result'snoticereplaces therestartedandnewTabsfields. See Persistent browser.#2666
57c7813Thanks @ben-reitz! -createBrowserTools,createBrowserRuntimeandBrowserConnectorare deprecated; usebrowserTool. See Persistent browser. The Quick Action helpers (createQuickActionTools,runQuickAction,browserMarkdownand the rest) are deprecated too and will not change.#2743
f049ee1Thanks @mattzcarey! -agents/models/ai-sdkandagents/models/pi-aiare no longer experimental. See Models.#2718
916c0e3Thanks @ben-reitz! -createAIfromagents/models/pi-ainow sends pi-ai'sbetasas theanthropic-betaheader for catalog Claude models on/run, as it already did on the provider-native path. See #2714.#2717
4d7734aThanks @ben-reitz! -PiWhenBusyaccepts"reject", whichPiHarness.submit()already passed through to pi-durable. See Pi harness.#2680
2a25d88Thanks @mattzcarey! -createMcpHandlernow reads the verified token that@cloudflare/workers-oauth-provider1.x sets asctx.auth, so tool callbacks receivecontext.http.authInfo(token, client ID, scopes, expiry and resource) behindOAuthProviderandOAuthResourceServer.getMcpAuthContext().propsis unchanged.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](https://rConfiguration
📅 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.