@assistant-ui/core 0.2.23 → 0.3.0

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 (193) hide show
  1. package/dist/react/adapters/LocalStorageThreadListAdapter.js +2 -2
  2. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  3. package/dist/react/client/Tools.d.ts.map +1 -1
  4. package/dist/react/client/Tools.js +40 -55
  5. package/dist/react/client/Tools.js.map +1 -1
  6. package/dist/react/interactables-legacy/useAssistantInteractable.js +1 -1
  7. package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
  8. package/dist/react/interactables-legacy/useInteractableState.js +3 -3
  9. package/dist/react/interactables-legacy/useInteractableState.js.map +1 -1
  10. package/dist/react/model-context/useAssistantContext.js +1 -1
  11. package/dist/react/model-context/useAssistantContext.js.map +1 -1
  12. package/dist/react/model-context/useAssistantDataUI.js +1 -1
  13. package/dist/react/model-context/useAssistantDataUI.js.map +1 -1
  14. package/dist/react/model-context/useAssistantInstructions.js +1 -1
  15. package/dist/react/model-context/useAssistantInstructions.js.map +1 -1
  16. package/dist/react/model-context/useAssistantTool.js +29 -25
  17. package/dist/react/model-context/useAssistantTool.js.map +1 -1
  18. package/dist/react/model-context/useAssistantToolUI.js +1 -1
  19. package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
  20. package/dist/react/model-context/useAuiToolOverrides.js +1 -1
  21. package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
  22. package/dist/react/model-context/useInteractable.js +1 -1
  23. package/dist/react/model-context/useInteractable.js.map +1 -1
  24. package/dist/react/model-context/useInteractableState.js +2 -2
  25. package/dist/react/model-context/useInteractableState.js.map +1 -1
  26. package/dist/react/primitive-hooks/useActionBarCopy.js +3 -3
  27. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  28. package/dist/react/primitive-hooks/useActionBarEdit.js +1 -1
  29. package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
  30. package/dist/react/primitive-hooks/useActionBarFeedback.js +2 -2
  31. package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -1
  32. package/dist/react/primitive-hooks/useActionBarReload.js +1 -1
  33. package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
  34. package/dist/react/primitive-hooks/useActionBarSpeak.js +1 -1
  35. package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -1
  36. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +1 -1
  37. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -1
  38. package/dist/react/primitive-hooks/useBranchPickerNext.js +1 -1
  39. package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
  40. package/dist/react/primitive-hooks/useBranchPickerPrevious.js +1 -1
  41. package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
  42. package/dist/react/primitive-hooks/useComposerAddAttachment.js +1 -1
  43. package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -1
  44. package/dist/react/primitive-hooks/useComposerCancel.js +1 -1
  45. package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
  46. package/dist/react/primitive-hooks/useComposerDictate.js +1 -1
  47. package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -1
  48. package/dist/react/primitive-hooks/useComposerSend.js +1 -1
  49. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
  50. package/dist/react/primitive-hooks/useEditComposerCancel.js +1 -1
  51. package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -1
  52. package/dist/react/primitive-hooks/useEditComposerSend.js +1 -1
  53. package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -1
  54. package/dist/react/primitive-hooks/useMessageBranching.js +2 -2
  55. package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -1
  56. package/dist/react/primitive-hooks/useMessageReload.js +1 -1
  57. package/dist/react/primitive-hooks/useMessageReload.js.map +1 -1
  58. package/dist/react/primitive-hooks/useSuggestionTrigger.js +7 -7
  59. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  60. package/dist/react/primitive-hooks/useThreadListItemArchive.js +1 -1
  61. package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -1
  62. package/dist/react/primitive-hooks/useThreadListItemDelete.js +1 -1
  63. package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -1
  64. package/dist/react/primitive-hooks/useThreadListItemTrigger.js +1 -1
  65. package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -1
  66. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +1 -1
  67. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -1
  68. package/dist/react/primitive-hooks/useThreadListLoadMore.js +1 -1
  69. package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
  70. package/dist/react/primitive-hooks/useThreadListNew.js +1 -1
  71. package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -1
  72. package/dist/react/primitive-hooks/useVoice.js +5 -13
  73. package/dist/react/primitive-hooks/useVoice.js.map +1 -1
  74. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
  75. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  76. package/dist/react/primitives/composer/ComposerAttachments.js +1 -1
  77. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  78. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  79. package/dist/react/primitives/composer/ComposerQueue.js +1 -1
  80. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
  81. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  82. package/dist/react/primitives/message/MessageAttachments.js +1 -1
  83. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  84. package/dist/react/primitives/message/MessageParts.js +84 -122
  85. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  86. package/dist/react/primitives/thread/ThreadMessages.js +1 -1
  87. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  88. package/dist/react/primitives/thread/ThreadSuggestions.js +1 -1
  89. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  90. package/dist/react/primitives/threadList/ThreadListItems.js +1 -1
  91. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  92. package/dist/react/providers/AttachmentByIndexProvider.js +2 -2
  93. package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
  94. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +1 -1
  95. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
  96. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  97. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +30 -18
  98. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  99. package/dist/react/providers/MessageByIdProvider.js +2 -2
  100. package/dist/react/providers/MessageByIdProvider.js.map +1 -1
  101. package/dist/react/providers/MessageByIndexProvider.js +2 -2
  102. package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
  103. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  104. package/dist/react/providers/PartByIndexProvider.js +30 -18
  105. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  106. package/dist/react/providers/QueueItemByIndexProvider.js +1 -1
  107. package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
  108. package/dist/react/providers/ReadonlyThreadProvider.js +1 -1
  109. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  110. package/dist/react/providers/SuggestionByIndexProvider.js +1 -1
  111. package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
  112. package/dist/react/providers/ThreadListItemByIndexProvider.js +1 -1
  113. package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
  114. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +3 -3
  115. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  116. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  117. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +32 -20
  118. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  119. package/dist/react/runtimes/createRuntimeExtras.js +1 -1
  120. package/dist/react/runtimes/createRuntimeExtras.js.map +1 -1
  121. package/dist/react/types/scopes/tools.d.ts +0 -6
  122. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  123. package/dist/react/utils/groupParts.d.ts +1 -3
  124. package/dist/react/utils/groupParts.d.ts.map +1 -1
  125. package/dist/react/utils/groupParts.js +1 -3
  126. package/dist/react/utils/groupParts.js.map +1 -1
  127. package/dist/store/clients/runtime-adapter.js +3 -3
  128. package/dist/store/clients/runtime-adapter.js.map +1 -1
  129. package/package.json +5 -5
  130. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +2 -2
  131. package/src/react/client/Tools.ts +0 -7
  132. package/src/react/interactables-legacy/useAssistantInteractable.ts +1 -1
  133. package/src/react/interactables-legacy/useInteractableState.ts +3 -3
  134. package/src/react/model-context/useAssistantContext.ts +1 -1
  135. package/src/react/model-context/useAssistantDataUI.ts +1 -1
  136. package/src/react/model-context/useAssistantInstructions.ts +1 -1
  137. package/src/react/model-context/useAssistantTool.ts +2 -2
  138. package/src/react/model-context/useAssistantToolUI.ts +1 -1
  139. package/src/react/model-context/useAuiToolOverrides.ts +1 -1
  140. package/src/react/model-context/useInteractable.ts +1 -1
  141. package/src/react/model-context/useInteractableState.ts +2 -2
  142. package/src/react/primitive-hooks/useActionBarCopy.test.ts +2 -2
  143. package/src/react/primitive-hooks/useActionBarCopy.ts +3 -3
  144. package/src/react/primitive-hooks/useActionBarEdit.ts +1 -1
  145. package/src/react/primitive-hooks/useActionBarFeedback.ts +2 -2
  146. package/src/react/primitive-hooks/useActionBarReload.ts +1 -1
  147. package/src/react/primitive-hooks/useActionBarSpeak.ts +1 -1
  148. package/src/react/primitive-hooks/useActionBarStopSpeaking.ts +1 -1
  149. package/src/react/primitive-hooks/useBranchPickerNext.ts +1 -1
  150. package/src/react/primitive-hooks/useBranchPickerPrevious.ts +1 -1
  151. package/src/react/primitive-hooks/useComposerAddAttachment.ts +1 -1
  152. package/src/react/primitive-hooks/useComposerCancel.ts +1 -1
  153. package/src/react/primitive-hooks/useComposerDictate.ts +1 -1
  154. package/src/react/primitive-hooks/useComposerSend.ts +1 -1
  155. package/src/react/primitive-hooks/useEditComposerCancel.ts +1 -1
  156. package/src/react/primitive-hooks/useEditComposerSend.ts +1 -1
  157. package/src/react/primitive-hooks/useMessageBranching.ts +2 -2
  158. package/src/react/primitive-hooks/useMessageReload.ts +1 -1
  159. package/src/react/primitive-hooks/useSuggestionTrigger.ts +9 -9
  160. package/src/react/primitive-hooks/useThreadListItemArchive.ts +1 -1
  161. package/src/react/primitive-hooks/useThreadListItemDelete.ts +1 -1
  162. package/src/react/primitive-hooks/useThreadListItemTrigger.ts +1 -1
  163. package/src/react/primitive-hooks/useThreadListItemUnarchive.ts +1 -1
  164. package/src/react/primitive-hooks/useThreadListLoadMore.ts +1 -1
  165. package/src/react/primitive-hooks/useThreadListNew.ts +1 -1
  166. package/src/react/primitive-hooks/useVoice.ts +5 -5
  167. package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +1 -1
  168. package/src/react/primitives/composer/ComposerAttachments.tsx +1 -1
  169. package/src/react/primitives/composer/ComposerQueue.tsx +1 -3
  170. package/src/react/primitives/message/MessageAttachments.tsx +1 -3
  171. package/src/react/primitives/message/MessageParts.tsx +9 -9
  172. package/src/react/primitives/thread/ThreadMessages.tsx +1 -1
  173. package/src/react/primitives/thread/ThreadSuggestions.tsx +1 -1
  174. package/src/react/primitives/threadList/ThreadListItems.tsx +1 -1
  175. package/src/react/providers/AttachmentByIndexProvider.tsx +2 -2
  176. package/src/react/providers/ChainOfThoughtByIndicesProvider.tsx +1 -1
  177. package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +2 -19
  178. package/src/react/providers/MessageByIdProvider.tsx +2 -2
  179. package/src/react/providers/MessageByIndexProvider.tsx +2 -2
  180. package/src/react/providers/PartByIndexProvider.tsx +2 -16
  181. package/src/react/providers/QueueItemByIndexProvider.tsx +1 -1
  182. package/src/react/providers/ReadonlyThreadProvider.tsx +1 -1
  183. package/src/react/providers/SuggestionByIndexProvider.tsx +1 -1
  184. package/src/react/providers/ThreadListItemByIndexProvider.tsx +1 -1
  185. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +3 -3
  186. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +32 -7
  187. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +26 -16
  188. package/src/react/runtimes/createRuntimeExtras.test.ts +1 -1
  189. package/src/react/runtimes/createRuntimeExtras.ts +1 -1
  190. package/src/react/types/scopes/tools.ts +0 -6
  191. package/src/react/utils/groupParts.ts +1 -7
  192. package/src/store/clients/runtime-adapter.ts +3 -3
  193. package/src/tests/groupParts.test.ts +3 -48
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/core",
3
- "version": "0.2.23",
3
+ "version": "0.3.0",
4
4
  "description": "Framework-agnostic core runtime for assistant-ui",
