0.18.0
Added 2
- Export new toStrictJsonSchema() and omitNullToolArguments() utilities from @composio/core
- Add opt-in strict=True constructor flag to Python OpenAIResponsesProvider that emits strict: true on the wrapped tool
Changed 2
- 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
- Declare Node.js 22.22.3 as the minimum supported runtime for every published TypeScript package
Fixed 6
- 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
- Block automatic uploads when a sensitive directory or file name is hidden by symlink resolution
- Bound telemetry requests with a timeout so a stalled telemetry endpoint cannot leave an SDK call pending indefinitely
- Omit empty-string file-uploadable arguments from tool execution requests instead of forwarding them to the backend
- Fix ComposioError subclasses to properly assign this.name so they report their own class name instead of 'ComposioError'
- 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
From Composio
Minor Changes
- 04817cb: Fix strict-mode tool schemas for OpenAI structured outputs. Strict normalization now applies OpenAI's contract at every depth (nested objects,
anyOfbranches, array items, inlined$ref/$defs): every object lists all of its properties inrequiredand setsadditionalProperties: 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 acceptnull, the emulation of optional fields OpenAI documents, and the strict providers drop anullargument 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$refs) are sent without strict mode with a warning naming the tool and path, instead of being narrowed.@composio/coreexports the newtoStrictJsonSchema()andomitNullToolArguments()utilities;removeNonRequiredPropertiesis unchanged for other callers. The PythonOpenAIResponsesProvidergains a matching opt-instrict=Trueconstructor flag that also emitsstrict: trueon 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
dangerouslyAllowAutoUploadDownloadFilesis 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.nameassignment and therefore reportednameas '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
assertSafeFetchTargetis now the addressssrfSafeFetchconnects 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 inHostand TLS SNI, so certificate verification is unchanged. Hops whose effective dispatcher is a configured route — a caller-supplieddispatcher, a globalProxyAgent/EnvHttpProxyAgent, orNODE_USE_ENV_PROXYenv-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