@assistant-ui/core 0.3.17 → 0.3.18

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 (284) 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/index.d.ts +2 -2
  5. package/dist/index.js.map +1 -1
  6. package/dist/internal.d.ts +3 -2
  7. package/dist/internal.js +3 -2
  8. package/dist/model-context/frame/host.d.ts.map +1 -1
  9. package/dist/model-context/frame/host.js +10 -4
  10. package/dist/model-context/frame/host.js.map +1 -1
  11. package/dist/model-context/frame/provider.d.ts +2 -0
  12. package/dist/model-context/frame/provider.d.ts.map +1 -1
  13. package/dist/model-context/frame/provider.js +30 -7
  14. package/dist/model-context/frame/provider.js.map +1 -1
  15. package/dist/model-context/interactable-composer-metadata.d.ts.map +1 -1
  16. package/dist/model-context/interactable-composer-metadata.js +16 -9
  17. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  18. package/dist/model-context/registry.d.ts.map +1 -1
  19. package/dist/model-context/registry.js +3 -5
  20. package/dist/model-context/registry.js.map +1 -1
  21. package/dist/model-context/types.d.ts.map +1 -1
  22. package/dist/model-context/types.js +5 -4
  23. package/dist/model-context/types.js.map +1 -1
  24. package/dist/react/client/InMemoryThreadList.d.ts.map +1 -1
  25. package/dist/react/client/InMemoryThreadList.js +62 -56
  26. package/dist/react/client/InMemoryThreadList.js.map +1 -1
  27. package/dist/react/client/Interactables.d.ts.map +1 -1
  28. package/dist/react/client/Interactables.js +24 -27
  29. package/dist/react/client/Interactables.js.map +1 -1
  30. package/dist/react/client/RemoteThreadList.d.ts +1 -0
  31. package/dist/react/client/RemoteThreadList.d.ts.map +1 -1
  32. package/dist/react/client/RemoteThreadList.js +151 -141
  33. package/dist/react/client/RemoteThreadList.js.map +1 -1
  34. package/dist/react/client/Tools.d.ts.map +1 -1
  35. package/dist/react/client/Tools.js +18 -16
  36. package/dist/react/client/Tools.js.map +1 -1
  37. package/dist/react/interactables-legacy/Interactables.js +242 -121
  38. package/dist/react/interactables-legacy/Interactables.js.map +1 -1
  39. package/dist/react/interactables-shared/useInteractablePersistenceQueue.d.ts.map +1 -1
  40. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js +11 -9
  41. package/dist/react/interactables-shared/useInteractablePersistenceQueue.js.map +1 -1
  42. package/dist/react/model-context/makeAssistantTool.d.ts +2 -2
  43. package/dist/react/model-context/makeAssistantTool.js +1 -1
  44. package/dist/react/model-context/makeAssistantTool.js.map +1 -1
  45. package/dist/react/model-context/useAssistantTool.d.ts +2 -2
  46. package/dist/react/model-context/useAssistantTool.js +1 -1
  47. package/dist/react/model-context/useAssistantTool.js.map +1 -1
  48. package/dist/react/model-context/useToolArgsStatus.d.ts.map +1 -1
  49. package/dist/react/model-context/useToolArgsStatus.js +2 -1
  50. package/dist/react/model-context/useToolArgsStatus.js.map +1 -1
  51. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  52. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +16 -8
  53. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  54. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +5 -1
  55. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  56. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +103 -103
  57. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  58. package/dist/react/runtimes/RemoteThreadResource.d.ts +1 -0
  59. package/dist/react/runtimes/RemoteThreadResource.d.ts.map +1 -1
  60. package/dist/react/runtimes/RemoteThreadResource.js +13 -11
  61. package/dist/react/runtimes/RemoteThreadResource.js.map +1 -1
  62. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts +4 -1
  63. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.d.ts.map +1 -1
  64. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +401 -34
  65. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  66. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.d.ts.map +1 -1
  67. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js +2 -1
  68. package/dist/react/runtimes/cloud/createCloudThreadListAdapter.js.map +1 -1
  69. package/dist/react/runtimes/useExternalStoreRuntime.js +75 -46
  70. package/dist/react/runtimes/useExternalStoreRuntime.js.map +1 -1
  71. package/dist/react/runtimes/useRemoteThreadListRuntime.d.ts.map +1 -1
  72. package/dist/react/runtimes/useRemoteThreadListRuntime.js +63 -23
  73. package/dist/react/runtimes/useRemoteThreadListRuntime.js.map +1 -1
  74. package/dist/runtime/api/thread-list-item-runtime.d.ts +7 -3
  75. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  76. package/dist/runtime/api/thread-list-item-runtime.js +2 -2
  77. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  78. package/dist/runtime/api/thread-list-runtime.d.ts +3 -0
  79. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  80. package/dist/runtime/api/thread-list-runtime.js +18 -14
  81. package/dist/runtime/api/thread-list-runtime.js.map +1 -1
  82. package/dist/runtime/api/thread-runtime.d.ts +4 -0
  83. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  84. package/dist/runtime/api/thread-runtime.js +1 -1
  85. package/dist/runtime/api/thread-runtime.js.map +1 -1
  86. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  87. package/dist/runtime/base/base-composer-runtime-core.js +16 -12
  88. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  89. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  90. package/dist/runtime/base/base-thread-runtime-core.js +6 -5
  91. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  92. package/dist/runtime/interfaces/composer-runtime-core.d.ts +12 -5
  93. package/dist/runtime/interfaces/composer-runtime-core.d.ts.map +1 -1
  94. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts +4 -1
  95. package/dist/runtime/interfaces/thread-list-runtime-core.d.ts.map +1 -1
  96. package/dist/runtime/utils/external-message-conversion.js +1 -1
  97. package/dist/runtime/utils/external-message-conversion.js.map +1 -1
  98. package/dist/runtime/utils/message-repository.d.ts +1 -0
  99. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  100. package/dist/runtime/utils/message-repository.js +15 -6
  101. package/dist/runtime/utils/message-repository.js.map +1 -1
  102. package/dist/runtime/utils/thread-message-like.js +1 -1
  103. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  104. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  105. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js +21 -27
  106. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.js.map +1 -1
  107. package/dist/runtimes/internal.d.ts +2 -2
  108. package/dist/runtimes/internal.js +2 -2
  109. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts +18 -1
  110. package/dist/runtimes/remote-thread-list/remote-thread-state.d.ts.map +1 -1
  111. package/dist/runtimes/remote-thread-list/remote-thread-state.js +130 -42
  112. package/dist/runtimes/remote-thread-list/remote-thread-state.js.map +1 -1
  113. package/dist/runtimes/remote-thread-list/title-generation.d.ts +49 -0
  114. package/dist/runtimes/remote-thread-list/title-generation.d.ts.map +1 -0
  115. package/dist/runtimes/remote-thread-list/title-generation.js +197 -0
  116. package/dist/runtimes/remote-thread-list/title-generation.js.map +1 -0
  117. package/dist/runtimes/remote-thread-list/title.d.ts +3 -1
  118. package/dist/runtimes/remote-thread-list/title.d.ts.map +1 -1
  119. package/dist/runtimes/remote-thread-list/title.js +9 -1
  120. package/dist/runtimes/remote-thread-list/title.js.map +1 -1
  121. package/dist/runtimes/remote-thread-list/types.d.ts +10 -0
  122. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -1
  123. package/dist/store/clients/external-thread.d.ts.map +1 -1
  124. package/dist/store/clients/external-thread.js +19 -3
  125. package/dist/store/clients/external-thread.js.map +1 -1
  126. package/dist/store/clients/model-context-client.d.ts.map +1 -1
  127. package/dist/store/clients/model-context-client.js +2 -1
  128. package/dist/store/clients/model-context-client.js.map +1 -1
  129. package/dist/store/clients/single-thread-list.d.ts.map +1 -1
  130. package/dist/store/clients/single-thread-list.js +1 -0
  131. package/dist/store/clients/single-thread-list.js.map +1 -1
  132. package/dist/store/clients/suggestions.d.ts.map +1 -1
  133. package/dist/store/clients/suggestions.js +5 -4
  134. package/dist/store/clients/suggestions.js.map +1 -1
  135. package/dist/store/runtime-clients/composer-runtime-client.d.ts +1 -0
  136. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  137. package/dist/store/runtime-clients/composer-runtime-client.js +97 -61
  138. package/dist/store/runtime-clients/composer-runtime-client.js.map +1 -1
  139. package/dist/store/runtime-clients/message-runtime-client.d.ts +1 -0
  140. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  141. package/dist/store/runtime-clients/message-runtime-client.js +221 -144
  142. package/dist/store/runtime-clients/message-runtime-client.js.map +1 -1
  143. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  144. package/dist/store/runtime-clients/thread-list-item-runtime-client.js +1 -1
  145. package/dist/store/runtime-clients/thread-list-item-runtime-client.js.map +1 -1
  146. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  147. package/dist/store/runtime-clients/thread-list-runtime-client.js +54 -52
  148. package/dist/store/runtime-clients/thread-list-runtime-client.js.map +1 -1
  149. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  150. package/dist/store/runtime-clients/thread-runtime-client.js +193 -121
  151. package/dist/store/runtime-clients/thread-runtime-client.js.map +1 -1
  152. package/dist/store/scopes/composer.d.ts +10 -2
  153. package/dist/store/scopes/composer.d.ts.map +1 -1
  154. package/dist/store/scopes/message.d.ts +30 -1
  155. package/dist/store/scopes/message.d.ts.map +1 -1
  156. package/dist/store/scopes/thread-list-item.d.ts +2 -2
  157. package/dist/store/scopes/thread-list-item.d.ts.map +1 -1
  158. package/dist/store/scopes/thread.d.ts +8 -0
  159. package/dist/store/scopes/thread.d.ts.map +1 -1
  160. package/dist/store/scopes/threads.d.ts +1 -0
  161. package/dist/store/scopes/threads.d.ts.map +1 -1
  162. package/dist/types/attachment.d.ts +2 -1
  163. package/dist/types/attachment.d.ts.map +1 -1
  164. package/dist/types/attachment.js +2 -1
  165. package/dist/types/attachment.js.map +1 -1
  166. package/dist/utils/abortable-iterable.d.ts +19 -0
  167. package/dist/utils/abortable-iterable.d.ts.map +1 -0
  168. package/dist/utils/abortable-iterable.js +72 -0
  169. package/dist/utils/abortable-iterable.js.map +1 -0
  170. package/dist/utils/composite-context-provider.d.ts.map +1 -1
  171. package/dist/utils/composite-context-provider.js +20 -2
  172. package/dist/utils/composite-context-provider.js.map +1 -1
  173. package/dist/utils/record.d.ts +11 -0
  174. package/dist/utils/record.d.ts.map +1 -0
  175. package/dist/utils/record.js +12 -0
  176. package/dist/utils/record.js.map +1 -0
  177. package/package.json +10 -10
  178. package/src/adapters/attachment.test.ts +50 -1
  179. package/src/adapters/attachment.ts +7 -4
  180. package/src/index.ts +1 -0
  181. package/src/internal.ts +4 -0
  182. package/src/model-context/frame/host.test.ts +24 -0
  183. package/src/model-context/frame/host.ts +10 -4
  184. package/src/model-context/frame/provider.test.ts +71 -0
  185. package/src/model-context/frame/provider.ts +37 -7
  186. package/src/model-context/interactable-composer-metadata.test.ts +28 -0
  187. package/src/model-context/interactable-composer-metadata.ts +9 -3
  188. package/src/model-context/registry.test.ts +12 -0
  189. package/src/model-context/registry.ts +3 -2
  190. package/src/model-context/types.test.ts +25 -0
  191. package/src/model-context/types.ts +9 -4
  192. package/src/react/RuntimeAdapter.test.ts +34 -0
  193. package/src/react/client/InMemoryThreadList.ts +1 -0
  194. package/src/react/client/Interactables.test.ts +28 -0
  195. package/src/react/client/Interactables.ts +15 -13
  196. package/src/react/client/RemoteThreadList.background.test.ts +148 -6
  197. package/src/react/client/RemoteThreadList.concurrent.test.tsx +42 -1
  198. package/src/react/client/RemoteThreadList.test.ts +345 -3
  199. package/src/react/client/RemoteThreadList.ts +166 -110
  200. package/src/react/client/Tools.ts +22 -11
  201. package/src/react/interactables-legacy/Interactables.ts +16 -16
  202. package/src/react/interactables-shared/useInteractablePersistenceQueue.ts +9 -10
  203. package/src/react/model-context/makeAssistantTool.ts +2 -2
  204. package/src/react/model-context/useAssistantTool.ts +2 -2
  205. package/src/react/model-context/useToolArgsStatus.test.tsx +30 -0
  206. package/src/react/model-context/useToolArgsStatus.ts +2 -1
  207. package/src/react/runtimes/RemoteThreadListHookInstanceManager.destroy.test.tsx +172 -0
  208. package/src/react/runtimes/RemoteThreadListHookInstanceManager.running.test.tsx +33 -0
  209. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +7 -1
  210. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +28 -5
  211. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.load-error.test.ts +132 -0
  212. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.switch-delete.test.ts +105 -0
  213. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +136 -111
  214. package/src/react/runtimes/RemoteThreadResource.test.ts +9 -0
  215. package/src/react/runtimes/RemoteThreadResource.ts +19 -12
  216. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +483 -6
  217. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +504 -68
  218. package/src/react/runtimes/cloud/createCloudThreadListAdapter.test.ts +15 -0
  219. package/src/react/runtimes/cloud/createCloudThreadListAdapter.ts +1 -0
  220. package/src/react/runtimes/useExternalStoreRuntime.lifecycle.test.tsx +41 -0
  221. package/src/react/runtimes/useExternalStoreRuntime.ts +10 -4
  222. package/src/react/runtimes/useLocalRuntime.test.tsx +20 -0
  223. package/src/react/runtimes/useRemoteThreadListRuntime.load-error.test.tsx +108 -0
  224. package/src/react/runtimes/useRemoteThreadListRuntime.ts +33 -0
  225. package/src/runtime/api/message-runtime.test.ts +75 -0
  226. package/src/runtime/api/thread-list-item-runtime.ts +10 -3
  227. package/src/runtime/api/thread-list-runtime.ts +21 -11
  228. package/src/runtime/api/thread-runtime.test.ts +78 -0
  229. package/src/runtime/api/thread-runtime.ts +8 -1
  230. package/src/runtime/base/base-composer-runtime-core.ts +36 -8
  231. package/src/runtime/base/base-thread-runtime-core.test.ts +55 -1
  232. package/src/runtime/base/base-thread-runtime-core.ts +6 -4
  233. package/src/runtime/interfaces/composer-runtime-core.ts +10 -5
  234. package/src/runtime/interfaces/thread-list-runtime-core.ts +5 -1
  235. package/src/runtime/utils/external-message-conversion.test.ts +68 -0
  236. package/src/runtime/utils/external-message-conversion.ts +1 -1
  237. package/src/runtime/utils/message-repository.ts +29 -17
  238. package/src/runtime/utils/thread-message-like.ts +1 -1
  239. package/src/runtimes/external-store/external-store-thread-list-runtime-core.ts +18 -13
  240. package/src/runtimes/internal.ts +1 -0
  241. package/src/runtimes/remote-thread-list/remote-thread-state.test.ts +128 -2
  242. package/src/runtimes/remote-thread-list/remote-thread-state.ts +182 -42
  243. package/src/runtimes/remote-thread-list/title-generation.test.ts +602 -0
  244. package/src/runtimes/remote-thread-list/title-generation.ts +329 -0
  245. package/src/runtimes/remote-thread-list/title.test.ts +62 -0
  246. package/src/runtimes/remote-thread-list/title.ts +13 -0
  247. package/src/runtimes/remote-thread-list/types.ts +10 -0
  248. package/src/store/clients/external-thread.ts +48 -3
  249. package/src/store/clients/model-context-client.ts +5 -1
  250. package/src/store/clients/single-thread-list.ts +1 -0
  251. package/src/store/clients/suggestions.test.ts +40 -0
  252. package/src/store/clients/suggestions.ts +13 -10
  253. package/src/store/runtime-clients/composer-runtime-client.ts +42 -9
  254. package/src/store/runtime-clients/message-runtime-client.ts +54 -6
  255. package/src/store/runtime-clients/thread-list-item-runtime-client.ts +4 -2
  256. package/src/store/runtime-clients/thread-list-runtime-client.ts +1 -0
  257. package/src/store/runtime-clients/thread-runtime-client.ts +58 -10
  258. package/src/store/scopes/composer.ts +16 -4
  259. package/src/store/scopes/message.ts +14 -0
  260. package/src/store/scopes/thread-list-item.ts +5 -2
  261. package/src/store/scopes/thread.ts +4 -0
  262. package/src/store/scopes/threads.ts +1 -0
  263. package/src/tests/MessageRepository.test.ts +116 -0
  264. package/src/tests/OptimisticState-list-race.test.ts +1 -0
  265. package/src/tests/RemoteThreadListThreadListRuntimeCore-initialize-adapter-change.test.ts +38 -0
  266. package/src/tests/RemoteThreadListThreadListRuntimeCore-load-race.test.ts +47 -0
  267. package/src/tests/RemoteThreadListThreadListRuntimeCore-title-race.test.ts +89 -0
  268. package/src/tests/attachment-adapters.test.ts +14 -0
  269. package/src/tests/base-composer-runtime-core.test.ts +39 -0
  270. package/src/tests/external-store-thread-list-runtime-core.test.ts +83 -0
  271. package/src/tests/external-store-thread-runtime-core-adapter.test.ts +27 -18
  272. package/src/tests/external-thread-attachments.test.tsx +139 -0
  273. package/src/tests/external-thread-parity.test.tsx +23 -0
  274. package/src/tests/remote-thread-list-isLoading.test.ts +1 -0
  275. package/src/tests/thread-list-runtime-getLoadThreadsPromise.test.ts +1 -0
  276. package/src/tests/thread-switch-events.test.tsx +78 -0
  277. package/src/tests/tools-scope-migration.test.tsx +28 -0
  278. package/src/types/attachment.ts +4 -0
  279. package/src/utils/abortable-iterable.test.ts +213 -0
  280. package/src/utils/abortable-iterable.ts +93 -0
  281. package/src/utils/composite-context-provider.test.ts +25 -0
  282. package/src/utils/composite-context-provider.ts +23 -2
  283. package/src/utils/record.test.ts +48 -0
  284. package/src/utils/record.ts +11 -0