5
5
  "keywords": [
6
6
  "assistant",
@@ -59,14 +59,14 @@
59
59
  ],
60
60
  "sideEffects": false,
61
61
  "dependencies": {
62
- "assistant-stream": "^0.3.28",
62
+ "assistant-stream": "^0.3.29",
63
63
  "nanoid": "^6.0.0"
64
64
  },
65
65
  "optionalDevDependencies": {
66
66
  "@assistant-ui/x-generative-compiler": ">=0.0.3"
67
67
  },
68
68
  "peerDependencies": {
69
- "@assistant-ui/store": "^0.2.13",
69
+ "@assistant-ui/store": "^0.3.0",
70
70
  "@assistant-ui/tap": "^0.9.0",
71
71
  "@types/react": "*",
72
72
  "react": "^18 || ^19",
@@ -95,8 +95,8 @@
95
95
  "react-dom": "^19.2.8",
96
96
  "vitest": "^4.1.10",
97
97
  "zustand": "^5.0.14",
98
- "@assistant-ui/store": "0.2.22",
99
- "@assistant-ui/tap": "0.9.6",
98
+ "@assistant-ui/store": "0.3.0",
99
+ "@assistant-ui/tap": "0.9.7",
100
100
  "@assistant-ui/vite": "0.0.11",
101
101
  "@assistant-ui/x-buildutils": "0.0.20",
102
102
  "assistant-cloud": "0.1.37"
@@ -297,7 +297,7 @@ class AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {
297
297
  }
298
298
 
299
299
  async load(): Promise<ExportedMessageRepository> {
300
- const remoteId = this.aui.threadListItem().getState().remoteId;
300
+ const remoteId = this.aui.threadListItem.getState().remoteId;
301
301
  if (!remoteId) return { messages: [] };
302
302
 
303
303
  const raw = await this.storage.getItem(this._messagesKey(remoteId));
@@ -305,7 +305,7 @@ class AsyncStorageHistoryAdapter implements ThreadHistoryAdapter {
305
305
  }
306
306
 
307
307
  async append(item: ExportedMessageRepositoryItem): Promise<void> {
308
- const { remoteId } = await this.aui.threadListItem().initialize();
308
+ const { remoteId } = await this.aui.threadListItem.initialize();
309
309
 
310
310
  const key = this._messagesKey(remoteId);
311
311
  await this.mutationQueue.run(key, async () => {
@@ -48,13 +48,6 @@ const useTools = ({
48
48
  (): ToolsState => ({
49
49
  toolUIs,
50
50
  mcpApp: mcpAppOutput,
51
- // Deprecated component-only view, derived from `toolUIs`. Removed in v0.15.
52
- tools: Object.fromEntries(
53
- Object.entries(toolUIs).map(([name, regs]) => [
54
- name,
55
- regs.map((r) => r.render),
56
- ]),
57
- ),
58
51
  }),
59
52
  [toolUIs, mcpAppOutput],
60
53
  );
@@ -42,7 +42,7 @@ export const useAssistantInteractable = (
42
42
  initialStateRef.current = config.initialState;
43
43
 
44
44
  useEffect(() => {
45
- return aui.interactables().register({
45
+ return aui.interactables.register({
46
46
  id,
47
47
  name,
48
48
  description: config.description,
@@ -35,7 +35,7 @@ export const useInteractableState = <TState>(
35
35
 
36
36
  const setState = useCallback(
37
37
  (updater: StateUpdater<TState>) => {
38
- aui.interactables().setState(id, (prev) => {
38
+ aui.interactables.setState(id, (prev) => {
39
39
  if (typeof updater === "function") {
40
40
  return (updater as (prev: TState) => TState)(prev as TState);
41
41
  }
@@ -47,12 +47,12 @@ export const useInteractableState = <TState>(
47
47
 
48
48
  const setSelected = useCallback(
49
49
  (selected: boolean) => {
50
- aui.interactables().setSelected(id, selected);
50
+ aui.interactables.setSelected(id, selected);
51
51
  },
52
52
  [aui, id],
53
53
  );
54
54
 
55
- const flush = useCallback(() => aui.interactables().flush(), [aui]);
55
+ const flush = useCallback(() => aui.interactables.flush(), [aui]);
56
56
 
57
57
  return [
58
58
  state,
@@ -13,7 +13,7 @@ export const useAssistantContext = (config: AssistantContextConfig) => {
13
13
  useEffect(() => {
14
14
  if (disabled) return;
15
15
 
16
- return aui.modelContext().register({
16
+ return aui.modelContext.register({
17
17
  getModelContext: () => ({
18
18
  system: getContextRef.current(),
19
19
  }),
@@ -20,6 +20,6 @@ export const useAssistantDataUI = (dataUI: AssistantDataUIProps | null) => {
20
20
  const aui = useAui();
21
21
  useEffect(() => {
22
22
  if (!dataUI?.name || !dataUI?.render) return undefined;
23
- return aui.dataRenderers().setDataUI(dataUI.name, dataUI.render);
23
+ return aui.dataRenderers.setDataUI(dataUI.name, dataUI.render);
24
24
  }, [aui, dataUI?.name, dataUI?.render]);
25
25
  };
@@ -23,7 +23,7 @@ export const useAssistantInstructions = (
23
23
  const config = {
24
24
  system: instruction,
25
25
  };
26
- return aui.modelContext().register({
26
+ return aui.modelContext.register({
27
27
  getModelContext: () => config,
28
28
  });
29
29
  }, [aui, instruction, disabled]);
@@ -77,7 +77,7 @@ export const useAssistantTool = <
77
77
 
78
78
  useEffect(() => {
79
79
  if (!render) return undefined;
80
- return aui.tools().setToolUI(tool.toolName, render, { standalone });
80
+ return aui.tools.setToolUI(tool.toolName, render, { standalone });
81
81
  }, [aui, tool.toolName, render, standalone]);
82
82
 
83
83
  useEffect(() => {
@@ -89,7 +89,7 @@ export const useAssistantTool = <
89
89
  [toolName]: rest,
90
90
  },
91
91
  };
92
- return aui.modelContext().register({
92
+ return aui.modelContext.register({
93
93
  getModelContext: () => context,
94
94
  });
95
95
  }, [aui, tool]);
@@ -41,6 +41,6 @@ export const useAssistantToolUI = (
41
41
  const standalone = tool?.display === "standalone";
42
42
  useEffect(() => {
43
43
  if (!tool?.toolName || !tool?.render) return undefined;
44
- return aui.tools().setToolUI(tool.toolName, tool.render, { standalone });
44
+ return aui.tools.setToolUI(tool.toolName, tool.render, { standalone });
45
45
  }, [aui, tool?.toolName, tool?.render, standalone]);
46
46
  };
@@ -28,7 +28,7 @@ export function useAuiToolOverrides(overrides: AuiToolOverrides): void {
28
28
  overridesRef.current = overrides;
29
29
 
30
30
  useEffect(() => {
31
- return aui.modelContext().register({
31
+ return aui.modelContext.register({
32
32
  getModelContext: () => ({
33
33
  priority: 1000,
34
34
  tools: overridesRef.current as Record<string, Tool<any, any>>,
@@ -123,7 +123,7 @@ const useInteractable = <TSchema extends Unstable_InteractableStateSchema>(
123
123
  const initialStateRef = useRef(config.initialState);
124
124
  initialStateRef.current = config.initialState;
125
125
 
126
- const interactables = useAuiState(() => aui.unstable_interactables());
126
+ const interactables = useAuiState(() => aui.unstable_interactables);
127
127
 
128
128
  useEffect(() => {
129
129
  return interactables.register({
@@ -28,7 +28,7 @@ const useInteractableState = <TState>(
28
28
 
29
29
  const setState = useCallback(
30
30
  (updater: StateUpdater<TState>) => {
31
- aui.unstable_interactables().setState(id, (prev) => {
31
+ aui.unstable_interactables.setState(id, (prev) => {
32
32
  if (typeof updater === "function") {
33
33
  return (updater as (prev: TState) => TState)(prev as TState);
34
34
  }
@@ -38,7 +38,7 @@ const useInteractableState = <TState>(
38
38
  [aui, id],
39
39
  );
40
40
 
41
- const flush = useCallback(() => aui.unstable_interactables().flush(), [aui]);
41
+ const flush = useCallback(() => aui.unstable_interactables.flush(), [aui]);
42
42
 
43
43
  return [
44
44
  state,
@@ -18,10 +18,10 @@ const mocks = vi.hoisted(() => {
18
18
  },
19
19
  },
20
20
  aui: {
21
- message: () => ({
21
+ message: {
22
22
  getCopyText: () => "Hello",
23
23
  setIsCopied,
24
- }),
24
+ },
25
25
  },
26
26
  };
27
27
  });
@@ -25,15 +25,15 @@ export const useActionBarCopy = ({
25
25
  const copy = useCallback(() => {
26
26
  if (!copyToClipboard) return;
27
27
 
28
- const valueToCopy = isEditing ? composerValue : aui.message().getCopyText();
28
+ const valueToCopy = isEditing ? composerValue : aui.message.getCopyText();
29
29
  if (!valueToCopy) return;
30
30
 
31
31
  // The rejection handler swallows clipboard write failures (permission denied,
32
32
  // API unavailable) so they don't surface as unhandled promise rejections.
33
33
  Promise.resolve(copyToClipboard(valueToCopy)).then(
34
34
  () => {
35
- aui.message().setIsCopied(true);
36
- setTimeout(() => aui.message().setIsCopied(false), copiedDuration);
35
+ aui.message.setIsCopied(true);
36
+ setTimeout(() => aui.message.setIsCopied(false), copiedDuration);
37
37
  },
38
38
  () => {},
39
39
  );
@@ -6,7 +6,7 @@ export const useActionBarEdit = () => {
6
6
  const disabled = useAuiState((s) => s.composer.isEditing);
7
7
 
8
8
  const edit = useCallback(() => {
9
- aui.composer().beginEdit();
9
+ aui.composer.beginEdit();
10
10
  }, [aui]);
11
11
 
12
12
  return { edit, disabled };
@@ -8,7 +8,7 @@ export const useActionBarFeedbackPositive = () => {
8
8
  );
9
9
 
10
10
  const submit = useCallback(() => {
11
- aui.message().submitFeedback({ type: "positive" });
11
+ aui.message.submitFeedback({ type: "positive" });
12
12
  }, [aui]);
13
13
 
14
14
  return { submit, isSubmitted };
@@ -21,7 +21,7 @@ export const useActionBarFeedbackNegative = () => {
21
21
  );
22
22
 
23
23
  const submit = useCallback(() => {
24
- aui.message().submitFeedback({ type: "negative" });
24
+ aui.message.submitFeedback({ type: "negative" });
25
25
  }, [aui]);
26
26
 
27
27
  return { submit, isSubmitted };
@@ -11,7 +11,7 @@ export const useActionBarReload = () => {
11
11
  );
12
12
 
13
13
  const reload = useCallback(() => {
14
- aui.message().reload();
14
+ aui.message.reload();
15
15
  }, [aui]);
16
16
 
17
17
  return { reload, disabled };
@@ -13,7 +13,7 @@ export const useActionBarSpeak = () => {
13
13
  });
14
14
 
15
15
  const speak = useCallback(async () => {
16
- aui.message().speak();
16
+ aui.message.speak();
17
17
  }, [aui]);
18
18
 
19
19
  return { speak, disabled };
@@ -6,7 +6,7 @@ export const useActionBarStopSpeaking = () => {
6
6
  const disabled = useAuiState((s) => s.message.speech == null);
7
7
 
8
8
  const stopSpeaking = useCallback(() => {
9
- aui.message().stopSpeaking();
9
+ aui.message.stopSpeaking();
10
10
  }, [aui]);
11
11
 
12
12
  return { stopSpeaking, disabled };
@@ -12,7 +12,7 @@ export const useBranchPickerNext = () => {
12
12
  });
13
13
 
14
14
  const next = useCallback(() => {
15
- aui.message().switchToBranch({ position: "next" });
15
+ aui.message.switchToBranch({ position: "next" });
16
16
  }, [aui]);
17
17
 
18
18
  return { next, disabled };
@@ -12,7 +12,7 @@ export const useBranchPickerPrevious = () => {
12
12
  });
13
13
 
14
14
  const previous = useCallback(() => {
15
- aui.message().switchToBranch({ position: "previous" });
15
+ aui.message.switchToBranch({ position: "previous" });
16
16
  }, [aui]);
17
17
 
18
18
  return { previous, disabled };
@@ -8,7 +8,7 @@ export const useComposerAddAttachment = () => {
8
8
 
9
9
  const addAttachment = useCallback(
10
10
  (file: File | CreateAttachment) => {
11
- return aui.composer().addAttachment(file);
11
+ return aui.composer.addAttachment(file);
12
12
  },
13
13
  [aui],
14
14
  );
@@ -6,7 +6,7 @@ export const useComposerCancel = () => {
6
6
  const disabled = useAuiState((s) => !s.composer.canCancel);
7
7
 
8
8
  const cancel = useCallback(() => {
9
- aui.composer().cancel();
9
+ aui.composer.cancel();
10
10
  }, [aui]);
11
11
 
12
12
  return { cancel, disabled };
@@ -11,7 +11,7 @@ export const useComposerDictate = () => {
11
11
  );
12
12
 
13
13
  const startDictation = useCallback(() => {
14
- aui.composer().startDictation();
14
+ aui.composer.startDictation();
15
15
  }, [aui]);
16
16
 
17
17
  return { startDictation, disabled };
@@ -12,7 +12,7 @@ export const useComposerSend = () => {
12
12
 
13
13
  const send = useCallback(
14
14
  (opts?: ComposerSendOptions) => {
15
- aui.composer().send(opts);
15
+ aui.composer.send(opts);
16
16
  },
17
17
  [aui],
18
18
  );
@@ -5,7 +5,7 @@ export const useEditComposerCancel = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const cancel = useCallback(() => {
8
- aui.composer().cancel();
8
+ aui.composer.cancel();
9
9
  }, [aui]);
10
10
 
11
11
  return { cancel };
@@ -6,7 +6,7 @@ export const useEditComposerSend = () => {
6
6
  const disabled = useAuiState((s) => s.composer.isEmpty);
7
7
 
8
8
  const send = useCallback(() => {
9
- aui.composer().send();
9
+ aui.composer.send();
10
10
  }, [aui]);
11
11
 
12
12
  return { send, disabled };
@@ -7,11 +7,11 @@ export const useMessageBranching = () => {
7
7
  const branchCount = useAuiState((s) => s.message.branchCount);
8
8
 
9
9
  const goToPrev = useCallback(() => {
10
- aui.message().switchToBranch({ position: "previous" });
10
+ aui.message.switchToBranch({ position: "previous" });
11
11
  }, [aui]);
12
12
 
13
13
  const goToNext = useCallback(() => {
14
- aui.message().switchToBranch({ position: "next" });
14
+ aui.message.switchToBranch({ position: "next" });
15
15
  }, [aui]);
16
16
 
17
17
  return { branchNumber, branchCount, goToPrev, goToNext };
@@ -6,7 +6,7 @@ export const useMessageReload = () => {
6
6
  const canReload = useAuiState((s) => s.message.role === "assistant");
7
7
 
8
8
  const reload = useCallback(() => {
9
- aui.message().reload();
9
+ aui.message.reload();
10
10
  }, [aui]);
11
11
 
12
12
  return { reload, canReload };
@@ -17,24 +17,24 @@ export const useSuggestionTrigger = ({
17
17
  const resolvedSend = send ?? false;
18
18
 
19
19
  const trigger = useCallback(() => {
20
- const isRunning = aui.thread().getState().isRunning;
20
+ const isRunning = aui.thread.getState().isRunning;
21
21
 
22
22
  if (resolvedSend && !isRunning) {
23
- aui.thread().append({
23
+ aui.thread.append({
24
24
  content: [{ type: "text", text: prompt }],
25
- runConfig: aui.composer().getState().runConfig,
25
+ runConfig: aui.composer.getState().runConfig,
26
26
  });
27
27
  if (clearComposer) {
28
- aui.composer().setText("");
28
+ aui.composer.setText("");
29
29
  }
30
30
  } else {
31
31
  if (clearComposer) {
32
- aui.composer().setText(prompt);
32
+ aui.composer.setText(prompt);
33
33
  } else {
34
- const currentText = aui.composer().getState().text;
35
- aui
36
- .composer()
37
- .setText(currentText.trim() ? `${currentText} ${prompt}` : prompt);
34
+ const currentText = aui.composer.getState().text;
35
+ aui.composer.setText(
36
+ currentText.trim() ? `${currentText} ${prompt}` : prompt,
37
+ );
38
38
  }
39
39
  }
40
40
  }, [aui, resolvedSend, clearComposer, prompt]);
@@ -5,7 +5,7 @@ export const useThreadListItemArchive = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const archive = useCallback(() => {
8
- aui.threadListItem().archive();
8
+ aui.threadListItem.archive();
9
9
  }, [aui]);
10
10
 
11
11
  return { archive };
@@ -5,7 +5,7 @@ export const useThreadListItemDelete = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const deleteThread = useCallback(() => {
8
- aui.threadListItem().delete();
8
+ aui.threadListItem.delete();
9
9
  }, [aui]);
10
10
 
11
11
  return { delete: deleteThread };
@@ -5,7 +5,7 @@ export const useThreadListItemTrigger = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const switchTo = useCallback(() => {
8
- aui.threadListItem().switchTo();
8
+ aui.threadListItem.switchTo();
9
9
  }, [aui]);
10
10
 
11
11
  return { switchTo };
@@ -5,7 +5,7 @@ export const useThreadListItemUnarchive = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const unarchive = useCallback(() => {
8
- aui.threadListItem().unarchive();
8
+ aui.threadListItem.unarchive();
9
9
  }, [aui]);
10
10
 
11
11
  return { unarchive };
@@ -8,7 +8,7 @@ export const useThreadListLoadMore = () => {
8
8
  );
9
9
 
10
10
  const loadMore = useCallback(() => {
11
- aui.threads().loadMore();
11
+ aui.threads.loadMore();
12
12
  }, [aui]);
13
13
 
14
14
  return { loadMore, disabled };
@@ -5,7 +5,7 @@ export const useThreadListNew = () => {
5
5
  const aui = useAui();
6
6
 
7
7
  const switchToNewThread = useCallback(() => {
8
- aui.threads().switchToNewThread();
8
+ aui.threads.switchToNewThread();
9
9
  }, [aui]);
10
10
 
11
11
  return { switchToNewThread };
@@ -10,7 +10,7 @@ const getServerVolume = () => 0;
10
10
 
11
11
  export const useVoiceVolume = (): number => {
12
12
  const aui = useAui();
13
- const thread = aui.thread();
13
+ const thread = aui.thread;
14
14
  return useSyncExternalStore(
15
15
  thread.subscribeVoiceVolume,
16
16
  thread.getVoiceVolume,
@@ -22,19 +22,19 @@ export const useVoiceControls = () => {
22
22
  const aui = useAui();
23
23
 
24
24
  const connect = useCallback(() => {
25
- aui.thread().connectVoice();
25
+ aui.thread.connectVoice();
26
26
  }, [aui]);
27
27
 
28
28
  const disconnect = useCallback(() => {
29
- aui.thread().disconnectVoice();
29
+ aui.thread.disconnectVoice();
30
30
  }, [aui]);
31
31
 
32
32
  const mute = useCallback(() => {
33
- aui.thread().muteVoice();
33
+ aui.thread.muteVoice();
34
34
  }, [aui]);
35
35
 
36
36
  const unmute = useCallback(() => {
37
- aui.thread().unmuteVoice();
37
+ aui.thread.unmuteVoice();
38
38
  }, [aui]);
39
39
 
40
40
  return { connect, disconnect, mute, unmute };
@@ -51,7 +51,7 @@ const ChainOfThoughtPrimitivePartsInner: FC<{
51
51
  Array.from({ length: partsLength }, (_, index) => (
52
52
  <ChainOfThoughtPartByIndexProvider key={index} index={index}>
53
53
  <RenderChildrenWithAccessor
54
- getItemState={(aui) => aui.part().getState()}
54
+ getItemState={(aui) => aui.part.getState()}
55
55
  >
56
56
  {(getItem) =>
57
57
  children({
@@ -99,7 +99,7 @@ const ComposerPrimitiveAttachmentsInner: FC<{
99
99
  <ComposerAttachmentByIndexProvider key={index} index={index}>
100
100
  <RenderChildrenWithAccessor
101
101
  getItemState={(aui) =>
102
- aui.composer().attachment({ index }).getState()
102
+ aui.composer.attachment({ index }).getState()
103
103
  }
104
104
  >
105
105
  {(getItem) =>
@@ -20,9 +20,7 @@ const ComposerPrimitiveQueueInner: FC<{
20
20
  Array.from({ length: queue }, (_, index) => (
21
21
  <QueueItemByIndexProvider key={index} index={index}>
22
22
  <RenderChildrenWithAccessor
23
- getItemState={(aui) =>
24
- aui.composer().queueItem({ index }).getState()
25
- }
23
+ getItemState={(aui) => aui.composer.queueItem({ index }).getState()}
26
24
  >
27
25
  {(getItem) =>
28
26
  children({
@@ -101,9 +101,7 @@ const MessagePrimitiveAttachmentsInner: FC<{
101
101
  Array.from({ length: attachmentsCount }, (_, index) => (
102
102
  <MessageAttachmentByIndexProvider key={index} index={index}>
103
103
  <RenderChildrenWithAccessor
104
- getItemState={(aui) =>
105
- aui.message().attachment({ index }).getState()
106
- }
104
+ getItemState={(aui) => aui.message.attachment({ index }).getState()}
107
105
  >
108
106
  {(getItem) =>
109
107
  children({
@@ -415,9 +415,9 @@ export const MessagePartComponent: FC<MessagePartComponentProps> = ({
415
415
 
416
416
  const type = part.type;
417
417
  if (type === "tool-call") {
418
- const addResult = aui.part().addToolResult;
419
- const resume = aui.part().resumeToolCall;
420
- const respondToApproval = aui.part().respondToToolApproval;
418
+ const addResult = aui.part.addToolResult;
419
+ const resume = aui.part.resumeToolCall;
420
+ const respondToApproval = aui.part.respondToToolApproval;
421
421
  if ("Override" in tools)
422
422
  return (
423
423
  <tools.Override
@@ -636,9 +636,9 @@ const RegisteredToolUI: FC = () => {
636
636
  return (
637
637
  <Render
638
638
  {...part}
639
- addResult={aui.part().addToolResult}
640
- resume={aui.part().resumeToolCall}
641
- respondToApproval={aui.part().respondToToolApproval}
639
+ addResult={aui.part.addToolResult}
640
+ resume={aui.part.resumeToolCall}
641
+ respondToApproval={aui.part.respondToToolApproval}
642
642
  />
643
643
  );
644
644
  };
@@ -743,16 +743,16 @@ const MessagePartChildrenInner: FC<
743
743
 
744
744
  return (
745
745
  <RenderChildrenWithAccessor
746
- getItemState={(client) => client.part().getState()}
746
+ getItemState={(client) => client.part.getState()}
747
747
  >
748
748
  {(getItem) =>
749
749
  children({
750
750
  get part() {
751
751
  const state = getItem();
752
752
  if (state.type === "tool-call") {
753
- const toolsState = aui.tools().getState();
753
+ const toolsState = aui.tools.getState();
754
754
  const hasUI = resolveToolRender(toolsState, state) !== null;
755
- const partMethods = aui.part();
755
+ const partMethods = aui.part;
756
756
  return {
757
757
  ...state,
758
758
  toolUI: hasUI ? <RegisteredToolUI /> : null,
@@ -247,7 +247,7 @@ const ThreadPrimitiveMessagesInner: FC<{
247
247
  return Array.from({ length: messagesLength }, (_, index) => (
248
248
  <MessageByIndexProvider key={index} index={index}>
249
249
  <RenderChildrenWithAccessor
250
- getItemState={(aui) => aui.thread().message({ index }).getState()}
250
+ getItemState={(aui) => aui.thread.message({ index }).getState()}
251
251
  >
252
252
  {(getItem) =>
253
253
  children({
@@ -77,7 +77,7 @@ const ThreadPrimitiveSuggestionsInner: FC<{
77
77
  <SuggestionByIndexProvider key={index} index={index}>
78
78
  <RenderChildrenWithAccessor
79
79
  getItemState={(aui) =>
80
- aui.suggestions().suggestion({ index }).getState()
80
+ aui.suggestions.suggestion({ index }).getState()
81
81
  }
82
82
  >
83
83
  {(getItem) =>