@assistant-ui/core 0.2.9 → 0.2.10

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.
Files changed (123) hide show
  1. package/dist/model-context/tool.d.ts +1 -1
  2. package/dist/model-context/tool.js +1 -1
  3. package/dist/model-context/tool.js.map +1 -1
  4. package/dist/model-context/types.js +17 -2
  5. package/dist/model-context/types.js.map +1 -1
  6. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  7. package/dist/react/adapters/LocalStorageThreadListAdapter.js +12 -2
  8. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  9. package/dist/react/client/Tools.d.ts.map +1 -1
  10. package/dist/react/client/Tools.js +9 -3
  11. package/dist/react/client/Tools.js.map +1 -1
  12. package/dist/react/index.d.ts +7 -3
  13. package/dist/react/index.js +6 -2
  14. package/dist/react/model-context/define-mcp-toolkit.d.ts +12 -0
  15. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -0
  16. package/dist/react/model-context/define-mcp-toolkit.js +14 -0
  17. package/dist/react/model-context/define-mcp-toolkit.js.map +1 -0
  18. package/dist/react/model-context/define-toolkit.d.ts +4 -3
  19. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  20. package/dist/react/model-context/define-toolkit.js +1 -14
  21. package/dist/react/model-context/define-toolkit.js.map +1 -1
  22. package/dist/react/model-context/hitl.d.ts +8 -4
  23. package/dist/react/model-context/hitl.d.ts.map +1 -1
  24. package/dist/react/model-context/hitl.js +9 -5
  25. package/dist/react/model-context/hitl.js.map +1 -1
  26. package/dist/react/model-context/makeAssistantTool.d.ts +8 -0
  27. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  28. package/dist/react/model-context/makeAssistantTool.js +4 -0
  29. package/dist/react/model-context/makeAssistantTool.js.map +1 -1
  30. package/dist/react/model-context/makeAssistantToolUI.d.ts +8 -0
  31. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  32. package/dist/react/model-context/makeAssistantToolUI.js +4 -0
  33. package/dist/react/model-context/makeAssistantToolUI.js.map +1 -1
  34. package/dist/react/model-context/provider-tool.d.ts +15 -0
  35. package/dist/react/model-context/provider-tool.d.ts.map +1 -0
  36. package/dist/react/model-context/provider-tool.js +12 -0
  37. package/dist/react/model-context/provider-tool.js.map +1 -0
  38. package/dist/react/model-context/stub-tool.d.ts +12 -0
  39. package/dist/react/model-context/stub-tool.d.ts.map +1 -0
  40. package/dist/react/model-context/stub-tool.js +15 -0
  41. package/dist/react/model-context/stub-tool.js.map +1 -0
  42. package/dist/react/model-context/toolbox.d.ts +62 -15
  43. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  44. package/dist/react/model-context/toolbox.js +19 -1
  45. package/dist/react/model-context/toolbox.js.map +1 -1
  46. package/dist/react/model-context/useAssistantTool.d.ts +11 -1
  47. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  48. package/dist/react/model-context/useAssistantTool.js +12 -6
  49. package/dist/react/model-context/useAssistantTool.js.map +1 -1
  50. package/dist/react/model-context/useAssistantToolUI.d.ts +13 -4
  51. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  52. package/dist/react/model-context/useAssistantToolUI.js +6 -3
  53. package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
  54. package/dist/react/model-context/useAuiToolOverrides.d.ts +22 -0
  55. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -0
  56. package/dist/react/model-context/useAuiToolOverrides.js +31 -0
  57. package/dist/react/model-context/useAuiToolOverrides.js.map +1 -0
  58. package/dist/react/primitives/part/PartMessages.d.ts +13 -11
  59. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  60. package/dist/react/primitives/part/PartMessages.js +13 -11
  61. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  62. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +1 -0
  63. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  64. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +28 -0
  65. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  66. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  67. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +9 -2
  68. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  69. package/dist/runtime/api/thread-list-item-runtime.d.ts +2 -0
  70. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  71. package/dist/runtime/api/thread-list-item-runtime.js +6 -0
  72. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  73. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +1 -0
  74. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  75. package/dist/runtimes/external-store/external-store-adapter.d.ts +2 -0
  76. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  77. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +1 -0
  78. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  79. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +5 -0
  80. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  81. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -0
  82. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  83. package/dist/runtimes/remote-thread-list/adapter/in-memory.js +3 -0
  84. package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
  85. package/dist/runtimes/remote-thread-list/types.d.ts +1 -0
  86. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  87. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -0
  88. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  89. package/dist/store/scopes/thread-list-item.d.ts +1 -0
  90. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  91. package/package.json +5 -5
  92. package/src/model-context/tool.ts +1 -1
  93. package/src/model-context/types.ts +21 -3
  94. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +15 -2
  95. package/src/react/client/Tools.ts +22 -7
  96. package/src/react/index.ts +14 -3
  97. package/src/react/model-context/define-mcp-toolkit.ts +16 -0
  98. package/src/react/model-context/define-toolkit.test.ts +92 -4
  99. package/src/react/model-context/define-toolkit.ts +21 -3
  100. package/src/react/model-context/hitl.ts +10 -5
  101. package/src/react/model-context/makeAssistantTool.ts +8 -0
  102. package/src/react/model-context/makeAssistantToolUI.ts +8 -0
  103. package/src/react/model-context/provider-tool.ts +30 -0
  104. package/src/react/model-context/stub-tool.ts +14 -0
  105. package/src/react/model-context/toolbox.test.ts +182 -0
  106. package/src/react/model-context/toolbox.ts +189 -21
  107. package/src/react/model-context/useAssistantTool.ts +28 -8
  108. package/src/react/model-context/useAssistantToolUI.ts +13 -4
  109. package/src/react/model-context/useAuiToolOverrides.ts +38 -0
  110. package/src/react/primitives/part/PartMessages.tsx +13 -11
  111. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +43 -0
  112. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +9 -0
  113. package/src/runtime/api/thread-list-item-runtime.ts +15 -0
  114. package/src/runtime/interfaces/thread-list-runtime-core.ts +4 -0
  115. package/src/runtimes/external-store/external-store-adapter.ts +7 -0
  116. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +13 -0
  117. package/src/runtimes/remote-thread-list/adapter/in-memory.ts +4 -0
  118. package/src/runtimes/remote-thread-list/types.ts +4 -0
  119. package/src/store/clients/model-context-client.test.ts +87 -2
  120. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +1 -0
  121. package/src/store/scopes/thread-list-item.ts +1 -0
  122. package/src/tests/RemoteThreadListThreadListRuntimeCore-custom-metadata.test.ts +69 -1
  123. package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
@@ -6,7 +6,7 @@ import { Tool } from "assistant-stream";
6
6
  * optional model-output conversion.
7
7
  *
8
8
  * This helper keeps reusable tool definitions type-checked and convenient to
9
- * export for a {@link Toolkit}, {@link Tools}, or {@link useAssistantTool}.
9
+ * export for a {@link Toolkit} registered with {@link Tools}.
10
10
  * Inference from parameter schemas is currently limited, so provide generic
11
11
  * arguments when you need precise args or result types.
12
12
  *
@@ -4,7 +4,7 @@
4
4
  * optional model-output conversion.
5
5
  *
6
6
  * This helper keeps reusable tool definitions type-checked and convenient to
7
- * export for a {@link Toolkit}, {@link Tools}, or {@link useAssistantTool}.
7
+ * export for a {@link Toolkit} registered with {@link Tools}.
8
8
  * Inference from parameter schemas is currently limited, so provide generic
9
9
  * arguments when you need precise args or result types.
