npm / @composio/core
@composio/core
What changed in @composio/core 0.25 to 0.27, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-28.
12 breaking1 deprecations8 new APIs and options5 behavior and defaults4 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@composio/core 0.273 changes
Breaking changes 1
session.proxyExecute() and ctx.proxyExecute() return resultType: 'completed' or resultType: 'blocked'. Blocked requests have no HTTP response, so check resultType before reading status.
New APIs and options 1
create() and update() accept session hooks that can block a tool call before it runs or block its result before the agent sees it. On update, hooks replaces the list; null removes all hooks. hooks cannot be combined with experimental.sessionConfigId.
Behavior and default changes 1
Blocked calls from session.execute() and session.executeMeta() return resultType: 'blocked', empty data, the hook's message in error, and blockReason. Every result also carries hookResults when a hook applied.
@composio/core 0.2613 changes
Breaking changes 8
The SDK passes credentials through the API client's auth option and organization/project scope through scope, rather than placing them in default headers.
The SDK no longer applies this environment variable; pass defaultHeaders instead.
For S2S_OAUTH2, customConnectionData now requires val.access_token, matching the API requirement.
The returned client no longer exposes apiKey, userApiKey, orgApiKey, or logger; baseURL, maxRetries, timeout, and logLevel are read-only. Read keys from getConfig and derive clients with withOptions to change the other settings.
A per-call headers option can no longer specify credential or scope headers.
String formats outside the listed OpenAI-supported set are removed from strict tool schemas and reported as unsupported-keyword-stripped.
OpenAPI nullable is converted into a null type or null branch instead of being passed through; nullable: false is stripped and the rewrite is reported.
Setting more than one of x-api-key, x-user-api-key, and x-org-api-key now throws ComposioError because the API rejected every such request.
Deprecations 1
The SDK warns once per toolkit version when the API marks it deprecated, including the version, sunset date, and how to pin a newer version; error log level silences the warning.
Behavior and default changes 2
Credential and scope headers are folded into SDK options rather than forwarded; getConfig reports the folded values and omits those headers from defaultHeaders.
When apiKey is null and only an organization API key is supplied, every request, trigger channel authorization, and session.mcp.headers now carry x-org-api-key.
Fixes and other changes 2
String tool parameters are checked as base64 only when contentEncoding is base64; binary and other encodings are plain strings, while byte remains unchecked.
Null values are retained for properties marked nullable: true, as they already are when the type includes null.
@composio/core 0.2514 changes
Breaking changes 3
Setting API-client-owned identity and runtime headers through defaultHeaders or createSession({ headers }) now throws a ComposioError instead of silently overwriting them.
executeMeta() takes approval answers as its third argument, moving request options to the fourth.
unsubscribe() closes the realtime connection so a Node process can exit; calling it before subscribe() no longer fetches credentials or creates a client.
New APIs and options 7
Matching tool calls do not run and execute() or executeMeta() throws this error with questions on inputRequests; answers and requestState can be supplied when repeating the call.
The Python SDK gains the deny-or-allow fallback setting for sessions whose MCP client cannot ask the user.
Sets whether a call is denied or allowed when the session's MCP client cannot ask the user for approval.
The Python SDK adds input_responses and request_state to session.execute() and session.execute_meta() for answering approval requests.
Repeat a tool call with the user's answers in inputResponses and the error's requestState; forward decline and cancel responses unchanged.
The Python SDK gains require_approval lists for session tool approval.
Sessions accept a requireApproval list alongside toolkits, tools, and tags filters on create() and update(); matching tool calls require user approval before they run.
Behavior and default changes 2
The SDK reports itself through the API client's identity option instead of default headers. On Cloudflare Workers and Vercel Edge with Node.js compatibility enabled, x-client-runtime names that runtime and x-runtime-version is no longer sent.
A custom provider name that is not printable ASCII or has leading or trailing whitespace is reported as unknown in x-framework.
Fixes and other changes 2
Rejected promises from async trigger handlers are logged like synchronous throws instead of escaping as unhandled rejections; handler failures log the error message.
Concurrent subscribe() calls share one connection, and unsubscribe() cancels a subscription that is still connecting so it never opens a connection or delivers events afterwards.