Skip to content

ci: Version Packages#913

Open
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main
Open

ci: Version Packages#913
github-actions[bot] wants to merge 1 commit into
mainfrom
changeset-release/main

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.

Releases

@tanstack/ai@0.41.0

Minor Changes

  • #405 2665085 - Added Gemini Realtime Adapter

  • #918 f830d9e - Gate the tool-call part's approval field on the tool's needsApproval flag.
    Previously approval? was declared on every typed tool-call part regardless of
    whether the tool could ever request approval. Now the flag is captured as a
    literal type (toolDefinition({ needsApproval: true })true) and threaded
    through ClientTool / ToolDefinitionInstance / ToolDefinition, and
    ToolCallPartForTool only includes approval for tools defined with
    needsApproval: true:

    const { messages } = useChat({ tools: [getGuitars, addToCart] }) // addToCart: needsApproval: true
    for (const part of message.parts) {
      if (part.type !== 'tool-call') continue
      if (part.name === 'addToCart') part.approval?.id // ✅ typed
      if (part.name === 'getGuitars') part.approval // ✅ compile error — no such field
    }

    ⚠️ Breaking change (types only)

    This is the primary migration surface for this release. When you pass a typed
    tools array to useChat / createChat / injectChat, reading part.approval
    on a mixed tool-call union without first narrowing by part.name no longer
    compiles. Code that previously did part.approval?.id in a generic handler over
    all tool-call parts must be updated:

    // ❌ No longer compiles on a typed mixed union
    part.approval?.id
    
    // ✅ Narrow to an approval-required tool first
    if (part.name === 'deleteAccount') part.approval?.id
    
    // ✅ Or guard with `in`
    if ('approval' in part) part.approval?.id
    
    // ✅ Or type the handler against the base (untyped) ToolCallPart
    function handleApproval(part: ToolCallPart) {
      return part.approval?.id
    }

    Untyped useChat() (no inferred tools generic) and the base ToolCallPart
    type are unaffected: approval stays available on every tool-call part there.
    Runtime behavior is unchanged — only TypeScript narrowing is stricter.

    Adds a TNeedsApproval extends boolean type parameter (defaulting to false)
    to the client tool types; existing explicit type arguments keep working via the
    default. Literal capture requires toolDefinition({ needsApproval: true }) at
    the call site — a dynamic needsApproval: boolean variable will not gate the
    type.

  • #918 f830d9e - Populate the parsed input on tool-call message parts. ToolCallPart already
    declared a typed input? field, but it was never written at runtime — only the
    raw arguments string (and output) were set, so part.input was always
    undefined and consumers had to fall back to part.input ?? JSON.parse(part.arguments).

    input is now set from the parsed arguments once they are complete
    (state: 'input-complete' and later, including approval-requested), in the
    streaming processor, the TOOL_CALL_END-with-parsed-input path, and when
    hydrating history via modelMessagesToUIMessages. While arguments are still
    streaming, input stays undefined and the raw arguments string remains the
    live source. A tool call that terminates in an error state may also keep input
    unset. arguments is unchanged, always present, and not deprecated.

    With typed tools (useChat({ tools })), part.input is fully typed per tool
    via the part.name discriminant — matching part.output.

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • #886 de5fbb5 - Fix generateVideo / getVideoJobStatus rejecting video adapters that declare a narrowed per-model duration union (e.g. Gemini's 4 | 6 | 8 for Veo or 10 for Omni Flash) at the type level. The activity's TAdapter extends VideoAdapter<string, any, any, any> constraints left the input-modality and duration generics at their defaults, so duration?: number failed contravariance against the adapter's literal union. All video-activity constraints and helper conditionals now span all six VideoAdapter generics.

@tanstack/ai-client@0.21.0

