@assistant-ui/core 0.3.5 → 0.3.7

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 (207) hide show
  1. package/dist/index.d.ts +4 -4
  2. package/dist/index.js.map +1 -1
  3. package/dist/internal.js +1 -1
  4. package/dist/react/AssistantProvider.d.ts +3 -2
  5. package/dist/react/AssistantProvider.d.ts.map +1 -1
  6. package/dist/react/AssistantProvider.js +19 -26
  7. package/dist/react/AssistantProvider.js.map +1 -1
  8. package/dist/react/AssistantRuntimeProvider.d.ts +7 -2
  9. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  10. package/dist/react/AssistantRuntimeProvider.js +9 -7
  11. package/dist/react/AssistantRuntimeProvider.js.map +1 -1
  12. package/dist/react/RuntimeAdapter.js +1 -1
  13. package/dist/react/RuntimeAdapter.js.map +1 -1
  14. package/dist/react/client/Interactables.js +1 -1
  15. package/dist/react/client/Interactables.js.map +1 -1
  16. package/dist/react/client/Tools.d.ts +1 -1
  17. package/dist/react/client/Tools.js +1 -1
  18. package/dist/react/client/Tools.js.map +1 -1
  19. package/dist/react/index.d.ts +9 -9
  20. package/dist/react/index.js +4 -4
  21. package/dist/react/model-context/interactableTool.d.ts +1 -1
  22. package/dist/react/model-context/useAssistantTool.d.ts +1 -1
  23. package/dist/react/providers/AttachmentByIndexProvider.d.ts.map +1 -1
  24. package/dist/react/providers/AttachmentByIndexProvider.js +33 -39
  25. package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
  26. package/dist/react/providers/ChainOfThoughtByIndicesProvider.d.ts.map +1 -1
  27. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js +15 -20
  28. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
  29. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +17 -20
  30. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  31. package/dist/react/providers/MessageByIdProvider.js +28 -38
  32. package/dist/react/providers/MessageByIdProvider.js.map +1 -1
  33. package/dist/react/providers/MessageByIndexProvider.js +28 -38
  34. package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
  35. package/dist/react/providers/PartByIndexProvider.js +17 -20
  36. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  37. package/dist/react/providers/QueueItemByIndexProvider.js +21 -21
  38. package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
  39. package/dist/react/providers/ReadonlyThreadProvider.js +24 -32
  40. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  41. package/dist/react/providers/SuggestionByIndexProvider.js +17 -20
  42. package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
  43. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  44. package/dist/react/providers/TextMessagePartProvider.js +16 -19
  45. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  46. package/dist/react/providers/ThreadListItemByIndexProvider.js +17 -20
  47. package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
  48. package/dist/react/providers/ThreadListItemRuntimeProvider.js +15 -18
  49. package/dist/react/providers/ThreadListItemRuntimeProvider.js.map +1 -1
  50. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -3
  51. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  52. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -2
  53. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  54. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +3 -2
  55. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  56. package/dist/react/runtimes/createMessageConverter.d.ts +1 -1
  57. package/dist/react/runtimes/createRuntimeExtras.d.ts +4 -1
  58. package/dist/react/runtimes/createRuntimeExtras.d.ts.map +1 -1
  59. package/dist/react/runtimes/createRuntimeExtras.js +6 -17
  60. package/dist/react/runtimes/createRuntimeExtras.js.map +1 -1
  61. package/dist/react/runtimes/useLocalRuntime.d.ts +3 -1
  62. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  63. package/dist/react/runtimes/useLocalRuntime.js +4 -2
  64. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  65. package/dist/react/types/scopes/dataRenderers.d.ts +1 -1
  66. package/dist/react/types/scopes/interactables.d.ts +1 -1
  67. package/dist/react/types/scopes/tools.d.ts +1 -1
  68. package/dist/runtime/api/composer-runtime.d.ts +5 -1
  69. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  70. package/dist/runtime/api/composer-runtime.js +8 -1
  71. package/dist/runtime/api/composer-runtime.js.map +1 -1
  72. package/dist/runtime/api/message-runtime.js +1 -1
  73. package/dist/runtime/api/message-runtime.js.map +1 -1
  74. package/dist/runtime/api/thread-runtime.d.ts +4 -2
  75. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  76. package/dist/runtime/base/base-composer-runtime-core.d.ts +2 -1
  77. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  78. package/dist/runtime/base/base-composer-runtime-core.js +1 -1
  79. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  80. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +3 -1
  81. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  82. package/dist/runtime/base/default-thread-composer-runtime-core.js +14 -3
  83. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  84. package/dist/runtime/interfaces/composer-runtime-core.d.ts +2 -1
  85. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  86. package/dist/runtime/interfaces/thread-runtime-core.d.ts +3 -1
  87. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  88. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +19 -6
  89. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -1
  90. package/dist/runtime/queue/message-queue.d.ts +10 -1
  91. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  92. package/dist/runtime/queue/message-queue.js +138 -36
  93. package/dist/runtime/queue/message-queue.js.map +1 -1
  94. package/dist/runtime/utils/runtime-extras-brand.d.ts +21 -0
  95. package/dist/runtime/utils/runtime-extras-brand.d.ts.map +1 -0
  96. package/dist/runtime/utils/runtime-extras-brand.js +37 -0
  97. package/dist/runtime/utils/runtime-extras-brand.js.map +1 -0
  98. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  99. package/dist/runtime/utils/thread-message-like.js +2 -1
  100. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  101. package/dist/runtimes/external-store/external-store-adapter.d.ts +1 -1
  102. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +3 -1
  103. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  104. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +7 -6
  105. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  106. package/dist/runtimes/local/local-runtime-options.d.ts +13 -0
  107. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  108. package/dist/runtimes/local/local-thread-runtime-core.d.ts +5 -1
  109. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  110. package/dist/runtimes/local/local-thread-runtime-core.js +30 -14
  111. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  112. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +1 -1
  113. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +1 -1
  114. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  115. package/dist/runtimes/remote-thread-list/empty-thread-core.js +1 -1
  116. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  117. package/dist/runtimes/remote-thread-list/types.d.ts +6 -3
  118. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  119. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  120. package/dist/store/clients/runtime-adapter.js +1 -1
  121. package/dist/store/clients/runtime-adapter.js.map +1 -1
  122. package/dist/store/clients/suggestions.js +1 -1
  123. package/dist/store/clients/suggestions.js.map +1 -1
  124. package/dist/store/clients/thread-message-client.js +1 -1
  125. package/dist/store/clients/thread-message-client.js.map +1 -1
  126. package/dist/store/index.d.ts +10 -1
  127. package/dist/store/index.js +7 -1
  128. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  129. package/dist/store/runtime-clients/composer-runtime-client.js +12 -5
  130. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  131. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  132. package/dist/store/runtime-clients/message-runtime-client.js +1 -1
  133. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  134. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  135. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
  136. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  137. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  138. package/dist/store/runtime-clients/thread-list-runtime-client.js +1 -1
  139. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  140. package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
  141. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  142. package/dist/store/scopes/composer.d.ts +7 -3
  143. package/dist/store/scopes/composer.d.ts.map +1 -1
  144. package/dist/store/scopes/queue-item.d.ts +10 -0
  145. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  146. package/dist/store/scopes/queue-item.js.map +1 -1
  147. package/package.json +15 -15
  148. package/src/index.ts +5 -1
  149. package/src/react/AssistantProvider.tsx +20 -18
  150. package/src/react/AssistantRuntimeProvider.test.tsx +55 -1
  151. package/src/react/AssistantRuntimeProvider.tsx +12 -2
  152. package/src/react/RuntimeAdapter.test.ts +85 -0
  153. package/src/react/RuntimeAdapter.ts +1 -1
  154. package/src/react/client/Interactables.test.ts +3 -2
  155. package/src/react/client/Interactables.ts +4 -4
  156. package/src/react/client/Tools.ts +4 -4
  157. package/src/react/index.ts +1 -0
  158. package/src/react/providers/AttachmentByIndexProvider.tsx +15 -7
  159. package/src/react/providers/ChainOfThoughtByIndicesProvider.tsx +12 -4
  160. package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +8 -4
  161. package/src/react/providers/MessageByIdProvider.tsx +8 -4
  162. package/src/react/providers/MessageByIndexProvider.tsx +8 -4
  163. package/src/react/providers/PartByIndexProvider.tsx +8 -4
  164. package/src/react/providers/QueueItemByIndexProvider.tsx +9 -5
  165. package/src/react/providers/ReadonlyThreadProvider.tsx +9 -4
  166. package/src/react/providers/SuggestionByIndexProvider.tsx +8 -4
  167. package/src/react/providers/TextMessagePartProvider.tsx +13 -4
  168. package/src/react/providers/ThreadListItemByIndexProvider.tsx +8 -4
  169. package/src/react/providers/ThreadListItemRuntimeProvider.tsx +8 -4
  170. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +19 -4
  171. package/src/react/runtimes/createRuntimeExtras.test.ts +14 -1
  172. package/src/react/runtimes/createRuntimeExtras.ts +15 -26
  173. package/src/react/runtimes/useLocalRuntime.ts +4 -0
  174. package/src/runtime/api/composer-runtime.ts +11 -2
  175. package/src/runtime/api/message-runtime.test.ts +25 -0
  176. package/src/runtime/api/message-runtime.ts +1 -1
  177. package/src/runtime/base/base-composer-runtime-core.ts +5 -1
  178. package/src/runtime/base/default-thread-composer-runtime-core.ts +27 -3
  179. package/src/runtime/interfaces/composer-runtime-core.ts +2 -1
  180. package/src/runtime/interfaces/thread-runtime-core.ts +3 -1
  181. package/src/runtime/queue/external-thread-queue-adapter.ts +19 -3
  182. package/src/runtime/queue/message-queue.ts +200 -38
  183. package/src/runtime/utils/runtime-extras-brand.ts +47 -0
  184. package/src/runtime/utils/thread-message-like.ts +2 -4
  185. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +10 -8
  186. package/src/runtimes/local/local-runtime-options.ts +15 -0
  187. package/src/runtimes/local/local-thread-runtime-core.test.ts +43 -0
  188. package/src/runtimes/local/local-thread-runtime-core.ts +48 -13
  189. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +1 -1
  190. package/src/runtimes/remote-thread-list/empty-thread-core.ts +1 -1
  191. package/src/runtimes/remote-thread-list/types.ts +9 -2
  192. package/src/store/clients/runtime-adapter.ts +2 -5
  193. package/src/store/clients/suggestions.ts +1 -1
  194. package/src/store/clients/thread-message-client.ts +1 -1
  195. package/src/store/index.ts +31 -0
  196. package/src/store/runtime-clients/composer-runtime-client.ts +15 -10
  197. package/src/store/runtime-clients/message-runtime-client.ts +2 -5
  198. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +2 -1
  199. package/src/store/runtime-clients/thread-list-runtime-client.ts +2 -5
  200. package/src/store/runtime-clients/thread-runtime-client.ts +2 -2
  201. package/src/store/scopes/composer.ts +6 -4
  202. package/src/store/scopes/queue-item.ts +8 -1
  203. package/src/tests/external-store-thread-runtime-core.test.ts +56 -13
  204. package/src/tests/framework-neutral-boundary.test.ts +257 -0
  205. package/src/tests/message-queue.test.ts +494 -34
  206. package/src/tests/thread-message-like.test.ts +66 -0
  207. package/LICENSE +0 -21