10
10
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tool.js","names":[],"sources":["../../src/model-context/tool.ts"],"sourcesContent":["import type { Tool } from \"assistant-stream\";\n\n// TODO re-add the inferrence of the parameters\n\n/**\n * Defines a model tool with its argument schema, execution behavior, and\n * optional model-output conversion.\n *\n * This helper keeps reusable tool definitions type-checked and convenient to\n * export for a {@link Toolkit}, {@link Tools}, or {@link useAssistantTool}.\n * Inference from parameter schemas is currently limited, so provide generic\n * arguments when you need precise args or result types.\n *\n * @param tool - Tool definition to expose to the assistant model.\n *\n * @example\n * ```ts\n * const getWeather = tool<{ city: string }, string>({\n * type: \"frontend\",\n * description: \"Get the weather for a city.\",\n * parameters: {\n * type: \"object\",\n * properties: { city: { type: \"string\" } },\n * required: [\"city\"],\n * },\n * execute: async ({ city }) => `Sunny in ${city}`,\n * });\n * ```\n */\nexport function tool<TArgs extends Record<string, unknown>, TResult = any>(\n tool: Tool<TArgs, TResult>,\n): Tool<TArgs, TResult> {\n return tool;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,KACd,MACsB;CACtB,OAAO;AACT"}
1
+ {"version":3,"file":"tool.js","names":[],"sources":["../../src/model-context/tool.ts"],"sourcesContent":["import type { Tool } from \"assistant-stream\";\n\n// TODO re-add the inferrence of the parameters\n\n/**\n * Defines a model tool with its argument schema, execution behavior, and\n * optional model-output conversion.\n *\n * This helper keeps reusable tool definitions type-checked and convenient to\n * export for a {@link Toolkit} registered with {@link Tools}.\n * Inference from parameter schemas is currently limited, so provide generic\n * arguments when you need precise args or result types.\n *\n * @param tool - Tool definition to expose to the assistant model.\n *\n * @example\n * ```ts\n * const getWeather = tool<{ city: string }, string>({\n * type: \"frontend\",\n * description: \"Get the weather for a city.\",\n * parameters: {\n * type: \"object\",\n * properties: { city: { type: \"string\" } },\n * required: [\"city\"],\n * },\n * execute: async ({ city }) => `Sunny in ${city}`,\n * });\n * ```\n */\nexport function tool<TArgs extends Record<string, unknown>, TResult = any>(\n tool: Tool<TArgs, TResult>,\n): Tool<TArgs, TResult> {\n return tool;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,KACd,MACsB;CACtB,OAAO;AACT"}
@@ -1,13 +1,28 @@
1
1
  //#region src/model-context/types.ts
2
2
  const mergeModelContexts = (configSet) => {
3
- return Array.from(configSet).map((c) => c.getModelContext()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0)).reduce((acc, config) => {
3
+ const configs = Array.from(configSet).map((c) => c.getModelContext()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
4
+ const toolPriorities = {};
5
+ return configs.reduce((acc, config) => {
6
+ const priority = config.priority ?? 0;
4
7
  if (config.system) if (acc.system) acc.system += `\n\n${config.system}`;
5
8
  else acc.system = config.system;
6
9
  if (config.tools) for (const [name, tool] of Object.entries(config.tools)) {
7
10
  const existing = acc.tools?.[name];
8
- if (existing && existing !== tool) throw new Error(`You tried to define a tool with the name ${name}, but it already exists.`);
11
+ if (existing && existing !== tool) {
12
+ const existingPriority = toolPriorities[name];
13
+ if (existingPriority === priority) throw new Error(`You tried to define a tool with the name ${name}, but it already exists.`);
14
+ const higherPriorityTool = existingPriority > priority ? existing : tool;
15
+ const lowerPriorityTool = existingPriority > priority ? tool : existing;
16
+ acc.tools[name] = {
17
+ ...lowerPriorityTool,
18
+ ...higherPriorityTool
19
+ };
20
+ toolPriorities[name] = Math.max(existingPriority, priority);
21
+ continue;
22
+ }
9
23
  if (!acc.tools) acc.tools = {};
10
24
  acc.tools[name] = tool;
25
+ toolPriorities[name] ??= priority;
11
26
  }
12
27
  if (config.config) acc.config = {
13
28
  ...acc.config,
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../src/model-context/types.ts"],"sourcesContent":["import type { Unsubscribe } from \"../types/unsubscribe\";\nimport type { Tool } from \"assistant-stream\";\n\nexport type LanguageModelV1CallSettings = {\n maxTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n seed?: number;\n headers?: Record<string, string | undefined>;\n};\n\nexport type LanguageModelConfig = {\n apiKey?: string;\n baseUrl?: string;\n modelName?: string;\n};\n\nexport type ModelContext = {\n priority?: number | undefined;\n system?: string | undefined;\n tools?: Record<string, Tool<any, any>> | undefined;\n callSettings?: LanguageModelV1CallSettings | undefined;\n config?: LanguageModelConfig | undefined;\n};\n\nexport type ModelContextProvider = {\n getModelContext: () => ModelContext;\n subscribe?: (callback: () => void) => Unsubscribe;\n};\n\nexport type AssistantToolProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = Tool<TArgs, TResult> & {\n toolName: string;\n render?: unknown;\n};\n\nexport type AssistantInstructionsConfig = {\n disabled?: boolean | undefined;\n instruction: string;\n};\n\nexport type AssistantContextConfig = {\n getContext: () => string;\n disabled?: boolean | undefined;\n};\n\nexport const mergeModelContexts = (\n configSet: Set<ModelContextProvider>,\n): ModelContext => {\n const configs = Array.from(configSet)\n .map((c) => c.getModelContext())\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n return configs.reduce((acc, config) => {\n if (config.system) {\n if (acc.system) {\n acc.system += `\\n\\n${config.system}`;\n } else {\n acc.system = config.system;\n }\n }\n if (config.tools) {\n for (const [name, tool] of Object.entries(config.tools)) {\n const existing = acc.tools?.[name];\n if (existing && existing !== tool) {\n throw new Error(\n `You tried to define a tool with the name ${name}, but it already exists.`,\n );\n }\n\n if (!acc.tools) acc.tools = {};\n acc.tools[name] = tool;\n }\n }\n if (config.config) {\n acc.config = {\n ...acc.config,\n ...config.config,\n };\n }\n if (config.callSettings) {\n acc.callSettings = {\n ...acc.callSettings,\n ...config.callSettings,\n };\n }\n return acc;\n }, {} as ModelContext);\n};\n"],"mappings":";AAkDA,MAAa,sBACX,cACiB;CAKjB,OAJgB,MAAM,KAAK,SAAS,EACjC,KAAK,MAAM,EAAE,gBAAgB,CAAC,EAC9B,MAAM,GAAG,OAAO,EAAE,YAAY,MAAM,EAAE,YAAY,EAExC,EAAE,QAAQ,KAAK,WAAW;EACrC,IAAI,OAAO,QACT,IAAI,IAAI,QACN,IAAI,UAAU,OAAO,OAAO;OAE5B,IAAI,SAAS,OAAO;EAGxB,IAAI,OAAO,OACT,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,OAAO,KAAK,GAAG;GACvD,MAAM,WAAW,IAAI,QAAQ;GAC7B,IAAI,YAAY,aAAa,MAC3B,MAAM,IAAI,MACR,4CAA4C,KAAK,yBACnD;GAGF,IAAI,CAAC,IAAI,OAAO,IAAI,QAAQ,CAAC;GAC7B,IAAI,MAAM,QAAQ;EACpB;EAEF,IAAI,OAAO,QACT,IAAI,SAAS;GACX,GAAG,IAAI;GACP,GAAG,OAAO;EACZ;EAEF,IAAI,OAAO,cACT,IAAI,eAAe;GACjB,GAAG,IAAI;GACP,GAAG,OAAO;EACZ;EAEF,OAAO;CACT,GAAG,CAAC,CAAiB;AACvB"}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../src/model-context/types.ts"],"sourcesContent":["import type { Unsubscribe } from \"../types/unsubscribe\";\nimport type { Tool } from \"assistant-stream\";\n\nexport type LanguageModelV1CallSettings = {\n maxTokens?: number;\n temperature?: number;\n topP?: number;\n presencePenalty?: number;\n frequencyPenalty?: number;\n seed?: number;\n headers?: Record<string, string | undefined>;\n};\n\nexport type LanguageModelConfig = {\n apiKey?: string;\n baseUrl?: string;\n modelName?: string;\n};\n\nexport type ModelContext = {\n priority?: number | undefined;\n system?: string | undefined;\n tools?: Record<string, Tool<any, any>> | undefined;\n callSettings?: LanguageModelV1CallSettings | undefined;\n config?: LanguageModelConfig | undefined;\n};\n\nexport type ModelContextProvider = {\n getModelContext: () => ModelContext;\n subscribe?: (callback: () => void) => Unsubscribe;\n};\n\nexport type AssistantToolProps<\n TArgs extends Record<string, unknown>,\n TResult,\n> = Tool<TArgs, TResult> & {\n toolName: string;\n render?: unknown;\n};\n\nexport type AssistantInstructionsConfig = {\n disabled?: boolean | undefined;\n instruction: string;\n};\n\nexport type AssistantContextConfig = {\n getContext: () => string;\n disabled?: boolean | undefined;\n};\n\nexport const mergeModelContexts = (\n configSet: Set<ModelContextProvider>,\n): ModelContext => {\n const configs = Array.from(configSet)\n .map((c) => c.getModelContext())\n .sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));\n\n const toolPriorities: Record<string, number> = {};\n\n return configs.reduce((acc, config) => {\n const priority = config.priority ?? 0;\n if (config.system) {\n if (acc.system) {\n acc.system += `\\n\\n${config.system}`;\n } else {\n acc.system = config.system;\n }\n }\n if (config.tools) {\n for (const [name, tool] of Object.entries(config.tools)) {\n const existing = acc.tools?.[name];\n if (existing && existing !== tool) {\n const existingPriority = toolPriorities[name]!;\n if (existingPriority === priority) {\n throw new Error(\n `You tried to define a tool with the name ${name}, but it already exists.`,\n );\n }\n\n const higherPriorityTool =\n existingPriority > priority ? existing : tool;\n const lowerPriorityTool =\n existingPriority > priority ? tool : existing;\n acc.tools![name] = {\n ...lowerPriorityTool,\n ...higherPriorityTool,\n } as Tool<any, any>;\n toolPriorities[name] = Math.max(existingPriority, priority);\n continue;\n }\n\n if (!acc.tools) acc.tools = {};\n acc.tools[name] = tool;\n toolPriorities[name] ??= priority;\n }\n }\n if (config.config) {\n acc.config = {\n ...acc.config,\n ...config.config,\n };\n }\n if (config.callSettings) {\n acc.callSettings = {\n ...acc.callSettings,\n ...config.callSettings,\n };\n }\n return acc;\n }, {} as ModelContext);\n};\n"],"mappings":";AAkDA,MAAa,sBACX,cACiB;CACjB,MAAM,UAAU,MAAM,KAAK,SAAS,EACjC,KAAK,MAAM,EAAE,gBAAgB,CAAC,EAC9B,MAAM,GAAG,OAAO,EAAE,YAAY,MAAM,EAAE,YAAY,EAAE;CAEvD,MAAM,iBAAyC,CAAC;CAEhD,OAAO,QAAQ,QAAQ,KAAK,WAAW;EACrC,MAAM,WAAW,OAAO,YAAY;EACpC,IAAI,OAAO,QACT,IAAI,IAAI,QACN,IAAI,UAAU,OAAO,OAAO;OAE5B,IAAI,SAAS,OAAO;EAGxB,IAAI,OAAO,OACT,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,QAAQ,OAAO,KAAK,GAAG;GACvD,MAAM,WAAW,IAAI,QAAQ;GAC7B,IAAI,YAAY,aAAa,MAAM;IACjC,MAAM,mBAAmB,eAAe;IACxC,IAAI,qBAAqB,UACvB,MAAM,IAAI,MACR,4CAA4C,KAAK,yBACnD;IAGF,MAAM,qBACJ,mBAAmB,WAAW,WAAW;IAC3C,MAAM,oBACJ,mBAAmB,WAAW,OAAO;IACvC,IAAI,MAAO,QAAQ;KACjB,GAAG;KACH,GAAG;IACL;IACA,eAAe,QAAQ,KAAK,IAAI,kBAAkB,QAAQ;IAC1D;GACF;GAEA,IAAI,CAAC,IAAI,OAAO,IAAI,QAAQ,CAAC;GAC7B,IAAI,MAAM,QAAQ;GAClB,eAAe,UAAU;EAC3B;EAEF,IAAI,OAAO,QACT,IAAI,SAAS;GACX,GAAG,IAAI;GACP,GAAG,OAAO;EACZ;EAEF,IAAI,OAAO,cACT,IAAI,eAAe;GACjB,GAAG,IAAI;GACP,GAAG,OAAO;EACZ;EAEF,OAAO;CACT,GAAG,CAAC,CAAiB;AACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageThreadListAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"mappings":";;;;KAkBY,gBAAA;EACV,OAAA,CAAQ,GAAA,WAAc,OAAA;EACtB,OAAA,CAAQ,GAAA,UAAa,KAAA,WAAgB,OAAA;EACrC,UAAA,CAAW,GAAA,WAAc,OAAA;AAAA;AAAA,KAGtB,0BAAA;EACH,OAAA,EAAS,gBAAA;EACT,MAAA;EACA,cAAA,GAAiB,sBAAsB;AAAA;AAAA,cA4E5B,yBAAA,GACX,OAAA,EAAS,0BAAA,KACR,uBA2HF"}
1
+ {"version":3,"file":"LocalStorageThreadListAdapter.d.ts","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"mappings":";;;;KAkBY,gBAAA;EACV,OAAA,CAAQ,GAAA,WAAc,OAAA;EACtB,OAAA,CAAQ,GAAA,UAAa,KAAA,WAAgB,OAAA;EACrC,UAAA,CAAW,GAAA,WAAc,OAAA;AAAA;AAAA,KAGtB,0BAAA;EACH,OAAA,EAAS,gBAAA;EACT,MAAA;EACA,cAAA,GAAiB,sBAAsB;AAAA;AAAA,cA2E5B,yBAAA,GACX,OAAA,EAAS,0BAAA,KACR,uBAyIF"}
@@ -64,7 +64,8 @@ const createLocalStorageAdapter = (options) => {
64
64
  remoteId: t.remoteId,
65
65
  externalId: t.externalId,
66
66
  status: t.status,
67
- title: t.title
67
+ title: t.title,
68
+ custom: t.custom
68
69
  })) };
69
70
  },
70
71
  async initialize(threadId) {
@@ -90,6 +91,14 @@ const createLocalStorageAdapter = (options) => {
90
91
  await saveThreadMetadata(threads);
91
92
  }
92
93
  },
94
+ async updateCustom(remoteId, custom) {
95
+ const threads = await loadThreadMetadata();
96
+ const thread = threads.find((t) => t.remoteId === remoteId);
97
+ if (thread) {
98
+ thread.custom = custom;
99
+ await saveThreadMetadata(threads);
100
+ }
101
+ },
93
102
  async archive(remoteId) {
94
103
  const threads = await loadThreadMetadata();
95
104
  const thread = threads.find((t) => t.remoteId === remoteId);
@@ -117,7 +126,8 @@ const createLocalStorageAdapter = (options) => {
117
126
  remoteId: thread.remoteId,
118
127
  externalId: thread.externalId,
119
128
  status: thread.status,
120
- title: thread.title
129
+ title: thread.title,
130
+ custom: thread.custom
121
131
  };
122
132
  },
123
133
  async generateTitle(remoteId, messages) {
@@ -1 +1 @@
1
- {"version":3,"file":"LocalStorageThreadListAdapter.js","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"sourcesContent":["import { type AssistantStream, createAssistantStream } from \"assistant-stream\";\nimport { type FC, type PropsWithChildren, useMemo } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n ThreadHistoryAdapter,\n ThreadMessage,\n} from \"../../index\";\nimport type {\n ExportedMessageRepository,\n ExportedMessageRepositoryItem,\n} from \"../../internal\";\nimport { RuntimeAdapterProvider } from \"../runtimes/RuntimeAdapterProvider\";\nimport type { TitleGenerationAdapter } from \"./TitleGenerationAdapter\";\n\nexport type AsyncStorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n};\n\ntype LocalStorageAdapterOptions = {\n storage: AsyncStorageLike;\n prefix?: string | undefined;\n titleGenerator?: TitleGenerationAdapter | undefined;\n};\n\n// `RemoteThreadMetadata.custom` is intentionally not persisted; consumers that\n// need it across reloads should fork this adapter or use a remote backend.\ntype StoredThreadMetadata = {\n remoteId: string;\n externalId?: string;\n status: \"regular\" | \"archived\";\n title?: string;\n};\n\nclass AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {\n constructor(\n private storage: AsyncStorageLike,\n private aui: ReturnType<typeof useAui>,\n private prefix: string,\n ) {}\n\n private _messagesKey(remoteId: string) {\n return `${this.prefix}messages:${remoteId}`;\n }\n\n async load(): Promise<ExportedMessageRepository> {\n const remoteId = this.aui.threadListItem().getState().remoteId;\n if (!remoteId) return { messages: [] };\n\n const raw = await this.storage.getItem(this._messagesKey(remoteId));\n if (!raw) return { messages: [] };\n return JSON.parse(raw) as ExportedMessageRepository;\n }\n\n async append(item: ExportedMessageRepositoryItem): Promise<void> {\n const { remoteId } = await this.aui.threadListItem().initialize();\n\n const key = this._messagesKey(remoteId);\n const raw = await this.storage.getItem(key);\n const repo: ExportedMessageRepository = raw\n ? (JSON.parse(raw) as ExportedMessageRepository)\n : { messages: [] };\n\n const idx = repo.messages.findIndex(\n (m) => m.message.id === item.message.id,\n );\n if (idx >= 0) {\n repo.messages[idx] = item;\n } else {\n repo.messages.push(item);\n }\n repo.headId = item.message.id;\n\n await this.storage.setItem(key, JSON.stringify(repo));\n }\n}\n\nconst createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const aui = useAui();\n const history = useMemo(\n () => new AsyncStorageHistoryAdapter(storage, aui, prefix),\n [aui],\n );\n const adapters = useMemo(() => ({ history }), [history]);\n\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n return Provider;\n};\n\nexport const createLocalStorageAdapter = (\n options: LocalStorageAdapterOptions,\n): RemoteThreadListAdapter => {\n const { storage, prefix = \"@assistant-ui:\", titleGenerator } = options;\n\n const threadsKey = `${prefix}threads`;\n const messagesKey = (threadId: string) => `${prefix}messages:${threadId}`;\n\n const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {\n const raw = await storage.getItem(threadsKey);\n return raw ? (JSON.parse(raw) as StoredThreadMetadata[]) : [];\n };\n\n const saveThreadMetadata = async (\n threads: StoredThreadMetadata[],\n ): Promise<void> => {\n await storage.setItem(threadsKey, JSON.stringify(threads));\n };\n\n const adapter: RemoteThreadListAdapter = {\n unstable_Provider: createHistoryProvider(storage, prefix),\n\n async list(): Promise<RemoteThreadListResponse> {\n const threads = await loadThreadMetadata();\n return {\n threads: threads.map((t) => ({\n remoteId: t.remoteId,\n externalId: t.externalId,\n status: t.status,\n title: t.title,\n })),\n };\n },\n\n async initialize(\n threadId: string,\n ): Promise<RemoteThreadInitializeResponse> {\n const remoteId = threadId;\n const threads = await loadThreadMetadata();\n\n // Only add if not already present\n if (!threads.some((t) => t.remoteId === remoteId)) {\n threads.unshift({\n remoteId,\n status: \"regular\",\n });\n await saveThreadMetadata(threads);\n }\n\n return { remoteId, externalId: undefined };\n },\n\n async rename(remoteId: string, newTitle: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = newTitle;\n await saveThreadMetadata(threads);\n }\n },\n\n async archive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"archived\";\n await saveThreadMetadata(threads);\n }\n },\n\n async unarchive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"regular\";\n await saveThreadMetadata(threads);\n }\n },\n\n async delete(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const filtered = threads.filter((t) => t.remoteId !== remoteId);\n await saveThreadMetadata(filtered);\n await storage.removeItem(messagesKey(remoteId));\n },\n\n async fetch(threadId: string): Promise<RemoteThreadMetadata> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === threadId);\n if (!thread) throw new Error(\"Thread not found\");\n return {\n remoteId: thread.remoteId,\n externalId: thread.externalId,\n status: thread.status,\n title: thread.title,\n };\n },\n\n async generateTitle(\n remoteId: string,\n messages: readonly ThreadMessage[],\n ): Promise<AssistantStream> {\n if (titleGenerator) {\n const title = await titleGenerator.generateTitle(messages);\n\n // Update the stored title\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = title;\n await saveThreadMetadata(threads);\n }\n\n // Return a stream with a single text part\n return createAssistantStream((controller) => {\n controller.appendText(title);\n });\n }\n\n // No title generator — return empty stream\n return createAssistantStream(() => {});\n },\n };\n\n return adapter;\n};\n"],"mappings":";;;;;;AAuCA,IAAM,6BAAN,MAAiE;CAErD;CACA;CACA;CAHV,YACE,SACA,KACA,QACA;EAHQ,KAAA,UAAA;EACA,KAAA,MAAA;EACA,KAAA,SAAA;CACP;CAEH,aAAqB,UAAkB;EACrC,OAAO,GAAG,KAAK,OAAO,WAAW;CACnC;CAEA,MAAM,OAA2C;EAC/C,MAAM,WAAW,KAAK,IAAI,eAAe,EAAE,SAAS,EAAE;EACtD,IAAI,CAAC,UAAU,OAAO,EAAE,UAAU,CAAC,EAAE;EAErC,MAAM,MAAM,MAAM,KAAK,QAAQ,QAAQ,KAAK,aAAa,QAAQ,CAAC;EAClE,IAAI,CAAC,KAAK,OAAO,EAAE,UAAU,CAAC,EAAE;EAChC,OAAO,KAAK,MAAM,GAAG;CACvB;CAEA,MAAM,OAAO,MAAoD;EAC/D,MAAM,EAAE,aAAa,MAAM,KAAK,IAAI,eAAe,EAAE,WAAW;EAEhE,MAAM,MAAM,KAAK,aAAa,QAAQ;EACtC,MAAM,MAAM,MAAM,KAAK,QAAQ,QAAQ,GAAG;EAC1C,MAAM,OAAkC,MACnC,KAAK,MAAM,GAAG,IACf,EAAE,UAAU,CAAC,EAAE;EAEnB,MAAM,MAAM,KAAK,SAAS,WACvB,MAAM,EAAE,QAAQ,OAAO,KAAK,QAAQ,EACvC;EACA,IAAI,OAAO,GACT,KAAK,SAAS,OAAO;OAErB,KAAK,SAAS,KAAK,IAAI;EAEzB,KAAK,SAAS,KAAK,QAAQ;EAE3B,MAAM,KAAK,QAAQ,QAAQ,KAAK,KAAK,UAAU,IAAI,CAAC;CACtD;AACF;AAEA,MAAM,yBACJ,SACA,WAC0B;CAC1B,MAAM,YAAmC,EAAE,eAAe;EACxD,MAAM,MAAM,OAAO;EACnB,MAAM,UAAU,cACR,IAAI,2BAA2B,SAAS,KAAK,MAAM,GACzD,CAAC,GAAG,CACN;EAGA,OACE,oBAAC,wBAAD;GAAwB,UAHT,eAAe,EAAE,QAAQ,IAAI,CAAC,OAAO,CAGX;GACtC;EACqB,CAAA;CAE5B;CACA,OAAO;AACT;AAEA,MAAa,6BACX,YAC4B;CAC5B,MAAM,EAAE,SAAS,SAAS,kBAAkB,mBAAmB;CAE/D,MAAM,aAAa,GAAG,OAAO;CAC7B,MAAM,eAAe,aAAqB,GAAG,OAAO,WAAW;CAE/D,MAAM,qBAAqB,YAA6C;EACtE,MAAM,MAAM,MAAM,QAAQ,QAAQ,UAAU;EAC5C,OAAO,MAAO,KAAK,MAAM,GAAG,IAA+B,CAAC;CAC9D;CAEA,MAAM,qBAAqB,OACzB,YACkB;EAClB,MAAM,QAAQ,QAAQ,YAAY,KAAK,UAAU,OAAO,CAAC;CAC3D;CA2GA,OAAO;EAxGL,mBAAmB,sBAAsB,SAAS,MAAM;EAExD,MAAM,OAA0C;GAE9C,OAAO,EACL,UAAS,MAFW,mBAAmB,GAEtB,KAAK,OAAO;IAC3B,UAAU,EAAE;IACZ,YAAY,EAAE;IACd,QAAQ,EAAE;IACV,OAAO,EAAE;GACX,EAAE,EACJ;EACF;EAEA,MAAM,WACJ,UACyC;GACzC,MAAM,WAAW;GACjB,MAAM,UAAU,MAAM,mBAAmB;GAGzC,IAAI,CAAC,QAAQ,MAAM,MAAM,EAAE,aAAa,QAAQ,GAAG;IACjD,QAAQ,QAAQ;KACd;KACA,QAAQ;IACV,CAAC;IACD,MAAM,mBAAmB,OAAO;GAClC;GAEA,OAAO;IAAE;IAAU,YAAY,KAAA;GAAU;EAC3C;EAEA,MAAM,OAAO,UAAkB,UAAiC;GAC9D,MAAM,UAAU,MAAM,mBAAmB;GACzC,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,aAAa,QAAQ;GAC1D,IAAI,QAAQ;IACV,OAAO,QAAQ;IACf,MAAM,mBAAmB,OAAO;GAClC;EACF;EAEA,MAAM,QAAQ,UAAiC;GAC7C,MAAM,UAAU,MAAM,mBAAmB;GACzC,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,aAAa,QAAQ;GAC1D,IAAI,QAAQ;IACV,OAAO,SAAS;IAChB,MAAM,mBAAmB,OAAO;GAClC;EACF;EAEA,MAAM,UAAU,UAAiC;GAC/C,MAAM,UAAU,MAAM,mBAAmB;GACzC,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,aAAa,QAAQ;GAC1D,IAAI,QAAQ;IACV,OAAO,SAAS;IAChB,MAAM,mBAAmB,OAAO;GAClC;EACF;EAEA,MAAM,OAAO,UAAiC;GAG5C,MAAM,oBADW,MADK,mBAAmB,GAChB,QAAQ,MAAM,EAAE,aAAa,QACtB,CAAC;GACjC,MAAM,QAAQ,WAAW,YAAY,QAAQ,CAAC;EAChD;EAEA,MAAM,MAAM,UAAiD;GAE3D,MAAM,UAAS,MADO,mBAAmB,GAClB,MAAM,MAAM,EAAE,aAAa,QAAQ;GAC1D,IAAI,CAAC,QAAQ,MAAM,IAAI,MAAM,kBAAkB;GAC/C,OAAO;IACL,UAAU,OAAO;IACjB,YAAY,OAAO;IACnB,QAAQ,OAAO;IACf,OAAO,OAAO;GAChB;EACF;EAEA,MAAM,cACJ,UACA,UAC0B;GAC1B,IAAI,gBAAgB;IAClB,MAAM,QAAQ,MAAM,eAAe,cAAc,QAAQ;IAGzD,MAAM,UAAU,MAAM,mBAAmB;IACzC,MAAM,SAAS,QAAQ,MAAM,MAAM,EAAE,aAAa,QAAQ;IAC1D,IAAI,QAAQ;KACV,OAAO,QAAQ;KACf,MAAM,mBAAmB,OAAO;IAClC;IAGA,OAAO,uBAAuB,eAAe;KAC3C,WAAW,WAAW,KAAK;IAC7B,CAAC;GACH;GAGA,OAAO,4BAA4B,CAAC,CAAC;EACvC;CAGW;AACf"}
1
+ {"version":3,"file":"LocalStorageThreadListAdapter.js","names":[],"sources":["../../../src/react/adapters/LocalStorageThreadListAdapter.tsx"],"sourcesContent":["import { type AssistantStream, createAssistantStream } from \"assistant-stream\";\nimport { type FC, type PropsWithChildren, useMemo } from \"react\";\nimport { useAui } from \"@assistant-ui/store\";\nimport type {\n RemoteThreadInitializeResponse,\n RemoteThreadListAdapter,\n RemoteThreadListResponse,\n RemoteThreadMetadata,\n ThreadHistoryAdapter,\n ThreadMessage,\n} from \"../../index\";\nimport type {\n ExportedMessageRepository,\n ExportedMessageRepositoryItem,\n} from \"../../internal\";\nimport { RuntimeAdapterProvider } from \"../runtimes/RuntimeAdapterProvider\";\nimport type { TitleGenerationAdapter } from \"./TitleGenerationAdapter\";\n\nexport type AsyncStorageLike = {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n};\n\ntype LocalStorageAdapterOptions = {\n storage: AsyncStorageLike;\n prefix?: string | undefined;\n titleGenerator?: TitleGenerationAdapter | undefined;\n};\n\ntype StoredThreadMetadata = {\n remoteId: string;\n externalId?: string;\n status: \"regular\" | \"archived\";\n title?: string;\n custom?: Record<string, unknown> | undefined;\n};\n\nclass AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {\n constructor(\n private storage: AsyncStorageLike,\n private aui: ReturnType<typeof useAui>,\n private prefix: string,\n ) {}\n\n private _messagesKey(remoteId: string) {\n return `${this.prefix}messages:${remoteId}`;\n }\n\n async load(): Promise<ExportedMessageRepository> {\n const remoteId = this.aui.threadListItem().getState().remoteId;\n if (!remoteId) return { messages: [] };\n\n const raw = await this.storage.getItem(this._messagesKey(remoteId));\n if (!raw) return { messages: [] };\n return JSON.parse(raw) as ExportedMessageRepository;\n }\n\n async append(item: ExportedMessageRepositoryItem): Promise<void> {\n const { remoteId } = await this.aui.threadListItem().initialize();\n\n const key = this._messagesKey(remoteId);\n const raw = await this.storage.getItem(key);\n const repo: ExportedMessageRepository = raw\n ? (JSON.parse(raw) as ExportedMessageRepository)\n : { messages: [] };\n\n const idx = repo.messages.findIndex(\n (m) => m.message.id === item.message.id,\n );\n if (idx >= 0) {\n repo.messages[idx] = item;\n } else {\n repo.messages.push(item);\n }\n repo.headId = item.message.id;\n\n await this.storage.setItem(key, JSON.stringify(repo));\n }\n}\n\nconst createHistoryProvider = (\n storage: AsyncStorageLike,\n prefix: string,\n): FC<PropsWithChildren> => {\n const Provider: FC<PropsWithChildren> = ({ children }) => {\n const aui = useAui();\n const history = useMemo(\n () => new AsyncStorageHistoryAdapter(storage, aui, prefix),\n [aui],\n );\n const adapters = useMemo(() => ({ history }), [history]);\n\n return (\n <RuntimeAdapterProvider adapters={adapters}>\n {children}\n </RuntimeAdapterProvider>\n );\n };\n return Provider;\n};\n\nexport const createLocalStorageAdapter = (\n options: LocalStorageAdapterOptions,\n): RemoteThreadListAdapter => {\n const { storage, prefix = \"@assistant-ui:\", titleGenerator } = options;\n\n const threadsKey = `${prefix}threads`;\n const messagesKey = (threadId: string) => `${prefix}messages:${threadId}`;\n\n const loadThreadMetadata = async (): Promise<StoredThreadMetadata[]> => {\n const raw = await storage.getItem(threadsKey);\n return raw ? (JSON.parse(raw) as StoredThreadMetadata[]) : [];\n };\n\n const saveThreadMetadata = async (\n threads: StoredThreadMetadata[],\n ): Promise<void> => {\n await storage.setItem(threadsKey, JSON.stringify(threads));\n };\n\n const adapter: RemoteThreadListAdapter = {\n unstable_Provider: createHistoryProvider(storage, prefix),\n\n async list(): Promise<RemoteThreadListResponse> {\n const threads = await loadThreadMetadata();\n return {\n threads: threads.map((t) => ({\n remoteId: t.remoteId,\n externalId: t.externalId,\n status: t.status,\n title: t.title,\n custom: t.custom,\n })),\n };\n },\n\n async initialize(\n threadId: string,\n ): Promise<RemoteThreadInitializeResponse> {\n const remoteId = threadId;\n const threads = await loadThreadMetadata();\n\n // Only add if not already present\n if (!threads.some((t) => t.remoteId === remoteId)) {\n threads.unshift({\n remoteId,\n status: \"regular\",\n });\n await saveThreadMetadata(threads);\n }\n\n return { remoteId, externalId: undefined };\n },\n\n async rename(remoteId: string, newTitle: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = newTitle;\n await saveThreadMetadata(threads);\n }\n },\n\n async updateCustom(\n remoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.custom = custom;\n await saveThreadMetadata(threads);\n }\n },\n\n async archive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"archived\";\n await saveThreadMetadata(threads);\n }\n },\n\n async unarchive(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.status = \"regular\";\n await saveThreadMetadata(threads);\n }\n },\n\n async delete(remoteId: string): Promise<void> {\n const threads = await loadThreadMetadata();\n const filtered = threads.filter((t) => t.remoteId !== remoteId);\n await saveThreadMetadata(filtered);\n await storage.removeItem(messagesKey(remoteId));\n },\n\n async fetch(threadId: string): Promise<RemoteThreadMetadata> {\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === threadId);\n if (!thread) throw new Error(\"Thread not found\");\n return {\n remoteId: thread.remoteId,\n externalId: thread.externalId,\n status: thread.status,\n title: thread.title,\n custom: thread.custom,\n };\n },\n\n async generateTitle(\n remoteId: string,\n messages: readonly ThreadMessage[],\n ): Promise<AssistantStream> {\n if (titleGenerator) {\n const title = await titleGenerator.generateTitle(messages);\n\n // Update the stored title\n const threads = await loadThreadMetadata();\n const thread = threads.find((t) => t.remoteId === remoteId);\n if (thread) {\n thread.title = title;\n await saveThreadMetadata(threads);\n }\n\n // Return a stream with a single text part\n return createAssistantStream((controller) => {\n controller.appendText(title);\n });\n }\n\n // No title generator — return empty stream\n return createAssistantStream(() => {});\n },\n };\n\n return adapter;\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;;;AAkCA;;;;;;;cAAa,KAAA,GAAK,KAAA;EAQW,gFAFf,OAAA;WAED,eAAA,CAAgB,oBAAA;AAAA;kFAFf,OAAA;WAED,eAAA,CAAgB,oBAAA;AAAA"}
1
+ {"version":3,"file":"Tools.d.ts","names":[],"sources":["../../../src/react/client/Tools.ts"],"mappings":";;;;;;;AAmCA;;;;;;;cAAa,KAAA,GAAK,KAAA;EAQW,gFAFf,OAAA;WAED,eAAA,CAAgB,oBAAA;AAAA;kFAFf,OAAA;WAED,eAAA,CAAgB,oBAAA;AAAA"}
@@ -1,5 +1,5 @@
1
1
  import { ModelContext } from "../../store/clients/model-context-client.js";
2
- import { isStandaloneToolDisplay } from "../model-context/toolbox.js";
2
+ import { isStandaloneToolDisplay, makeToolCallTextComponent } from "../model-context/toolbox.js";
3
3
  import { attachTransformScopes, tapAssistantClientRef } from "@assistant-ui/store";
4
4
  import { resource, tapCallback, tapEffect, tapMemo, tapResources, tapState, withKey } from "@assistant-ui/tap";
5
5
  //#region src/react/client/Tools.ts
@@ -44,9 +44,15 @@ const Tools = resource(({ toolkit, mcpApp }) => {
44
44
  tapEffect(() => {
45
45
  if (!toolkit) return;
46
46
  const unsubscribes = [];
47
- for (const [toolName, tool] of Object.entries(toolkit)) if (tool.render) unsubscribes.push(setToolUI(toolName, tool.render, { standalone: isStandaloneToolDisplay(tool) }));
47
+ for (const [toolName, tool] of Object.entries(toolkit)) {
48
+ const toolRender = "render" in tool ? tool.render : void 0;
49
+ const toolRenderText = "renderText" in tool ? tool.renderText : void 0;
50
+ const render = toolRender ?? (toolRenderText ? makeToolCallTextComponent(toolRenderText) : void 0);
51
+ if (render) unsubscribes.push(setToolUI(toolName, render, { standalone: isStandaloneToolDisplay(tool) }));
52
+ }
48
53
  const toolsWithoutRender = Object.entries(toolkit).reduce((acc, [name, tool]) => {
49
- const { render, display, ...rest } = tool;
54
+ if (tool.type === "mcp") return acc;
55
+ const { display: _display, render: _render, renderText: _renderText, ...rest } = tool;
50
56
  acc[name] = rest;
51
57
  return acc;
52
58
  }, {});
@@ -1 +1 @@
1
- {"version":3,"file":"Tools.js","names":[],"sources":["../../../src/react/client/Tools.ts"],"sourcesContent":["import {\n resource,\n tapState,\n tapEffect,\n tapCallback,\n tapMemo,\n tapResources,\n withKey,\n type ResourceElement,\n} from \"@assistant-ui/tap\";\nimport {\n tapAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport type { McpAppResourceOutput, ToolsState } from \"../types/scopes/tools\";\nimport type { Tool } from \"assistant-stream\";\nimport {\n isStandaloneToolDisplay,\n type Toolkit,\n} from \"../model-context/toolbox\";\nimport type { ToolCallMessagePartComponent } from \"../types/MessagePartComponentTypes\";\nimport { ModelContext } from \"../../store\";\n\nexport type { McpAppResourceOutput };\n\n/**\n * Registers tools with model context and installs tool-call renderers.\n *\n * Mount this resource near an assistant subtree when you want to expose a\n * group of tools declaratively. Tool definitions are registered with model\n * context, while each tool renderer is registered with the tools scope for\n * message rendering.\n */\nexport const Tools = resource(\n ({\n toolkit,\n mcpApp,\n }: {\n /** Tools to expose to the model and optional renderers to install. */\n toolkit?: Toolkit;\n /** Optional MCP app resource whose tools should be merged into context. */\n mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;\n }): ClientOutput<\"tools\"> => {\n const mcpAppOutputs = tapResources(\n () => (mcpApp ? [withKey(\"mcpApp\", mcpApp)] : []),\n [mcpApp],\n );\n const mcpAppOutput = mcpAppOutputs[0];\n\n const [toolUIs, setToolUIs] = tapState<ToolsState[\"toolUIs\"]>(() => ({}));\n\n const state = tapMemo(\n (): ToolsState => ({\n toolUIs,\n mcpApp: mcpAppOutput,\n // Deprecated component-only view, derived from `toolUIs`. Removed in v0.15.\n tools: Object.fromEntries(\n Object.entries(toolUIs).map(([name, regs]) => [\n name,\n regs.map((r) => r.render),\n ]),\n ),\n }),\n [toolUIs, mcpAppOutput],\n );\n\n const clientRef = tapAssistantClientRef();\n\n const setToolUI = tapCallback(\n (\n toolName: string,\n render: ToolCallMessagePartComponent,\n options?: { standalone?: boolean },\n ) => {\n // One registration object per call; identity is the removal key, so\n // the per-name list stays correctly ref-counted across re-registers.\n const registration = {\n render,\n standalone: options?.standalone ?? false,\n };\n\n setToolUIs((prev) => ({\n ...prev,\n [toolName]: [...(prev[toolName] ?? []), registration],\n }));\n\n return () => {\n setToolUIs((prev) => {\n const next =\n prev[toolName]?.filter((r) => r !== registration) ?? [];\n if (next.length > 0) return { ...prev, [toolName]: next };\n // Drop the key entirely so repeatedly mounted/unmounted tools\n // don't leave empty arrays accumulating across a long session.\n const { [toolName]: _removed, ...rest } = prev;\n return rest;\n });\n };\n },\n [],\n );\n\n tapEffect(() => {\n if (!toolkit) return;\n const unsubscribes: (() => void)[] = [];\n\n // Register tool UIs (exclude symbols)\n for (const [toolName, tool] of Object.entries(toolkit)) {\n if (tool.render) {\n unsubscribes.push(\n setToolUI(toolName, tool.render, {\n standalone: isStandaloneToolDisplay(tool),\n }),\n );\n }\n }\n\n // Register tools with model context (exclude symbols). `render` and\n // `display` are client-only presentation concerns and never reach the\n // model.\n const toolsWithoutRender = Object.entries(toolkit).reduce(\n (acc, [name, tool]) => {\n const { render, display, ...rest } = tool;\n acc[name] = rest;\n return acc;\n },\n {} as Record<string, Tool<any, any>>,\n );\n\n const modelContextProvider = {\n getModelContext: () => ({\n tools: toolsWithoutRender,\n }),\n };\n\n unsubscribes.push(\n clientRef.current!.modelContext().register(modelContextProvider),\n );\n\n return () => {\n unsubscribes.forEach((fn) => fn());\n };\n }, [toolkit, setToolUI, clientRef]);\n\n return {\n getState: () => state,\n setToolUI,\n };\n },\n);\n\nattachTransformScopes(Tools, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":";;;;;;;;;;;;;AAkCA,MAAa,QAAQ,UAClB,EACC,SACA,aAM2B;CAK3B,MAAM,eAJgB,mBACb,SAAS,CAAC,QAAQ,UAAU,MAAM,CAAC,IAAI,CAAC,GAC/C,CAAC,MAAM,CAEwB,EAAE;CAEnC,MAAM,CAAC,SAAS,cAAc,gBAAuC,CAAC,EAAE;CAExE,MAAM,QAAQ,eACO;EACjB;EACA,QAAQ;EAER,OAAO,OAAO,YACZ,OAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,MAAM,UAAU,CAC5C,MACA,KAAK,KAAK,MAAM,EAAE,MAAM,CAC1B,CAAC,CACH;CACF,IACA,CAAC,SAAS,YAAY,CACxB;CAEA,MAAM,YAAY,sBAAsB;CAExC,MAAM,YAAY,aAEd,UACA,QACA,YACG;EAGH,MAAM,eAAe;GACnB;GACA,YAAY,SAAS,cAAc;EACrC;EAEA,YAAY,UAAU;GACpB,GAAG;IACF,WAAW,CAAC,GAAI,KAAK,aAAa,CAAC,GAAI,YAAY;EACtD,EAAE;EAEF,aAAa;GACX,YAAY,SAAS;IACnB,MAAM,OACJ,KAAK,WAAW,QAAQ,MAAM,MAAM,YAAY,KAAK,CAAC;IACxD,IAAI,KAAK,SAAS,GAAG,OAAO;KAAE,GAAG;MAAO,WAAW;IAAK;IAGxD,MAAM,GAAG,WAAW,UAAU,GAAG,SAAS;IAC1C,OAAO;GACT,CAAC;EACH;CACF,GACA,CAAC,CACH;CAEA,gBAAgB;EACd,IAAI,CAAC,SAAS;EACd,MAAM,eAA+B,CAAC;EAGtC,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,OAAO,GACnD,IAAI,KAAK,QACP,aAAa,KACX,UAAU,UAAU,KAAK,QAAQ,EAC/B,YAAY,wBAAwB,IAAI,EAC1C,CAAC,CACH;EAOJ,MAAM,qBAAqB,OAAO,QAAQ,OAAO,EAAE,QAChD,KAAK,CAAC,MAAM,UAAU;GACrB,MAAM,EAAE,QAAQ,SAAS,GAAG,SAAS;GACrC,IAAI,QAAQ;GACZ,OAAO;EACT,GACA,CAAC,CACH;EAQA,aAAa,KACX,UAAU,QAAS,aAAa,EAAE,SAAS,EAN3C,wBAAwB,EACtB,OAAO,mBACT,GAI8D,CAAC,CACjE;EAEA,aAAa;GACX,aAAa,SAAS,OAAO,GAAG,CAAC;EACnC;CACF,GAAG;EAAC;EAAS;EAAW;CAAS,CAAC;CAElC,OAAO;EACL,gBAAgB;EAChB;CACF;AACF,CACF;AAEA,sBAAsB,QAAQ,QAAQ,WAAW;CAC/C,IAAI,CAAC,OAAO,gBAAgB,OAAO,aAAa,WAAW,MACzD,OAAO,eAAe,aAAa;AAEvC,CAAC"}
1
+ {"version":3,"file":"Tools.js","names":[],"sources":["../../../src/react/client/Tools.ts"],"sourcesContent":["import {\n resource,\n tapState,\n tapEffect,\n tapCallback,\n tapMemo,\n tapResources,\n withKey,\n type ResourceElement,\n} from \"@assistant-ui/tap\";\nimport {\n tapAssistantClientRef,\n type ClientOutput,\n attachTransformScopes,\n} from \"@assistant-ui/store\";\nimport type { McpAppResourceOutput, ToolsState } from \"../types/scopes/tools\";\nimport type { Tool } from \"assistant-stream\";\nimport {\n isStandaloneToolDisplay,\n makeToolCallTextComponent,\n type Toolkit,\n} from \"../model-context/toolbox\";\nimport type { ToolCallMessagePartComponent } from \"../types/MessagePartComponentTypes\";\nimport { ModelContext } from \"../../store\";\n\nexport type { McpAppResourceOutput };\n\n/**\n * Registers tools with model context and installs tool-call renderers.\n *\n * Mount this resource near an assistant subtree when you want to expose a\n * group of tools declaratively. Tool definitions are registered with model\n * context, while each tool renderer is registered with the tools scope for\n * message rendering.\n */\nexport const Tools = resource(\n ({\n toolkit,\n mcpApp,\n }: {\n /** Tools to expose to the model and optional renderers to install. */\n toolkit?: Toolkit;\n /** Optional MCP app resource whose tools should be merged into context. */\n mcpApp?: ResourceElement<McpAppResourceOutput> | undefined;\n }): ClientOutput<\"tools\"> => {\n const mcpAppOutputs = tapResources(\n () => (mcpApp ? [withKey(\"mcpApp\", mcpApp)] : []),\n [mcpApp],\n );\n const mcpAppOutput = mcpAppOutputs[0];\n\n const [toolUIs, setToolUIs] = tapState<ToolsState[\"toolUIs\"]>(() => ({}));\n\n const state = tapMemo(\n (): ToolsState => ({\n toolUIs,\n mcpApp: mcpAppOutput,\n // Deprecated component-only view, derived from `toolUIs`. Removed in v0.15.\n tools: Object.fromEntries(\n Object.entries(toolUIs).map(([name, regs]) => [\n name,\n regs.map((r) => r.render),\n ]),\n ),\n }),\n [toolUIs, mcpAppOutput],\n );\n\n const clientRef = tapAssistantClientRef();\n\n const setToolUI = tapCallback(\n (\n toolName: string,\n render: ToolCallMessagePartComponent,\n options?: { standalone?: boolean },\n ) => {\n // One registration object per call; identity is the removal key, so\n // the per-name list stays correctly ref-counted across re-registers.\n const registration = {\n render,\n standalone: options?.standalone ?? false,\n };\n\n setToolUIs((prev) => ({\n ...prev,\n [toolName]: [...(prev[toolName] ?? []), registration],\n }));\n\n return () => {\n setToolUIs((prev) => {\n const next =\n prev[toolName]?.filter((r) => r !== registration) ?? [];\n if (next.length > 0) return { ...prev, [toolName]: next };\n // Drop the key entirely so repeatedly mounted/unmounted tools\n // don't leave empty arrays accumulating across a long session.\n const { [toolName]: _removed, ...rest } = prev;\n return rest;\n });\n };\n },\n [],\n );\n\n tapEffect(() => {\n if (!toolkit) return;\n const unsubscribes: (() => void)[] = [];\n\n // Register tool UIs (exclude symbols)\n for (const [toolName, tool] of Object.entries(toolkit)) {\n const toolRender = \"render\" in tool ? tool.render : undefined;\n const toolRenderText =\n \"renderText\" in tool ? tool.renderText : undefined;\n const render =\n toolRender ??\n (toolRenderText\n ? makeToolCallTextComponent(toolRenderText)\n : undefined);\n if (render) {\n unsubscribes.push(\n setToolUI(toolName, render, {\n standalone: isStandaloneToolDisplay(tool),\n }),\n );\n }\n }\n\n // Register tools with model context (exclude symbols). `render`,\n // `renderText`, and `display` are client-only presentation concerns and\n // never reach the model.\n const toolsWithoutRender = Object.entries(toolkit).reduce(\n (acc, [name, tool]) => {\n if (tool.type === \"mcp\") return acc;\n const {\n display: _display,\n render: _render,\n renderText: _renderText,\n ...rest\n } = tool as typeof tool & { renderText?: unknown };\n acc[name] = rest as Tool<any, any>;\n return acc;\n },\n {} as Record<string, Tool<any, any>>,\n );\n\n const modelContextProvider = {\n getModelContext: () => ({\n tools: toolsWithoutRender,\n }),\n };\n\n unsubscribes.push(\n clientRef.current!.modelContext().register(modelContextProvider),\n );\n\n return () => {\n unsubscribes.forEach((fn) => fn());\n };\n }, [toolkit, setToolUI, clientRef]);\n\n return {\n getState: () => state,\n setToolUI,\n };\n },\n);\n\nattachTransformScopes(Tools, (scopes, parent) => {\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n});\n"],"mappings":";;;;;;;;;;;;;AAmCA,MAAa,QAAQ,UAClB,EACC,SACA,aAM2B;CAK3B,MAAM,eAJgB,mBACb,SAAS,CAAC,QAAQ,UAAU,MAAM,CAAC,IAAI,CAAC,GAC/C,CAAC,MAAM,CAEwB,EAAE;CAEnC,MAAM,CAAC,SAAS,cAAc,gBAAuC,CAAC,EAAE;CAExE,MAAM,QAAQ,eACO;EACjB;EACA,QAAQ;EAER,OAAO,OAAO,YACZ,OAAO,QAAQ,OAAO,EAAE,KAAK,CAAC,MAAM,UAAU,CAC5C,MACA,KAAK,KAAK,MAAM,EAAE,MAAM,CAC1B,CAAC,CACH;CACF,IACA,CAAC,SAAS,YAAY,CACxB;CAEA,MAAM,YAAY,sBAAsB;CAExC,MAAM,YAAY,aAEd,UACA,QACA,YACG;EAGH,MAAM,eAAe;GACnB;GACA,YAAY,SAAS,cAAc;EACrC;EAEA,YAAY,UAAU;GACpB,GAAG;IACF,WAAW,CAAC,GAAI,KAAK,aAAa,CAAC,GAAI,YAAY;EACtD,EAAE;EAEF,aAAa;GACX,YAAY,SAAS;IACnB,MAAM,OACJ,KAAK,WAAW,QAAQ,MAAM,MAAM,YAAY,KAAK,CAAC;IACxD,IAAI,KAAK,SAAS,GAAG,OAAO;KAAE,GAAG;MAAO,WAAW;IAAK;IAGxD,MAAM,GAAG,WAAW,UAAU,GAAG,SAAS;IAC1C,OAAO;GACT,CAAC;EACH;CACF,GACA,CAAC,CACH;CAEA,gBAAgB;EACd,IAAI,CAAC,SAAS;EACd,MAAM,eAA+B,CAAC;EAGtC,KAAK,MAAM,CAAC,UAAU,SAAS,OAAO,QAAQ,OAAO,GAAG;GACtD,MAAM,aAAa,YAAY,OAAO,KAAK,SAAS,KAAA;GACpD,MAAM,iBACJ,gBAAgB,OAAO,KAAK,aAAa,KAAA;GAC3C,MAAM,SACJ,eACC,iBACG,0BAA0B,cAAc,IACxC,KAAA;GACN,IAAI,QACF,aAAa,KACX,UAAU,UAAU,QAAQ,EAC1B,YAAY,wBAAwB,IAAI,EAC1C,CAAC,CACH;EAEJ;EAKA,MAAM,qBAAqB,OAAO,QAAQ,OAAO,EAAE,QAChD,KAAK,CAAC,MAAM,UAAU;GACrB,IAAI,KAAK,SAAS,OAAO,OAAO;GAChC,MAAM,EACJ,SAAS,UACT,QAAQ,SACR,YAAY,aACZ,GAAG,SACD;GACJ,IAAI,QAAQ;GACZ,OAAO;EACT,GACA,CAAC,CACH;EAQA,aAAa,KACX,UAAU,QAAS,aAAa,EAAE,SAAS,EAN3C,wBAAwB,EACtB,OAAO,mBACT,GAI8D,CAAC,CACjE;EAEA,aAAa;GACX,aAAa,SAAS,OAAO,GAAG,CAAC;EACnC;CACF,GAAG;EAAC;EAAS;EAAW;CAAS,CAAC;CAElC,OAAO;EACL,gBAAgB;EAChB;CACF;AACF,CACF;AAEA,sBAAsB,QAAQ,QAAQ,WAAW;CAC/C,IAAI,CAAC,OAAO,gBAAgB,OAAO,aAAa,WAAW,MACzD,OAAO,eAAe,aAAa;AAEvC,CAAC"}
@@ -10,7 +10,7 @@ import { DataRenderers } from "./client/DataRenderers.js";
10
10
  import { Interactables } from "./client/Interactables.js";
11
11
  import { DataMessagePartComponent, DataMessagePartProps, EmptyMessagePartComponent, EmptyMessagePartProps, FileMessagePartComponent, FileMessagePartProps, GenerativeUIComponentRegistry, GenerativeUIMessagePartComponent, GenerativeUIMessagePartProps, GenerativeUIRenderProps, ImageMessagePartComponent, ImageMessagePartProps, QuoteMessagePartComponent, QuoteMessagePartProps, ReasoningGroupComponent, ReasoningGroupProps, ReasoningMessagePartComponent, ReasoningMessagePartProps, SourceMessagePartComponent, SourceMessagePartProps, TextMessagePartComponent, TextMessagePartProps, ToolCallMessagePartComponent, ToolCallMessagePartProps, Unstable_AudioMessagePartComponent, Unstable_AudioMessagePartProps } from "./types/MessagePartComponentTypes.js";
12
12
  import { McpAppResourceOutput, ToolsClientSchema, ToolsMethods, ToolsState } from "./types/scopes/tools.js";
13
- import { ToolDefinition, Toolkit, ToolkitDeclaration, ToolkitDeclarationDefinition } from "./model-context/toolbox.js";
13
+ import { ToolCallText, ToolDefinition, Toolkit, ToolkitDefinition, ToolkitDefinitionEntry } from "./model-context/toolbox.js";
14
14
  import { Tools } from "./client/Tools.js";
15
15
  import { InteractableDefinition, InteractablePersistedState, InteractablePersistenceAdapter, InteractablePersistenceStatus, InteractableRegistration, InteractableStateSchema, InteractablesClientSchema, InteractablesMethods, InteractablesState } from "./types/scopes/interactables.js";
16
16
  import { AssistantToolProps, useAssistantTool } from "./model-context/useAssistantTool.js";
@@ -23,7 +23,11 @@ import { useAssistantInstructions } from "./model-context/useAssistantInstructio
23
23
  import { useAssistantContext } from "./model-context/useAssistantContext.js";
24
24
  import { useInlineRender } from "./model-context/useInlineRender.js";
25
25
  import { defineToolkit } from "./model-context/define-toolkit.js";
26
- import { hitl } from "./model-context/hitl.js";
26
+ import { stubTool } from "./model-context/stub-tool.js";
27
+ import { useAuiToolOverrides } from "./model-context/useAuiToolOverrides.js";
28
+ import { hitl, hitlTool } from "./model-context/hitl.js";
29
+ import { ProviderToolConfig, providerTool } from "./model-context/provider-tool.js";
30
+ import { McpToolkitDefinition, defineMcpToolkit } from "./model-context/define-mcp-toolkit.js";
27
31
  import { AssistantInteractableProps, useAssistantInteractable } from "./model-context/useAssistantInteractable.js";
28
32
  import { useInteractableState } from "./model-context/useInteractableState.js";
29
33
  import { ToolArgsStatus, useToolArgsStatus } from "./model-context/useToolArgsStatus.js";
@@ -97,4 +101,4 @@ import { useEditComposerCancel } from "./primitive-hooks/useEditComposerCancel.j
97
101
  import { useEditComposerSend } from "./primitive-hooks/useEditComposerSend.js";
98
102
  import { useMessageError } from "./primitive-hooks/useMessageError.js";
99
103
  import { LocalRuntimeOptions, splitLocalRuntimeOptions, useLocalRuntime } from "./runtimes/useLocalRuntime.js";
100
- export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type LocalRuntimeOptions, type McpAppResourceOutput, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type SourceMessagePartComponent, type SourceMessagePartProps, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolDefinition, type Toolkit, type ToolkitDeclaration, type ToolkitDeclarationDefinition, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineToolkit, getMessageQuote, getRenderComponent, groupPartByType, hitl, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, splitLocalRuntimeOptions, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
104
+ export { type AssistantContextConfig, type AssistantDataUI, type AssistantDataUIProps, type AssistantInteractableProps, AssistantProviderBase, type AssistantProviderBaseProps, AssistantRuntimeProvider, type AssistantTool, type AssistantToolProps, type AssistantToolUI, type AssistantToolUIProps, type AsyncStorageLike, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, type DataMessagePartComponent, type DataMessagePartProps, DataRenderers, type DataRenderersClientSchema, type DataRenderersMethods, type DataRenderersState, type EmptyMessagePartComponent, type EmptyMessagePartProps, type EnrichedPartState, type FileMessagePartComponent, type FileMessagePartProps, type GenerativeUIComponentRegistry, type GenerativeUIMessagePartComponent, type GenerativeUIMessagePartProps, GenerativeUIRender, GenerativeUIRenderError, type GenerativeUIRenderProps, type GroupByContext, type ImageMessagePartComponent, type ImageMessagePartProps, type InteractableDefinition, type InteractablePersistedState, type InteractablePersistenceAdapter, type InteractablePersistenceStatus, type InteractableRegistration, type InteractableStateSchema, Interactables, type InteractablesClientSchema, type InteractablesMethods, type InteractablesState, type LocalRuntimeOptions, type McpAppResourceOutput, type McpToolkitDefinition, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, type PartState, type ProviderToolConfig, QueueItemByIndexProvider, type QueueItemByIndexProviderProps, type QuoteMessagePartComponent, type QuoteMessagePartProps, ReadonlyThreadProvider, type ReasoningGroupComponent, type ReasoningGroupProps, type ReasoningMessagePartComponent, type ReasoningMessagePartProps, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, type RuntimeAdapters, type SourceMessagePartComponent, type SourceMessagePartProps, SuggestionByIndexProvider, type SuggestionByIndexProviderProps, type TextMessagePartComponent, type TextMessagePartProps, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, type TitleGenerationAdapter, type ToolArgsStatus, type ToolCallMessagePartComponent, type ToolCallMessagePartProps, type ToolCallText, type ToolDefinition, type Toolkit, type ToolkitDefinition, type ToolkitDefinitionEntry, Tools, type ToolsClientSchema, type ToolsMethods, type ToolsState, type Unstable_AudioMessagePartComponent, type Unstable_AudioMessagePartProps, type UseActionBarCopyOptions, type UseComposerIfProps, type UseSuggestionTriggerOptions, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
@@ -13,7 +13,11 @@ import { useAssistantInstructions } from "./model-context/useAssistantInstructio
13
13
  import { useAssistantContext } from "./model-context/useAssistantContext.js";
14
14
  import { useInlineRender } from "./model-context/useInlineRender.js";
15
15
  import { defineToolkit } from "./model-context/define-toolkit.js";
16
- import { hitl } from "./model-context/hitl.js";
16
+ import { stubTool } from "./model-context/stub-tool.js";
17
+ import { useAuiToolOverrides } from "./model-context/useAuiToolOverrides.js";
18
+ import { hitl, hitlTool } from "./model-context/hitl.js";
19
+ import { providerTool } from "./model-context/provider-tool.js";
20
+ import { defineMcpToolkit } from "./model-context/define-mcp-toolkit.js";
17
21
  import { useAssistantInteractable } from "./model-context/useAssistantInteractable.js";
18
22
  import { useInteractableState } from "./model-context/useInteractableState.js";
19
23
  import { useToolArgsStatus } from "./model-context/useToolArgsStatus.js";
@@ -88,4 +92,4 @@ import { useEditComposerCancel } from "./primitive-hooks/useEditComposerCancel.j
88
92
  import { useEditComposerSend } from "./primitive-hooks/useEditComposerSend.js";
89
93
  import { useMessageError } from "./primitive-hooks/useMessageError.js";
90
94
  import { splitLocalRuntimeOptions, useLocalRuntime } from "./runtimes/useLocalRuntime.js";
91
- export { AssistantProviderBase, AssistantRuntimeProvider, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, DataRenderers, GenerativeUIRender, GenerativeUIRenderError, Interactables, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, QueueItemByIndexProvider, ReadonlyThreadProvider, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, SuggestionByIndexProvider, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, Tools, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineToolkit, getMessageQuote, getRenderComponent, groupPartByType, hitl, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, splitLocalRuntimeOptions, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
95
+ export { AssistantProviderBase, AssistantRuntimeProvider, ChainOfThoughtByIndicesProvider, ChainOfThoughtPartByIndexProvider, ChainOfThoughtPrimitiveParts, CloudFileAttachmentAdapter, ComposerAttachmentByIndexProvider, ComposerPrimitiveAttachmentByIndex, ComposerPrimitiveAttachments, ComposerPrimitiveIf, ComposerPrimitiveQueue, DataRenderers, GenerativeUIRender, GenerativeUIRenderError, Interactables, MessageAttachmentByIndexProvider, MessageByIndexProvider, MessagePartComponent, MessagePartPrimitiveInProgress, MessagePrimitiveAttachmentByIndex, MessagePrimitiveAttachments, MessagePrimitiveGenerativeUI, MessagePrimitiveGroupedParts, MessagePrimitivePartByIndex, MessagePrimitiveParts, MessagePrimitiveQuote, PartByIndexProvider, PartPrimitiveMessages, PartPrimitiveMessagesImpl, QueueItemByIndexProvider, ReadonlyThreadProvider, RemoteThreadListHookInstanceManager, RemoteThreadListThreadListRuntimeCore, RuntimeAdapter, RuntimeAdapterProvider, SuggestionByIndexProvider, TextMessagePartProvider, ThreadListItemByIndexProvider, ThreadListItemPrimitiveTitle, ThreadListItemRuntimeProvider, ThreadListPrimitiveItemByIndex, ThreadListPrimitiveItems, ThreadPrimitiveMessageByIndex, ThreadPrimitiveMessages, ThreadPrimitiveMessagesImpl, ThreadPrimitiveSuggestionByIndex, ThreadPrimitiveSuggestions, ThreadPrimitiveSuggestionsImpl, Tools, convertExternalMessages, createLocalStorageAdapter, createMessageConverter, createSimpleTitleAdapter, defineMcpToolkit, defineToolkit, getMessageQuote, getRenderComponent, groupPartByType, hitl, hitlTool, makeAssistantDataUI, makeAssistantTool, makeAssistantToolUI, defaultComponents as messagePartsDefaultComponents, providerTool, splitLocalRuntimeOptions, stubTool, useActionBarCopy, useActionBarEdit, useActionBarFeedbackNegative, useActionBarFeedbackPositive, useActionBarReload, useActionBarSpeak, useActionBarStopSpeaking, useAssistantCloudThreadHistoryAdapter, useAssistantContext, useAssistantDataUI, useAssistantInstructions, useAssistantInteractable, useAssistantTool, useAssistantToolUI, useAuiToolOverrides, useBranchPickerNext, useBranchPickerPrevious, useCloudThreadListAdapter, useComposerAddAttachment, useComposerCancel, useComposerDictate, useComposerSend, useEditComposerCancel, useEditComposerSend, useExternalMessageConverter, useExternalStoreRuntime, useExternalStoreSharedOptions, useInlineRender, useInteractableState, useLocalRuntime, useMessageBranching, useMessageError, useMessageReload, useRemoteThreadListRuntime, useRuntimeAdapters, useSuggestionTrigger, useThreadIsEmpty, useThreadIsRunning, useThreadListItemArchive, useThreadListItemDelete, useThreadListItemTrigger, useThreadListItemUnarchive, useThreadListLoadMore, useThreadListNew, useThreadMessages, useToolArgsStatus, useVoiceControls, useVoiceState, useVoiceVolume };
@@ -0,0 +1,12 @@
1
+ import { Toolkit } from "./toolbox.js";
2
+ import { McpServerConfig } from "assistant-stream";
3
+
4
+ //#region src/react/model-context/define-mcp-toolkit.d.ts
5
+ type McpToolkitDefinition = Record<string, McpServerConfig>;
6
+ /**
7
+ * Defines MCP server tools as a spreadable toolkit fragment.
8
+ */
9
+ declare function defineMcpToolkit(definition: McpToolkitDefinition): Toolkit;
10
+ //#endregion
11
+ export { McpToolkitDefinition, defineMcpToolkit };
12
+ //# sourceMappingURL=define-mcp-toolkit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-mcp-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"mappings":";;;;KAGY,oBAAA,GAAuB,MAAM,SAAS,eAAA;;AAAlD;;iBAKgB,gBAAA,CAAiB,UAAA,EAAY,oBAAA,GAAuB,OAAO"}
@@ -0,0 +1,14 @@
1
+ //#region src/react/model-context/define-mcp-toolkit.ts
2
+ /**
3
+ * Defines MCP server tools as a spreadable toolkit fragment.
4
+ */
5
+ function defineMcpToolkit(definition) {
6
+ return Object.fromEntries(Object.entries(definition).map(([name, server]) => [name, {
7
+ type: "mcp",
8
+ server
9
+ }]));
10
+ }
11
+ //#endregion
12
+ export { defineMcpToolkit };
13
+
14
+ //# sourceMappingURL=define-mcp-toolkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-mcp-toolkit.js","names":[],"sources":["../../../src/react/model-context/define-mcp-toolkit.ts"],"sourcesContent":["import type { McpServerConfig } from \"assistant-stream\";\nimport type { Toolkit } from \"./toolbox\";\n\nexport type McpToolkitDefinition = Record<string, McpServerConfig>;\n\n/**\n * Defines MCP server tools as a spreadable toolkit fragment.\n */\nexport function defineMcpToolkit(definition: McpToolkitDefinition): Toolkit {\n return Object.fromEntries(\n Object.entries(definition).map(([name, server]) => [\n name,\n { type: \"mcp\", server },\n ]),\n ) as Toolkit;\n}\n"],"mappings":";;;;AAQA,SAAgB,iBAAiB,YAA2C;CAC1E,OAAO,OAAO,YACZ,OAAO,QAAQ,UAAU,EAAE,KAAK,CAAC,MAAM,YAAY,CACjD,MACA;EAAE,MAAM;EAAO;CAAO,CACxB,CAAC,CACH;AACF"}
@@ -1,9 +1,9 @@
1
- import { Toolkit, ToolkitDeclaration } from "./toolbox.js";
1
+ import { Toolkit, ToolkitDefinition, ToolkitDefinitionEntryWithParameters } from "./toolbox.js";
2
2
 
3
3
  //#region src/react/model-context/define-toolkit.d.ts
4
4
  /**
5
5
  * Authoring helper for a `"use generative"` toolkit. Accepts the permissive
6
- * {@link ToolkitDeclaration} (a `backend` tool may carry its server `execute`)
6
+ * {@link ToolkitDefinition} (a `backend` tool may carry its server `execute`)
7
7
  * and types the result as the canonical {@link Toolkit}.
8
8
  *
9
9
  * It has **no runtime implementation**. A `"use generative"` compiler (e.g.
@@ -14,7 +14,8 @@ import { Toolkit, ToolkitDeclaration } from "./toolbox.js";
14
14
  * outside a `"use generative"` file — which would ship a backend `execute` to the
15
15
  * client. So it throws instead of silently leaking.
16
16
  */
17
- declare function defineToolkit(_declaration: ToolkitDeclaration): Toolkit;
17
+ declare function defineToolkit<TArgsByName extends { [K in keyof TArgsByName]: Record<string, unknown> }, TResultByName extends { [K in keyof TArgsByName]: unknown } = { [K in keyof TArgsByName]: unknown }>(_definition: { [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<TArgsByName[K], TResultByName[K]> }): Toolkit;
18
+ declare function defineToolkit(_definition: ToolkitDefinition): Toolkit;
18
19
  //#endregion
19
20
  export { defineToolkit };
20
21
  //# sourceMappingURL=define-toolkit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"mappings":";;;;;AAeA;;;;;;;;AAAwE;;;iBAAxD,aAAA,CAAc,YAAA,EAAc,kBAAA,GAAqB,OAAO"}
1
+ {"version":3,"file":"define-toolkit.d.ts","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"mappings":";;;;;AAmBA;;;;;;;;;;;iBAAgB,aAAA,mCAEA,WAAA,GAAc,MAAA,yDAEQ,WAAA,6BACtB,WAAA,cAEd,WAAA,gBACY,WAAA,GAAc,oCAAA,CACxB,WAAA,CAAY,CAAA,GACZ,aAAA,CAAc,CAAA,OAEd,OAAA;AAAA,iBACY,aAAA,CAAc,WAAA,EAAa,iBAAA,GAAoB,OAAO"}
@@ -1,18 +1,5 @@
1
1
  //#region src/react/model-context/define-toolkit.ts
2
- /**
3
- * Authoring helper for a `"use generative"` toolkit. Accepts the permissive
4
- * {@link ToolkitDeclaration} (a `backend` tool may carry its server `execute`)
5
- * and types the result as the canonical {@link Toolkit}.
6
- *
7
- * It has **no runtime implementation**. A `"use generative"` compiler (e.g.
8
- * `@assistant-ui/next` or `@assistant-ui/vite`) strips the `defineToolkit(...)`
9
- * wrapper (and its import) per build, so a correctly compiled
10
- * `export default defineToolkit({...})` never calls this. If it *does* run, the
11
- * module was not compiled by a use-generative loader — e.g. `defineToolkit` used
12
- * outside a `"use generative"` file — which would ship a backend `execute` to the
13
- * client. So it throws instead of silently leaking.
14
- */
15
- function defineToolkit(_declaration) {
2
+ function defineToolkit(_definition) {
16
3
  throw new Error("[assistant-ui] defineToolkit() has no runtime implementation — it is stripped at build time by the use-generative compiler. Reaching it means this module was not compiled (e.g. defineToolkit used outside a \"use generative\" file). Add the directive, or do not use defineToolkit here.");
17
4
  }
18
5
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"define-toolkit.js","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"sourcesContent":["import type { Toolkit, ToolkitDeclaration } from \"./toolbox\";\n\n/**\n * Authoring helper for a `\"use generative\"` toolkit. Accepts the permissive\n * {@link ToolkitDeclaration} (a `backend` tool may carry its server `execute`)\n * and types the result as the canonical {@link Toolkit}.\n *\n * It has **no runtime implementation**. A `\"use generative\"` compiler (e.g.\n * `@assistant-ui/next` or `@assistant-ui/vite`) strips the `defineToolkit(...)`\n * wrapper (and its import) per build, so a correctly compiled\n * `export default defineToolkit({...})` never calls this. If it *does* run, the\n * module was not compiled by a use-generative loader — e.g. `defineToolkit` used\n * outside a `\"use generative\"` file — which would ship a backend `execute` to the\n * client. So it throws instead of silently leaking.\n */\nexport function defineToolkit(_declaration: ToolkitDeclaration): Toolkit {\n throw new Error(\n \"[assistant-ui] defineToolkit() has no runtime implementation — it is \" +\n \"stripped at build time by the use-generative compiler. Reaching it means \" +\n 'this module was not compiled (e.g. defineToolkit used outside a \"use ' +\n 'generative\" file). Add the directive, or do not use defineToolkit here.',\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAeA,SAAgB,cAAc,cAA2C;CACvE,MAAM,IAAI,MACR,8RAIF;AACF"}
1
+ {"version":3,"file":"define-toolkit.js","names":[],"sources":["../../../src/react/model-context/define-toolkit.ts"],"sourcesContent":["import type {\n Toolkit,\n ToolkitDefinition,\n ToolkitDefinitionEntryWithParameters,\n} from \"./toolbox\";\n\n/**\n * Authoring helper for a `\"use generative\"` toolkit. Accepts the permissive\n * {@link ToolkitDefinition} (a `backend` tool may carry its server `execute`)\n * and types the result as the canonical {@link Toolkit}.\n *\n * It has **no runtime implementation**. A `\"use generative\"` compiler (e.g.\n * `@assistant-ui/next` or `@assistant-ui/vite`) strips the `defineToolkit(...)`\n * wrapper (and its import) per build, so a correctly compiled\n * `export default defineToolkit({...})` never calls this. If it *does* run, the\n * module was not compiled by a use-generative loader — e.g. `defineToolkit` used\n * outside a `\"use generative\"` file — which would ship a backend `execute` to the\n * client. So it throws instead of silently leaking.\n */\nexport function defineToolkit<\n TArgsByName extends {\n [K in keyof TArgsByName]: Record<string, unknown>;\n },\n TResultByName extends { [K in keyof TArgsByName]: unknown } = {\n [K in keyof TArgsByName]: unknown;\n },\n>(_definition: {\n [K in keyof TArgsByName]: ToolkitDefinitionEntryWithParameters<\n TArgsByName[K],\n TResultByName[K]\n >;\n}): Toolkit;\nexport function defineToolkit(_definition: ToolkitDefinition): Toolkit;\nexport function defineToolkit(_definition: ToolkitDefinition): Toolkit {\n throw new Error(\n \"[assistant-ui] defineToolkit() has no runtime implementation — it is \" +\n \"stripped at build time by the use-generative compiler. Reaching it means \" +\n 'this module was not compiled (e.g. defineToolkit used outside a \"use ' +\n 'generative\" file). Add the directive, or do not use defineToolkit here.',\n );\n}\n"],"mappings":";AAiCA,SAAgB,cAAc,aAAyC;CACrE,MAAM,IAAI,MACR,8RAIF;AACF"}
@@ -4,16 +4,20 @@
4
4
  * supplies the result instead of code. Use it as the tool's `execute`:
5
5
  *
6
6
  * ```tsx
7
- * confirm: { execute: hitl(), render: (props) => <Confirm {...props} /> }
7
+ * confirm: { execute: hitlTool(), render: (props) => <Confirm {...props} /> }
8
8
  * ```
9
9
  *
10
10
  * Like {@link defineToolkit}, it has **no runtime implementation**: a
11
11
  * `"use generative"` compiler (e.g. `@assistant-ui/next` or `@assistant-ui/vite`)
12
- * detects `execute: hitl()`, drops it, and stamps the tool `type: "human"`.
12
+ * detects `execute: hitlTool()`, drops it, and stamps the tool `type: "human"`.
13
13
  * Reaching it at runtime means the module wasn't compiled (used outside a
14
14
  * `"use generative"` file), so it throws.
15
15
  */
16
- declare function hitl(): never;
16
+ declare function hitlTool(): never;
17
+ /**
18
+ * @deprecated Use {@link hitlTool}.
19
+ */
20
+ declare const hitl: typeof hitlTool;
17
21
  //#endregion
18
- export { hitl };
22
+ export { hitl, hitlTool };
19
23
  //# sourceMappingURL=hitl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.d.ts","names":[],"sources":["../../../src/react/model-context/hitl.ts"],"mappings":";;AAcA;;;;AAAoB;;;;;;;;;iBAAJ,IAAA"}
1
+ {"version":3,"file":"hitl.d.ts","names":[],"sources":["../../../src/react/model-context/hitl.ts"],"mappings":";;AAcA;;;;AAAwB;AAYxB;;;;AAA4B;;;;iBAZZ,QAAA;;;;cAYH,IAAA,SAAI,QAAW"}
@@ -4,19 +4,23 @@
4
4
  * supplies the result instead of code. Use it as the tool's `execute`:
5
5
  *
6
6
  * ```tsx
7
- * confirm: { execute: hitl(), render: (props) => <Confirm {...props} /> }
7
+ * confirm: { execute: hitlTool(), render: (props) => <Confirm {...props} /> }
8
8
  * ```
9
9
  *
10
10
  * Like {@link defineToolkit}, it has **no runtime implementation**: a
11
11
  * `"use generative"` compiler (e.g. `@assistant-ui/next` or `@assistant-ui/vite`)
12
- * detects `execute: hitl()`, drops it, and stamps the tool `type: "human"`.
12
+ * detects `execute: hitlTool()`, drops it, and stamps the tool `type: "human"`.
13
13
  * Reaching it at runtime means the module wasn't compiled (used outside a
14
14
  * `"use generative"` file), so it throws.
15
15
  */
16
- function hitl() {
17
- throw new Error("[assistant-ui] hitl() has no runtime implementation — it marks a human-in-the-loop tool and is stripped at build time by the use-generative compiler. Reaching it means this module was not compiled (e.g. hitl() used outside a \"use generative\" file).");
16
+ function hitlTool() {
17
+ throw new Error("[assistant-ui] hitlTool() has no runtime implementation — it marks a human-in-the-loop tool and is stripped at build time by the use-generative compiler. Reaching it means this module was not compiled (e.g. hitlTool() used outside a \"use generative\" file).");
18
18
  }
19
+ /**
20
+ * @deprecated Use {@link hitlTool}.
21
+ */
22
+ const hitl = hitlTool;
19
23
  //#endregion
20
- export { hitl };
24
+ export { hitl, hitlTool };
21
25
 
22
26
  //# sourceMappingURL=hitl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.js","names":[],"sources":["../../../src/react/model-context/hitl.ts"],"sourcesContent":["/**\n * Marks a tool as **human-in-the-loop**: the agent pauses and the UI (`render`)\n * supplies the result instead of code. Use it as the tool's `execute`:\n *\n * ```tsx\n * confirm: { execute: hitl(), render: (props) => <Confirm {...props} /> }\n * ```\n *\n * Like {@link defineToolkit}, it has **no runtime implementation**: a\n * `\"use generative\"` compiler (e.g. `@assistant-ui/next` or `@assistant-ui/vite`)\n * detects `execute: hitl()`, drops it, and stamps the tool `type: \"human\"`.\n * Reaching it at runtime means the module wasn't compiled (used outside a\n * `\"use generative\"` file), so it throws.\n */\nexport function hitl(): never {\n throw new Error(\n \"[assistant-ui] hitl() has no runtime implementation — it marks a \" +\n \"human-in-the-loop tool and is stripped at build time by the \" +\n \"use-generative compiler. Reaching it means this module was not compiled \" +\n '(e.g. hitl() used outside a \"use generative\" file).',\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAcA,SAAgB,OAAc;CAC5B,MAAM,IAAI,MACR,4PAIF;AACF"}
1
+ {"version":3,"file":"hitl.js","names":[],"sources":["../../../src/react/model-context/hitl.ts"],"sourcesContent":["/**\n * Marks a tool as **human-in-the-loop**: the agent pauses and the UI (`render`)\n * supplies the result instead of code. Use it as the tool's `execute`:\n *\n * ```tsx\n * confirm: { execute: hitlTool(), render: (props) => <Confirm {...props} /> }\n * ```\n *\n * Like {@link defineToolkit}, it has **no runtime implementation**: a\n * `\"use generative\"` compiler (e.g. `@assistant-ui/next` or `@assistant-ui/vite`)\n * detects `execute: hitlTool()`, drops it, and stamps the tool `type: \"human\"`.\n * Reaching it at runtime means the module wasn't compiled (used outside a\n * `\"use generative\"` file), so it throws.\n */\nexport function hitlTool(): never {\n throw new Error(\n \"[assistant-ui] hitlTool() has no runtime implementation — it marks a \" +\n \"human-in-the-loop tool and is stripped at build time by the \" +\n \"use-generative compiler. Reaching it means this module was not compiled \" +\n '(e.g. hitlTool() used outside a \"use generative\" file).',\n );\n}\n\n/**\n * @deprecated Use {@link hitlTool}.\n */\nexport const hitl = hitlTool;\n"],"mappings":";;;;;;;;;;;;;;;AAcA,SAAgB,WAAkB;CAChC,MAAM,IAAI,MACR,oQAIF;AACF;;;;AAKA,MAAa,OAAO"}
@@ -7,6 +7,10 @@ import { FC } from "react";
7
7
  *
8
8
  * Rendering the component registers its tool for the lifetime of that render
9
9
  * subtree.
10
+ *
11
+ * @deprecated Use a toolkit with `Tools({ toolkit })` and register it via
12
+ * `useAui({ tools: Tools({ toolkit }) })` instead. See
13
+ * https://assistant-ui.com/docs/migrations/toolkit-tools.
10
14
  */
11
15
  type AssistantTool = FC & {
12
16
  /** Tool definition registered by this component. */unstable_tool: AssistantToolProps<any, any>;
@@ -18,6 +22,10 @@ type AssistantTool = FC & {
18
22
  * rather than calling {@link useAssistantTool} directly.
19
23
  *
20
24
  * @param tool - Tool definition and name to register.
25
+ *
26
+ * @deprecated Use a toolkit with `Tools({ toolkit })` and register it via
27
+ * `useAui({ tools: Tools({ toolkit }) })` instead. See
28
+ * https://assistant-ui.com/docs/migrations/toolkit-tools.
21
29
  */
22
30
  declare const makeAssistantTool: <TArgs extends Record<string, unknown>, TResult>(tool: AssistantToolProps<TArgs, TResult>) => AssistantTool;
23
31
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"makeAssistantTool.d.ts","names":[],"sources":["../../../src/react/model-context/makeAssistantTool.ts"],"mappings":";;;;;;AASA;;;;KAAY,aAAA,GAAgB,EAAA;EAE1B,oDAAA,aAAA,EAAe,kBAAkB;AAAA;AAAA;AAWnC;;;;;;;AAXmC,cAWtB,iBAAA,iBACG,MAAA,4BAGd,IAAA,EAAM,kBAAA,CAAmB,KAAA,EAAO,OAAA,MAAQ,aAAA"}
1
+ {"version":3,"file":"makeAssistantTool.d.ts","names":[],"sources":["../../../src/react/model-context/makeAssistantTool.ts"],"mappings":";;;;;;AAaA;;;;;;;;KAAY,aAAA,GAAgB,EAAA;EAiBf,oDAfX,aAAA,EAAe,kBAAkB;AAAA;;;;;;;;;;;;;cAetB,iBAAA,iBACG,MAAA,4BAGd,IAAA,EAAM,kBAAA,CAAmB,KAAA,EAAO,OAAA,MAAQ,aAAA"}
@@ -7,6 +7,10 @@ import { useAssistantTool } from "./useAssistantTool.js";
7
7
  * rather than calling {@link useAssistantTool} directly.
8
8
  *
9
9
  * @param tool - Tool definition and name to register.
10
+ *
11
+ * @deprecated Use a toolkit with `Tools({ toolkit })` and register it via
12
+ * `useAui({ tools: Tools({ toolkit }) })` instead. See
13
+ * https://assistant-ui.com/docs/migrations/toolkit-tools.
10
14
  */
11
15
  const makeAssistantTool = (tool) => {
12
16
  const Tool = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"makeAssistantTool.js","names":[],"sources":["../../../src/react/model-context/makeAssistantTool.ts"],"sourcesContent":["import type { FC } from \"react\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\n/**\n * Component returned by {@link makeAssistantTool}.\n *\n * Rendering the component registers its tool for the lifetime of that render\n * subtree.\n */\nexport type AssistantTool = FC & {\n /** Tool definition registered by this component. */\n unstable_tool: AssistantToolProps<any, any>;\n};\n\n/**\n * Creates a React component that registers an assistant tool when rendered.\n *\n * Use this when exporting reusable tool modules that can be included in JSX\n * rather than calling {@link useAssistantTool} directly.\n *\n * @param tool - Tool definition and name to register.\n */\nexport const makeAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool: AssistantTool = () => {\n useAssistantTool(tool);\n return null;\n };\n Tool.unstable_tool = tool;\n return Tool;\n};\n"],"mappings":";;;;;;;;;;AAsBA,MAAa,qBAIX,SACG;CACH,MAAM,aAA4B;EAChC,iBAAiB,IAAI;EACrB,OAAO;CACT;CACA,KAAK,gBAAgB;CACrB,OAAO;AACT"}
1
+ {"version":3,"file":"makeAssistantTool.js","names":[],"sources":["../../../src/react/model-context/makeAssistantTool.ts"],"sourcesContent":["import type { FC } from \"react\";\nimport { type AssistantToolProps, useAssistantTool } from \"./useAssistantTool\";\n\n/**\n * Component returned by {@link makeAssistantTool}.\n *\n * Rendering the component registers its tool for the lifetime of that render\n * subtree.\n *\n * @deprecated Use a toolkit with `Tools({ toolkit })` and register it via\n * `useAui({ tools: Tools({ toolkit }) })` instead. See\n * https://assistant-ui.com/docs/migrations/toolkit-tools.\n */\nexport type AssistantTool = FC & {\n /** Tool definition registered by this component. */\n unstable_tool: AssistantToolProps<any, any>;\n};\n\n/**\n * Creates a React component that registers an assistant tool when rendered.\n *\n * Use this when exporting reusable tool modules that can be included in JSX\n * rather than calling {@link useAssistantTool} directly.\n *\n * @param tool - Tool definition and name to register.\n *\n * @deprecated Use a toolkit with `Tools({ toolkit })` and register it via\n * `useAui({ tools: Tools({ toolkit }) })` instead. See\n * https://assistant-ui.com/docs/migrations/toolkit-tools.\n */\nexport const makeAssistantTool = <\n TArgs extends Record<string, unknown>,\n TResult,\n>(\n tool: AssistantToolProps<TArgs, TResult>,\n) => {\n const Tool: AssistantTool = () => {\n useAssistantTool(tool);\n return null;\n };\n Tool.unstable_tool = tool;\n return Tool;\n};\n"],"mappings":";;;;;;;;;;;;;;AA8BA,MAAa,qBAIX,SACG;CACH,MAAM,aAA4B;EAChC,iBAAiB,IAAI;EACrB,OAAO;CACT;CACA,KAAK,gBAAgB;CACrB,OAAO;AACT"}
@@ -7,6 +7,10 @@ import { FC } from "react";
7
7
  *
8
8
  * Rendering the component registers a renderer for matching tool-call message
9
9
  * parts.
10
+ *
11
+ * @deprecated Put `render`/`renderText` on the matching toolkit entry, or use
12
+ * `MessagePrimitive.Parts` inline tool render overrides for per-message UI.
13
+ * See https://assistant-ui.com/docs/migrations/toolkit-tools.
10
14
  */
11
15
  type AssistantToolUI = FC & {
12
16
  /** Tool renderer registered by this component. */unstable_tool: AssistantToolUIProps<any, any>;
@@ -18,6 +22,10 @@ type AssistantToolUI = FC & {
18
22
  * are registered elsewhere.
19
23
  *
20
24
  * @param tool - Tool renderer registration.
25
+ *
26
+ * @deprecated Put `render`/`renderText` on the matching toolkit entry, or use
27
+ * `MessagePrimitive.Parts` inline tool render overrides for per-message UI.
28
+ * See https://assistant-ui.com/docs/migrations/toolkit-tools.
21
29
  */
22
30
  declare const makeAssistantToolUI: <TArgs, TResult>(tool: AssistantToolUIProps<TArgs, TResult>) => AssistantToolUI;
23
31
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"makeAssistantToolUI.d.ts","names":[],"sources":["../../../src/react/model-context/makeAssistantToolUI.ts"],"mappings":";;;;;;AAYA;;;;KAAY,eAAA,GAAkB,EAAA;EAE5B,kDAAA,aAAA,EAAe,oBAAoB;AAAA;AAAA;AAWrC;;;;;;;AAXqC,cAWxB,mBAAA,mBACX,IAAA,EAAM,oBAAA,CAAqB,KAAA,EAAO,OAAA,MAAQ,eAAA"}
1
+ {"version":3,"file":"makeAssistantToolUI.d.ts","names":[],"sources":["../../../src/react/model-context/makeAssistantToolUI.ts"],"mappings":";;;;;;AAgBA;;;;;;;;KAAY,eAAA,GAAkB,EAAA;EAiBjB,kDAfX,aAAA,EAAe,oBAAoB;AAAA;;;;;;;;;;;;;cAexB,mBAAA,mBACX,IAAA,EAAM,oBAAA,CAAqB,KAAA,EAAO,OAAA,MAAQ,eAAA"}
@@ -7,6 +7,10 @@ import { useAssistantToolUI } from "./useAssistantToolUI.js";
7
7
  * are registered elsewhere.
8
8
  *
9
9
  * @param tool - Tool renderer registration.
10
+ *
11
+ * @deprecated Put `render`/`renderText` on the matching toolkit entry, or use
12
+ * `MessagePrimitive.Parts` inline tool render overrides for per-message UI.
13
+ * See https://assistant-ui.com/docs/migrations/toolkit-tools.
10
14
  */
11
15
  const makeAssistantToolUI = (tool) => {
12
16
  const ToolUI = () => {