Minor Changes

  • #405 2665085 - Added Gemini Realtime Adapter

  • #918 f830d9e - Gate the tool-call part's approval field on the tool's needsApproval flag.
    Previously approval? was declared on every typed tool-call part regardless of
    whether the tool could ever request approval. Now the flag is captured as a
    literal type (toolDefinition({ needsApproval: true })true) and threaded
    through ClientTool / ToolDefinitionInstance / ToolDefinition, and
    ToolCallPartForTool only includes approval for tools defined with
    needsApproval: true:

    const { messages } = useChat({ tools: [getGuitars, addToCart] }) // addToCart: needsApproval: true
    for (const part of message.parts) {
      if (part.type !== 'tool-call') continue
      if (part.name === 'addToCart') part.approval?.id // ✅ typed
      if (part.name === 'getGuitars') part.approval // ✅ compile error — no such field
    }

    ⚠️ Breaking change (types only)

    This is the primary migration surface for this release. When you pass a typed
    tools array to useChat / createChat / injectChat, reading part.approval
    on a mixed tool-call union without first narrowing by part.name no longer
    compiles. Code that previously did part.approval?.id in a generic handler over
    all tool-call parts must be updated:

    // ❌ No longer compiles on a typed mixed union
    part.approval?.id
    
    // ✅ Narrow to an approval-required tool first
    if (part.name === 'deleteAccount') part.approval?.id
    
    // ✅ Or guard with `in`
    if ('approval' in part) part.approval?.id
    
    // ✅ Or type the handler against the base (untyped) ToolCallPart
    function handleApproval(part: ToolCallPart) {
      return part.approval?.id
    }

    Untyped useChat() (no inferred tools generic) and the base ToolCallPart
    type are unaffected: approval stays available on every tool-call part there.
    Runtime behavior is unchanged — only TypeScript narrowing is stricter.

    Adds a TNeedsApproval extends boolean type parameter (defaulting to false)
    to the client tool types; existing explicit type arguments keep working via the
    default. Literal capture requires toolDefinition({ needsApproval: true }) at
    the call site — a dynamic needsApproval: boolean variable will not gate the
    type.

Patch Changes

@tanstack/ai-gemini@0.20.0