@@ -2,8 +2,8 @@ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { AttachmentRuntimeClient } from "./attachment-runtime-client.js";
3
3
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
4
4
  import { useEffect } from "@assistant-ui/tap/react-shim";
5
- import { useAssistantEmit, useClientLookup } from "@assistant-ui/store";
6
5
  import { resource, useResource, withKey } from "@assistant-ui/tap";
6
+ import { useAssistantEmit, useClientLookup } from "@assistant-ui/store/client";
7
7
  //#region src/store/runtime-clients/composer-runtime-client.ts
8
8
  const useComposerAttachmentClientByIndex = (t0) => {
9
9
  const $ = c(5);
@@ -25,10 +25,14 @@ const useComposerAttachmentClientByIndex = (t0) => {
25
25
  return useResource(t2);
26
26
  };
27
27
  const ComposerAttachmentClientByIndex = resource(useComposerAttachmentClientByIndex);
28
- const useQueueItemClient = ({ item, onSteer, onRemove }) => {
28
+ const useQueueItemClient = ({ item, onMove, onRemove }) => {
29
29
  return {
30
30
  getState: () => item,
31
- steer: onSteer,
31
+ steer: () => onMove({
32
+ lane: "steer",
33
+ insertAfter: null
34
+ }),
35
+ move: onMove,
32
36
  remove: onRemove
33
37
  };
34
38
  };
@@ -106,7 +110,7 @@ const useComposerClient = (t0) => {
106
110
  if ($[14] !== runtime) {
107
111
  t5 = (item) => withKey(item.id, QueueItemClient({
108
112
  item,
109
- onSteer: () => runtime.steerQueueItem(item.id),
113
+ onMove: (placement) => runtime.moveQueueItem(item.id, placement),
110
114
  onRemove: () => runtime.removeQueueItem(item.id)
111
115
  }));
112
116
  $[14] = runtime;
@@ -170,7 +174,10 @@ const useComposerClient = (t0) => {
170
174
  } else t9 = $[33];
171
175
  let t10;
172
176
  if ($[34] !== queueItems) {
173
- t10 = (selector_0) => queueItems.get(selector_0);
177
+ t10 = (selector_0) => {
178
+ if ("id" in selector_0) return queueItems.get({ key: selector_0.id });
179
+ else return queueItems.get(selector_0);
180
+ };
174
181
  $[34] = queueItems;
175
182
  $[35] = t10;
176
183
  } else t10 = $[35];
@@ -1 +1 @@
1
- {"version":3,"file":"composer-runtime-client.js","names":["Unsubscribe","useMemo","useEffect","useResource","resource","withKey","ClientOutput","useAssistantEmit","useClientLookup","ComposerRuntime","EditComposerRuntime","ComposerState","QueueItemState","AttachmentRuntimeClient","useSubscribable","useComposerAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","ComposerAttachmentClientByIndex","useQueueItemClient","item","onSteer","onRemove","getState","steer","remove","QueueItemClient","useComposerClient","threadIdRef","messageIdRef","runtimeState","emit","unsubscribers","event","const","unsubscribe","unstable_on","threadId","current","messageId","push","payload","attachmentId","reason","message","unsub","t3","attachments","t4","attachment","idx","id","map","queue","t5","steerQueueItem","removeQueueItem","queueItems","type","t6","state","attachmentAccept","canCancel","canSend","dictation","isEditing","isEmpty","quote","role","runConfig","text","t7","t8","beginEdit","_temp","t9","selector","get","key","t10","selector_0","t11","t12","addAttachment","cancel","clearAttachments","reset","send","setQuote","setRole","setRunConfig","setText","startDictation","stopDictation","queueItem","__internal_getRuntime","ComposerClient","Error"],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useMemo, useEffect } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useAssistantEmit,\n useClientLookup,\n} from \"@assistant-ui/store\";\nimport type {\n ComposerRuntime,\n EditComposerRuntime,\n} from \"../../runtime/api/composer-runtime\";\nimport type { ComposerState } from \"../scopes/composer\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useComposerAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: ComposerRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n\n return useResource(\n AttachmentRuntimeClient({\n runtime: attachmentRuntime,\n }),\n );\n};\n\nconst ComposerAttachmentClientByIndex = resource(\n useComposerAttachmentClientByIndex,\n);\n\nconst useQueueItemClient = ({\n item,\n onSteer,\n onRemove,\n}: {\n item: QueueItemState;\n onSteer: () => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: onSteer,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst useComposerClient = ({\n threadIdRef,\n messageIdRef,\n runtime,\n}: {\n threadIdRef: { current: string };\n messageIdRef?: { current: string };\n runtime: ComposerRuntime;\n}): ClientOutput<\"composer\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind composer events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to composer events\n for (const event of [\"send\", \"attachmentAdd\"] as const) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`composer.${event}`, {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n unsubscribers.push(\n runtime.unstable_on(\"attachmentAddError\", (payload) => {\n // payload.error omitted: raw Error is not store-serializable; use runtime.unstable_on for it.\n emit(\"composer.attachmentAddError\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.attachmentId && { attachmentId: payload.attachmentId }),\n reason: payload.reason,\n message: payload.message,\n });\n }),\n );\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit, threadIdRef, messageIdRef]);\n\n const attachments = useClientLookup(\n runtimeState.attachments.map((attachment, idx) =>\n withKey(\n attachment.id,\n ComposerAttachmentClientByIndex({\n runtime,\n index: idx,\n }),\n [runtime, idx],\n ),\n ),\n );\n\n const queue = runtimeState.queue;\n const queueItems = useClientLookup(\n queue.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onSteer: () => runtime.steerQueueItem(item.id),\n onRemove: () => runtime.removeQueueItem(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo<ComposerState>(() => {\n return {\n text: runtimeState.text,\n role: runtimeState.role,\n attachments: attachments.state,\n runConfig: runtimeState.runConfig,\n isEditing: runtimeState.isEditing,\n canCancel: runtimeState.canCancel,\n canSend: runtimeState.canSend,\n attachmentAccept: runtimeState.attachmentAccept,\n isEmpty: runtimeState.isEmpty,\n type: runtimeState.type ?? \"thread\",\n dictation: runtimeState.dictation,\n quote: runtimeState.quote,\n queue,\n };\n }, [runtimeState, attachments.state, queue]);\n\n return {\n getState: () => state,\n setText: runtime.setText,\n setRole: runtime.setRole,\n setRunConfig: runtime.setRunConfig,\n addAttachment: runtime.addAttachment,\n reset: runtime.reset,\n clearAttachments: runtime.clearAttachments,\n send: runtime.send,\n cancel: runtime.cancel,\n beginEdit:\n (runtime as EditComposerRuntime).beginEdit ??\n (() => {\n throw new Error(\"beginEdit is not supported in this runtime\");\n }),\n startDictation: runtime.startDictation,\n stopDictation: runtime.stopDictation,\n setQuote: runtime.setQuote,\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n queueItem: (selector) => queueItems.get(selector),\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ComposerClient = resource(useComposerClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"composer-runtime-client.js","names":["Unsubscribe","useMemo","useEffect","useResource","resource","withKey","ClientOutput","useAssistantEmit","useClientLookup","ComposerRuntime","EditComposerRuntime","ComposerState","QueueItemState","QueuePlacement","AttachmentRuntimeClient","useSubscribable","useComposerAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","ComposerAttachmentClientByIndex","useQueueItemClient","item","onMove","onRemove","placement","getState","steer","lane","insertAfter","move","remove","QueueItemClient","useComposerClient","threadIdRef","messageIdRef","runtimeState","emit","unsubscribers","event","const","unsubscribe","unstable_on","threadId","current","messageId","push","payload","attachmentId","reason","message","unsub","t3","attachments","t4","attachment","idx","id","map","queue","t5","moveQueueItem","removeQueueItem","queueItems","type","t6","state","attachmentAccept","canCancel","canSend","dictation","isEditing","isEmpty","quote","role","runConfig","text","t7","t8","beginEdit","_temp","t9","selector","get","key","t10","selector_0","t11","t12","addAttachment","cancel","clearAttachments","reset","send","setQuote","setRole","setRunConfig","setText","startDictation","stopDictation","queueItem","__internal_getRuntime","ComposerClient","Error"],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useMemo, useEffect } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useAssistantEmit, useClientLookup } from \"@assistant-ui/store/client\";\nimport type {\n ComposerRuntime,\n EditComposerRuntime,\n} from \"../../runtime/api/composer-runtime\";\nimport type { ComposerState } from \"../scopes/composer\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { QueuePlacement } from \"../../runtime/queue/external-thread-queue-adapter\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useComposerAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: ComposerRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n\n return useResource(\n AttachmentRuntimeClient({\n runtime: attachmentRuntime,\n }),\n );\n};\n\nconst ComposerAttachmentClientByIndex = resource(\n useComposerAttachmentClientByIndex,\n);\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst useComposerClient = ({\n threadIdRef,\n messageIdRef,\n runtime,\n}: {\n threadIdRef: { current: string };\n messageIdRef?: { current: string };\n runtime: ComposerRuntime;\n}): ClientOutput<\"composer\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind composer events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to composer events\n for (const event of [\"send\", \"attachmentAdd\"] as const) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`composer.${event}`, {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n unsubscribers.push(\n runtime.unstable_on(\"attachmentAddError\", (payload) => {\n // payload.error omitted: raw Error is not store-serializable; use runtime.unstable_on for it.\n emit(\"composer.attachmentAddError\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.attachmentId && { attachmentId: payload.attachmentId }),\n reason: payload.reason,\n message: payload.message,\n });\n }),\n );\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit, threadIdRef, messageIdRef]);\n\n const attachments = useClientLookup(\n runtimeState.attachments.map((attachment, idx) =>\n withKey(\n attachment.id,\n ComposerAttachmentClientByIndex({\n runtime,\n index: idx,\n }),\n [runtime, idx],\n ),\n ),\n );\n\n const queue = runtimeState.queue;\n const queueItems = useClientLookup(\n queue.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => runtime.moveQueueItem(item.id, placement),\n onRemove: () => runtime.removeQueueItem(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo<ComposerState>(() => {\n return {\n text: runtimeState.text,\n role: runtimeState.role,\n attachments: attachments.state,\n runConfig: runtimeState.runConfig,\n isEditing: runtimeState.isEditing,\n canCancel: runtimeState.canCancel,\n canSend: runtimeState.canSend,\n attachmentAccept: runtimeState.attachmentAccept,\n isEmpty: runtimeState.isEmpty,\n type: runtimeState.type ?? \"thread\",\n dictation: runtimeState.dictation,\n quote: runtimeState.quote,\n queue,\n };\n }, [runtimeState, attachments.state, queue]);\n\n return {\n getState: () => state,\n setText: runtime.setText,\n setRole: runtime.setRole,\n setRunConfig: runtime.setRunConfig,\n addAttachment: runtime.addAttachment,\n reset: runtime.reset,\n clearAttachments: runtime.clearAttachments,\n send: runtime.send,\n cancel: runtime.cancel,\n beginEdit:\n (runtime as EditComposerRuntime).beginEdit ??\n (() => {\n throw new Error(\"beginEdit is not supported in this runtime\");\n }),\n startDictation: runtime.startDictation,\n stopDictation: runtime.stopDictation,\n setQuote: runtime.setQuote,\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n queueItem: (selector) => {\n if (\"id\" in selector) {\n return queueItems.get({ key: selector.id });\n } else {\n return queueItems.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ComposerClient = resource(useComposerClient);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":";;;cAoJa,2CAAa,SAAA;EA/Ff,SAAA;EACI;IAAE"}
1
+ {"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":";;;cAiJa,2CAAa,SAAA;EA/Ff,SAAA;EACI;IAAE"}
@@ -5,8 +5,8 @@ import { ComposerClient } from "./composer-runtime-client.js";
5
5
  import { liveRef } from "./liveRef.js";
6
6
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
7
  import { useState } from "@assistant-ui/tap/react-shim";
8
- import { useClientLookup, useClientResource } from "@assistant-ui/store";
9
8
  import { resource, useResource, withKey } from "@assistant-ui/tap";
9
+ import { useClientLookup, useClientResource } from "@assistant-ui/store/client";
10
10
  //#region src/store/runtime-clients/message-runtime-client.ts
11
11
  const useMessageAttachmentClientByIndex = (t0) => {
12
12
  const $ = c(5);
@@ -1 +1 @@
1
- {"version":3,"file":"message-runtime-client.js","names":["useMemo","useState","useResource","withKey","resource","ClientOutput","useClientLookup","useClientResource","MessageRuntime","useSubscribable","liveRef","ComposerClient","MessagePartClient","MessageState","AttachmentRuntimeClient","useMessageAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","MessageAttachmentClientByIndex","useMessagePartByIndex","getMessagePartByIndex","partRuntime","MessagePartByIndex","useMessageClient","threadIdRef","runtimeState","isCopiedState","setIsCopied","isHoveringState","setIsHovering","getState","id","messageIdRef","composer","t3","content","t4","part","idx","toolCallId","map","parts","attachments","t5","t6","attachment","idx_0","t7","state","isCopied","isHovering","t8","t9","methods","t10","t11","t12","t13","t14","t15","t16","delete","config","reload","speak","stopSpeaking","feedback","submitFeedback","options","switchToBranch","unstable_getCopyText","t17","selector","get","key","t18","selector_0","t19","t20","getCopyText","__internal_getRuntime","MessageClient"],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport type { MessageRuntime } from \"../../runtime/api/message-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { liveRef } from \"./liveRef\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessagePartClient } from \"./message-part-runtime-client\";\nimport type { MessageState } from \"../scopes/message\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\n\nconst useMessageAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: MessageRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return useResource(AttachmentRuntimeClient({ runtime: attachmentRuntime }));\n};\n\nconst MessageAttachmentClientByIndex = resource(\n useMessageAttachmentClientByIndex,\n);\n\nconst useMessagePartByIndex = ({\n runtime,\n index,\n}: {\n runtime: MessageRuntime;\n index: number;\n}) => {\n const partRuntime = useMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return useResource(MessagePartClient({ runtime: partRuntime }));\n};\n\nconst MessagePartByIndex = resource(useMessagePartByIndex);\n\nconst useMessageClient = ({\n runtime,\n threadIdRef,\n}: {\n runtime: MessageRuntime;\n threadIdRef: { current: string };\n}): ClientOutput<\"message\"> => {\n const runtimeState = useSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n\n const messageIdRef = useMemo(\n () => liveRef(() => runtime.getState().id),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n const parts = useClientLookup(\n runtimeState.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n MessagePartByIndex({ runtime, index: idx }),\n [runtime, idx],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (runtimeState.attachments ?? []).map((attachment, idx) =>\n withKey(\n attachment.id,\n MessageAttachmentClientByIndex({ runtime, index: idx }),\n [runtime, idx],\n ),\n ),\n );\n\n const state = useMemo<MessageState>(() => {\n return {\n ...(runtimeState as MessageState),\n\n parts: parts.state,\n composer: composer.state,\n\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n runtimeState,\n parts.state,\n composer.state,\n isCopiedState,\n isHoveringState,\n ]);\n\n return {\n getState: () => state,\n\n composer: () => composer.methods,\n\n delete: () => runtime.delete(),\n reload: (config) => runtime.reload(config),\n speak: () => runtime.speak(),\n stopSpeaking: () => runtime.stopSpeaking(),\n submitFeedback: (feedback) => runtime.submitFeedback(feedback),\n switchToBranch: (options) => runtime.switchToBranch(options),\n getCopyText: () => runtime.unstable_getCopyText(),\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n\n setIsCopied,\n setIsHovering,\n\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const MessageClient = resource(useMessageClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"message-runtime-client.js","names":["useMemo","useState","useResource","withKey","resource","ClientOutput","useClientLookup","useClientResource","MessageRuntime","useSubscribable","liveRef","ComposerClient","MessagePartClient","MessageState","AttachmentRuntimeClient","useMessageAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","MessageAttachmentClientByIndex","useMessagePartByIndex","getMessagePartByIndex","partRuntime","MessagePartByIndex","useMessageClient","threadIdRef","runtimeState","isCopiedState","setIsCopied","isHoveringState","setIsHovering","getState","id","messageIdRef","composer","t3","content","t4","part","idx","toolCallId","map","parts","attachments","t5","t6","attachment","idx_0","t7","state","isCopied","isHovering","t8","t9","methods","t10","t11","t12","t13","t14","t15","t16","delete","config","reload","speak","stopSpeaking","feedback","submitFeedback","options","switchToBranch","unstable_getCopyText","t17","selector","get","key","t18","selector_0","t19","t20","getCopyText","__internal_getRuntime","MessageClient"],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup, useClientResource } from \"@assistant-ui/store/client\";\nimport type { MessageRuntime } from \"../../runtime/api/message-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { liveRef } from \"./liveRef\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessagePartClient } from \"./message-part-runtime-client\";\nimport type { MessageState } from \"../scopes/message\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\n\nconst useMessageAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: MessageRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return useResource(AttachmentRuntimeClient({ runtime: attachmentRuntime }));\n};\n\nconst MessageAttachmentClientByIndex = resource(\n useMessageAttachmentClientByIndex,\n);\n\nconst useMessagePartByIndex = ({\n runtime,\n index,\n}: {\n runtime: MessageRuntime;\n index: number;\n}) => {\n const partRuntime = useMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return useResource(MessagePartClient({ runtime: partRuntime }));\n};\n\nconst MessagePartByIndex = resource(useMessagePartByIndex);\n\nconst useMessageClient = ({\n runtime,\n threadIdRef,\n}: {\n runtime: MessageRuntime;\n threadIdRef: { current: string };\n}): ClientOutput<\"message\"> => {\n const runtimeState = useSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = useState(false);\n const [isHoveringState, setIsHovering] = useState(false);\n\n const messageIdRef = useMemo(\n () => liveRef(() => runtime.getState().id),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n const parts = useClientLookup(\n runtimeState.content.map((part, idx) =>\n withKey(\n \"toolCallId\" in part && part.toolCallId != null\n ? `toolCallId-${part.toolCallId}`\n : `index-${idx}`,\n MessagePartByIndex({ runtime, index: idx }),\n [runtime, idx],\n ),\n ),\n );\n\n const attachments = useClientLookup(\n (runtimeState.attachments ?? []).map((attachment, idx) =>\n withKey(\n attachment.id,\n MessageAttachmentClientByIndex({ runtime, index: idx }),\n [runtime, idx],\n ),\n ),\n );\n\n const state = useMemo<MessageState>(() => {\n return {\n ...(runtimeState as MessageState),\n\n parts: parts.state,\n composer: composer.state,\n\n isCopied: isCopiedState,\n isHovering: isHoveringState,\n };\n }, [\n runtimeState,\n parts.state,\n composer.state,\n isCopiedState,\n isHoveringState,\n ]);\n\n return {\n getState: () => state,\n\n composer: () => composer.methods,\n\n delete: () => runtime.delete(),\n reload: (config) => runtime.reload(config),\n speak: () => runtime.speak(),\n stopSpeaking: () => runtime.stopSpeaking(),\n submitFeedback: (feedback) => runtime.submitFeedback(feedback),\n switchToBranch: (options) => runtime.switchToBranch(options),\n getCopyText: () => runtime.unstable_getCopyText(),\n part: (selector) => {\n if (\"index\" in selector) {\n return parts.get({ index: selector.index });\n } else {\n return parts.get({ key: `toolCallId-${selector.toolCallId}` });\n }\n },\n\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n\n setIsCopied,\n setIsHovering,\n\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const MessageClient = resource(useMessageClient);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;cAoEa,kDAAoB,SAAA;EAtDtB,SAAA;EAIa"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;cAqEa,kDAAoB,SAAA;EAtDtB,SAAA;EAIa"}
@@ -1,8 +1,8 @@
1
1
  import { useSubscribable } from "./useSubscribable.js";
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { useEffect } from "@assistant-ui/tap/react-shim";
4
- import { useAssistantEmit } from "@assistant-ui/store";
5
4
  import { resource } from "@assistant-ui/tap";
5
+ import { useAssistantEmit } from "@assistant-ui/store/client";
6
6
  //#region src/store/runtime-clients/thread-list-item-runtime-client.ts
7
7
  const useThreadListItemClient = (t0) => {
8
8
  const $ = c(23);
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item-runtime-client.js","names":["Unsubscribe","useEffect","useMemo","resource","ClientOutput","useAssistantEmit","ThreadListItemEventType","ThreadListItemRuntime","useSubscribable","useThreadListItemClient","t0","$","_c","runtime","mainThreadIsRunning","t1","undefined","runtimeState","t2","bb0","isRunning","isMain","t3","state","emit","t4","unsubscribers","threadListItemEvents","event","unsubscribe","unstable_on","threadId","getState","id","push","unsub","t5","t6","t7","archive","delete","detach","generateTitle","initialize","rename","switchTo","unarchive","updateCustom","__internal_getRuntime","ThreadListItemClient"],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport { type ClientOutput, useAssistantEmit } from \"@assistant-ui/store\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useThreadListItemClient = ({\n runtime,\n mainThreadIsRunning = false,\n}: {\n runtime: ThreadListItemRuntime;\n // A thread list that cannot report per-thread run state still leaves the open\n // thread observable, and the thread client tracks that reactively. Omitted\n // where the runtime state is already authoritative for every thread.\n mainThreadIsRunning?: boolean | undefined;\n}): ClientOutput<\"threadListItem\"> => {\n const runtimeState = useSubscribable(runtime);\n const state = useMemo(() => {\n const isRunning =\n runtimeState.isRunning || (runtimeState.isMain && mainThreadIsRunning);\n if (isRunning === runtimeState.isRunning) return runtimeState;\n return { ...runtimeState, isRunning };\n }, [runtimeState, mainThreadIsRunning]);\n const emit = useAssistantEmit();\n\n // Bind thread list item events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to thread list item events\n const threadListItemEvents: ThreadListItemEventType[] = [\n \"switchedTo\",\n \"switchedAway\",\n ];\n\n for (const event of threadListItemEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`threadListItem.${event}`, {\n threadId: runtime.getState()!.id,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n return {\n getState: () => state,\n switchTo: runtime.switchTo,\n rename: runtime.rename,\n updateCustom: runtime.updateCustom,\n archive: runtime.archive,\n unarchive: runtime.unarchive,\n delete: runtime.delete,\n generateTitle: runtime.generateTitle,\n initialize: runtime.initialize,\n detach: runtime.detach,\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadListItemClient = resource(useThreadListItemClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.js","names":["Unsubscribe","useEffect","useMemo","resource","ClientOutput","useAssistantEmit","ThreadListItemEventType","ThreadListItemRuntime","useSubscribable","useThreadListItemClient","t0","$","_c","runtime","mainThreadIsRunning","t1","undefined","runtimeState","t2","bb0","isRunning","isMain","t3","state","emit","t4","unsubscribers","threadListItemEvents","event","unsubscribe","unstable_on","threadId","getState","id","push","unsub","t5","t6","t7","archive","delete","detach","generateTitle","initialize","rename","switchTo","unarchive","updateCustom","__internal_getRuntime","ThreadListItemClient"],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect, useMemo } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useAssistantEmit } from \"@assistant-ui/store/client\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useThreadListItemClient = ({\n runtime,\n mainThreadIsRunning = false,\n}: {\n runtime: ThreadListItemRuntime;\n // A thread list that cannot report per-thread run state still leaves the open\n // thread observable, and the thread client tracks that reactively. Omitted\n // where the runtime state is already authoritative for every thread.\n mainThreadIsRunning?: boolean | undefined;\n}): ClientOutput<\"threadListItem\"> => {\n const runtimeState = useSubscribable(runtime);\n const state = useMemo(() => {\n const isRunning =\n runtimeState.isRunning || (runtimeState.isMain && mainThreadIsRunning);\n if (isRunning === runtimeState.isRunning) return runtimeState;\n return { ...runtimeState, isRunning };\n }, [runtimeState, mainThreadIsRunning]);\n const emit = useAssistantEmit();\n\n // Bind thread list item events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to thread list item events\n const threadListItemEvents: ThreadListItemEventType[] = [\n \"switchedTo\",\n \"switchedAway\",\n ];\n\n for (const event of threadListItemEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`threadListItem.${event}`, {\n threadId: runtime.getState()!.id,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n return {\n getState: () => state,\n switchTo: runtime.switchTo,\n rename: runtime.rename,\n updateCustom: runtime.updateCustom,\n archive: runtime.archive,\n unarchive: runtime.unarchive,\n delete: runtime.delete,\n generateTitle: runtime.generateTitle,\n initialize: runtime.initialize,\n detach: runtime.detach,\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadListItemClient = resource(useThreadListItemClient);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;cAgHa,8CAAgB,SAAA;EAvElB,SAAA;EACoB,6BAAA"}
1
+ {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;cA6Ga,8CAAgB,SAAA;EAvElB,SAAA;EACoB,6BAAA"}
@@ -3,8 +3,8 @@ import { ThreadClient } from "./thread-runtime-client.js";
3
3
  import { ThreadListItemClient } from "./thread-list-item-runtime-client.js";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
5
  import "@assistant-ui/tap/react-shim";
6
- import { useClientLookup, useClientResource } from "@assistant-ui/store";
7
6
  import { resource, useResource, withKey } from "@assistant-ui/tap";
7
+ import { useClientLookup, useClientResource } from "@assistant-ui/store/client";
8
8
  //#region src/store/runtime-clients/thread-list-runtime-client.ts
9
9
  const useThreadListItemClientById = (t0) => {
10
10
  const $ = c(6);
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-runtime-client.js","names":["useMemo","useResource","withKey","resource","ClientOutput","useClientLookup","useClientResource","ThreadListRuntime","AssistantRuntime","useSubscribable","ThreadListItemClient","ThreadClient","ThreadsState","useThreadListItemClientById","t0","$","_c","runtime","id","mainThreadIsRunning","t1","getItemById","threadListItemRuntime","t2","ThreadListItemClientById","useThreadListClient","__internal_assistantRuntime","runtimeState","main","state","threadItems","Object","keys","map","isRunning","t3","newThreadId","t4","archivedThreadIds","hasMore","isLoading","isLoadingMore","mainThreadId","threadIds","t5","t6","methods","t7","threadIdOrOptions","get","key","index","archived","t8","undefined","id_0","t10","t11","t12","t13","t9","threadId","options","switchToThread","switchToNewThread","getLoadThreadsPromise","reload","reloadMainThread","loadMore","t14","t15","getState","thread","item","__internal_getAssistantRuntime","ThreadListClient"],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport type { ThreadListRuntime } from \"../../runtime/api/thread-list-runtime\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { ThreadListItemClient } from \"./thread-list-item-runtime-client\";\nimport { ThreadClient } from \"./thread-runtime-client\";\nimport type { ThreadsState } from \"../scopes/threads\";\n\nconst useThreadListItemClientById = ({\n runtime,\n id,\n mainThreadIsRunning,\n}: {\n runtime: ThreadListRuntime;\n id: string;\n mainThreadIsRunning: boolean;\n}) => {\n const threadListItemRuntime = useMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return useResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n mainThreadIsRunning,\n }),\n );\n};\n\nconst ThreadListItemClientById = resource(useThreadListItemClientById);\n\nconst useThreadListClient = ({\n runtime,\n __internal_assistantRuntime,\n}: {\n runtime: ThreadListRuntime;\n __internal_assistantRuntime: AssistantRuntime;\n}): ClientOutput<\"threads\"> => {\n const runtimeState = useSubscribable(runtime);\n\n const main = useClientResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n const threadItems = useClientLookup(\n Object.keys(runtimeState.threadItems).map((id) =>\n withKey(\n id,\n ThreadListItemClientById({\n runtime,\n id,\n mainThreadIsRunning: main.state.isRunning,\n }),\n [runtime, id, main.state.isRunning],\n ),\n ),\n );\n\n const state = useMemo<ThreadsState>(() => {\n return {\n mainThreadId: runtimeState.mainThreadId,\n newThreadId: runtimeState.newThreadId ?? null,\n isLoading: runtimeState.isLoading,\n isLoadingMore: runtimeState.isLoadingMore,\n hasMore: runtimeState.hasMore,\n threadIds: runtimeState.threadIds,\n archivedThreadIds: runtimeState.archivedThreadIds,\n threadItems: threadItems.state,\n\n main: main.state,\n };\n }, [runtimeState, threadItems.state, main.state]);\n\n return {\n getState: () => state,\n thread: () => main.methods,\n item: (threadIdOrOptions) => {\n if (threadIdOrOptions === \"main\") {\n return threadItems.get({ key: state.mainThreadId });\n }\n\n if (\"id\" in threadIdOrOptions) {\n return threadItems.get({ key: threadIdOrOptions.id });\n }\n\n const { index, archived = false } = threadIdOrOptions;\n const id = archived\n ? state.archivedThreadIds[index]!\n : state.threadIds[index]!;\n return threadItems.get({ key: id });\n },\n switchToThread: async (threadId, options) => {\n await runtime.switchToThread(threadId, options);\n },\n switchToNewThread: async () => {\n await runtime.switchToNewThread();\n },\n getLoadThreadsPromise: () => runtime.getLoadThreadsPromise(),\n reload: () => runtime.reload(),\n reloadMainThread: () => runtime.reloadMainThread(),\n loadMore: () => runtime.loadMore(),\n __internal_getAssistantRuntime: () => __internal_assistantRuntime,\n };\n};\n\nexport const ThreadListClient = resource(useThreadListClient);\n"],"mappings":";;;;;;;;AAcA,MAAMa,+BAA8BC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAC,SAAAC,IAAAC,wBAAAL;CAQpC,IAAAM;CAAA,IAAAL,EAAA,OAAAG,MAAAH,EAAA,OAAAE,SAAA;EAESG,KAAAH,QAAOI,YAAaH,EAAE;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAE;EAAAF,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAD/B,MAAAO,wBACQF;CAEN,IAAAG;CAAA,IAAAR,EAAA,OAAAI,uBAAAJ,EAAA,OAAAO,uBAAA;EAEAC,KAAAb,qBAAqB;GAAAO,SACVK;GAAqBH;EAEhC,CAAC;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAO;EAAAP,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OAJGd,YACLsB,EAIF;AAAC;AAGH,MAAMC,2BAA2BrB,SAASU,2BAA2B;AAErE,MAAMY,uBAAsBX,OAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAC,MAAA,EAAAC,SAAAS,gCAAAZ;CAO3B,MAAAa,eAAqBlB,gBAAgBQ,OAAO;CAAE,IAAAG;CAAA,IAAAL,EAAA,OAAAE,QAAAW,MAAA;EAG5CR,KAAAT,aAAa,EAAAM,SACFA,QAAOW,KAClB,CAAC;EAACb,EAAA,KAAAE,QAAAW;EAAAb,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CAHJ,MAAAa,OAAatB,kBACXc,EAGF;CAAE,IAAAG;CAAA,IAAAR,EAAA,OAAAa,KAAAC,SAAAd,EAAA,OAAAE,WAAAF,EAAA,OAAAY,aAAAG,aAAA;EAEAP,KAAAQ,OAAMC,KAAML,aAAYG,WAAY,CAAC,CAAAG,KAAKf,OACxChB,QACEgB,IACAM,yBAAyB;GAAAP;GAAAC;GAAAC,qBAGFS,KAAIC,MAAMK;EACjC,CAAC,GACD;GAACjB;GAASC;GAAIU,KAAIC,MAAMK;EAAU,CACpC,CACF;EAACnB,EAAA,KAAAa,KAAAC;EAAAd,EAAA,KAAAE;EAAAF,EAAA,KAAAY,aAAAG;EAAAf,EAAA,KAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAXH,MAAAe,cAAoBzB,gBAClBkB,EAWF;CAKiB,MAAAY,KAAAR,aAAYS,eAAZ;CAAgC,IAAAC;CAAA,IAAAtB,EAAA,OAAAa,KAAAC,SAAAd,EAAA,OAAAY,aAAAW,qBAAAvB,EAAA,OAAAY,aAAAY,WAAAxB,EAAA,OAAAY,aAAAa,aAAAzB,EAAA,QAAAY,aAAAc,iBAAA1B,EAAA,QAAAY,aAAAe,gBAAA3B,EAAA,QAAAY,aAAAgB,aAAA5B,EAAA,QAAAoB,MAAApB,EAAA,QAAAe,YAAAD,OAAA;EAFxCQ,KAAA;GAAAK,cACSf,aAAYe;GAAaN,aAC1BD;GAAgCK,WAClCb,aAAYa;GAAUC,eAClBd,aAAYc;GAAcF,SAChCZ,aAAYY;GAAQI,WAClBhB,aAAYgB;GAAUL,mBACdX,aAAYW;GAAkBR,aACpCA,YAAWD;GAAMD,MAExBA,KAAIC;EACZ;EAACd,EAAA,KAAAa,KAAAC;EAAAd,EAAA,KAAAY,aAAAW;EAAAvB,EAAA,KAAAY,aAAAY;EAAAxB,EAAA,KAAAY,aAAAa;EAAAzB,EAAA,MAAAY,aAAAc;EAAA1B,EAAA,MAAAY,aAAAe;EAAA3B,EAAA,MAAAY,aAAAgB;EAAA5B,EAAA,MAAAoB;EAAApB,EAAA,MAAAe,YAAAD;EAAAd,EAAA,MAAAsB;CAAA,OAAAA,KAAAtB,EAAA;CAZH,MAAAc,QACEQ;CAYgD,IAAAO;CAAA,IAAA7B,EAAA,QAAAc,OAAA;EAGtCe,WAAMf;EAAKd,EAAA,MAAAc;EAAAd,EAAA,MAAA6B;CAAA,OAAAA,KAAA7B,EAAA;CAAA,IAAA8B;CAAA,IAAA9B,EAAA,QAAAa,KAAAkB,SAAA;EACbD,WAAMjB,KAAIkB;EAAQ/B,EAAA,MAAAa,KAAAkB;EAAA/B,EAAA,MAAA8B;CAAA,OAAAA,KAAA9B,EAAA;CAAA,IAAAgC;CAAA,IAAAhC,EAAA,QAAAc,SAAAd,EAAA,QAAAe,aAAA;EACpBiB,MAAAC,sBAAA;GACJ,IAAIA,sBAAsB,QAAM,OACvBlB,YAAWmB,IAAK,EAAAC,KAAOrB,MAAKa,aAAc,CAAC;GAGpD,IAAI,QAAQM,mBAAiB,OACpBlB,YAAWmB,IAAK,EAAAC,KAAOF,kBAAiB9B,GAAI,CAAC;GAGtD,MAAA,EAAAiC,OAAAC,UAAAC,OAAoCL;GACpC,MAAAO,QADeF,OAAAC,KAAAA,IAAA,QAAAD,MAEXxB,MAAKS,kBAAmBa,SACxBtB,MAAKc,UAAWQ;GAAQ,OACrBrB,YAAWmB,IAAK,EAAAC,KAAOhC,KAAG,CAAC;EAAC;EACpCH,EAAA,MAAAc;EAAAd,EAAA,MAAAe;EAAAf,EAAA,MAAAgC;CAAA,OAAAA,KAAAhC,EAAA;CAAA,IAAAyC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAN;CAAA,IAAAO;CAAA,IAAA7C,EAAA,QAAAE,SAAA;EACeoC,KAAA,OAAAQ,UAAAC,YAAA;GACd,MAAM7C,QAAO8C,eAAgBF,UAAUC,OAAO;EAAC;EAE9BF,KAAA,YAAA;GACjB,MAAM3C,QAAO+C,kBAAmB;EAAC;EAEZR,YAAMvC,QAAOgD,sBAAuB;EACnDR,YAAMxC,QAAOiD,OAAQ;EACXR,YAAMzC,QAAOkD,iBAAkB;EACvCR,YAAM1C,QAAOmD,SAAU;EAACrD,EAAA,MAAAE;EAAAF,EAAA,MAAAyC;EAAAzC,EAAA,MAAA0C;EAAA1C,EAAA,MAAA2C;EAAA3C,EAAA,MAAA4C;EAAA5C,EAAA,MAAAsC;EAAAtC,EAAA,MAAA6C;CAAA,OAAA;EAAAJ,MAAAzC,EAAA;EAAA0C,MAAA1C,EAAA;EAAA2C,MAAA3C,EAAA;EAAA4C,MAAA5C,EAAA;EAAAsC,KAAAtC,EAAA;EAAA6C,KAAA7C,EAAA;CAAA;CAAA,IAAAsD;CAAA,IAAAtD,EAAA,QAAAW,6BAAA;EACF2C,YAAM3C;EAA2BX,EAAA,MAAAW;EAAAX,EAAA,MAAAsD;CAAA,OAAAA,MAAAtD,EAAA;CAAA,IAAAuD;CAAA,IAAAvD,EAAA,QAAAyC,OAAAzC,EAAA,QAAA0C,OAAA1C,EAAA,QAAA2C,OAAA3C,EAAA,QAAA4C,OAAA5C,EAAA,QAAAsD,OAAAtD,EAAA,QAAA6B,MAAA7B,EAAA,QAAA8B,MAAA9B,EAAA,QAAAgC,MAAAhC,EAAA,QAAAsC,MAAAtC,EAAA,QAAA6C,IAAA;EA5B5DU,MAAA;GAAAC,UACK3B;GAAW4B,QACb3B;GAAkB4B,MACpB1B;GAcLgB,gBACeV;GAEfW,mBACkBJ;GAElBK,uBACsBT;GAAqCU,QACpDT;GAAsBU,kBACZT;GAAgCU,UACxCT;GAAwBe,gCACFL;EAClC;EAACtD,EAAA,MAAAyC;EAAAzC,EAAA,MAAA0C;EAAA1C,EAAA,MAAA2C;EAAA3C,EAAA,MAAA4C;EAAA5C,EAAA,MAAAsD;EAAAtD,EAAA,MAAA6B;EAAA7B,EAAA,MAAA8B;EAAA9B,EAAA,MAAAgC;EAAAhC,EAAA,MAAAsC;EAAAtC,EAAA,MAAA6C;EAAA7C,EAAA,MAAAuD;CAAA,OAAAA,MAAAvD,EAAA;CAAA,OA7BMuD;AA6BN;AAGH,MAAaK,mBAAmBxE,SAASsB,mBAAmB"}
1
+ {"version":3,"file":"thread-list-runtime-client.js","names":["useMemo","useResource","withKey","resource","ClientOutput","useClientLookup","useClientResource","ThreadListRuntime","AssistantRuntime","useSubscribable","ThreadListItemClient","ThreadClient","ThreadsState","useThreadListItemClientById","t0","$","_c","runtime","id","mainThreadIsRunning","t1","getItemById","threadListItemRuntime","t2","ThreadListItemClientById","useThreadListClient","__internal_assistantRuntime","runtimeState","main","state","threadItems","Object","keys","map","isRunning","t3","newThreadId","t4","archivedThreadIds","hasMore","isLoading","isLoadingMore","mainThreadId","threadIds","t5","t6","methods","t7","threadIdOrOptions","get","key","index","archived","t8","undefined","id_0","t10","t11","t12","t13","t9","threadId","options","switchToThread","switchToNewThread","getLoadThreadsPromise","reload","reloadMainThread","loadMore","t14","t15","getState","thread","item","__internal_getAssistantRuntime","ThreadListClient"],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useResource, withKey, resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup, useClientResource } from \"@assistant-ui/store/client\";\nimport type { ThreadListRuntime } from \"../../runtime/api/thread-list-runtime\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport { ThreadListItemClient } from \"./thread-list-item-runtime-client\";\nimport { ThreadClient } from \"./thread-runtime-client\";\nimport type { ThreadsState } from \"../scopes/threads\";\n\nconst useThreadListItemClientById = ({\n runtime,\n id,\n mainThreadIsRunning,\n}: {\n runtime: ThreadListRuntime;\n id: string;\n mainThreadIsRunning: boolean;\n}) => {\n const threadListItemRuntime = useMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return useResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n mainThreadIsRunning,\n }),\n );\n};\n\nconst ThreadListItemClientById = resource(useThreadListItemClientById);\n\nconst useThreadListClient = ({\n runtime,\n __internal_assistantRuntime,\n}: {\n runtime: ThreadListRuntime;\n __internal_assistantRuntime: AssistantRuntime;\n}): ClientOutput<\"threads\"> => {\n const runtimeState = useSubscribable(runtime);\n\n const main = useClientResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n const threadItems = useClientLookup(\n Object.keys(runtimeState.threadItems).map((id) =>\n withKey(\n id,\n ThreadListItemClientById({\n runtime,\n id,\n mainThreadIsRunning: main.state.isRunning,\n }),\n [runtime, id, main.state.isRunning],\n ),\n ),\n );\n\n const state = useMemo<ThreadsState>(() => {\n return {\n mainThreadId: runtimeState.mainThreadId,\n newThreadId: runtimeState.newThreadId ?? null,\n isLoading: runtimeState.isLoading,\n isLoadingMore: runtimeState.isLoadingMore,\n hasMore: runtimeState.hasMore,\n threadIds: runtimeState.threadIds,\n archivedThreadIds: runtimeState.archivedThreadIds,\n threadItems: threadItems.state,\n\n main: main.state,\n };\n }, [runtimeState, threadItems.state, main.state]);\n\n return {\n getState: () => state,\n thread: () => main.methods,\n item: (threadIdOrOptions) => {\n if (threadIdOrOptions === \"main\") {\n return threadItems.get({ key: state.mainThreadId });\n }\n\n if (\"id\" in threadIdOrOptions) {\n return threadItems.get({ key: threadIdOrOptions.id });\n }\n\n const { index, archived = false } = threadIdOrOptions;\n const id = archived\n ? state.archivedThreadIds[index]!\n : state.threadIds[index]!;\n return threadItems.get({ key: id });\n },\n switchToThread: async (threadId, options) => {\n await runtime.switchToThread(threadId, options);\n },\n switchToNewThread: async () => {\n await runtime.switchToNewThread();\n },\n getLoadThreadsPromise: () => runtime.getLoadThreadsPromise(),\n reload: () => runtime.reload(),\n reloadMainThread: () => runtime.reloadMainThread(),\n loadMore: () => runtime.loadMore(),\n __internal_getAssistantRuntime: () => __internal_assistantRuntime,\n };\n};\n\nexport const ThreadListClient = resource(useThreadListClient);\n"],"mappings":"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"}
@@ -4,8 +4,8 @@ import { liveRef } from "./liveRef.js";
4
4
  import { MessageClient } from "./message-runtime-client.js";
