Minor Changes
-
efc2e52: Keep TypeScript realtime subscription errors inside the SDK logging boundary so an asynchronous Pusher subscription failure cannot escape as an uncaught exception. The full subscription error payload is now logged, the success message is logged only once Pusher confirms the subscription, and
PusherService.subscribe/Triggers.subscribeaccept an optionalonSubscriptionErrorcallback so applications can react to subscription failures programmatically. -
4b5920b: Add
session.ensureConnected(toolkit, options?): it returns immediately when the session already resolves an active connection (or the toolkit is no-auth), and only when needed starts the authorization flow viasession.authorize()and waits for the new connection to become active. This preventsauthorize()from spawning duplicate pending connections for toolkits that are already connected. Thesession.execute()accountoption is now documented as accepted on every project — on single-account projects the identifier must match one of the session's active connections for the toolkit (matching the API behavior). -
c7843d8: Expose the server-side session configuration on sessions and return it from
update().session.confignow carries the toolkit/tool allowlists, tags, auth configs, connected accounts,manage_connections, preload and sandbox settings the API returned for the session (fromcreate(),use()and after everyupdate()), andsession.update()resolves to that updated config instead ofvoid. Previously the onlyconfigreachable on a session object at runtime was the SDK's ownComposioConfig, and reading the live allowlist aftersessions.use(id)required dropping to the raw client.configis a required member of theSessioninterface, so objects you construct yourself to satisfySession(test doubles, wrappers) now need aconfigvalue. Callers of SDK-created sessions are unaffected. The read side is the raw API shape (toolkits.enabled,manage_connections), whileupdate()keeps taking the SDK's camelCase input.
Patch Changes
- 62e51e8: Refresh runtime dependencies and extend provider peer compatibility to the latest supported Anthropic and OpenAI Agents SDK releases.
- 7055914: Move published dependency ranges to their current upstream releases: zod 4.5, openai 7.10, typebox 1.3.27, @mastra/schema-compat 1.3.8, and @cloudflare/workers-types 5.20260905.
@composio/anthropicalso accepts@anthropic-ai/sdk0.124 as a peer, the line it is now tested against. - b4b9fc4: Guard schema
patternandpatternPropertiescompilation. A pattern that does not compile or exceeds 1024 characters now fails conversion with anInvalidPatternErrorthat names the offending property path instead of a rawSyntaxError.@composio/coresurfaces that path in theJsonSchemaToZodErrormessage. No backtracking heuristic is applied: a hostilepatternthat backtracks catastrophically remains a known limitation. - d4d3060: Fix
composio.mcp.update()silently dropping parts of the requested configuration. Tool-only updates (allowedToolswithouttoolkits) sent no tools field at all, updates with toolkits sent the deprecated create-timecustom_toolsalias that the update endpoint ignores instead ofallowed_tools, andmanuallyManageConnectionswas forwarded as-is instead of being inverted intomanaged_auth_via_composio(somanuallyManageConnections: truestored the opposite configuration).create()andupdate()now also keep the auth config of a{ toolkit, authConfigId }toolkit entry instead of discarding it, andcreate()sendsallowed_toolsrather than the deprecatedcustom_toolsalias, matching the Python SDK. - 9d0cb2c: Export
readResponseBodyWithLimitandMAX_URL_UPLOAD_SIZE_BYTESso downstream packages can apply the SDK's 100 MiB cap when they download a file from a user-supplied URL. The CLI's tool-input file uploads now use it instead of buffering the whole response. - ba85f4d: Apply the Fetch standard's redirect rules in
ssrfSafeFetch, which following redirects manually meantfetchnever applied: a303now retries as a bodilessGETinstead of replaying an upload's method and body at a result URL, a301/302does the same for aPOST, and307/308keep replaying both. Only301,302,303,307and308count as redirects to follow, so a304or305carrying aLocationis returned to the caller rather than followed. - ba85f4d: Close the IPv6 transition ranges the SSRF guard's address blocklist let through: 6to4 (
2002::/16), Teredo and the rest of2001::/23, local-use NAT64 (64:ff9b:1::/48),100::/64,2001:db8::/32and site-localfec0::/10each carry or reach an arbitrary IPv4 address, so2002:7f00:1::was a public-looking literal for127.0.0.1. IPv4 multicast and the192.88.99.0/246to4 relay range are blocked too. - 85996c4: Drop
Authorization,Proxy-Authorization, andCookiefrom the request headers when the SSRF guard follows a redirect to a different origin, as the Fetch standard does for automatic redirects. Same-origin redirects keep them. - eccb80e: Add an opt-in strict mode to
ssrfSafeFetchthat rejects configured network
routes when the connection cannot be pinned to the validated address. - 8bb1d29: Stop reporting every failed tool lookup as
ComposioToolNotFoundError.tools.getRawComposioToolBySlug, and thetools.get/tools.executepaths that call it, now raiseComposioToolNotFoundErroronly when the API answers 404 or 400. Any other failure, such as an invalid API key (401), a server error, or a network fault, raises the newComposioToolFetchErrorwith the client error preserved ascause.toolkits.get(slug)now applies its 404/400 check against the Composio client'sAPIErrorinstead of the OpenAI one, so an unknown toolkit raisesComposioToolkitNotFoundErroras documented. - e9fcbe3: Stop dropping
is_secret,legacy_template_nameandauth_hint_urlfrom toolkit auth config details.transformToolkitRetrieveResponsepassed the auth field groups through unchanged, so the snake_case keys never matchedToolkitAuthFieldSchemaand zod stripped them during validation;auth_hint_urlwas never mapped at all. Fields returned bytoolkits.getConnectedAccountInitiationFields()andtoolkits.getAuthConfigCreationFields()now carryisSecret, which the API documents as the signal for whether a client should mask the input, pluslegacyTemplateName; auth config details returned bytoolkits.get()now carryauthHintUrl. Each of these keys is present only when the API sends it, so spreading a field no longer overwrites a caller's own fallback withundefined. An auth config detail that omits a field group entirely now yields empty lists for that group, matching how the docs pipeline defaults them, instead of failing validation and leaving the other group unusable. - 9a69683: Correct the JSDoc for
tools.getInputandtools.proxyExecute. ThegetInputexample now passes the requiredtextfield and reads the generatedarguments. TheproxyExecuteexample now uses the flatendpoint/method/connectedAccountIdshape and explains that a relative endpoint is appended to the toolkit's base URL, which can already include a path. Thetools.executeexample shows where to find the version to pin. - Updated dependencies [b4b9fc4]
- @composio/json-schema-to-zod@0.3.3