@assistant-ui/core 0.2.9 → 0.2.11

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 (437) hide show
  1. package/dist/adapters/attachment.d.ts.map +1 -1
  2. package/dist/adapters/attachment.js +22 -12
  3. package/dist/adapters/attachment.js.map +1 -1
  4. package/dist/adapters/directive-formatter.js.map +1 -1
  5. package/dist/adapters/speech.js.map +1 -1
  6. package/dist/index.d.ts +3 -1
  7. package/dist/index.js +2 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/internal.js +1 -1
  10. package/dist/model-context/frame/host.js.map +1 -1
  11. package/dist/model-context/frame/provider.js.map +1 -1
  12. package/dist/model-context/registry.js.map +1 -1
  13. package/dist/model-context/tool.d.ts +1 -1
  14. package/dist/model-context/tool.js +1 -1
  15. package/dist/model-context/tool.js.map +1 -1
  16. package/dist/model-context/types.js +17 -2
  17. package/dist/model-context/types.js.map +1 -1
  18. package/dist/react/AssistantProvider.js +1 -1
  19. package/dist/react/AssistantRuntimeProvider.d.ts +1 -1
  20. package/dist/react/AssistantRuntimeProvider.d.ts.map +1 -1
  21. package/dist/react/AssistantRuntimeProvider.js +1 -1
  22. package/dist/react/RuntimeAdapter.js +4 -2
  23. package/dist/react/RuntimeAdapter.js.map +1 -1
  24. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  25. package/dist/react/adapters/LocalStorageThreadListAdapter.js +13 -3
  26. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  27. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  28. package/dist/react/client/DataRenderers.js +6 -5
  29. package/dist/react/client/DataRenderers.js.map +1 -1
  30. package/dist/react/client/Interactables.d.ts.map +1 -1
  31. package/dist/react/client/Interactables.js +30 -29
  32. package/dist/react/client/Interactables.js.map +1 -1
  33. package/dist/react/client/Tools.d.ts.map +1 -1
  34. package/dist/react/client/Tools.js +19 -12
  35. package/dist/react/client/Tools.js.map +1 -1
  36. package/dist/react/index.d.ts +10 -5
  37. package/dist/react/index.js +7 -2
  38. package/dist/react/model-context/define-mcp-toolkit.d.ts +12 -0
  39. package/dist/react/model-context/define-mcp-toolkit.d.ts.map +1 -0
  40. package/dist/react/model-context/define-mcp-toolkit.js +14 -0
  41. package/dist/react/model-context/define-mcp-toolkit.js.map +1 -0
  42. package/dist/react/model-context/define-toolkit.d.ts +10 -12
  43. package/dist/react/model-context/define-toolkit.d.ts.map +1 -1
  44. package/dist/react/model-context/define-toolkit.js +2 -15
  45. package/dist/react/model-context/define-toolkit.js.map +1 -1
  46. package/dist/react/model-context/external-tool.d.ts +14 -0
  47. package/dist/react/model-context/external-tool.d.ts.map +1 -0
  48. package/dist/react/model-context/external-tool.js +17 -0
  49. package/dist/react/model-context/external-tool.js.map +1 -0
  50. package/dist/react/model-context/human-tool.d.ts +27 -0
  51. package/dist/react/model-context/human-tool.d.ts.map +1 -0
  52. package/dist/react/model-context/human-tool.js +30 -0
  53. package/dist/react/model-context/human-tool.js.map +1 -0
  54. package/dist/react/model-context/makeAssistantTool.d.ts +8 -0
  55. package/dist/react/model-context/makeAssistantTool.d.ts.map +1 -1
  56. package/dist/react/model-context/makeAssistantTool.js +4 -0
  57. package/dist/react/model-context/makeAssistantTool.js.map +1 -1
  58. package/dist/react/model-context/makeAssistantToolUI.d.ts +8 -0
  59. package/dist/react/model-context/makeAssistantToolUI.d.ts.map +1 -1
  60. package/dist/react/model-context/makeAssistantToolUI.js +4 -0
  61. package/dist/react/model-context/makeAssistantToolUI.js.map +1 -1
  62. package/dist/react/model-context/provider-tool.d.ts +15 -0
  63. package/dist/react/model-context/provider-tool.d.ts.map +1 -0
  64. package/dist/react/model-context/provider-tool.js +12 -0
  65. package/dist/react/model-context/provider-tool.js.map +1 -0
  66. package/dist/react/model-context/stub-tool.d.ts +12 -0
  67. package/dist/react/model-context/stub-tool.d.ts.map +1 -0
  68. package/dist/react/model-context/stub-tool.js +15 -0
  69. package/dist/react/model-context/stub-tool.js.map +1 -0
  70. package/dist/react/model-context/toolbox.d.ts +64 -17
  71. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  72. package/dist/react/model-context/toolbox.js +19 -1
  73. package/dist/react/model-context/toolbox.js.map +1 -1
  74. package/dist/react/model-context/useAssistantContext.js +1 -1
  75. package/dist/react/model-context/useAssistantContext.js.map +1 -1
  76. package/dist/react/model-context/useAssistantDataUI.js +1 -1
  77. package/dist/react/model-context/useAssistantDataUI.js.map +1 -1
  78. package/dist/react/model-context/useAssistantInstructions.js +1 -1
  79. package/dist/react/model-context/useAssistantInstructions.js.map +1 -1
  80. package/dist/react/model-context/useAssistantInteractable.js +1 -1
  81. package/dist/react/model-context/useAssistantInteractable.js.map +1 -1
  82. package/dist/react/model-context/useAssistantTool.d.ts +11 -1
  83. package/dist/react/model-context/useAssistantTool.d.ts.map +1 -1
  84. package/dist/react/model-context/useAssistantTool.js +12 -6
  85. package/dist/react/model-context/useAssistantTool.js.map +1 -1
  86. package/dist/react/model-context/useAssistantToolUI.d.ts +13 -4
  87. package/dist/react/model-context/useAssistantToolUI.d.ts.map +1 -1
  88. package/dist/react/model-context/useAssistantToolUI.js +7 -4
  89. package/dist/react/model-context/useAssistantToolUI.js.map +1 -1
  90. package/dist/react/model-context/useAuiToolOverrides.d.ts +22 -0
  91. package/dist/react/model-context/useAuiToolOverrides.d.ts.map +1 -0
  92. package/dist/react/model-context/useAuiToolOverrides.js +31 -0
  93. package/dist/react/model-context/useAuiToolOverrides.js.map +1 -0
  94. package/dist/react/model-context/useInlineRender.js +1 -1
  95. package/dist/react/model-context/useInlineRender.js.map +1 -1
  96. package/dist/react/model-context/useInteractableState.js +1 -1
  97. package/dist/react/model-context/useInteractableState.js.map +1 -1
  98. package/dist/react/model-context/useToolArgsStatus.js +1 -1
  99. package/dist/react/primitive-hooks/useActionBarCopy.js +1 -1
  100. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  101. package/dist/react/primitive-hooks/useActionBarEdit.js +1 -1
  102. package/dist/react/primitive-hooks/useActionBarEdit.js.map +1 -1
  103. package/dist/react/primitive-hooks/useActionBarFeedback.js +1 -1
  104. package/dist/react/primitive-hooks/useActionBarFeedback.js.map +1 -1
  105. package/dist/react/primitive-hooks/useActionBarReload.js +1 -1
  106. package/dist/react/primitive-hooks/useActionBarReload.js.map +1 -1
  107. package/dist/react/primitive-hooks/useActionBarSpeak.js +1 -1
  108. package/dist/react/primitive-hooks/useActionBarSpeak.js.map +1 -1
  109. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js +1 -1
  110. package/dist/react/primitive-hooks/useActionBarStopSpeaking.js.map +1 -1
  111. package/dist/react/primitive-hooks/useBranchPickerNext.js +1 -1
  112. package/dist/react/primitive-hooks/useBranchPickerNext.js.map +1 -1
  113. package/dist/react/primitive-hooks/useBranchPickerPrevious.js +1 -1
  114. package/dist/react/primitive-hooks/useBranchPickerPrevious.js.map +1 -1
  115. package/dist/react/primitive-hooks/useComposerAddAttachment.js +1 -1
  116. package/dist/react/primitive-hooks/useComposerAddAttachment.js.map +1 -1
  117. package/dist/react/primitive-hooks/useComposerCancel.js +1 -1
  118. package/dist/react/primitive-hooks/useComposerCancel.js.map +1 -1
  119. package/dist/react/primitive-hooks/useComposerDictate.js +1 -1
  120. package/dist/react/primitive-hooks/useComposerDictate.js.map +1 -1
  121. package/dist/react/primitive-hooks/useComposerSend.js +1 -1
  122. package/dist/react/primitive-hooks/useComposerSend.js.map +1 -1
  123. package/dist/react/primitive-hooks/useEditComposerCancel.js +1 -1
  124. package/dist/react/primitive-hooks/useEditComposerCancel.js.map +1 -1
  125. package/dist/react/primitive-hooks/useEditComposerSend.js +1 -1
  126. package/dist/react/primitive-hooks/useEditComposerSend.js.map +1 -1
  127. package/dist/react/primitive-hooks/useMessageBranching.js +1 -1
  128. package/dist/react/primitive-hooks/useMessageBranching.js.map +1 -1
  129. package/dist/react/primitive-hooks/useMessageReload.js +1 -1
  130. package/dist/react/primitive-hooks/useMessageReload.js.map +1 -1
  131. package/dist/react/primitive-hooks/useSuggestionTrigger.js +1 -1
  132. package/dist/react/primitive-hooks/useSuggestionTrigger.js.map +1 -1
  133. package/dist/react/primitive-hooks/useThreadListItemArchive.js +1 -1
  134. package/dist/react/primitive-hooks/useThreadListItemArchive.js.map +1 -1
  135. package/dist/react/primitive-hooks/useThreadListItemDelete.js +1 -1
  136. package/dist/react/primitive-hooks/useThreadListItemDelete.js.map +1 -1
  137. package/dist/react/primitive-hooks/useThreadListItemTrigger.js +1 -1
  138. package/dist/react/primitive-hooks/useThreadListItemTrigger.js.map +1 -1
  139. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js +1 -1
  140. package/dist/react/primitive-hooks/useThreadListItemUnarchive.js.map +1 -1
  141. package/dist/react/primitive-hooks/useThreadListLoadMore.js +1 -1
  142. package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
  143. package/dist/react/primitive-hooks/useThreadListNew.js +1 -1
  144. package/dist/react/primitive-hooks/useThreadListNew.js.map +1 -1
  145. package/dist/react/primitive-hooks/useVoice.js +1 -1
  146. package/dist/react/primitive-hooks/useVoice.js.map +1 -1
  147. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts +1 -1
  148. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
  149. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  150. package/dist/react/primitives/composer/ComposerAttachments.js +1 -1
  151. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  152. package/dist/react/primitives/composer/ComposerQueue.js +1 -1
  153. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
  154. package/dist/react/primitives/generativeUI/GenerativeUI.js +1 -1
  155. package/dist/react/primitives/generativeUI/GenerativeUI.js.map +1 -1
  156. package/dist/react/primitives/message/MessageAttachments.js +1 -1
  157. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  158. package/dist/react/primitives/message/MessageGroupedParts.js +1 -1
  159. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  160. package/dist/react/primitives/message/MessageParts.d.ts +1 -1
  161. package/dist/react/primitives/message/MessageParts.js +1 -1
  162. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  163. package/dist/react/primitives/message/MessageQuote.js +1 -1
  164. package/dist/react/primitives/part/PartMessages.d.ts +12 -10
  165. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  166. package/dist/react/primitives/part/PartMessages.js +13 -11
  167. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  168. package/dist/react/primitives/thread/ThreadMessages.js +1 -1
  169. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  170. package/dist/react/primitives/thread/ThreadSuggestions.js +1 -1
  171. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  172. package/dist/react/primitives/threadList/ThreadListItems.js +1 -1
  173. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  174. package/dist/react/providers/AttachmentByIndexProvider.js.map +1 -1
  175. package/dist/react/providers/ChainOfThoughtByIndicesProvider.js.map +1 -1
  176. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  177. package/dist/react/providers/MessageByIndexProvider.js.map +1 -1
  178. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  179. package/dist/react/providers/QueueItemByIndexProvider.js.map +1 -1
  180. package/dist/react/providers/ReadonlyThreadProvider.js +1 -1
  181. package/dist/react/providers/ReadonlyThreadProvider.js.map +1 -1
  182. package/dist/react/providers/SuggestionByIndexProvider.js.map +1 -1
  183. package/dist/react/providers/TextMessagePartProvider.d.ts.map +1 -1
  184. package/dist/react/providers/TextMessagePartProvider.js +4 -3
  185. package/dist/react/providers/TextMessagePartProvider.js.map +1 -1
  186. package/dist/react/providers/ThreadListItemByIndexProvider.js.map +1 -1
  187. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -0
  188. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  189. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -1
  190. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  191. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +8 -0
  192. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  193. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +29 -1
  194. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  195. package/dist/react/runtimes/RuntimeAdapterProvider.js +1 -1
  196. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +1 -1
  197. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  198. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  199. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +10 -3
  200. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  201. package/dist/react/runtimes/createMessageConverter.d.ts +2 -2
  202. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  203. package/dist/react/runtimes/createMessageConverter.js.map +1 -1
  204. package/dist/react/runtimes/external-message-converter.d.ts +4 -3
  205. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  206. package/dist/react/runtimes/external-message-converter.js +1 -1
  207. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  208. package/dist/react/runtimes/useExternalStoreRuntime.js +1 -1
  209. package/dist/react/runtimes/useExternalStoreSharedOptions.js +1 -1
  210. package/dist/react/runtimes/useLocalRuntime.d.ts +2 -1
  211. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  212. package/dist/react/runtimes/useLocalRuntime.js +4 -3
  213. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  214. package/dist/react/runtimes/useRemoteThreadListRuntime.js +1 -1
  215. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  216. package/dist/react/utils/groupParts.d.ts +1 -1
  217. package/dist/react/utils/groupParts.js.map +1 -1
  218. package/dist/runtime/api/attachment-runtime.js.map +1 -1
  219. package/dist/runtime/api/composer-runtime.d.ts +8 -2
  220. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  221. package/dist/runtime/api/composer-runtime.js +14 -0
  222. package/dist/runtime/api/composer-runtime.js.map +1 -1
  223. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  224. package/dist/runtime/api/message-runtime.js +1 -1
  225. package/dist/runtime/api/message-runtime.js.map +1 -1
  226. package/dist/runtime/api/thread-list-item-runtime.d.ts +2 -0
  227. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  228. package/dist/runtime/api/thread-list-item-runtime.js +6 -0
  229. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  230. package/dist/runtime/api/thread-runtime.d.ts +7 -0
  231. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  232. package/dist/runtime/api/thread-runtime.js.map +1 -1
  233. package/dist/runtime/base/base-composer-runtime-core.d.ts +4 -0
  234. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  235. package/dist/runtime/base/base-composer-runtime-core.js +7 -1
  236. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  237. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  238. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +4 -0
  239. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  240. package/dist/runtime/base/default-thread-composer-runtime-core.js +17 -1
  241. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  242. package/dist/runtime/interfaces/composer-runtime-core.d.ts +6 -1
  243. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  244. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +1 -0
  245. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  246. package/dist/runtime/interfaces/thread-runtime-core.d.ts +4 -0
  247. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  248. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +20 -0
  249. package/dist/runtime/queue/external-thread-queue-adapter.d.ts.map +1 -0
  250. package/dist/runtime/queue/external-thread-queue-adapter.js +0 -0
  251. package/dist/runtime/queue/message-queue.d.ts +20 -0
  252. package/dist/runtime/queue/message-queue.d.ts.map +1 -0
  253. package/dist/runtime/queue/message-queue.js +97 -0
  254. package/dist/runtime/queue/message-queue.js.map +1 -0
  255. package/dist/runtime/utils/message-repository.js.map +1 -1
  256. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  257. package/dist/runtimes/external-store/external-store-adapter.d.ts +5 -1
  258. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  259. package/dist/runtimes/external-store/external-store-runtime-core.js.map +1 -1
  260. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +1 -0
  261. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  262. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +5 -0
  263. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  264. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +4 -0
  265. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  266. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +20 -2
  267. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  268. package/dist/runtimes/local/local-runtime-core.js.map +1 -1
  269. package/dist/runtimes/local/local-runtime-options.d.ts +5 -0
  270. package/dist/runtimes/local/local-runtime-options.d.ts.map +1 -1
  271. package/dist/runtimes/local/local-thread-runtime-core.d.ts +7 -0
  272. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  273. package/dist/runtimes/local/local-thread-runtime-core.js +45 -0
  274. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  275. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts +3 -0
  276. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  277. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js +3 -0
  278. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.js.map +1 -1
  279. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts +1 -0
  280. package/dist/runtimes/remote-thread-list/adapter/in-memory.d.ts.map +1 -1
  281. package/dist/runtimes/remote-thread-list/adapter/in-memory.js +3 -0
  282. package/dist/runtimes/remote-thread-list/adapter/in-memory.js.map +1 -1
  283. package/dist/runtimes/remote-thread-list/empty-thread-core.d.ts.map +1 -1
  284. package/dist/runtimes/remote-thread-list/empty-thread-core.js +3 -0
  285. package/dist/runtimes/remote-thread-list/empty-thread-core.js.map +1 -1
  286. package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
  287. package/dist/runtimes/remote-thread-list/types.d.ts +1 -0
  288. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  289. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  290. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  291. package/dist/store/clients/chain-of-thought-client.js +6 -5
  292. package/dist/store/clients/chain-of-thought-client.js.map +1 -1
  293. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  294. package/dist/store/clients/model-context-client.js +6 -5
  295. package/dist/store/clients/model-context-client.js.map +1 -1
  296. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  297. package/dist/store/clients/no-op-composer-client.js +4 -3
  298. package/dist/store/clients/no-op-composer-client.js.map +1 -1
  299. package/dist/store/clients/runtime-adapter.d.ts.map +1 -1
  300. package/dist/store/clients/runtime-adapter.js +7 -6
  301. package/dist/store/clients/runtime-adapter.js.map +1 -1
  302. package/dist/store/clients/suggestions.d.ts.map +1 -1
  303. package/dist/store/clients/suggestions.js +7 -6
  304. package/dist/store/clients/suggestions.js.map +1 -1
  305. package/dist/store/clients/thread-message-client.d.ts.map +1 -1
  306. package/dist/store/clients/thread-message-client.js +13 -12
  307. package/dist/store/clients/thread-message-client.js.map +1 -1
  308. package/dist/store/index.d.ts +1 -1
  309. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  310. package/dist/store/runtime-clients/attachment-runtime-client.js +3 -3
  311. package/dist/store/runtime-clients/attachment-runtime-client.js.map +1 -1
  312. package/dist/store/runtime-clients/composer-runtime-client.d.ts +12 -5
  313. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  314. package/dist/store/runtime-clients/composer-runtime-client.js +32 -16
  315. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  316. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  317. package/dist/store/runtime-clients/message-part-runtime-client.js +3 -3
  318. package/dist/store/runtime-clients/message-part-runtime-client.js.map +1 -1
  319. package/dist/store/runtime-clients/message-runtime-client.d.ts +6 -3
  320. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  321. package/dist/store/runtime-clients/message-runtime-client.js +17 -16
  322. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  323. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  324. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +9 -7
  325. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  326. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  327. package/dist/store/runtime-clients/thread-list-runtime-client.js +11 -10
  328. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  329. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  330. package/dist/store/runtime-clients/thread-runtime-client.js +15 -14
  331. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  332. package/dist/store/runtime-clients/useSubscribable.d.ts +7 -0
  333. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -0
  334. package/dist/store/runtime-clients/useSubscribable.js +16 -0
  335. package/dist/store/runtime-clients/useSubscribable.js.map +1 -0
  336. package/dist/store/scope-registration.d.ts +1 -1
  337. package/dist/store/scopes/composer.d.ts +1 -1
  338. package/dist/store/scopes/queue-item.d.ts +2 -1
  339. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  340. package/dist/store/scopes/queue-item.js +6 -0
  341. package/dist/store/scopes/queue-item.js.map +1 -0
  342. package/dist/store/scopes/thread-list-item.d.ts +1 -0
  343. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  344. package/dist/store/scopes/thread.d.ts +1 -1
  345. package/dist/store/scopes/threads.d.ts +1 -1
  346. package/dist/types/message.d.ts +2 -1
  347. package/dist/types/message.d.ts.map +1 -1
  348. package/dist/types/message.js.map +1 -1
  349. package/dist/utils/composite-context-provider.d.ts +1 -1
  350. package/dist/utils/composite-context-provider.js +3 -1
  351. package/dist/utils/composite-context-provider.js.map +1 -1
  352. package/dist/utils/json/is-json.js.map +1 -1
  353. package/dist/utils/text.js.map +1 -1
  354. package/package.json +15 -11
  355. package/src/adapters/attachment.ts +24 -4
  356. package/src/index.ts +8 -0
  357. package/src/model-context/tool.ts +1 -1
  358. package/src/model-context/types.ts +21 -3
  359. package/src/react/RuntimeAdapter.ts +6 -4
  360. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +15 -2
  361. package/src/react/client/DataRenderers.ts +48 -42
  362. package/src/react/client/Interactables.ts +263 -267
  363. package/src/react/client/Tools.ts +123 -115
  364. package/src/react/index.ts +16 -3
  365. package/src/react/model-context/define-mcp-toolkit.ts +16 -0
  366. package/src/react/model-context/define-toolkit.test.ts +101 -6
  367. package/src/react/model-context/define-toolkit.ts +35 -18
  368. package/src/react/model-context/external-tool.ts +16 -0
  369. package/src/react/model-context/human-tool.ts +32 -0
  370. package/src/react/model-context/makeAssistantTool.ts +8 -0
  371. package/src/react/model-context/makeAssistantToolUI.ts +8 -0
  372. package/src/react/model-context/provider-tool.ts +30 -0
  373. package/src/react/model-context/stub-tool.ts +14 -0
  374. package/src/react/model-context/toolbox.test.ts +182 -0
  375. package/src/react/model-context/toolbox.ts +191 -23
  376. package/src/react/model-context/useAssistantTool.ts +28 -8
  377. package/src/react/model-context/useAssistantToolUI.ts +13 -4
  378. package/src/react/model-context/useAuiToolOverrides.ts +38 -0
  379. package/src/react/primitives/message/MessageGroupedParts.tsx +1 -1
  380. package/src/react/primitives/part/PartMessages.tsx +12 -10
  381. package/src/react/providers/TextMessagePartProvider.tsx +31 -32
  382. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +43 -0
  383. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +9 -0
  384. package/src/react/runtimes/createMessageConverter.ts +2 -1
  385. package/src/react/runtimes/external-message-converter.ts +5 -3
  386. package/src/react/runtimes/useLocalRuntime.ts +2 -0
  387. package/src/runtime/api/composer-runtime.ts +26 -0
  388. package/src/runtime/api/thread-list-item-runtime.ts +15 -0
  389. package/src/runtime/base/base-composer-runtime-core.ts +11 -0
  390. package/src/runtime/base/default-thread-composer-runtime-core.ts +22 -0
  391. package/src/runtime/interfaces/composer-runtime-core.ts +7 -0
  392. package/src/runtime/interfaces/thread-list-runtime-core.ts +4 -0
  393. package/src/runtime/interfaces/thread-runtime-core.ts +5 -0
  394. package/src/runtime/queue/external-thread-queue-adapter.ts +14 -0
  395. package/src/runtime/queue/message-queue.ts +128 -0
  396. package/src/runtimes/external-store/external-store-adapter.ts +10 -0
  397. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +13 -0
  398. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +31 -2
  399. package/src/runtimes/local/local-runtime-options.ts +6 -0
  400. package/src/runtimes/local/local-thread-runtime-core.ts +70 -0
  401. package/src/runtimes/readonly/ReadonlyThreadRuntimeCore.ts +4 -0
  402. package/src/runtimes/remote-thread-list/adapter/in-memory.ts +4 -0
  403. package/src/runtimes/remote-thread-list/empty-thread-core.ts +4 -0
  404. package/src/runtimes/remote-thread-list/types.ts +4 -0
  405. package/src/store/clients/chain-of-thought-client.ts +24 -25
  406. package/src/store/clients/model-context-client.test.ts +87 -2
  407. package/src/store/clients/model-context-client.ts +22 -19
  408. package/src/store/clients/no-op-composer-client.ts +69 -66
  409. package/src/store/clients/runtime-adapter.ts +9 -6
  410. package/src/store/clients/suggestions.ts +41 -40
  411. package/src/store/clients/thread-message-client.ts +127 -132
  412. package/src/store/runtime-clients/attachment-runtime-client.ts +7 -3
  413. package/src/store/runtime-clients/composer-runtime-client.ts +142 -113
  414. package/src/store/runtime-clients/message-part-runtime-client.ts +16 -14
  415. package/src/store/runtime-clients/message-runtime-client.ts +124 -122
  416. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +44 -44
  417. package/src/store/runtime-clients/thread-list-runtime-client.ts +83 -80
  418. package/src/store/runtime-clients/thread-runtime-client.ts +113 -119
  419. package/src/store/runtime-clients/{tap-subscribable.ts → useSubscribable.ts} +4 -4
  420. package/src/store/scopes/queue-item.ts +2 -0
  421. package/src/store/scopes/thread-list-item.ts +1 -0
  422. package/src/tests/RemoteThreadListThreadListRuntimeCore-custom-metadata.test.ts +69 -1
  423. package/src/tests/attachment-adapters.test.ts +86 -0
  424. package/src/tests/external-store-thread-runtime-core.test.ts +125 -0
  425. package/src/tests/message-queue.test.ts +168 -0
  426. package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
  427. package/src/types/message.ts +2 -0
  428. package/src/utils/composite-context-provider.ts +3 -1
  429. package/dist/react/model-context/hitl.d.ts +0 -19
  430. package/dist/react/model-context/hitl.d.ts.map +0 -1
  431. package/dist/react/model-context/hitl.js +0 -22
  432. package/dist/react/model-context/hitl.js.map +0 -1
  433. package/dist/store/runtime-clients/tap-subscribable.d.ts +0 -7
  434. package/dist/store/runtime-clients/tap-subscribable.d.ts.map +0 -1
  435. package/dist/store/runtime-clients/tap-subscribable.js +0 -16
  436. package/dist/store/runtime-clients/tap-subscribable.js.map +0 -1
  437. package/src/react/model-context/hitl.ts +0 -22
