@assistant-ui/core 0.3.15 → 0.3.17

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 (455) hide show
  1. package/dist/index.d.ts +2 -2
  2. package/dist/index.js +2 -2
  3. package/dist/index.js.map +1 -1
  4. package/dist/internal.d.ts +8 -2
  5. package/dist/internal.js +9 -3
  6. package/dist/model-context/frame/host.d.ts.map +1 -1
  7. package/dist/model-context/frame/host.js +3 -2
  8. package/dist/model-context/frame/host.js.map +1 -1
  9. package/dist/model-context/frame/provider.d.ts +5 -0
  10. package/dist/model-context/frame/provider.d.ts.map +1 -1
  11. package/dist/model-context/frame/provider.js +141 -28
  12. package/dist/model-context/frame/provider.js.map +1 -1
  13. package/dist/model-context/interactable-composer-metadata.d.ts +1 -1
  14. package/dist/model-context/interactable-composer-metadata.js +1 -1
  15. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  16. package/dist/model-context/registry.d.ts +2 -2
  17. package/dist/model-context/registry.d.ts.map +1 -1
  18. package/dist/model-context/registry.js +9 -28
  19. package/dist/model-context/registry.js.map +1 -1
  20. package/dist/model-context/tool-call-text.d.ts +26 -0
  21. package/dist/model-context/tool-call-text.d.ts.map +1 -0
  22. package/dist/model-context/tool-call-text.js +18 -0
  23. package/dist/model-context/tool-call-text.js.map +1 -0
  24. package/dist/react/RuntimeAdapter.js +1 -1
  25. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  26. package/dist/react/adapters/LocalStorageThreadListAdapter.js +1 -1
  27. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  28. package/dist/react/client/AdaptedRemoteThread.js +1 -1
  29. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  30. package/dist/react/client/InMemoryThreadList.js +25 -21
  31. package/dist/react/client/InMemoryThreadList.js.map +1 -1
  32. package/dist/react/client/Interactables.d.ts.map +1 -1
  33. package/dist/react/client/Interactables.js +60 -178
  34. package/dist/react/client/Interactables.js.map +1 -1
  35. package/dist/react/client/RemoteThreadList.d.ts +15 -0
  36. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  37. package/dist/react/client/RemoteThreadList.js +263 -194
  38. package/dist/react/client/RemoteThreadList.js.map +1 -1
  39. package/dist/react/client/Tools.d.ts.map +1 -1
  40. package/dist/react/client/Tools.js +6 -2
  41. package/dist/react/client/Tools.js.map +1 -1
  42. package/dist/react/index.d.ts +4 -2
  43. package/dist/react/index.js +2 -1
  44. package/dist/react/interactables-legacy/Interactables.d.ts.map +1 -1
  45. package/dist/react/interactables-legacy/Interactables.js +60 -178
  46. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  47. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts +24 -0
  48. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -0
  49. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +138 -0
  50. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -0
  51. package/dist/react/model-context/toolbox.d.ts +2 -14
  52. package/dist/react/model-context/toolbox.d.ts.map +1 -1
  53. package/dist/react/model-context/toolbox.js +1 -13
  54. package/dist/react/model-context/toolbox.js.map +1 -1
  55. package/dist/react/model-context/useAssistantContext.js +37 -7
  56. package/dist/react/model-context/useAssistantContext.js.map +1 -1
  57. package/dist/react/model-context/useAuiToolOverrides.js +31 -5
  58. package/dist/react/model-context/useAuiToolOverrides.js.map +1 -1
  59. package/dist/react/model-context/useInlineRender.d.ts.map +1 -1
  60. package/dist/react/model-context/useInlineRender.js +10 -36
  61. package/dist/react/model-context/useInlineRender.js.map +1 -1
  62. package/dist/react/primitive-hooks/useMessageError.d.ts.map +1 -1
  63. package/dist/react/primitive-hooks/useMessageError.js +2 -8
  64. package/dist/react/primitive-hooks/useMessageError.js.map +1 -1
  65. package/dist/react/primitive-hooks/useThreadListLoadMore.d.ts.map +1 -1
  66. package/dist/react/primitive-hooks/useThreadListLoadMore.js +2 -4
  67. package/dist/react/primitive-hooks/useThreadListLoadMore.js.map +1 -1
  68. package/dist/react/primitives/composer/ComposerAttachments.d.ts.map +1 -1
  69. package/dist/react/primitives/composer/ComposerAttachments.js +4 -3
  70. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  71. package/dist/react/primitives/composer/ComposerIf.js.map +1 -1
  72. package/dist/react/primitives/composer/ComposerQueue.d.ts +2 -1
  73. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  74. package/dist/react/primitives/composer/ComposerQueue.js +4 -3
  75. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
  76. package/dist/react/primitives/message/MessageAttachments.d.ts.map +1 -1
  77. package/dist/react/primitives/message/MessageAttachments.js +7 -6
  78. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  79. package/dist/react/primitives/message/MessageGroupedParts.js +2 -2
  80. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  81. package/dist/react/primitives/message/MessageParts.js +3 -3
  82. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  83. package/dist/react/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  84. package/dist/react/primitives/threadList/ThreadListItems.js +5 -4
  85. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  86. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts +7 -5
  87. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  88. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +44 -22
  89. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  90. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +7 -6
  91. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  92. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +102 -117
  93. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  94. package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -6
  95. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  96. package/dist/react/runtimes/RemoteThreadResource.js +3 -3
  97. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  98. package/dist/react/runtimes/assistant-transport/runManager.d.ts.map +1 -1
  99. package/dist/react/runtimes/assistant-transport/runManager.js +2 -12
  100. package/dist/react/runtimes/assistant-transport/runManager.js.map +1 -1
  101. package/dist/react/runtimes/assistant-transport/useLatestRef.js +2 -2
  102. package/dist/react/runtimes/assistant-transport/useLatestRef.js.map +1 -1
  103. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +3 -10
  104. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  105. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +43 -85
  106. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  107. package/dist/react/runtimes/cloud/auiV0.d.ts +5 -1
  108. package/dist/react/runtimes/cloud/auiV0.d.ts.map +1 -1
  109. package/dist/react/runtimes/cloud/auiV0.js.map +1 -1
  110. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts +29 -0
  111. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -0
  112. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +159 -0
  113. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -0
  114. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts +12 -0
  115. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.d.ts.map +1 -0
  116. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js +10 -0
  117. package/dist/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.js.map +1 -0
  118. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts +1 -9
  119. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.d.ts.map +1 -1
  120. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js +16 -153
  121. package/dist/react/runtimes/cloud/useCloudThreadListAdapter.js.map +1 -1
  122. package/dist/react/runtimes/cloud/useCloudThreadListRuntime.js.map +1 -1
  123. package/dist/react/runtimes/createMessageConverter.d.ts +2 -1
  124. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  125. package/dist/react/runtimes/external-message-converter.d.ts +6 -25
  126. package/dist/react/runtimes/external-message-converter.d.ts.map +1 -1
  127. package/dist/react/runtimes/external-message-converter.js +33 -233
  128. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  129. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  130. package/dist/react/runtimes/useRemoteThreadListRuntime.js +14 -6
  131. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  132. package/dist/react/types/MessagePartComponentTypes.d.ts +7 -3
  133. package/dist/react/types/MessagePartComponentTypes.d.ts.map +1 -1
  134. package/dist/react/types/scopes/tools.d.ts +2 -0
  135. package/dist/react/types/scopes/tools.d.ts.map +1 -1
  136. package/dist/runtime/api/composer-runtime.d.ts +1 -1
  137. package/dist/runtime/api/composer-runtime.js.map +1 -1
  138. package/dist/runtime/api/message-part-runtime.d.ts +2 -2
  139. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  140. package/dist/runtime/api/message-part-runtime.js +1 -1
  141. package/dist/runtime/api/message-part-runtime.js.map +1 -1
  142. package/dist/runtime/api/thread-list-runtime.d.ts +9 -1
  143. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  144. package/dist/runtime/api/thread-list-runtime.js +5 -0
  145. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  146. package/dist/runtime/api/thread-runtime.d.ts +2 -3
  147. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  148. package/dist/runtime/base/base-composer-runtime-core.d.ts +1 -1
  149. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  150. package/dist/runtime/base/base-composer-runtime-core.js +14 -29
  151. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  152. package/dist/runtime/base/base-thread-runtime-core.d.ts +4 -6
  153. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  154. package/dist/runtime/base/base-thread-runtime-core.js +5 -11
  155. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  156. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts +1 -1
  157. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  158. package/dist/runtime/base/default-thread-composer-runtime-core.js +1 -1
  159. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  160. package/dist/runtime/interfaces/composer-runtime-core.d.ts +1 -1
  161. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +14 -2
  162. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  163. package/dist/runtime/interfaces/thread-runtime-core.d.ts +16 -2
  164. package/dist/runtime/interfaces/thread-runtime-core.d.ts.map +1 -1
  165. package/dist/runtime/internal.d.ts +2 -1
  166. package/dist/runtime/internal.js +2 -1
  167. package/dist/runtime/queue/external-thread-queue-adapter.d.ts +1 -1
  168. package/dist/runtime/queue/message-queue.d.ts.map +1 -1
  169. package/dist/runtime/queue/message-queue.js +1 -1
  170. package/dist/runtime/queue/message-queue.js.map +1 -1
  171. package/dist/runtime/queue/queue-item.d.ts +12 -0
  172. package/dist/runtime/queue/queue-item.d.ts.map +1 -0
  173. package/dist/runtime/queue/queue-item.js +6 -0
  174. package/dist/runtime/queue/queue-item.js.map +1 -0
  175. package/dist/runtime/utils/abortable-thread-load.d.ts +15 -0
  176. package/dist/runtime/utils/abortable-thread-load.d.ts.map +1 -0
  177. package/dist/runtime/utils/abortable-thread-load.js +35 -0
  178. package/dist/runtime/utils/abortable-thread-load.js.map +1 -0
  179. package/dist/runtime/utils/attachment-add-operations.d.ts +18 -0
  180. package/dist/runtime/utils/attachment-add-operations.d.ts.map +1 -0
  181. package/dist/runtime/utils/attachment-add-operations.js +43 -0
  182. package/dist/runtime/utils/attachment-add-operations.js.map +1 -0
  183. package/dist/runtime/utils/auto-status.d.ts +7 -2
  184. package/dist/runtime/utils/auto-status.d.ts.map +1 -1
  185. package/dist/runtime/utils/auto-status.js +13 -3
  186. package/dist/runtime/utils/auto-status.js.map +1 -1
  187. package/dist/runtime/utils/external-message-conversion.d.ts +48 -0
  188. package/dist/runtime/utils/external-message-conversion.d.ts.map +1 -0
  189. package/dist/runtime/utils/external-message-conversion.js +222 -0
  190. package/dist/runtime/utils/external-message-conversion.js.map +1 -0
  191. package/dist/runtime/utils/external-store-message.d.ts +2 -1
  192. package/dist/runtime/utils/external-store-message.d.ts.map +1 -1
  193. package/dist/runtime/utils/external-store-message.js +2 -1
  194. package/dist/runtime/utils/external-store-message.js.map +1 -1
  195. package/dist/runtime/utils/message-repository-session.d.ts +30 -0
  196. package/dist/runtime/utils/message-repository-session.d.ts.map +1 -0
  197. package/dist/runtime/utils/message-repository-session.js +130 -0
  198. package/dist/runtime/utils/message-repository-session.js.map +1 -0
  199. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  200. package/dist/runtime/utils/message-repository.js +3 -4
  201. package/dist/runtime/utils/message-repository.js.map +1 -1
  202. package/dist/runtime/utils/pending-tool-calls.d.ts +20 -0
  203. package/dist/runtime/utils/pending-tool-calls.d.ts.map +1 -0
  204. package/dist/runtime/utils/pending-tool-calls.js +22 -0
  205. package/dist/runtime/utils/pending-tool-calls.js.map +1 -0
  206. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts +6 -3
  207. package/dist/runtime/utils/resolveToolApprovalResponse.d.ts.map +1 -1
  208. package/dist/runtime/utils/resolveToolApprovalResponse.js +12 -3
  209. package/dist/runtime/utils/resolveToolApprovalResponse.js.map +1 -1
  210. package/dist/runtime/utils/thread-message-like.d.ts +3 -10
  211. package/dist/runtime/utils/thread-message-like.d.ts.map +1 -1
  212. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  213. package/dist/runtime/utils/tool-call-tree.d.ts +39 -0
  214. package/dist/runtime/utils/tool-call-tree.d.ts.map +1 -0
  215. package/dist/runtime/utils/tool-call-tree.js +85 -0
  216. package/dist/runtime/utils/tool-call-tree.js.map +1 -0
  217. package/dist/runtimes/external-store/external-store-adapter.d.ts +29 -2
  218. package/dist/runtimes/external-store/external-store-adapter.d.ts.map +1 -1
  219. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts +2 -5
  220. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  221. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +3 -10
  222. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  223. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts +21 -2
  224. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  225. package/dist/runtimes/external-store/external-store-thread-runtime-core.js +154 -46
  226. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  227. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts +1 -1
  228. package/dist/runtimes/inert/InertThreadRuntimeCore.d.ts.map +1 -1
  229. package/dist/runtimes/inert/InertThreadRuntimeCore.js.map +1 -1
  230. package/dist/runtimes/local/local-thread-runtime-core.d.ts +4 -2
  231. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  232. package/dist/runtimes/local/local-thread-runtime-core.js +23 -3
  233. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  234. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +12 -1
  235. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  236. package/dist/runtimes/remote-thread-list/remote-thread-state.js +107 -14
  237. package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
  238. package/dist/runtimes/remote-thread-list/title.d.ts +9 -0
  239. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -0
  240. package/dist/runtimes/remote-thread-list/title.js +6 -0
  241. package/dist/runtimes/remote-thread-list/title.js.map +1 -0
  242. package/dist/runtimes/remote-thread-list/types.d.ts +6 -5
  243. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  244. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts +31 -8
  245. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  246. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +98 -59
  247. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  248. package/dist/store/clients/external-thread.d.ts +1 -1
  249. package/dist/store/clients/external-thread.d.ts.map +1 -1
  250. package/dist/store/clients/external-thread.js +85 -103
  251. package/dist/store/clients/external-thread.js.map +1 -1
  252. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  253. package/dist/store/clients/single-thread-list.js +2 -2
  254. package/dist/store/clients/single-thread-list.js.map +1 -1
  255. package/dist/store/clients/suggestions.d.ts.map +1 -1
  256. package/dist/store/clients/suggestions.js +33 -12
  257. package/dist/store/clients/suggestions.js.map +1 -1
  258. package/dist/store/clients/thread-message-client.js +1 -1
  259. package/dist/store/clients/thread-selection-events.js +1 -1
  260. package/dist/store/index.d.ts +6 -3
  261. package/dist/store/index.js +2 -1
  262. package/dist/store/internal.d.ts +2 -2
  263. package/dist/store/internal.js +2 -2
  264. package/dist/store/primitive-predicates.d.ts +4 -1
  265. package/dist/store/primitive-predicates.d.ts.map +1 -1
  266. package/dist/store/primitive-predicates.js +9 -1
  267. package/dist/store/primitive-predicates.js.map +1 -1
  268. package/dist/store/runtime-clients/composer-runtime-client.js +1 -1
  269. package/dist/store/runtime-clients/message-runtime-client.js +1 -1
  270. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
  271. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  272. package/dist/store/runtime-clients/thread-list-runtime-client.js +124 -105
  273. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  274. package/dist/store/runtime-clients/thread-runtime-client.js +1 -1
  275. package/dist/store/runtime-clients/useSubscribable.d.ts +3 -1
  276. package/dist/store/runtime-clients/useSubscribable.d.ts.map +1 -1
  277. package/dist/store/runtime-clients/useSubscribable.js +1 -1
  278. package/dist/store/runtime-clients/useSubscribable.js.map +1 -1
  279. package/dist/store/scope-registration.d.ts +1 -1
  280. package/dist/store/scopes/composer.d.ts +2 -1
  281. package/dist/store/scopes/composer.d.ts.map +1 -1
  282. package/dist/store/scopes/message.d.ts +1 -1
  283. package/dist/store/scopes/part.d.ts +6 -3
  284. package/dist/store/scopes/part.d.ts.map +1 -1
  285. package/dist/store/scopes/queue-item.d.ts +2 -9
  286. package/dist/store/scopes/queue-item.d.ts.map +1 -1
  287. package/dist/store/scopes/queue-item.js +0 -6
  288. package/dist/subscribable/subscribable.d.ts +8 -1
  289. package/dist/subscribable/subscribable.d.ts.map +1 -1
  290. package/dist/subscribable/subscribable.js +24 -16
  291. package/dist/subscribable/subscribable.js.map +1 -1
  292. package/dist/types/message.d.ts +47 -4
  293. package/dist/types/message.d.ts.map +1 -1
  294. package/dist/types/message.js +7 -1
  295. package/dist/types/message.js.map +1 -1
  296. package/dist/utils/data-url.d.ts +14 -1
  297. package/dist/utils/data-url.d.ts.map +1 -1
  298. package/dist/utils/data-url.js +13 -1
  299. package/dist/utils/data-url.js.map +1 -1
  300. package/dist/utils/invoke-user-callback.d.ts +5 -0
  301. package/dist/utils/invoke-user-callback.d.ts.map +1 -0
  302. package/dist/utils/invoke-user-callback.js +19 -0
  303. package/dist/utils/invoke-user-callback.js.map +1 -0
  304. package/dist/utils/normalizePartStatus.js.map +1 -1
  305. package/package.json +12 -17
  306. package/src/index.ts +6 -1
  307. package/src/internal.ts +20 -0
  308. package/src/model-context/frame/host.test.ts +91 -7
  309. package/src/model-context/frame/host.ts +7 -2
  310. package/src/model-context/frame/provider.test.ts +484 -13
  311. package/src/model-context/frame/provider.ts +205 -35
  312. package/src/model-context/interactable-composer-metadata.ts +1 -1
  313. package/src/model-context/registry.test.ts +44 -0
  314. package/src/model-context/registry.ts +13 -35
  315. package/src/model-context/tool-call-text.test.ts +67 -0
  316. package/src/model-context/tool-call-text.ts +67 -0
  317. package/src/react/AssistantRuntimeProvider.test.tsx +66 -2
  318. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +1 -3
  319. package/src/react/client/InMemoryThreadList.test.tsx +49 -0
  320. package/src/react/client/InMemoryThreadList.ts +7 -1
  321. package/src/react/client/Interactables.ts +19 -178
  322. package/src/react/client/RemoteThreadList.background.test.ts +384 -0
  323. package/src/react/client/RemoteThreadList.concurrent.test.tsx +274 -0
  324. package/src/react/client/RemoteThreadList.test.ts +369 -1
  325. package/src/react/client/RemoteThreadList.ts +320 -142
  326. package/src/react/client/Tools.ts +7 -1
  327. package/src/react/index.ts +4 -0
  328. package/src/react/interactables-legacy/Interactables.ts +20 -177
  329. package/src/react/interactables-shared/useInteractablePersistenceQueue.test.tsx +161 -0
  330. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +206 -0
  331. package/src/react/model-context/modelContextHooks.test.tsx +131 -0
  332. package/src/react/model-context/toolbox.test.ts +9 -9
  333. package/src/react/model-context/toolbox.ts +9 -36
  334. package/src/react/model-context/useAssistantContext.ts +4 -2
  335. package/src/react/model-context/useAuiToolOverrides.ts +4 -2
  336. package/src/react/model-context/useInlineRender.test.tsx +48 -0
  337. package/src/react/model-context/useInlineRender.ts +14 -10
  338. package/src/react/primitive-hooks/useMessageError.ts +2 -19
  339. package/src/react/primitive-hooks/useThreadListLoadMore.ts +2 -3
  340. package/src/react/primitives/composer/ComposerAttachments.test.tsx +76 -0
  341. package/src/react/primitives/composer/ComposerAttachments.tsx +9 -4
  342. package/src/react/primitives/composer/ComposerQueue.test.tsx +72 -0
  343. package/src/react/primitives/composer/ComposerQueue.tsx +7 -4
  344. package/src/react/primitives/message/MessageAttachments.test.tsx +107 -37
  345. package/src/react/primitives/message/MessageAttachments.tsx +10 -7
  346. package/src/react/primitives/message/MessageGroupedParts.tsx +2 -2
  347. package/src/react/primitives/message/MessageParts.tsx +3 -3
  348. package/src/react/primitives/threadList/ThreadListItems.test.tsx +99 -0
  349. package/src/react/primitives/threadList/ThreadListItems.tsx +8 -5
  350. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +94 -1
  351. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +72 -31
  352. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +169 -0
  353. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +140 -124
  354. package/src/react/runtimes/RemoteThreadResource.ts +1 -4
  355. package/src/react/runtimes/assistant-transport/runManager.ts +4 -17
  356. package/src/react/runtimes/assistant-transport/transport-scheduling.test.ts +51 -2
  357. package/src/react/runtimes/assistant-transport/useLatestRef.ts +2 -2
  358. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.ts +45 -0
  359. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +157 -1
  360. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +82 -176
  361. package/src/react/runtimes/cloud/auiV0.ts +5 -0
  362. package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +88 -0
  363. package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +236 -0
  364. package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.test.ts +37 -0
  365. package/src/react/runtimes/cloud/createCloudThreadListAdapterCreateFallback.ts +18 -0
  366. package/src/react/runtimes/cloud/useCloudThreadListAdapter.test.tsx +90 -1
  367. package/src/react/runtimes/cloud/useCloudThreadListAdapter.tsx +33 -238
  368. package/src/react/runtimes/external-message-converter.test.ts +0 -14
  369. package/src/react/runtimes/external-message-converter.test.tsx +77 -0
  370. package/src/react/runtimes/external-message-converter.ts +59 -481
  371. package/src/react/runtimes/useRemoteThreadListRuntime.concurrent.test.tsx +216 -0
  372. package/src/react/runtimes/useRemoteThreadListRuntime.ts +24 -6
  373. package/src/react/types/MessagePartComponentTypes.ts +7 -3
  374. package/src/react/types/scopes/tools.ts +2 -0
  375. package/src/runtime/api/composer-runtime.ts +1 -1
  376. package/src/runtime/api/message-part-runtime.ts +3 -3
  377. package/src/runtime/api/message-runtime.test.ts +28 -1
  378. package/src/runtime/api/thread-list-runtime.ts +25 -1
  379. package/src/runtime/base/base-composer-runtime-core.ts +20 -40
  380. package/src/runtime/base/base-thread-runtime-core.test.ts +110 -3
  381. package/src/runtime/base/base-thread-runtime-core.ts +16 -15
  382. package/src/runtime/base/default-thread-composer-runtime-core.ts +1 -4
  383. package/src/runtime/interfaces/composer-runtime-core.ts +1 -1
  384. package/src/runtime/interfaces/thread-list-runtime-core.ts +20 -1
  385. package/src/runtime/interfaces/thread-runtime-core.ts +18 -2
  386. package/src/runtime/internal.ts +5 -0
  387. package/src/runtime/queue/external-thread-queue-adapter.ts +1 -1
  388. package/src/runtime/queue/message-queue.ts +1 -4
  389. package/src/runtime/queue/queue-item.ts +10 -0
  390. package/src/runtime/utils/abortable-thread-load.test.ts +87 -0
  391. package/src/runtime/utils/abortable-thread-load.ts +53 -0
  392. package/src/runtime/utils/attachment-add-operations.ts +59 -0
  393. package/src/runtime/utils/auto-status.test.ts +57 -0
  394. package/src/runtime/utils/auto-status.ts +46 -1
  395. package/src/runtime/utils/external-message-conversion.test.ts +210 -0
  396. package/src/runtime/utils/external-message-conversion.ts +510 -0
  397. package/src/runtime/utils/external-store-message.ts +2 -0
  398. package/src/runtime/utils/message-repository-session.test.ts +195 -0
  399. package/src/runtime/utils/message-repository-session.ts +176 -0
  400. package/src/runtime/utils/message-repository.ts +7 -4
  401. package/src/runtime/utils/pending-tool-calls.test.ts +57 -0
  402. package/src/runtime/utils/pending-tool-calls.ts +35 -0
  403. package/src/runtime/utils/resolveToolApprovalResponse.test.ts +73 -0
  404. package/src/runtime/utils/resolveToolApprovalResponse.ts +27 -6
  405. package/src/runtime/utils/thread-message-like.ts +4 -10
  406. package/src/runtime/utils/tool-call-tree.test.ts +191 -0
  407. package/src/runtime/utils/tool-call-tree.ts +97 -0
  408. package/src/runtimes/external-store/external-store-adapter.ts +38 -2
  409. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +6 -14
  410. package/src/runtimes/external-store/external-store-thread-runtime-core.ts +231 -61
  411. package/src/runtimes/inert/InertThreadRuntimeCore.ts +1 -1
  412. package/src/runtimes/local/local-thread-runtime-core.test.ts +201 -4
  413. package/src/runtimes/local/local-thread-runtime-core.ts +53 -4
  414. package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +149 -0
  415. package/src/runtimes/remote-thread-list/remote-thread-state.ts +178 -16
  416. package/src/runtimes/remote-thread-list/title.ts +3 -0
  417. package/src/runtimes/remote-thread-list/types.ts +6 -5
  418. package/src/runtimes/tool-invocations/EDGE_CASES.md +125 -3
  419. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +856 -102
  420. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +145 -89
  421. package/src/store/clients/external-thread.ts +30 -69
  422. package/src/store/clients/single-thread-list.ts +4 -1
  423. package/src/store/clients/suggestions.test.ts +185 -0
  424. package/src/store/clients/suggestions.ts +42 -35
  425. package/src/store/index.ts +4 -0
  426. package/src/store/internal.ts +2 -0
  427. package/src/store/primitive-predicates.ts +35 -0
  428. package/src/store/runtime-clients/thread-list-runtime-client.ts +16 -2
  429. package/src/store/runtime-clients/useSubscribable.ts +8 -2
  430. package/src/store/scopes/message.ts +1 -1
  431. package/src/store/scopes/part.ts +6 -3
  432. package/src/store/scopes/queue-item.ts +2 -9
  433. package/src/subscribable/subscribable.test.ts +50 -0
  434. package/src/subscribable/subscribable.ts +33 -21
  435. package/src/tests/MessageRepository.test.ts +77 -0
  436. package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +305 -0
  437. package/src/tests/RemoteThreadListThreadListRuntimeCore-loadMore.test.ts +78 -0
  438. package/src/tests/RemoteThreadListThreadListRuntimeCore-reload.test.ts +52 -0
  439. package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +158 -0
  440. package/src/tests/external-store-optimistic-id.test.ts +79 -0
  441. package/src/tests/external-store-repository-instance.test.ts +166 -0
  442. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +186 -16
  443. package/src/tests/external-store-thread-runtime-core.test.ts +642 -0
  444. package/src/tests/external-thread-attachments.test.tsx +258 -1
  445. package/src/tests/remote-thread-list-adapter-switch.test.ts +66 -1
  446. package/src/tests/single-thread-list-item.test.tsx +47 -0
  447. package/src/tests/thread-message-like.test.ts +39 -1
  448. package/src/tests/thread-switch-events.test.tsx +397 -2
  449. package/src/types/message.ts +58 -5
  450. package/src/utils/data-url.test.ts +52 -1
  451. package/src/utils/data-url.ts +21 -0
  452. package/src/utils/invoke-user-callback.test.ts +82 -0
  453. package/src/utils/invoke-user-callback.ts +31 -0
  454. package/src/utils/normalizePartStatus.ts +1 -1
  455. package/dist/store/scopes/queue-item.js.map +0 -1
