github ComposioHQ/composio @composio/core@0.19.0

one month ago

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.subscribe accept an optional onSubscriptionError callback 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 via session.authorize() and waits for the new connection to become active. This prevents authorize() from spawning duplicate pending connections for toolkits that are already connected. The session.execute() account option 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.config now carries the toolkit/tool allowlists, tags, auth configs, connected accounts, manage_connections, preload and sandbox settings the API returned for the session (from create(), use() and after every update()), and session.update() resolves to that updated config instead of void. Previously the only config reachable on a session object at runtime was the SDK's own ComposioConfig, and reading the live allowlist after sessions.use(id) required dropping to the raw client.

    config is a required member of the Session interface, so objects you construct yourself to satisfy Session (test doubles, wrappers) now need a config value. Callers of SDK-created sessions are unaffected. The read side is the raw API shape (toolkits.enabled, manage_connections), while update() 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/anthropic also accepts @anthropic-ai/sdk 0.124 as a peer, the line it is now tested against.
  • b4b9fc4: Guard schema pattern and patternProperties compilation. A pattern that does not compile or exceeds 1024 characters now fails conversion with an InvalidPatternError that names the offending property path instead of a raw SyntaxError. @composio/core surfaces that path in the JsonSchemaToZodError message. No backtracking heuristic is applied: a hostile pattern that backtracks catastrophically remains a known limitation.
  • d4d3060: Fix composio.mcp.update() silently dropping parts of the requested configuration. Tool-only updates (allowedTools without toolkits) sent no tools field at all, updates with toolkits sent the deprecated create-time custom_tools alias that the update endpoint ignores instead of allowed_tools, and manuallyManageConnections was forwarded as-is instead of being inverted into managed_auth_via_composio (so manuallyManageConnections: true stored the opposite configuration). create() and update() now also keep the auth config of a { toolkit, authConfigId } toolkit entry instead of discarding it, and create() sends allowed_tools rather than the deprecated custom_tools alias, matching the Python SDK.
  • 9d0cb2c: Export readResponseBodyWithLimit and MAX_URL_UPLOAD_SIZE_BYTES so 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 meant fetch never applied: a 303 now retries as a bodiless GET instead of replaying an upload's method and body at a result URL, a 301/302 does the same for a POST, and 307/308 keep replaying both. Only 301, 302, 303, 307 and 308 count as redirects to follow, so a 304 or 305 carrying a Location is 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 of 2001::/23, local-use NAT64 (64:ff9b:1::/48), 100::/64, 2001:db8::/32 and site-local fec0::/10 each carry or reach an arbitrary IPv4 address, so 2002:7f00:1:: was a public-looking literal for 127.0.0.1. IPv4 multicast and the 192.88.99.0/24 6to4 relay range are blocked too.
  • 85996c4: Drop Authorization, Proxy-Authorization, and Cookie from 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 ssrfSafeFetch that 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 the tools.get / tools.execute paths that call it, now raise ComposioToolNotFoundError only 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 new ComposioToolFetchError with the client error preserved as cause. toolkits.get(slug) now applies its 404/400 check against the Composio client's APIError instead of the OpenAI one, so an unknown toolkit raises ComposioToolkitNotFoundError as documented.
  • e9fcbe3: Stop dropping is_secret, legacy_template_name and auth_hint_url from toolkit auth config details. transformToolkitRetrieveResponse passed the auth field groups through unchanged, so the snake_case keys never matched ToolkitAuthFieldSchema and zod stripped them during validation; auth_hint_url was never mapped at all. Fields returned by toolkits.getConnectedAccountInitiationFields() and toolkits.getAuthConfigCreationFields() now carry isSecret, which the API documents as the signal for whether a client should mask the input, plus legacyTemplateName; auth config details returned by toolkits.get() now carry authHintUrl. Each of these keys is present only when the API sends it, so spreading a field no longer overwrites a caller's own fallback with undefined. 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.getInput and tools.proxyExecute. The getInput example now passes the required text field and reads the generated arguments. The proxyExecute example now uses the flat endpoint / method / connectedAccountId shape and explains that a relative endpoint is appended to the toolkit's base URL, which can already include a path. The tools.execute example shows where to find the version to pin.
  • Updated dependencies [b4b9fc4]
    • @composio/json-schema-to-zod@0.3.3

Don't miss a new composio release

NewReleases is sending notifications on new releases.