# Composio 0.18.0 - Product: Composio (https://whatsnew.fyi/product/composio) - Vendor: Composio - Date: 2026-08-27 - Version: 0.18.0 - Original notes: https://github.com/ComposioHQ/composio/releases/tag/%40composio/core%400.18.0 - Permalink: https://whatsnew.fyi/product/composio/releases/0.18.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **fixed** — Fix strict-mode tool schemas for OpenAI structured outputs so nested objects, anyOf branches, array items, and inlined references conform to OpenAI's contract at every depth - **changed** — Optional parameters are no longer dropped and are widened to accept null, with strict providers dropping null arguments the tool's schema does not accept before execution - **added** — Export new toStrictJsonSchema() and omitNullToolArguments() utilities from @composio/core - **added** — Add opt-in strict=True constructor flag to Python OpenAIResponsesProvider that emits strict: true on the wrapped tool - **fixed** — Block automatic uploads when a sensitive directory or file name is hidden by symlink resolution - **fixed** — Bound telemetry requests with a timeout so a stalled telemetry endpoint cannot leave an SDK call pending indefinitely - **changed** — Declare Node.js 22.22.3 as the minimum supported runtime for every published TypeScript package - **fixed** — Omit empty-string file-uploadable arguments from tool execution requests instead of forwarding them to the backend - **fixed** — Fix ComposioError subclasses to properly assign this.name so they report their own class name instead of 'ComposioError' - **fixed** — Close DNS-rebinding window in SSRF guard by validating and pinning the address that ssrfSafeFetch connects to, with each redirect hop re-validated and re-pinned ###### Minor Changes - 04817cb: Fix strict-mode tool schemas for OpenAI structured outputs. Strict normalization now applies OpenAI's contract at every depth (nested objects, `anyOf` branches, array items, inlined `$ref`/`$defs`): every object lists all of its properties in `required` and sets `additionalProperties: false`, so tools with nested or optional parameters no longer produce schemas the API rejects with a 400. Optional parameters are no longer dropped: they stay available and are widened to accept `null`, the emulation of optional fields OpenAI documents, and the strict providers drop a `null` argument the tool's own schema does not accept before executing the tool. Tools whose schema strict mode cannot express (objects with arbitrary keys, `allOf`, `prefixItems`, unresolved `$ref`s) are sent without strict mode with a warning naming the tool and path, instead of being narrowed. `@composio/core` exports the new `toStrictJsonSchema()` and `omitNullToolArguments()` utilities; `removeNonRequiredProperties` is unchanged for other callers. The Python `OpenAIResponsesProvider` gains a matching opt-in `strict=True` constructor flag that also emits `strict: true` on the wrapped tool. ###### Patch Changes - 449f4e1: Block automatic uploads when a sensitive directory or file name is hidden by symlink resolution. - 9545806: Bound the best-effort telemetry requests with a timeout so a stalled telemetry endpoint cannot leave an SDK call pending indefinitely. - db7b576: Declare Node.js 22.22.3 as the minimum supported runtime for every published TypeScript package so package managers surface incompatible runtimes before users encounter ESM loading failures. - fe66cbe: Omit empty-string file-uploadable arguments from tool execution requests instead of forwarding them to the backend, which rejected them with "Input should be a valid dictionary or instance of FileUploadable". This now also applies when `dangerouslyAllowAutoUploadDownloadFiles` is off, and with it on an empty value is no longer attempted as an upload. - c0f1609: Fix three ComposioError subclasses (ComposioToolVersionRequiredError, JsonSchemaToZodError, JsonSchemaRefResolutionError) that omitted their `this.name` assignment and therefore reported `name` as 'ComposioError' instead of their own class name, mis-grouping distinct error types in error telemetry. - d544006: Close a DNS-rebinding window in the SSRF guard: the address validated by `assertSafeFetchTarget` is now the address `ssrfSafeFetch` connects to, so a hostname is no longer resolved a second time between the check and the connection. Each redirect hop is re-validated and re-pinned. The request still carries the original hostname in `Host` and TLS SNI, so certificate verification is unchanged. Hops whose effective dispatcher is a configured route — a caller-supplied `dispatcher`, a global `ProxyAgent`/`EnvHttpProxyAgent`, or `NODE_USE_ENV_PROXY` env-proxy mode — keep the pre-flight check only, mirroring the Python guard's documented proxy residual. - Updated dependencies [db7b576] - @composio/json-schema-to-zod@0.3.1