@@ -3,10 +3,10 @@ import { useThreadSelectionEvents } from "../../store/clients/thread-selection-e
3
3
  import { ModelContext } from "../../store/clients/model-context-client.js";
4
4
  import { DataRenderers } from "./DataRenderers.js";
5
5
  import { Tools } from "./Tools.js";
6
+ import { Derived, attachTransformScopes, useClientLookup, useClientResource } from "@assistant-ui/store/client";
6
7
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
7
8
  import { useState } from "@assistant-ui/tap/react-shim";
8
9
  import { resource, withKey } from "@assistant-ui/tap";
9
- import { Derived, attachTransformScopes, useClientLookup, useClientResource } from "@assistant-ui/store/client";
10
10
  //#region src/react/client/InMemoryThreadList.ts
11
11
  const RESOLVED_PROMISE = Promise.resolve();
12
12
  const useThreadListItemClient = (props) => {
@@ -74,7 +74,7 @@ const useThreadListItemClient = (props) => {
74
74
  };
75
75
  const ThreadListItemClient = resource(useThreadListItemClient);
76
76
  const useInMemoryThreadList = (props) => {
77
- const $ = c(61);
77
+ const $ = c(62);
78
78
  const { thread: threadFactory, onSwitchToThread, onSwitchToNewThread, onDelete } = props;
79
79
  const [t0, setListState] = useState(_temp3);
80
80
  const { threads, mainThreadId } = t0;
@@ -298,7 +298,7 @@ const useInMemoryThreadList = (props) => {
298
298
  $[47] = t20;
299
299
  } else t20 = $[47];
300
300
  let t21;
301
- if ($[48] !== mainThreadId || $[49] !== threadListItems || $[50] !== threads) {
301
+ if ($[48] !== mainThreadId || $[49] !== state || $[50] !== threadListItems || $[51] !== threads) {
302
302
  t21 = (selector) => {
303
303
  if (selector === "main") {
304
304
  const index = threads.findIndex((t_10) => t_10.id === mainThreadId);
@@ -308,21 +308,25 @@ const useInMemoryThreadList = (props) => {
308
308
  const index_0 = threads.findIndex((t_11) => t_11.id === selector.id);
309
309
  return threadListItems.get({ index: index_0 });
310
310
  }
311
- return threadListItems.get(selector);
311
+ const id = (selector.archived ? state.archivedThreadIds : state.threadIds)[selector.index];
312
+ if (id === void 0) return threadListItems.get({ index: -1 });
313
+ const index_1 = threads.findIndex((t_12) => t_12.id === id);
314
+ return threadListItems.get({ index: index_1 });
312
315
  };
313
316
  $[48] = mainThreadId;
314
- $[49] = threadListItems;
315
- $[50] = threads;
316
- $[51] = t21;
317
- } else t21 = $[51];
317
+ $[49] = state;
318
+ $[50] = threadListItems;
319
+ $[51] = threads;
320
+ $[52] = t21;
321
+ } else t21 = $[52];
318
322
  let t22;
319
- if ($[52] !== mainThreadClient.methods) {
323
+ if ($[53] !== mainThreadClient.methods) {
320
324
  t22 = () => mainThreadClient.methods;
321
- $[52] = mainThreadClient.methods;
322
- $[53] = t22;
323
- } else t22 = $[53];
325
+ $[53] = mainThreadClient.methods;
326
+ $[54] = t22;
327
+ } else t22 = $[54];
324
328
  let t23;
325
- if ($[54] !== handleSwitchToNewThread || $[55] !== handleSwitchToThread || $[56] !== t19 || $[57] !== t20 || $[58] !== t21 || $[59] !== t22) {
329
+ if ($[55] !== handleSwitchToNewThread || $[56] !== handleSwitchToThread || $[57] !== t19 || $[58] !== t20 || $[59] !== t21 || $[60] !== t22) {
326
330
  t23 = {
327
331
  getState: t19,
328
332
  switchToThread: handleSwitchToThread,
@@ -334,14 +338,14 @@ const useInMemoryThreadList = (props) => {
334
338
  item: t21,
335
339
  thread: t22
336
340
  };
337
- $[54] = handleSwitchToNewThread;
338
- $[55] = handleSwitchToThread;
339
- $[56] = t19;
340
- $[57] = t20;
341
- $[58] = t21;
342
- $[59] = t22;
343
- $[60] = t23;
344
- } else t23 = $[60];
341
+ $[55] = handleSwitchToNewThread;
342
+ $[56] = handleSwitchToThread;
343
+ $[57] = t19;
344
+ $[58] = t20;
345
+ $[59] = t21;
346
+ $[60] = t22;
347
+ $[61] = t23;
348
+ } else t23 = $[61];
345
349
  return t23;
346
350
  };
347
351
  const InMemoryThreadList = resource(useInMemoryThreadList);
@@ -1 +1 @@
1
- {"version":3,"file":"InMemoryThreadList.js","names":["useState","useMemo","resource","withKey","ResourceElement","AssistantClient","ClientOutput","ScopesConfig","useClientLookup","Derived","attachTransformScopes","useClientResource","useThreadSelectionEvents","generateId","ModelContext","Tools","DataRenderers","RESOLVED_PROMISE","Promise","resolve","InMemoryThreadListProps","thread","threadId","onSwitchToThread","onSwitchToNewThread","onDelete","ThreadData","id","title","status","custom","Record","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","t0","remoteId","undefined","externalId","state","t1","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","_temp","initialize","detach","_temp2","ThreadListItemClient","useInMemoryThreadList","threadFactory","setListState","_temp3","threads","mainThreadId","Symbol","for","update","prev","setThreads","prev_0","handleSwitchToThread","threadId_0","prev_1","map","t","handleRename","t4","threadId_1","prev_2","t_0","const","handleArchive","t5","threadId_2","prev_3","t_1","handleUnarchive","t6","threadId_3","prev_4","t_2","handleUpdateCustom","t7","threadId_4","fallbackId","prev_5","remaining","filter","t_3","length","find","_temp4","handleDelete","t8","newId","prev_6","handleSwitchToNewThread","t9","mainThreadClient","t10","t11","t_5","title_0","custom_0","threadListItems","t12","t13","t14","t15","t16","t17","regularThreads","_temp5","archivedThreads","_temp6","_temp7","_temp8","t18","newThreadId","isLoading","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t19","t20","methods","unstable_refetchThread","t21","selector","index","findIndex","t_10","get","index_0","t_11","t22","t23","switchToThread","switchToNewThread","getLoadThreadsPromise","_temp9","reload","_temp0","reloadMainThread","loadMore","_temp1","item","InMemoryThreadList","inMemoryThreadListTransformScopes","scopes","parent","source","query","type","aui","threadListItem","composer","modelContext","tools","dataRenderers","suggestions","t_4","t_6","t_7","t_8","t_9"],"sources":["../../../src/react/client/InMemoryThreadList.ts"],"sourcesContent":["import { useState, useMemo } from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type {\n AssistantClient,\n ClientOutput,\n ScopesConfig,\n} from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n Derived,\n attachTransformScopes,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { useThreadSelectionEvents } from \"../../store/internal\";\nimport { generateId } from \"../../utils/id\";\nimport { ModelContext } from \"../../store/clients/model-context-client\";\nimport { Tools } from \"./Tools\";\nimport { DataRenderers } from \"./DataRenderers\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nexport type InMemoryThreadListProps = {\n thread: (threadId: string) => ResourceElement<ClientOutput<\"thread\">>;\n onSwitchToThread?: (threadId: string) => void;\n onSwitchToNewThread?: () => void;\n onDelete?: (threadId: string) => void;\n};\n\ntype ThreadData = {\n id: string;\n title?: string;\n status: \"regular\" | \"archived\";\n custom?: Record<string, unknown> | undefined;\n};\n\n// ThreadListItem Client\nconst useThreadListItemClient = (props: {\n data: ThreadData;\n isRunning: boolean;\n onSwitchTo: () => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: undefined,\n externalId: undefined,\n title: data.title,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data.id, data.title, data.status, data.custom, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: () => {},\n initialize: async () => ({ remoteId: data.id, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\n// InMemoryThreadList Client\nconst useInMemoryThreadList = (\n props: InMemoryThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n thread: threadFactory,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ threads, mainThreadId }, setListState] = useState<{\n threads: readonly ThreadData[];\n mainThreadId: string;\n }>(() => ({\n threads: [{ id: \"main\", title: \"Main Thread\", status: \"regular\" }],\n mainThreadId: \"main\",\n }));\n const setThreads = (\n update: (prev: readonly ThreadData[]) => readonly ThreadData[],\n ) => setListState((prev) => ({ ...prev, threads: update(prev.threads) }));\n\n useThreadSelectionEvents(mainThreadId);\n\n const handleSwitchToThread = (threadId: string) => {\n setListState((prev) => ({ ...prev, mainThreadId: threadId }));\n onSwitchToThread?.(threadId);\n };\n\n const handleRename = (threadId: string, title: string) => {\n setThreads((prev) =>\n prev.map((t) => (t.id === threadId ? { ...t, title } : t)),\n );\n };\n\n const handleArchive = (threadId: string) => {\n setThreads((prev) =>\n prev.map((t) =>\n t.id === threadId ? { ...t, status: \"archived\" as const } : t,\n ),\n );\n };\n\n const handleUnarchive = (threadId: string) => {\n setThreads((prev) =>\n prev.map((t) =>\n t.id === threadId ? { ...t, status: \"regular\" as const } : t,\n ),\n );\n };\n\n const handleUpdateCustom = (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n setThreads((prev) =>\n prev.map((t) => (t.id === threadId ? { ...t, custom } : t)),\n );\n };\n\n const handleDelete = (threadId: string) => {\n // Deleting the last thread starts a fresh one; the removed id must not\n // stay selected. The fallback id is minted eagerly so the updater stays\n // pure under batched deletes.\n const fallbackId = `thread-${generateId()}`;\n setListState((prev) => {\n const remaining = prev.threads.filter((t) => t.id !== threadId);\n if (remaining.length === 0) {\n return {\n threads: [{ id: fallbackId, title: \"New Thread\", status: \"regular\" }],\n mainThreadId: fallbackId,\n };\n }\n return {\n threads: remaining,\n mainThreadId:\n prev.mainThreadId === threadId\n ? (remaining.find((t) => t.status === \"regular\") ?? remaining[0]!)\n .id\n : prev.mainThreadId,\n };\n });\n onDelete?.(threadId);\n };\n\n const handleSwitchToNewThread = () => {\n const newId = `thread-${generateId()}`;\n setListState((prev) => ({\n threads: [\n ...prev.threads,\n { id: newId, title: \"New Thread\", status: \"regular\" },\n ],\n mainThreadId: newId,\n }));\n onSwitchToNewThread?.();\n };\n\n // Only the main thread is mounted, so it is the only thread that can run.\n const mainThreadClient = useClientResource(threadFactory(mainThreadId));\n\n const threadListItems = useClientLookup(\n threads.map((t) =>\n withKey(\n t.id,\n ThreadListItemClient({\n data: t,\n isRunning: t.id === mainThreadId && mainThreadClient.state.isRunning,\n onSwitchTo: () => handleSwitchToThread(t.id),\n onRename: (title) => handleRename(t.id, title),\n onUpdateCustom: (custom) => handleUpdateCustom(t.id, custom),\n onArchive: () => handleArchive(t.id),\n onUnarchive: () => handleUnarchive(t.id),\n onDelete: () => handleDelete(t.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const regularThreads = threads.filter((t) => t.status === \"regular\");\n const archivedThreads = threads.filter((t) => t.status === \"archived\");\n\n return {\n mainThreadId,\n newThreadId: null,\n isLoading: false,\n isLoadingMore: false,\n hasMore: false,\n threadIds: regularThreads.map((t) => t.id),\n archivedThreadIds: archivedThreads.map((t) => t.id),\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n };\n }, [mainThreadId, threads, threadListItems.state, mainThreadClient.state]);\n\n return {\n getState: () => state,\n switchToThread: handleSwitchToThread,\n switchToNewThread: handleSwitchToNewThread,\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (selector === \"main\") {\n const index = threads.findIndex((t) => t.id === mainThreadId);\n return threadListItems.get({ index: index === -1 ? 0 : index });\n }\n if (\"id\" in selector) {\n const index = threads.findIndex((t) => t.id === selector.id);\n return threadListItems.get({ index });\n }\n return threadListItems.get(selector);\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\nexport const InMemoryThreadList = resource(useInMemoryThreadList);\n\n/**\n * The scope defaults `InMemoryThreadList` installs when it is used as the\n * `threads` config entry. Adapter packages that wrap it in their own config\n * entry attach this to the wrapping resource for scope parity.\n */\nexport const inMemoryThreadListTransformScopes = (\n scopes: ScopesConfig,\n parent: AssistantClient,\n): void => {\n scopes.thread ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n scopes.threadListItem ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.threads.thread(\"main\").composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n};\n\nattachTransformScopes(useInMemoryThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":"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"}
1
+ {"version":3,"file":"InMemoryThreadList.js","names":["useState","useMemo","resource","withKey","ResourceElement","AssistantClient","ClientOutput","ScopesConfig","useClientLookup","Derived","attachTransformScopes","useClientResource","useThreadSelectionEvents","generateId","ModelContext","Tools","DataRenderers","RESOLVED_PROMISE","Promise","resolve","InMemoryThreadListProps","thread","threadId","onSwitchToThread","onSwitchToNewThread","onDelete","ThreadData","id","title","status","custom","Record","useThreadListItemClient","props","$","_c","data","isRunning","onSwitchTo","onRename","onUpdateCustom","onArchive","onUnarchive","t0","remoteId","undefined","externalId","state","t1","t2","t3","getState","switchTo","rename","updateCustom","archive","unarchive","delete","generateTitle","_temp","initialize","detach","_temp2","ThreadListItemClient","useInMemoryThreadList","threadFactory","setListState","_temp3","threads","mainThreadId","Symbol","for","update","prev","setThreads","prev_0","handleSwitchToThread","threadId_0","prev_1","map","t","handleRename","t4","threadId_1","prev_2","t_0","const","handleArchive","t5","threadId_2","prev_3","t_1","handleUnarchive","t6","threadId_3","prev_4","t_2","handleUpdateCustom","t7","threadId_4","fallbackId","prev_5","remaining","filter","t_3","length","find","_temp4","handleDelete","t8","newId","prev_6","handleSwitchToNewThread","t9","mainThreadClient","t10","t11","t_5","title_0","custom_0","threadListItems","t12","t13","t14","t15","t16","t17","regularThreads","_temp5","archivedThreads","_temp6","_temp7","_temp8","t18","newThreadId","isLoading","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t19","t20","methods","unstable_refetchThread","t21","selector","index","findIndex","t_10","get","index_0","t_11","ids","archived","index_1","t_12","t22","t23","switchToThread","switchToNewThread","getLoadThreadsPromise","_temp9","reload","_temp0","reloadMainThread","loadMore","_temp1","item","InMemoryThreadList","inMemoryThreadListTransformScopes","scopes","parent","source","query","type","aui","threadListItem","composer","modelContext","tools","dataRenderers","suggestions","t_4","t_6","t_7","t_8","t_9"],"sources":["../../../src/react/client/InMemoryThreadList.ts"],"sourcesContent":["import { useState, useMemo } from \"react\";\nimport { resource, withKey, type ResourceElement } from \"@assistant-ui/tap\";\nimport type {\n AssistantClient,\n ClientOutput,\n ScopesConfig,\n} from \"@assistant-ui/store\";\nimport {\n useClientLookup,\n Derived,\n attachTransformScopes,\n useClientResource,\n} from \"@assistant-ui/store/client\";\nimport { useThreadSelectionEvents } from \"../../store/internal\";\nimport { generateId } from \"../../utils/id\";\nimport { ModelContext } from \"../../store/clients/model-context-client\";\nimport { Tools } from \"./Tools\";\nimport { DataRenderers } from \"./DataRenderers\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\n\nexport type InMemoryThreadListProps = {\n thread: (threadId: string) => ResourceElement<ClientOutput<\"thread\">>;\n onSwitchToThread?: (threadId: string) => void;\n onSwitchToNewThread?: () => void;\n onDelete?: (threadId: string) => void;\n};\n\ntype ThreadData = {\n id: string;\n title?: string;\n status: \"regular\" | \"archived\";\n custom?: Record<string, unknown> | undefined;\n};\n\n// ThreadListItem Client\nconst useThreadListItemClient = (props: {\n data: ThreadData;\n isRunning: boolean;\n onSwitchTo: () => void;\n onRename: (title: string) => void;\n onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;\n onArchive: () => void;\n onUnarchive: () => void;\n onDelete: () => void;\n}): ClientOutput<\"threadListItem\"> => {\n const {\n data,\n isRunning,\n onSwitchTo,\n onRename,\n onUpdateCustom,\n onArchive,\n onUnarchive,\n onDelete,\n } = props;\n const state = useMemo(\n () => ({\n id: data.id,\n remoteId: undefined,\n externalId: undefined,\n title: data.title,\n status: data.status,\n custom: data.custom,\n isRunning,\n }),\n [data.id, data.title, data.status, data.custom, isRunning],\n );\n\n return {\n getState: () => state,\n switchTo: onSwitchTo,\n rename: onRename,\n updateCustom: onUpdateCustom,\n archive: onArchive,\n unarchive: onUnarchive,\n delete: onDelete,\n generateTitle: () => {},\n initialize: async () => ({ remoteId: data.id, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst ThreadListItemClient = resource(useThreadListItemClient);\n\n// InMemoryThreadList Client\nconst useInMemoryThreadList = (\n props: InMemoryThreadListProps,\n): ClientOutput<\"threads\"> => {\n const {\n thread: threadFactory,\n onSwitchToThread,\n onSwitchToNewThread,\n onDelete,\n } = props;\n\n const [{ threads, mainThreadId }, setListState] = useState<{\n threads: readonly ThreadData[];\n mainThreadId: string;\n }>(() => ({\n threads: [{ id: \"main\", title: \"Main Thread\", status: \"regular\" }],\n mainThreadId: \"main\",\n }));\n const setThreads = (\n update: (prev: readonly ThreadData[]) => readonly ThreadData[],\n ) => setListState((prev) => ({ ...prev, threads: update(prev.threads) }));\n\n useThreadSelectionEvents(mainThreadId);\n\n const handleSwitchToThread = (threadId: string) => {\n setListState((prev) => ({ ...prev, mainThreadId: threadId }));\n onSwitchToThread?.(threadId);\n };\n\n const handleRename = (threadId: string, title: string) => {\n setThreads((prev) =>\n prev.map((t) => (t.id === threadId ? { ...t, title } : t)),\n );\n };\n\n const handleArchive = (threadId: string) => {\n setThreads((prev) =>\n prev.map((t) =>\n t.id === threadId ? { ...t, status: \"archived\" as const } : t,\n ),\n );\n };\n\n const handleUnarchive = (threadId: string) => {\n setThreads((prev) =>\n prev.map((t) =>\n t.id === threadId ? { ...t, status: \"regular\" as const } : t,\n ),\n );\n };\n\n const handleUpdateCustom = (\n threadId: string,\n custom: Record<string, unknown> | undefined,\n ) => {\n setThreads((prev) =>\n prev.map((t) => (t.id === threadId ? { ...t, custom } : t)),\n );\n };\n\n const handleDelete = (threadId: string) => {\n // Deleting the last thread starts a fresh one; the removed id must not\n // stay selected. The fallback id is minted eagerly so the updater stays\n // pure under batched deletes.\n const fallbackId = `thread-${generateId()}`;\n setListState((prev) => {\n const remaining = prev.threads.filter((t) => t.id !== threadId);\n if (remaining.length === 0) {\n return {\n threads: [{ id: fallbackId, title: \"New Thread\", status: \"regular\" }],\n mainThreadId: fallbackId,\n };\n }\n return {\n threads: remaining,\n mainThreadId:\n prev.mainThreadId === threadId\n ? (remaining.find((t) => t.status === \"regular\") ?? remaining[0]!)\n .id\n : prev.mainThreadId,\n };\n });\n onDelete?.(threadId);\n };\n\n const handleSwitchToNewThread = () => {\n const newId = `thread-${generateId()}`;\n setListState((prev) => ({\n threads: [\n ...prev.threads,\n { id: newId, title: \"New Thread\", status: \"regular\" },\n ],\n mainThreadId: newId,\n }));\n onSwitchToNewThread?.();\n };\n\n // Only the main thread is mounted, so it is the only thread that can run.\n const mainThreadClient = useClientResource(threadFactory(mainThreadId));\n\n const threadListItems = useClientLookup(\n threads.map((t) =>\n withKey(\n t.id,\n ThreadListItemClient({\n data: t,\n isRunning: t.id === mainThreadId && mainThreadClient.state.isRunning,\n onSwitchTo: () => handleSwitchToThread(t.id),\n onRename: (title) => handleRename(t.id, title),\n onUpdateCustom: (custom) => handleUpdateCustom(t.id, custom),\n onArchive: () => handleArchive(t.id),\n onUnarchive: () => handleUnarchive(t.id),\n onDelete: () => handleDelete(t.id),\n }),\n ),\n ),\n );\n\n const state = useMemo(() => {\n const regularThreads = threads.filter((t) => t.status === \"regular\");\n const archivedThreads = threads.filter((t) => t.status === \"archived\");\n\n return {\n mainThreadId,\n newThreadId: null,\n isLoading: false,\n isLoadingMore: false,\n hasMore: false,\n threadIds: regularThreads.map((t) => t.id),\n archivedThreadIds: archivedThreads.map((t) => t.id),\n threadItems: threadListItems.state,\n main: mainThreadClient.state,\n };\n }, [mainThreadId, threads, threadListItems.state, mainThreadClient.state]);\n\n return {\n getState: () => state,\n switchToThread: handleSwitchToThread,\n switchToNewThread: handleSwitchToNewThread,\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (selector === \"main\") {\n const index = threads.findIndex((t) => t.id === mainThreadId);\n return threadListItems.get({ index: index === -1 ? 0 : index });\n }\n if (\"id\" in selector) {\n const index = threads.findIndex((t) => t.id === selector.id);\n return threadListItems.get({ index });\n }\n // The lookup is keyed over the combined thread array, while index\n // selectors address the regular/archived subset the primitives render.\n const ids = selector.archived ? state.archivedThreadIds : state.threadIds;\n const id = ids[selector.index];\n if (id === undefined) return threadListItems.get({ index: -1 });\n const index = threads.findIndex((t) => t.id === id);\n return threadListItems.get({ index });\n },\n thread: () => mainThreadClient.methods,\n };\n};\n\nexport const InMemoryThreadList = resource(useInMemoryThreadList);\n\n/**\n * The scope defaults `InMemoryThreadList` installs when it is used as the\n * `threads` config entry. Adapter packages that wrap it in their own config\n * entry attach this to the wrapping resource for scope parity.\n */\nexport const inMemoryThreadListTransformScopes = (\n scopes: ScopesConfig,\n parent: AssistantClient,\n): void => {\n scopes.thread ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.thread(\"main\"),\n });\n scopes.threadListItem ??= Derived({\n source: \"threads\",\n query: { type: \"main\" },\n get: (aui) => aui.threads.item(\"main\"),\n });\n scopes.composer ??= Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.threads.thread(\"main\").composer(),\n });\n\n if (!scopes.modelContext && parent.modelContext.source === null) {\n scopes.modelContext = ModelContext();\n }\n if (!scopes.tools && parent.tools.source === null) {\n scopes.tools = Tools({});\n }\n if (!scopes.dataRenderers && parent.dataRenderers.source === null) {\n scopes.dataRenderers = DataRenderers();\n }\n if (!scopes.suggestions && parent.suggestions.source === null) {\n scopes.suggestions = Derived({\n source: \"thread\",\n query: {},\n get: (aui) => aui.thread.suggestions(),\n });\n }\n};\n\nattachTransformScopes(useInMemoryThreadList, inMemoryThreadListTransformScopes);\n"],"mappings":";;;;;;;;;;AAmBA,MAAMiB,mBAAmBC,QAAQC,QAAQ;AAiBzC,MAAMa,2BAA0BC,UAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAU9B,MAAA,EAAAC,MAAAC,WAAAC,YAAAC,UAAAC,gBAAAC,WAAAC,aAAAjB,aASIQ;CAAM,IAAAU;CAAA,IAAAT,EAAA,OAAAE,KAAAN,UAAAI,EAAA,OAAAE,KAAAT,MAAAO,EAAA,OAAAE,KAAAP,UAAAK,EAAA,OAAAE,KAAAR,SAAAM,EAAA,OAAAG,WAAA;EAEDM,KAAA;GAAAhB,IACDS,KAAIT;GAAGiB,UACDC,KAAAA;GAASC,YACPD,KAAAA;GAASjB,OACdQ,KAAIR;GAAMC,QACTO,KAAIP;GAAOC,QACXM,KAAIN;GAAOO;EAErB;EAACH,EAAA,KAAAE,KAAAN;EAAAI,EAAA,KAAAE,KAAAT;EAAAO,EAAA,KAAAE,KAAAP;EAAAK,EAAA,KAAAE,KAAAR;EAAAM,EAAA,KAAAG;EAAAH,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CATH,MAAAa,QACSJ;CAUP,IAAAK;CAAA,IAAAd,EAAA,OAAAa,OAAA;EAGUC,WAAMD;EAAKb,EAAA,KAAAa;EAAAb,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAAA,IAAAe;CAAA,IAAAf,EAAA,OAAAE,KAAAT,IAAA;EAQTsB,KAAA,aAAa;GAAAL,UAAYR,KAAIT;GAAGmB,YAAcD,KAAAA;EAAU;EAAEX,EAAA,KAAAE,KAAAT;EAAAO,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAAA,IAAAgB;CAAA,IAAAhB,EAAA,QAAAO,aAAAP,EAAA,QAAAT,YAAAS,EAAA,QAAAK,YAAAL,EAAA,QAAAI,cAAAJ,EAAA,QAAAQ,eAAAR,EAAA,QAAAM,kBAAAN,EAAA,QAAAc,MAAAd,EAAA,QAAAe,IAAA;EATjEC,KAAA;GAAAC,UACKH;GAAWI,UACXd;GAAUe,QACZd;GAAQe,cACFd;GAAce,SACnBd;GAASe,WACPd;GAAWe,QACdhC;GAAQiC,eACDC;GAAQC,YACXX;GAA0DY,QAC9DC;EACV;EAAC5B,EAAA,MAAAO;EAAAP,EAAA,MAAAT;EAAAS,EAAA,MAAAK;EAAAL,EAAA,MAAAI;EAAAJ,EAAA,MAAAQ;EAAAR,EAAA,MAAAM;EAAAN,EAAA,MAAAc;EAAAd,EAAA,MAAAe;EAAAf,EAAA,MAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAAA,OAXMgB;AAWN;AAGH,MAAMa,uBAAuB7D,SAAS8B,uBAAuB;AAG7D,MAAMgC,yBAAwB/B,UAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAG5B,MAAA,EAAAd,QAAA4C,eAAA1C,kBAAAC,qBAAAC,aAKIQ;CAEJ,MAAA,CAAAU,IAAAuB,gBAAkDlE,SAG/CmE,MAGD;CANK,MAAA,EAAAC,SAAAC,iBAAA1B;CAAyB,IAAAK;CAAA,IAAAd,EAAA,OAAAoC,OAAAC,IAAA,2BAAA,GAAA;EAObvB,MAAAwB,WAEdN,cAAaO,UAAW;GAAA,GAAKA;GAAIL,SAAWI,OAAOC,KAAIL,OAAQ;EAAE,EAAE;EAAClC,EAAA,KAAAc;CAAA,OAAAA,KAAAd,EAAA;CAFzE,MAAAwC,aAAmB1B;CAInBpC,yBAAyByD,YAAY;CAAC,IAAApB;CAAA,IAAAf,EAAA,OAAAX,kBAAA;EAET0B,MAAA3B,aAAA;GAC3B4C,cAAaS,YAAW;IAAA,GAAKF;IAAIJ,cAAgB/C;GAAS,EAAE;GAC5DC,mBAAmBD,QAAQ;EAAC;EAC7BY,EAAA,KAAAX;EAAAW,EAAA,KAAAe;CAAA,OAAAA,KAAAf,EAAA;CAHD,MAAA0C,uBAA6B3B;CAG3B,IAAAC;CAAA,IAAAhB,EAAA,OAAAoC,OAAAC,IAAA,2BAAA,GAAA;EAEmBrB,MAAA2B,YAAAjD,UAAA;GACnB8C,YAAWI,WACTL,OAAIM,KAAKC,MAAQA,EAACrD,OAAQL,aAAT;IAAA,GAAyB0D;IAACpD;GAAY,IAAtCoD,CAAwC,CAC3D;EAAC;EACF9C,EAAA,KAAAgB;CAAA,OAAAA,KAAAhB,EAAA;CAJD,MAAA+C,eAAqB/B;CAInB,IAAAgC;CAAA,IAAAhD,EAAA,OAAAoC,OAAAC,IAAA,2BAAA,GAAA;EAEoBW,MAAAC,eAAA;GACpBT,YAAWU,WACTX,OAAIM,KAAKM,QACPL,IAACrD,OAAQL,aAAT;IAAA,GAAyB0D;IAACnD,QAAU;GAAwB,IAA5DwD,GACF,CACF;EAAC;EACFnD,EAAA,KAAAgD;CAAA,OAAAA,KAAAhD,EAAA;CAND,MAAAqD,gBAAsBL;CAMpB,IAAAM;CAAA,IAAAtD,EAAA,OAAAoC,OAAAC,IAAA,2BAAA,GAAA;EAEsBiB,MAAAC,eAAA;GACtBf,YAAWgB,WACTjB,OAAIM,KAAKY,QACPX,IAACrD,OAAQL,aAAT;IAAA,GAAyB0D;IAACnD,QAAU;GAAuB,IAA3D8D,GACF,CACF;EAAC;EACFzD,EAAA,KAAAsD;CAAA,OAAAA,KAAAtD,EAAA;CAND,MAAA0D,kBAAwBJ;CAMtB,IAAAK;CAAA,IAAA3D,EAAA,OAAAoC,OAAAC,IAAA,2BAAA,GAAA;EAEyBsB,MAAAC,YAAAhE,WAAA;GAIzB4C,YAAWqB,WACTtB,OAAIM,KAAKiB,QAAQhB,IAACrD,OAAQL,aAAT;IAAA,GAAyB0D;IAAClD;GAAa,IAAvCkE,GAAyC,CAC5D;EAAC;EACF9D,EAAA,KAAA2D;CAAA,OAAAA,KAAA3D,EAAA;CAPD,MAAA+D,qBAA2BJ;CAOzB,IAAAK;CAAA,IAAAhE,EAAA,OAAAT,UAAA;EAEmByE,MAAAC,eAAA;GAInB,MAAAC,aAAmB,UAAUvF,WAAW;GACxCqD,cAAamC,WAAA;IACX,MAAAC,YAAkB7B,OAAIL,QAAQmC,QAAQC,QAAOxB,IAACrD,OAAQL,UAAQ;IAC9D,IAAIgF,UAASG,WAAY,GAAC,OACjB;KAAArC,SACI,CAAC;MAAAzC,IAAMyE;MAAUxE,OAAS;MAAYC,QAAU;KAAU,CAAC;KAACwC,cACvD+B;IAChB;IACD,OACM;KAAAhC,SACIkC;KAASjC,cAEhBI,OAAIJ,iBAAkB/C,cACjBgF,UAASI,KAAMC,MAA8C,KAAZL,UAAS,GAAA,CAAI3E,KAE/D8C,OAAIJ;IACZ;GAAC,CACF;GACD5C,WAAWH,UAAQ;EAAC;EACrBY,EAAA,KAAAT;EAAAS,EAAA,KAAAgE;CAAA,OAAAA,KAAAhE,EAAA;CAvBD,MAAA0E,eAAqBV;CAuBnB,IAAAW;CAAA,IAAA3E,EAAA,OAAAV,qBAAA;EAE8BqF,WAAA;GAC9B,MAAAC,QAAc,UAAUjG,WAAW;GACnCqD,cAAa6C,YAAW;IAAA3C,SACb,CAAA,GACJK,OAAIL,SACP;KAAAzC,IAAMmF;KAAKlF,OAAS;KAAYC,QAAU;IAAU,CAAC;IACtDwC,cACayC;GAChB,EAAE;GACFtF,sBAAsB;EAAC;EACxBU,EAAA,KAAAV;EAAAU,EAAA,MAAA2E;CAAA,OAAAA,KAAA3E,EAAA;CAVD,MAAA8E,0BAAgCH;CAU9B,IAAAI;CAAA,IAAA/E,EAAA,QAAAmC,gBAAAnC,EAAA,QAAA+B,eAAA;EAGyCgD,KAAAhD,cAAcI,YAAY;EAACnC,EAAA,MAAAmC;EAAAnC,EAAA,MAAA+B;EAAA/B,EAAA,MAAA+E;CAAA,OAAAA,KAAA/E,EAAA;CAAtE,MAAAgF,mBAAyBvG,kBAAkBsG,EAA2B;CAAE,IAAAE;CAAA,IAAAjF,EAAA,QAAA0E,gBAAA1E,EAAA,QAAA0C,wBAAA1C,EAAA,QAAAgF,iBAAAnE,SAAAb,EAAA,QAAAmC,gBAAAnC,EAAA,QAAAkC,SAAA;EAAA,IAAAgD;EAAA,IAAAlF,EAAA,QAAA0E,gBAAA1E,EAAA,QAAA0C,wBAAA1C,EAAA,QAAAgF,iBAAAnE,SAAAb,EAAA,QAAAmC,cAAA;GAG1D+C,OAAAC,QACVlH,QACE6E,IAACrD,IACDoC,qBAAqB;IAAA3B,MACb4C;IAAC3C,WACI2C,IAACrD,OAAQ0C,gBAAgB6C,iBAAgBnE,MAAMV;IAAUC,kBAClDsC,qBAAqBI,IAACrD,EAAG;IAACY,WAClC+E,YAAWrC,aAAaD,IAACrD,IAAKC,OAAK;IAACY,iBAC9B+E,aAAYtB,mBAAmBjB,IAACrD,IAAKG,QAAM;IAACW,iBAC3C8C,cAAcP,IAACrD,EAAG;IAACe,mBACjBkD,gBAAgBZ,IAACrD,EAAG;IAACF,gBACxBmF,aAAa5B,IAACrD,EAAG;GACnC,CAAC,CACH;GAACO,EAAA,MAAA0E;GAAA1E,EAAA,MAAA0C;GAAA1C,EAAA,MAAAgF,iBAAAnE;GAAAb,EAAA,MAAAmC;GAAAnC,EAAA,MAAAkF;EAAA,OAAAA,MAAAlF,EAAA;EAbHiF,MAAA/C,QAAOW,IAAKqC,GAcZ;EAAClF,EAAA,MAAA0E;EAAA1E,EAAA,MAAA0C;EAAA1C,EAAA,MAAAgF,iBAAAnE;EAAAb,EAAA,MAAAmC;EAAAnC,EAAA,MAAAkC;EAAAlC,EAAA,MAAAiF;CAAA,OAAAA,MAAAjF,EAAA;CAfH,MAAAsF,kBAAwBhH,gBACtB2G,GAeF;CAAE,IAAAC;CAAA,IAAAK;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAA5F,EAAA,QAAAmC,gBAAAnC,EAAA,QAAAkC,SAAA;EAGA,MAAA2D,iBAAuB3D,QAAOmC,OAAQyB,MAA6B;EACnE,MAAAC,kBAAwB7D,QAAOmC,OAAQ2B,MAA8B;EAGnE7D,MAAAA;EACaoD,MAAA;EACFC,MAAA;EACIC,MAAA;EACNC,MAAA;EACEC,MAAAE,eAAchD,IAAKoD,MAAW;EACtBL,MAAAG,gBAAelD,IAAKqD,MAAW;EAAClG,EAAA,MAAAmC;EAAAnC,EAAA,MAAAkC;EAAAlC,EAAA,MAAAkF;EAAAlF,EAAA,MAAAuF;EAAAvF,EAAA,MAAAwF;EAAAxF,EAAA,MAAAyF;EAAAzF,EAAA,MAAA0F;EAAA1F,EAAA,MAAA2F;EAAA3F,EAAA,MAAA4F;CAAA,OAAA;EAAAV,MAAAlF,EAAA;EAAAuF,MAAAvF,EAAA;EAAAwF,MAAAxF,EAAA;EAAAyF,MAAAzF,EAAA;EAAA0F,MAAA1F,EAAA;EAAA2F,MAAA3F,EAAA;EAAA4F,MAAA5F,EAAA;CAAA;CAAA,IAAAmG;CAAA,IAAAnG,EAAA,QAAAgF,iBAAAnE,SAAAb,EAAA,QAAAkF,OAAAlF,EAAA,QAAAuF,OAAAvF,EAAA,QAAAwF,OAAAxF,EAAA,QAAAyF,OAAAzF,EAAA,QAAA0F,OAAA1F,EAAA,QAAA2F,OAAA3F,EAAA,QAAA4F,OAAA5F,EAAA,QAAAsF,gBAAAzE,OAAA;EAP9CsF,MAAA;GAAAhE,cACLA;GAAYiE,aACCb;GAAIc,WACNb;GAAKc,eACDb;GAAKc,SACXb;GAAKc,WACHb;GAA+Bc,mBACvBb;GAAgCc,aACtCpB,gBAAezE;GAAM8F,MAC5B3B,iBAAgBnE;EACxB;EAACb,EAAA,MAAAgF,iBAAAnE;EAAAb,EAAA,MAAAkF;EAAAlF,EAAA,MAAAuF;EAAAvF,EAAA,MAAAwF;EAAAxF,EAAA,MAAAyF;EAAAzF,EAAA,MAAA0F;EAAA1F,EAAA,MAAA2F;EAAA3F,EAAA,MAAA4F;EAAA5F,EAAA,MAAAsF,gBAAAzE;EAAAb,EAAA,MAAAmG;CAAA,OAAAA,MAAAnG,EAAA;CAdH,MAAAa,QAIEsF;CAWyE,IAAAS;CAAA,IAAA5G,EAAA,QAAAa,OAAA;EAG/D+F,YAAM/F;EAAKb,EAAA,MAAAa;EAAAb,EAAA,MAAA4G;CAAA,OAAAA,MAAA5G,EAAA;CAAA,IAAA6G;CAAA,IAAA7G,EAAA,QAAAgF,iBAAA8B,SAAA;EAKHD,YAChB7B,iBAAgB8B,QAAQC,yBAA8C,KAAtEhI;EAAuEiB,EAAA,MAAAgF,iBAAA8B;EAAA9G,EAAA,MAAA6G;CAAA,OAAAA,MAAA7G,EAAA;CAAA,IAAAgH;CAAA,IAAAhH,EAAA,QAAAmC,gBAAAnC,EAAA,QAAAa,SAAAb,EAAA,QAAAsF,mBAAAtF,EAAA,QAAAkC,SAAA;EAEnE8E,OAAAC,aAAA;GACJ,IAAIA,aAAa,QAAM;IACrB,MAAAC,QAAchF,QAAOiF,WAAWC,SAAOtE,KAACrD,OAAQ0C,YAAY;IAAE,OACvDmD,gBAAe+B,IAAK,EAAAH,OAASA,UAAU,KAAV,IAAAA,MAAyB,CAAC;GAAC;GAEjE,IAAI,QAAQD,UAAQ;IAClB,MAAAK,UAAcpF,QAAOiF,WAAWI,SAAOzE,KAACrD,OAAQwH,SAAQxH,EAAG;IAAE,OACtD6F,gBAAe+B,IAAK,EAAAH,OAAEA,QAAM,CAAC;GAAC;GAKvC,MAAAzH,MADYwH,SAAQQ,WAAY5G,MAAK4F,oBAAqB5F,MAAK2F,UAAAA,CAChDS,SAAQC;GACvB,IAAIzH,OAAOkB,KAAAA,GAAS,OAAS2E,gBAAe+B,IAAK,EAAAH,OAAS,GAAG,CAAC;GAC9D,MAAAQ,UAAcxF,QAAOiF,WAAWQ,SAAO7E,KAACrD,OAAQA,EAAE;GAAE,OAC7C6F,gBAAe+B,IAAK,EAAAH,OAAEA,QAAM,CAAC;EAAC;EACtClH,EAAA,MAAAmC;EAAAnC,EAAA,MAAAa;EAAAb,EAAA,MAAAsF;EAAAtF,EAAA,MAAAkC;EAAAlC,EAAA,MAAAgH;CAAA,OAAAA,MAAAhH,EAAA;CAAA,IAAA4H;CAAA,IAAA5H,EAAA,QAAAgF,iBAAA8B,SAAA;EACOc,YAAM5C,iBAAgB8B;EAAQ9G,EAAA,MAAAgF,iBAAA8B;EAAA9G,EAAA,MAAA4H;CAAA,OAAAA,MAAA5H,EAAA;CAAA,IAAA6H;CAAA,IAAA7H,EAAA,QAAA8E,2BAAA9E,EAAA,QAAA0C,wBAAA1C,EAAA,QAAA4G,OAAA5G,EAAA,QAAA6G,OAAA7G,EAAA,QAAAgH,OAAAhH,EAAA,QAAA4H,KAAA;EA1BjCC,MAAA;GAAA5G,UACK2F;GAAWkB,gBACLpF;GAAoBqF,mBACjBjD;GAAuBkD,uBACnBC;GAAsBC,QACrCC;GAAsBC,kBACZvB;GACuDwB,UAC/DC;GAAsBC,MAC1BvB;GAgBL7H,QACOyI;EACV;EAAC5H,EAAA,MAAA8E;EAAA9E,EAAA,MAAA0C;EAAA1C,EAAA,MAAA4G;EAAA5G,EAAA,MAAA6G;EAAA7G,EAAA,MAAAgH;EAAAhH,EAAA,MAAA4H;EAAA5H,EAAA,MAAA6H;CAAA,OAAAA,MAAA7H,EAAA;CAAA,OA3BM6H;AA2BN;AAGH,MAAaW,qBAAqBxK,SAAS8D,qBAAqB;;;;;;AAOhE,MAAa2G,qCACXC,QACAC,WACS;CACTD,OAAOvJ,WAAWZ,QAAQ;EACxBqK,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBzB,MAAM0B,QAAQA,IAAI7G,QAAQ/C,OAAO,MAAM;CACzC,CAAC;CACDuJ,OAAOM,mBAAmBzK,QAAQ;EAChCqK,QAAQ;EACRC,OAAO,EAAEC,MAAM,OAAO;EACtBzB,MAAM0B,QAAQA,IAAI7G,QAAQqG,KAAK,MAAM;CACvC,CAAC;CACDG,OAAOO,aAAa1K,QAAQ;EAC1BqK,QAAQ;EACRC,OAAO,CAAC;EACRxB,MAAM0B,QAAQA,IAAI7G,QAAQ/C,OAAO,MAAM,CAAC,CAAC8J,SAAS;CACpD,CAAC;CAED,IAAI,CAACP,OAAOQ,gBAAgBP,OAAOO,aAAaN,WAAW,MACzDF,OAAOQ,eAAetK,aAAa;CAErC,IAAI,CAAC8J,OAAOS,SAASR,OAAOQ,MAAMP,WAAW,MAC3CF,OAAOS,QAAQtK,MAAM,CAAC,CAAC;CAEzB,IAAI,CAAC6J,OAAOU,iBAAiBT,OAAOS,cAAcR,WAAW,MAC3DF,OAAOU,gBAAgBtK,cAAc;CAEvC,IAAI,CAAC4J,OAAOW,eAAeV,OAAOU,YAAYT,WAAW,MACvDF,OAAOW,cAAc9K,QAAQ;EAC3BqK,QAAQ;EACRC,OAAO,CAAC;EACRxB,MAAM0B,QAAQA,IAAI5J,OAAOkK,YAAY;CACvC,CAAC;AAEL;AAEA7K,sBAAsBsD,uBAAuB2G,iCAAiC;AAnQ9C,SAAAhH,QAAA,CAAA;AAAA,SAAAG,SAAA,CAAA;AAkDF,SAAAK,SAAA;CAAA,OAalB;EAAAC,SACC,CAAC;GAAAzC,IAAM;GAAMC,OAAS;GAAaC,QAAU;EAAU,CAAC;EAACwC,cACpD;CAChB;AAAC;AAhB2B,SAAAsC,OAAA6E,KAAA;CAAA,OA4EOxG,IAACnD,WAAY;AAAS;AA5E7B,SAAAmG,OAAAyD,KAAA;CAAA,OAsHmBzG,IAACnD,WAAY;AAAS;AAtHzC,SAAAqG,OAAAwD,KAAA;CAAA,OAuHoB1G,IAACnD,WAAY;AAAU;AAvH3C,SAAAsG,OAAAwD,KAAA;CAAA,OA+Ha3G,IAACrD;AAAG;AA/HjB,SAAAyG,OAAAwD,KAAA;CAAA,OAgIsB5G,IAACrD;AAAG;AAhI1B,SAAAwI,SAAA;CAAA,OA0IGlJ;AAAgB;AA1InB,SAAAoJ,SAAA;CAAA,OA2IZpJ;AAAgB;AA3IJ,SAAAuJ,SAAA;CAAA,OA8IVvJ;AAAgB"}
@@ -1 +1 @@
1
- {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;;;cAkrBa,oDAAsB,SAAA,0CAAA"}
1
+ {"version":3,"file":"Interactables.d.ts","names":[],"sources":["../../../src/react/client/Interactables.ts"],"mappings":";;;;;;;;cAmhBa,oDAAsB,SAAA,0CAAA"}
@@ -1,13 +1,13 @@
1
1
  import { findModelKnownState, interactableToolName } from "../../model-context/interactable-composer-metadata.js";
2
2
  import { notifySubscribers } from "../../subscribable/subscribable.js";
3
3
  import { ModelContext } from "../../store/clients/model-context-client.js";
4
+ import { useInteractablePersistenceQueue } from "../interactables-shared/useInteractablePersistenceQueue.js";
4
5
  import { buildInteractableModelContext } from "./interactable-model-context.js";
6
+ import { attachTransformScopes, useAssistantClientRef, useAssistantScopeEffect } from "@assistant-ui/store/client";
5
7
  import { toJSONSchema, toPartialJSONSchema } from "assistant-stream";
6
8
  import { useCallback, useEffect, useMemo, useRef, useState } from "@assistant-ui/tap/react-shim";
7
9
  import { resource } from "@assistant-ui/tap";
8
- import { attachTransformScopes, useAssistantClientRef, useAssistantScopeEffect } from "@assistant-ui/store/client";
9
10
  //#region src/react/client/Interactables.ts
10
- const PERSISTENCE_DEBOUNCE_MS = 500;
11
11
  const hasInteractableCreateCall = (messages, id, name) => messages.some((message) => message.role === "assistant" && message.content?.some((part) => {
12
12
  if (!part || typeof part !== "object") return false;
13
13
  const p = part;
@@ -30,14 +30,6 @@ const useInteractablesResource = ({ persistence } = {}) => {
30
30
  const loadedStateRef = useRef(/* @__PURE__ */ new Map());
31
31
  const touchedIdsRef = useRef(/* @__PURE__ */ new Set());
32
32
  const adapterRef = useRef(void 0);
33
- const debounceTimerRef = useRef(void 0);
34
- const syncSeqRef = useRef(0);
35
- const latestSyncSeqByIdRef = useRef(/* @__PURE__ */ new Map());
36
- const inFlightPersistenceRef = useRef(0);
37
- const flushResolversRef = useRef([]);
38
- const dirtyIdsRef = useRef(/* @__PURE__ */ new Set());
39
- const outgoingQueueRef = useRef([]);
40
- const runPersistenceRef = useRef(() => {});
41
33
  const setStateAndRef = useCallback((updater) => {
42
34
  const next = updater(stateRef.current);
43
35
  stateRef.current = next;
@@ -54,137 +46,39 @@ const useInteractablesResource = ({ persistence } = {}) => {
54
46
  }
55
47
  return result;
56
48
  }, []);
57
- const takeDirtyBatch = useCallback((adapter) => {
58
- if (dirtyIdsRef.current.size === 0) return;
59
- const dirtyIds = new Set(dirtyIdsRef.current);
60
- dirtyIdsRef.current.clear();
61
- const seq = ++syncSeqRef.current;
62
- for (const id_0 of dirtyIds) latestSyncSeqByIdRef.current.set(id_0, seq);
63
- return {
64
- adapter,
65
- payload: exportState(),
66
- dirtyIds,
67
- seq
68
- };
69
- }, [exportState]);
70
- const enqueuePersistence = useCallback((adapter_0) => {
71
- const batch = takeDirtyBatch(adapter_0);
72
- if (!batch) return;
73
- if (inFlightPersistenceRef.current === 0) runPersistenceRef.current(batch);
74
- else outgoingQueueRef.current.push(batch);
75
- }, [takeDirtyBatch]);
76
- const runPersistence = useCallback(async (batch_0) => {
77
- const resolved = batch_0 ?? (adapterRef.current ? takeDirtyBatch(adapterRef.current) : void 0);
78
- if (!resolved) {
79
- if (inFlightPersistenceRef.current === 0) {
80
- for (const resolve of flushResolversRef.current) resolve();
81
- flushResolversRef.current = [];
82
- }
83
- return;
84
- }
85
- const { adapter: adapter_1, payload, dirtyIds: dirtyIds_0, seq: seq_0 } = resolved;
86
- inFlightPersistenceRef.current += 1;
87
- setStateAndRef((prev) => ({
88
- ...prev,
89
- persistence: {
90
- ...prev.persistence,
91
- ...Object.fromEntries([...dirtyIds_0].map((id_1) => [id_1, {
92
- isPending: true,
93
- error: void 0
94
- }]))
95
- }
96
- }));
97
- try {
98
- await adapter_1.save(payload);
99
- setStateAndRef((prev_1) => {
100
- let changed_0 = false;
101
- const persistence_1 = { ...prev_1.persistence };
102
- for (const id_3 of dirtyIds_0) {
103
- if (latestSyncSeqByIdRef.current.get(id_3) !== seq_0 || dirtyIdsRef.current.has(id_3)) continue;
104
- latestSyncSeqByIdRef.current.delete(id_3);
105
- delete persistence_1[id_3];
106
- changed_0 = true;
107
- }
108
- return changed_0 ? {
109
- ...prev_1,
110
- persistence: persistence_1
111
- } : prev_1;
112
- });
113
- } catch (e) {
114
- setStateAndRef((prev_0) => {
115
- let changed = false;
116
- const persistence_0 = { ...prev_0.persistence };
117
- for (const id_2 of dirtyIds_0) {
118
- if (latestSyncSeqByIdRef.current.get(id_2) !== seq_0 || dirtyIdsRef.current.has(id_2)) continue;
119
- latestSyncSeqByIdRef.current.delete(id_2);
120
- persistence_0[id_2] = {
121
- isPending: false,
122
- error: e
123
- };
124
- changed = true;
125
- }
126
- return changed ? {
127
- ...prev_0,
128
- persistence: persistence_0
129
- } : prev_0;
130
- });
131
- } finally {
132
- inFlightPersistenceRef.current -= 1;
133
- const next = outgoingQueueRef.current.shift() ?? (adapterRef.current && dirtyIdsRef.current.size > 0 ? takeDirtyBatch(adapterRef.current) : void 0);
134
- if (next) {
135
- if (debounceTimerRef.current !== void 0) {
136
- clearTimeout(debounceTimerRef.current);
137
- debounceTimerRef.current = void 0;
138
- }
139
- runPersistenceRef.current(next);
140
- } else if (inFlightPersistenceRef.current === 0) {
141
- for (const resolve of flushResolversRef.current) resolve();
142
- flushResolversRef.current = [];
143
- }
144
- }
145
- }, [setStateAndRef, takeDirtyBatch]);
146
- runPersistenceRef.current = (nextBatch) => {
147
- runPersistence(nextBatch);
148
- };
149
- const flushIfPending = useCallback(() => {
150
- if (debounceTimerRef.current !== void 0) {
151
- clearTimeout(debounceTimerRef.current);
152
- debounceTimerRef.current = void 0;
153
- }
154
- if (adapterRef.current) enqueuePersistence(adapterRef.current);
155
- }, [enqueuePersistence]);
156
- const schedulePersistence = useCallback((id_4) => {
157
- if (!adapterRef.current) return;
158
- dirtyIdsRef.current.add(id_4);
159
- if (debounceTimerRef.current !== void 0) clearTimeout(debounceTimerRef.current);
160
- debounceTimerRef.current = setTimeout(() => {
161
- debounceTimerRef.current = void 0;
162
- if (inFlightPersistenceRef.current === 0 && adapterRef.current) enqueuePersistence(adapterRef.current);
163
- else debounceTimerRef.current = setTimeout(() => {
164
- debounceTimerRef.current = void 0;
165
- if (adapterRef.current) enqueuePersistence(adapterRef.current);
166
- }, PERSISTENCE_DEBOUNCE_MS);
167
- }, PERSISTENCE_DEBOUNCE_MS);
168
- }, [enqueuePersistence]);
49
+ const updatePersistenceStatus = useCallback((updater_0) => {
50
+ setStateAndRef((prev) => {
51
+ const persistence_0 = updater_0(prev.persistence);
52
+ return persistence_0 === prev.persistence ? prev : {
53
+ ...prev,
54
+ persistence: persistence_0
55
+ };
56
+ });
57
+ }, [setStateAndRef]);
58
+ const { flushIfPending, schedulePersistence, flush } = useInteractablePersistenceQueue({
59
+ adapterRef,
60
+ snapshot: exportState,
61
+ updatePersistenceStatus
62
+ });
169
63
  const restorePersistedState = useCallback((saved, options) => {
170
64
  const shouldStash = options.shouldStash ?? (() => true);
171
65
  const shouldApply = options.shouldApply ?? (() => true);
172
- for (const [id_5, entry] of Object.entries(saved)) if (shouldStash(id_5)) options.stash.set(id_5, entry.state);
173
- setStateAndRef((prev_2) => {
174
- let changed_1 = false;
175
- const definitions = { ...prev_2.definitions };
176
- for (const [id_6, entry_0] of Object.entries(saved)) {
177
- const def_0 = definitions[id_6];
178
- if (!def_0 || !shouldApply(id_6, def_0)) continue;
179
- definitions[id_6] = {
66
+ for (const [id_0, entry] of Object.entries(saved)) if (shouldStash(id_0)) options.stash.set(id_0, entry.state);
67
+ setStateAndRef((prev_0) => {
68
+ let changed = false;
69
+ const definitions = { ...prev_0.definitions };
70
+ for (const [id_1, entry_0] of Object.entries(saved)) {
71
+ const def_0 = definitions[id_1];
72
+ if (!def_0 || !shouldApply(id_1, def_0)) continue;
73
+ definitions[id_1] = {
180
74
  ...def_0,
181
75
  state: entry_0.state
182
76
  };
183
- changed_1 = true;
77
+ changed = true;
184
78
  }
185
- if (!changed_1) return prev_2;
79
+ if (!changed) return prev_0;
186
80
  return {
187
- ...prev_2,
81
+ ...prev_0,
188
82
  definitions
189
83
  };
190
84
  });
@@ -195,24 +89,24 @@ const useInteractablesResource = ({ persistence } = {}) => {
195
89
  const applyLoadedState = useCallback((saved_1) => {
196
90
  restorePersistedState(saved_1, {
197
91
  stash: loadedStateRef.current,
198
- shouldStash: (id_7) => !touchedIdsRef.current.has(id_7),
199
- shouldApply: (id_8, def_1) => !touchedIdsRef.current.has(id_8) && def_1.scope !== "thread"
92
+ shouldStash: (id_2) => !touchedIdsRef.current.has(id_2),
93
+ shouldApply: (id_3, def_1) => !touchedIdsRef.current.has(id_3) && def_1.scope !== "thread"
200
94
  });
201
95
  }, [restorePersistedState]);
202
- const loadFromAdapter = useCallback(async (adapter_2) => {
203
- if (!adapter_2.load) return;
96
+ const loadFromAdapter = useCallback(async (adapter) => {
97
+ if (!adapter.load) return;
204
98
  try {
205
- const saved_2 = await adapter_2.load();
206
- if (!saved_2 || adapterRef.current !== adapter_2) return;
99
+ const saved_2 = await adapter.load();
100
+ if (!saved_2 || adapterRef.current !== adapter) return;
207
101
  applyLoadedState(saved_2);
208
- } catch (e_0) {
209
- console.warn("[Interactables] Persistence load failed.", e_0);
102
+ } catch (e) {
103
+ console.warn("[Interactables] Persistence load failed.", e);
210
104
  }
211
105
  }, [applyLoadedState]);
212
- const setPersistenceAdapter = useCallback((adapter_3) => {
213
- if (adapterRef.current !== adapter_3) flushIfPending();
214
- adapterRef.current = adapter_3;
215
- if (adapter_3) loadFromAdapter(adapter_3);
106
+ const setPersistenceAdapter = useCallback((adapter_0) => {
107
+ if (adapterRef.current !== adapter_0) flushIfPending();
108
+ adapterRef.current = adapter_0;
109
+ if (adapter_0) loadFromAdapter(adapter_0);
216
110
  }, [flushIfPending, loadFromAdapter]);
217
111
  const getCurrentThreadId = useCallback(() => {
218
112
  const client = clientRef.current;
@@ -229,35 +123,23 @@ const useInteractablesResource = ({ persistence } = {}) => {
229
123
  if (adapterRef.current === persistence) setPersistenceAdapter(void 0);
230
124
  };
231
125
  }, [persistence, setPersistenceAdapter]);
232
- const flush = useCallback(async () => {
233
- if (debounceTimerRef.current !== void 0) {
234
- clearTimeout(debounceTimerRef.current);
235
- debounceTimerRef.current = void 0;
236
- }
237
- if (!(inFlightPersistenceRef.current > 0 || dirtyIdsRef.current.size > 0 || outgoingQueueRef.current.length > 0)) return;
238
- const p = new Promise((resolve_0) => {
239
- flushResolversRef.current.push(resolve_0);
240
- });
241
- if (adapterRef.current) enqueuePersistence(adapterRef.current);
242
- return p;
243
- }, [enqueuePersistence]);
244
- const setDefState = useCallback((id_9, updater_0) => {
245
- touchedIdsRef.current.add(id_9);
246
- setStateAndRef((prev_3) => {
247
- const existing = prev_3.definitions[id_9];
248
- if (!existing) return prev_3;
126
+ const setDefState = useCallback((id_4, updater_1) => {
127
+ touchedIdsRef.current.add(id_4);
128
+ setStateAndRef((prev_1) => {
129
+ const existing = prev_1.definitions[id_4];
130
+ if (!existing) return prev_1;
249
131
  return {
250
- ...prev_3,
132
+ ...prev_1,
251
133
  definitions: {
252
- ...prev_3.definitions,
253
- [id_9]: {
134
+ ...prev_1.definitions,
135
+ [id_4]: {
254
136
  ...existing,
255
- state: updater_0(existing.state)
137
+ state: updater_1(existing.state)
256
138
  }
257
139
  }
258
140
  };
259
141
  });
260
- if (stateRef.current.definitions[id_9]?.scope !== "thread") schedulePersistence(id_9);
142
+ if (stateRef.current.definitions[id_4]?.scope !== "thread") schedulePersistence(id_4);
261
143
  }, [schedulePersistence, setStateAndRef]);
262
144
  const provider = useMemo(() => ({
263
145
  getModelContext: () => {
@@ -326,8 +208,8 @@ const useInteractablesResource = ({ persistence } = {}) => {
326
208
  if (!partialSchemaCacheRef.current.has(def_2.id)) try {
327
209
  const jsonSchema = toJSONSchema(def_2.stateSchema);
328
210
  partialSchemaCacheRef.current.set(def_2.id, toPartialJSONSchema(jsonSchema));
329
- } catch (e_1) {
330
- console.warn(`[Interactables] Failed to create partial schema for "${def_2.name}". The update tool will accept arbitrary fields without validation.`, e_1);
211
+ } catch (e_0) {
212
+ console.warn(`[Interactables] Failed to create partial schema for "${def_2.name}". The update tool will accept arbitrary fields without validation.`, e_0);
331
213
  }
332
214
  const threadId = scope === "thread" ? getCurrentThreadId() : void 0;
333
215
  const detached = scope === "thread" ? threadId ? detachedThreadStateRef.current.get(threadId)?.get(def_2.id) : void 0 : detachedAppStateRef.current.get(def_2.id);
@@ -336,10 +218,10 @@ const useInteractablesResource = ({ persistence } = {}) => {
336
218
  } else detachedAppStateRef.current.delete(def_2.id);
337
219
  const loaded = scope === "thread" ? void 0 : loadedStateRef.current.get(def_2.id);
338
220
  const known = scope === "thread" ? findModelKnownState(threadMessages, def_2.id, def_2.name) : void 0;
339
- setStateAndRef((prev_4) => ({
340
- ...prev_4,
221
+ setStateAndRef((prev_2) => ({
222
+ ...prev_2,
341
223
  definitions: {
342
- ...prev_4.definitions,
224
+ ...prev_2.definitions,
343
225
  [def_2.id]: {
344
226
  id: def_2.id,
345
227
  name: def_2.name,
@@ -347,7 +229,7 @@ const useInteractablesResource = ({ persistence } = {}) => {
347
229
  stateSchema: def_2.stateSchema,
348
230
  initialState: def_2.initialState,
349
231
  scope,
350
- state: prev_4.definitions[def_2.id]?.state ?? detached ?? known?.state ?? loaded ?? def_2.initialState
232
+ state: prev_2.definitions[def_2.id]?.state ?? detached ?? known?.state ?? loaded ?? def_2.initialState
351
233
  }
352
234
  }
353
235
  }));
@@ -360,8 +242,8 @@ const useInteractablesResource = ({ persistence } = {}) => {
360
242
  }
361
243
  registrationCountsRef.current.delete(def_2.id);
362
244
  flushIfPending();
363
- setStateAndRef((prev_5) => {
364
- const existing_1 = prev_5.definitions[def_2.id];
245
+ setStateAndRef((prev_3) => {
246
+ const existing_1 = prev_3.definitions[def_2.id];
365
247
  if (existing_1) {
366
248
  if (existing_1.scope === "thread") {
367
249
  const threadId_0 = getCurrentThreadId();
@@ -376,10 +258,10 @@ const useInteractablesResource = ({ persistence } = {}) => {
376
258
  } else detachedAppStateRef.current.set(def_2.id, existing_1.state);
377
259
  }
378
260
  partialSchemaCacheRef.current.delete(def_2.id);
379
- const { [def_2.id]: _, ...rest } = prev_5.definitions;
380
- const { [def_2.id]: __, ...restPersistence } = prev_5.persistence;
261
+ const { [def_2.id]: _, ...rest } = prev_3.definitions;
262
+ const { [def_2.id]: __, ...restPersistence } = prev_3.persistence;
381
263
  return {
382
- ...prev_5,
264
+ ...prev_3,
383
265
  definitions: rest,
384
266
  persistence: restPersistence
385
267
  };