@tanstack/ai-octane 0.5.3 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/ai-octane",
3
- "version": "0.5.3",
3
+ "version": "0.6.1",
4
4
  "description": "Octane bindings for TanStack AI streaming chat, structured outputs, and media generation.",
5
5
  "author": "Dominic Gannaway",
6
6
  "license": "MIT",
@@ -48,11 +48,11 @@
48
48
  ],
49
49
  "//lint": "The .tsrx.d.ts companions are generated declaration emits of the .tsrx implementations, so they are not hand-formatted and are excluded from lint rather than edited in place (a regeneration would undo any fix).",
50
50
  "dependencies": {
51
- "@tanstack/ai-client": "0.33.2"
51
+ "@tanstack/ai-client": "0.35.1"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "octane": "^0.1.17",
55
- "@tanstack/ai": "^0.58.0"
55
+ "@tanstack/ai": "^0.61.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@octanejs/testing-library": "0.1.14",
@@ -63,7 +63,7 @@
63
63
  "octane": "0.1.17",
64
64
  "vite": "^8.2.1",
65
65
  "zod": "^4.2.0",
66
- "@tanstack/ai": "0.58.0"
66
+ "@tanstack/ai": "0.61.0"
67
67
  },
68
68
  "scripts": {
69
69
  "lint:fix": "oxlint src --type-aware --ignore-pattern '**/*.tsrx.d.ts' --fix",
package/src/index.ts CHANGED
@@ -3,8 +3,16 @@ export { createChatHook } from './create-chat-hook'
3
3
  export { useRealtimeChat } from './use-realtime-chat.tsrx'
4
4
  export { useMcpAppBridge } from './use-mcp-app-bridge.tsrx'
5
5
  export type { UseMcpAppBridgeOptions } from './use-mcp-app-bridge.tsrx'
6
- export { useWebMCPTools } from './use-web-mcp-tools.tsrx'
7
- export type { UseWebMCPToolsOptions } from './use-web-mcp-tools.tsrx'
6
+ export {
7
+ usePageWebMCPTools,
8
+ useRegisterWebMCPTools,
9
+ useWebMCPTools,
10
+ } from './use-web-mcp-tools.tsrx'
11
+ export type {
12
+ UsePageWebMCPToolsOptions,
13
+ UseRegisterWebMCPToolsOptions,
14
+ UseWebMCPToolsOptions,
15
+ } from './use-web-mcp-tools.tsrx'
8
16
  export type {
9
17
  DeepPartial,
10
18
  UseChatOptions,
@@ -99,6 +107,11 @@ export {
99
107
  PartialJSONParser,
100
108
  defaultJSONParser,
101
109
  registerWebMCPTools,
110
+ getWebMCPTools,
111
+ subscribeWebMCPTools,
112
+ type GetWebMCPToolsOptions,
113
+ type SubscribeWebMCPToolsOptions,
114
+ type WebMCPPageTool,
102
115
  clientTools,
103
116
  webSocket,
104
117
  fetchServerSentEvents,
@@ -1,13 +1,14 @@
1
- import { useEffect } from 'octane'
2
- import { registerWebMCPTools } from '@tanstack/ai-client'
1
+ import { useEffect, useRef, useState } from 'octane'
2
+ import { registerWebMCPTools, subscribeWebMCPTools } from '@tanstack/ai-client'
3
3
  import type {
4
4
  AnyClientTool,
5
5
  InferredClientContext,
6
6
  RegisterWebMCPToolsOptions,
7
+ SubscribeWebMCPToolsOptions,
7
8
  } from '@tanstack/ai-client'
8
9
 
9
- /** Options for the Octane {@link useWebMCPTools} lifecycle hook. */
10
- export type UseWebMCPToolsOptions<
10
+ /** Options for the Octane {@link useRegisterWebMCPTools} lifecycle hook. */
11
+ export type UseRegisterWebMCPToolsOptions<
11
12
  TTools extends ReadonlyArray<AnyClientTool>,
12
13
  TContext = InferredClientContext<TTools>,
13
14
  > = Omit<RegisterWebMCPToolsOptions<TTools, TContext>, 'signal'> & {
@@ -15,12 +16,19 @@ export type UseWebMCPToolsOptions<
15
16
  onError?: (error: unknown) => void
16
17
  }
17
18
 
18
- type UseWebMCPToolsArguments<
19
+ /** @deprecated Use `UseRegisterWebMCPToolsOptions`. Removed in 1.0.0. */
20
+ export type UseWebMCPToolsOptions<
21
+ TTools extends ReadonlyArray<AnyClientTool>,
22
+ TContext = InferredClientContext<TTools>,
23
+ > = UseRegisterWebMCPToolsOptions<TTools, TContext>
24
+
25
+ type UseRegisterWebMCPToolsArguments<
19
26
  TTools extends ReadonlyArray<AnyClientTool>,
20
27
  TContext,
21
- > = RegisterWebMCPToolsOptions<TTools, TContext> extends { context: unknown }
22
- ? [options: UseWebMCPToolsOptions<TTools, TContext>]
23
- : [options?: UseWebMCPToolsOptions<TTools, TContext>]
28
+ > =
29
+ RegisterWebMCPToolsOptions<TTools, TContext> extends { context: unknown }
30
+ ? [options: UseRegisterWebMCPToolsOptions<TTools, TContext>]
31
+ : [options?: UseRegisterWebMCPToolsOptions<TTools, TContext>]
24
32
 
25
33
  /**
26
34
  * Registers client tools with WebMCP for the lifetime of an Octane component.
@@ -33,17 +41,17 @@ type UseWebMCPToolsArguments<
33
41
  *
34
42
  * @example
35
43
  * ```tsx
36
- * useWebMCPTools([searchProducts], {
44
+ * useRegisterWebMCPTools([searchProducts], {
37
45
  * toolOptions: { searchProducts: { title: 'Search products' } },
38
46
  * })
39
47
  * ```
40
48
  */
41
- export function useWebMCPTools<
49
+ export function useRegisterWebMCPTools<
42
50
  const TTools extends ReadonlyArray<AnyClientTool>,
43
51
  TContext = InferredClientContext<TTools>,
44
52
  >(
45
53
  tools: TTools,
46
- ...[options]: UseWebMCPToolsArguments<TTools, TContext>
54
+ ...[options]: UseRegisterWebMCPToolsArguments<TTools, TContext>
47
55
  ) {
48
56
  useEffect(() => {
49
57
  const controller = new AbortController()
@@ -59,3 +67,49 @@ export function useWebMCPTools<
59
67
  return () => controller.abort()
60
68
  }, [tools, options])
61
69
  }
70
+
71
+ /** @deprecated Use `useRegisterWebMCPTools`. Removed in 1.0.0. */
72
+ export const useWebMCPTools = useRegisterWebMCPTools
73
+
74
+ /** Options for {@link usePageWebMCPTools}. */
75
+ export type UsePageWebMCPToolsOptions = Omit<
76
+ SubscribeWebMCPToolsOptions,
77
+ 'signal'
78
+ >
79
+
80
+ /**
81
+ * Returns the WebMCP tools on the page as client tools for `useChat`.
82
+ *
83
+ * The list starts empty and updates when the page registers or removes a
84
+ * tool. The hook reads the latest `filter` and `onError` on each update.
85
+ * Unsupported browsers and server rendering return an empty array.
86
+ *
87
+ * @param options - A filter that skips tools, and an error callback.
88
+ *
89
+ * @example
90
+ * ```tsx
91
+ * const pageTools = usePageWebMCPTools({
92
+ * filter: (tool) => tool.origin === location.origin,
93
+ * })
94
+ * const chat = useChat({ connection, tools: pageTools })
95
+ * ```
96
+ */
97
+ export function usePageWebMCPTools(
98
+ options?: UsePageWebMCPToolsOptions,
99
+ ): Array<AnyClientTool> {
100
+ const [tools, setTools] = useState<Array<AnyClientTool>>([])
101
+ const optionsRef = useRef(options)
102
+ optionsRef.current = options
103
+
104
+ useEffect(() => {
105
+ const controller = new AbortController()
106
+ subscribeWebMCPTools(setTools, {
107
+ signal: controller.signal,
108
+ filter: (tool) => optionsRef.current?.filter?.(tool) ?? true,
109
+ onError: (error) => optionsRef.current?.onError?.(error),
110
+ })
111
+ return () => controller.abort()
112
+ }, [])
113
+
114
+ return tools
115
+ }
@@ -3,23 +3,29 @@ import type {
3
3
  AnyClientTool,
4
4
  InferredClientContext,
5
5
  RegisterWebMCPToolsOptions,
6
+ SubscribeWebMCPToolsOptions,
6
7
  } from '@tanstack/ai-client'
7
8
 
8
- /** Options for the Octane {@link useWebMCPTools} lifecycle hook. */
9
- export type UseWebMCPToolsOptions<
9
+ /** Options for the Octane {@link useRegisterWebMCPTools} lifecycle hook. */
10
+ export type UseRegisterWebMCPToolsOptions<
10
11
  TTools extends ReadonlyArray<AnyClientTool>,
11
12
  TContext = InferredClientContext<TTools>,
12
13
  > = Omit<RegisterWebMCPToolsOptions<TTools, TContext>, 'signal'> & {
13
14
  /** Receives an asynchronous registration failure. */
14
15
  onError?: (error: unknown) => void
15
16
  }
16
- type UseWebMCPToolsArguments<
17
+ /** @deprecated Use `UseRegisterWebMCPToolsOptions`. Removed in 1.0.0. */
18
+ export type UseWebMCPToolsOptions<
19
+ TTools extends ReadonlyArray<AnyClientTool>,
20
+ TContext = InferredClientContext<TTools>,
21
+ > = UseRegisterWebMCPToolsOptions<TTools, TContext>
22
+ type UseRegisterWebMCPToolsArguments<
17
23
  TTools extends ReadonlyArray<AnyClientTool>,
18
24
  TContext,
19
25
  > =
20
26
  RegisterWebMCPToolsOptions<TTools, TContext> extends { context: unknown }
21
- ? [options: UseWebMCPToolsOptions<TTools, TContext>]
22
- : [options?: UseWebMCPToolsOptions<TTools, TContext>]
27
+ ? [options: UseRegisterWebMCPToolsOptions<TTools, TContext>]
28
+ : [options?: UseRegisterWebMCPToolsOptions<TTools, TContext>]
23
29
  /**
24
30
  * Registers client tools with WebMCP for the lifetime of an Octane component.
25
31
  *
@@ -31,12 +37,42 @@ type UseWebMCPToolsArguments<
31
37
  *
32
38
  * @example
33
39
  * ```tsx
34
- * useWebMCPTools([searchProducts], {
40
+ * useRegisterWebMCPTools([searchProducts], {
35
41
  * toolOptions: { searchProducts: { title: 'Search products' } },
36
42
  * })
37
43
  * ```
38
44
  */
39
- export declare function useWebMCPTools<
45
+ export declare function useRegisterWebMCPTools<
40
46
  const TTools extends ReadonlyArray<AnyClientTool>,
41
47
  TContext = InferredClientContext<TTools>,
42
- >(tools: TTools, ...[options]: UseWebMCPToolsArguments<TTools, TContext>): void
48
+ >(
49
+ tools: TTools,
50
+ ...[options]: UseRegisterWebMCPToolsArguments<TTools, TContext>
51
+ ): void
52
+ /** @deprecated Use `useRegisterWebMCPTools`. Removed in 1.0.0. */
53
+ export declare const useWebMCPTools: typeof useRegisterWebMCPTools
54
+ /** Options for {@link usePageWebMCPTools}. */
55
+ export type UsePageWebMCPToolsOptions = Omit<
56
+ SubscribeWebMCPToolsOptions,
57
+ 'signal'
58
+ >
59
+ /**
60
+ * Returns the WebMCP tools on the page as client tools for `useChat`.
61
+ *
62
+ * The list starts empty and updates when the page registers or removes a
63
+ * tool. The hook reads the latest `filter` and `onError` on each update.
64
+ * Unsupported browsers and server rendering return an empty array.
65
+ *
66
+ * @param options - A filter that skips tools, and an error callback.
67
+ *
68
+ * @example
69
+ * ```tsx
70
+ * const pageTools = usePageWebMCPTools({
71
+ * filter: (tool) => tool.origin === location.origin,
72
+ * })
73
+ * const chat = useChat({ connection, tools: pageTools })
74
+ * ```
75
+ */
76
+ export declare function usePageWebMCPTools(
77
+ options?: UsePageWebMCPToolsOptions,
78
+ ): Array<AnyClientTool>