Minor Changes

  • #886 de5fbb5 - Add Gemini Omni Flash (gemini-omni-flash-preview) video generation via the Interactions API. Omni only serves the Interactions API (generateContent rejects it), so the video adapter now routes by model: Veo models keep the :predictLongRunning operations flow, while geminiVideo('gemini-omni-flash-preview') creates a background interaction with response_modalities: ['video'], polls it by id, and returns the inline base64 MP4 as a data: URL (Files-API URI delivery passes through). Usage is mapped from the interaction's output_tokens_by_modality. Image and video prompt parts are sent as interaction content blocks, and modelOptions.previous_interaction_id chains a new prompt onto a prior Omni generation for conversational video editing. The top-level size option maps onto response_format.aspect_ratio ('16:9' | '9:16') and duration onto response_format.duration — any value in the 3–10 second range (fractional seconds included, verified against the live API), defaulting to a 10-second clip when omitted. Raises the @google/genai floor to ^2.10.0 for the Interactions API surface.

  • #908 dcc7407 - fix(ai-gemini, ai-openai): don't buffer arbitrary HTTP(S) URL image inputs by default on paths that require uploaded bytes.

    Gemini Veo (createGeminiVideo), OpenAI image edits (createOpenaiImage), and OpenAI Sora input_reference (createOpenaiVideo) have no URL passthrough — the provider only accepts inline bytes (or, for Veo, a gs:// reference). Previously an HTTP(S) URL image input was silently fetched and buffered in memory, which can OOM memory-constrained runtimes (e.g. Cloudflare Workers).

    These paths now throw on an HTTP(S) URL image input by default, with an error pointing to the alternatives. data: URIs (and gs:// for Veo) still work without any flag. To opt back into fetching + buffering, set allowUrlFetch: true on the adapter config:

    createOpenaiImage('gpt-image-1', apiKey, { allowUrlFetch: true })
    createOpenaiVideo('sora-2', apiKey, { allowUrlFetch: true })
    createGeminiVideo('veo-3.1-generate-preview', apiKey, { allowUrlFetch: true })

    Migration: if you passed HTTP(S) URL image inputs to these adapters, either fetch the bytes yourself and pass a data: URI, pass a gs:// reference (Veo), or set allowUrlFetch: true.

  • #405 2665085 - Added Gemini Realtime Adapter

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #919 d453647 - fix(ai-gemini): fix GeminiClientConfig type import in the published adapter declarations. The emitted .d.ts files imported GeminiClientConfig from a non-existent '../utils.js' (the barrel builds to utils/index.js), so under skipLibCheck it silently resolved to any in consumers — masking client-config type-checking for every adapter and producing a spurious "httpOptions does not exist" error on createGeminiVideo. Adapters now import the type from the concrete '../utils/client' module so the declarations resolve to the real type.

  • #908 dcc7407 - fix(ai-gemini): stop fetching arbitrary HTTPS image URLs in createGeminiImage. URL sources in multimodal image-generation prompts now pass through as fileData.fileUri (Gemini fetches them server-side), matching the chat adapter. This avoids fetch + base64 double-buffering that could OOM on memory-constrained runtimes such as Cloudflare Workers.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-openai@0.17.0

Minor Changes

  • #908 dcc7407 - fix(ai-gemini, ai-openai): don't buffer arbitrary HTTP(S) URL image inputs by default on paths that require uploaded bytes.

    Gemini Veo (createGeminiVideo), OpenAI image edits (createOpenaiImage), and OpenAI Sora input_reference (createOpenaiVideo) have no URL passthrough — the provider only accepts inline bytes (or, for Veo, a gs:// reference). Previously an HTTP(S) URL image input was silently fetched and buffered in memory, which can OOM memory-constrained runtimes (e.g. Cloudflare Workers).

    These paths now throw on an HTTP(S) URL image input by default, with an error pointing to the alternatives. data: URIs (and gs:// for Veo) still work without any flag. To opt back into fetching + buffering, set allowUrlFetch: true on the adapter config:

    createOpenaiImage('gpt-image-1', apiKey, { allowUrlFetch: true })
    createOpenaiVideo('sora-2', apiKey, { allowUrlFetch: true })
    createGeminiVideo('veo-3.1-generate-preview', apiKey, { allowUrlFetch: true })

    Migration: if you passed HTTP(S) URL image inputs to these adapters, either fetch the bytes yourself and pass a data: URI, pass a gs:// reference (Veo), or set allowUrlFetch: true.

Patch Changes

@tanstack/ai-react@0.17.0

Minor Changes

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-acp@0.2.2

Patch Changes

@tanstack/ai-angular@0.2.4

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-anthropic@0.16.2

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-bedrock@0.1.3

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0
    • @tanstack/openai-base@0.9.8

@tanstack/ai-claude-code@0.2.2

Patch Changes

@tanstack/ai-code-mode@0.3.7

Patch Changes

@tanstack/ai-code-mode-skills@0.3.10

Patch Changes

@tanstack/ai-codex@0.2.2

Patch Changes

@tanstack/ai-devtools-core@0.4.23

Patch Changes

@tanstack/ai-elevenlabs@0.2.33

Patch Changes

@tanstack/ai-fal@0.9.11

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-grok@0.14.8

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0
    • @tanstack/openai-base@0.9.8

@tanstack/ai-grok-build@0.2.2

Patch Changes

@tanstack/ai-groq@0.5.2

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0
    • @tanstack/openai-base@0.9.8

@tanstack/ai-isolate-cloudflare@0.2.37

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-code-mode@0.3.7

@tanstack/ai-isolate-node@0.1.46

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-code-mode@0.3.7

@tanstack/ai-isolate-quickjs@0.1.46

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-code-mode@0.3.7

@tanstack/ai-mcp@0.2.4

Patch Changes

@tanstack/ai-mistral@0.2.2

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-ollama@0.8.15

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-opencode@0.2.2

Patch Changes

@tanstack/ai-openrouter@0.15.9

Patch Changes

  • #924 5fcaf90 - fix: resolve directory-barrel imports in published .d.ts files. Bare imports of utils/tools/middleware barrels were emitted as ../utils.js (etc.), which do not resolve under bundler/node16/nodenext (no /index fallback for explicit .js). With consumer skipLibCheck: true those symbols silently became any. Imports now target concrete modules (e.g. utils/client, middleware/types) or explicit /index paths so public types resolve correctly.

  • #922 e0bbbdd - fix: resolve dangling relative imports in published declaration files

    Switch directory-barrel imports (../utils, ../tools, ../middleware) to
    concrete module paths so emitted .d.ts specifiers resolve under
    bundler/node16/nodenext resolution. Adds a test:dts scanner guardrail.

    Fixes #920

  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-preact@0.10.4

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-react-ui@0.8.14

Patch Changes

@tanstack/ai-sandbox@0.2.3

Patch Changes

  • #917 1deaa29 - Make sandbox file-diff correct and observable (follow-up to #892):

    • diff() now synthesizes an add-patch for any file git isn't tracking (a file the agent created and every later edit to it), keyed on tracked-ness at the baseline rather than on the event being a create — so agent-created files no longer stream empty diffs. A tracked file identical to the baseline still diffs empty, and a transient git-show probe failure no longer fabricates a bogus add-patch.
    • The synthesized patch now matches git diff's add-file shape (diff --git header, new file mode, repo-relative paths).
    • git-ignored files are withheld from the diff feed: the file event still fires (you're notified it changed) but diff() returns '', so a secret like a .env never has its contents surfaced.
    • The native fs.watch watcher re-seeds lazily if its initial workspace listing fails, so a pre-existing file is correctly reported as a change (not a create) on first edit.
    • The exec-poll watcher no longer fabricates phantom create/delete storms: a failed poll (thrown exec, or non-zero exit with no output) preserves the previous snapshot, a failed initial poll seeds without diffing, and a partial (find permission-denied) poll is merged rather than diffed so transiently-unreadable files aren't reported as deleted.
    • Every swallowed git/exec/fs failure — in the diff accessors, both watcher paths (exec-poll and native fs.watch), the git-baseline capture, and per-hook dispatch — is now logged (real anomalies under errors, expected-empty conditions under the sandbox debug category) instead of silently becoming empty data.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:

    • @tanstack/ai@0.41.0

@tanstack/ai-sandbox-cloudflare@0.2.3

Patch Changes

@tanstack/ai-solid@0.14.4

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-solid-ui@0.7.13

Patch Changes

@tanstack/ai-svelte@0.14.4

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-vue@0.14.4

Patch Changes

  • #918 f830d9e - Add the const modifier to the TTools type parameter of useChat
    (createChat in Svelte, injectChat in Angular) so a plain inline tools array
    now yields full type-safe message chunks. Previously the array widened to
    Array<Union> and lost the literal tool names that drive the
    discriminated tool-call part union, so callers had to wrap their tools in
    clientTools(...) (or add as const) to get narrowing. That wrapper is now
    optional — tools: [toolA, toolB] narrows part.name, part.input, and
    part.output on its own. clientTools(...) still works and remains useful
    for defining a shared tuple outside the hook call.
  • Updated dependencies [5fcaf90, 2665085, e0bbbdd, f830d9e, f830d9e, de5fbb5]:
    • @tanstack/ai@0.41.0
    • @tanstack/ai-client@0.21.0

@tanstack/ai-vue-ui@0.2.32

Patch Changes

  • Updated dependencies [f830d9e]:
    • @tanstack/ai-vue@0.14.4

@tanstack/openai-base@0.9.8

Patch Changes

@tanstack/preact-ai-devtools@0.1.66

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.23

@tanstack/react-ai-devtools@0.2.66

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.23

@tanstack/solid-ai-devtools@0.2.66

Patch Changes

  • Updated dependencies []:
    • @tanstack/ai-devtools-core@0.4.23

@github-actions github-actions Bot force-pushed the changeset-release/main branch 5 times, most recently from f576402 to 6a1ebd8 Compare July 10, 2026 08:52
@github-actions github-actions Bot force-pushed the changeset-release/main branch from 6a1ebd8 to 3213a2a Compare July 10, 2026 11:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sweep: fix skipLibCheck-masked dangling .d.ts imports across packages (+ add a guardrail)

0 participants