@assistant-ui/core 0.3.17 → 0.3.19

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 (470) hide show
  1. package/dist/adapters/attachment.d.ts.map +1 -1
  2. package/dist/adapters/attachment.js +5 -4
  3. package/dist/adapters/attachment.js.map +1 -1
  4. package/dist/adapters/speech.d.ts.map +1 -1
  5. package/dist/adapters/speech.js +13 -3
  6. package/dist/adapters/speech.js.map +1 -1
  7. package/dist/adapters/thread-history.d.ts +4 -0
  8. package/dist/adapters/thread-history.d.ts.map +1 -1
  9. package/dist/index.d.ts +3 -3
  10. package/dist/index.js.map +1 -1
  11. package/dist/internal.d.ts +4 -3
  12. package/dist/internal.js +3 -2
  13. package/dist/model-context/frame/host.d.ts.map +1 -1
  14. package/dist/model-context/frame/host.js +35 -14
  15. package/dist/model-context/frame/host.js.map +1 -1
  16. package/dist/model-context/frame/provider.d.ts +2 -0
  17. package/dist/model-context/frame/provider.d.ts.map +1 -1
  18. package/dist/model-context/frame/provider.js +30 -7
  19. package/dist/model-context/frame/provider.js.map +1 -1
  20. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  21. package/dist/model-context/interactable-composer-metadata.js +27 -18
  22. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  23. package/dist/model-context/registry.d.ts.map +1 -1
  24. package/dist/model-context/registry.js +3 -5
  25. package/dist/model-context/registry.js.map +1 -1
  26. package/dist/model-context/types.d.ts.map +1 -1
  27. package/dist/model-context/types.js +5 -4
  28. package/dist/model-context/types.js.map +1 -1
  29. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  30. package/dist/react/adapters/LocalStorageThreadListAdapter.js +45 -7
  31. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  32. package/dist/react/client/DataRenderers.d.ts.map +1 -1
  33. package/dist/react/client/DataRenderers.js +20 -15
  34. package/dist/react/client/DataRenderers.js.map +1 -1
  35. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  36. package/dist/react/client/InMemoryThreadList.js +62 -56
  37. package/dist/react/client/InMemoryThreadList.js.map +1 -1
  38. package/dist/react/client/Interactables.d.ts.map +1 -1
  39. package/dist/react/client/Interactables.js +35 -32
  40. package/dist/react/client/Interactables.js.map +1 -1
  41. package/dist/react/client/RemoteThreadList.d.ts +1 -0
  42. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  43. package/dist/react/client/RemoteThreadList.js +154 -143
  44. package/dist/react/client/RemoteThreadList.js.map +1 -1
  45. package/dist/react/client/Tools.d.ts.map +1 -1
  46. package/dist/react/client/Tools.js +18 -16
  47. package/dist/react/client/Tools.js.map +1 -1
  48. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  49. package/dist/react/client/interactable-model-context.js +3 -2
  50. package/dist/react/client/interactable-model-context.js.map +1 -1
  51. package/dist/react/index.d.ts +2 -2
  52. package/dist/react/index.js +2 -2
  53. package/dist/react/interactables-legacy/Interactables.js +242 -121
  54. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  55. package/dist/react/interactables-legacy/useAssistantInteractable.d.ts.map +1 -1
  56. package/dist/react/interactables-legacy/useAssistantInteractable.js +3 -0
  57. package/dist/react/interactables-legacy/useAssistantInteractable.js.map +1 -1
  58. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  59. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
  60. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
  61. package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
  62. package/dist/react/model-context/makeAssistantTool.js +1 -1
  63. package/dist/react/model-context/makeAssistantTool.js.map +1 -1
  64. package/dist/react/model-context/useAssistantTool.d.ts +2 -2
  65. package/dist/react/model-context/useAssistantTool.js +1 -1
  66. package/dist/react/model-context/useAssistantTool.js.map +1 -1
  67. package/dist/react/model-context/useInteractable.d.ts.map +1 -1
  68. package/dist/react/model-context/useInteractable.js +4 -1
  69. package/dist/react/model-context/useInteractable.js.map +1 -1
  70. package/dist/react/model-context/useInteractableVersions.js +1 -1
  71. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  72. package/dist/react/model-context/useToolArgsStatus.js +2 -1
  73. package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
  74. package/dist/react/primitives/message/MessageGroupedParts.d.ts +11 -2
  75. package/dist/react/primitives/message/MessageGroupedParts.d.ts.map +1 -1
  76. package/dist/react/primitives/message/MessageGroupedParts.js +3 -2
  77. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  78. package/dist/react/primitives/part/PartMessages.d.ts +1 -0
  79. package/dist/react/primitives/part/PartMessages.d.ts.map +1 -1
  80. package/dist/react/primitives/part/PartMessages.js +1 -0
  81. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  82. package/dist/react/primitives/thread/ThreadMessages.d.ts.map +1 -1
  83. package/dist/react/primitives/thread/ThreadMessages.js +6 -5
  84. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  85. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  86. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +16 -8
  87. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  88. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -1
  89. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  90. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +105 -104
  91. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  92. package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -0
  93. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  94. package/dist/react/runtimes/RemoteThreadResource.js +13 -11
  95. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  96. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +5 -24
  97. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  98. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +354 -226
  99. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  100. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts +1 -0
  101. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  102. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +22 -2
  103. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  104. package/dist/react/runtimes/cloud/auiV0.d.ts +40 -15
  105. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  106. package/dist/react/runtimes/cloud/auiV0.js +62 -15
  107. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  108. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +2 -1
  109. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  110. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +6 -1
  111. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
  112. package/dist/react/runtimes/cloud/sdkIdentity.d.ts +6 -0
  113. package/dist/react/runtimes/cloud/sdkIdentity.d.ts.map +1 -0
  114. package/dist/react/runtimes/cloud/sdkIdentity.js +9 -0
  115. package/dist/react/runtimes/cloud/sdkIdentity.js.map +1 -0
  116. package/dist/react/runtimes/external-message-converter.d.ts +12 -2
  117. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  118. package/dist/react/runtimes/external-message-converter.js +26 -61
  119. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  120. package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
  121. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  122. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  123. package/dist/react/runtimes/useRemoteThreadListRuntime.js +64 -24
  124. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  125. package/dist/react/utils/groupParts.d.ts +6 -1
  126. package/dist/react/utils/groupParts.d.ts.map +1 -1
  127. package/dist/react/utils/groupParts.js +6 -0
  128. package/dist/react/utils/groupParts.js.map +1 -1
  129. package/dist/react/utils/useJSONEqual.d.ts +3 -1
  130. package/dist/react/utils/useJSONEqual.d.ts.map +1 -1
  131. package/dist/react/utils/useJSONEqual.js +6 -1
  132. package/dist/react/utils/useJSONEqual.js.map +1 -1
  133. package/dist/react/utils/useJSONSchemaDependency.d.ts +7 -0
  134. package/dist/react/utils/useJSONSchemaDependency.d.ts.map +1 -0
  135. package/dist/react/utils/useJSONSchemaDependency.js +20 -0
  136. package/dist/react/utils/useJSONSchemaDependency.js.map +1 -0
  137. package/dist/runtime/api/thread-list-item-runtime.d.ts +7 -3
  138. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  139. package/dist/runtime/api/thread-list-item-runtime.js +2 -2
  140. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  141. package/dist/runtime/api/thread-list-runtime.d.ts +3 -0
  142. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  143. package/dist/runtime/api/thread-list-runtime.js +18 -14
  144. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  145. package/dist/runtime/api/thread-runtime.d.ts +4 -0
  146. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  147. package/dist/runtime/api/thread-runtime.js +3 -6
  148. package/dist/runtime/api/thread-runtime.js.map +1 -1
  149. package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -0
  150. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  151. package/dist/runtime/base/base-composer-runtime-core.js +62 -22
  152. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  153. package/dist/runtime/base/base-thread-runtime-core.d.ts +2 -0
  154. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  155. package/dist/runtime/base/base-thread-runtime-core.js +161 -69
  156. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  157. package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
  158. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  159. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -1
  160. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  161. package/dist/runtime/interfaces/thread-runtime-core.d.ts +6 -0
  162. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  163. package/dist/runtime/queue/message-queue.d.ts +5 -0
  164. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  165. package/dist/runtime/queue/message-queue.js +61 -6
  166. package/dist/runtime/queue/message-queue.js.map +1 -1
  167. package/dist/runtime/utils/auto-status.d.ts +6 -2
  168. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  169. package/dist/runtime/utils/auto-status.js +12 -4
  170. package/dist/runtime/utils/auto-status.js.map +1 -1
  171. package/dist/runtime/utils/external-message-conversion.d.ts +16 -4
  172. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -1
  173. package/dist/runtime/utils/external-message-conversion.js +49 -13
  174. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  175. package/dist/runtime/utils/message-repository.d.ts +1 -0
  176. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  177. package/dist/runtime/utils/message-repository.js +18 -9
  178. package/dist/runtime/utils/message-repository.js.map +1 -1
  179. package/dist/runtime/utils/thread-message-like.d.ts +2 -1
  180. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  181. package/dist/runtime/utils/thread-message-like.js +5 -3
  182. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  183. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  184. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
  185. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  186. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  187. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +8 -1
  188. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  189. package/dist/runtimes/internal.d.ts +3 -3
  190. package/dist/runtimes/internal.js +2 -2
  191. package/dist/runtimes/local/local-thread-runtime-core.d.ts +1 -1
  192. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  193. package/dist/runtimes/local/local-thread-runtime-core.js +4 -1
  194. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  195. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -1
  196. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  197. package/dist/runtimes/remote-thread-list/remote-thread-state.js +130 -42
  198. package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
  199. package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
  200. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
  201. package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
  202. package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
  203. package/dist/runtimes/remote-thread-list/title.d.ts +3 -1
  204. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  205. package/dist/runtimes/remote-thread-list/title.js +9 -1
  206. package/dist/runtimes/remote-thread-list/title.js.map +1 -1
  207. package/dist/runtimes/remote-thread-list/types.d.ts +10 -0
  208. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  209. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  210. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +2 -1
  211. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  212. package/dist/store/clients/external-thread.d.ts.map +1 -1
  213. package/dist/store/clients/external-thread.js +260 -203
  214. package/dist/store/clients/external-thread.js.map +1 -1
  215. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  216. package/dist/store/clients/model-context-client.js +2 -1
  217. package/dist/store/clients/model-context-client.js.map +1 -1
  218. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  219. package/dist/store/clients/single-thread-list.js +1 -0
  220. package/dist/store/clients/single-thread-list.js.map +1 -1
  221. package/dist/store/clients/suggestions.d.ts.map +1 -1
  222. package/dist/store/clients/suggestions.js +5 -4
  223. package/dist/store/clients/suggestions.js.map +1 -1
  224. package/dist/store/clients/thread-tasks.d.ts +13 -0
  225. package/dist/store/clients/thread-tasks.d.ts.map +1 -0
  226. package/dist/store/clients/thread-tasks.js +69 -0
  227. package/dist/store/clients/thread-tasks.js.map +1 -0
  228. package/dist/store/index.d.ts +3 -2
  229. package/dist/store/index.js +3 -3
  230. package/dist/store/primitive-predicates.d.ts.map +1 -1
  231. package/dist/store/primitive-predicates.js +4 -4
  232. package/dist/store/primitive-predicates.js.map +1 -1
  233. package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -0
  234. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  235. package/dist/store/runtime-clients/composer-runtime-client.js +97 -61
  236. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  237. package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
  238. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  239. package/dist/store/runtime-clients/message-runtime-client.js +221 -144
  240. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  241. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  242. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
  243. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  244. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  245. package/dist/store/runtime-clients/thread-list-runtime-client.js +54 -52
  246. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  247. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  248. package/dist/store/runtime-clients/thread-runtime-client.js +246 -126
  249. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  250. package/dist/store/scope-registration.d.ts +2 -0
  251. package/dist/store/scope-registration.d.ts.map +1 -1
  252. package/dist/store/scopes/composer.d.ts +10 -2
  253. package/dist/store/scopes/composer.d.ts.map +1 -1
  254. package/dist/store/scopes/message.d.ts +30 -1
  255. package/dist/store/scopes/message.d.ts.map +1 -1
  256. package/dist/store/scopes/task.d.ts +36 -0
  257. package/dist/store/scopes/task.d.ts.map +1 -0
  258. package/dist/store/scopes/task.js +0 -0
  259. package/dist/store/scopes/thread-list-item.d.ts +2 -2
  260. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  261. package/dist/store/scopes/thread.d.ts +28 -0
  262. package/dist/store/scopes/thread.d.ts.map +1 -1
  263. package/dist/store/scopes/threads.d.ts +1 -0
  264. package/dist/store/scopes/threads.d.ts.map +1 -1
  265. package/dist/subscribable/subscribable.d.ts +2 -1
  266. package/dist/subscribable/subscribable.d.ts.map +1 -1
  267. package/dist/subscribable/subscribable.js +23 -15
  268. package/dist/subscribable/subscribable.js.map +1 -1
  269. package/dist/types/attachment.d.ts +2 -1
  270. package/dist/types/attachment.d.ts.map +1 -1
  271. package/dist/types/attachment.js +2 -1
  272. package/dist/types/attachment.js.map +1 -1
  273. package/dist/types/index.d.ts +2 -2
  274. package/dist/types/message.d.ts +8 -1
  275. package/dist/types/message.d.ts.map +1 -1
  276. package/dist/types/message.js.map +1 -1
  277. package/dist/utils/abortable-iterable.d.ts +19 -0
  278. package/dist/utils/abortable-iterable.d.ts.map +1 -0
  279. package/dist/utils/abortable-iterable.js +88 -0
  280. package/dist/utils/abortable-iterable.js.map +1 -0
  281. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  282. package/dist/utils/composite-context-provider.js +20 -2
  283. package/dist/utils/composite-context-provider.js.map +1 -1
  284. package/dist/utils/getGroupStatus.d.ts +18 -2
  285. package/dist/utils/getGroupStatus.d.ts.map +1 -1
  286. package/dist/utils/getGroupStatus.js +32 -7
  287. package/dist/utils/getGroupStatus.js.map +1 -1
  288. package/dist/utils/record.d.ts +11 -0
  289. package/dist/utils/record.d.ts.map +1 -0
  290. package/dist/utils/record.js +12 -0
  291. package/dist/utils/record.js.map +1 -0
  292. package/dist/utils/wire-media.d.ts.map +1 -1
  293. package/dist/utils/wire-media.js +2 -2
  294. package/dist/utils/wire-media.js.map +1 -1
  295. package/package.json +11 -11
  296. package/src/adapters/attachment.test.ts +50 -1
  297. package/src/adapters/attachment.ts +7 -4
  298. package/src/adapters/speech.test.ts +236 -0
  299. package/src/adapters/speech.ts +17 -10
  300. package/src/adapters/thread-history.ts +3 -0
  301. package/src/index.ts +2 -0
  302. package/src/internal.ts +4 -0
  303. package/src/model-context/frame/host.test.ts +137 -1
  304. package/src/model-context/frame/host.ts +49 -16
  305. package/src/model-context/frame/provider.test.ts +71 -0
  306. package/src/model-context/frame/provider.ts +37 -7
  307. package/src/model-context/interactable-composer-metadata.test.ts +58 -0
  308. package/src/model-context/interactable-composer-metadata.ts +19 -13
  309. package/src/model-context/registry.test.ts +12 -0
  310. package/src/model-context/registry.ts +3 -2
  311. package/src/model-context/types.test.ts +25 -0
  312. package/src/model-context/types.ts +9 -4
  313. package/src/react/RuntimeAdapter.test.ts +34 -0
  314. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +244 -0
  315. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +104 -7
  316. package/src/react/client/DataRenderers.test.tsx +45 -0
  317. package/src/react/client/DataRenderers.ts +13 -9
  318. package/src/react/client/InMemoryThreadList.ts +1 -0
  319. package/src/react/client/Interactables.test.ts +72 -1
  320. package/src/react/client/Interactables.ts +22 -14
  321. package/src/react/client/RemoteThreadList.background.test.ts +148 -6
  322. package/src/react/client/RemoteThreadList.concurrent.test.tsx +42 -1
  323. package/src/react/client/RemoteThreadList.test.ts +386 -4
  324. package/src/react/client/RemoteThreadList.ts +181 -112
  325. package/src/react/client/Tools.ts +22 -11
  326. package/src/react/client/interactable-model-context.test.ts +44 -0
  327. package/src/react/client/interactable-model-context.ts +3 -2
  328. package/src/react/index.ts +5 -1
  329. package/src/react/interactables-legacy/Interactables.ts +16 -16
  330. package/src/react/interactables-legacy/useAssistantInteractable.test.tsx +132 -0
  331. package/src/react/interactables-legacy/useAssistantInteractable.ts +10 -1
  332. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
  333. package/src/react/model-context/makeAssistantTool.ts +2 -2
  334. package/src/react/model-context/useAssistantTool.ts +2 -2
  335. package/src/react/model-context/useInteractable.test.tsx +177 -0
  336. package/src/react/model-context/useInteractable.ts +3 -0
  337. package/src/react/model-context/useToolArgsStatus.test.tsx +30 -0
  338. package/src/react/model-context/useToolArgsStatus.ts +2 -1
  339. package/src/react/primitive-hooks/useActionBarCopy.test.ts +0 -1
  340. package/src/react/primitive-hooks/useSuggestionTrigger.test.ts +0 -1
  341. package/src/react/primitives/message/MessageGroupedParts.test.tsx +96 -0
  342. package/src/react/primitives/message/MessageGroupedParts.tsx +15 -4
  343. package/src/react/primitives/part/PartMessages.test.tsx +104 -1
  344. package/src/react/primitives/part/PartMessages.tsx +1 -0
  345. package/src/react/primitives/thread/ThreadMessages.test.tsx +142 -0
  346. package/src/react/primitives/thread/ThreadMessages.tsx +8 -5
  347. package/src/react/providers/ReadonlyThreadProvider.test.tsx +56 -0
  348. package/src/react/runtimes/RemoteThreadListHookInstanceManager.destroy.test.tsx +172 -0
  349. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +33 -0
  350. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
  351. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +28 -5
  352. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
  353. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +105 -0
  354. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +143 -112
  355. package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
  356. package/src/react/runtimes/RemoteThreadResource.ts +19 -12
  357. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +20 -14
  358. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +703 -6
  359. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +492 -402
  360. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +77 -0
  361. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +27 -1
  362. package/src/react/runtimes/cloud/auiV0.ts +160 -25
  363. package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +36 -0
  364. package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +8 -1
  365. package/src/react/runtimes/cloud/sdkIdentity.ts +9 -0
  366. package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +18 -4
  367. package/src/react/runtimes/external-message-converter.test.ts +136 -1
  368. package/src/react/runtimes/external-message-converter.ts +39 -93
  369. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
  370. package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
  371. package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
  372. package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
  373. package/src/react/runtimes/useRemoteThreadListRuntime.ts +34 -1
  374. package/src/react/utils/groupParts.ts +12 -1
  375. package/src/react/utils/useJSONEqual.ts +9 -0
  376. package/src/react/utils/useJSONSchemaDependency.ts +22 -0
  377. package/src/runtime/api/message-runtime.test.ts +75 -0
  378. package/src/runtime/api/thread-list-item-runtime.ts +10 -3
  379. package/src/runtime/api/thread-list-runtime.ts +21 -11
  380. package/src/runtime/api/thread-runtime.test.ts +136 -0
  381. package/src/runtime/api/thread-runtime.ts +10 -5
  382. package/src/runtime/base/base-composer-runtime-core.ts +105 -24
  383. package/src/runtime/base/base-thread-runtime-core.test.ts +1063 -2
  384. package/src/runtime/base/base-thread-runtime-core.ts +228 -87
  385. package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
  386. package/src/runtime/interfaces/thread-list-runtime-core.ts +5 -1
  387. package/src/runtime/interfaces/thread-runtime-core.ts +6 -0
  388. package/src/runtime/queue/message-queue.ts +68 -6
  389. package/src/runtime/utils/auto-status.test.ts +112 -1
  390. package/src/runtime/utils/auto-status.ts +31 -5
  391. package/src/runtime/utils/external-message-conversion.test.ts +202 -0
  392. package/src/runtime/utils/external-message-conversion.ts +123 -32
  393. package/src/runtime/utils/message-repository.test.ts +49 -0
  394. package/src/runtime/utils/message-repository.ts +32 -20
  395. package/src/runtime/utils/thread-message-like.test.ts +52 -0
  396. package/src/runtime/utils/thread-message-like.ts +5 -1
  397. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +18 -13
  398. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +31 -1
  399. package/src/runtimes/internal.ts +1 -0
  400. package/src/runtimes/local/local-thread-runtime-core.test.ts +21 -0
  401. package/src/runtimes/local/local-thread-runtime-core.ts +11 -1
  402. package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +128 -2
  403. package/src/runtimes/remote-thread-list/remote-thread-state.ts +182 -42
  404. package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
  405. package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
  406. package/src/runtimes/remote-thread-list/title.test.ts +62 -0
  407. package/src/runtimes/remote-thread-list/title.ts +13 -0
  408. package/src/runtimes/remote-thread-list/types.ts +10 -0
  409. package/src/runtimes/tool-invocations/EDGE_CASES.md +2 -6
  410. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +133 -0
  411. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +10 -6
  412. package/src/store/clients/external-thread.ts +67 -4
  413. package/src/store/clients/model-context-client.ts +5 -1
  414. package/src/store/clients/single-thread-list.ts +1 -0
  415. package/src/store/clients/suggestions.test.ts +40 -0
  416. package/src/store/clients/suggestions.ts +13 -10
  417. package/src/store/clients/thread-tasks.test.ts +274 -0
  418. package/src/store/clients/thread-tasks.ts +138 -0
  419. package/src/store/index.ts +8 -0
  420. package/src/store/primitive-predicates.test.ts +48 -5
  421. package/src/store/primitive-predicates.ts +7 -2
  422. package/src/store/runtime-clients/composer-runtime-client.ts +42 -9
  423. package/src/store/runtime-clients/message-runtime-client.ts +54 -6
  424. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
  425. package/src/store/runtime-clients/thread-list-runtime-client.ts +1 -0
  426. package/src/store/runtime-clients/thread-runtime-client.ts +89 -11
  427. package/src/store/scope-registration.ts +2 -0
  428. package/src/store/scopes/composer.ts +16 -4
  429. package/src/store/scopes/message.ts +14 -0
  430. package/src/store/scopes/task.ts +34 -0
  431. package/src/store/scopes/thread-list-item.ts +5 -2
  432. package/src/store/scopes/thread.ts +20 -0
  433. package/src/store/scopes/threads.ts +1 -0
  434. package/src/store/thread-tasks.test.tsx +209 -0
  435. package/src/subscribable/subscribable.test.ts +156 -1
  436. package/src/subscribable/subscribable.ts +25 -15
  437. package/src/tests/MessageRepository.test.ts +117 -5
  438. package/src/tests/OptimisticState-list-race.test.ts +1 -0
  439. package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
  440. package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +47 -0
  441. package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +89 -0
  442. package/src/tests/attachment-adapters.test.ts +14 -0
  443. package/src/tests/auiV0Encode.test.ts +300 -0
  444. package/src/tests/base-composer-runtime-core-send.test.ts +51 -0
  445. package/src/tests/base-composer-runtime-core.test.ts +353 -2
  446. package/src/tests/external-store-thread-list-runtime-core.test.ts +83 -0
  447. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +178 -18
  448. package/src/tests/external-thread-attachments.test.tsx +208 -0
  449. package/src/tests/external-thread-parity.test.tsx +57 -0
  450. package/src/tests/groupParts.test.ts +71 -0
  451. package/src/tests/message-queue.test.ts +253 -0
  452. package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
  453. package/src/tests/remote-thread-list-reactive-threadId.test.ts +51 -0
  454. package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
  455. package/src/tests/thread-switch-events.test.tsx +78 -0
  456. package/src/tests/tools-scope-migration.test.tsx +28 -0
  457. package/src/tests/useRemoteThreadListRuntime-controlled.test.tsx +43 -0
  458. package/src/types/attachment.ts +4 -0
  459. package/src/types/index.ts +1 -0
  460. package/src/types/message.ts +8 -0
  461. package/src/utils/abortable-iterable.test.ts +328 -0
  462. package/src/utils/abortable-iterable.ts +104 -0
  463. package/src/utils/composite-context-provider.test.ts +25 -0
  464. package/src/utils/composite-context-provider.ts +23 -2
  465. package/src/utils/getGroupStatus.test.ts +70 -4
  466. package/src/utils/getGroupStatus.ts +35 -12
  467. package/src/utils/record.test.ts +48 -0
  468. package/src/utils/record.ts +11 -0
  469. package/src/utils/wire-media.test.ts +10 -0
  470. package/src/utils/wire-media.ts +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"auiV0.js","names":["MessageStatus","SourceProviderMetadata","ThreadMessage","ToolApprovalDisplay","ToolApprovalOption","CompleteAttachment","fromThreadMessageLike","CloudMessage","isJSONValue","ReadonlyJSONObject","ReadonlyJSONValue","ExportedMessageRepositoryItem","AuiV0ToolApproval","id","prompt","display","allowFreeform","approved","reason","isAutomatic","options","optionId","text","resolution","AuiV0MessagePart","type","unstable_summary","sourceType","url","title","providerMetadata","mediaType","filename","toolCallId","toolName","args","result","isError","approval","argsText","image","data","mimeType","name","AuiV0AttachmentPart","audio","format","AuiV0Attachment","contentType","status","content","AuiV0Message","role","attachments","metadata","unstable_state","unstable_annotations","unstable_data","steps","usage","inputTokens","outputTokens","custom","encodeAttachmentPart","part","undefined","console","warn","JSON","stringify","unhandledType","Error","encodeAttachments","message","length","map","auiV0Encode","auiV0Decode","cloudMessage","payload","createdAt","created_at","parentId","parent_id"],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"sourcesContent":["import type {\n MessageStatus,\n SourceProviderMetadata,\n ThreadMessage,\n ToolApprovalDisplay,\n ToolApprovalOption,\n} from \"../../../types/message\";\nimport type { CompleteAttachment } from \"../../../types/attachment\";\nimport { fromThreadMessageLike } from \"../../../runtime/utils/thread-message-like\";\nimport type { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../../utils/json/is-json\";\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\n\ntype AuiV0ToolApproval = {\n readonly id: string;\n readonly prompt?: string;\n readonly display?: ToolApprovalDisplay;\n readonly allowFreeform?: boolean;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n readonly options?: readonly ToolApprovalOption[];\n readonly optionId?: string;\n readonly text?: string;\n readonly resolution?: \"cancelled\" | \"expired\";\n};\n\ntype AuiV0MessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly unstable_summary?: string;\n }\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 }\n | {\n readonly type: \"source\";\n readonly sourceType: \"document\";\n readonly id: string;\n readonly title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly args: ReadonlyJSONObject;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n readonly approval?: AuiV0ToolApproval;\n }\n | {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly argsText: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n readonly approval?: AuiV0ToolApproval;\n }\n | {\n readonly type: \"image\";\n readonly image: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n readonly sourceType?: \"url\" | \"id\";\n }\n | {\n readonly type: \"data\";\n readonly name: string;\n readonly data: ReadonlyJSONValue;\n };\n\ntype AuiV0AttachmentPart =\n | {\n readonly type: \"text\";\n readonly text: string;\n }\n | {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n readonly sourceType?: \"url\" | \"id\";\n }\n | {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n }\n | {\n readonly type: \"data\";\n readonly name: string;\n readonly data: ReadonlyJSONValue;\n };\n\ntype AuiV0Attachment = {\n readonly id: string;\n readonly type: CompleteAttachment[\"type\"];\n readonly name: string;\n readonly contentType?: string;\n readonly status: CompleteAttachment[\"status\"];\n readonly content: readonly AuiV0AttachmentPart[];\n};\n\ntype AuiV0Message = {\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessagePart[];\n readonly attachments?: readonly AuiV0Attachment[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nconst encodeAttachmentPart = (\n part: CompleteAttachment[\"content\"][number],\n): AuiV0AttachmentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"image\":\n return {\n type: \"image\",\n image: part.image,\n ...(part.filename != null ? { filename: part.filename } : undefined),\n };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename != null ? { filename: part.filename } : undefined),\n ...(part.sourceType != null\n ? { sourceType: part.sourceType }\n : undefined),\n };\n\n case \"audio\":\n return {\n type: \"audio\",\n audio: { data: part.audio.data, format: part.audio.format },\n };\n\n case \"data\": {\n if (!isJSONValue(part.data)) {\n console.warn(`attachment data is not JSON! ${JSON.stringify(part)}`);\n }\n return {\n type: \"data\",\n name: part.name,\n data: part.data as ReadonlyJSONValue,\n };\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(\n `Attachment part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n};\n\nconst encodeAttachments = (\n message: ThreadMessage,\n): readonly AuiV0Attachment[] | undefined => {\n if (message.role !== \"user\" || message.attachments.length === 0) {\n return undefined;\n }\n\n return message.attachments.map(\n ({ id, type, name, contentType, status, content }) => ({\n id,\n type,\n name,\n status,\n ...(contentType != null ? { contentType } : undefined),\n content: content.map(encodeAttachmentPart),\n }),\n );\n};\n\nexport function auiV0Encode(message: ThreadMessage): AuiV0Message {\n // info: ID and createdAt are ignored (we use the server value instead)\n const status: MessageStatus | undefined =\n message.status?.type === \"running\"\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : message.status;\n const attachments = encodeAttachments(message);\n\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return { type: \"text\", text: part.text };\n\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: part.text,\n ...(part.unstable_summary !== undefined\n ? { unstable_summary: part.unstable_summary }\n : undefined),\n };\n\n case \"source\":\n if (part.sourceType === \"url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.id,\n url: part.url,\n ...(part.title != null ? { title: part.title } : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n }\n\n return {\n type: \"source\",\n sourceType: \"document\",\n id: part.id,\n title: part.title,\n mediaType: part.mediaType,\n ...(part.filename != null\n ? { filename: part.filename }\n : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n };\n\n case \"tool-call\": {\n if (part.result !== undefined && !isJSONValue(part.result)) {\n console.warn(\n `tool-call result is not JSON! ${JSON.stringify(part)}`,\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? { args: part.args }\n : { argsText: part.argsText }),\n ...(part.result !== undefined\n ? { result: part.result as ReadonlyJSONValue }\n : undefined),\n ...(part.isError ? { isError: true } : undefined),\n ...(part.approval ? { approval: part.approval } : undefined),\n };\n }\n\n case \"image\":\n return { type: \"image\", image: part.image };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename ? { filename: part.filename } : undefined),\n ...(part.sourceType ? { sourceType: part.sourceType } : undefined),\n };\n\n case \"data\": {\n if (!isJSONValue(part.data)) {\n console.warn(`data part is not JSON! ${JSON.stringify(part)}`);\n }\n return {\n type: \"data\",\n name: part.name,\n data: part.data as ReadonlyJSONValue,\n };\n }\n\n default: {\n const unhandledType: \"audio\" | \"generative-ui\" = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(status ? { status } : undefined),\n ...(attachments ? { attachments } : undefined),\n };\n}\n\nexport function auiV0Decode(\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = fromThreadMessageLike(\n {\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n ...payload,\n },\n cloudMessage.id,\n { type: \"complete\", reason: \"unknown\" },\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"auiV0.js","names":["MessageStatus","SourceProviderMetadata","ThreadMessage","ToolCallMessagePartMcpMetadata","ToolCallTiming","ToolApprovalDisplay","ToolApprovalOption","ReasoningMessagePart","CompleteAttachment","fromThreadMessageLike","ThreadMessageLike","CloudMessage","isJSONValue","ReadonlyJSONObject","ReadonlyJSONValue","ExportedMessageRepositoryItem","AuiV0ToolApproval","id","prompt","display","allowFreeform","approved","reason","isAutomatic","options","optionId","text","resolution","AuiV0MessagePart","type","parentId","unstable_summary","providerMetadata","NonNullable","sourceType","url","title","mediaType","filename","AuiV0ToolCallPart","args","argsText","image","data","mimeType","name","audio","format","spec","toolCallId","toolName","result","isError","interrupt","payload","timing","mcp","approval","messages","AuiV0Message","AuiV0AttachmentPart","AuiV0Attachment","contentType","status","content","createdAt","role","attachments","metadata","unstable_state","unstable_annotations","unstable_data","steps","usage","inputTokens","outputTokens","custom","encodeAttachmentPart","part","undefined","console","warn","JSON","stringify","unhandledType","Error","encodeAttachments","message","length","map","auiV0Encode","encodeNestedMessage","auiV0Decode","cloudMessage","decodeAuiV0Message","created_at","parent_id","toISOString","Omit","Date","fallbackId","index","nestedIndex"],"sources":["../../../../src/react/runtimes/cloud/auiV0.ts"],"sourcesContent":["import type {\n MessageStatus,\n SourceProviderMetadata,\n ThreadMessage,\n ToolCallMessagePartMcpMetadata,\n ToolCallTiming,\n ToolApprovalDisplay,\n ToolApprovalOption,\n ReasoningMessagePart,\n} from \"../../../types/message\";\nimport type { CompleteAttachment } from \"../../../types/attachment\";\nimport {\n fromThreadMessageLike,\n type ThreadMessageLike,\n} from \"../../../runtime/utils/thread-message-like\";\nimport type { CloudMessage } from \"assistant-cloud\";\nimport { isJSONValue } from \"../../../utils/json/is-json\";\nimport type {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\nimport type { ExportedMessageRepositoryItem } from \"../../../runtime/utils/message-repository\";\n\ntype AuiV0ToolApproval = {\n readonly id: string;\n readonly prompt?: string;\n readonly display?: ToolApprovalDisplay;\n readonly allowFreeform?: boolean;\n readonly approved?: boolean;\n readonly reason?: string;\n readonly isAutomatic?: boolean;\n readonly options?: readonly ToolApprovalOption[];\n readonly optionId?: string;\n readonly text?: string;\n readonly resolution?: \"cancelled\" | \"expired\";\n};\n\ntype AuiV0MessagePart =\n | {\n readonly type: \"text\";\n readonly text: string;\n readonly parentId?: string;\n }\n | {\n readonly type: \"reasoning\";\n readonly text: string;\n readonly unstable_summary?: string;\n readonly providerMetadata?: NonNullable<\n ReasoningMessagePart[\"providerMetadata\"]\n >;\n readonly parentId?: string;\n }\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 title: string;\n readonly mediaType: string;\n readonly filename?: string;\n readonly providerMetadata?: SourceProviderMetadata;\n readonly parentId?: string;\n }\n | (AuiV0ToolCallPart &\n ({ readonly args: ReadonlyJSONObject } | { readonly argsText: string }))\n | {\n readonly type: \"image\";\n readonly image: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n readonly sourceType?: \"url\" | \"id\";\n readonly parentId?: string;\n }\n | {\n readonly type: \"data\";\n readonly name: string;\n readonly data: ReadonlyJSONValue;\n }\n | {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n }\n | {\n readonly type: \"generative-ui\";\n readonly spec: ReadonlyJSONObject;\n readonly id?: string;\n readonly parentId?: string;\n };\n\ntype AuiV0ToolCallPart = {\n readonly type: \"tool-call\";\n readonly toolCallId: string;\n readonly toolName: string;\n readonly result?: ReadonlyJSONValue;\n readonly isError?: true;\n readonly interrupt?: {\n readonly type: \"human\";\n readonly payload: ReadonlyJSONValue;\n };\n readonly timing?: ToolCallTiming;\n readonly mcp?: ToolCallMessagePartMcpMetadata;\n readonly approval?: AuiV0ToolApproval;\n readonly parentId?: string;\n readonly messages?: readonly AuiV0Message[];\n};\n\ntype AuiV0AttachmentPart =\n | {\n readonly type: \"text\";\n readonly text: string;\n readonly parentId?: string;\n }\n | {\n readonly type: \"image\";\n readonly image: string;\n readonly filename?: string;\n }\n | {\n readonly type: \"file\";\n readonly data: string;\n readonly mimeType: string;\n readonly filename?: string;\n readonly sourceType?: \"url\" | \"id\";\n readonly parentId?: string;\n }\n | {\n readonly type: \"audio\";\n readonly audio: {\n readonly data: string;\n readonly format: \"mp3\" | \"wav\";\n };\n }\n | {\n readonly type: \"data\";\n readonly name: string;\n readonly data: ReadonlyJSONValue;\n };\n\ntype AuiV0Attachment = {\n readonly id: string;\n readonly type: CompleteAttachment[\"type\"];\n readonly name: string;\n readonly contentType?: string;\n readonly status: CompleteAttachment[\"status\"];\n readonly content: readonly AuiV0AttachmentPart[];\n};\n\ntype AuiV0Message = {\n readonly id?: string;\n readonly createdAt?: string;\n readonly role: \"assistant\" | \"user\" | \"system\";\n readonly status?: MessageStatus;\n readonly content: readonly AuiV0MessagePart[];\n readonly attachments?: readonly AuiV0Attachment[];\n readonly metadata: {\n readonly unstable_state?: ReadonlyJSONValue;\n readonly unstable_annotations: readonly ReadonlyJSONValue[];\n readonly unstable_data: readonly ReadonlyJSONValue[];\n readonly steps: readonly {\n readonly usage?: {\n readonly inputTokens: number;\n readonly outputTokens: number;\n };\n }[];\n readonly custom: ReadonlyJSONObject;\n };\n};\n\nconst encodeAttachmentPart = (\n part: CompleteAttachment[\"content\"][number],\n): AuiV0AttachmentPart => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return {\n type: \"text\",\n text: part.text,\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"image\":\n return {\n type: \"image\",\n image: part.image,\n ...(part.filename != null ? { filename: part.filename } : undefined),\n };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename != null ? { filename: part.filename } : undefined),\n ...(part.sourceType != null\n ? { sourceType: part.sourceType }\n : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"audio\":\n return {\n type: \"audio\",\n audio: { data: part.audio.data, format: part.audio.format },\n };\n\n case \"data\": {\n if (!isJSONValue(part.data)) {\n console.warn(`attachment data is not JSON! ${JSON.stringify(part)}`);\n }\n return {\n type: \"data\",\n name: part.name,\n data: part.data as ReadonlyJSONValue,\n };\n }\n\n default: {\n const unhandledType: never = type;\n throw new Error(\n `Attachment part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n};\n\nconst encodeAttachments = (\n message: ThreadMessage,\n): readonly AuiV0Attachment[] | undefined => {\n if (message.role !== \"user\" || message.attachments.length === 0) {\n return undefined;\n }\n\n return message.attachments.map(\n ({ id, type, name, contentType, status, content }) => ({\n id,\n type,\n name,\n status,\n ...(contentType != null ? { contentType } : undefined),\n content: content.map(encodeAttachmentPart),\n }),\n );\n};\n\nexport function auiV0Encode(message: ThreadMessage): AuiV0Message {\n // info: ID and createdAt are ignored (we use the server value instead)\n const status: MessageStatus | undefined =\n message.status?.type === \"running\"\n ? { type: \"incomplete\", reason: \"cancelled\" }\n : message.status;\n const attachments = encodeAttachments(message);\n\n return {\n role: message.role,\n content: message.content.map((part) => {\n const type = part.type;\n switch (type) {\n case \"text\":\n return {\n type: \"text\",\n text: part.text,\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"reasoning\":\n return {\n type: \"reasoning\",\n text: part.text,\n ...(part.unstable_summary !== undefined\n ? { unstable_summary: part.unstable_summary }\n : undefined),\n ...(part.providerMetadata !== undefined\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"source\":\n if (part.sourceType === \"url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.id,\n url: part.url,\n ...(part.title != null ? { title: part.title } : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n }\n\n return {\n type: \"source\",\n sourceType: \"document\",\n id: part.id,\n title: part.title,\n mediaType: part.mediaType,\n ...(part.filename != null\n ? { filename: part.filename }\n : undefined),\n ...(part.providerMetadata != null\n ? { providerMetadata: part.providerMetadata }\n : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"tool-call\": {\n if (part.result !== undefined && !isJSONValue(part.result)) {\n console.warn(\n `tool-call result is not JSON! ${JSON.stringify(part)}`,\n );\n }\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n ...(JSON.stringify(part.args) === part.argsText\n ? { args: part.args }\n : { argsText: part.argsText }),\n ...(part.result !== undefined\n ? { result: part.result as ReadonlyJSONValue }\n : undefined),\n ...(part.isError ? { isError: true } : undefined),\n ...(part.interrupt !== undefined\n ? {\n interrupt: {\n type: part.interrupt.type,\n payload: part.interrupt.payload as ReadonlyJSONValue,\n },\n }\n : undefined),\n ...(part.timing !== undefined\n ? { timing: part.timing }\n : undefined),\n ...(part.mcp !== undefined ? { mcp: part.mcp } : undefined),\n ...(part.approval ? { approval: part.approval } : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n ...(part.messages !== undefined\n ? { messages: part.messages.map(encodeNestedMessage) }\n : undefined),\n };\n }\n\n case \"image\":\n return { type: \"image\", image: part.image };\n\n case \"file\":\n return {\n type: \"file\",\n data: part.data,\n mimeType: part.mimeType,\n ...(part.filename ? { filename: part.filename } : undefined),\n ...(part.sourceType ? { sourceType: part.sourceType } : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n case \"data\": {\n if (!isJSONValue(part.data)) {\n console.warn(`data part is not JSON! ${JSON.stringify(part)}`);\n }\n return {\n type: \"data\",\n name: part.name,\n data: part.data as ReadonlyJSONValue,\n };\n }\n\n case \"audio\":\n return {\n type: \"audio\",\n audio: { data: part.audio.data, format: part.audio.format },\n };\n\n case \"generative-ui\":\n return {\n type: \"generative-ui\",\n spec: part.spec as unknown as ReadonlyJSONObject,\n ...(part.id !== undefined ? { id: part.id } : undefined),\n ...(part.parentId !== undefined\n ? { parentId: part.parentId }\n : undefined),\n };\n\n default: {\n const unhandledType: never = type;\n throw new Error(\n `Message part type not supported by aui/v0: ${unhandledType}`,\n );\n }\n }\n }),\n metadata: message.metadata as AuiV0Message[\"metadata\"],\n ...(status ? { status } : undefined),\n ...(attachments ? { attachments } : undefined),\n };\n}\n\nexport function auiV0Decode(\n cloudMessage: CloudMessage & { format: \"aui/v0\" },\n): ExportedMessageRepositoryItem {\n const payload = cloudMessage.content as unknown as AuiV0Message;\n const message = decodeAuiV0Message(\n {\n ...payload,\n id: cloudMessage.id,\n createdAt: cloudMessage.created_at,\n },\n cloudMessage.id,\n );\n\n return {\n parentId: cloudMessage.parent_id,\n message,\n };\n}\n\nconst encodeNestedMessage = (message: ThreadMessage): AuiV0Message => ({\n ...auiV0Encode(message),\n id: message.id,\n createdAt: message.createdAt.toISOString(),\n});\n\nconst decodeAuiV0Message = (\n payload: Omit<AuiV0Message, \"createdAt\"> & {\n readonly createdAt?: Date | undefined;\n },\n fallbackId: string,\n): ThreadMessage =>\n fromThreadMessageLike(\n {\n ...payload,\n content: payload.content.map((part, index) => {\n if (part.type !== \"tool-call\" || part.messages === undefined)\n return part;\n return {\n ...part,\n messages: part.messages.map((message, nestedIndex) =>\n decodeAuiV0Message(\n {\n ...message,\n createdAt:\n message.createdAt !== undefined\n ? new Date(message.createdAt)\n : payload.createdAt,\n },\n message.id ??\n `${fallbackId}-${part.toolCallId}-${index}-${nestedIndex}`,\n ),\n ),\n };\n }),\n } as ThreadMessageLike,\n fallbackId,\n { type: \"complete\", reason: \"unknown\" },\n );\n"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { RemoteThreadListAdapter, RuntimeAdapters } from "../../../runtimes/remote-thread-list/types.js";
2
2
  import { RefObject } from "react";
3
- import { AssistantCloud } from "assistant-cloud";
3
+ import { AssistantCloud, SdkIdentity } from "assistant-cloud";
4
4
  //#region src/react/runtimes/cloud/createCloudThreadListAdapter.d.ts
5
5
  type ThreadData = {
6
6
  externalId: string | undefined;
7
7
  };
8
8
  type CloudThreadListAdapterOptions = {
9
9
  cloud?: AssistantCloud | undefined;
10
+ sdk?: SdkIdentity | undefined;
10
11
  create?: (() => Promise<ThreadData>) | undefined;
11
12
  delete?: ((threadId: string) => Promise<void>) | undefined;
12
13
  };
@@ -1 +1 @@
1
- {"version":3,"file":"createCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapter.ts"],"mappings":";;;;KAaK;EACH;;KAGU;EACV,QAAQ;EAER,gBAAgB,QAAQ;EACxB,WAAW,qBAAqB;;cASrB,WAAS;cAIT,0BACX,UAAU,UAAU,oBACnB;;;;;;;;;;;;cAwDU,+BACX,SACI,uCACO,mCACV"}
1
+ {"version":3,"file":"createCloudThreadListAdapter.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapter.ts"],"mappings":";;;;KAcK;EACH;;KAGU;EACV,QAAQ;EACR,MAAM;EAEN,gBAAgB,QAAQ;EACxB,WAAW,qBAAqB;;cASrB,WAAS;cAIT,0BACX,UAAU,UAAU,oBACnB;;;;;;;;;;;;cAyDU,+BACX,SACI,uCACO,mCACV"}
@@ -2,6 +2,7 @@ import { isRecord } from "../../../utils/json/is-json.js";
2
2
  import { InMemoryThreadListAdapter } from "../../../runtimes/remote-thread-list/adapter/in-memory.js";