@@ -2,13 +2,14 @@ import { CompositeContextProvider } from "../../utils/composite-context-provider
2
2
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
3
3
  import { useEffect, useState } from "@assistant-ui/tap/react-shim";
4
4
  import { resource } from "@assistant-ui/tap";
5
+ import { shallowEqual } from "@assistant-ui/store/internal";
5
6
  //#region src/store/clients/model-context-client.ts
6
7
  const EMPTY_TOOL_NAMES = [];
7
8
  const INITIAL_STATE = {
8
9
  modelName: void 0,
9
10
  toolNames: EMPTY_TOOL_NAMES
10
11
  };
11
- const toolNamesEqual = (a, b) => a === b || a.length === b.length && a.every((v, i) => v === b[i]);
12
+ const toolNamesEqual = (a, b) => a === b || shallowEqual(a, b);
12
13
  const deriveState = (composite, prev) => {
13
14
  const ctx = composite.getModelContext();
14
15
  const modelName = ctx.config?.modelName;
@@ -1 +1 @@
1
- {"version":3,"file":"model-context-client.js","names":["useEffect","useMemo","useState","resource","ClientOutput","CompositeContextProvider","ModelContextState","EMPTY_TOOL_NAMES","INITIAL_STATE","modelName","undefined","toolNames","toolNamesEqual","a","b","length","every","v","i","deriveState","composite","prev","ctx","getModelContext","config","keys","tools","Object","sort","useModelContext","$","_c","t0","Symbol","for","t1","state","setState","t2","t3","subscribe","prev_0","t4","t5","t6","t7","callback","provider","registerModelContextProvider","t8","getState","register","ModelContext"],"sources":["../../../src/store/clients/model-context-client.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { CompositeContextProvider } from \"../../utils/composite-context-provider\";\nimport type { ModelContextState } from \"../scopes/model-context\";\n\nconst EMPTY_TOOL_NAMES: readonly string[] = [];\n\nconst INITIAL_STATE: ModelContextState = {\n modelName: undefined,\n toolNames: EMPTY_TOOL_NAMES,\n};\n\nconst toolNamesEqual = (a: readonly string[], b: readonly string[]): boolean =>\n a === b || (a.length === b.length && a.every((v, i) => v === b[i]));\n\nconst deriveState = (\n composite: CompositeContextProvider,\n prev: ModelContextState,\n): ModelContextState => {\n const ctx = composite.getModelContext();\n const modelName = ctx.config?.modelName;\n const keys = ctx.tools ? Object.keys(ctx.tools).sort() : EMPTY_TOOL_NAMES;\n const toolNames = keys.length ? keys : EMPTY_TOOL_NAMES;\n\n if (modelName === prev.modelName && toolNamesEqual(toolNames, prev.toolNames))\n return prev;\n\n return { modelName, toolNames };\n};\n\nconst useModelContext = (): ClientOutput<\"modelContext\"> => {\n const composite = useMemo(() => new CompositeContextProvider(), []);\n const [state, setState] = useState<ModelContextState>(() =>\n deriveState(composite, INITIAL_STATE),\n );\n\n useEffect(() => {\n setState((prev) => deriveState(composite, prev));\n return composite.subscribe(() => {\n setState((prev) => deriveState(composite, prev));\n });\n }, [composite]);\n\n return {\n getState: () => deriveState(composite, state),\n getModelContext: () => composite.getModelContext(),\n subscribe: (callback) => composite.subscribe(callback),\n register: (provider) => composite.registerModelContextProvider(provider),\n };\n};\n\nexport const ModelContext = resource(useModelContext);\n"],"mappings":";;;;;AAMA,MAAMO,mBAAsC,CAAA;AAE5C,MAAMC,gBAAmC;CACvCC,WAAWC,KAAAA;CACXC,WAAWJ;AACb;AAEA,MAAMK,kBAAkBC,GAAsBC,MAC5CD,MAAMC,KAAMD,EAAEE,WAAWD,EAAEC,UAAUF,EAAEG,OAAOC,GAAGC,MAAMD,MAAMH,EAAEI,EAAE;AAEnE,MAAMC,eACJC,WACAC,SACsB;CACtB,MAAMC,MAAMF,UAAUG,gBAAgB;CACtC,MAAMd,YAAYa,IAAIE,QAAQf;CAC9B,MAAMgB,OAAOH,IAAII,QAAQC,OAAOF,KAAKH,IAAII,KAAK,CAAC,CAACE,KAAK,IAAIrB;CACzD,MAAMI,YAAYc,KAAKV,SAASU,OAAOlB;CAEvC,IAAIE,cAAcY,KAAKZ,aAAaG,eAAeD,WAAWU,KAAKV,SAAS,GAC1E,OAAOU;CAET,OAAO;EAAEZ;EAAWE;CAAU;AAChC;AAEA,MAAMkB,wBAAkB;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACUF,KAAA,IAAI3B,yBAAyB;EAACyB,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAA9D,MAAAV,YAAgCY;CAAoC,IAAAG;CAAA,IAAAL,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACdC,WACpDhB,YAAYC,WAAWZ,aAAa;EAACsB,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CADvC,MAAA,CAAAM,OAAAC,YAA0BnC,SAA4BiC,EAEtD;CAAE,IAAAG;CAAA,IAAAC;CAAA,IAAAT,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAEQI,WAAA;GACRD,UAAShB,SAAUF,YAAYC,WAAWC,IAAI,CAAC;GAAC,OACzCD,UAASoB,gBAAW;IACzBH,UAASI,WAAUtB,YAAYC,WAAWC,MAAI,CAAC;GAAC,CACjD;EAAC;EACDkB,KAAA,CAACnB,SAAS;EAACU,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAA;EAAAD,KAAAR,EAAA;EAAAS,KAAAT,EAAA;CAAA;CALd9B,UAAUsC,IAKPC,EAAW;CAAC,IAAAG;CAAA,IAAAZ,EAAA,OAAAM,OAAA;EAGHM,WAAMvB,YAAYC,WAAWgB,KAAK;EAACN,EAAA,KAAAM;EAAAN,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAf,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAC5BS,WAAMvB,UAASG,gBAAiB;EACtCqB,MAAAE,aAAc1B,UAASoB,UAAWM,QAAQ;EAC3CD,MAAAE,aAAc3B,UAAS4B,6BAA8BD,QAAQ;EAACjB,EAAA,KAAAa;EAAAb,EAAA,KAAAc;EAAAd,EAAA,KAAAe;CAAA,OAAA;EAAAF,KAAAb,EAAA;EAAAc,KAAAd,EAAA;EAAAe,KAAAf,EAAA;CAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAY,IAAA;EAJnEO,KAAA;GAAAC,UACKR;GAAmCnB,iBAC5BoB;GAAiCH,WACvCI;GAA2CO,UAC5CN;EACZ;EAACf,EAAA,KAAAY;EAAAZ,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OALMmB;AAKN;AAGH,MAAaG,eAAejD,SAAS0B,eAAe"}
1
+ {"version":3,"file":"model-context-client.js","names":["useEffect","useMemo","useState","resource","ClientOutput","CompositeContextProvider","ModelContextState","shallowEqual","EMPTY_TOOL_NAMES","INITIAL_STATE","modelName","undefined","toolNames","toolNamesEqual","a","b","deriveState","composite","prev","ctx","getModelContext","config","keys","tools","Object","sort","length","useModelContext","$","_c","t0","Symbol","for","t1","state","setState","t2","t3","subscribe","prev_0","t4","t5","t6","t7","callback","provider","registerModelContextProvider","t8","getState","register","ModelContext"],"sources":["../../../src/store/clients/model-context-client.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { CompositeContextProvider } from \"../../utils/composite-context-provider\";\nimport type { ModelContextState } from \"../scopes/model-context\";\nimport { shallowEqual } from \"@assistant-ui/store/internal\";\n\nconst EMPTY_TOOL_NAMES: readonly string[] = [];\n\nconst INITIAL_STATE: ModelContextState = {\n modelName: undefined,\n toolNames: EMPTY_TOOL_NAMES,\n};\n\nconst toolNamesEqual = (a: readonly string[], b: readonly string[]): boolean =>\n a === b || shallowEqual(a, b);\n\nconst deriveState = (\n composite: CompositeContextProvider,\n prev: ModelContextState,\n): ModelContextState => {\n const ctx = composite.getModelContext();\n const modelName = ctx.config?.modelName;\n const keys = ctx.tools ? Object.keys(ctx.tools).sort() : EMPTY_TOOL_NAMES;\n const toolNames = keys.length ? keys : EMPTY_TOOL_NAMES;\n\n if (modelName === prev.modelName && toolNamesEqual(toolNames, prev.toolNames))\n return prev;\n\n return { modelName, toolNames };\n};\n\nconst useModelContext = (): ClientOutput<\"modelContext\"> => {\n const composite = useMemo(() => new CompositeContextProvider(), []);\n const [state, setState] = useState<ModelContextState>(() =>\n deriveState(composite, INITIAL_STATE),\n );\n\n useEffect(() => {\n // The composite is an external store; this catches the snapshot up for\n // providers registered between render and subscribe.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setState((prev) => deriveState(composite, prev));\n return composite.subscribe(() => {\n setState((prev) => deriveState(composite, prev));\n });\n }, [composite]);\n\n return {\n getState: () => deriveState(composite, state),\n getModelContext: () => composite.getModelContext(),\n subscribe: (callback) => composite.subscribe(callback),\n register: (provider) => composite.registerModelContextProvider(provider),\n };\n};\n\nexport const ModelContext = resource(useModelContext);\n"],"mappings":";;;;;;AAOA,MAAMQ,mBAAsC,CAAA;AAE5C,MAAMC,gBAAmC;CACvCC,WAAWC,KAAAA;CACXC,WAAWJ;AACb;AAEA,MAAMK,kBAAkBC,GAAsBC,MAC5CD,MAAMC,KAAKR,aAAaO,GAAGC,CAAC;AAE9B,MAAMC,eACJC,WACAC,SACsB;CACtB,MAAMC,MAAMF,UAAUG,gBAAgB;CACtC,MAAMV,YAAYS,IAAIE,QAAQX;CAC9B,MAAMY,OAAOH,IAAII,QAAQC,OAAOF,KAAKH,IAAII,KAAK,CAAC,CAACE,KAAK,IAAIjB;CACzD,MAAMI,YAAYU,KAAKI,SAASJ,OAAOd;CAEvC,IAAIE,cAAcQ,KAAKR,aAAaG,eAAeD,WAAWM,KAAKN,SAAS,GAC1E,OAAOM;CAET,OAAO;EAAER;EAAWE;CAAU;AAChC;AAEA,MAAMe,wBAAkB;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACUF,KAAA,IAAIzB,yBAAyB;EAACuB,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAA9D,MAAAX,YAAgCa;CAAoC,IAAAG;CAAA,IAAAL,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EACdC,WACpDjB,YAAYC,WAAWR,aAAa;EAACmB,EAAA,KAAAK;CAAA,OAAAA,KAAAL,EAAA;CADvC,MAAA,CAAAM,OAAAC,YAA0BjC,SAA4B+B,EAEtD;CAAE,IAAAG;CAAA,IAAAC;CAAA,IAAAT,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAEQI,WAAA;GAIRD,UAASjB,SAAUF,YAAYC,WAAWC,IAAI,CAAC;GAAC,OACzCD,UAASqB,gBAAW;IACzBH,UAASI,WAAUvB,YAAYC,WAAWC,MAAI,CAAC;GAAC,CACjD;EAAC;EACDmB,KAAA,CAACpB,SAAS;EAACW,EAAA,KAAAQ;EAAAR,EAAA,KAAAS;CAAA,OAAA;EAAAD,KAAAR,EAAA;EAAAS,KAAAT,EAAA;CAAA;CARd5B,UAAUoC,IAQPC,EAAW;CAAC,IAAAG;CAAA,IAAAZ,EAAA,OAAAM,OAAA;EAGHM,WAAMxB,YAAYC,WAAWiB,KAAK;EAACN,EAAA,KAAAM;EAAAN,EAAA,KAAAY;CAAA,OAAAA,KAAAZ,EAAA;CAAA,IAAAa;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAf,EAAA,OAAAG,OAAAC,IAAA,2BAAA,GAAA;EAC5BS,WAAMxB,UAASG,gBAAiB;EACtCsB,MAAAE,aAAc3B,UAASqB,UAAWM,QAAQ;EAC3CD,MAAAE,aAAc5B,UAAS6B,6BAA8BD,QAAQ;EAACjB,EAAA,KAAAa;EAAAb,EAAA,KAAAc;EAAAd,EAAA,KAAAe;CAAA,OAAA;EAAAF,KAAAb,EAAA;EAAAc,KAAAd,EAAA;EAAAe,KAAAf,EAAA;CAAA;CAAA,IAAAmB;CAAA,IAAAnB,EAAA,OAAAY,IAAA;EAJnEO,KAAA;GAAAC,UACKR;GAAmCpB,iBAC5BqB;GAAiCH,WACvCI;GAA2CO,UAC5CN;EACZ;EAACf,EAAA,KAAAY;EAAAZ,EAAA,MAAAmB;CAAA,OAAAA,KAAAnB,EAAA;CAAA,OALMmB;AAKN;AAGH,MAAaG,eAAe/C,SAASwB,eAAe"}
@@ -1 +1 @@
1
- {"version":3,"file":"single-thread-list.d.ts","names":[],"sources":["../../../src/store/clients/single-thread-list.ts"],"mappings":";;KAuCK;EACH,QAAQ;;cA8EG,8CAAgB,SAAA,0BAAA"}
1
+ {"version":3,"file":"single-thread-list.d.ts","names":[],"sources":["../../../src/store/clients/single-thread-list.ts"],"mappings":";;KAuCK;EACH,QAAQ;;cA+EG,8CAAgB,SAAA,0BAAA"}
@@ -77,6 +77,7 @@ const useSingleThreadList = (t0) => {
77
77
  mainThreadId: THREAD_ID,
78
78
  newThreadId: null,
79
79
  isLoading: false,
80
+ loadError: void 0,
80
81
  isLoadingMore: false,
81
82
  hasMore: false,
82
83
  threadIds: t2,
@@ -1 +1 @@
1
- {"version":3,"file":"single-thread-list.js","names":["useMemo","useState","resource","ClientElement","ClientOutput","useClientResource","RESOLVED_PROMISE","Promise","resolve","THREAD_ID","useSingleThreadListItem","t0","$","_c","isRunning","custom","setCustom","t1","getState","id","remoteId","undefined","externalId","title","status","switchTo","_temp","rename","_temp2","updateCustom","archive","_temp3","unarchive","_temp4","delete","_temp5","generateTitle","_temp6","initialize","_temp7","detach","_temp8","SingleThreadListItem","SingleThreadListProps","thread","useSingleThreadList","threadClient","state","itemClient","t2","t3","Symbol","for","t4","t5","mainThreadId","newThreadId","isLoading","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t6","t7","methods","unstable_refetchThread","t8","selector","index","archived","Error","JSON","stringify","t9","selector_0","t10","switchToThread","_temp9","switchToNewThread","_temp0","getLoadThreadsPromise","_temp1","reload","_temp10","reloadMainThread","loadMore","_temp11","item","SingleThreadList"],"sources":["../../../src/store/clients/single-thread-list.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport { useClientResource } from \"@assistant-ui/store/client\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\nconst THREAD_ID = \"default\";\n\nconst useSingleThreadListItem = ({\n isRunning,\n}: {\n isRunning: boolean;\n}): ClientOutput<\"threadListItem\"> => {\n const [custom, setCustom] = useState<Record<string, unknown> | undefined>();\n\n return {\n getState: () => ({\n id: THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n status: \"regular\",\n custom,\n isRunning,\n }),\n switchTo: () => {},\n rename: () => {},\n updateCustom: setCustom,\n archive: () => {},\n unarchive: () => {},\n delete: () => {},\n generateTitle: () => {},\n initialize: async () => ({ remoteId: THREAD_ID, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst SingleThreadListItem = resource(useSingleThreadListItem);\n\ntype SingleThreadListProps = {\n thread: ClientElement<\"thread\">;\n};\n\n/**\n * A minimal threads scope that wraps a single thread.\n * Automatically provided by ExternalThread when no threads scope exists.\n * Mounts the provided thread resource element.\n */\nconst useSingleThreadList = ({\n thread,\n}: SingleThreadListProps): ClientOutput<\"threads\"> => {\n const threadClient = useClientResource(thread);\n const itemClient = useClientResource(\n SingleThreadListItem({ isRunning: threadClient.state.isRunning }),\n );\n\n const state = useMemo(\n () => ({\n mainThreadId: THREAD_ID,\n newThreadId: null,\n isLoading: false,\n isLoadingMore: false,\n hasMore: false,\n threadIds: [THREAD_ID],\n archivedThreadIds: [],\n threadItems: [itemClient.state],\n main: threadClient.state,\n }),\n [itemClient.state, threadClient.state],\n );\n\n return {\n getState: () => state,\n switchToThread: () => {\n throw new Error(\"SingleThreadList does not support switchToThread\");\n },\n switchToNewThread: () => {\n throw new Error(\"SingleThreadList does not support switchToNewThread\");\n },\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n threadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (\n selector !== \"main\" &&\n !(\n typeof selector === \"object\" &&\n \"id\" in selector &&\n selector.id === THREAD_ID\n ) &&\n !(\n typeof selector === \"object\" &&\n \"index\" in selector &&\n selector.index === 0 &&\n // Index selectors address their archived/regular subset, and the\n // archived subset here is always empty.\n !selector.archived\n )\n ) {\n throw new Error(\n `SingleThreadList: unknown item selector ${JSON.stringify(selector)}`,\n );\n }\n return itemClient.methods;\n },\n thread: (selector) => {\n if (selector !== \"main\" && selector !== THREAD_ID) {\n throw new Error(\n `SingleThreadList: unknown thread selector ${JSON.stringify(selector)}`,\n );\n }\n return threadClient.methods;\n },\n };\n};\n\nexport const SingleThreadList = resource(useSingleThreadList);\n"],"mappings":"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"}
1
+ {"version":3,"file":"single-thread-list.js","names":["useMemo","useState","resource","ClientElement","ClientOutput","useClientResource","RESOLVED_PROMISE","Promise","resolve","THREAD_ID","useSingleThreadListItem","t0","$","_c","isRunning","custom","setCustom","t1","getState","id","remoteId","undefined","externalId","title","status","switchTo","_temp","rename","_temp2","updateCustom","archive","_temp3","unarchive","_temp4","delete","_temp5","generateTitle","_temp6","initialize","_temp7","detach","_temp8","SingleThreadListItem","SingleThreadListProps","thread","useSingleThreadList","threadClient","state","itemClient","t2","t3","Symbol","for","t4","t5","mainThreadId","newThreadId","isLoading","loadError","isLoadingMore","hasMore","threadIds","archivedThreadIds","threadItems","main","t6","t7","methods","unstable_refetchThread","t8","selector","index","archived","Error","JSON","stringify","t9","selector_0","t10","switchToThread","_temp9","switchToNewThread","_temp0","getLoadThreadsPromise","_temp1","reload","_temp10","reloadMainThread","loadMore","_temp11","item","SingleThreadList"],"sources":["../../../src/store/clients/single-thread-list.ts"],"sourcesContent":["import { useMemo, useState } from \"react\";\nimport { resource } from \"@assistant-ui/tap\";\nimport type { ClientElement, ClientOutput } from \"@assistant-ui/store\";\nimport { useClientResource } from \"@assistant-ui/store/client\";\n\nconst RESOLVED_PROMISE = Promise.resolve();\nconst THREAD_ID = \"default\";\n\nconst useSingleThreadListItem = ({\n isRunning,\n}: {\n isRunning: boolean;\n}): ClientOutput<\"threadListItem\"> => {\n const [custom, setCustom] = useState<Record<string, unknown> | undefined>();\n\n return {\n getState: () => ({\n id: THREAD_ID,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n status: \"regular\",\n custom,\n isRunning,\n }),\n switchTo: () => {},\n rename: () => {},\n updateCustom: setCustom,\n archive: () => {},\n unarchive: () => {},\n delete: () => {},\n generateTitle: () => {},\n initialize: async () => ({ remoteId: THREAD_ID, externalId: undefined }),\n detach: () => {},\n };\n};\n\nconst SingleThreadListItem = resource(useSingleThreadListItem);\n\ntype SingleThreadListProps = {\n thread: ClientElement<\"thread\">;\n};\n\n/**\n * A minimal threads scope that wraps a single thread.\n * Automatically provided by ExternalThread when no threads scope exists.\n * Mounts the provided thread resource element.\n */\nconst useSingleThreadList = ({\n thread,\n}: SingleThreadListProps): ClientOutput<\"threads\"> => {\n const threadClient = useClientResource(thread);\n const itemClient = useClientResource(\n SingleThreadListItem({ isRunning: threadClient.state.isRunning }),\n );\n\n const state = useMemo(\n () => ({\n mainThreadId: THREAD_ID,\n newThreadId: null,\n isLoading: false,\n loadError: undefined,\n isLoadingMore: false,\n hasMore: false,\n threadIds: [THREAD_ID],\n archivedThreadIds: [],\n threadItems: [itemClient.state],\n main: threadClient.state,\n }),\n [itemClient.state, threadClient.state],\n );\n\n return {\n getState: () => state,\n switchToThread: () => {\n throw new Error(\"SingleThreadList does not support switchToThread\");\n },\n switchToNewThread: () => {\n throw new Error(\"SingleThreadList does not support switchToNewThread\");\n },\n getLoadThreadsPromise: () => RESOLVED_PROMISE,\n reload: () => RESOLVED_PROMISE,\n reloadMainThread: () =>\n threadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,\n loadMore: () => RESOLVED_PROMISE,\n item: (selector) => {\n if (\n selector !== \"main\" &&\n !(\n typeof selector === \"object\" &&\n \"id\" in selector &&\n selector.id === THREAD_ID\n ) &&\n !(\n typeof selector === \"object\" &&\n \"index\" in selector &&\n selector.index === 0 &&\n // Index selectors address their archived/regular subset, and the\n // archived subset here is always empty.\n !selector.archived\n )\n ) {\n throw new Error(\n `SingleThreadList: unknown item selector ${JSON.stringify(selector)}`,\n );\n }\n return itemClient.methods;\n },\n thread: (selector) => {\n if (selector !== \"main\" && selector !== THREAD_ID) {\n throw new Error(\n `SingleThreadList: unknown thread selector ${JSON.stringify(selector)}`,\n );\n }\n return threadClient.methods;\n },\n };\n};\n\nexport const SingleThreadList = resource(useSingleThreadList);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/clients/suggestions.ts"],"mappings":";;;KASY;EAEN;EAAe;EAAe;;cAmEvB,yCAAW,SAAA,8BAAA,cAAA;cAcX,+CAAiB,SAAA,8BAAA,sBAAA"}
1
+ {"version":3,"file":"suggestions.d.ts","names":[],"sources":["../../../src/store/clients/suggestions.ts"],"mappings":";;;KASY;EAEN;EAAe;EAAe;;cAsEvB,yCAAW,SAAA,8BAAA,cAAA;cAcX,+CAAiB,SAAA,8BAAA,sBAAA"}
@@ -7,11 +7,12 @@ import { shallowEqual as shallowEqual$1 } from "@assistant-ui/store/internal";
7
7
  const useStableSuggestionsState = (next) => {
8
8
  const cell = useMemo(() => ({}), []);
9
9
  const previous = cell.state;
10
- const suggestions = next.suggestions.map((suggestion, index) => {
11
- const previousSuggestion = previous?.suggestions[index];
12
- return previousSuggestion && shallowEqual$1(previousSuggestion, suggestion) ? previousSuggestion : suggestion;
10
+ const suggestions = [];
11
+ next.suggestions.forEach((suggestion) => {
12
+ const previousSuggestion = previous?.suggestions[suggestions.length];
13
+ suggestions.push(previousSuggestion && shallowEqual$1(previousSuggestion, suggestion) ? previousSuggestion : suggestion);
13
14
  });
14
- const state = previous && previous.suggestions.length === suggestions.length && suggestions.every((suggestion_0, index_0) => suggestion_0 === previous.suggestions[index_0]) ? previous : { suggestions };
15
+ const state = previous && shallowEqual$1(suggestions, previous.suggestions) ? previous : { suggestions };
15
16
  cell.state = state;
16
17
  return state;
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"suggestions.js","names":["useMemo","resource","withKey","ClientOutput","useClientLookup","shallowEqual","SuggestionsState","SuggestionState","ThreadSuggestion","SuggestionConfig","title","label","prompt","useStableSuggestionsState","next","cell","state","previous","suggestions","map","suggestion","index","previousSuggestion","length","every","useSuggestionClient","getState","SuggestionClient","useSuggestionsClient","nextState","$","_c","t0","_temp","suggestionClients","t1","t2","t3","index_0","get","useStaticSuggestions","_temp2","Suggestions","useThreadSuggestions","_temp3","ThreadSuggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport { shallowEqual } from \"@assistant-ui/store/internal\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\nimport type { ThreadSuggestion } from \"../../runtime/interfaces/thread-runtime-core\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useStableSuggestionsState = (\n next: SuggestionsState,\n): SuggestionsState => {\n const cell = useMemo(() => ({}) as { state?: SuggestionsState }, []);\n const previous = cell.state;\n\n const suggestions = next.suggestions.map((suggestion, index) => {\n const previousSuggestion = previous?.suggestions[index];\n return previousSuggestion && shallowEqual(previousSuggestion, suggestion)\n ? previousSuggestion\n : suggestion;\n });\n const state =\n previous &&\n previous.suggestions.length === suggestions.length &&\n suggestions.every(\n (suggestion, index) => suggestion === previous.suggestions[index],\n )\n ? previous\n : { suggestions };\n\n cell.state = state;\n return state;\n};\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsClient = (\n nextState: SuggestionsState,\n): ClientOutput<\"suggestions\"> => {\n const state = useStableSuggestionsState(nextState);\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nconst useStaticSuggestions = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n return useSuggestionsClient({\n suggestions: (suggestions ?? []).map((s) =>\n typeof s === \"string\"\n ? { title: s, label: \"\", prompt: s }\n : { title: s.title, label: s.label, prompt: s.prompt },\n ),\n });\n};\n\nexport const Suggestions = resource(useStaticSuggestions);\n\nconst useThreadSuggestions = (\n suggestions: readonly ThreadSuggestion[],\n): ClientOutput<\"suggestions\"> => {\n return useSuggestionsClient({\n suggestions: suggestions.map((s) => ({\n title: s.title ?? s.prompt,\n label: s.label ?? \"\",\n prompt: s.prompt,\n })),\n });\n};\n\nexport const ThreadSuggestions = resource(useThreadSuggestions);\n"],"mappings":"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"}
1
+ {"version":3,"file":"suggestions.js","names":["useMemo","resource","withKey","ClientOutput","useClientLookup","shallowEqual","SuggestionsState","SuggestionState","ThreadSuggestion","SuggestionConfig","title","label","prompt","useStableSuggestionsState","next","cell","state","previous","suggestions","forEach","suggestion","previousSuggestion","length","push","useSuggestionClient","getState","SuggestionClient","useSuggestionsClient","nextState","$","_c","t0","map","_temp","suggestionClients","t1","t2","t3","index","index_0","get","useStaticSuggestions","_temp2","Suggestions","useThreadSuggestions","_temp3","ThreadSuggestions","s"],"sources":["../../../src/store/clients/suggestions.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useClientLookup } from \"@assistant-ui/store/client\";\nimport { shallowEqual } from \"@assistant-ui/store/internal\";\nimport type { SuggestionsState } from \"../scopes/suggestions\";\nimport type { SuggestionState } from \"../scopes/suggestion\";\nimport type { ThreadSuggestion } from \"../../runtime/interfaces/thread-runtime-core\";\n\nexport type SuggestionConfig =\n | string\n | { title: string; label: string; prompt: string };\n\nconst useStableSuggestionsState = (\n next: SuggestionsState,\n): SuggestionsState => {\n const cell = useMemo(() => ({}) as { state?: SuggestionsState }, []);\n const previous = cell.state;\n\n // forEach skips array holes, so a sparse caller array normalizes to a dense\n // list here, before the per-suggestion resource lookup indexes every slot.\n const suggestions: SuggestionState[] = [];\n next.suggestions.forEach((suggestion) => {\n // Probed at the compacted destination index, not the sparse source index,\n // so an equivalent hole-containing update keeps reusing prior identities.\n const previousSuggestion = previous?.suggestions[suggestions.length];\n suggestions.push(\n previousSuggestion && shallowEqual(previousSuggestion, suggestion)\n ? previousSuggestion\n : suggestion,\n );\n });\n const state =\n previous && shallowEqual(suggestions, previous.suggestions)\n ? previous\n : { suggestions };\n\n cell.state = state;\n return state;\n};\n\nconst useSuggestionClient = (\n state: SuggestionState,\n): ClientOutput<\"suggestion\"> => {\n return {\n getState: () => state,\n };\n};\n\nconst SuggestionClient = resource(useSuggestionClient);\n\nconst useSuggestionsClient = (\n nextState: SuggestionsState,\n): ClientOutput<\"suggestions\"> => {\n const state = useStableSuggestionsState(nextState);\n const suggestionClients = useClientLookup(\n state.suggestions.map((suggestion, index) =>\n withKey(index, SuggestionClient(suggestion), [suggestion]),\n ),\n );\n\n return {\n getState: () => state,\n suggestion: ({ index }: { index: number }) => {\n return suggestionClients.get({ index });\n },\n };\n};\n\nconst useStaticSuggestions = (\n suggestions?: SuggestionConfig[],\n): ClientOutput<\"suggestions\"> => {\n return useSuggestionsClient({\n suggestions: (suggestions ?? []).map((s) =>\n typeof s === \"string\"\n ? { title: s, label: \"\", prompt: s }\n : { title: s.title, label: s.label, prompt: s.prompt },\n ),\n });\n};\n\nexport const Suggestions = resource(useStaticSuggestions);\n\nconst useThreadSuggestions = (\n suggestions: readonly ThreadSuggestion[],\n): ClientOutput<\"suggestions\"> => {\n return useSuggestionsClient({\n suggestions: suggestions.map((s) => ({\n title: s.title ?? s.prompt,\n label: s.label ?? \"\",\n prompt: s.prompt,\n })),\n });\n};\n\nexport const ThreadSuggestions = resource(useThreadSuggestions);\n"],"mappings":"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"}
@@ -9,6 +9,7 @@ declare const ComposerClient: import("@assistant-ui/tap").Resource<ClientOutput<
9
9
  current: string;
10
10
  };
11
11
  runtime: ComposerRuntime;
12
+ isSuggestion?: ((text: string) => boolean) | undefined;
12
13
  }]>;
13
14
  //#endregion
14
15
  export { ComposerClient };
@@ -1 +1 @@
1
- {"version":3,"file":"composer-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"mappings":";;;cAuLa,4CAAc,SAAA;EAzHZ;IAAE;;EACA;IAAE;;EACR,SAAA"}
1
+ {"version":3,"file":"composer-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"mappings":";;;cAwNa,4CAAc,SAAA;EAzJZ;IAAE;;EACA;IAAE;;EACR,SAAA;EACM,iBAAE"}
@@ -2,7 +2,7 @@ import { useSubscribable } from "./useSubscribable.js";
2
2
  import { AttachmentRuntimeClient } from "./attachment-runtime-client.js";
3
3
  import { useAssistantEmit, useClientLookup } from "@assistant-ui/store/client";
4
4
  import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
5
- import { useEffect } from "@assistant-ui/tap/react-shim";
5
+ import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
6
6
  import { resource, useResource, withKey } from "@assistant-ui/tap";
7
7
  //#region src/store/runtime-clients/composer-runtime-client.ts
8
8
  const useComposerAttachmentClientByIndex = (t0) => {
@@ -38,31 +38,44 @@ const useQueueItemClient = ({ item, onMove, onRemove }) => {
38
38
  };
39
39
  const QueueItemClient = resource(useQueueItemClient);
40
40
  const useComposerClient = (t0) => {
41
- const $ = c(55);
42
- const { threadIdRef, messageIdRef, runtime } = t0;
41
+ const $ = c(63);
42
+ const { threadIdRef, messageIdRef, runtime, isSuggestion } = t0;
43
43
  const runtimeState = useSubscribable(runtime);
44
44
  const emit = useAssistantEmit();
45
+ const pendingSuggestion = useRef(false);
45
46
  let t1;
46
47
  let t2;
47
48
  if ($[0] !== emit || $[1] !== messageIdRef || $[2] !== runtime || $[3] !== threadIdRef) {
48
49
  t1 = () => {
49
50
  const unsubscribers = [];
50
- for (const event of ["send", "attachmentAdd"]) {
51
- const unsubscribe = runtime.unstable_on(event, () => {
52
- emit(`composer.${event}`, {
53
- threadId: threadIdRef.current,
54
- ...messageIdRef && { messageId: messageIdRef.current }
55
- });
51
+ const sendUnsubscribe = runtime.unstable_on("send", (payload) => {
52
+ const suggestion = pendingSuggestion.current;
53
+ pendingSuggestion.current = false;
54
+ emit("composer.send", {
55
+ threadId: threadIdRef.current,
56
+ ...messageIdRef && { messageId: messageIdRef.current },
57
+ chars: payload.chars,
58
+ attachments: payload.attachments,
59
+ ...suggestion ? { suggestion: true } : void 0
60
+ });
61
+ });
62
+ unsubscribers.push(sendUnsubscribe);
63
+ const attachmentUnsubscribe = runtime.unstable_on("attachmentAdd", (payload_0) => {
64
+ emit("composer.attachmentAdd", {
65
+ threadId: threadIdRef.current,
66
+ ...messageIdRef && { messageId: messageIdRef.current },
67
+ ...payload_0.contentType ? { contentType: payload_0.contentType } : void 0
56
68
  });
57
- unsubscribers.push(unsubscribe);
58
- }
59
- unsubscribers.push(runtime.unstable_on("attachmentAddError", (payload) => {
69
+ });
70
+ unsubscribers.push(attachmentUnsubscribe);
71
+ unsubscribers.push(runtime.unstable_on("attachmentAddError", (payload_1) => {
60
72
  emit("composer.attachmentAddError", {
61
73
  threadId: threadIdRef.current,
62
74
  ...messageIdRef && { messageId: messageIdRef.current },
63
- ...payload.attachmentId && { attachmentId: payload.attachmentId },
64
- reason: payload.reason,
65
- message: payload.message
75
+ ...payload_1.attachmentId && { attachmentId: payload_1.attachmentId },
76
+ reason: payload_1.reason,
77
+ message: payload_1.message,
78
+ ...payload_1.contentType ? { contentType: payload_1.contentType } : void 0
66
79
  });
67
80
  }));
68
81
  return () => {
@@ -162,34 +175,57 @@ const useComposerClient = (t0) => {
162
175
  $[30] = state;
163
176
  $[31] = t7;
164
177
  } else t7 = $[31];
165
- const t8 = runtime.beginEdit ?? _temp;
178
+ let t8;
179
+ if ($[32] !== isSuggestion || $[33] !== runtime) {
180
+ t8 = (options) => {
181
+ const state_0 = runtime.getState();
182
+ pendingSuggestion.current = state_0.canSend && (isSuggestion?.(state_0.text) ?? false);
183
+ runtime.send(options);
184
+ };
185
+ $[32] = isSuggestion;
186
+ $[33] = runtime;
187
+ $[34] = t8;
188
+ } else t8 = $[34];
166
189
  let t9;
167
- if ($[32] !== attachments) {
168
- t9 = (selector) => {
190
+ if ($[35] !== emit || $[36] !== messageIdRef || $[37] !== runtime || $[38] !== threadIdRef) {
191
+ t9 = () => {
192
+ if (!messageIdRef && runtime.getState().canCancel) emit("composer.cancel", { threadId: threadIdRef.current });
193
+ runtime.cancel();
194
+ };
195
+ $[35] = emit;
196
+ $[36] = messageIdRef;
197
+ $[37] = runtime;
198
+ $[38] = threadIdRef;
199
+ $[39] = t9;
200
+ } else t9 = $[39];
201
+ const t10 = runtime.beginEdit ?? _temp;
202
+ let t11;
203
+ if ($[40] !== attachments) {
204
+ t11 = (selector) => {
169
205
  if ("id" in selector) return attachments.get({ key: selector.id });
170
206
  else return attachments.get(selector);
171
207
  };
172
- $[32] = attachments;
173
- $[33] = t9;
174
- } else t9 = $[33];
175
- let t10;
176
- if ($[34] !== queueItems) {
177
- t10 = (selector_0) => {
208
+ $[40] = attachments;
209
+ $[41] = t11;
210
+ } else t11 = $[41];
211
+ let t12;
212
+ if ($[42] !== queueItems) {
213
+ t12 = (selector_0) => {
178
214
  if ("id" in selector_0) return queueItems.get({ key: selector_0.id });
179
215
  else return queueItems.get(selector_0);
180
216
  };
181
- $[34] = queueItems;
182
- $[35] = t10;
183
- } else t10 = $[35];
184
- let t11;
185
- if ($[36] !== runtime) {
186
- t11 = () => runtime;
187
- $[36] = runtime;
188
- $[37] = t11;
189
- } else t11 = $[37];
190
- let t12;
191
- if ($[38] !== runtime.addAttachment || $[39] !== runtime.cancel || $[40] !== runtime.clearAttachments || $[41] !== runtime.reset || $[42] !== runtime.send || $[43] !== runtime.setQuote || $[44] !== runtime.setRole || $[45] !== runtime.setRunConfig || $[46] !== runtime.setText || $[47] !== runtime.startDictation || $[48] !== runtime.stopDictation || $[49] !== t10 || $[50] !== t11 || $[51] !== t7 || $[52] !== t8 || $[53] !== t9) {
192
- t12 = {
217
+ $[42] = queueItems;
218
+ $[43] = t12;
219
+ } else t12 = $[43];
220
+ let t13;
221
+ if ($[44] !== runtime) {
222
+ t13 = () => runtime;
223
+ $[44] = runtime;
224
+ $[45] = t13;
225
+ } else t13 = $[45];
226
+ let t14;
227
+ if ($[46] !== runtime.addAttachment || $[47] !== runtime.clearAttachments || $[48] !== runtime.reset || $[49] !== runtime.setQuote || $[50] !== runtime.setRole || $[51] !== runtime.setRunConfig || $[52] !== runtime.setText || $[53] !== runtime.startDictation || $[54] !== runtime.stopDictation || $[55] !== t10 || $[56] !== t11 || $[57] !== t12 || $[58] !== t13 || $[59] !== t7 || $[60] !== t8 || $[61] !== t9) {
228
+ t14 = {
193
229
  getState: t7,
194
230
  setText: runtime.setText,
195
231
  setRole: runtime.setRole,
@@ -197,35 +233,35 @@ const useComposerClient = (t0) => {
197
233
  addAttachment: runtime.addAttachment,
198
234
  reset: runtime.reset,
199
235
  clearAttachments: runtime.clearAttachments,
200
- send: runtime.send,
201
- cancel: runtime.cancel,
202
- beginEdit: t8,
236
+ send: t8,
237
+ cancel: t9,
238
+ beginEdit: t10,
203
239
  startDictation: runtime.startDictation,
204
240
  stopDictation: runtime.stopDictation,
205
241
  setQuote: runtime.setQuote,
206
- attachment: t9,
207
- queueItem: t10,
208
- __internal_getRuntime: t11
242
+ attachment: t11,
243
+ queueItem: t12,
244
+ __internal_getRuntime: t13
209
245
  };
210
- $[38] = runtime.addAttachment;
211
- $[39] = runtime.cancel;
212
- $[40] = runtime.clearAttachments;
213
- $[41] = runtime.reset;
214
- $[42] = runtime.send;
215
- $[43] = runtime.setQuote;
216
- $[44] = runtime.setRole;
217
- $[45] = runtime.setRunConfig;
218
- $[46] = runtime.setText;
219
- $[47] = runtime.startDictation;
220
- $[48] = runtime.stopDictation;
221
- $[49] = t10;
222
- $[50] = t11;
223
- $[51] = t7;
224
- $[52] = t8;
225
- $[53] = t9;
226
- $[54] = t12;
227
- } else t12 = $[54];
228
- return t12;
246
+ $[46] = runtime.addAttachment;
247
+ $[47] = runtime.clearAttachments;
248
+ $[48] = runtime.reset;
249
+ $[49] = runtime.setQuote;
250
+ $[50] = runtime.setRole;
251
+ $[51] = runtime.setRunConfig;
252
+ $[52] = runtime.setText;
253
+ $[53] = runtime.startDictation;
254
+ $[54] = runtime.stopDictation;
255
+ $[55] = t10;
256
+ $[56] = t11;
257
+ $[57] = t12;
258
+ $[58] = t13;
259
+ $[59] = t7;
260
+ $[60] = t8;
261
+ $[61] = t9;
262
+ $[62] = t14;
263
+ } else t14 = $[62];
264
+ return t14;
229
265
  };
230
266
  const ComposerClient = resource(useComposerClient);
231
267
  function _temp() {
@@ -1 +1 @@
1
- {"version":3,"file":"composer-runtime-client.js","names":["Unsubscribe","useMemo","useEffect","useResource","resource","withKey","ClientOutput","useAssistantEmit","useClientLookup","ComposerRuntime","EditComposerRuntime","ComposerState","QueueItemState","QueuePlacement","AttachmentRuntimeClient","useSubscribable","useComposerAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","ComposerAttachmentClientByIndex","useQueueItemClient","item","onMove","onRemove","placement","getState","steer","lane","insertAfter","move","remove","QueueItemClient","useComposerClient","threadIdRef","messageIdRef","runtimeState","emit","unsubscribers","event","const","unsubscribe","unstable_on","threadId","current","messageId","push","payload","attachmentId","reason","message","unsub","t3","attachments","t4","attachment","idx","id","map","queue","t5","moveQueueItem","removeQueueItem","queueItems","type","t6","state","attachmentAccept","canCancel","canSend","dictation","isEditing","isEmpty","quote","role","runConfig","text","t7","t8","beginEdit","_temp","t9","selector","get","key","t10","selector_0","t11","t12","addAttachment","cancel","clearAttachments","reset","send","setQuote","setRole","setRunConfig","setText","startDictation","stopDictation","queueItem","__internal_getRuntime","ComposerClient","Error"],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useMemo, useEffect } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useAssistantEmit, useClientLookup } from \"@assistant-ui/store/client\";\nimport type {\n ComposerRuntime,\n EditComposerRuntime,\n} from \"../../runtime/api/composer-runtime\";\nimport type { ComposerState } from \"../scopes/composer\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { QueuePlacement } from \"../../runtime/queue/external-thread-queue-adapter\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useComposerAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: ComposerRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n\n return useResource(\n AttachmentRuntimeClient({\n runtime: attachmentRuntime,\n }),\n );\n};\n\nconst ComposerAttachmentClientByIndex = resource(\n useComposerAttachmentClientByIndex,\n);\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst useComposerClient = ({\n threadIdRef,\n messageIdRef,\n runtime,\n}: {\n threadIdRef: { current: string };\n messageIdRef?: { current: string };\n runtime: ComposerRuntime;\n}): ClientOutput<\"composer\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n\n // Bind composer events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to composer events\n for (const event of [\"send\", \"attachmentAdd\"] as const) {\n const unsubscribe = runtime.unstable_on(event, () => {\n emit(`composer.${event}`, {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n });\n });\n unsubscribers.push(unsubscribe);\n }\n\n unsubscribers.push(\n runtime.unstable_on(\"attachmentAddError\", (payload) => {\n // payload.error omitted: raw Error is not store-serializable; use runtime.unstable_on for it.\n emit(\"composer.attachmentAddError\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.attachmentId && { attachmentId: payload.attachmentId }),\n reason: payload.reason,\n message: payload.message,\n });\n }),\n );\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit, threadIdRef, messageIdRef]);\n\n const attachments = useClientLookup(\n runtimeState.attachments.map((attachment, idx) =>\n withKey(\n attachment.id,\n ComposerAttachmentClientByIndex({\n runtime,\n index: idx,\n }),\n [runtime, idx],\n ),\n ),\n );\n\n const queue = runtimeState.queue;\n const queueItems = useClientLookup(\n queue.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => runtime.moveQueueItem(item.id, placement),\n onRemove: () => runtime.removeQueueItem(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo<ComposerState>(() => {\n return {\n text: runtimeState.text,\n role: runtimeState.role,\n attachments: attachments.state,\n runConfig: runtimeState.runConfig,\n isEditing: runtimeState.isEditing,\n canCancel: runtimeState.canCancel,\n canSend: runtimeState.canSend,\n attachmentAccept: runtimeState.attachmentAccept,\n isEmpty: runtimeState.isEmpty,\n type: runtimeState.type ?? \"thread\",\n dictation: runtimeState.dictation,\n quote: runtimeState.quote,\n queue,\n };\n }, [runtimeState, attachments.state, queue]);\n\n return {\n getState: () => state,\n setText: runtime.setText,\n setRole: runtime.setRole,\n setRunConfig: runtime.setRunConfig,\n addAttachment: runtime.addAttachment,\n reset: runtime.reset,\n clearAttachments: runtime.clearAttachments,\n send: runtime.send,\n cancel: runtime.cancel,\n beginEdit:\n (runtime as EditComposerRuntime).beginEdit ??\n (() => {\n throw new Error(\"beginEdit is not supported in this runtime\");\n }),\n startDictation: runtime.startDictation,\n stopDictation: runtime.stopDictation,\n setQuote: runtime.setQuote,\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n queueItem: (selector) => {\n if (\"id\" in selector) {\n return queueItems.get({ key: selector.id });\n } else {\n return queueItems.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ComposerClient = resource(useComposerClient);\n"],"mappings":"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"}
1
+ {"version":3,"file":"composer-runtime-client.js","names":["Unsubscribe","useMemo","useEffect","useRef","useResource","resource","withKey","ClientOutput","useAssistantEmit","useClientLookup","ComposerRuntime","EditComposerRuntime","ComposerState","QueueItemState","QueuePlacement","AttachmentRuntimeClient","useSubscribable","useComposerAttachmentClientByIndex","t0","$","_c","runtime","index","t1","getAttachmentByIndex","attachmentRuntime","t2","ComposerAttachmentClientByIndex","useQueueItemClient","item","onMove","onRemove","placement","getState","steer","lane","insertAfter","move","remove","QueueItemClient","useComposerClient","threadIdRef","messageIdRef","isSuggestion","runtimeState","emit","pendingSuggestion","unsubscribers","sendUnsubscribe","unstable_on","payload","suggestion","current","threadId","messageId","chars","attachments","undefined","push","attachmentUnsubscribe","payload_0","contentType","payload_1","attachmentId","reason","message","unsub","t3","t4","attachment","idx","id","map","queue","t5","moveQueueItem","removeQueueItem","queueItems","type","t6","state","attachmentAccept","canCancel","canSend","dictation","isEditing","isEmpty","quote","role","runConfig","text","t7","t8","options","state_0","send","t9","cancel","t10","beginEdit","_temp","t11","selector","get","key","t12","selector_0","t13","t14","addAttachment","clearAttachments","reset","setQuote","setRole","setRunConfig","setText","startDictation","stopDictation","queueItem","__internal_getRuntime","ComposerClient","Error"],"sources":["../../../src/store/runtime-clients/composer-runtime-client.ts"],"sourcesContent":["import type { Unsubscribe } from \"../../types/unsubscribe\";\nimport { useMemo, useEffect, useRef } from \"react\";\nimport { useResource, resource, withKey } from \"@assistant-ui/tap\";\nimport type { ClientOutput } from \"@assistant-ui/store\";\nimport { useAssistantEmit, useClientLookup } from \"@assistant-ui/store/client\";\nimport type {\n ComposerRuntime,\n EditComposerRuntime,\n} from \"../../runtime/api/composer-runtime\";\nimport type { ComposerState } from \"../scopes/composer\";\nimport type { QueueItemState } from \"../scopes/queue-item\";\nimport type { QueuePlacement } from \"../../runtime/queue/external-thread-queue-adapter\";\nimport { AttachmentRuntimeClient } from \"./attachment-runtime-client\";\nimport { useSubscribable } from \"./useSubscribable\";\n\nconst useComposerAttachmentClientByIndex = ({\n runtime,\n index,\n}: {\n runtime: ComposerRuntime;\n index: number;\n}) => {\n const attachmentRuntime = useMemo(\n () => runtime.getAttachmentByIndex(index),\n [runtime, index],\n );\n\n return useResource(\n AttachmentRuntimeClient({\n runtime: attachmentRuntime,\n }),\n );\n};\n\nconst ComposerAttachmentClientByIndex = resource(\n useComposerAttachmentClientByIndex,\n);\n\nconst useQueueItemClient = ({\n item,\n onMove,\n onRemove,\n}: {\n item: QueueItemState;\n onMove: (placement: QueuePlacement) => void;\n onRemove: () => void;\n}): ClientOutput<\"queueItem\"> => {\n return {\n getState: () => item,\n steer: () => onMove({ lane: \"steer\", insertAfter: null }),\n move: onMove,\n remove: onRemove,\n };\n};\n\nconst QueueItemClient = resource(useQueueItemClient);\n\nconst useComposerClient = ({\n threadIdRef,\n messageIdRef,\n runtime,\n isSuggestion,\n}: {\n threadIdRef: { current: string };\n messageIdRef?: { current: string };\n runtime: ComposerRuntime;\n isSuggestion?: ((text: string) => boolean) | undefined;\n}): ClientOutput<\"composer\"> => {\n const runtimeState = useSubscribable(runtime);\n const emit = useAssistantEmit();\n const pendingSuggestion = useRef(false);\n\n // Bind composer events to event manager\n useEffect(() => {\n const unsubscribers: Unsubscribe[] = [];\n\n // Subscribe to composer events\n const sendUnsubscribe = runtime.unstable_on(\"send\", (payload) => {\n const suggestion = pendingSuggestion.current;\n pendingSuggestion.current = false;\n emit(\"composer.send\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n chars: payload.chars,\n attachments: payload.attachments,\n ...(suggestion ? { suggestion: true } : undefined),\n });\n });\n unsubscribers.push(sendUnsubscribe);\n\n const attachmentUnsubscribe = runtime.unstable_on(\n \"attachmentAdd\",\n (payload) => {\n emit(\"composer.attachmentAdd\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.contentType\n ? { contentType: payload.contentType }\n : undefined),\n });\n },\n );\n unsubscribers.push(attachmentUnsubscribe);\n\n unsubscribers.push(\n runtime.unstable_on(\"attachmentAddError\", (payload) => {\n // payload.error omitted: raw Error is not store-serializable; use runtime.unstable_on for it.\n emit(\"composer.attachmentAddError\", {\n threadId: threadIdRef.current,\n ...(messageIdRef && { messageId: messageIdRef.current }),\n ...(payload.attachmentId && { attachmentId: payload.attachmentId }),\n reason: payload.reason,\n message: payload.message,\n ...(payload.contentType\n ? { contentType: payload.contentType }\n : undefined),\n });\n }),\n );\n\n return () => {\n for (const unsub of unsubscribers) unsub();\n };\n }, [runtime, emit, threadIdRef, messageIdRef]);\n\n const attachments = useClientLookup(\n runtimeState.attachments.map((attachment, idx) =>\n withKey(\n attachment.id,\n ComposerAttachmentClientByIndex({\n runtime,\n index: idx,\n }),\n [runtime, idx],\n ),\n ),\n );\n\n const queue = runtimeState.queue;\n const queueItems = useClientLookup(\n queue.map((item) =>\n withKey(\n item.id,\n QueueItemClient({\n item,\n onMove: (placement) => runtime.moveQueueItem(item.id, placement),\n onRemove: () => runtime.removeQueueItem(item.id),\n }),\n ),\n ),\n );\n\n const state = useMemo<ComposerState>(() => {\n return {\n text: runtimeState.text,\n role: runtimeState.role,\n attachments: attachments.state,\n runConfig: runtimeState.runConfig,\n isEditing: runtimeState.isEditing,\n canCancel: runtimeState.canCancel,\n canSend: runtimeState.canSend,\n attachmentAccept: runtimeState.attachmentAccept,\n isEmpty: runtimeState.isEmpty,\n type: runtimeState.type ?? \"thread\",\n dictation: runtimeState.dictation,\n quote: runtimeState.quote,\n queue,\n };\n }, [runtimeState, attachments.state, queue]);\n\n return {\n getState: () => state,\n setText: runtime.setText,\n setRole: runtime.setRole,\n setRunConfig: runtime.setRunConfig,\n addAttachment: runtime.addAttachment,\n reset: runtime.reset,\n clearAttachments: runtime.clearAttachments,\n send: (options) => {\n const state = runtime.getState();\n pendingSuggestion.current =\n state.canSend && (isSuggestion?.(state.text) ?? false);\n runtime.send(options);\n },\n cancel: () => {\n if (!messageIdRef && runtime.getState().canCancel) {\n emit(\"composer.cancel\", { threadId: threadIdRef.current });\n }\n runtime.cancel();\n },\n beginEdit:\n (runtime as EditComposerRuntime).beginEdit ??\n (() => {\n throw new Error(\"beginEdit is not supported in this runtime\");\n }),\n startDictation: runtime.startDictation,\n stopDictation: runtime.stopDictation,\n setQuote: runtime.setQuote,\n attachment: (selector) => {\n if (\"id\" in selector) {\n return attachments.get({ key: selector.id });\n } else {\n return attachments.get(selector);\n }\n },\n queueItem: (selector) => {\n if (\"id\" in selector) {\n return queueItems.get({ key: selector.id });\n } else {\n return queueItems.get(selector);\n }\n },\n __internal_getRuntime: () => runtime,\n };\n};\n\nexport const ComposerClient = resource(useComposerClient);\n"],"mappings":"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"}
@@ -6,6 +6,7 @@ declare const MessageClient: import("@assistant-ui/tap").Resource<ClientOutput<"
6
6
  threadIdRef: {
7
7
  current: string;
8
8
  };
9
+ threadId: string;
9
10
  }]>;
10
11
  //#endregion
11
12
  export { MessageClient };
@@ -1 +1 @@
1
- {"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":";;;cAiJa,2CAAa,SAAA;EA/Ff,SAAA;EACI;IAAE"}
1
+ {"version":3,"file":"message-runtime-client.d.ts","names":[],"sources":["../../../src/store/runtime-clients/message-runtime-client.ts"],"mappings":";;;cAiMa,2CAAa,SAAA;EA1If,SAAA;EACI;IAAE;;EACL"}