@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
@@ -3,9 +3,10 @@ import { fileMatchesAccept } from "../../adapters/attachment.js";
3
3
  import { getThreadMessageText } from "../../utils/text.js";
4
4
  import { toMessagePartStatus } from "../../utils/normalizePartStatus.js";
5
5
  import { resolveToolApprovalResponse } from "../../runtime/utils/resolveToolApprovalResponse.js";
6
- import { isCreateAttachment } from "../../types/attachment.js";
6
+ import { isAttachmentComplete, isCreateAttachment } from "../../types/attachment.js";
7
7
  import { AttachmentAddOperations, drainAttachmentAdd } from "../../runtime/utils/attachment-add-operations.js";
8
8
  import { ThreadSuggestions } from "./suggestions.js";
9
+ import { TaskClient, createTaskDeriver, getTaskKey } from "./thread-tasks.js";
9
10
  import { ModelContext } from "./model-context-client.js";
10
11
  import { DataRenderers } from "../../react/client/DataRenderers.js";
11
12
  import { Tools } from "../../react/client/Tools.js";
@@ -398,6 +399,22 @@ const useLiveState = (initial) => {
398
399
  } else t1 = $[2];
399
400
  return t1;
400
401
  };
402
+ const removeAttachmentThroughAdapter = async (attachment, attachmentAdapter, setAttachments) => {
403
+ try {
404
+ await attachmentAdapter?.remove(attachment);
405
+ } catch (error) {
406
+ const message = error instanceof Error ? error.message : String(error);
407
+ setAttachments((prev) => prev.map((candidate) => candidate.id === attachment.id && !isAttachmentComplete(candidate) ? {
408
+ ...candidate,
409
+ status: {
410
+ type: "incomplete",
411
+ reason: "error",
412
+ message
413
+ }
414
+ } : candidate));
415
+ throw error;
416
+ }
417
+ };
401
418
  const useComposerClientResource = (t0) => {
402
419
  const $ = c(108);
403
420
  const { type, canCancel, isRunning: t1, isSendDisabled: t2, onCancel, onBeginEdit, onSend, message, queue, attachmentAdapter } = t0;
@@ -449,7 +466,7 @@ const useComposerClientResource = (t0) => {
449
466
  attachment,
450
467
  onRemove: async () => {
451
468
  attachmentAddOperations.cancel(attachment.id);
452
- await attachmentAdapter?.remove(attachment);
469
+ if (!isAttachmentComplete(attachment)) await removeAttachmentThroughAdapter(attachment, attachmentAdapter, setAttachments);
453
470
  setAttachments((prev) => prev.filter((a) => a.id !== attachment.id));
454
471
  }
455
472
  }));