@@ -1,37 +1,38 @@
1
- import { tapSubscribable } from "./tap-subscribable.js";
1
+ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { AttachmentRuntimeClient } from "./attachment-runtime-client.js";
3
3
  import { MessagePartClient } from "./message-part-runtime-client.js";
4
4
  import { ComposerClient } from "./composer-runtime-client.js";
5
- import { tapClientLookup, tapClientResource } from "@assistant-ui/store";
6
- import { resource, tapMemo, tapResource, tapState, withKey } from "@assistant-ui/tap";
5
+ import { useMemo, useState } from "@assistant-ui/tap/react-shim";
6
+ import { useClientLookup, useClientResource } from "@assistant-ui/store";
7
+ import { resource, useResource, withKey } from "@assistant-ui/tap";
7
8
  //#region src/store/runtime-clients/message-runtime-client.ts
8
- const MessageAttachmentClientByIndex = resource(({ runtime, index }) => {
9
- return tapResource(AttachmentRuntimeClient({ runtime: tapMemo(() => runtime.getAttachmentByIndex(index), [runtime, index]) }));
9
+ const MessageAttachmentClientByIndex = resource(function MessageAttachmentClientByIndex({ runtime, index }) {
10
+ return useResource(AttachmentRuntimeClient({ runtime: useMemo(() => runtime.getAttachmentByIndex(index), [runtime, index]) }));
10
11
  });
11
- const MessagePartByIndex = resource(({ runtime, index }) => {
12
- return tapResource(MessagePartClient({ runtime: tapMemo(() => runtime.getMessagePartByIndex(index), [runtime, index]) }));
12
+ const MessagePartByIndex = resource(function MessagePartByIndex({ runtime, index }) {
13
+ return useResource(MessagePartClient({ runtime: useMemo(() => runtime.getMessagePartByIndex(index), [runtime, index]) }));
13
14
  });
14
- const MessageClient = resource(({ runtime, threadIdRef }) => {
15
- const runtimeState = tapSubscribable(runtime);
16
- const [isCopiedState, setIsCopied] = tapState(false);
17
- const [isHoveringState, setIsHovering] = tapState(false);
18
- const messageIdRef = tapMemo(() => ({ get current() {
15
+ const MessageClient = resource(function MessageClient({ runtime, threadIdRef }) {
16
+ const runtimeState = useSubscribable(runtime);
17
+ const [isCopiedState, setIsCopied] = useState(false);
18
+ const [isHoveringState, setIsHovering] = useState(false);
19
+ const messageIdRef = useMemo(() => ({ get current() {
19
20
  return runtime.getState().id;
20
21
  } }), [runtime]);
21
- const composer = tapClientResource(ComposerClient({
22
+ const composer = useClientResource(ComposerClient({
22
23
  runtime: runtime.composer,
23
24
  threadIdRef,
24
25
  messageIdRef
25
26
  }));
26
- const parts = tapClientLookup(() => runtimeState.content.map((part, idx) => withKey("toolCallId" in part && part.toolCallId != null ? `toolCallId-${part.toolCallId}` : `index-${idx}`, MessagePartByIndex({
27
+ const parts = useClientLookup(() => runtimeState.content.map((part, idx) => withKey("toolCallId" in part && part.toolCallId != null ? `toolCallId-${part.toolCallId}` : `index-${idx}`, MessagePartByIndex({
27
28
  runtime,
28
29
  index: idx
29
30
  }))), [runtimeState.content, runtime]);
30
- const attachments = tapClientLookup(() => (runtimeState.attachments ?? []).map((attachment, idx) => withKey(attachment.id, MessageAttachmentClientByIndex({
31
+ const attachments = useClientLookup(() => (runtimeState.attachments ?? []).map((attachment, idx) => withKey(attachment.id, MessageAttachmentClientByIndex({
31
32
  runtime,
32
33
  index: idx
33
34
  }))), [runtimeState.attachments, runtime]);
34
- const state = tapMemo(() => {
35
+ const state = useMemo(() => {
35
36
  return {
36
37
  ...runtimeState,
37
38
  parts: parts.state,
@@ -1 +1 @@
1
- {"version":3,"file":"message-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"sourcesContent":["import {\n withKey,\n resource,\n tapResource,\n tapMemo,\n tapState,\n type tapRef,\n} from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n tapClientLookup,\n tapClientResource,\n} from \"@assistant-ui/store\";\nimport type { MessageRuntime } from \"../../runtime/api/message-runtime\";\nimport { tapSubscribable } from \"./tap-subscribable\";\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 MessageAttachmentClientByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const attachmentRuntime = tapMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n return tapResource(AttachmentRuntimeClient({ runtime: attachmentRuntime }));\n },\n);\n\nconst MessagePartByIndex = resource(\n ({ runtime, index }: { runtime: MessageRuntime; index: number }) => {\n const partRuntime = tapMemo(\n () => runtime.getMessagePartByIndex(index),\n [runtime, index],\n );\n return tapResource(MessagePartClient({ runtime: partRuntime }));\n },\n);\n\nexport const MessageClient = resource(\n ({\n runtime,\n threadIdRef,\n }: {\n runtime: MessageRuntime;\n threadIdRef: tapRef.RefObject<string>;\n }): ClientOutput<\"message\"> => {\n const runtimeState = tapSubscribable(runtime);\n\n const [isCopiedState, setIsCopied] = tapState(false);\n const [isHoveringState, setIsHovering] = tapState(false);\n\n const messageIdRef = tapMemo(\n () => ({\n get current() {\n return runtime.getState().id;\n },\n }),\n [runtime],\n );\n\n const composer = tapClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n messageIdRef,\n }),\n );\n const parts = tapClientLookup(\n () =>\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 ),\n ),\n [runtimeState.content, runtime],\n );\n\n const attachments = tapClientLookup(\n () =>\n (runtimeState.attachments ?? []).map((attachment, idx) =>\n withKey(\n attachment.id,\n MessageAttachmentClientByIndex({ runtime, index: idx }),\n ),\n ),\n [runtimeState.attachments, runtime],\n );\n\n const state = tapMemo<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 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);\n"],"mappings":";;;;;;;AAoBA,MAAM,iCAAiC,UACpC,EAAE,SAAS,YAAwD;CAKlE,OAAO,YAAY,wBAAwB,EAAE,SAJnB,cAClB,QAAQ,qBAAqB,KAAK,GACxC,CAAC,SAAS,KAAK,CAEqD,EAAE,CAAC,CAAC;AAC5E,CACF;AAEA,MAAM,qBAAqB,UACxB,EAAE,SAAS,YAAwD;CAKlE,OAAO,YAAY,kBAAkB,EAAE,SAJnB,cACZ,QAAQ,sBAAsB,KAAK,GACzC,CAAC,SAAS,KAAK,CAEyC,EAAE,CAAC,CAAC;AAChE,CACF;AAEA,MAAa,gBAAgB,UAC1B,EACC,SACA,kBAI6B;CAC7B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,CAAC,eAAe,eAAe,SAAS,KAAK;CACnD,MAAM,CAAC,iBAAiB,iBAAiB,SAAS,KAAK;CAEvD,MAAM,eAAe,eACZ,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,EAAE;CAC5B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;EACA;CACF,CAAC,CACH;CACA,MAAM,QAAQ,sBAEV,aAAa,QAAQ,KAAK,MAAM,QAC9B,QACE,gBAAgB,QAAQ,KAAK,cAAc,OACvC,cAAc,KAAK,eACnB,SAAS,OACb,mBAAmB;EAAE;EAAS,OAAO;CAAI,CAAC,CAC5C,CACF,GACF,CAAC,aAAa,SAAS,OAAO,CAChC;CAEA,MAAM,cAAc,uBAEf,aAAa,eAAe,CAAC,GAAG,KAAK,YAAY,QAChD,QACE,WAAW,IACX,+BAA+B;EAAE;EAAS,OAAO;CAAI,CAAC,CACxD,CACF,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,GAAI;GAEJ,OAAO,MAAM;GACb,UAAU,SAAS;GAEnB,UAAU;GACV,YAAY;EACd;CACF,GAAG;EACD;EACA,MAAM;EACN,SAAS;EACT;EACA;CACF,CAAC;CAED,OAAO;EACL,gBAAgB;EAEhB,gBAAgB,SAAS;EAEzB,SAAS,WAAW,QAAQ,OAAO,MAAM;EACzC,aAAa,QAAQ,MAAM;EAC3B,oBAAoB,QAAQ,aAAa;EACzC,iBAAiB,aAAa,QAAQ,eAAe,QAAQ;EAC7D,iBAAiB,YAAY,QAAQ,eAAe,OAAO;EAC3D,mBAAmB,QAAQ,qBAAqB;EAChD,OAAO,aAAa;GAClB,IAAI,WAAW,UACb,OAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;QAE1C,OAAO,MAAM,IAAI,EAAE,KAAK,cAAc,SAAS,aAAa,CAAC;EAEjE;EAEA,aAAa,aAAa;GACxB,IAAI,QAAQ,UACV,OAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAE3C,OAAO,YAAY,IAAI,QAAQ;EAEnC;EAEA;EACA;EAEA,6BAA6B;CAC/B;AACF,CACF"}
1
+ {"version":3,"file":"message-runtime-client.js","names":[],"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 { 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 MessageAttachmentClientByIndex = resource(\n function MessageAttachmentClientByIndex({\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);\n\nconst MessagePartByIndex = resource(function MessagePartByIndex({\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\nexport const MessageClient = resource(function MessageClient({\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 () => ({\n get current() {\n return runtime.getState().id;\n },\n }),\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 () =>\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 ),\n ),\n [runtimeState.content, runtime],\n );\n\n const attachments = useClientLookup(\n () =>\n (runtimeState.attachments ?? []).map((attachment, idx) =>\n withKey(\n attachment.id,\n MessageAttachmentClientByIndex({ runtime, index: idx }),\n ),\n ),\n [runtimeState.attachments, runtime],\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 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"],"mappings":";;;;;;;;AAcA,MAAM,iCAAiC,SACrC,SAAS,+BAA+B,EACtC,SACA,SAIC;CAKD,OAAO,YAAY,wBAAwB,EAAE,SAJnB,cAClB,QAAQ,qBAAqB,KAAK,GACxC,CAAC,SAAS,KAAK,CAEqD,EAAE,CAAC,CAAC;AAC5E,CACF;AAEA,MAAM,qBAAqB,SAAS,SAAS,mBAAmB,EAC9D,SACA,SAIC;CAKD,OAAO,YAAY,kBAAkB,EAAE,SAJnB,cACZ,QAAQ,sBAAsB,KAAK,GACzC,CAAC,SAAS,KAAK,CAEyC,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAa,gBAAgB,SAAS,SAAS,cAAc,EAC3D,SACA,eAI0B;CAC1B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,CAAC,eAAe,eAAe,SAAS,KAAK;CACnD,MAAM,CAAC,iBAAiB,iBAAiB,SAAS,KAAK;CAEvD,MAAM,eAAe,eACZ,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,CAAC,CAAC;CAC5B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;EACA;CACF,CAAC,CACH;CACA,MAAM,QAAQ,sBAEV,aAAa,QAAQ,KAAK,MAAM,QAC9B,QACE,gBAAgB,QAAQ,KAAK,cAAc,OACvC,cAAc,KAAK,eACnB,SAAS,OACb,mBAAmB;EAAE;EAAS,OAAO;CAAI,CAAC,CAC5C,CACF,GACF,CAAC,aAAa,SAAS,OAAO,CAChC;CAEA,MAAM,cAAc,uBAEf,aAAa,eAAe,CAAC,EAAA,CAAG,KAAK,YAAY,QAChD,QACE,WAAW,IACX,+BAA+B;EAAE;EAAS,OAAO;CAAI,CAAC,CACxD,CACF,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,GAAI;GAEJ,OAAO,MAAM;GACb,UAAU,SAAS;GAEnB,UAAU;GACV,YAAY;EACd;CACF,GAAG;EACD;EACA,MAAM;EACN,SAAS;EACT;EACA;CACF,CAAC;CAED,OAAO;EACL,gBAAgB;EAEhB,gBAAgB,SAAS;EAEzB,SAAS,WAAW,QAAQ,OAAO,MAAM;EACzC,aAAa,QAAQ,MAAM;EAC3B,oBAAoB,QAAQ,aAAa;EACzC,iBAAiB,aAAa,QAAQ,eAAe,QAAQ;EAC7D,iBAAiB,YAAY,QAAQ,eAAe,OAAO;EAC3D,mBAAmB,QAAQ,qBAAqB;EAChD,OAAO,aAAa;GAClB,IAAI,WAAW,UACb,OAAO,MAAM,IAAI,EAAE,OAAO,SAAS,MAAM,CAAC;QAE1C,OAAO,MAAM,IAAI,EAAE,KAAK,cAAc,SAAS,aAAa,CAAC;EAEjE;EAEA,aAAa,aAAa;GACxB,IAAI,QAAQ,UACV,OAAO,YAAY,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAE3C,OAAO,YAAY,IAAI,QAAQ;EAEnC;EAEA;EACA;EAEA,6BAA6B;CAC/B;AACF,CAAC"}
@@ -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":";;;;cASa,oBAAA,GAAoB,KAAA;WAIpB,qBAAA;AAAA;WAAA,qBAAA;AAAA"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"mappings":";;;;cAUa,oBAAA,GAAoB,KAAA;WAGtB,qBAAA;AAAA;WAAA,qBAAA;AAAA"}
@@ -1,11 +1,12 @@
1
- import { tapSubscribable } from "./tap-subscribable.js";
2
- import { tapAssistantEmit } from "@assistant-ui/store";
3
- import { resource, tapEffect } from "@assistant-ui/tap";
1
+ import { useSubscribable } from "./useSubscribable.js";
2
+ import { useEffect } from "@assistant-ui/tap/react-shim";
3
+ import { useAssistantEmit } from "@assistant-ui/store";
4
+ import { resource } from "@assistant-ui/tap";
4
5
  //#region src/store/runtime-clients/thread-list-item-runtime-client.ts
5
- const ThreadListItemClient = resource(({ runtime }) => {
6
- const state = tapSubscribable(runtime);
7
- const emit = tapAssistantEmit();
8
- tapEffect(() => {
6
+ const ThreadListItemClient = resource(function ThreadListItemClient({ runtime }) {
7
+ const state = useSubscribable(runtime);
8
+ const emit = useAssistantEmit();
9
+ useEffect(() => {
9
10
  const unsubscribers = [];
10
11
  for (const event of ["switchedTo", "switchedAway"]) {
11
12
  const unsubscribe = runtime.unstable_on(event, () => {
@@ -21,6 +22,7 @@ const ThreadListItemClient = resource(({ runtime }) => {
21
22
  getState: () => state,
22
23
  switchTo: runtime.switchTo,
23
24
  rename: runtime.rename,
25
+ updateCustom: runtime.updateCustom,
24
26
  archive: runtime.archive,
25
27
  unarchive: runtime.unarchive,
26
28
  delete: runtime.delete,
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { resource, tapEffect } from \"@assistant-ui/tap\";\nimport { type ClientOutput, tapAssistantEmit } from \"@assistant-ui/store\";\nimport type {\n ThreadListItemEventType,\n ThreadListItemRuntime,\n} from \"../../runtime/api/thread-list-item-runtime\";\nimport { tapSubscribable } from \"./tap-subscribable\";\n\nexport const ThreadListItemClient = resource(\n ({\n runtime,\n }: {\n runtime: ThreadListItemRuntime;\n }): ClientOutput<\"threadListItem\"> => {\n const state = tapSubscribable(runtime);\n const emit = tapAssistantEmit();\n\n // Bind thread list item events to event manager\n tapEffect(() => {\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 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);\n"],"mappings":";;;;AASA,MAAa,uBAAuB,UACjC,EACC,cAGoC;CACpC,MAAM,QAAQ,gBAAgB,OAAO;CACrC,MAAM,OAAO,iBAAiB;CAG9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAQtC,KAAK,MAAM,SAAS,CAJlB,cACA,cAGqC,GAAG;GACxC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,KAAK,kBAAkB,SAAS,EAC9B,UAAU,QAAQ,SAAS,EAAG,GAChC,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,OAAO;EACL,gBAAgB;EAChB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,SAAS,QAAQ;EACjB,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,eAAe,QAAQ;EACvB,YAAY,QAAQ;EACpB,QAAQ,QAAQ;EAChB,6BAA6B;CAC/B;AACF,CACF"}
1
+ {"version":3,"file":"thread-list-item-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-item-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useEffect } 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\nexport const ThreadListItemClient = resource(function ThreadListItemClient({\n runtime,\n}: {\n runtime: ThreadListItemRuntime;\n}): ClientOutput<\"threadListItem\"> {\n const state = useSubscribable(runtime);\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"],"mappings":";;;;;AAUA,MAAa,uBAAuB,SAAS,SAAS,qBAAqB,EACzE,WAGiC;CACjC,MAAM,QAAQ,gBAAgB,OAAO;CACrC,MAAM,OAAO,iBAAiB;CAG9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAQtC,KAAK,MAAM,SAAS,CAJlB,cACA,cAGqC,GAAG;GACxC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,KAAK,kBAAkB,SAAS,EAC9B,UAAU,QAAQ,SAAS,CAAC,CAAE,GAChC,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,OAAO;EACL,gBAAgB;EAChB,UAAU,QAAQ;EAClB,QAAQ,QAAQ;EAChB,cAAc,QAAQ;EACtB,SAAS,QAAQ;EACjB,WAAW,QAAQ;EACnB,QAAQ,QAAQ;EAChB,eAAe,QAAQ;EACvB,YAAY,QAAQ;EACpB,QAAQ,QAAQ;EAChB,6BAA6B;CAC/B;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;;cA2Ba,gBAAA,GAAgB,KAAA;WAKhB,iBAAA;+BACoB,gBAAA;AAAA;WADpB,iBAAA;+BACoB,gBAAA;AAAA"}
1
+ {"version":3,"file":"thread-list-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"mappings":";;;;;cAgCa,gBAAA,GAAgB,KAAA;WAIlB,iBAAA;+BACoB,gBAAA;AAAA;WADpB,iBAAA;+BACoB,gBAAA;AAAA"}
@@ -1,20 +1,21 @@
1
- import { tapSubscribable } from "./tap-subscribable.js";
1
+ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { ThreadClient } from "./thread-runtime-client.js";
3
3
  import { ThreadListItemClient } from "./thread-list-item-runtime-client.js";
4
- import { tapClientLookup, tapClientResource } from "@assistant-ui/store";
5
- import { resource, tapMemo, tapResource, withKey } from "@assistant-ui/tap";
4
+ import { useMemo } from "@assistant-ui/tap/react-shim";
5
+ import { useClientLookup, useClientResource } from "@assistant-ui/store";
6
+ import { resource, useResource, withKey } from "@assistant-ui/tap";
6
7
  //#region src/store/runtime-clients/thread-list-runtime-client.ts
7
- const ThreadListItemClientById = resource(({ runtime, id }) => {
8
- return tapResource(ThreadListItemClient({ runtime: tapMemo(() => runtime.getItemById(id), [runtime, id]) }));
8
+ const ThreadListItemClientById = resource(function ThreadListItemClientById({ runtime, id }) {
9
+ return useResource(ThreadListItemClient({ runtime: useMemo(() => runtime.getItemById(id), [runtime, id]) }));
9
10
  });
10
- const ThreadListClient = resource(({ runtime, __internal_assistantRuntime }) => {
11
- const runtimeState = tapSubscribable(runtime);
12
- const main = tapClientResource(ThreadClient({ runtime: runtime.main }));
13
- const threadItems = tapClientLookup(() => Object.keys(runtimeState.threadItems).map((id) => withKey(id, ThreadListItemClientById({
11
+ const ThreadListClient = resource(function ThreadListClient({ runtime, __internal_assistantRuntime }) {
12
+ const runtimeState = useSubscribable(runtime);
13
+ const main = useClientResource(ThreadClient({ runtime: runtime.main }));
14
+ const threadItems = useClientLookup(() => Object.keys(runtimeState.threadItems).map((id) => withKey(id, ThreadListItemClientById({
14
15
  runtime,
15
16
  id
16
17
  }))), [runtimeState.threadItems, runtime]);
17
- const state = tapMemo(() => {
18
+ const state = useMemo(() => {
18
19
  return {
19
20
  mainThreadId: runtimeState.mainThreadId,
20
21
  newThreadId: runtimeState.newThreadId ?? null,
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-runtime-client.js","names":[],"sources":["../../../src/store/runtime-clients/thread-list-runtime-client.ts"],"sourcesContent":["import { withKey, resource, tapResource, tapMemo } from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n tapClientLookup,\n tapClientResource,\n} from \"@assistant-ui/store\";\nimport type { ThreadListRuntime } from \"../../runtime/api/thread-list-runtime\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { tapSubscribable } from \"./tap-subscribable\";\nimport { ThreadListItemClient } from \"./thread-list-item-runtime-client\";\nimport { ThreadClient } from \"./thread-runtime-client\";\nimport type { ThreadsState } from \"../scopes/threads\";\n\nconst ThreadListItemClientById = resource(\n ({ runtime, id }: { runtime: ThreadListRuntime; id: string }) => {\n const threadListItemRuntime = tapMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return tapResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n }),\n );\n },\n);\n\nexport const ThreadListClient = resource(\n ({\n runtime,\n __internal_assistantRuntime,\n }: {\n runtime: ThreadListRuntime;\n __internal_assistantRuntime: AssistantRuntime;\n }): ClientOutput<\"threads\"> => {\n const runtimeState = tapSubscribable(runtime);\n\n const main = tapClientResource(\n ThreadClient({\n runtime: runtime.main,\n }),\n );\n const threadItems = tapClientLookup(\n () =>\n Object.keys(runtimeState.threadItems).map((id) =>\n withKey(id, ThreadListItemClientById({ runtime, id })),\n ),\n [runtimeState.threadItems, runtime],\n );\n\n const state = tapMemo<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 loadMore: () => runtime.loadMore(),\n __internal_getAssistantRuntime: () => __internal_assistantRuntime,\n };\n },\n);\n"],"mappings":";;;;;;AAaA,MAAM,2BAA2B,UAC9B,EAAE,SAAS,SAAqD;CAK/D,OAAO,YACL,qBAAqB,EACnB,SAN0B,cACtB,QAAQ,YAAY,EAAE,GAC5B,CAAC,SAAS,EAAE,CAImB,EAC/B,CAAC,CACH;AACF,CACF;AAEA,MAAa,mBAAmB,UAC7B,EACC,SACA,kCAI6B;CAC7B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,OAAO,kBACX,aAAa,EACX,SAAS,QAAQ,KACnB,CAAC,CACH;CACA,MAAM,cAAc,sBAEhB,OAAO,KAAK,aAAa,WAAW,EAAE,KAAK,OACzC,QAAQ,IAAI,yBAAyB;EAAE;EAAS;CAAG,CAAC,CAAC,CACvD,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,cAAc,aAAa;GAC3B,aAAa,aAAa,eAAe;GACzC,WAAW,aAAa;GACxB,eAAe,aAAa;GAC5B,SAAS,aAAa;GACtB,WAAW,aAAa;GACxB,mBAAmB,aAAa;GAChC,aAAa,YAAY;GAEzB,MAAM,KAAK;EACb;CACF,GAAG;EAAC;EAAc,YAAY;EAAO,KAAK;CAAK,CAAC;CAEhD,OAAO;EACL,gBAAgB;EAChB,cAAc,KAAK;EACnB,OAAO,sBAAsB;GAC3B,IAAI,sBAAsB,QACxB,OAAO,YAAY,IAAI,EAAE,KAAK,MAAM,aAAa,CAAC;GAGpD,IAAI,QAAQ,mBACV,OAAO,YAAY,IAAI,EAAE,KAAK,kBAAkB,GAAG,CAAC;GAGtD,MAAM,EAAE,OAAO,WAAW,UAAU;GACpC,MAAM,KAAK,WACP,MAAM,kBAAkB,SACxB,MAAM,UAAU;GACpB,OAAO,YAAY,IAAI,EAAE,KAAK,GAAG,CAAC;EACpC;EACA,gBAAgB,OAAO,UAAU,YAAY;GAC3C,MAAM,QAAQ,eAAe,UAAU,OAAO;EAChD;EACA,mBAAmB,YAAY;GAC7B,MAAM,QAAQ,kBAAkB;EAClC;EACA,6BAA6B,QAAQ,sBAAsB;EAC3D,cAAc,QAAQ,OAAO;EAC7B,gBAAgB,QAAQ,SAAS;EACjC,sCAAsC;CACxC;AACF,CACF"}
1
+ {"version":3,"file":"thread-list-runtime-client.js","names":[],"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 ThreadListItemClientById = resource(function ThreadListItemClientById({\n runtime,\n id,\n}: {\n runtime: ThreadListRuntime;\n id: string;\n}) {\n const threadListItemRuntime = useMemo(\n () => runtime.getItemById(id),\n [runtime, id],\n );\n return useResource(\n ThreadListItemClient({\n runtime: threadListItemRuntime,\n }),\n );\n});\n\nexport const ThreadListClient = resource(function ThreadListClient({\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 () =>\n Object.keys(runtimeState.threadItems).map((id) =>\n withKey(id, ThreadListItemClientById({ runtime, id })),\n ),\n [runtimeState.threadItems, runtime],\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 loadMore: () => runtime.loadMore(),\n __internal_getAssistantRuntime: () => __internal_assistantRuntime,\n };\n});\n"],"mappings":";;;;;;;AAcA,MAAM,2BAA2B,SAAS,SAAS,yBAAyB,EAC1E,SACA,MAIC;CAKD,OAAO,YACL,qBAAqB,EACnB,SAN0B,cACtB,QAAQ,YAAY,EAAE,GAC5B,CAAC,SAAS,EAAE,CAImB,EAC/B,CAAC,CACH;AACF,CAAC;AAED,MAAa,mBAAmB,SAAS,SAAS,iBAAiB,EACjE,SACA,+BAI0B;CAC1B,MAAM,eAAe,gBAAgB,OAAO;CAE5C,MAAM,OAAO,kBACX,aAAa,EACX,SAAS,QAAQ,KACnB,CAAC,CACH;CACA,MAAM,cAAc,sBAEhB,OAAO,KAAK,aAAa,WAAW,CAAC,CAAC,KAAK,OACzC,QAAQ,IAAI,yBAAyB;EAAE;EAAS;CAAG,CAAC,CAAC,CACvD,GACF,CAAC,aAAa,aAAa,OAAO,CACpC;CAEA,MAAM,QAAQ,cAA4B;EACxC,OAAO;GACL,cAAc,aAAa;GAC3B,aAAa,aAAa,eAAe;GACzC,WAAW,aAAa;GACxB,eAAe,aAAa;GAC5B,SAAS,aAAa;GACtB,WAAW,aAAa;GACxB,mBAAmB,aAAa;GAChC,aAAa,YAAY;GAEzB,MAAM,KAAK;EACb;CACF,GAAG;EAAC;EAAc,YAAY;EAAO,KAAK;CAAK,CAAC;CAEhD,OAAO;EACL,gBAAgB;EAChB,cAAc,KAAK;EACnB,OAAO,sBAAsB;GAC3B,IAAI,sBAAsB,QACxB,OAAO,YAAY,IAAI,EAAE,KAAK,MAAM,aAAa,CAAC;GAGpD,IAAI,QAAQ,mBACV,OAAO,YAAY,IAAI,EAAE,KAAK,kBAAkB,GAAG,CAAC;GAGtD,MAAM,EAAE,OAAO,WAAW,UAAU;GACpC,MAAM,KAAK,WACP,MAAM,kBAAkB,SACxB,MAAM,UAAU;GACpB,OAAO,YAAY,IAAI,EAAE,KAAK,GAAG,CAAC;EACpC;EACA,gBAAgB,OAAO,UAAU,YAAY;GAC3C,MAAM,QAAQ,eAAe,UAAU,OAAO;EAChD;EACA,mBAAmB,YAAY;GAC7B,MAAM,QAAQ,kBAAkB;EAClC;EACA,6BAA6B,QAAQ,sBAAsB;EAC3D,cAAc,QAAQ,OAAO;EAC7B,gBAAgB,QAAQ,SAAS;EACjC,sCAAsC;CACxC;AACF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"thread-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;;cAyCa,YAAA,GAAY,KAAA;WACE,aAAA;AAAA;WAAA,aAAA;AAAA"}
1
+ {"version":3,"file":"thread-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/thread-runtime-client.ts"],"mappings":";;;;cAiCa,YAAA,GAAY,KAAA;WAGd,aAAA;AAAA;WAAA,aAAA;AAAA"}
@@ -1,19 +1,20 @@
1
- import { tapSubscribable } from "./tap-subscribable.js";
1
+ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { ComposerClient } from "./composer-runtime-client.js";
3
3
  import { MessageClient } from "./message-runtime-client.js";
4
- import { tapAssistantEmit, tapClientLookup, tapClientResource } from "@assistant-ui/store";
5
- import { resource, tapEffect, tapMemo, tapResource, withKey } from "@assistant-ui/tap";
4
+ import { useEffect, useMemo } from "@assistant-ui/tap/react-shim";
5
+ import { useAssistantEmit, useClientLookup, useClientResource } from "@assistant-ui/store";
6
+ import { resource, useResource, withKey } from "@assistant-ui/tap";
6
7
  //#region src/store/runtime-clients/thread-runtime-client.ts
7
- const MessageClientById = resource(({ runtime, id, threadIdRef }) => {
8
- return tapResource(MessageClient({
9
- runtime: tapMemo(() => runtime.getMessageById(id), [runtime, id]),
8
+ const MessageClientById = resource(function MessageClientById({ runtime, id, threadIdRef }) {
9
+ return useResource(MessageClient({
10
+ runtime: useMemo(() => runtime.getMessageById(id), [runtime, id]),
10
11
  threadIdRef
11
12
  }));
12
13
  });
13
- const ThreadClient = resource(({ runtime }) => {
14
- const runtimeState = tapSubscribable(runtime);
15
- const emit = tapAssistantEmit();
16
- tapEffect(() => {
14
+ const ThreadClient = resource(function ThreadClient({ runtime }) {
15
+ const runtimeState = useSubscribable(runtime);
16
+ const emit = useAssistantEmit();
17
+ useEffect(() => {
17
18
  const unsubscribers = [];
18
19
  for (const event of [
19
20
  "runStart",
@@ -31,14 +32,14 @@ const ThreadClient = resource(({ runtime }) => {
31
32
  for (const unsub of unsubscribers) unsub();
32
33
  };
33
34
  }, [runtime, emit]);
34
- const threadIdRef = tapMemo(() => ({ get current() {
35
+ const threadIdRef = useMemo(() => ({ get current() {
35
36
  return runtime.getState().threadId;
36
37
  } }), [runtime]);
37
- const composer = tapClientResource(ComposerClient({
38
+ const composer = useClientResource(ComposerClient({
38
39
  runtime: runtime.composer,
39
40
  threadIdRef
40
41
  }));
41
- const messages = tapClientLookup(() => runtimeState.messages.map((m) => withKey(m.id, MessageClientById({
42
+ const messages = useClientLookup(() => runtimeState.messages.map((m) => withKey(m.id, MessageClientById({
42
43
  runtime,
43
44
  id: m.id,
44
45
  threadIdRef
@@ -47,7 +48,7 @@ const ThreadClient = resource(({ runtime }) => {
47
48
  runtime,
48
49
  threadIdRef
49
50
  ]);
50
- const state = tapMemo(() => {
51
+ const state = useMemo(() => {
51
52
  return {
52
53
  isEmpty: messages.state.length === 0 && !runtimeState.isLoading,
53
54
  isDisabled: runtimeState.isDisabled,
@@ -1 +1 @@
1
- {"version":3,"file":"thread-runtime-client.js","names":[],"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 {\n resource,\n tapResource,\n tapMemo,\n tapEffect,\n type tapRef,\n withKey,\n} from \"@assistant-ui/tap\";\nimport {\n type ClientOutput,\n tapAssistantEmit,\n tapClientLookup,\n tapClientResource,\n} from \"@assistant-ui/store\";\nimport { ComposerClient } from \"./composer-runtime-client\";\nimport { MessageClient } from \"./message-runtime-client\";\nimport { tapSubscribable } from \"./tap-subscribable\";\nimport type { ThreadState } from \"../scopes/thread\";\n\nconst MessageClientById = resource(\n ({\n runtime,\n id,\n threadIdRef,\n }: {\n runtime: ThreadRuntime;\n id: string;\n threadIdRef: tapRef.RefObject<string>;\n }) => {\n const messageRuntime = tapMemo(\n () => runtime.getMessageById(id),\n [runtime, id],\n );\n\n return tapResource(MessageClient({ runtime: messageRuntime, threadIdRef }));\n },\n);\n\nexport const ThreadClient = resource(\n ({ runtime }: { runtime: ThreadRuntime }): ClientOutput<\"thread\"> => {\n const runtimeState = tapSubscribable(runtime);\n const emit = tapAssistantEmit();\n\n tapEffect(() => {\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 = tapMemo(\n () => ({\n get current() {\n return runtime.getState()!.threadId;\n },\n }),\n [runtime],\n );\n\n const composer = tapClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = tapClientLookup(\n () =>\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef })),\n ),\n [runtimeState.messages, runtime, threadIdRef],\n );\n\n const state = tapMemo<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 startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\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);\n"],"mappings":";;;;;;AAsBA,MAAM,oBAAoB,UACvB,EACC,SACA,IACA,kBAKI;CAMJ,OAAO,YAAY,cAAc;EAAE,SALZ,cACf,QAAQ,eAAe,EAAE,GAC/B,CAAC,SAAS,EAAE,CAG2C;EAAG;CAAY,CAAC,CAAC;AAC5E,CACF;AAEA,MAAa,eAAe,UACzB,EAAE,cAAkE;CACnE,MAAM,eAAe,gBAAgB,OAAO;CAC5C,MAAM,OAAO,iBAAiB;CAE9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAStC,KAAK,MAAM,SAAS;GANlB;GACA;GACA;GACA;EAG6B,GAAG;GAChC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,MAAM,WAAW,QAAQ,SAAS,GAAG,YAAY;IACjD,KAAK,UAAU,SAAS,EACtB,SACF,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,MAAM,cAAc,eACX,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,EAAG;CAC7B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;CACF,CAAC,CACH;CACA,MAAM,WAAW,sBAEb,aAAa,SAAS,KAAK,MACzB,QAAQ,EAAE,IAAI,kBAAkB;EAAE;EAAS,IAAI,EAAE;EAAI;CAAY,CAAC,CAAC,CACrE,GACF;EAAC,aAAa;EAAU;EAAS;CAAW,CAC9C;CAEA,MAAM,QAAQ,cAA2B;EACvC,OAAO;GACL,SAAS,SAAS,MAAM,WAAW,KAAK,CAAC,aAAa;GACtD,YAAY,aAAa;GACzB,WAAW,aAAa;GACxB,WAAW,aAAa;GACxB,cAAc,aAAa;GAC3B,OAAO,aAAa;GACpB,aAAa,aAAa;GAC1B,QAAQ,aAAa;GACrB,QAAQ,aAAa;GACrB,OAAO,aAAa;GAEpB,UAAU,SAAS;GACnB,UAAU,SAAS;EACrB;CACF,GAAG;EAAC;EAAc;EAAU,SAAS;CAAK,CAAC;CAE3C,OAAO;EACL,gBAAgB;EAChB,gBAAgB,SAAS;EACzB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,iBAAiB,QAAQ;EACzB,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,cAAc,QAAQ;EACtB,iBAAiB,QAAQ;EACzB,gBAAgB,QAAQ;EACxB,sBAAsB,QAAQ;EAC9B,WAAW,QAAQ;EACnB,aAAa,QAAQ;EACrB,UAAU,aAAa;GACrB,IAAI,QAAQ,UACV,OAAO,SAAS,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAExC,OAAO,SAAS,IAAI,QAAQ;EAEhC;EACA,6BAA6B;CAC/B;AACF,CACF"}
1
+ {"version":3,"file":"thread-runtime-client.js","names":[],"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, RefObject } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\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 MessageClientById = resource(function MessageClientById({\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\nexport const ThreadClient = resource(function ThreadClient({\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 () => ({\n get current() {\n return runtime.getState()!.threadId;\n },\n }),\n [runtime],\n );\n\n const composer = useClientResource(\n ComposerClient({\n runtime: runtime.composer,\n threadIdRef,\n }),\n );\n const messages = useClientLookup(\n () =>\n runtimeState.messages.map((m) =>\n withKey(m.id, MessageClientById({ runtime, id: m.id, threadIdRef })),\n ),\n [runtimeState.messages, runtime, threadIdRef],\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 startRun: runtime.startRun,\n resumeRun: runtime.resumeRun,\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"],"mappings":";;;;;;;AAgBA,MAAM,oBAAoB,SAAS,SAAS,kBAAkB,EAC5D,SACA,IACA,eAKC;CAMD,OAAO,YAAY,cAAc;EAAE,SALZ,cACf,QAAQ,eAAe,EAAE,GAC/B,CAAC,SAAS,EAAE,CAG2C;EAAG;CAAY,CAAC,CAAC;AAC5E,CAAC;AAED,MAAa,eAAe,SAAS,SAAS,aAAa,EACzD,WAGyB;CACzB,MAAM,eAAe,gBAAgB,OAAO;CAC5C,MAAM,OAAO,iBAAiB;CAE9B,gBAAgB;EACd,MAAM,gBAA+B,CAAC;EAStC,KAAK,MAAM,SAAS;GANlB;GACA;GACA;GACA;EAG6B,GAAG;GAChC,MAAM,cAAc,QAAQ,YAAY,aAAa;IACnD,MAAM,WAAW,QAAQ,SAAS,CAAC,EAAE,YAAY;IACjD,KAAK,UAAU,SAAS,EACtB,SACF,CAAC;GACH,CAAC;GACD,cAAc,KAAK,WAAW;EAChC;EAEA,aAAa;GACX,KAAK,MAAM,SAAS,eAAe,MAAM;EAC3C;CACF,GAAG,CAAC,SAAS,IAAI,CAAC;CAElB,MAAM,cAAc,eACX,EACL,IAAI,UAAU;EACZ,OAAO,QAAQ,SAAS,CAAC,CAAE;CAC7B,EACF,IACA,CAAC,OAAO,CACV;CAEA,MAAM,WAAW,kBACf,eAAe;EACb,SAAS,QAAQ;EACjB;CACF,CAAC,CACH;CACA,MAAM,WAAW,sBAEb,aAAa,SAAS,KAAK,MACzB,QAAQ,EAAE,IAAI,kBAAkB;EAAE;EAAS,IAAI,EAAE;EAAI;CAAY,CAAC,CAAC,CACrE,GACF;EAAC,aAAa;EAAU;EAAS;CAAW,CAC9C;CAEA,MAAM,QAAQ,cAA2B;EACvC,OAAO;GACL,SAAS,SAAS,MAAM,WAAW,KAAK,CAAC,aAAa;GACtD,YAAY,aAAa;GACzB,WAAW,aAAa;GACxB,WAAW,aAAa;GACxB,cAAc,aAAa;GAC3B,OAAO,aAAa;GACpB,aAAa,aAAa;GAC1B,QAAQ,aAAa;GACrB,QAAQ,aAAa;GACrB,OAAO,aAAa;GAEpB,UAAU,SAAS;GACnB,UAAU,SAAS;EACrB;CACF,GAAG;EAAC;EAAc;EAAU,SAAS;CAAK,CAAC;CAE3C,OAAO;EACL,gBAAgB;EAChB,gBAAgB,SAAS;EACzB,QAAQ,QAAQ;EAChB,UAAU,QAAQ;EAClB,WAAW,QAAQ;EACnB,WAAW,QAAQ;EACnB,iBAAiB,QAAQ;EACzB,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EAChB,OAAO,QAAQ;EACf,cAAc,QAAQ;EACtB,cAAc,QAAQ;EACtB,iBAAiB,QAAQ;EACzB,gBAAgB,QAAQ;EACxB,sBAAsB,QAAQ;EAC9B,WAAW,QAAQ;EACnB,aAAa,QAAQ;EACrB,UAAU,aAAa;GACrB,IAAI,QAAQ,UACV,OAAO,SAAS,IAAI,EAAE,KAAK,SAAS,GAAG,CAAC;QAExC,OAAO,SAAS,IAAI,QAAQ;EAEhC;EACA,6BAA6B;CAC/B;AACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { SubscribableWithState } from "../../subscribable/subscribable.js";
2
+
3
+ //#region src/store/runtime-clients/useSubscribable.d.ts
4
+ declare const useSubscribable: <T>(subscribable: Omit<SubscribableWithState<T, any>, "path">) => T;
5
+ //#endregion
6
+ export { useSubscribable };
7
+ //# sourceMappingURL=useSubscribable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubscribable.d.ts","names":[],"sources":["../../../src/store/runtime-clients/useSubscribable.ts"],"mappings":";;;cAGa,eAAA,MACX,YAAA,EAAc,IAAA,CAAK,qBAAA,CAAsB,CAAA,oBAAgB,CAAA"}
@@ -0,0 +1,16 @@
1
+ import { useEffect, useState } from "@assistant-ui/tap/react-shim";
2
+ //#region src/store/runtime-clients/useSubscribable.ts
3
+ const useSubscribable = (subscribable) => {
4
+ const [, setState] = useState(subscribable.getState);
5
+ useEffect(() => {
6
+ setState(subscribable.getState());
7
+ return subscribable.subscribe(() => {
8
+ setState(subscribable.getState());
9
+ });
10
+ }, [subscribable]);
11
+ return subscribable.getState();
12
+ };
13
+ //#endregion
14
+ export { useSubscribable };
15
+
16
+ //# sourceMappingURL=useSubscribable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSubscribable.js","names":[],"sources":["../../../src/store/runtime-clients/useSubscribable.ts"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport type { SubscribableWithState } from \"../../subscribable/subscribable\";\n\nexport const useSubscribable = <T>(\n subscribable: Omit<SubscribableWithState<T, any>, \"path\">,\n) => {\n const [, setState] = useState(subscribable.getState);\n useEffect(() => {\n setState(subscribable.getState());\n return subscribable.subscribe(() => {\n setState(subscribable.getState());\n });\n }, [subscribable]);\n\n return subscribable.getState();\n};\n"],"mappings":";;AAGA,MAAa,mBACX,iBACG;CACH,MAAM,GAAG,YAAY,SAAS,aAAa,QAAQ;CACnD,gBAAgB;EACd,SAAS,aAAa,SAAS,CAAC;EAChC,OAAO,aAAa,gBAAgB;GAClC,SAAS,aAAa,SAAS,CAAC;EAClC,CAAC;CACH,GAAG,CAAC,YAAY,CAAC;CAEjB,OAAO,aAAa,SAAS;AAC/B"}
@@ -1,6 +1,6 @@
1
+ import { QueueItemClientSchema } from "./scopes/queue-item.js";
1
2
  import { ThreadListItemClientSchema } from "./scopes/thread-list-item.js";
2
3
  import { AttachmentClientSchema } from "./scopes/attachment.js";
3
- import { QueueItemClientSchema } from "./scopes/queue-item.js";
4
4
  import { ComposerClientSchema } from "./scopes/composer.js";
5
5
  import { PartClientSchema } from "./scopes/part.js";
6
6
  import { MessageClientSchema } from "./scopes/message.js";
@@ -1,10 +1,10 @@
1
1
  import { MessageRole, RunConfig } from "../../types/message.js";
2
2
  import { Attachment, CreateAttachment } from "../../types/attachment.js";
3
3
  import { QuoteInfo } from "../../types/quote.js";
4
+ import { QueueItemMethods, QueueItemState } from "./queue-item.js";
4
5
  import { AttachmentAddErrorReason, DictationState, SendOptions } from "../../runtime/interfaces/composer-runtime-core.js";
5
6
  import { ComposerRuntime } from "../../runtime/api/composer-runtime.js";
6
7
  import { AttachmentMethods } from "./attachment.js";
7
- import { QueueItemMethods, QueueItemState } from "./queue-item.js";
8
8
 
9
9
  //#region src/store/scopes/composer.d.ts
10
10
  type ComposerSendOptions = SendOptions & {
@@ -3,6 +3,7 @@ type QueueItemState = {
3
3
  readonly id: string;
4
4
  readonly prompt: string;
5
5
  };
6
+ declare const EMPTY_QUEUE_ITEMS: readonly QueueItemState[];
6
7
  type QueueItemMethods = {
7
8
  getState(): QueueItemState;
8
9
  steer(): void;
@@ -19,5 +20,5 @@ type QueueItemClientSchema = {
19
20
  meta: QueueItemMeta;
20
21
  };
21
22
  //#endregion
22
- export { QueueItemClientSchema, QueueItemMeta, QueueItemMethods, QueueItemState };
23
+ export { EMPTY_QUEUE_ITEMS, QueueItemClientSchema, QueueItemMeta, QueueItemMethods, QueueItemState };
23
24
  //# sourceMappingURL=queue-item.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";KAAY,cAAA;EAAA,SACD,EAAA;EAAA,SACA,MAAM;AAAA;AAAA,KAGL,gBAAA;EACV,QAAA,IAAY,cAAc;EAC1B,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;EACA,KAAA;IAAS,KAAA;EAAA;AAAA;AAAA,KAGC,qBAAA;EACV,OAAA,EAAS,gBAAA;EACT,IAAA,EAAM,aAAa;AAAA"}
1
+ {"version":3,"file":"queue-item.d.ts","names":[],"sources":["../../../src/store/scopes/queue-item.ts"],"mappings":";KAAY,cAAA;EAAA,SACD,EAAA;EAAA,SACA,MAAM;AAAA;AAAA,cAGJ,iBAAA,WAA4B,cAAc;AAAA,KAE3C,gBAAA;EACV,QAAA,IAAY,cAAc;EAC1B,KAAA;EACA,MAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;EACA,KAAA;IAAS,KAAA;EAAA;AAAA;AAAA,KAGC,qBAAA;EACV,OAAA,EAAS,gBAAA;EACT,IAAA,EAAM,aAAa;AAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/store/scopes/queue-item.ts
2
+ const EMPTY_QUEUE_ITEMS = Object.freeze([]);
3
+ //#endregion
4
+ export { EMPTY_QUEUE_ITEMS };
5
+
6
+ //# sourceMappingURL=queue-item.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue-item.js","names":[],"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,MAAa,oBAA+C,OAAO,OAAO,CAAC,CAAC"}
@@ -16,6 +16,7 @@ type ThreadListItemMethods = {
16
16
  unarchive?: boolean;
17
17
  }): void;
18
18
  rename(newTitle: string): void;
19
+ updateCustom(custom: Record<string, unknown> | undefined): void;
19
20
  archive(): void;
20
21
  unarchive(): void;
21
22
  delete(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"thread-list-item.d.ts","names":[],"sources":["../../../src/store/scopes/thread-list-item.ts"],"mappings":";;;;KAGY,mBAAA;EAAA,SACD,EAAA;EAAA,SACA,QAAA;EAAA,SACA,UAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA,EAAQ,oBAAA;EAAA,SACR,MAAA,GAAS,MAAM;AAAA;AAAA,KAGd,qBAAA;EACV,QAAA,IAAY,mBAAA;EACZ,QAAA,CAAS,OAAA;IAAY,SAAA;EAAA;EACrB,MAAA,CAAO,QAAA;EACP,OAAA;EACA,SAAA;EACA,MAAA;EACA,aAAA;EACA,UAAA,IAAc,OAAA;IAAU,QAAA;IAAkB,UAAA;EAAA;EAC1C,MAAA;EACA,qBAAA,KAA0B,qBAAA;AAAA;AAAA,KAGhB,kBAAA;EACV,MAAA;EACA,KAAA;IACM,IAAA;EAAA;IACA,IAAA;IAAY,EAAA;EAAA;IACZ,IAAA;IAAe,KAAA;IAAe,QAAA;EAAA;AAAA;AAAA,KAG1B,oBAAA;EAZV;;;;AAC+C;EAiB/C,2BAAA;IAA+B,QAAA;EAAA;EAdH;;;;;EAoB5B,6BAAA;IAAiC,QAAA;EAAA;AAAA;AAAA,KAGvB,0BAAA;EACV,OAAA,EAAS,qBAAA;EACT,IAAA,EAAM,kBAAA;EACN,MAAA,EAAQ,oBAAA;AAAA"}
1
+ {"version":3,"file":"thread-list-item.d.ts","names":[],"sources":["../../../src/store/scopes/thread-list-item.ts"],"mappings":";;;;KAGY,mBAAA;EAAA,SACD,EAAA;EAAA,SACA,QAAA;EAAA,SACA,UAAA;EAAA,SACA,KAAA;EAAA,SACA,MAAA,EAAQ,oBAAA;EAAA,SACR,MAAA,GAAS,MAAM;AAAA;AAAA,KAGd,qBAAA;EACV,QAAA,IAAY,mBAAA;EACZ,QAAA,CAAS,OAAA;IAAY,SAAA;EAAA;EACrB,MAAA,CAAO,QAAA;EACP,YAAA,CAAa,MAAA,EAAQ,MAAA;EACrB,OAAA;EACA,SAAA;EACA,MAAA;EACA,aAAA;EACA,UAAA,IAAc,OAAA;IAAU,QAAA;IAAkB,UAAA;EAAA;EAC1C,MAAA;EACA,qBAAA,KAA0B,qBAAA;AAAA;AAAA,KAGhB,kBAAA;EACV,MAAA;EACA,KAAA;IACM,IAAA;EAAA;IACA,IAAA;IAAY,EAAA;EAAA;IACZ,IAAA;IAAe,KAAA;IAAe,QAAA;EAAA;AAAA;AAAA,KAG1B,oBAAA;EAbI;;;;;EAmBd,2BAAA;IAA+B,QAAA;EAAA;EAdrB;;;;;EAoBV,6BAAA;IAAiC,QAAA;EAAA;AAAA;AAAA,KAGvB,0BAAA;EACV,OAAA,EAAS,qBAAA;EACT,IAAA,EAAM,kBAAA;EACN,MAAA,EAAQ,oBAAA;AAAA"}
@@ -3,9 +3,9 @@ import { ModelContext } from "../../model-context/types.js";
3
3
  import { ThreadMessageLike } from "../../runtime/utils/thread-message-like.js";
4
4
  import { ExportedMessageRepository } from "../../runtime/utils/message-repository.js";
5
5
  import { RuntimeCapabilities, SpeechState, ThreadSuggestion, VoiceSessionState } from "../../runtime/interfaces/thread-runtime-core.js";
6
- import { CreateAppendMessage, CreateResumeRunConfig, CreateStartRunConfig, ThreadRuntime } from "../../runtime/api/thread-runtime.js";
7
6
  import { ComposerMethods, ComposerState } from "./composer.js";
8
7
  import { MessageMethods, MessageState } from "./message.js";
8
+ import { CreateAppendMessage, CreateResumeRunConfig, CreateStartRunConfig, ThreadRuntime } from "../../runtime/api/thread-runtime.js";
9
9
  import { ReadonlyJSONValue } from "assistant-stream/utils";
10
10
 
11
11
  //#region src/store/scopes/thread.d.ts
@@ -1,6 +1,6 @@
1
- import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
2
1
  import { ThreadListItemMethods, ThreadListItemState } from "./thread-list-item.js";
3
2
  import { ThreadMethods, ThreadState } from "./thread.js";
3
+ import { AssistantRuntime } from "../../runtime/api/assistant-runtime.js";
4
4
 
5
5
  //#region src/store/scopes/threads.d.ts
6
6
  type ThreadsState = {
@@ -258,7 +258,8 @@ type AppendMessage = Omit<ThreadMessage, "id"> & {
258
258
  parentId: string | null; /** The ID of the message that was edited or undefined. */
259
259
  sourceId: string | null;
260
260
  runConfig: RunConfig | undefined;
261
- startRun?: boolean | undefined;
261
+ startRun?: boolean | undefined; /** Process this message next; only meaningful for queue-capable runtimes. */
262
+ steer?: boolean | undefined;
262
263
  };
263
264
  //#endregion
264
265
  export { AppendMessage, DataMessagePart, FileMessagePart, GenerativeUIMessagePart, GenerativeUINode, GenerativeUISpec, ImageMessagePart, MCP_APP_URI_SCHEME, McpAppMetadata, MessagePartStatus, MessageRole, MessageStatus, MessageTiming, ReasoningMessagePart, RunConfig, SourceMessagePart, SourceProviderMetadata, TextMessagePart, ThreadAssistantMessage, ThreadAssistantMessagePart, ThreadMessage, ThreadStep, ThreadSystemMessage, ThreadUserMessage, ThreadUserMessagePart, ToolCallMessagePart, ToolCallMessagePartMcpMetadata, ToolCallMessagePartStatus, type ToolModelContentPart, Unstable_AudioMessagePart, isMcpAppUri };
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","names":[],"sources":["../../src/types/message.ts"],"mappings":"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"}
1
+ {"version":3,"file":"message.d.ts","names":[],"sources":["../../src/types/message.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","names":[],"sources":["../../src/types/message.ts"],"sourcesContent":["import type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ToolModelContentPart } from \"assistant-stream\";\nimport type { CompleteAttachment } from \"./attachment\";\n\nexport type { ToolModelContentPart };\n\nexport type TextMessagePart = {\n readonly type: \"text\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type SourceProviderMetadata = {\n readonly [providerName: string]: ReadonlyJSONObject;\n};\n\nexport type SourceMessagePart =\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly url?: undefined;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n };\n\nexport type ImageMessagePart = {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n readonly parentId?: string;\n};\n\nexport type Unstable_AudioMessagePart = {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n};\n\nexport type DataMessagePart<T = any> = {\n readonly type: \"data\";\n readonly name: string;\n readonly data: T;\n};\n\n/**\n * A JSON spec describing a tree of UI components to render.\n *\n * The agent emits a {@link GenerativeUIMessagePart} containing this spec, and\n * the consumer-provided component allowlist is used to resolve `component`\n * names. Any component referenced that is not present in the allowlist is\n * rejected with a typed error — the allowlist is the security boundary in the\n * default same-realm rendering path.\n */\nexport type GenerativeUINode =\n | string\n | {\n /** Allowlisted component name (resolved against the consumer registry). */\n readonly component: string;\n /** Props passed to the resolved component (must be JSON-serializable). */\n readonly props?: Record<string, unknown>;\n /** Optional children — strings render as text, objects recurse. */\n readonly children?: readonly GenerativeUINode[];\n /** Optional stable key for React reconciliation. */\n readonly key?: string;\n };\n\n/**\n * The root spec for a generative UI tree.\n */\nexport type GenerativeUISpec = {\n /** Root node(s) to render. */\n readonly root: GenerativeUINode | readonly GenerativeUINode[];\n};\n\n/**\n * A message part that carries a JSON spec describing UI to render.\n *\n * Render with `<MessagePrimitive.GenerativeUI components={...} />`. The\n * primitive resolves component names against the consumer-provided allowlist\n * — any unknown name throws a typed error rather than rendering. Stream-\n * friendly: a partially-streamed spec renders progressively.\n */\nexport type GenerativeUIMessagePart = {\n readonly type: \"generative-ui\";\n /** The JSON spec describing the UI tree. */\n readonly spec: GenerativeUISpec;\n /** Optional id (useful for replays / stable keys). */\n readonly id?: string;\n readonly parentId?: string;\n};\n\nexport type McpAppMetadata = {\n readonly resourceUri: string;\n readonly mimeType?: string;\n readonly visibility?: readonly (\"model\" | \"app\")[];\n};\n\nexport const MCP_APP_URI_SCHEME = \"ui://\";\n\nexport const isMcpAppUri = (uri: string | undefined): boolean =>\n !!uri?.startsWith(MCP_APP_URI_SCHEME);\n\nexport type ToolCallMessagePartMcpMetadata = {\n readonly app?: McpAppMetadata;\n};\n\nexport type ToolCallMessagePart<\n TArgs = ReadonlyJSONObject,\n TResult = unknown,\n> = {\n /** Identifies this part as a tool call. */\n readonly type: \"tool-call\";\n /** Stable identifier for this invocation of the tool. */\n readonly toolCallId: string;\n /** Name of the tool requested by the model. */\n readonly toolName: string;\n /**\n * Arguments supplied by the model. During streaming this is a partial parse:\n * fields may be missing or incomplete. From a tool-call renderer, use\n * `useToolArgsStatus` to detect which fields are still arriving.\n */\n readonly args: TArgs;\n /** Result returned by the tool, if it has completed. */\n readonly result?: TResult | undefined;\n /** Whether the result represents a tool execution error. */\n readonly isError?: boolean | undefined;\n /** Raw JSON argument text streamed by the model. */\n readonly argsText: string;\n /** UI-only artifact associated with the tool result. */\n readonly artifact?: unknown;\n /** MCP app metadata associated with this tool call, when present. */\n readonly mcp?: ToolCallMessagePartMcpMetadata;\n /** Content returned to the model for this tool result. */\n readonly modelContent?: readonly ToolModelContentPart[] | undefined;\n /** Human-input request that must be resolved before the run can continue. */\n readonly interrupt?: { type: \"human\"; payload: unknown };\n /** Server-side approval gate. `approved === undefined` is the only state in which `respondToApproval` may be called. */\n readonly approval?: {\n readonly id: string;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n };\n /** Parent message-part ID when this part belongs to a nested structure. */\n readonly parentId?: string;\n /**\n * Nested thread messages produced by this tool call, for example a sub-agent\n * conversation.\n */\n readonly messages?: readonly ThreadMessage[];\n};\n\nexport type ThreadUserMessagePart =\n | TextMessagePart\n | ImageMessagePart\n | FileMessagePart\n | DataMessagePart\n | Unstable_AudioMessagePart;\n\nexport type ThreadAssistantMessagePart =\n | TextMessagePart\n | ReasoningMessagePart\n | ToolCallMessagePart\n | SourceMessagePart\n | FileMessagePart\n | ImageMessagePart\n | DataMessagePart\n | GenerativeUIMessagePart;\n\nexport type MessagePartStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: unknown;\n };\n\nexport type ToolCallMessagePartStatus =\n | {\n /** The tool call is waiting for UI or human input before continuing. */\n readonly type: \"requires-action\";\n /** Reason the tool call requires action. */\n readonly reason: \"interrupt\";\n }\n | MessagePartStatus;\n\nexport type MessageStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"requires-action\";\n readonly reason: \"tool-calls\" | \"interrupt\";\n }\n | {\n readonly type: \"complete\";\n readonly reason: \"stop\" | \"unknown\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"tool-calls\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: ReadonlyJSONValue;\n };\n\nexport type MessageTiming = {\n readonly streamStartTime: number;\n readonly firstTokenTime?: number;\n readonly totalStreamTime?: number;\n readonly tokenCount?: number;\n readonly tokensPerSecond?: number;\n readonly totalChunks: number;\n readonly toolCallCount: number;\n};\n\nexport type ThreadStep = {\n readonly messageId?: string;\n readonly usage?:\n | {\n readonly inputTokens: number;\n readonly outputTokens: number;\n }\n | undefined;\n};\n\ntype MessageCommonProps = {\n readonly id: string;\n readonly createdAt: Date;\n};\n\nexport type ThreadSystemMessage = MessageCommonProps & {\n readonly role: \"system\";\n readonly content: readonly [TextMessagePart];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadUserMessage = MessageCommonProps & {\n readonly role: \"user\";\n readonly content: readonly ThreadUserMessagePart[];\n readonly attachments: readonly CompleteAttachment[];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadAssistantMessage = MessageCommonProps & {\n readonly role: \"assistant\";\n readonly content: readonly ThreadAssistantMessagePart[];\n readonly status: MessageStatus;\n readonly metadata: {\n readonly unstable_state: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n /**\n * Marks a client-side optimistic placeholder. Such messages are evicted\n * once off the head branch and are never persisted.\n */\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\ntype BaseThreadMessage = {\n readonly status?: ThreadAssistantMessage[\"status\"];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?: readonly ReadonlyJSONValue[];\n readonly unstable_data?: readonly ReadonlyJSONValue[];\n readonly steps?: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n readonly attachments?: ThreadUserMessage[\"attachments\"];\n};\n\nexport type ThreadMessage = BaseThreadMessage &\n (ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);\n\nexport type MessageRole = ThreadMessage[\"role\"];\n\nexport type RunConfig = {\n readonly custom?: Record<string, unknown>;\n};\n\nexport type AppendMessage = Omit<ThreadMessage, \"id\"> & {\n parentId: string | null;\n\n /** The ID of the message that was edited or undefined. */\n sourceId: string | null;\n runConfig: RunConfig | undefined;\n startRun?: boolean | undefined;\n};\n"],"mappings":";AAgIA,MAAa,qBAAqB;AAElC,MAAa,eAAe,QAC1B,CAAC,CAAC,KAAK,WAAW,kBAAkB"}
1
+ {"version":3,"file":"message.js","names":[],"sources":["../../src/types/message.ts"],"sourcesContent":["import type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ToolModelContentPart } from \"assistant-stream\";\nimport type { CompleteAttachment } from \"./attachment\";\n\nexport type { ToolModelContentPart };\n\nexport type TextMessagePart = {\n readonly type: \"text\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type ReasoningMessagePart = {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly parentId?: string;\n};\n\nexport type SourceProviderMetadata = {\n readonly [providerName: string]: ReadonlyJSONObject;\n};\n\nexport type SourceMessagePart =\n | {\n readonly type: \"source\";\n readonly sourceType: \"url\";\n readonly id: string;\n readonly url: string;\n readonly title?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly url?: undefined;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n };\n\nexport type ImageMessagePart = {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n};\n\nexport type FileMessagePart = {\n readonly type: \"file\";\n readonly filename?: string;\n readonly data: string;\n readonly mimeType: string;\n readonly parentId?: string;\n};\n\nexport type Unstable_AudioMessagePart = {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n};\n\nexport type DataMessagePart<T = any> = {\n readonly type: \"data\";\n readonly name: string;\n readonly data: T;\n};\n\n/**\n * A JSON spec describing a tree of UI components to render.\n *\n * The agent emits a {@link GenerativeUIMessagePart} containing this spec, and\n * the consumer-provided component allowlist is used to resolve `component`\n * names. Any component referenced that is not present in the allowlist is\n * rejected with a typed error — the allowlist is the security boundary in the\n * default same-realm rendering path.\n */\nexport type GenerativeUINode =\n | string\n | {\n /** Allowlisted component name (resolved against the consumer registry). */\n readonly component: string;\n /** Props passed to the resolved component (must be JSON-serializable). */\n readonly props?: Record<string, unknown>;\n /** Optional children — strings render as text, objects recurse. */\n readonly children?: readonly GenerativeUINode[];\n /** Optional stable key for React reconciliation. */\n readonly key?: string;\n };\n\n/**\n * The root spec for a generative UI tree.\n */\nexport type GenerativeUISpec = {\n /** Root node(s) to render. */\n readonly root: GenerativeUINode | readonly GenerativeUINode[];\n};\n\n/**\n * A message part that carries a JSON spec describing UI to render.\n *\n * Render with `<MessagePrimitive.GenerativeUI components={...} />`. The\n * primitive resolves component names against the consumer-provided allowlist\n * — any unknown name throws a typed error rather than rendering. Stream-\n * friendly: a partially-streamed spec renders progressively.\n */\nexport type GenerativeUIMessagePart = {\n readonly type: \"generative-ui\";\n /** The JSON spec describing the UI tree. */\n readonly spec: GenerativeUISpec;\n /** Optional id (useful for replays / stable keys). */\n readonly id?: string;\n readonly parentId?: string;\n};\n\nexport type McpAppMetadata = {\n readonly resourceUri: string;\n readonly mimeType?: string;\n readonly visibility?: readonly (\"model\" | \"app\")[];\n};\n\nexport const MCP_APP_URI_SCHEME = \"ui://\";\n\nexport const isMcpAppUri = (uri: string | undefined): boolean =>\n !!uri?.startsWith(MCP_APP_URI_SCHEME);\n\nexport type ToolCallMessagePartMcpMetadata = {\n readonly app?: McpAppMetadata;\n};\n\nexport type ToolCallMessagePart<\n TArgs = ReadonlyJSONObject,\n TResult = unknown,\n> = {\n /** Identifies this part as a tool call. */\n readonly type: \"tool-call\";\n /** Stable identifier for this invocation of the tool. */\n readonly toolCallId: string;\n /** Name of the tool requested by the model. */\n readonly toolName: string;\n /**\n * Arguments supplied by the model. During streaming this is a partial parse:\n * fields may be missing or incomplete. From a tool-call renderer, use\n * `useToolArgsStatus` to detect which fields are still arriving.\n */\n readonly args: TArgs;\n /** Result returned by the tool, if it has completed. */\n readonly result?: TResult | undefined;\n /** Whether the result represents a tool execution error. */\n readonly isError?: boolean | undefined;\n /** Raw JSON argument text streamed by the model. */\n readonly argsText: string;\n /** UI-only artifact associated with the tool result. */\n readonly artifact?: unknown;\n /** MCP app metadata associated with this tool call, when present. */\n readonly mcp?: ToolCallMessagePartMcpMetadata;\n /** Content returned to the model for this tool result. */\n readonly modelContent?: readonly ToolModelContentPart[] | undefined;\n /** Human-input request that must be resolved before the run can continue. */\n readonly interrupt?: { type: \"human\"; payload: unknown };\n /** Server-side approval gate. `approved === undefined` is the only state in which `respondToApproval` may be called. */\n readonly approval?: {\n readonly id: string;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n };\n /** Parent message-part ID when this part belongs to a nested structure. */\n readonly parentId?: string;\n /**\n * Nested thread messages produced by this tool call, for example a sub-agent\n * conversation.\n */\n readonly messages?: readonly ThreadMessage[];\n};\n\nexport type ThreadUserMessagePart =\n | TextMessagePart\n | ImageMessagePart\n | FileMessagePart\n | DataMessagePart\n | Unstable_AudioMessagePart;\n\nexport type ThreadAssistantMessagePart =\n | TextMessagePart\n | ReasoningMessagePart\n | ToolCallMessagePart\n | SourceMessagePart\n | FileMessagePart\n | ImageMessagePart\n | DataMessagePart\n | GenerativeUIMessagePart;\n\nexport type MessagePartStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"complete\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: unknown;\n };\n\nexport type ToolCallMessagePartStatus =\n | {\n /** The tool call is waiting for UI or human input before continuing. */\n readonly type: \"requires-action\";\n /** Reason the tool call requires action. */\n readonly reason: \"interrupt\";\n }\n | MessagePartStatus;\n\nexport type MessageStatus =\n | {\n readonly type: \"running\";\n }\n | {\n readonly type: \"requires-action\";\n readonly reason: \"tool-calls\" | \"interrupt\";\n }\n | {\n readonly type: \"complete\";\n readonly reason: \"stop\" | \"unknown\";\n }\n | {\n readonly type: \"incomplete\";\n readonly reason:\n | \"cancelled\"\n | \"tool-calls\"\n | \"length\"\n | \"content-filter\"\n | \"other\"\n | \"error\";\n readonly error?: ReadonlyJSONValue;\n };\n\nexport type MessageTiming = {\n readonly streamStartTime: number;\n readonly firstTokenTime?: number;\n readonly totalStreamTime?: number;\n readonly tokenCount?: number;\n readonly tokensPerSecond?: number;\n readonly totalChunks: number;\n readonly toolCallCount: number;\n};\n\nexport type ThreadStep = {\n readonly messageId?: string;\n readonly usage?:\n | {\n readonly inputTokens: number;\n readonly outputTokens: number;\n }\n | undefined;\n};\n\ntype MessageCommonProps = {\n readonly id: string;\n readonly createdAt: Date;\n};\n\nexport type ThreadSystemMessage = MessageCommonProps & {\n readonly role: \"system\";\n readonly content: readonly [TextMessagePart];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadUserMessage = MessageCommonProps & {\n readonly role: \"user\";\n readonly content: readonly ThreadUserMessagePart[];\n readonly attachments: readonly CompleteAttachment[];\n readonly metadata: {\n readonly unstable_state?: undefined;\n readonly unstable_annotations?: undefined;\n readonly unstable_data?: undefined;\n readonly steps?: undefined;\n readonly submittedFeedback?: undefined;\n readonly timing?: undefined;\n readonly custom: Record<string, unknown>;\n };\n};\n\nexport type ThreadAssistantMessage = MessageCommonProps & {\n readonly role: \"assistant\";\n readonly content: readonly ThreadAssistantMessagePart[];\n readonly status: MessageStatus;\n readonly metadata: {\n readonly unstable_state: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n /**\n * Marks a client-side optimistic placeholder. Such messages are evicted\n * once off the head branch and are never persisted.\n */\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n};\n\ntype BaseThreadMessage = {\n readonly status?: ThreadAssistantMessage[\"status\"];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations?: readonly ReadonlyJSONValue[];\n readonly unstable_data?: readonly ReadonlyJSONValue[];\n readonly steps?: readonly ThreadStep[];\n readonly submittedFeedback?: { readonly type: \"positive\" | \"negative\" };\n readonly timing?: MessageTiming;\n readonly isOptimistic?: boolean;\n readonly custom: Record<string, unknown>;\n };\n readonly attachments?: ThreadUserMessage[\"attachments\"];\n};\n\nexport type ThreadMessage = BaseThreadMessage &\n (ThreadSystemMessage | ThreadUserMessage | ThreadAssistantMessage);\n\nexport type MessageRole = ThreadMessage[\"role\"];\n\nexport type RunConfig = {\n readonly custom?: Record<string, unknown>;\n};\n\nexport type AppendMessage = Omit<ThreadMessage, \"id\"> & {\n parentId: string | null;\n\n /** The ID of the message that was edited or undefined. */\n sourceId: string | null;\n runConfig: RunConfig | undefined;\n startRun?: boolean | undefined;\n /** Process this message next; only meaningful for queue-capable runtimes. */\n steer?: boolean | undefined;\n};\n"],"mappings":";AAgIA,MAAa,qBAAqB;AAElC,MAAa,eAAe,QAC1B,CAAC,CAAC,KAAK,WAAW,kBAAkB"}
@@ -6,7 +6,7 @@ declare class CompositeContextProvider implements ModelContextProvider {
6
6
  registerModelContextProvider(provider: ModelContextProvider): () => void;
7
7
  private _subscribers;
8
8
  notifySubscribers(): void;
9
- subscribe(callback: () => void): () => boolean;
9
+ subscribe(callback: () => void): () => void;
10
10
  }
11
11
  //#endregion
12
12
  export { CompositeContextProvider };
@@ -23,7 +23,9 @@ var CompositeContextProvider = class {
23
23
  }
24
24
  subscribe(callback) {
25
25
  this._subscribers.add(callback);
26
- return () => this._subscribers.delete(callback);
26
+ return () => {
27
+ this._subscribers.delete(callback);
28
+ };
27
29
  }
28
30
  };
29
31
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"composite-context-provider.js","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"sourcesContent":["import {\n type ModelContextProvider,\n mergeModelContexts,\n} from \"../model-context/types\";\n\nexport class CompositeContextProvider implements ModelContextProvider {\n private _providers = new Set<ModelContextProvider>();\n\n getModelContext() {\n return mergeModelContexts(this._providers);\n }\n\n registerModelContextProvider(provider: ModelContextProvider) {\n this._providers.add(provider);\n const unsubscribe = provider.subscribe?.(() => {\n this.notifySubscribers();\n });\n this.notifySubscribers();\n return () => {\n this._providers.delete(provider);\n unsubscribe?.();\n this.notifySubscribers();\n };\n }\n\n private _subscribers = new Set<() => void>();\n\n notifySubscribers() {\n for (const callback of this._subscribers) callback();\n }\n\n subscribe(callback: () => void) {\n this._subscribers.add(callback);\n return () => this._subscribers.delete(callback);\n }\n}\n"],"mappings":";;AAKA,IAAa,2BAAb,MAAsE;CACpE,6BAAqB,IAAI,IAA0B;CAEnD,kBAAkB;EAChB,OAAO,mBAAmB,KAAK,UAAU;CAC3C;CAEA,6BAA6B,UAAgC;EAC3D,KAAK,WAAW,IAAI,QAAQ;EAC5B,MAAM,cAAc,SAAS,kBAAkB;GAC7C,KAAK,kBAAkB;EACzB,CAAC;EACD,KAAK,kBAAkB;EACvB,aAAa;GACX,KAAK,WAAW,OAAO,QAAQ;GAC/B,cAAc;GACd,KAAK,kBAAkB;EACzB;CACF;CAEA,+BAAuB,IAAI,IAAgB;CAE3C,oBAAoB;EAClB,KAAK,MAAM,YAAY,KAAK,cAAc,SAAS;CACrD;CAEA,UAAU,UAAsB;EAC9B,KAAK,aAAa,IAAI,QAAQ;EAC9B,aAAa,KAAK,aAAa,OAAO,QAAQ;CAChD;AACF"}
1
+ {"version":3,"file":"composite-context-provider.js","names":[],"sources":["../../src/utils/composite-context-provider.ts"],"sourcesContent":["import {\n type ModelContextProvider,\n mergeModelContexts,\n} from \"../model-context/types\";\n\nexport class CompositeContextProvider implements ModelContextProvider {\n private _providers = new Set<ModelContextProvider>();\n\n getModelContext() {\n return mergeModelContexts(this._providers);\n }\n\n registerModelContextProvider(provider: ModelContextProvider) {\n this._providers.add(provider);\n const unsubscribe = provider.subscribe?.(() => {\n this.notifySubscribers();\n });\n this.notifySubscribers();\n return () => {\n this._providers.delete(provider);\n unsubscribe?.();\n this.notifySubscribers();\n };\n }\n\n private _subscribers = new Set<() => void>();\n\n notifySubscribers() {\n for (const callback of this._subscribers) callback();\n }\n\n subscribe(callback: () => void) {\n this._subscribers.add(callback);\n return () => {\n this._subscribers.delete(callback);\n };\n }\n}\n"],"mappings":";;AAKA,IAAa,2BAAb,MAAsE;CACpE,6BAAqB,IAAI,IAA0B;CAEnD,kBAAkB;EAChB,OAAO,mBAAmB,KAAK,UAAU;CAC3C;CAEA,6BAA6B,UAAgC;EAC3D,KAAK,WAAW,IAAI,QAAQ;EAC5B,MAAM,cAAc,SAAS,kBAAkB;GAC7C,KAAK,kBAAkB;EACzB,CAAC;EACD,KAAK,kBAAkB;EACvB,aAAa;GACX,KAAK,WAAW,OAAO,QAAQ;GAC/B,cAAc;GACd,KAAK,kBAAkB;EACzB;CACF;CAEA,+BAAuB,IAAI,IAAgB;CAE3C,oBAAoB;EAClB,KAAK,MAAM,YAAY,KAAK,cAAc,SAAS;CACrD;CAEA,UAAU,UAAsB;EAC9B,KAAK,aAAa,IAAI,QAAQ;EAC9B,aAAa;GACX,KAAK,aAAa,OAAO,QAAQ;EACnC;CACF;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"is-json.js","names":[],"sources":["../../../src/utils/json/is-json.ts"],"sourcesContent":["import type {\n ReadonlyJSONArray,\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isJSONValue(\n value: unknown,\n currentDepth: number = 0,\n): value is ReadonlyJSONValue {\n // Protect against too deep recursion\n if (currentDepth > 100) {\n return false;\n }\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n // Handle special number cases\n if (typeof value === \"number\") {\n return !Number.isNaN(value) && Number.isFinite(value);\n }\n\n if (Array.isArray(value)) {\n return value.every((item) => isJSONValue(item, currentDepth + 1));\n }\n\n if (isRecord(value)) {\n return Object.entries(value).every(\n ([key, val]) =>\n typeof key === \"string\" && isJSONValue(val, currentDepth + 1),\n );\n }\n\n return false;\n}\n\nexport function isJSONArray(value: unknown): value is ReadonlyJSONArray {\n return Array.isArray(value) && value.every(isJSONValue);\n}\n\nexport function isJSONObject(value: unknown): value is ReadonlyJSONObject {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val),\n )\n );\n}\n"],"mappings":";AAMA,SAAgB,SAAS,OAAkD;CACzE,OAAO,SAAS,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC3E;AAEA,SAAgB,YACd,OACA,eAAuB,GACK;CAE5B,IAAI,eAAe,KACjB,OAAO;CAGT,IACE,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,WAEjB,OAAO;CAIT,IAAI,OAAO,UAAU,UACnB,OAAO,CAAC,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,KAAK;CAGtD,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,OAAO,SAAS,YAAY,MAAM,eAAe,CAAC,CAAC;CAGlE,IAAI,SAAS,KAAK,GAChB,OAAO,OAAO,QAAQ,KAAK,EAAE,OAC1B,CAAC,KAAK,SACL,OAAO,QAAQ,YAAY,YAAY,KAAK,eAAe,CAAC,CAChE;CAGF,OAAO;AACT;AAEA,SAAgB,YAAY,OAA4C;CACtE,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,WAAW;AACxD;AAEA,SAAgB,aAAa,OAA6C;CACxE,OACE,SAAS,KAAK,KACd,OAAO,QAAQ,KAAK,EAAE,OACnB,CAAC,KAAK,SAAS,OAAO,QAAQ,YAAY,YAAY,GAAG,CAC5D;AAEJ"}
1
+ {"version":3,"file":"is-json.js","names":[],"sources":["../../../src/utils/json/is-json.ts"],"sourcesContent":["import type {\n ReadonlyJSONArray,\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function isJSONValue(\n value: unknown,\n currentDepth: number = 0,\n): value is ReadonlyJSONValue {\n // Protect against too deep recursion\n if (currentDepth > 100) {\n return false;\n }\n\n if (\n value === null ||\n typeof value === \"string\" ||\n typeof value === \"boolean\"\n ) {\n return true;\n }\n\n // Handle special number cases\n if (typeof value === \"number\") {\n return !Number.isNaN(value) && Number.isFinite(value);\n }\n\n if (Array.isArray(value)) {\n return value.every((item) => isJSONValue(item, currentDepth + 1));\n }\n\n if (isRecord(value)) {\n return Object.entries(value).every(\n ([key, val]) =>\n typeof key === \"string\" && isJSONValue(val, currentDepth + 1),\n );\n }\n\n return false;\n}\n\nexport function isJSONArray(value: unknown): value is ReadonlyJSONArray {\n return Array.isArray(value) && value.every(isJSONValue);\n}\n\nexport function isJSONObject(value: unknown): value is ReadonlyJSONObject {\n return (\n isRecord(value) &&\n Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && isJSONValue(val),\n )\n );\n}\n"],"mappings":";AAMA,SAAgB,SAAS,OAAkD;CACzE,OAAO,SAAS,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC3E;AAEA,SAAgB,YACd,OACA,eAAuB,GACK;CAE5B,IAAI,eAAe,KACjB,OAAO;CAGT,IACE,UAAU,QACV,OAAO,UAAU,YACjB,OAAO,UAAU,WAEjB,OAAO;CAIT,IAAI,OAAO,UAAU,UACnB,OAAO,CAAC,OAAO,MAAM,KAAK,KAAK,OAAO,SAAS,KAAK;CAGtD,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,OAAO,SAAS,YAAY,MAAM,eAAe,CAAC,CAAC;CAGlE,IAAI,SAAS,KAAK,GAChB,OAAO,OAAO,QAAQ,KAAK,CAAC,CAAC,OAC1B,CAAC,KAAK,SACL,OAAO,QAAQ,YAAY,YAAY,KAAK,eAAe,CAAC,CAChE;CAGF,OAAO;AACT;AAEA,SAAgB,YAAY,OAA4C;CACtE,OAAO,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,WAAW;AACxD;AAEA,SAAgB,aAAa,OAA6C;CACxE,OACE,SAAS,KAAK,KACd,OAAO,QAAQ,KAAK,CAAC,CAAC,OACnB,CAAC,KAAK,SAAS,OAAO,QAAQ,YAAY,YAAY,GAAG,CAC5D;AAEJ"}