5
5
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
6
  import { useEffect } from "@assistant-ui/tap/react-shim";
7
- import { useAssistantEmit, useClientLookup, useClientResource } from "@assistant-ui/store";
8
7
  import { resource, useResource, withKey } from "@assistant-ui/tap";
8
+ import { useAssistantEmit, useClientLookup, useClientResource } from "@assistant-ui/store/client";
9
9
  //#region src/store/runtime-clients/thread-runtime-client.ts
10
10
  const useMessageClientById = (t0) => {
11
11
  const $ = c(6);
@@ -1 +1 @@
1
- {"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","ThreadRuntime","useMemo","useEffect","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","threadId","getState","push","unsub","t3","t4","composer","t5","messages","t6","m","map","state","length","isLoading","t7","capabilities","extras","isDisabled","isRunning","speech","suggestions","voice","isEmpty","t8","t9","methods","t10","selector","get","key","t11","t12","append","cancelRun","connectVoice","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","message","__internal_getRuntime","ThreadClient"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport {\n type ClientOutput,\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef }), [\n runtime,\n m.id,\n threadIdRef,\n ]),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n append: runtime.append,\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"thread-runtime-client.js","names":["Unsubscribe","ThreadRuntimeEventType","ThreadRuntime","useMemo","useEffect","RefObject","useResource","resource","withKey","liveRef","ClientOutput","useAssistantEmit","useClientLookup","useClientResource","ComposerClient","MessageClient","useSubscribable","ThreadState","useMessageClientById","t0","$","_c","runtime","id","threadIdRef","t1","getMessageById","messageRuntime","t2","MessageClientById","useThreadClient","runtimeState","emit","unsubscribers","threadEvents","event","unsubscribe","unstable_on","threadId","getState","push","unsub","t3","t4","composer","t5","messages","t6","m","map","state","length","isLoading","t7","capabilities","extras","isDisabled","isRunning","speech","suggestions","voice","isEmpty","t8","t9","methods","t10","selector","get","key","t11","t12","append","cancelRun","connectVoice","deleteMessage","disconnectVoice","export","getModelContext","getVoiceVolume","import","importExternalState","muteVoice","reset","resumeRun","startRun","stopSpeaking","subscribeVoiceVolume","unmuteVoice","message","__internal_getRuntime","ThreadClient"],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport type { ThreadRuntimeEventType } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadRuntime } from \"../../runtime/api/thread-runtime\";\nimport { useMemo, useEffect, type RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport { liveRef } from \"./liveRef\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport {\n useAssistantEmit,\n useClientLookup,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst useMessageClientById = ({\n runtime,\n id,\n threadIdRef,\n}: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: RefObject<string>;\n}) => {\n const messageRuntime = useMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return useResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n};\n\nconst MessageClientById = resource(useMessageClientById);\n\nconst useThreadClient = ({\n runtime,\n}: {\n runtime: ThreadRuntime;\n}): ClientOutput<\"thread\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n const threadEvents: ThreadRuntimeEventType[] = [\n \"runStart\",\n \"runEnd\",\n \"initialize\",\n \"modelContextUpdate\",\n ];\n\n for (const event of threadEvents) {\n const unsubscribe = runtime.unstable_on(event, () => {\n const threadId = runtime.getState()?.threadId || \"unknown\";\n emit(`thread.${event}`, {\n threadId,\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit]);\n\n const threadIdRef = useMemo(\n () => liveRef(() => runtime.getState()!.threadId),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = useClientLookup(\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef }), [\n runtime,\n m.id,\n threadIdRef,\n ]),\n ),\n );\n\n const state = useMemo<ThreadState>(() => {\n return {\n isEmpty: messages.state.length === 0 && !runtimeState.isLoading,\n isDisabled: runtimeState.isDisabled,\n isLoading: runtimeState.isLoading,\n isRunning: runtimeState.isRunning,\n capabilities: runtimeState.capabilities,\n state: runtimeState.state,\n suggestions: runtimeState.suggestions,\n extras: runtimeState.extras,\n speech: runtimeState.speech,\n voice: runtimeState.voice,\n\n composer: composer.state,\n messages: messages.state,\n };\n }, [runtimeState, messages, composer.state]);\n\n return {\n getState: () => state,\n composer: () => composer.methods,\n append: runtime.append,\n deleteMessage: runtime.deleteMessage,\n startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\n importExternalState: runtime.importExternalState,\n cancelRun: runtime.cancelRun,\n getModelContext: runtime.getModelContext,\n export: runtime.export,\n import: runtime.import,\n reset: runtime.reset,\n stopSpeaking: runtime.stopSpeaking,\n connectVoice: runtime.connectVoice,\n disconnectVoice: runtime.disconnectVoice,\n getVoiceVolume: runtime.getVoiceVolume,\n subscribeVoiceVolume: runtime.subscribeVoiceVolume,\n muteVoice: runtime.muteVoice,\n unmuteVoice: runtime.unmuteVoice,\n message: (selector) => {\n if (\"id\" in selector) {\n return messages.get({ key: selector.id });\n } else {\n return messages.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ThreadClient = resource(useThreadClient);\n"],"mappings":"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"}
@@ -8,8 +8,10 @@ import { AttachmentMethods } from "./attachment.js";
8
8
  //#region src/store/scopes/composer.d.ts