3
3
  import { useAssistantCloudThreadHistoryAdapter } from "./AssistantCloudThreadHistoryAdapter.js";
4
4
  import { CloudFileAttachmentAdapter } from "./CloudFileAttachmentAdapter.js";
5
+ import { CORE_SDK } from "./sdkIdentity.js";
5
6
  import { useMemo, useState } from "@assistant-ui/tap/react-shim";
6
7
  import { AssistantCloud } from "assistant-cloud";
7
8
  //#region src/react/runtimes/cloud/createCloudThreadListAdapter.ts
@@ -16,7 +17,8 @@ const useCloudRuntimeAdapters = (cloudRef) => {
16
17
  const [attachments] = useState(() => new CloudFileAttachmentAdapter(() => cloudRef.current));
17
18
  return useMemo(() => ({
18
19
  history,
19
- attachments
20
+ attachments,
21
+ feedback: history.feedback
20
22
  }), [history, attachments]);
21
23
  };
22
24
  const CLOUD_THREAD_PAGE_SIZE = 20;
@@ -70,6 +72,9 @@ const createCloudThreadListAdapter = (options) => {
70
72
  };
71
73
  return inMemory;
72
74
  }
75
+ cloud.registerSdk?.(CORE_SDK);
76
+ const sdk = getOptions().sdk;
77
+ if (sdk) cloud.registerSdk?.(sdk);
73
78
  return {
74
79
  list: async ({ after } = {}) => {
75
80
  const { activeCursor, archivedCursor, activeExhausted, archivedExhausted } = parseListCursor(after);
@@ -1 +1 @@
1
- {"version":3,"file":"createCloudThreadListAdapter.js","names":["process","env","Record","RefObject","useMemo","useState","AssistantCloud","RemoteThreadListAdapter","RuntimeAdapters","InMemoryThreadListAdapter","useAssistantCloudThreadHistoryAdapter","CloudFileAttachmentAdapter","isRecord","ThreadData","externalId","CloudThreadListAdapterOptions","cloud","create","Promise","delete","threadId","toCustom","value","undefined","baseUrl","NEXT_PUBLIC_ASSISTANT_BASE_URL","autoCloud","anonymous","useCloudRuntimeAdapters","cloudRef","history","attachments","current","CLOUD_THREAD_PAGE_SIZE","CloudListCursor","activeCursor","archivedCursor","activeExhausted","archivedExhausted","parseListCursor","after","fallback","startsWith","parsed","JSON","parse","a","r","ae","re","createCloudThreadListAdapter","options","getOptions","unstable_useAdapters","useCloudAdapters","inMemory","initialize","result","remoteId","list","threads","activeThreads","archivedThreads","all","resolve","limit","is_archived","activeNext","length","at","id","archivedNext","map","t","status","const","title","lastMessageAt","last_message_at","Date","external_id","custom","metadata","nextCursor","stringify","createTask","thread_id","rename","newTitle","update","updateCustom","archive","unarchive","generateTitle","messages","filteredMessages","msg","content","filter","part","type","runs","stream","assistant_id","fetch","thread","get"],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapter.ts"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport { type RefObject, useMemo, useState } from \"react\";\nimport { AssistantCloud } from \"assistant-cloud\";\nimport type {\n RemoteThreadListAdapter,\n RuntimeAdapters,\n} from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\nexport type CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nexport const autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nexport const useCloudRuntimeAdapters = (\n cloudRef: RefObject<AssistantCloud>,\n): RuntimeAdapters => {\n const history = useAssistantCloudThreadHistoryAdapter(cloudRef);\n const [attachments] = useState(\n () => new CloudFileAttachmentAdapter(() => cloudRef.current),\n );\n return useMemo(\n () => ({\n history,\n attachments,\n }),\n [history, attachments],\n );\n};\n\nconst CLOUD_THREAD_PAGE_SIZE = 20;\n\ntype CloudListCursor = {\n activeCursor: string | undefined;\n archivedCursor: string | undefined;\n activeExhausted: boolean;\n archivedExhausted: boolean;\n};\n\nconst parseListCursor = (after: string | undefined): CloudListCursor => {\n const fallback: CloudListCursor = {\n activeCursor: after,\n archivedCursor: undefined,\n activeExhausted: false,\n archivedExhausted: false,\n };\n if (!after || !after.startsWith(\"{\")) return fallback;\n try {\n const parsed = JSON.parse(after);\n if (!isRecord(parsed)) return fallback;\n return {\n activeCursor: typeof parsed.a === \"string\" ? parsed.a : undefined,\n archivedCursor: typeof parsed.r === \"string\" ? parsed.r : undefined,\n activeExhausted: parsed.ae === true,\n archivedExhausted: parsed.re === true,\n };\n } catch {\n return fallback;\n }\n};\n\n/**\n * Builds the `RemoteThreadListAdapter` for an assistant-cloud backend without\n * requiring a hook call site, so plain code (a Vue or Svelte setup function,\n * a module-level config) can construct it. Options are read through the\n * getter on every call, so a stable adapter can follow changing `create` and\n * `delete` callbacks; swapping to a different `cloud` instance requires a new\n * adapter (and `reload()` on the list). Without a `cloud` instance (and\n * without `NEXT_PUBLIC_ASSISTANT_BASE_URL`), the adapter falls back to an\n * in-memory list. `useCloudThreadListAdapter` wraps this for the React\n * hook signature.\n */\nexport const createCloudThreadListAdapter = (\n options:\n | CloudThreadListAdapterOptions\n | (() => CloudThreadListAdapterOptions),\n): RemoteThreadListAdapter => {\n const getOptions = typeof options === \"function\" ? options : () => options;\n\n const unstable_useAdapters = function useCloudAdapters(): RuntimeAdapters {\n return useCloudRuntimeAdapters({\n get current() {\n return getOptions().cloud ?? autoCloud!;\n },\n });\n };\n\n const cloud = getOptions().cloud ?? autoCloud;\n if (!cloud) {\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await getOptions().create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n return {\n list: async ({ after } = {}) => {\n const {\n activeCursor,\n archivedCursor,\n activeExhausted,\n archivedExhausted,\n } = parseListCursor(after);\n const [{ threads: activeThreads }, { threads: archivedThreads }] =\n await Promise.all([\n activeExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(activeCursor ? { after: activeCursor } : {}),\n }),\n archivedExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n is_archived: true,\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(archivedCursor ? { after: archivedCursor } : {}),\n }),\n ]);\n const activeNext =\n !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? activeThreads.at(-1)?.id\n : undefined;\n const archivedNext =\n !archivedExhausted && archivedThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? archivedThreads.at(-1)?.id\n : undefined;\n const threads = [...activeThreads, ...archivedThreads];\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? (\"archived\" as const) : (\"regular\" as const),\n remoteId: t.id,\n title: t.title,\n lastMessageAt: t.last_message_at\n ? new Date(t.last_message_at)\n : undefined,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n nextCursor:\n activeNext || archivedNext\n ? JSON.stringify({\n a: activeNext,\n r: archivedNext,\n ...(activeNext === undefined ? { ae: true } : {}),\n ...(archivedNext === undefined ? { re: true } : {}),\n })\n : undefined,\n };\n },\n\n initialize: async () => {\n const createTask = getOptions().create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await getOptions().delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived\n ? (\"archived\" as const)\n : (\"regular\" as const),\n remoteId: thread.id,\n title: thread.title,\n lastMessageAt: thread.last_message_at\n ? new Date(thread.last_message_at)\n : undefined,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_useAdapters,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"createCloudThreadListAdapter.js","names":["process","env","Record","RefObject","useMemo","useState","AssistantCloud","SdkIdentity","RemoteThreadListAdapter","RuntimeAdapters","InMemoryThreadListAdapter","useAssistantCloudThreadHistoryAdapter","CloudFileAttachmentAdapter","isRecord","CORE_SDK","ThreadData","externalId","CloudThreadListAdapterOptions","cloud","sdk","create","Promise","delete","threadId","toCustom","value","undefined","baseUrl","NEXT_PUBLIC_ASSISTANT_BASE_URL","autoCloud","anonymous","useCloudRuntimeAdapters","cloudRef","history","attachments","current","feedback","CLOUD_THREAD_PAGE_SIZE","CloudListCursor","activeCursor","archivedCursor","activeExhausted","archivedExhausted","parseListCursor","after","fallback","startsWith","parsed","JSON","parse","a","r","ae","re","createCloudThreadListAdapter","options","getOptions","unstable_useAdapters","useCloudAdapters","inMemory","initialize","result","remoteId","registerSdk","list","threads","activeThreads","archivedThreads","all","resolve","limit","is_archived","activeNext","length","at","id","archivedNext","map","t","status","const","title","lastMessageAt","last_message_at","Date","external_id","custom","metadata","nextCursor","stringify","createTask","thread_id","rename","newTitle","update","updateCustom","archive","unarchive","generateTitle","messages","filteredMessages","msg","content","filter","part","type","runs","stream","assistant_id","fetch","thread","get"],"sources":["../../../../src/react/runtimes/cloud/createCloudThreadListAdapter.ts"],"sourcesContent":["declare const process: { env: Record<string, string | undefined> };\n\nimport { type RefObject, useMemo, useState } from \"react\";\nimport { AssistantCloud, type SdkIdentity } from \"assistant-cloud\";\nimport type {\n RemoteThreadListAdapter,\n RuntimeAdapters,\n} from \"../../../runtimes/remote-thread-list/types\";\nimport { InMemoryThreadListAdapter } from \"../../../runtimes/remote-thread-list/adapter/in-memory\";\nimport { useAssistantCloudThreadHistoryAdapter } from \"./AssistantCloudThreadHistoryAdapter\";\nimport { CloudFileAttachmentAdapter } from \"./CloudFileAttachmentAdapter\";\nimport { isRecord } from \"../../../utils/json/is-json\";\nimport { CORE_SDK } from \"./sdkIdentity\";\n\ntype ThreadData = {\n externalId: string | undefined;\n};\n\nexport type CloudThreadListAdapterOptions = {\n cloud?: AssistantCloud | undefined;\n sdk?: SdkIdentity | undefined;\n\n create?: (() => Promise<ThreadData>) | undefined;\n delete?: ((threadId: string) => Promise<void>) | undefined;\n};\n\nconst toCustom = (value: unknown): Record<string, unknown> | undefined =>\n isRecord(value) ? value : undefined;\n\nconst baseUrl =\n typeof process !== \"undefined\" &&\n process?.env?.NEXT_PUBLIC_ASSISTANT_BASE_URL;\nexport const autoCloud = baseUrl\n ? new AssistantCloud({ baseUrl, anonymous: true })\n : undefined;\n\nexport const useCloudRuntimeAdapters = (\n cloudRef: RefObject<AssistantCloud>,\n): RuntimeAdapters => {\n const history = useAssistantCloudThreadHistoryAdapter(cloudRef);\n const [attachments] = useState(\n () => new CloudFileAttachmentAdapter(() => cloudRef.current),\n );\n return useMemo(\n () => ({\n history,\n attachments,\n feedback: history.feedback,\n }),\n [history, attachments],\n );\n};\n\nconst CLOUD_THREAD_PAGE_SIZE = 20;\n\ntype CloudListCursor = {\n activeCursor: string | undefined;\n archivedCursor: string | undefined;\n activeExhausted: boolean;\n archivedExhausted: boolean;\n};\n\nconst parseListCursor = (after: string | undefined): CloudListCursor => {\n const fallback: CloudListCursor = {\n activeCursor: after,\n archivedCursor: undefined,\n activeExhausted: false,\n archivedExhausted: false,\n };\n if (!after || !after.startsWith(\"{\")) return fallback;\n try {\n const parsed = JSON.parse(after);\n if (!isRecord(parsed)) return fallback;\n return {\n activeCursor: typeof parsed.a === \"string\" ? parsed.a : undefined,\n archivedCursor: typeof parsed.r === \"string\" ? parsed.r : undefined,\n activeExhausted: parsed.ae === true,\n archivedExhausted: parsed.re === true,\n };\n } catch {\n return fallback;\n }\n};\n\n/**\n * Builds the `RemoteThreadListAdapter` for an assistant-cloud backend without\n * requiring a hook call site, so plain code (a Vue or Svelte setup function,\n * a module-level config) can construct it. Options are read through the\n * getter on every call, so a stable adapter can follow changing `create` and\n * `delete` callbacks; swapping to a different `cloud` instance requires a new\n * adapter (and `reload()` on the list). Without a `cloud` instance (and\n * without `NEXT_PUBLIC_ASSISTANT_BASE_URL`), the adapter falls back to an\n * in-memory list. `useCloudThreadListAdapter` wraps this for the React\n * hook signature.\n */\nexport const createCloudThreadListAdapter = (\n options:\n | CloudThreadListAdapterOptions\n | (() => CloudThreadListAdapterOptions),\n): RemoteThreadListAdapter => {\n const getOptions = typeof options === \"function\" ? options : () => options;\n\n const unstable_useAdapters = function useCloudAdapters(): RuntimeAdapters {\n return useCloudRuntimeAdapters({\n get current() {\n return getOptions().cloud ?? autoCloud!;\n },\n });\n };\n\n const cloud = getOptions().cloud ?? autoCloud;\n if (!cloud) {\n const inMemory = new InMemoryThreadListAdapter();\n inMemory.initialize = async (threadId: string) => {\n const result = await getOptions().create?.();\n return { remoteId: threadId, externalId: result?.externalId };\n };\n return inMemory;\n }\n\n cloud.registerSdk?.(CORE_SDK);\n const sdk = getOptions().sdk;\n if (sdk) cloud.registerSdk?.(sdk);\n\n return {\n list: async ({ after } = {}) => {\n const {\n activeCursor,\n archivedCursor,\n activeExhausted,\n archivedExhausted,\n } = parseListCursor(after);\n const [{ threads: activeThreads }, { threads: archivedThreads }] =\n await Promise.all([\n activeExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(activeCursor ? { after: activeCursor } : {}),\n }),\n archivedExhausted\n ? Promise.resolve({ threads: [] })\n : cloud.threads.list({\n is_archived: true,\n limit: CLOUD_THREAD_PAGE_SIZE,\n ...(archivedCursor ? { after: archivedCursor } : {}),\n }),\n ]);\n const activeNext =\n !activeExhausted && activeThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? activeThreads.at(-1)?.id\n : undefined;\n const archivedNext =\n !archivedExhausted && archivedThreads.length === CLOUD_THREAD_PAGE_SIZE\n ? archivedThreads.at(-1)?.id\n : undefined;\n const threads = [...activeThreads, ...archivedThreads];\n return {\n threads: threads.map((t) => ({\n status: t.is_archived ? (\"archived\" as const) : (\"regular\" as const),\n remoteId: t.id,\n title: t.title,\n lastMessageAt: t.last_message_at\n ? new Date(t.last_message_at)\n : undefined,\n externalId: t.external_id ?? undefined,\n custom: toCustom(t.metadata),\n })),\n nextCursor:\n activeNext || archivedNext\n ? JSON.stringify({\n a: activeNext,\n r: archivedNext,\n ...(activeNext === undefined ? { ae: true } : {}),\n ...(archivedNext === undefined ? { re: true } : {}),\n })\n : undefined,\n };\n },\n\n initialize: async () => {\n const createTask = getOptions().create?.() ?? Promise.resolve();\n const t = await createTask;\n const external_id = t ? t.externalId : undefined;\n const { thread_id: remoteId } = await cloud.threads.create({\n last_message_at: new Date(),\n external_id,\n });\n\n return { externalId: external_id, remoteId: remoteId };\n },\n\n rename: async (threadId, newTitle) => {\n return cloud.threads.update(threadId, { title: newTitle });\n },\n updateCustom: async (threadId, custom) => {\n return cloud.threads.update(threadId, { metadata: custom ?? null });\n },\n archive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: true });\n },\n unarchive: async (threadId) => {\n return cloud.threads.update(threadId, { is_archived: false });\n },\n delete: async (threadId) => {\n await getOptions().delete?.(threadId);\n return cloud.threads.delete(threadId);\n },\n\n generateTitle: async (threadId, messages) => {\n const filteredMessages = messages.map((msg) => ({\n ...msg,\n content: msg.content.filter(\n (part) => part.type === \"text\" || part.type === \"tool-call\",\n ),\n }));\n\n return cloud.runs.stream({\n thread_id: threadId,\n assistant_id: \"system/thread_title\",\n messages: filteredMessages,\n });\n },\n\n fetch: async (threadId: string) => {\n const thread = await cloud.threads.get(threadId);\n return {\n status: thread.is_archived\n ? (\"archived\" as const)\n : (\"regular\" as const),\n remoteId: thread.id,\n title: thread.title,\n lastMessageAt: thread.last_message_at\n ? new Date(thread.last_message_at)\n : undefined,\n externalId: thread.external_id ?? undefined,\n custom: toCustom(thread.metadata),\n };\n },\n\n unstable_useAdapters,\n };\n};\n"],"mappings":";;;;;;;;AA0BA,MAAMwB,YAAYC,UAChBZ,SAASY,KAAK,IAAIA,QAAQC,KAAAA;AAE5B,MAAMC,UACJ,OAAO3B,YAAY,eACnBA,SAASC,KAAK2B;AAChB,MAAaC,YAAYF,UACrB,IAAIrB,eAAe;CAAEqB;CAASG,WAAW;AAAK,CAAC,IAC/CJ,KAAAA;AAEJ,MAAaK,2BACXC,aACoB;CACpB,MAAMC,UAAUtB,sCAAsCqB,QAAQ;CAC9D,MAAM,CAACE,eAAe7B,eACd,IAAIO,iCAAiCoB,SAASG,OAAO,CAC7D;CACA,OAAO/B,eACE;EACL6B;EACAC;EACAE,UAAUH,QAAQG;CACpB,IACA,CAACH,SAASC,WAAW,CACvB;AACF;AAEA,MAAMG,yBAAyB;AAS/B,MAAMM,mBAAmBC,UAA+C;CACtE,MAAMC,WAA4B;EAChCN,cAAcK;EACdJ,gBAAgBd,KAAAA;EAChBe,iBAAiB;EACjBC,mBAAmB;CACrB;CACA,IAAI,CAACE,SAAS,CAACA,MAAME,WAAW,GAAG,GAAG,OAAOD;CAC7C,IAAI;EACF,MAAME,SAASC,KAAKC,MAAML,KAAK;EAC/B,IAAI,CAAC/B,SAASkC,MAAM,GAAG,OAAOF;EAC9B,OAAO;GACLN,cAAc,OAAOQ,OAAOG,MAAM,WAAWH,OAAOG,IAAIxB,KAAAA;GACxDc,gBAAgB,OAAOO,OAAOI,MAAM,WAAWJ,OAAOI,IAAIzB,KAAAA;GAC1De,iBAAiBM,OAAOK,OAAO;GAC/BV,mBAAmBK,OAAOM,OAAO;EACnC;CACF,QAAQ;EACN,OAAOR;CACT;AACF;;;;;;;;;;;;AAaA,MAAaS,gCACXC,YAG4B;CAC5B,MAAMC,aAAa,OAAOD,YAAY,aAAaA,gBAAgBA;CAEnE,MAAME,uBAAuB,SAASC,mBAAoC;EACxE,OAAO3B,wBAAwB,EAC7B,IAAII,UAAU;GACZ,OAAOqB,WAAW,CAAC,CAACtC,SAASW;EAC/B,EACF,CAAC;CACH;CAEA,MAAMX,QAAQsC,WAAW,CAAC,CAACtC,SAASW;CACpC,IAAI,CAACX,OAAO;EACV,MAAMyC,WAAW,IAAIjD,0BAA0B;EAC/CiD,SAASC,aAAa,OAAOrC,aAAqB;GAEhD,OAAO;IAAEuC,UAAUvC;IAAUP,aAAY6C,MADpBL,WAAW,CAAC,CAACpC,SAAS,EAAA,EACMJ;GAAW;EAC9D;EACA,OAAO2C;CACT;CAEAzC,MAAM6C,cAAcjD,QAAQ;CAC5B,MAAMK,MAAMqC,WAAW,CAAC,CAACrC;CACzB,IAAIA,KAAKD,MAAM6C,cAAc5C,GAAG;CAEhC,OAAO;EACL6C,MAAM,OAAO,EAAEpB,UAAU,CAAC,MAAM;GAC9B,MAAM,EACJL,cACAC,gBACAC,iBACAC,sBACEC,gBAAgBC,KAAK;GACzB,MAAM,CAAC,EAAEqB,SAASC,iBAAiB,EAAED,SAASE,qBAC5C,MAAM9C,QAAQ+C,IAAI,CAChB3B,kBACIpB,QAAQgD,QAAQ,EAAEJ,SAAS,CAAA,EAAG,CAAC,IAC/B/C,MAAM+C,QAAQD,KAAK;IACjBM,OAAOjC;IACP,GAAIE,eAAe,EAAEK,OAAOL,aAAa,IAAI,CAAC;GAChD,CAAC,GACLG,oBACIrB,QAAQgD,QAAQ,EAAEJ,SAAS,CAAA,EAAG,CAAC,IAC/B/C,MAAM+C,QAAQD,KAAK;IACjBO,aAAa;IACbD,OAAOjC;IACP,GAAIG,iBAAiB,EAAEI,OAAOJ,eAAe,IAAI,CAAC;GACpD,CAAC,CAAC,CACP;GACH,MAAMgC,aACJ,CAAC/B,mBAAmByB,cAAcO,WAAWpC,yBACzC6B,cAAcQ,GAAG,EAAE,CAAC,EAAEC,KACtBjD,KAAAA;GACN,MAAMkD,eACJ,CAAClC,qBAAqByB,gBAAgBM,WAAWpC,yBAC7C8B,gBAAgBO,GAAG,EAAE,CAAC,EAAEC,KACxBjD,KAAAA;GAEN,OAAO;IACLuC,SAASA,CAFM,GAAGC,eAAe,GAAGC,eAE3BF,CAAO,CAACY,KAAKC,OAAO;KAC3BC,QAAQD,EAAEP,cAAe,aAAwB;KACjDT,UAAUgB,EAAEH;KACZM,OAAOH,EAAEG;KACTC,eAAeJ,EAAEK,kBACb,IAAIC,KAAKN,EAAEK,eAAe,IAC1BzD,KAAAA;KACJV,YAAY8D,EAAEO,eAAe3D,KAAAA;KAC7B4D,QAAQ9D,SAASsD,EAAES,QAAQ;IAC7B,EAAE;IACFC,YACEhB,cAAcI,eACV5B,KAAKyC,UAAU;KACbvC,GAAGsB;KACHrB,GAAGyB;KACH,GAAIJ,eAAe9C,KAAAA,IAAY,EAAE0B,IAAI,KAAK,IAAI,CAAC;KAC/C,GAAIwB,iBAAiBlD,KAAAA,IAAY,EAAE2B,IAAI,KAAK,IAAI,CAAC;IACnD,CAAC,IACD3B,KAAAA;GACR;EACF;EAEAkC,YAAY,YAAY;GAEtB,MAAMkB,IAAI,OADStB,WAAW,CAAC,CAACpC,SAAS,KAAKC,QAAQgD,QAAQ;GAE9D,MAAMgB,cAAcP,IAAIA,EAAE9D,aAAaU,KAAAA;GACvC,MAAM,EAAEiE,WAAW7B,aAAa,MAAM5C,MAAM+C,QAAQ7C,OAAO;IACzD+D,iCAAiB,IAAIC,KAAK;IAC1BC;GACF,CAAC;GAED,OAAO;IAAErE,YAAYqE;IAAuBvB;GAAS;EACvD;EAEA8B,QAAQ,OAAOrE,UAAUsE,aAAa;GACpC,OAAO3E,MAAM+C,QAAQ6B,OAAOvE,UAAU,EAAE0D,OAAOY,SAAS,CAAC;EAC3D;EACAE,cAAc,OAAOxE,UAAU+D,WAAW;GACxC,OAAOpE,MAAM+C,QAAQ6B,OAAOvE,UAAU,EAAEgE,UAAUD,UAAU,KAAK,CAAC;EACpE;EACAU,SAAS,OAAOzE,aAAa;GAC3B,OAAOL,MAAM+C,QAAQ6B,OAAOvE,UAAU,EAAEgD,aAAa,KAAK,CAAC;EAC7D;EACA0B,WAAW,OAAO1E,aAAa;GAC7B,OAAOL,MAAM+C,QAAQ6B,OAAOvE,UAAU,EAAEgD,aAAa,MAAM,CAAC;EAC9D;EACAjD,QAAQ,OAAOC,aAAa;GAC1B,MAAMiC,WAAW,CAAC,CAAClC,SAASC,QAAQ;GACpC,OAAOL,MAAM+C,QAAQ3C,OAAOC,QAAQ;EACtC;EAEA2E,eAAe,OAAO3E,UAAU4E,aAAa;GAC3C,MAAMC,mBAAmBD,SAAStB,KAAKwB,SAAS;IAC9C,GAAGA;IACHC,SAASD,IAAIC,QAAQC,QAClBC,SAASA,KAAKC,SAAS,UAAUD,KAAKC,SAAS,WAClD;GACF,EAAE;GAEF,OAAOvF,MAAMwF,KAAKC,OAAO;IACvBhB,WAAWpE;IACXqF,cAAc;IACdT,UAAUC;GACZ,CAAC;EACH;EAEAS,OAAO,OAAOtF,aAAqB;GACjC,MAAMuF,SAAS,MAAM5F,MAAM+C,QAAQ8C,IAAIxF,QAAQ;GAC/C,OAAO;IACLwD,QAAQ+B,OAAOvC,cACV,aACA;IACLT,UAAUgD,OAAOnC;IACjBM,OAAO6B,OAAO7B;IACdC,eAAe4B,OAAO3B,kBAClB,IAAIC,KAAK0B,OAAO3B,eAAe,IAC/BzD,KAAAA;IACJV,YAAY8F,OAAOzB,eAAe3D,KAAAA;IAClC4D,QAAQ9D,SAASsF,OAAOvB,QAAQ;GAClC;EACF;EAEA9B;CACF;AACF"}
@@ -0,0 +1,6 @@
1
+ import { SdkIdentity } from "assistant-cloud";
2
+ //#region src/react/runtimes/cloud/sdkIdentity.d.ts
3
+ declare const CORE_SDK: SdkIdentity;
4
+ //#endregion
5
+ export { CORE_SDK };
6
+ //# sourceMappingURL=sdkIdentity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkIdentity.d.ts","names":[],"sources":["../../../../src/react/runtimes/cloud/sdkIdentity.ts"],"mappings":";;cAEa,UAAU"}
@@ -0,0 +1,9 @@
1
+ //#region src/react/runtimes/cloud/sdkIdentity.ts
2
+ const CORE_SDK = {
3
+ name: "@assistant-ui/core",
4
+ version: "0.3.19"
5
+ };
6
+ //#endregion
7
+ export { CORE_SDK };
8
+
9
+ //# sourceMappingURL=sdkIdentity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdkIdentity.js","names":["SdkIdentity","CORE_SDK","name","version","__AUI_PACKAGE_VERSION__"],"sources":["../../../../src/react/runtimes/cloud/sdkIdentity.ts"],"sourcesContent":["import type { SdkIdentity } from \"assistant-cloud\";\n\nexport const CORE_SDK: SdkIdentity = {\n name: \"@assistant-ui/core\",\n version:\n typeof __AUI_PACKAGE_VERSION__ === \"string\"\n ? __AUI_PACKAGE_VERSION__\n : \"0.0.0\",\n};\n"],"mappings":";AAEA,MAAaC,WAAwB;CACnCC,MAAM;CACNC,SAAAA;AAIF"}
@@ -1,12 +1,22 @@
1
1
  import { ThreadMessage } from "../../types/message.js";
2
2
  import { ExternalMessageConverterCallback, ExternalMessageConverterMessage, ExternalMessageConverterMetadata, JoinStrategy } from "../../runtime/utils/external-message-conversion.js";
3
+ import "../../index.js";
3
4
  //#region src/react/runtimes/external-message-converter.d.ts
5
+ type ExternalMessageConversionCache = {
6
+ readonly __brand: unique symbol;
7
+ };
8
+ /**
9
+ * Creates a cache for plain external message conversion. Pass the same cache on every call for one message list, and a source message that has not changed since the previous call converts to the same `ThreadMessage` object.
10
+ *
11
+ * Entries are keyed by source message identity and rebuilt whenever `callback` or `metadata` is a different object than on the previous call, so keep both referentially stable.
12
+ */
13
+ declare const createExternalMessageConversionCache: () => ExternalMessageConversionCache;
4
14
  declare namespace useExternalMessageConverter {
5
15
  type Message = ExternalMessageConverterMessage;
6
16
  type Metadata = ExternalMessageConverterMetadata;
7
17
  type Callback<T> = ExternalMessageConverterCallback<T>;
8
18
  }
9
- declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: useExternalMessageConverter.Callback<T>, isRunning: boolean, metadata: useExternalMessageConverter.Metadata) => ThreadMessage[];
19
+ declare const convertExternalMessages: <T extends WeakKey>(messages: T[], callback: useExternalMessageConverter.Callback<T>, isRunning: boolean, metadata: useExternalMessageConverter.Metadata, cache?: ExternalMessageConversionCache) => ThreadMessage[];
10
20
  declare const useExternalMessageConverter: <T extends WeakKey>({ callback, messages, isRunning, joinStrategy, metadata }: {
11
21
  callback: useExternalMessageConverter.Callback<T>;
12
22
  messages: T[];
@@ -15,5 +25,5 @@ declare const useExternalMessageConverter: <T extends WeakKey>({ callback, messa
15
25
  metadata?: useExternalMessageConverter.Metadata | undefined;
16
26
  }) => ThreadMessage[];
17
27
  //#endregion
18
- export { type JoinStrategy, convertExternalMessages, useExternalMessageConverter };
28
+ export { ExternalMessageConversionCache, type JoinStrategy, convertExternalMessages, createExternalMessageConversionCache, useExternalMessageConverter };
19
29
  //# sourceMappingURL=external-message-converter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":";;;kBA2BiB;OACH,UAAU;OACV,WAAW;OACX,SAAS,KAAK,iCAAiC;;cAGhD,0BAA0B,UAAU,SAC/C,UAAU,KACV,UAAU,4BAA4B,SAAS,IAC/C,oBACA,UAAU,4BAA4B,aACnC;cAOQ,8BAA+B,UAAU,WAAS,UAAA,UAAA,WAAA,cAAA;EAO7D,UAAU,4BAA4B,SAAS;EAC/C,UAAU;EACV;EACA,eAAe;EACf,WAAW,4BAA4B;MACxC"}
1
+ {"version":3,"file":"external-message-converter.d.ts","names":[],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"mappings":";;;;KAeY;WACD;;;;;;;cAQE,4CACP;kBAGW;OACH,UAAU;OACV,WAAW;OACX,SAAS,KAAK,iCAAiC;;cAGhD,0BAA2B,UAAU,SAChD,UAAU,KACV,UAAU,4BAA4B,SAAS,IAC/C,oBACA,UAAU,4BAA4B,UACtC,QAAQ,mCAAA;cAWG,8BAA+B,UAAU,WAAS,UAAA,UAAA,WAAA,cAAA;EAO7D,UAAU,4BAA4B,SAAS;EAC/C,UAAU;EACV;EACA,eAAe;EACf,WAAW,4BAA4B;MAAA"}
@@ -1,16 +1,20 @@
1
1
  "use client";
2
2
  import { bindExternalStoreMessage } from "../../runtime/utils/external-store-message.js";
3
- import { ThreadMessageConverter } from "../../runtimes/external-store/thread-message-converter.js";
4
- import { chunkExternalMessages, completeExternalMessageConversion, convertExternalMessageCallback, convertExternalMessageChunk, convertExternalMessages as convertExternalMessages$1, shallowArrayEqual } from "../../runtime/utils/external-message-conversion.js";
3
+ import { convertExternalMessages as convertExternalMessages$1, createExternalMessageConversionCache as createExternalMessageConversionCache$1 } from "../../runtime/utils/external-message-conversion.js";
5
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
6
5
  import { useState } from "@assistant-ui/tap/react-shim";
7
6
  //#region src/react/runtimes/external-message-converter.ts
8
- const generatedFallbackMessages = /* @__PURE__ */ new WeakSet();
9
- const convertExternalMessages = convertExternalMessages$1;
7
+ /**
8
+ * Creates a cache for plain external message conversion. Pass the same cache on every call for one message list, and a source message that has not changed since the previous call converts to the same `ThreadMessage` object.
9
+ *
10
+ * Entries are keyed by source message identity and rebuilt whenever `callback` or `metadata` is a different object than on the previous call, so keep both referentially stable.
11
+ */
12
+ const createExternalMessageConversionCache = () => createExternalMessageConversionCache$1();
13
+ const convertExternalMessages = (messages, callback, isRunning, metadata, cache) => convertExternalMessages$1(messages, callback, isRunning, metadata, void 0, cache);
10
14
  const useExternalMessageConverter = (t0) => {
11
- const $ = c(17);
15
+ const $ = c(12);
12
16
  const { callback, messages, isRunning, joinStrategy, metadata } = t0;
13
- const [caches] = useState(_temp);
17
+ const [cache] = useState(_temp);
14
18
  let t1;
15
19
  if ($[0] !== metadata) {
16
20
  t1 = metadata ?? {};
@@ -18,73 +22,34 @@ const useExternalMessageConverter = (t0) => {
18
22
  $[1] = t1;
19
23
  } else t1 = $[1];
20
24
  let t2;
21
- if ($[2] !== caches || $[3] !== callback || $[4] !== t1) {
25
+ if ($[2] !== callback || $[3] !== t1) {
22
26
  t2 = {
23
27
  metadata: t1,
24
- callback,
25
- ...caches
28
+ callback
26
29
  };
27
- $[2] = caches;
28
- $[3] = callback;
29
- $[4] = t1;
30
- $[5] = t2;
31
- } else t2 = $[5];
30
+ $[2] = callback;
31
+ $[3] = t1;
32
+ $[4] = t2;
33
+ } else t2 = $[4];
32
34
  const state = t2;
33
- let t3;
34
- if ($[6] !== isRunning || $[7] !== joinStrategy || $[8] !== messages || $[9] !== state.callback || $[10] !== state.callbackCache || $[11] !== state.chunkCache || $[12] !== state.converterCache || $[13] !== state.metadata) {
35
- const callbackResults = [];
36
- for (const message of messages) {
37
- let result = state.callbackCache.get(message);
38
- if (!result || result.metadata !== state.metadata || result.callback !== state.callback) {
39
- result = {
40
- ...convertExternalMessageCallback(message, state.callback, state.metadata),
41
- metadata: state.metadata,
42
- callback: state.callback
43
- };
44
- state.callbackCache.set(message, result);
45
- }
46
- callbackResults.push(result);
47
- }
48
- let t4;
49
- if ($[15] !== state.chunkCache) {
50
- t4 = (message_0) => {
51
- const key = message_0.outputs[0];
52
- if (!key) return message_0;
53
- const cached = state.chunkCache.get(key);
54
- if (cached && shallowArrayEqual(cached.outputs, message_0.outputs)) return cached;
55
- state.chunkCache.set(key, message_0);
56
- return message_0;
57
- };
58
- $[15] = state.chunkCache;
59
- $[16] = t4;
60
- } else t4 = $[16];
61
- const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(t4);
62
- const threadMessages = state.converterCache.convertMessages(chunks, (cache, message_1, idx) => convertExternalMessageChunk(message_1, idx, chunks.length, isRunning, state.metadata.error, {
63
- message: cache,
64
- generatedFallbackMessages
65
- }, state.metadata.cancelledMessageIds));
35
+ let threadMessages;
36
+ if ($[5] !== cache || $[6] !== isRunning || $[7] !== joinStrategy || $[8] !== messages || $[9] !== state.callback || $[10] !== state.metadata) {
37
+ threadMessages = convertExternalMessages$1(messages, state.callback, isRunning, state.metadata, joinStrategy, cache);
66
38
  bindExternalStoreMessage(threadMessages, messages);
67
- t3 = completeExternalMessageConversion(threadMessages, state.metadata.error);
39
+ $[5] = cache;
68
40
  $[6] = isRunning;
69
41
  $[7] = joinStrategy;
70
42
  $[8] = messages;
71
43
  $[9] = state.callback;
72
- $[10] = state.callbackCache;
73
- $[11] = state.chunkCache;
74
- $[12] = state.converterCache;
75
- $[13] = state.metadata;
76
- $[14] = t3;
77
- } else t3 = $[14];
78
- return t3;
44
+ $[10] = state.metadata;
45
+ $[11] = threadMessages;
46
+ } else threadMessages = $[11];
47
+ return threadMessages;
79
48
  };
80
49
  function _temp() {
81
- return {
82
- callbackCache: /* @__PURE__ */ new WeakMap(),
83
- chunkCache: /* @__PURE__ */ new WeakMap(),
84
- converterCache: new ThreadMessageConverter()
85
- };
50
+ return createExternalMessageConversionCache$1();
86
51
  }
87
52
  //#endregion
88
- export { convertExternalMessages, useExternalMessageConverter };
53
+ export { convertExternalMessages, createExternalMessageConversionCache, useExternalMessageConverter };
89
54
 
90
55
  //# sourceMappingURL=external-message-converter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"external-message-converter.js","names":["c","_c","useMemo","useState","chunkExternalMessages","completeExternalMessageConversion","convertExternalMessageCallback","convertExternalMessageChunk","convertExternalMessages","convertExternalMessagesInternal","shallowArrayEqual","ExternalMessageConverterCallback","ExternalMessageConverterCallbackResult","ExternalMessageConverterChunk","ExternalMessageConverterMessage","ExternalMessageConverterMetadata","JoinStrategy","bindExternalStoreMessage","ThreadMessageConverter","ThreadMessage","generatedFallbackMessages","WeakSet","useExternalMessageConverter","Message","Metadata","Callback","T","WeakKey","messages","callback","isRunning","metadata","CallbackCacheEntry","t0","$","joinStrategy","caches","_temp","t1","t2","state","t3","callbackCache","chunkCache","converterCache","callbackResults","message","result","get","set","push","t4","message_0","key","outputs","cached","chunks","map","threadMessages","convertMessages","cache","message_1","idx","length","error","cancelledMessageIds","WeakMap"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport {\n chunkExternalMessages,\n completeExternalMessageConversion,\n convertExternalMessageCallback,\n convertExternalMessageChunk,\n convertExternalMessages as convertExternalMessagesInternal,\n shallowArrayEqual,\n type ExternalMessageConverterCallback,\n type ExternalMessageConverterCallbackResult,\n type ExternalMessageConverterChunk,\n type ExternalMessageConverterMessage,\n type ExternalMessageConverterMetadata,\n type JoinStrategy,\n} from \"../../runtime/utils/external-message-conversion\";\nimport { bindExternalStoreMessage } from \"../../runtime/utils/external-store-message\";\nimport { ThreadMessageConverter } from \"../../runtimes/external-store/thread-message-converter\";\nimport type { ThreadMessage } from \"../../types/message\";\n\n// Generatedness is tracked by identity, not by id shape: a caller-supplied id\n// that happens to match the generated pattern must never be rewritten.\nconst generatedFallbackMessages = new WeakSet<object>();\n\nexport type { JoinStrategy };\n\nexport namespace useExternalMessageConverter {\n export type Message = ExternalMessageConverterMessage;\n export type Metadata = ExternalMessageConverterMetadata;\n export type Callback<T> = ExternalMessageConverterCallback<T>;\n}\n\nexport const convertExternalMessages: <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n) => ThreadMessage[] = convertExternalMessagesInternal;\n\ntype CallbackCacheEntry<T> = ExternalMessageConverterCallbackResult<T> & {\n metadata: useExternalMessageConverter.Metadata;\n callback: useExternalMessageConverter.Callback<T>;\n};\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n // The caches live for the component lifetime; React Compiler hoists\n // allocations without reactive dependencies out of useMemo, so re-creating\n // them on dependency change would not survive compilation. Staleness is\n // instead tracked per entry via the metadata/callback that produced it,\n // keeping correctness independent of memoization (which React treats as\n // droppable). A \"use no memo\" opt-out would restore the useMemo semantics\n // but leave cache flushing coupled to memo firing.\n const [caches] = useState(() => ({\n callbackCache: new WeakMap<T, CallbackCacheEntry<T>>(),\n chunkCache: new WeakMap<\n ExternalMessageConverterMessage,\n ExternalMessageConverterChunk<T>\n >(),\n converterCache: new ThreadMessageConverter(),\n }));\n\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n ...caches,\n }),\n [callback, metadata, caches],\n );\n\n return useMemo(() => {\n const callbackResults: ExternalMessageConverterCallbackResult<T>[] = [];\n for (const message of messages) {\n let result = state.callbackCache.get(message);\n if (\n !result ||\n result.metadata !== state.metadata ||\n result.callback !== state.callback\n ) {\n result = {\n ...convertExternalMessageCallback(\n message,\n state.callback,\n state.metadata,\n ),\n metadata: state.metadata,\n callback: state.callback,\n };\n state.callbackCache.set(message, result);\n }\n callbackResults.push(result);\n }\n\n const chunks = chunkExternalMessages(callbackResults, joinStrategy).map(\n (message) => {\n const key = message.outputs[0];\n if (!key) return message;\n\n const cached = state.chunkCache.get(key);\n if (cached && shallowArrayEqual(cached.outputs, message.outputs)) {\n return cached;\n }\n state.chunkCache.set(key, message);\n return message;\n },\n );\n\n const threadMessages = state.converterCache.convertMessages(\n chunks,\n (cache, message, idx) =>\n convertExternalMessageChunk(\n message,\n idx,\n chunks.length,\n isRunning,\n state.metadata.error,\n {\n message: cache,\n generatedFallbackMessages,\n },\n state.metadata.cancelledMessageIds,\n ),\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n return completeExternalMessageConversion(\n threadMessages,\n state.metadata.error,\n );\n }, [state, messages, isRunning, joinStrategy]);\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"external-message-converter.js","names":["c","_c","useMemo","useState","convertExternalMessages","convertExternalMessagesInternal","createExternalMessageConversionCache","createExternalMessageConversionCacheInternal","ExternalMessageConverterCallback","ExternalMessageConverterMessage","ExternalMessageConverterMetadata","InternalExternalMessageConversionCache","JoinStrategy","bindExternalStoreMessage","ExternalMessageConversionCache","__brand","useExternalMessageConverter","Message","Metadata","Callback","T","WeakKey","messages","callback","isRunning","metadata","cache","undefined","t0","$","joinStrategy","_temp","t1","t2","state","threadMessages"],"sources":["../../../src/react/runtimes/external-message-converter.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo, useState } from \"react\";\nimport {\n convertExternalMessages as convertExternalMessagesInternal,\n createExternalMessageConversionCache as createExternalMessageConversionCacheInternal,\n type ExternalMessageConverterCallback,\n type ExternalMessageConverterMessage,\n type ExternalMessageConverterMetadata,\n type InternalExternalMessageConversionCache,\n type JoinStrategy,\n} from \"../../runtime/utils/external-message-conversion\";\nimport { bindExternalStoreMessage } from \"../../runtime/utils/external-store-message\";\n\nexport type { JoinStrategy };\nexport type ExternalMessageConversionCache = {\n readonly __brand: unique symbol;\n};\n\n/**\n * Creates a cache for plain external message conversion. Pass the same cache on every call for one message list, and a source message that has not changed since the previous call converts to the same `ThreadMessage` object.\n *\n * Entries are keyed by source message identity and rebuilt whenever `callback` or `metadata` is a different object than on the previous call, so keep both referentially stable.\n */\nexport const createExternalMessageConversionCache =\n (): ExternalMessageConversionCache =>\n createExternalMessageConversionCacheInternal() as unknown as ExternalMessageConversionCache;\n\nexport namespace useExternalMessageConverter {\n export type Message = ExternalMessageConverterMessage;\n export type Metadata = ExternalMessageConverterMetadata;\n export type Callback<T> = ExternalMessageConverterCallback<T>;\n}\n\nexport const convertExternalMessages = <T extends WeakKey>(\n messages: T[],\n callback: useExternalMessageConverter.Callback<T>,\n isRunning: boolean,\n metadata: useExternalMessageConverter.Metadata,\n cache?: ExternalMessageConversionCache,\n) =>\n convertExternalMessagesInternal(\n messages,\n callback,\n isRunning,\n metadata,\n undefined,\n cache as unknown as InternalExternalMessageConversionCache<T> | undefined,\n );\n\nexport const useExternalMessageConverter = <T extends WeakKey>({\n callback,\n messages,\n isRunning,\n joinStrategy,\n metadata,\n}: {\n callback: useExternalMessageConverter.Callback<T>;\n messages: T[];\n isRunning: boolean;\n joinStrategy?: JoinStrategy | undefined;\n metadata?: useExternalMessageConverter.Metadata | undefined;\n}) => {\n // The cache lives for the component lifetime: React Compiler hoists allocations without reactive dependencies out of useMemo, so entries carry the callback and metadata that produced them instead of being flushed when those change.\n const [cache] = useState(() =>\n createExternalMessageConversionCacheInternal<T>(),\n );\n\n const state = useMemo(\n () => ({\n metadata: metadata ?? {},\n callback,\n }),\n [callback, metadata],\n );\n\n return useMemo(() => {\n const threadMessages = convertExternalMessagesInternal(\n messages,\n state.callback,\n isRunning,\n state.metadata,\n joinStrategy,\n cache,\n );\n\n bindExternalStoreMessage(threadMessages, messages);\n return threadMessages;\n }, [state, messages, isRunning, joinStrategy, cache]);\n};\n"],"mappings":";;;;;;;;;;;AAwBA,MAAaM,6CAETC,uCAA6C;AAQjD,MAAaH,2BACXkB,UACAC,UACAC,WACAC,UACAC,UAEArB,0BACEiB,UACAC,UACAC,WACAC,UACAE,KAAAA,GACAD,KACF;AAEF,MAAaV,+BAA8BY,OAAA;CAAA,MAAAC,IAAA5B,EAAA,EAAA;CAAoB,MAAA,EAAAsB,UAAAD,UAAAE,WAAAM,cAAAL,aAAAG;CAc7D,MAAA,CAAAF,SAAgBvB,SAAS4B,KAEzB;CAAE,IAAAC;CAAA,IAAAH,EAAA,OAAAJ,UAAA;EAIYO,KAAAP,YAAA,CAAa;EAACI,EAAA,KAAAJ;EAAAI,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAI;CAAA,IAAAJ,EAAA,OAAAN,YAAAM,EAAA,OAAAG,IAAA;EADnBC,KAAA;GAAAR,UACKO;GAAcT;EAE1B;EAACM,EAAA,KAAAN;EAAAM,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAAA,KAAAJ,EAAA;CAJH,MAAAK,QACSD;CAKP,IAAAE;CAAA,IAAAN,EAAA,OAAAH,SAAAG,EAAA,OAAAL,aAAAK,EAAA,OAAAC,gBAAAD,EAAA,OAAAP,YAAAO,EAAA,OAAAK,MAAAX,YAAAM,EAAA,QAAAK,MAAAT,UAAA;EAGAU,iBAAuB9B,0BACrBiB,UACAY,MAAKX,UACLC,WACAU,MAAKT,UACLK,cACAJ,KACF;EAEAb,yBAAyBsB,gBAAgBb,QAAQ;EAACO,EAAA,KAAAH;EAAAG,EAAA,KAAAL;EAAAK,EAAA,KAAAC;EAAAD,EAAA,KAAAP;EAAAO,EAAA,KAAAK,MAAAX;EAAAM,EAAA,MAAAK,MAAAT;EAAAI,EAAA,MAAAM;CAAA,OAAAA,iBAAAN,EAAA;CAAA,OAClDM;AAAsB;AArCiB,SAAAJ,QAAA;CAAA,OAevCxB,uCAAgD;AAAC"}
@@ -7,64 +7,93 @@ import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
7
  import { useEffect, useState } from "@assistant-ui/tap/react-shim";
8
8
  //#region src/react/runtimes/useExternalStoreRuntime.ts
9
9
  const useExternalStoreRuntime = (store) => {
10
- const $ = c(15);
10
+ const $ = c(21);
11
+ const { modelContext, feedback } = useRuntimeAdapters() ?? {};
11
12
  let t0;
12
- if ($[0] !== store) {
13
- t0 = () => new ExternalStoreRuntimeCore(store);
14
- $[0] = store;
15
- $[1] = t0;
16
- } else t0 = $[1];
17
- const [runtime] = useState(t0);
13
+ bb0: {
14
+ if (!feedback || store.adapters?.feedback) {
15
+ t0 = store;
16
+ break bb0;
17
+ }
18
+ let t1;
19
+ if ($[0] !== feedback || $[1] !== store.adapters) {
20
+ t1 = {
21
+ ...store.adapters,
22
+ feedback
23
+ };
24
+ $[0] = feedback;
25
+ $[1] = store.adapters;
26
+ $[2] = t1;
27
+ } else t1 = $[2];
28
+ let t2;
29
+ if ($[3] !== store || $[4] !== t1) {
30
+ t2 = {
31
+ ...store,
32
+ adapters: t1
33
+ };
34
+ $[3] = store;
35
+ $[4] = t1;
36
+ $[5] = t2;
37
+ } else t2 = $[5];
38
+ t0 = t2;
39
+ }
40
+ const adaptedStore = t0;
18
41
  let t1;
19
- if ($[2] !== runtime.threads) {
20
- t1 = () => () => {
42
+ if ($[6] !== adaptedStore) {
43
+ t1 = () => new ExternalStoreRuntimeCore(adaptedStore);
44
+ $[6] = adaptedStore;
45
+ $[7] = t1;
46
+ } else t1 = $[7];
47
+ const [runtime] = useState(t1);
48
+ let t2;
49
+ if ($[8] !== runtime.threads) {
50
+ t2 = () => () => {
21
51
  invalidateThreadRuntime(runtime.threads.getMainThreadRuntimeCore());
22
52
  };
23
- $[2] = runtime.threads;
24
- $[3] = t1;
25
- } else t1 = $[3];
26
- let t2;
27
- if ($[4] !== runtime) {
28
- t2 = [runtime];
29
- $[4] = runtime;
30
- $[5] = t2;
31
- } else t2 = $[5];
32
- useEffect(t1, t2);
53
+ $[8] = runtime.threads;
54
+ $[9] = t2;
55
+ } else t2 = $[9];
33
56
  let t3;
34
- if ($[6] !== runtime || $[7] !== store) {
35
- t3 = () => {
36
- runtime.setAdapter(store);
37
- };
38
- $[6] = runtime;
39
- $[7] = store;
40
- $[8] = t3;
41
- } else t3 = $[8];
42
- useEffect(t3);
43
- const { modelContext } = useRuntimeAdapters() ?? {};
57
+ if ($[10] !== runtime) {
58
+ t3 = [runtime];
59
+ $[10] = runtime;
60
+ $[11] = t3;
61
+ } else t3 = $[11];
62
+ useEffect(t2, t3);
44
63
  let t4;
45
- let t5;
46
- if ($[9] !== modelContext || $[10] !== runtime) {
64
+ if ($[12] !== adaptedStore || $[13] !== runtime) {
47
65
  t4 = () => {
66
+ runtime.setAdapter(adaptedStore);
67
+ };
68
+ $[12] = adaptedStore;
69
+ $[13] = runtime;
70
+ $[14] = t4;
71
+ } else t4 = $[14];
72
+ useEffect(t4);
73
+ let t5;
74
+ let t6;
75
+ if ($[15] !== modelContext || $[16] !== runtime) {
76
+ t5 = () => {
48
77
  if (!modelContext) return;
49
78
  return runtime.registerModelContextProvider(modelContext);
50
79
  };
51
- t5 = [modelContext, runtime];
52
- $[9] = modelContext;
53
- $[10] = runtime;
54
- $[11] = t4;
55
- $[12] = t5;
80
+ t6 = [modelContext, runtime];
81
+ $[15] = modelContext;
82
+ $[16] = runtime;
83
+ $[17] = t5;
84
+ $[18] = t6;
56
85
  } else {
57
- t4 = $[11];
58
- t5 = $[12];
86
+ t5 = $[17];
87
+ t6 = $[18];
59
88
  }
60
- useEffect(t4, t5);
61
- let t6;
62
- if ($[13] !== runtime) {
63
- t6 = new AssistantRuntimeImpl(runtime);
64
- $[13] = runtime;
65
- $[14] = t6;
66
- } else t6 = $[14];
67
- return t6;
89
+ useEffect(t5, t6);
90
+ let t7;
91
+ if ($[19] !== runtime) {
92
+ t7 = new AssistantRuntimeImpl(runtime);
93
+ $[19] = runtime;
94
+ $[20] = t7;
95
+ } else t7 = $[20];
96
+ return t7;
68
97
  };
69
98
  //#endregion
70
99
  export { useExternalStoreRuntime };
@@ -1 +1 @@
1
- {"version":3,"file":"useExternalStoreRuntime.js","names":["c","_c","useEffect","useMemo","useState","ExternalStoreRuntimeCore","ExternalStoreAdapter","AssistantRuntime","AssistantRuntimeImpl","invalidateThreadRuntime","useRuntimeAdapters","useExternalStoreRuntime","store","$","t0","runtime","t1","threads","getMainThreadRuntimeCore","t2","t3","setAdapter","modelContext","t4","t5","registerModelContextProvider","t6"],"sources":["../../../src/react/runtimes/useExternalStoreRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ExternalStoreRuntimeCore } from \"../../runtimes/internal\";\nimport type { ExternalStoreAdapter } from \"../../runtimes/external-store/external-store-adapter\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { AssistantRuntimeImpl } from \"../../runtime/internal\";\nimport { invalidateThreadRuntime } from \"../../runtime/utils/thread-runtime-lifecycle\";\nimport { useRuntimeAdapters } from \"./RuntimeAdapterProvider\";\n\nexport const useExternalStoreRuntime = <T>(\n store: ExternalStoreAdapter<T>,\n): AssistantRuntime => {\n const [runtime] = useState(() => new ExternalStoreRuntimeCore(store));\n\n useEffect(() => {\n return () => {\n invalidateThreadRuntime(runtime.threads.getMainThreadRuntimeCore());\n };\n }, [runtime]);\n\n useEffect(() => {\n runtime.setAdapter(store);\n });\n\n const { modelContext } = useRuntimeAdapters() ?? {};\n\n useEffect(() => {\n if (!modelContext) return undefined;\n return runtime.registerModelContextProvider(modelContext);\n }, [modelContext, runtime]);\n\n return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);\n};\n"],"mappings":";;;;;;;;AAUA,MAAaW,2BAA0BC,UAAA;CAAA,MAAAC,IAAAZ,EAAA,EAAA;CAAA,IAAAa;CAAA,IAAAD,EAAA,OAAAD,OAAA;EAGVE,WAAM,IAAIT,yBAAyBO,KAAK;EAACC,EAAA,KAAAD;EAAAC,EAAA,KAAAC;CAAA,OAAAA,KAAAD,EAAA;CAApE,MAAA,CAAAE,WAAkBX,SAASU,EAAyC;CAAE,IAAAE;CAAA,IAAAH,EAAA,OAAAE,QAAAE,SAAA;EAE5DD,iBACD;GACLP,wBAAwBM,QAAOE,QAAQC,yBAA0B,CAAC;EAAC;EAEtEL,EAAA,KAAAE,QAAAE;EAAAJ,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAE,SAAA;EAAEI,KAAA,CAACJ,OAAO;EAACF,EAAA,KAAAE;EAAAF,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAJZX,UAAUc,IAIPG,EAAS;CAAC,IAAAC;CAAA,IAAAP,EAAA,OAAAE,WAAAF,EAAA,OAAAD,OAAA;EAEHQ,WAAA;GACRL,QAAOM,WAAYT,KAAK;EAAC;EAC1BC,EAAA,KAAAE;EAAAF,EAAA,KAAAD;EAAAC,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAFDX,UAAUkB,EAET;CAED,MAAA,EAAAE,iBAAyBZ,mBAAyB,KAAzB,CAAyB;CAAE,IAAAa;CAAA,IAAAC;CAAA,IAAAX,EAAA,OAAAS,gBAAAT,EAAA,QAAAE,SAAA;EAE1CQ,WAAA;GACR,IAAI,CAACD,cAAY;GAAmB,OAC7BP,QAAOU,6BAA8BH,YAAY;EAAC;EACxDE,KAAA,CAACF,cAAcP,OAAO;EAACF,EAAA,KAAAS;EAAAT,EAAA,MAAAE;EAAAF,EAAA,MAAAU;EAAAV,EAAA,MAAAW;CAAA,OAAA;EAAAD,KAAAV,EAAA;EAAAW,KAAAX,EAAA;CAAA;CAH1BX,UAAUqB,IAGPC,EAAuB;CAAC,IAAAE;CAAA,IAAAb,EAAA,QAAAE,SAAA;EAENW,KAAA,IAAIlB,qBAAqBO,OAAO;EAACF,EAAA,MAAAE;EAAAF,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OAAjCa;AAAiC"}
1
+ {"version":3,"file":"useExternalStoreRuntime.js","names":["c","_c","useEffect","useMemo","useState","ExternalStoreRuntimeCore","ExternalStoreAdapter","AssistantRuntime","AssistantRuntimeImpl","invalidateThreadRuntime","useRuntimeAdapters","useExternalStoreRuntime","store","$","modelContext","feedback","t0","bb0","adapters","t1","t2","adaptedStore","runtime","threads","getMainThreadRuntimeCore","t3","t4","setAdapter","t5","t6","registerModelContextProvider","t7"],"sources":["../../../src/react/runtimes/useExternalStoreRuntime.ts"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useMemo, useState } from \"react\";\nimport { ExternalStoreRuntimeCore } from \"../../runtimes/internal\";\nimport type { ExternalStoreAdapter } from \"../../runtimes/external-store/external-store-adapter\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { AssistantRuntimeImpl } from \"../../runtime/internal\";\nimport { invalidateThreadRuntime } from \"../../runtime/utils/thread-runtime-lifecycle\";\nimport { useRuntimeAdapters } from \"./RuntimeAdapterProvider\";\n\nexport const useExternalStoreRuntime = <T>(\n store: ExternalStoreAdapter<T>,\n): AssistantRuntime => {\n const { modelContext, feedback } = useRuntimeAdapters() ?? {};\n const adaptedStore = useMemo(() => {\n if (!feedback || store.adapters?.feedback) return store;\n return {\n ...store,\n adapters: { ...store.adapters, feedback },\n };\n }, [feedback, store]);\n const [runtime] = useState(() => new ExternalStoreRuntimeCore(adaptedStore));\n\n useEffect(() => {\n return () => {\n invalidateThreadRuntime(runtime.threads.getMainThreadRuntimeCore());\n };\n }, [runtime]);\n\n useEffect(() => {\n runtime.setAdapter(adaptedStore);\n });\n\n useEffect(() => {\n if (!modelContext) return undefined;\n return runtime.registerModelContextProvider(modelContext);\n }, [modelContext, runtime]);\n\n return useMemo(() => new AssistantRuntimeImpl(runtime), [runtime]);\n};\n"],"mappings":";;;;;;;;AAUA,MAAaW,2BAA0BC,UAAA;CAAA,MAAAC,IAAAZ,EAAA,EAAA;CAGrC,MAAA,EAAAa,cAAAC,aAAmCL,mBAAyB,KAAzB,CAAyB;CAAE,IAAAM;CAAAC,KAAA;EAE5D,IAAI,CAACF,YAAYH,MAAKM,UAAmBH,UAAA;GAAEC,KAAOJ;GAAP,MAAAK;EAAa;EAAA,IAAAE;EAAA,IAAAN,EAAA,OAAAE,YAAAF,EAAA,OAAAD,MAAAM,UAAA;GAG5CC,KAAA;IAAA,GAAKP,MAAKM;IAASH;GAAW;GAACF,EAAA,KAAAE;GAAAF,EAAA,KAAAD,MAAAM;GAAAL,EAAA,KAAAM;EAAA,OAAAA,KAAAN,EAAA;EAAA,IAAAO;EAAA,IAAAP,EAAA,OAAAD,SAAAC,EAAA,OAAAM,IAAA;GAFpCC,KAAA;IAAA,GACFR;IAAKM,UACEC;GACZ;GAACN,EAAA,KAAAD;GAAAC,EAAA,KAAAM;GAAAN,EAAA,KAAAO;EAAA,OAAAA,KAAAP,EAAA;EAHDG,KAAOI;CAGL;CALJ,MAAAC,eAAqBL;CAMC,IAAAG;CAAA,IAAAN,EAAA,OAAAQ,cAAA;EACKF,WAAM,IAAId,yBAAyBgB,YAAY;EAACR,EAAA,KAAAQ;EAAAR,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAA3E,MAAA,CAAAS,WAAkBlB,SAASe,EAAgD;CAAE,IAAAC;CAAA,IAAAP,EAAA,OAAAS,QAAAC,SAAA;EAEnEH,iBACD;GACLX,wBAAwBa,QAAOC,QAAQC,yBAA0B,CAAC;EAAC;EAEtEX,EAAA,KAAAS,QAAAC;EAAAV,EAAA,KAAAO;CAAA,OAAAA,KAAAP,EAAA;CAAA,IAAAY;CAAA,IAAAZ,EAAA,QAAAS,SAAA;EAAEG,KAAA,CAACH,OAAO;EAACT,EAAA,MAAAS;EAAAT,EAAA,MAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAJZX,UAAUkB,IAIPK,EAAS;CAAC,IAAAC;CAAA,IAAAb,EAAA,QAAAQ,gBAAAR,EAAA,QAAAS,SAAA;EAEHI,WAAA;GACRJ,QAAOK,WAAYN,YAAY;EAAC;EACjCR,EAAA,MAAAQ;EAAAR,EAAA,MAAAS;EAAAT,EAAA,MAAAa;CAAA,OAAAA,KAAAb,EAAA;CAFDX,UAAUwB,EAET;CAAC,IAAAE;CAAA,IAAAC;CAAA,IAAAhB,EAAA,QAAAC,gBAAAD,EAAA,QAAAS,SAAA;EAEQM,WAAA;GACR,IAAI,CAACd,cAAY;GAAmB,OAC7BQ,QAAOQ,6BAA8BhB,YAAY;EAAC;EACxDe,KAAA,CAACf,cAAcQ,OAAO;EAACT,EAAA,MAAAC;EAAAD,EAAA,MAAAS;EAAAT,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;CAAA,OAAA;EAAAD,KAAAf,EAAA;EAAAgB,KAAAhB,EAAA;CAAA;CAH1BX,UAAU0B,IAGPC,EAAuB;CAAC,IAAAE;CAAA,IAAAlB,EAAA,QAAAS,SAAA;EAENS,KAAA,IAAIvB,qBAAqBc,OAAO;EAACT,EAAA,MAAAS;EAAAT,EAAA,MAAAkB;CAAA,OAAAA,KAAAlB,EAAA;CAAA,OAAjCkB;AAAiC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRemoteThreadListRuntime.d.ts","names":[],"sources":["../../../src/react/runtimes/useRemoteThreadListRuntime.ts"],"mappings":";;;cAiDa,6BACX,SAAS,4BACR"}
1
+ {"version":3,"file":"useRemoteThreadListRuntime.d.ts","names":[],"sources":["../../../src/react/runtimes/useRemoteThreadListRuntime.ts"],"mappings":";;;cAkFa,6BACX,SAAS,4BACR"}