@@ -468,7 +485,7 @@ const useComposerClientResource = (t0) => {
468
485
  if ($[15] !== attachmentAdapter) {
469
486
  t8 = async (removed) => {
470
487
  if (!attachmentAdapter) return;
471
- await Promise.all(removed.filter(_temp6).map((a_1) => attachmentAdapter.remove(a_1)));
488
+ await Promise.all(removed.filter(_temp6).map(async (a_1) => attachmentAdapter.remove(a_1)));
472
489
  };
473
490
  $[15] = attachmentAdapter;
474
491
  $[16] = t8;
@@ -873,7 +890,7 @@ const dedupeMessagesById = (messages) => {
873
890
  return deduped.length === messages.length ? messages : deduped.reverse();
874
891
  };
875
892
  const useExternalThread = (t0) => {
876
- const $ = c(115);
893
+ const $ = c(125);
877
894
  const { messages: messagesProp, isRunning: t1, isLoading: t2, state: threadState, extras, isSendDisabled: t3, onNew, onEdit, onReload, onStartRun, onCancel, onResume, onRefetchThread, onAddToolResult, onResumeToolCall, onLoadExternalState, attachmentAdapter, feedbackAdapter, speechAdapter, queue, branches, onRespondToToolApproval } = t0;
878
895
  const isRunning = t1 === void 0 ? false : t1;
879
896
  const isLoading = t2 === void 0 ? false : t2;
@@ -1047,42 +1064,62 @@ const useExternalThread = (t0) => {
1047
1064
  } else t17 = $[38];
1048
1065
  const messageClients = useClientLookup(t17);
1049
1066
  let t18;
1050
- if ($[39] !== onCancel || $[40] !== queue) {
1051
- t18 = () => {
1067
+ if ($[39] === Symbol.for("react.memo_cache_sentinel")) {
1068
+ t18 = createTaskDeriver();
1069
+ $[39] = t18;
1070
+ } else t18 = $[39];
1071
+ const taskDeriver = t18;
1072
+ let t19;
1073
+ if ($[40] !== messages) {
1074
+ t19 = taskDeriver(messages);
1075
+ $[40] = messages;
1076
+ $[41] = t19;
1077
+ } else t19 = $[41];
1078
+ const tasks = t19;
1079
+ let t20;
1080
+ if ($[42] !== tasks) {
1081
+ t20 = tasks.map(_temp0);
1082
+ $[42] = tasks;
1083
+ $[43] = t20;
1084
+ } else t20 = $[43];
1085
+ const taskClients = useClientLookup(t20);
1086
+ let t21;
1087
+ if ($[44] !== onCancel || $[45] !== queue) {
1088
+ t21 = () => {
1052
1089
  if (!onCancel) return;
1053
1090
  queue?.__internal_notifyCancelled?.();
1054
1091
  onCancel();
1055
1092
  };
1056
- $[39] = onCancel;
1057
- $[40] = queue;
1058
- $[41] = t18;
1059
- } else t18 = $[41];
1060
- const handleCancelRun = t18;
1061
- let t19;
1062
- if ($[42] !== messages || $[43] !== onNew) {
1063
- t19 = (message_1) => {
1093
+ $[44] = onCancel;
1094
+ $[45] = queue;
1095
+ $[46] = t21;
1096
+ } else t21 = $[46];
1097
+ const handleCancelRun = t21;
1098
+ let t22;
1099
+ if ($[47] !== messages || $[48] !== onNew) {
1100
+ t22 = (message_1) => {
1064
1101
  onNew?.({
1065
1102
  ...message_1,
1066
1103
  parentId: messages.at(-1)?.id ?? null
1067
1104
  });
1068
1105
  };
1069
- $[42] = messages;
1070
- $[43] = onNew;
1071
- $[44] = t19;
1072
- } else t19 = $[44];
1073
- const handleSendNew = t19;
1074
- let t20;
1075
- if ($[45] !== messages) {
1076
- t20 = messages.at(-1)?.id ?? null;
1077
- $[45] = messages;
1078
- $[46] = t20;
1079
- } else t20 = $[46];
1080
- const headId = t20;
1106
+ $[47] = messages;
1107
+ $[48] = onNew;
1108
+ $[49] = t22;
1109
+ } else t22 = $[49];
1110
+ const handleSendNew = t22;
1111
+ let t23;
1112
+ if ($[50] !== messages) {
1113
+ t23 = messages.at(-1)?.id ?? null;
1114
+ $[50] = messages;
1115
+ $[51] = t23;
1116
+ } else t23 = $[51];
1117
+ const headId = t23;
1081
1118
  const hasCancel = !!onCancel;
1082
1119
  const hasRefetchThread = !!onRefetchThread;
1083
- let t21;
1084
- if ($[47] !== headId || $[48] !== queue) {
1085
- t21 = queue && {
1120
+ let t24;
1121
+ if ($[52] !== headId || $[53] !== queue) {
1122
+ t24 = queue && {
1086
1123
  ...queue,
1087
1124
  enqueue: (message_2) => queue.enqueue({
1088
1125
  ...message_2,
@@ -1093,17 +1130,17 @@ const useExternalThread = (t0) => {
1093
1130
  parentId: message_3.parentId ?? headId
1094
1131
  })
1095
1132
  };
1096
- $[47] = headId;
1097
- $[48] = queue;
1098
- $[49] = t21;
1099
- } else t21 = $[49];
1100
- const composerQueue = t21;
1101
- const t22 = isRunning && hasCancel;
1102
- let t23;
1103
- if ($[50] !== attachmentAdapter || $[51] !== composerQueue || $[52] !== handleCancelRun || $[53] !== handleSendNew || $[54] !== isRunning || $[55] !== isSendDisabled || $[56] !== t22) {
1104
- t23 = ComposerClientResource({
1133
+ $[52] = headId;
1134
+ $[53] = queue;
1135
+ $[54] = t24;
1136
+ } else t24 = $[54];
1137
+ const composerQueue = t24;
1138
+ const t25 = isRunning && hasCancel;
1139
+ let t26;
1140
+ if ($[55] !== attachmentAdapter || $[56] !== composerQueue || $[57] !== handleCancelRun || $[58] !== handleSendNew || $[59] !== isRunning || $[60] !== isSendDisabled || $[61] !== t25) {
1141
+ t26 = ComposerClientResource({
1105
1142
  type: "thread",
1106
- canCancel: t22,
1143
+ canCancel: t25,
1107
1144
  isRunning,
1108
1145
  isSendDisabled,
1109
1146
  onCancel: handleCancelRun,
@@ -1111,22 +1148,22 @@ const useExternalThread = (t0) => {
1111
1148
  queue: composerQueue,
1112
1149
  attachmentAdapter
1113
1150
  });
1114
- $[50] = attachmentAdapter;
1115
- $[51] = composerQueue;
1116
- $[52] = handleCancelRun;
1117
- $[53] = handleSendNew;
1118
- $[54] = isRunning;
1119
- $[55] = isSendDisabled;
1120
- $[56] = t22;
1121
- $[57] = t23;
1122
- } else t23 = $[57];
1123
- const composerClient = useClientResource(t23);
1124
- let t24;
1125
- if ($[58] === Symbol.for("react.memo_cache_sentinel")) {
1126
- t24 = ThreadSuggestions(EMPTY_SUGGESTIONS);
1127
- $[58] = t24;
1128
- } else t24 = $[58];
1129
- const suggestionsClient = useClientResource(t24);
1151
+ $[55] = attachmentAdapter;
1152
+ $[56] = composerQueue;
1153
+ $[57] = handleCancelRun;
1154
+ $[58] = handleSendNew;
1155
+ $[59] = isRunning;
1156
+ $[60] = isSendDisabled;
1157
+ $[61] = t25;
1158
+ $[62] = t26;
1159
+ } else t26 = $[62];
1160
+ const composerClient = useClientResource(t26);
1161
+ let t27;
1162
+ if ($[63] === Symbol.for("react.memo_cache_sentinel")) {
1163
+ t27 = ThreadSuggestions(EMPTY_SUGGESTIONS);
1164
+ $[63] = t27;
1165
+ } else t27 = $[63];
1166
+ const suggestionsClient = useClientResource(t27);
1130
1167
  const hasQueue = !!queue;
1131
1168
  const hasBranches = !!branches;
1132
1169
  const hasEdit = !!onEdit;
@@ -1134,17 +1171,17 @@ const useExternalThread = (t0) => {
1134
1171
  const hasAttachments = !!attachmentAdapter;
1135
1172
  const hasFeedback = !!feedbackAdapter;
1136
1173
  const hasSpeech = !!speechAdapter;
1137
- let t25;
1138
- if ($[59] !== messageClients.state) {
1139
- t25 = messageClients.state.map(_temp0);
1140
- $[59] = messageClients.state;
1141
- $[60] = t25;
1142
- } else t25 = $[60];
1143
- const messageStates = t25;
1144
- const t26 = messages.length === 0 && !isLoading;
1145
- let t27;
1146
- if ($[61] !== hasAttachments || $[62] !== hasBranches || $[63] !== hasCancel || $[64] !== hasEdit || $[65] !== hasFeedback || $[66] !== hasQueue || $[67] !== hasRefetchThread || $[68] !== hasReload || $[69] !== hasSpeech) {
1147
- t27 = {
1174
+ let t28;
1175
+ if ($[64] !== messageClients.state) {
1176
+ t28 = messageClients.state.map(_temp1);
1177
+ $[64] = messageClients.state;
1178
+ $[65] = t28;
1179
+ } else t28 = $[65];
1180
+ const messageStates = t28;
1181
+ const t29 = messages.length === 0 && !isLoading;
1182
+ let t30;
1183
+ if ($[66] !== hasAttachments || $[67] !== hasBranches || $[68] !== hasCancel || $[69] !== hasEdit || $[70] !== hasFeedback || $[71] !== hasQueue || $[72] !== hasRefetchThread || $[73] !== hasReload || $[74] !== hasSpeech) {
1184
+ t30 = {
1148
1185
  edit: hasEdit,
1149
1186
  delete: false,
1150
1187
  reload: hasReload,
@@ -1160,72 +1197,87 @@ const useExternalThread = (t0) => {
1160
1197
  dictation: false,
1161
1198
  queue: hasQueue
1162
1199
  };
1163
- $[61] = hasAttachments;
1164
- $[62] = hasBranches;
1165
- $[63] = hasCancel;
1166
- $[64] = hasEdit;
1167
- $[65] = hasFeedback;
1168
- $[66] = hasQueue;
1169
- $[67] = hasRefetchThread;
1170
- $[68] = hasReload;
1171
- $[69] = hasSpeech;
1172
- $[70] = t27;
1173
- } else t27 = $[70];
1174
- let t28;
1175
- if ($[71] !== threadState) {
1176
- t28 = threadState ?? {};
1177
- $[71] = threadState;
1178
- $[72] = t28;
1179
- } else t28 = $[72];
1180
- let t29;
1181
- if ($[73] !== composerClient.state || $[74] !== extras || $[75] !== isLoading || $[76] !== isRunning || $[77] !== messageStates || $[78] !== speech || $[79] !== t26 || $[80] !== t27 || $[81] !== t28) {
1182
- t29 = {
1183
- isEmpty: t26,
1200
+ $[66] = hasAttachments;
1201
+ $[67] = hasBranches;
1202
+ $[68] = hasCancel;
1203
+ $[69] = hasEdit;
1204
+ $[70] = hasFeedback;
1205
+ $[71] = hasQueue;
1206
+ $[72] = hasRefetchThread;
1207
+ $[73] = hasReload;
1208
+ $[74] = hasSpeech;
1209
+ $[75] = t30;
1210
+ } else t30 = $[75];
1211
+ let t31;
1212
+ if ($[76] !== threadState) {
1213
+ t31 = threadState ?? {};
1214
+ $[76] = threadState;
1215
+ $[77] = t31;
1216
+ } else t31 = $[77];
1217
+ let t32;
1218
+ if ($[78] !== composerClient.state || $[79] !== extras || $[80] !== isLoading || $[81] !== isRunning || $[82] !== messageStates || $[83] !== speech || $[84] !== t29 || $[85] !== t30 || $[86] !== t31 || $[87] !== tasks) {
1219
+ t32 = {
1220
+ isEmpty: t29,
1184
1221
  isDisabled: false,
1185
1222
  isLoading,
1186
1223
  isRunning,
1187
- capabilities: t27,
1224
+ capabilities: t30,
1188
1225
  messages: messageStates,
1189
- state: t28,
1226
+ tasks,
1227
+ state: t31,
1190
1228
  suggestions: EMPTY_SUGGESTIONS,
1191
1229
  extras,
1192
1230
  speech,
1193
1231
  voice: void 0,
1194
1232
  composer: composerClient.state
1195
1233
  };
1196
- $[73] = composerClient.state;
1197
- $[74] = extras;
1198
- $[75] = isLoading;
1199
- $[76] = isRunning;
1200
- $[77] = messageStates;
1201
- $[78] = speech;
1202
- $[79] = t26;
1203
- $[80] = t27;
1204
- $[81] = t28;
1205
- $[82] = t29;
1206
- } else t29 = $[82];
1207
- const state = t29;
1208
- let t30;
1209
- if ($[83] !== state) {
1210
- t30 = () => state;
1211
- $[83] = state;
1212
- $[84] = t30;
1213
- } else t30 = $[84];
1214
- let t31;
1215
- if ($[85] !== composerClient.methods) {
1216
- t31 = () => composerClient.methods;
1217
- $[85] = composerClient.methods;
1234
+ $[78] = composerClient.state;
1235
+ $[79] = extras;
1236
+ $[80] = isLoading;
1237
+ $[81] = isRunning;
1238
+ $[82] = messageStates;
1239
+ $[83] = speech;
1240
+ $[84] = t29;
1241
+ $[85] = t30;
1218
1242
  $[86] = t31;
1219
- } else t31 = $[86];
1220
- let t32;
1221
- if ($[87] !== suggestionsClient) {
1222
- t32 = () => suggestionsClient.methods;
1223
- $[87] = suggestionsClient;
1243
+ $[87] = tasks;
1224
1244
  $[88] = t32;
1225
1245
  } else t32 = $[88];
1246
+ const state = t32;
1226
1247
  let t33;
1227
- if ($[89] !== messages || $[90] !== onNew || $[91] !== queue) {
1228
- t33 = (message_4) => {
1248
+ if ($[89] !== state) {
1249
+ t33 = () => state;
1250
+ $[89] = state;
1251
+ $[90] = t33;
1252
+ } else t33 = $[90];
1253
+ let t34;
1254
+ if ($[91] !== composerClient.methods) {
1255
+ t34 = () => composerClient.methods;
1256
+ $[91] = composerClient.methods;
1257
+ $[92] = t34;
1258
+ } else t34 = $[92];
1259
+ let t35;
1260
+ if ($[93] !== suggestionsClient) {
1261
+ t35 = () => suggestionsClient.methods;
1262
+ $[93] = suggestionsClient;
1263
+ $[94] = t35;
1264
+ } else t35 = $[94];
1265
+ let t36;
1266
+ if ($[95] !== taskClients || $[96] !== tasks) {
1267
+ t36 = (selector) => {
1268
+ if ("id" in selector) {
1269
+ const task_0 = tasks.find((candidate) => candidate.id === selector.id);
1270
+ return taskClients.get({ key: task_0 ? getTaskKey(task_0) : selector.id });
1271
+ }
1272
+ return taskClients.get(selector);
1273
+ };
1274
+ $[95] = taskClients;
1275
+ $[96] = tasks;
1276
+ $[97] = t36;
1277
+ } else t36 = $[97];
1278
+ let t37;
1279
+ if ($[98] !== messages || $[99] !== onNew || $[100] !== queue) {
1280
+ t37 = (message_4) => {
1229
1281
  const appendMessage = typeof message_4 === "string" ? {
1230
1282
  createdAt: /* @__PURE__ */ new Date(),
1231
1283
  parentId: messages.at(-1)?.id ?? null,
@@ -1240,7 +1292,7 @@ const useExternalThread = (t0) => {
1240
1292
  metadata: { custom: {} }
1241
1293
  } : {
1242
1294
  createdAt: message_4.createdAt ?? /* @__PURE__ */ new Date(),
1243
- parentId: message_4.parentId ?? messages.at(-1)?.id ?? null,
1295
+ parentId: message_4.parentId === void 0 ? messages.at(-1)?.id ?? null : message_4.parentId,
1244
1296
  sourceId: message_4.sourceId ?? null,
1245
1297
  role: message_4.role ?? "user",
1246
1298
  content: message_4.content,
@@ -1252,92 +1304,94 @@ const useExternalThread = (t0) => {
1252
1304
  if (queue) queue.enqueue(appendMessage);
1253
1305
  else onNew?.(appendMessage);
1254
1306
  };
1255
- $[89] = messages;
1256
- $[90] = onNew;
1257
- $[91] = queue;
1258
- $[92] = t33;
1259
- } else t33 = $[92];
1260
- let t34;
1261
- if ($[93] !== onStartRun) {
1262
- t34 = () => {
1307
+ $[98] = messages;
1308
+ $[99] = onNew;
1309
+ $[100] = queue;
1310
+ $[101] = t37;
1311
+ } else t37 = $[101];
1312
+ let t38;
1313
+ if ($[102] !== onStartRun) {
1314
+ t38 = () => {
1263
1315
  onStartRun?.();
1264
1316
  };
1265
- $[93] = onStartRun;
1266
- $[94] = t34;
1267
- } else t34 = $[94];
1268
- let t35;
1269
- if ($[95] !== onResume) {
1270
- t35 = () => {
1317
+ $[102] = onStartRun;
1318
+ $[103] = t38;
1319
+ } else t38 = $[103];
1320
+ let t39;
1321
+ if ($[104] !== onResume) {
1322
+ t39 = () => {
1271
1323
  if (!onResume) throw new Error("Runtime does not support resuming runs (onResume is not set).");
1272
1324
  onResume();
1273
1325
  };
1274
- $[95] = onResume;
1275
- $[96] = t35;
1276
- } else t35 = $[96];
1277
- let t36;
1278
- if ($[97] !== onRefetchThread) {
1279
- t36 = onRefetchThread && { unstable_refetchThread: onRefetchThread };
1280
- $[97] = onRefetchThread;
1281
- $[98] = t36;
1282
- } else t36 = $[98];
1283
- let t37;
1284
- if ($[99] !== onLoadExternalState) {
1285
- t37 = (state_0) => {
1326
+ $[104] = onResume;
1327
+ $[105] = t39;
1328
+ } else t39 = $[105];
1329
+ let t40;
1330
+ if ($[106] !== onRefetchThread) {
1331
+ t40 = onRefetchThread && { unstable_refetchThread: onRefetchThread };
1332
+ $[106] = onRefetchThread;
1333
+ $[107] = t40;
1334
+ } else t40 = $[107];
1335
+ let t41;
1336
+ if ($[108] !== onLoadExternalState) {
1337
+ t41 = (state_0) => {
1286
1338
  if (!onLoadExternalState) throw new Error("Runtime does not support importing external states (onLoadExternalState is not set).");
1287
1339
  onLoadExternalState(state_0);
1288
1340
  };
1289
- $[99] = onLoadExternalState;
1290
- $[100] = t37;
1291
- } else t37 = $[100];
1292
- let t38;
1293
- if ($[101] !== messageClients) {
1294
- t38 = (selector) => {
1295
- if ("id" in selector) return messageClients.get({ key: selector.id });
1296
- return messageClients.get(selector);
1341
+ $[108] = onLoadExternalState;
1342
+ $[109] = t41;
1343
+ } else t41 = $[109];
1344
+ let t42;
1345
+ if ($[110] !== messageClients) {
1346
+ t42 = (selector_0) => {
1347
+ if ("id" in selector_0) return messageClients.get({ key: selector_0.id });
1348
+ return messageClients.get(selector_0);
1297
1349
  };
1298
- $[101] = messageClients;
1299
- $[102] = t38;
1300
- } else t38 = $[102];
1301
- let t39;
1302
- if ($[103] !== handleCancelRun || $[104] !== speechController.stop || $[105] !== t30 || $[106] !== t31 || $[107] !== t32 || $[108] !== t33 || $[109] !== t34 || $[110] !== t35 || $[111] !== t36 || $[112] !== t37 || $[113] !== t38) {
1303
- t39 = {
1304
- getState: t30,
1305
- composer: t31,
1306
- suggestions: t32,
1307
- append: t33,
1308
- deleteMessage: _temp1,
1309
- startRun: t34,
1310
- resumeRun: t35,
1350
+ $[110] = messageClients;
1351
+ $[111] = t42;
1352
+ } else t42 = $[111];
1353
+ let t43;
1354
+ if ($[112] !== handleCancelRun || $[113] !== speechController.stop || $[114] !== t33 || $[115] !== t34 || $[116] !== t35 || $[117] !== t36 || $[118] !== t37 || $[119] !== t38 || $[120] !== t39 || $[121] !== t40 || $[122] !== t41 || $[123] !== t42) {
1355
+ t43 = {
1356
+ getState: t33,
1357
+ composer: t34,
1358
+ suggestions: t35,
1359
+ task: t36,
1360
+ append: t37,
1361
+ deleteMessage: _temp10,
1362
+ startRun: t38,
1363
+ resumeRun: t39,
1311
1364
  cancelRun: handleCancelRun,
1312
- ...t36,
1313
- importExternalState: t37,
1314
- getModelContext: _temp10,
1315
- export: _temp11,
1316
- import: _temp12,
1317
- reset: _temp13,
1318
- message: t38,
1365
+ ...t40,
1366
+ importExternalState: t41,
1367
+ getModelContext: _temp11,
1368
+ export: _temp12,
1369
+ import: _temp13,
1370
+ reset: _temp14,
1371
+ message: t42,
1319
1372
  stopSpeaking: speechController.stop,
1320
- connectVoice: _temp14,
1321
- disconnectVoice: _temp15,
1322
- getVoiceVolume: _temp16,
1323
- subscribeVoiceVolume: _temp18,
1324
- muteVoice: _temp19,
1325
- unmuteVoice: _temp20
1373
+ connectVoice: _temp15,
1374
+ disconnectVoice: _temp16,
1375
+ getVoiceVolume: _temp17,
1376
+ subscribeVoiceVolume: _temp19,
1377
+ muteVoice: _temp20,
1378
+ unmuteVoice: _temp21
1326
1379
  };
1327
- $[103] = handleCancelRun;
1328
- $[104] = speechController.stop;
1329
- $[105] = t30;
1330
- $[106] = t31;
1331
- $[107] = t32;
1332
- $[108] = t33;
1333
- $[109] = t34;
1334
- $[110] = t35;
1335
- $[111] = t36;
1336
- $[112] = t37;
1337
- $[113] = t38;
1338
- $[114] = t39;
1339
- } else t39 = $[114];
1340
- return t39;
1380
+ $[112] = handleCancelRun;
1381
+ $[113] = speechController.stop;
1382
+ $[114] = t33;
1383
+ $[115] = t34;
1384
+ $[116] = t35;
1385
+ $[117] = t36;
1386
+ $[118] = t37;
1387
+ $[119] = t38;
1388
+ $[120] = t39;
1389
+ $[121] = t40;
1390
+ $[122] = t41;
1391
+ $[123] = t42;
1392
+ $[124] = t43;
1393
+ } else t43 = $[124];
1394
+ return t43;
1341
1395
  };
1342
1396
  const ExternalThread = resource(useExternalThread);
1343
1397
  attachTransformScopes(useExternalThread, (scopes, parent) => {
@@ -1392,35 +1446,38 @@ function _temp7(error_1) {
1392
1446
  }
1393
1447
  function _temp8() {}
1394
1448
  function _temp9() {}
1395
- function _temp0(s, idx, arr) {
1449
+ function _temp0(task) {
1450
+ return withKey(getTaskKey(task), TaskClient({ task }), [task]);
1451
+ }
1452
+ function _temp1(s, idx, arr) {
1396
1453
  return {
1397
1454
  ...s,
1398
1455
  isLast: idx === arr.length - 1
1399
1456
  };
1400
1457
  }
1401
- function _temp1() {}
1402
- function _temp10() {
1458
+ function _temp10() {}
1459
+ function _temp11() {
1403
1460
  return {
1404
1461
  tools: {},
1405
1462
  config: {}
1406
1463
  };
1407
1464
  }
1408
- function _temp11() {
1465
+ function _temp12() {
1409
1466
  return { messages: [] };
1410
1467
  }
1411
- function _temp12() {}
1412
1468
  function _temp13() {}
1413
1469
  function _temp14() {}
1414
1470
  function _temp15() {}
1415
- function _temp16() {
1471
+ function _temp16() {}
1472
+ function _temp17() {
1416
1473
  return 0;
1417
1474
  }
1418
- function _temp17() {}
1419
- function _temp18() {
1420
- return _temp17;
1475
+ function _temp18() {}
1476
+ function _temp19() {
1477
+ return _temp18;
1421
1478
  }
1422
- function _temp19() {}
1423
1479
  function _temp20() {}
1480
+ function _temp21() {}
1424
1481
  //#endregion
1425
1482
  export { ExternalThread };
1426
1483