9
9
  type ComposerSendOptions = SendOptions & {
10
10
  /**
11
- * Whether to steer (interrupt the current run and process this message immediately).
12
- * When false (default), the message is queued and processed in order.
11
+ * Whether to steer (process this message next, interrupting the current run
12
+ * when the runtime supports it). Defaults to true while a queued run is in
13
+ * flight and false when idle. Pass false to queue behind the pending
14
+ * messages.
13
15
  */
14
16
  steer?: boolean;
15
17
  };
@@ -78,10 +80,12 @@ type ComposerMethods = {
78
80
  */
79
81
  setQuote(quote: QuoteInfo | undefined): void;
80
82
  /**
81
- * Access a queue item by index.
83
+ * Access a queue item by index or id.
82
84
  */
83
85
  queueItem(selector: {
84
86
  index: number;
87
+ } | {
88
+ id: string;
85
89
  }): QueueItemMethods;
86
90
  __internal_getRuntime?(): ComposerRuntime;
87
91
  };
@@ -1 +1 @@
1
- {"version":3,"file":"composer.d.ts","names":[],"sources":["../../../src/store/scopes/composer.ts"],"mappings":";;;;;;;;KAaY,sBAAsB;;;;;EAKhC;;KAGU;WACD;WACA,MAAM;WACN,sBAAsB;WACtB,WAAW;WACX;WACA;;;;;;;;;WASA;WACA;WACA;WACA;;;;;WAMA,WAAW;;;;;WAMX,OAAO;;;;;WAMP,gBAAgB;;KAGf;EACV,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM;EACd,aAAa,WAAW;EACxB,cAAc,kBAAkB,OAAO,mBAAmB;EAC1D,oBAAoB;EACpB,WAAW;IAAY;;IAAoB;MAAe;EAC1D,SAAS;EACT,KAAK,OAAO;EACZ;EACA;;;;;EAMA;;;;EAKA;;;;EAKA,SAAS,OAAO;;;;EAKhB,UAAU;IAAY;MAAkB;EAExC,0BAA0B;;KAGhB;EACV;EACA,OAAO;;KAGG;;;;;EAKV;IAAmB;IAAkB;;;;;;EAKrC;IAA4B;IAAkB;;EAC9C;IACE;IACA;IACA;IACA,QAAQ;IACR;;;KAIQ;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
1
+ {"version":3,"file":"composer.d.ts","names":[],"sources":["../../../src/store/scopes/composer.ts"],"mappings":";;;;;;;;KAaY,sBAAsB;;;;;;;EAOhC;;KAGU;WACD;WACA,MAAM;WACN,sBAAsB;WACtB,WAAW;WACX;WACA;;;;;;;;;WASA;WACA;WACA;WACA;;;;;WAMA,WAAW;;;;;WAMX,OAAO;;;;;WAMP,gBAAgB;;KAGf;EACV,YAAY;EACZ,QAAQ;EACR,QAAQ,MAAM;EACd,aAAa,WAAW;EACxB,cAAc,kBAAkB,OAAO,mBAAmB;EAC1D,oBAAoB;EACpB,WAAW;IAAY;;IAAoB;MAAe;EAC1D,SAAS;EACT,KAAK,OAAO;EACZ;EACA;;;;;EAMA;;;;EAKA;;;;EAKA,SAAS,OAAO;;;;EAKhB,UAAU;IAAY;;IAAoB;MAAe;EAEzD,0BAA0B;;KAGhB;EACV;EACA,OAAO;;KAGG;;;;;EAKV;IAAmB;IAAkB;;;;;;EAKrC;IAA4B;IAAkB;;EAC9C;IACE;IACA;IACA;IACA,QAAQ;IACR;;;KAIQ;EACV,SAAS;EACT,MAAM;EACN,QAAQ"}
@@ -1,18 +1,28 @@
1
+ import { FileMessagePart, TextMessagePart } from "../../types/message.js";
2
+ import { QueuePlacement } from "../../runtime/queue/external-thread-queue-adapter.js";
1
3
  //#region src/store/scopes/queue-item.d.ts
2
4
  type QueueItemState = {
3
5
  readonly id: string;
6
+ /** @deprecated Derive from the text parts of `parts` instead. Removal after 2026-11-05. */
4
7
  readonly prompt: string;
8
+ readonly parts: readonly (FileMessagePart | TextMessagePart)[];
5
9
  };
6
10
  declare const EMPTY_QUEUE_ITEMS: readonly QueueItemState[];
7
11
  type QueueItemMethods = {
8
12
  getState(): QueueItemState;
13
+ /** @deprecated Use `move({ lane: "steer", insertAfter: null })` instead. Removal after 2026-11-05. */
9
14
  steer(): void;
15
+ move(placement: QueuePlacement): void;
10
16
  remove(): void;
11
17
  };
12
18
  type QueueItemMeta = {
13
19
  source: "composer";
14
20
  query: {
21
+ type: "index";
15
22
  index: number;
23
+ } | {
24
+ type: "id";
25
+ id: string;
16
26
  };
17
27
  };
18
28
  type QueueItemClientSchema = {
@@ -1 +1 @@
1
- {"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";KAAY;WACD;WACA;;cAGE,4BAA4B;KAE7B;EACV,YAAY;EACZ;EACA;;KAGU;EACV;EACA;IAAS;;;KAGC;EACV,SAAS;EACT,MAAM"}
1
+ {"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";;;KAGY;WACD;;WAEA;WACA,iBAAiB,kBAAkB;;cAGjC,4BAA4B;KAE7B;EACV,YAAY;;EAEZ;EACA,KAAK,WAAW;EAChB;;KAGU;EACV;EACA;IAAS;IAAe;;IAAoB;IAAY;;;KAG9C;EACV,SAAS;EACT,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"queue-item.js","names":["QueueItemState","id","prompt","EMPTY_QUEUE_ITEMS","Object","freeze","QueueItemMethods","getState","steer","remove","QueueItemMeta","source","query","index","QueueItemClientSchema","methods","meta"],"sources":["../../../src/store/scopes/queue-item.ts"],"sourcesContent":["export type QueueItemState = {\n readonly id: string;\n readonly prompt: string;\n};\n\nexport const EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\n\nexport type QueueItemMethods = {\n getState(): QueueItemState;\n steer(): void;\n remove(): void;\n};\n\nexport type QueueItemMeta = {\n source: \"composer\";\n query: { index: number };\n};\n\nexport type QueueItemClientSchema = {\n methods: QueueItemMethods;\n meta: QueueItemMeta;\n};\n"],"mappings":";AAKA,MAAaG,oBAA+CC,OAAOC,OAAO,CAAA,CAAE"}
1
+ {"version":3,"file":"queue-item.js","names":["FileMessagePart","TextMessagePart","QueuePlacement","QueueItemState","id","prompt","parts","EMPTY_QUEUE_ITEMS","Object","freeze","QueueItemMethods","getState","steer","move","placement","remove","QueueItemMeta","source","query","type","index","QueueItemClientSchema","methods","meta"],"sources":["../../../src/store/scopes/queue-item.ts"],"sourcesContent":["import type { FileMessagePart, TextMessagePart } from \"../../types/message\";\nimport type { QueuePlacement } from \"../../runtime/queue/external-thread-queue-adapter\";\n\nexport type QueueItemState = {\n readonly id: string;\n /** @deprecated Derive from the text parts of `parts` instead. Removal after 2026-11-05. */\n readonly prompt: string;\n readonly parts: readonly (FileMessagePart | TextMessagePart)[];\n};\n\nexport const EMPTY_QUEUE_ITEMS: readonly QueueItemState[] = Object.freeze([]);\n\nexport type QueueItemMethods = {\n getState(): QueueItemState;\n /** @deprecated Use `move({ lane: \"steer\", insertAfter: null })` instead. Removal after 2026-11-05. */\n steer(): void;\n move(placement: QueuePlacement): void;\n remove(): void;\n};\n\nexport type QueueItemMeta = {\n source: \"composer\";\n query: { type: \"index\"; index: number } | { type: \"id\"; id: string };\n};\n\nexport type QueueItemClientSchema = {\n methods: QueueItemMethods;\n meta: QueueItemMeta;\n};\n"],"mappings":";AAUA,MAAaO,oBAA+CC,OAAOC,OAAO,CAAA,CAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@assistant-ui/core",
3
- "version": "0.3.5",
3
+ "version": "0.3.7",
4
4
  "description": "Framework-agnostic core runtime for assistant-ui",
5
5
  "keywords": [
6
6
  "assistant",
@@ -58,8 +58,14 @@
58
58
  "README.md"
59
59
  ],
60
60
  "sideEffects": false,
61
+ "scripts": {
62
+ "build": "aui-build",
63
+ "test": "vitest run",
64
+ "test:react-compiler": "vitest run --config vitest.react-compiler.config.ts",
65
+ "test:watch": "vitest"
66
+ },
61
67
  "dependencies": {
62
- "assistant-stream": "^0.3.33",
68
+ "assistant-stream": "^0.3.34",
63
69
  "nanoid": "^6.0.0"
64
70
  },
65
71
  "optionalDevDependencies": {
@@ -88,18 +94,18 @@
88
94
  }
89
95
  },
90
96
  "devDependencies": {
97
+ "@assistant-ui/store": "workspace:*",
98
+ "@assistant-ui/tap": "workspace:*",
99
+ "@assistant-ui/vite": "workspace:*",
100
+ "@assistant-ui/x-buildutils": "workspace:*",
91
101
  "@testing-library/react": "^16.3.2",
92
102
  "@types/react": "^19.2.17",
103
+ "assistant-cloud": "workspace:*",
93
104
  "jsdom": "^29.1.1",
94
105
  "react": "^19.2.8",
95
106
  "react-dom": "^19.2.8",
96
107
  "vitest": "^4.1.10",
97
- "zustand": "^5.0.14",
98
- "@assistant-ui/store": "0.3.3",
99
- "@assistant-ui/tap": "0.9.9",
100
- "@assistant-ui/vite": "0.0.11",
101
- "@assistant-ui/x-buildutils": "0.0.20",
102
- "assistant-cloud": "0.1.38"
108
+ "zustand": "^5.0.14"
103
109
  },
104
110
  "publishConfig": {
105
111
  "access": "public",
@@ -113,11 +119,5 @@
113
119
  },
114
120
  "bugs": {
115
121
  "url": "https://github.com/assistant-ui/assistant-ui/issues"
116
- },
117
- "scripts": {
118
- "build": "aui-build",
119
- "test": "vitest run",
120
- "test:react-compiler": "vitest run --config vitest.react-compiler.config.ts",
121
- "test:watch": "vitest"
122
122
  }
123
- }
123
+ }
package/src/index.ts CHANGED
@@ -326,7 +326,10 @@ export type { ExternalStoreSharedOptions } from "./runtimes/external-store/exter
326
326
  export { pickExternalStoreSharedOptions } from "./runtimes/external-store/external-store-shared-options";
327
327
 
328
328
  // Message queue
329
- export type { ExternalThreadQueueAdapter } from "./runtime/queue/external-thread-queue-adapter";
329
+ export type {
330
+ ExternalThreadQueueAdapter,
331
+ QueuePlacement,
332
+ } from "./runtime/queue/external-thread-queue-adapter";
330
333
  export type { ExternalThreadBranchAdapter } from "./runtime/branch/external-thread-branch-adapter";
331
334
  export {
332
335
  createMessageQueue,
@@ -338,6 +341,7 @@ export {
338
341
  export type {
339
342
  RemoteThreadListAdapter,
340
343
  RemoteThreadListOptions,
344
+ RemoteThreadListProviderComponent,
341
345
  RemoteThreadInitializeResponse,
342
346
  RemoteThreadMetadata,
343
347
  RemoteThreadListResponse,
@@ -4,7 +4,11 @@ import {
4
4
  type FC,
5
5
  type PropsWithChildren,
6
6
  } from "react";
7
- import { useAui, AuiProvider, type AssistantClient } from "@assistant-ui/store";
7
+ import {
8
+ AuiConfig,
9
+ AuiProvider,
10
+ type AssistantClient,
11
+ } from "@assistant-ui/store";
8
12
  import type { AssistantRuntime } from "../runtime/api/assistant-runtime";
9
13
  import type { AssistantRuntimeCore } from "../runtime/interfaces/assistant-runtime-core";
10
14
  import { RuntimeAdapter } from "./RuntimeAdapter";
@@ -16,12 +20,17 @@ export const getRenderComponent = (runtime: AssistantRuntime) => {
16
20
 
17
21
  export type AssistantProviderBaseProps = PropsWithChildren<{
18
22
  runtime: AssistantRuntime;
19
- aui?: AssistantClient | null;
23
+ aui?: AssistantClient | null | undefined;
24
+ config?: AuiConfig | undefined;
20
25
  }>;
21
26
 
22
27
  const AssistantProviderInner: FC<
23
- PropsWithChildren<{ runtime: AssistantRuntime }>
24
- > = ({ runtime, children }) => {
28
+ PropsWithChildren<{
29
+ runtime: AssistantRuntime;
30
+ aui: AssistantClient | null;
31
+ config: AuiConfig | undefined;
32
+ }>
33
+ > = ({ runtime, aui, config, children }) => {
25
34
  // The runtime has a stable identity but mutates in place: its options are
26
35
  // pushed in by an unconditional effect inside <RenderComponent />, so that
27
36
  // element must be re-created every commit for React to re-render it and
@@ -29,10 +38,10 @@ const AssistantProviderInner: FC<
29
38
  // stable RenderComponent type, which silences the effect and stops option
30
39
  // changes (e.g. unstable_enableMessageQueue) from reaching the runtime.
31
40
  "use no memo";
32
- const aui = useAui({ threads: RuntimeAdapter(runtime) });
33
41
  const RenderComponent = getRenderComponent(runtime);
42
+ const merged = AuiConfig({ ...config, threads: RuntimeAdapter(runtime) });
34
43
  return (
35
- <AuiProvider value={aui}>
44
+ <AuiProvider extends={aui} config={merged}>
36
45
  {RenderComponent && <RenderComponent />}
37
46
  {children}
38
47
  </AuiProvider>
@@ -40,16 +49,9 @@ const AssistantProviderInner: FC<
40
49
  };
41
50
 
42
51
  export const AssistantProviderBase: FC<AssistantProviderBaseProps> = memo(
43
- ({ runtime, aui = null, children }) => {
44
- const inner = (
45
- <AssistantProviderInner runtime={runtime}>
46
- {children}
47
- </AssistantProviderInner>
48
- );
49
- return aui ? (
50
- <AuiProvider value={aui}>{inner}</AuiProvider>
51
- ) : (
52
- <AuiProvider value={null}>{inner}</AuiProvider>
53
- );
54
- },
52
+ ({ runtime, aui = null, config, children }) => (
53
+ <AssistantProviderInner runtime={runtime} aui={aui} config={config}>
54
+ {children}
55
+ </AssistantProviderInner>
56
+ ),
55
57
  );