@assistant-ui/core 0.2.21 → 0.2.22

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 (209) hide show
  1. package/dist/adapters/attachment.d.ts.map +1 -1
  2. package/dist/adapters/speech.d.ts.map +1 -1
  3. package/dist/adapters/speech.js +9 -2
  4. package/dist/adapters/speech.js.map +1 -1
  5. package/dist/adapters/voice.d.ts.map +1 -1
  6. package/dist/adapters/voice.js +13 -5
  7. package/dist/adapters/voice.js.map +1 -1
  8. package/dist/internal.d.ts +3 -1
  9. package/dist/internal.js +3 -1
  10. package/dist/model-context/frame/host.d.ts +1 -0
  11. package/dist/model-context/frame/host.d.ts.map +1 -1
  12. package/dist/model-context/frame/host.js +5 -0
  13. package/dist/model-context/frame/host.js.map +1 -1
  14. package/dist/model-context/frame/provider.d.ts.map +1 -1
  15. package/dist/model-context/frame/provider.js +1 -0
  16. package/dist/model-context/frame/provider.js.map +1 -1
  17. package/dist/model-context/interactable-composer-metadata.js.map +1 -1
  18. package/dist/react/AssistantProvider.js.map +1 -1
  19. package/dist/react/adapters/LocalStorageThreadListAdapter.d.ts.map +1 -1
  20. package/dist/react/adapters/LocalStorageThreadListAdapter.js +77 -50
  21. package/dist/react/adapters/LocalStorageThreadListAdapter.js.map +1 -1
  22. package/dist/react/client/Interactables.js.map +1 -1
  23. package/dist/react/client/Tools.d.ts.map +1 -1
  24. package/dist/react/client/interactable-model-context.d.ts.map +1 -1
  25. package/dist/react/model-context/useInteractable.js.map +1 -1
  26. package/dist/react/primitive-hooks/useActionBarCopy.js +13 -13
  27. package/dist/react/primitive-hooks/useActionBarCopy.js.map +1 -1
  28. package/dist/react/primitive-hooks/useComposerAddAttachment.d.ts.map +1 -1
  29. package/dist/react/primitive-hooks/useComposerSend.d.ts.map +1 -1
  30. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.d.ts.map +1 -1
  31. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js +1 -1
  32. package/dist/react/primitives/chainOfThought/ChainOfThoughtParts.js.map +1 -1
  33. package/dist/react/primitives/composer/ComposerAttachments.js.map +1 -1
  34. package/dist/react/primitives/composer/ComposerQueue.d.ts.map +1 -1
  35. package/dist/react/primitives/composer/ComposerQueue.js.map +1 -1
  36. package/dist/react/primitives/generativeUI/GenerativeUI.d.ts.map +1 -1
  37. package/dist/react/primitives/message/MessageAttachments.js.map +1 -1
  38. package/dist/react/primitives/message/MessageGroupedParts.js.map +1 -1
  39. package/dist/react/primitives/message/MessageParts.d.ts +2 -1
  40. package/dist/react/primitives/message/MessageParts.d.ts.map +1 -1
  41. package/dist/react/primitives/message/MessageParts.js +46 -36
  42. package/dist/react/primitives/message/MessageParts.js.map +1 -1
  43. package/dist/react/primitives/part/PartMessages.js.map +1 -1
  44. package/dist/react/primitives/thread/ThreadMessages.js.map +1 -1
  45. package/dist/react/primitives/thread/ThreadSuggestions.js.map +1 -1
  46. package/dist/react/primitives/threadList/ThreadListItems.js.map +1 -1
  47. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.d.ts.map +1 -1
  48. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js +18 -30
  49. package/dist/react/providers/ChainOfThoughtPartByIndexProvider.js.map +1 -1
  50. package/dist/react/providers/PartByIndexProvider.d.ts.map +1 -1
  51. package/dist/react/providers/PartByIndexProvider.js +18 -30
  52. package/dist/react/providers/PartByIndexProvider.js.map +1 -1
  53. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  54. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js +1 -0
  55. package/dist/react/runtimes/RemoteThreadListHookInstanceManager.js.map +1 -1
  56. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts +9 -2
  57. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  58. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js +49 -8
  59. package/dist/react/runtimes/RemoteThreadListThreadListRuntimeCore.js.map +1 -1
  60. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js +1 -1
  61. package/dist/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.js.map +1 -1
  62. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.d.ts.map +1 -1
  63. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js +2 -1
  64. package/dist/react/runtimes/cloud/CloudFileAttachmentAdapter.js.map +1 -1
  65. package/dist/react/runtimes/createMessageConverter.d.ts.map +1 -1
  66. package/dist/react/runtimes/external-message-converter.js +1 -1
  67. package/dist/react/runtimes/external-message-converter.js.map +1 -1
  68. package/dist/react/runtimes/useLocalRuntime.d.ts +1 -0
  69. package/dist/react/runtimes/useLocalRuntime.d.ts.map +1 -1
  70. package/dist/react/runtimes/useLocalRuntime.js +9 -1
  71. package/dist/react/runtimes/useLocalRuntime.js.map +1 -1
  72. package/dist/runtime/api/assistant-runtime.d.ts.map +1 -1
  73. package/dist/runtime/api/attachment-runtime.d.ts.map +1 -1
  74. package/dist/runtime/api/composer-runtime.d.ts.map +1 -1
  75. package/dist/runtime/api/message-part-runtime.d.ts.map +1 -1
  76. package/dist/runtime/api/message-runtime.d.ts.map +1 -1
  77. package/dist/runtime/api/message-runtime.js +4 -4
  78. package/dist/runtime/api/message-runtime.js.map +1 -1
  79. package/dist/runtime/api/thread-list-item-runtime.d.ts.map +1 -1
  80. package/dist/runtime/api/thread-list-item-runtime.js +2 -1
  81. package/dist/runtime/api/thread-list-item-runtime.js.map +1 -1
  82. package/dist/runtime/api/thread-list-runtime.d.ts.map +1 -1
  83. package/dist/runtime/api/thread-runtime.d.ts.map +1 -1
  84. package/dist/runtime/base/base-composer-runtime-core.d.ts +4 -1
  85. package/dist/runtime/base/base-composer-runtime-core.d.ts.map +1 -1
  86. package/dist/runtime/base/base-composer-runtime-core.js +41 -14
  87. package/dist/runtime/base/base-composer-runtime-core.js.map +1 -1
  88. package/dist/runtime/base/base-thread-runtime-core.d.ts.map +1 -1
  89. package/dist/runtime/base/base-thread-runtime-core.js +2 -1
  90. package/dist/runtime/base/base-thread-runtime-core.js.map +1 -1
  91. package/dist/runtime/base/default-edit-composer-runtime-core.d.ts.map +1 -1
  92. package/dist/runtime/base/default-edit-composer-runtime-core.js +4 -2
  93. package/dist/runtime/base/default-edit-composer-runtime-core.js.map +1 -1
  94. package/dist/runtime/base/default-thread-composer-runtime-core.d.ts.map +1 -1
  95. package/dist/runtime/base/default-thread-composer-runtime-core.js +2 -2
  96. package/dist/runtime/base/default-thread-composer-runtime-core.js.map +1 -1
  97. package/dist/runtime/utils/message-repository.d.ts.map +1 -1
  98. package/dist/runtime/utils/thread-message-like.js +4 -1
  99. package/dist/runtime/utils/thread-message-like.js.map +1 -1
  100. package/dist/runtimes/external-store/external-store-runtime-core.d.ts.map +1 -1
  101. package/dist/runtimes/external-store/external-store-thread-list-runtime-core.d.ts.map +1 -1
  102. package/dist/runtimes/external-store/external-store-thread-runtime-core.d.ts.map +1 -1
  103. package/dist/runtimes/external-store/external-store-thread-runtime-core.js.map +1 -1
  104. package/dist/runtimes/local/local-runtime-core.d.ts.map +1 -1
  105. package/dist/runtimes/local/local-thread-list-runtime-core.d.ts.map +1 -1
  106. package/dist/runtimes/local/local-thread-runtime-core.d.ts.map +1 -1
  107. package/dist/runtimes/local/local-thread-runtime-core.js +5 -2
  108. package/dist/runtimes/local/local-thread-runtime-core.js.map +1 -1
  109. package/dist/runtimes/readonly/ReadonlyThreadRuntimeCore.d.ts.map +1 -1
  110. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts +4 -4
  111. package/dist/runtimes/remote-thread-list/optimistic-state.d.ts.map +1 -1
  112. package/dist/runtimes/remote-thread-list/optimistic-state.js +22 -9
  113. package/dist/runtimes/remote-thread-list/optimistic-state.js.map +1 -1
  114. package/dist/runtimes/remote-thread-list/types.d.ts +1 -1
  115. package/dist/runtimes/tool-invocations/ToolInvocationTracker.d.ts.map +1 -1
  116. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js +1 -2
  117. package/dist/runtimes/tool-invocations/ToolInvocationTracker.js.map +1 -1
  118. package/dist/store/clients/chain-of-thought-client.d.ts.map +1 -1
  119. package/dist/store/clients/no-op-composer-client.d.ts.map +1 -1
  120. package/dist/store/runtime-clients/attachment-runtime-client.d.ts.map +1 -1
  121. package/dist/store/runtime-clients/composer-runtime-client.d.ts.map +1 -1
  122. package/dist/store/runtime-clients/message-part-runtime-client.d.ts.map +1 -1
  123. package/dist/store/runtime-clients/message-runtime-client.d.ts.map +1 -1
  124. package/dist/store/runtime-clients/thread-list-item-runtime-client.d.ts.map +1 -1
  125. package/dist/store/runtime-clients/thread-list-runtime-client.d.ts.map +1 -1
  126. package/dist/store/runtime-clients/thread-runtime-client.d.ts.map +1 -1
  127. package/dist/subscribable/subscribable.d.ts +1 -1
  128. package/dist/subscribable/subscribable.d.ts.map +1 -1
  129. package/dist/subscribable/subscribable.js +11 -3
  130. package/dist/subscribable/subscribable.js.map +1 -1
  131. package/dist/tests/remote-thread-list-test-helpers.d.ts +2 -1
  132. package/dist/tests/remote-thread-list-test-helpers.d.ts.map +1 -1
  133. package/dist/tests/remote-thread-list-test-helpers.js +5 -2
  134. package/dist/tests/remote-thread-list-test-helpers.js.map +1 -1
  135. package/dist/types/attachment.d.ts +2 -1
  136. package/dist/types/attachment.d.ts.map +1 -1
  137. package/dist/types/attachment.js +6 -0
  138. package/dist/types/attachment.js.map +1 -0
  139. package/dist/types/message.d.ts +1 -0
  140. package/dist/types/message.d.ts.map +1 -1
  141. package/dist/types/message.js.map +1 -1
  142. package/dist/utils/data-url.d.ts +9 -0
  143. package/dist/utils/data-url.d.ts.map +1 -0
  144. package/dist/utils/data-url.js +14 -0
  145. package/dist/utils/data-url.js.map +1 -0
  146. package/dist/utils/notify-event-listeners.d.ts +6 -0
  147. package/dist/utils/notify-event-listeners.d.ts.map +1 -0
  148. package/dist/utils/notify-event-listeners.js +16 -0
  149. package/dist/utils/notify-event-listeners.js.map +1 -0
  150. package/package.json +10 -9
  151. package/src/adapters/speech.test.ts +88 -0
  152. package/src/adapters/speech.ts +17 -2
  153. package/src/adapters/voice.test.ts +130 -0
  154. package/src/adapters/voice.ts +26 -6
  155. package/src/internal.ts +5 -0
  156. package/src/model-context/frame/host.test.ts +100 -0
  157. package/src/model-context/frame/host.ts +10 -0
  158. package/src/model-context/frame/provider.test.ts +83 -0
  159. package/src/model-context/frame/provider.ts +1 -0
  160. package/src/react/adapters/LocalStorageThreadListAdapter.test.ts +82 -0
  161. package/src/react/adapters/LocalStorageThreadListAdapter.tsx +94 -54
  162. package/src/react/primitive-hooks/useActionBarCopy.test.ts +79 -0
  163. package/src/react/primitive-hooks/useActionBarCopy.ts +4 -3
  164. package/src/react/primitives/chainOfThought/ChainOfThoughtParts.tsx +1 -3
  165. package/src/react/primitives/message/MessageParts.tsx +48 -35
  166. package/src/react/providers/ChainOfThoughtPartByIndexProvider.tsx +19 -2
  167. package/src/react/providers/PartByIndexProvider.tsx +16 -2
  168. package/src/react/runtimes/RemoteThreadListHookInstanceManager.test.tsx +18 -0
  169. package/src/react/runtimes/RemoteThreadListHookInstanceManager.tsx +1 -0
  170. package/src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx +48 -7
  171. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.test.tsx +69 -0
  172. package/src/react/runtimes/cloud/AssistantCloudThreadHistoryAdapter.ts +1 -1
  173. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.test.ts +16 -0
  174. package/src/react/runtimes/cloud/CloudFileAttachmentAdapter.ts +2 -1
  175. package/src/react/runtimes/external-message-converter.test.tsx +21 -0
  176. package/src/react/runtimes/external-message-converter.ts +1 -1
  177. package/src/react/runtimes/useLocalRuntime.test.tsx +56 -0
  178. package/src/react/runtimes/useLocalRuntime.ts +13 -1
  179. package/src/runtime/api/message-runtime.test.ts +81 -0
  180. package/src/runtime/api/message-runtime.ts +4 -6
  181. package/src/runtime/api/thread-list-item-runtime.ts +6 -1
  182. package/src/runtime/base/base-composer-runtime-core.ts +77 -31
  183. package/src/runtime/base/base-thread-runtime-core.ts +2 -1
  184. package/src/runtime/base/default-edit-composer-runtime-core.ts +4 -2
  185. package/src/runtime/base/default-thread-composer-runtime-core.ts +2 -2
  186. package/src/runtime/utils/thread-message-like.ts +1 -0
  187. package/src/runtimes/local/local-thread-runtime-core.test.ts +150 -1
  188. package/src/runtimes/local/local-thread-runtime-core.ts +4 -2
  189. package/src/runtimes/remote-thread-list/optimistic-state.test.ts +63 -0
  190. package/src/runtimes/remote-thread-list/optimistic-state.ts +49 -17
  191. package/src/runtimes/remote-thread-list/types.ts +1 -1
  192. package/src/runtimes/tool-invocations/EDGE_CASES.md +13 -19
  193. package/src/runtimes/tool-invocations/ToolInvocationTracker.test.ts +127 -6
  194. package/src/runtimes/tool-invocations/ToolInvocationTracker.ts +4 -2
  195. package/src/subscribable/subscribable.test.ts +58 -0
  196. package/src/subscribable/subscribable.ts +13 -3
  197. package/src/tests/OptimisticState-list-race.test.ts +33 -0
  198. package/src/tests/RemoteThreadListThreadListRuntimeCore-switchToThread-order.test.ts +223 -0
  199. package/src/tests/base-composer-runtime-core-addAttachment.test.ts +44 -0
  200. package/src/tests/base-composer-runtime-core-send.test.ts +433 -5
  201. package/src/tests/default-edit-composer-runtime-core.test.ts +43 -5
  202. package/src/tests/event-subscription-listener-errors.test.ts +205 -0
  203. package/src/tests/remote-thread-list-test-helpers.ts +14 -7
  204. package/src/tests/thread-message-like.test.ts +57 -0
  205. package/src/types/attachment.ts +5 -0
  206. package/src/types/message.ts +1 -0
  207. package/src/utils/data-url.test.ts +50 -0
  208. package/src/utils/data-url.ts +9 -0
  209. package/src/utils/notify-event-listeners.ts +30 -0
@@ -1,41 +1,29 @@
1
1
  import { AuiProvider, Derived, useAui } from "@assistant-ui/store";
2
- import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
+ import { useMemo } from "@assistant-ui/tap/react-shim";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  //#region src/react/providers/PartByIndexProvider.tsx
5
- const PartByIndexProvider = (t0) => {
6
- const $ = c(7);
7
- const { index, children } = t0;
8
- let t1;
9
- if ($[0] !== index) {
10
- t1 = Derived({
5
+ const PartByIndexProvider = ({ index, children }) => {
6
+ const lastPartRef = useMemo(() => ({
7
+ index,
8
+ current: null
9
+ }), [index]);
10
+ return /* @__PURE__ */ jsx(AuiProvider, {
11
+ value: useAui({ part: Derived({
11
12
  source: "message",
12
13
  query: {
13
14
  type: "index",
14
15
  index
15
16
  },
16
- get: (aui) => aui.message().part({ index })
17
- });
18
- $[0] = index;
19
- $[1] = t1;
20
- } else t1 = $[1];
21
- let t2;
22
- if ($[2] !== t1) {
23
- t2 = { part: t1 };
24
- $[2] = t1;
25
- $[3] = t2;
26
- } else t2 = $[3];
27
- const aui_0 = useAui(t2);
28
- let t3;
29
- if ($[4] !== aui_0 || $[5] !== children) {
30
- t3 = /* @__PURE__ */ jsx(AuiProvider, {
31
- value: aui_0,
32
- children
33
- });
34
- $[4] = aui_0;
35
- $[5] = children;
36
- $[6] = t3;
37
- } else t3 = $[6];
38
- return t3;
17
+ get: (aui) => {
18
+ const message = aui.message();
19
+ if (index >= message.getState().parts.length && lastPartRef.current) return lastPartRef.current;
20
+ const part = message.part({ index });
21
+ lastPartRef.current = part;
22
+ return part;
23
+ }
24
+ }) }),
25
+ children
26
+ });
39
27
  };
40
28
  //#endregion
41
29
  export { PartByIndexProvider };
@@ -1 +1 @@
1
- {"version":3,"file":"PartByIndexProvider.js","names":["FC","PropsWithChildren","useAui","AuiProvider","Derived","PartByIndexProvider","index","t0","$","_c","children","t1","source","query","type","get","aui","message","part","t2","aui_0","t3"],"sources":["../../../src/react/providers/PartByIndexProvider.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport { useAui, AuiProvider, Derived } from \"@assistant-ui/store\";\n\nexport const PartByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const aui = useAui({\n part: Derived({\n source: \"message\",\n query: { type: \"index\", index },\n get: (aui) => aui.message().part({ index }),\n }),\n });\n\n return <AuiProvider value={aui}>{children}</AuiProvider>;\n};\n"],"mappings":";;;;AAGA,MAAaK,uBAITE,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAC,MAAA,EAAAH,OAAAI,aAAAH;CAAmB,IAAAI;CAAA,IAAAH,EAAA,OAAAF,OAAA;EAEdK,KAAAP,QAAQ;GAAAQ,QACJ;GAASC,OACV;IAAAC,MAAQ;IAAOR;GAAQ;GAACS,MAC1BC,QAASA,IAAGC,QAAS,CAAC,CAAAC,KAAM,EAAAZ,MAAQ,CAAC;EAC5C,CAAC;EAACE,EAAA,KAAAF;EAAAE,EAAA,KAAAG;CAAA,OAAAA,KAAAH,EAAA;CAAA,IAAAW;CAAA,IAAAX,EAAA,OAAAG,IAAA;EALeQ,KAAA,EAAAD,MACXP,GAKR;EAACH,EAAA,KAAAG;EAAAH,EAAA,KAAAW;CAAA,OAAAA,KAAAX,EAAA;CAND,MAAAY,QAAYlB,OAAOiB,EAMlB;CAAE,IAAAE;CAAA,IAAAb,EAAA,OAAAY,SAAAZ,EAAA,OAAAE,UAAA;EAEIW,KAAA,oBAAC,aAAD;GAAoBL,OAAAA;GAAMN;EAAd,CAAA;EAAqCF,EAAA,KAAAY;EAAAZ,EAAA,KAAAE;EAAAF,EAAA,KAAAa;CAAA,OAAAA,KAAAb,EAAA;CAAA,OAAjDa;AAAiD"}
1
+ {"version":3,"file":"PartByIndexProvider.js","names":["useMemo","FC","PropsWithChildren","useAui","AuiProvider","Derived","PartMethods","PartByIndexProvider","index","children","lastPartRef","current","aui","part","source","query","type","get","message","getState","parts","length"],"sources":["../../../src/react/providers/PartByIndexProvider.tsx"],"sourcesContent":["import { useMemo, type FC, type PropsWithChildren } from \"react\";\nimport { useAui, AuiProvider, Derived } from \"@assistant-ui/store\";\nimport type { PartMethods } from \"../../store/scopes/part\";\n\nexport const PartByIndexProvider: FC<\n PropsWithChildren<{\n index: number;\n }>\n> = ({ index, children }) => {\n const lastPartRef = useMemo(\n () => ({ index, current: null as PartMethods | null }),\n [index],\n );\n const aui = useAui({\n part: Derived({\n source: \"message\",\n query: { type: \"index\", index },\n get: (aui) => {\n const message = aui.message();\n if (index >= message.getState().parts.length && lastPartRef.current) {\n return lastPartRef.current;\n }\n\n const part = message.part({ index });\n lastPartRef.current = part;\n return part;\n },\n }),\n });\n\n return <AuiProvider value={aui}>{children}</AuiProvider>;\n};\n"],"mappings":";;;;AAIA,MAAaO,uBAIR,EAAEC,OAAOC,eAAe;CAC3B,MAAMC,cAAcV,eACX;EAAEQ;EAAOG,SAAS;CAA2B,IACpD,CAACH,KAAK,CACR;CAkBA,OAAO,oBAAC,aAAD;EAAa,OAjBRL,OAAO,EACjBU,MAAMR,QAAQ;GACZS,QAAQ;GACRC,OAAO;IAAEC,MAAM;IAASR;GAAM;GAC9BS,MAAML,QAAQ;IACZ,MAAMM,UAAUN,IAAIM,QAAQ;IAC5B,IAAIV,SAASU,QAAQC,SAAS,CAAC,CAACC,MAAMC,UAAUX,YAAYC,SAC1D,OAAOD,YAAYC;IAGrB,MAAME,OAAOK,QAAQL,KAAK,EAAEL,MAAM,CAAC;IACnCE,YAAYC,UAAUE;IACtB,OAAOA;GACT;EACF,CAAC,EACH,CAE2BD;EAAMH;CAAsB,CAAA;AACzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadListHookInstanceManager.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"mappings":";;;;;;;;;;;;;;;KAuBK,6BAA6B;cAcrB,4CAA4C;UAC/C;UAGA;UACA;UACA;cAGN,aAAa,sBACb,QAAQ;EAOH,mBAAmB,mBAAgB,QAAA;;;eAPhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BH,qBAAqB,mBAAgB;;;eAxBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BnC,kBAAkB;EAKlB,eAAe,gBAAgB;UAS9B;UAkEA;EAqCD,iCAAiC;IACtC,UAAU,cAAc"}
1
+ {"version":3,"file":"RemoteThreadListHookInstanceManager.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"mappings":";;;;;;;;;;;;;;;KAuBK,6BAA6B;cAcrB,4CAA4C;UAC/C;UAGA;UACA;UACA;EAGN,YAAA,aAAa,sBACb,QAAQ;EAOH,mBAAmB,mBAAgB,QAAA;;;eAPhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+BH,qBAAqB,mBAAgB;;;eAxBF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BnC,kBAAkB;EAMlB,eAAe,gBAAgB;UAS9B;UAkEA;EAqCD,iCAAiC;IACtC,UAAU,cAAc"}
@@ -66,6 +66,7 @@ var RemoteThreadListHookInstanceManager = class extends BaseSubscribable {
66
66
  stopThreadRuntime(threadId) {
67
67
  this.instances.delete(threadId);
68
68
  this.useAliveThreadsKeysChanged.setState({}, true);
69
+ this._notifySubscribers();
69
70
  }
70
71
  setRuntimeHook(newRuntimeHook) {
71
72
  if (this.useRuntimeHook.getState().useRuntime !== newRuntimeHook) this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadListHookInstanceManager.js","names":["FC","RefObject","useCallback","useRef","useEffect","useLayoutEffect","memo","PropsWithChildren","ComponentType","useMemo","Fragment","UseBoundStore","StoreApi","create","useAui","ThreadListItemRuntimeProvider","ThreadRuntimeCore","ThreadListRuntimeCore","AssistantRuntime","BaseSubscribable","ThreadRuntimeImpl","ThreadListRuntimeImpl","RemoteThreadListHook","RemoteThreadListHookInstance","runtime","ProviderRenderDetector","detectorRef","t0","$","_c","t1","t2","current","RemoteThreadListHookInstanceManager","useRuntimeHook","useRuntime","instances","Map","useAliveThreadsKeysChanged","parent","constructor","runtimeHook","startThreadRuntime","threadId","has","set","setState","Promise","resolve","reject","callback","instance","get","dispose","Error","subscribe","getThreadRuntimeCore","undefined","stopThreadRuntime","delete","setRuntimeHook","newRuntimeHook","prevRuntimeHook","getState","_RuntimeBinder","children","threadBinding","thread","__internal_threadBinding","updateRuntime","aliveThread","_notifySubscribers","isMounted","outerSubscribe","aui","initPromiseRef","hasInitializedRef","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","state","threadListItem","status","initialize","generateTitle","_OuterActiveThreadProvider","provider","Provider","getItemById","process","env","NODE_ENV","id","setTimeout","console","warn","clearTimeout","__internal_RenderThreadRuntimes","Array","from","keys","map"],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"sourcesContent":["import {\n type FC,\n type RefObject,\n useCallback,\n useRef,\n useEffect,\n useLayoutEffect,\n memo,\n type PropsWithChildren,\n type ComponentType,\n useMemo,\n Fragment,\n} from \"react\";\nimport { type UseBoundStore, type StoreApi, create } from \"zustand\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { ThreadListItemRuntimeProvider } from \"../providers/ThreadListItemRuntimeProvider\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport { ThreadListRuntimeImpl } from \"../../runtime/api/thread-list-runtime\";\n\ntype RemoteThreadListHook = () => AssistantRuntime;\n\ntype RemoteThreadListHookInstance = {\n runtime?: ThreadRuntimeCore;\n};\n\nconst ProviderRenderDetector: FC<{\n detectorRef: RefObject<boolean>;\n}> = ({ detectorRef }) => {\n useLayoutEffect(() => {\n detectorRef.current = true;\n }, [detectorRef]);\n return null;\n};\nexport class RemoteThreadListHookInstanceManager extends BaseSubscribable {\n private useRuntimeHook: UseBoundStore<\n StoreApi<{ useRuntime: RemoteThreadListHook }>\n >;\n private instances = new Map<string, RemoteThreadListHookInstance>();\n private useAliveThreadsKeysChanged = create(() => ({}));\n private parent: ThreadListRuntimeCore;\n\n constructor(\n runtimeHook: RemoteThreadListHook,\n parent: ThreadListRuntimeCore,\n ) {\n super();\n this.parent = parent;\n this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));\n }\n\n public startThreadRuntime(threadId: string) {\n if (!this.instances.has(threadId)) {\n this.instances.set(threadId, {});\n this.useAliveThreadsKeysChanged.setState({}, true);\n }\n\n return new Promise<ThreadRuntimeCore>((resolve, reject) => {\n const callback = () => {\n const instance = this.instances.get(threadId);\n if (!instance) {\n dispose();\n reject(new Error(\"Thread was deleted before runtime was started\"));\n } else if (!instance.runtime) {\n return; // misc update\n } else {\n dispose();\n resolve(instance.runtime);\n }\n };\n const dispose = this.subscribe(callback);\n callback();\n });\n }\n\n public getThreadRuntimeCore(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return undefined;\n return instance.runtime;\n }\n\n public stopThreadRuntime(threadId: string) {\n this.instances.delete(threadId);\n this.useAliveThreadsKeysChanged.setState({}, true);\n }\n\n public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {\n const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;\n if (prevRuntimeHook !== newRuntimeHook) {\n this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);\n }\n }\n\n // Rendered as a child of the user's Provider so the runtime hook can\n // read context the Provider injects (e.g. RuntimeAdapterProvider).\n private _RuntimeBinder: FC<PropsWithChildren<{ threadId: string }>> = ({\n threadId,\n children,\n }) => {\n const { useRuntime } = this.useRuntimeHook();\n const runtime = useRuntime();\n\n const threadBinding = (runtime.thread as ThreadRuntimeImpl)\n .__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n const aliveThread = this.instances.get(threadId);\n if (!aliveThread)\n throw new Error(\n `Thread \"${threadId}\" runtime binding not found. This is a bug in assistant-ui.`,\n );\n\n aliveThread.runtime = threadBinding.getState();\n this._notifySubscribers();\n }, [threadId, threadBinding]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const aui = useAui();\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n\n useEffect(() => {\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);\n }\n }, [threadBinding]);\n\n useEffect(() => {\n hasInitializedRef.current = false;\n return runtime.threads.main.unstable_on(\"initialize\", () => {\n if (hasInitializedRef.current) return;\n\n const state = aui.threadListItem().getState();\n if (state.status !== \"new\") return;\n hasInitializedRef.current = true;\n\n initPromiseRef.current = aui.threadListItem().initialize();\n\n const dispose = runtime.thread.unstable_on(\"runEnd\", () => {\n dispose();\n aui.threadListItem().generateTitle();\n });\n });\n }, [runtime, aui]);\n\n return <>{children}</>;\n };\n\n private _OuterActiveThreadProvider: FC<{\n threadId: string;\n provider: ComponentType<PropsWithChildren>;\n }> = memo(({ threadId, provider: Provider }) => {\n const runtime = useMemo(\n () => new ThreadListRuntimeImpl(this.parent).getItemById(threadId),\n [threadId],\n );\n\n const detectorRef = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\" && Provider !== Fragment) {\n const id = setTimeout(() => {\n if (!detectorRef.current) {\n console.warn(\n \"RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. \" +\n \"Render `children` on first commit; deferring them behind a loading state, Suspense boundary, \" +\n \"or `useEffect` gate strands the runtime binder and leaves the thread without context.\",\n );\n }\n }, 100);\n return () => clearTimeout(id);\n }\n return undefined;\n }, [Provider]);\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <Provider>\n <this._RuntimeBinder threadId={threadId}>\n <ProviderRenderDetector detectorRef={detectorRef} />\n </this._RuntimeBinder>\n </Provider>\n </ThreadListItemRuntimeProvider>\n );\n });\n\n public __internal_RenderThreadRuntimes: FC<{\n provider: ComponentType<PropsWithChildren>;\n }> = ({ provider }) => {\n this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change\n\n return Array.from(this.instances.keys()).map((threadId) => (\n <this._OuterActiveThreadProvider\n key={threadId}\n threadId={threadId}\n provider={provider}\n />\n ));\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteThreadListHookInstanceManager.js","names":["FC","RefObject","useCallback","useRef","useEffect","useLayoutEffect","memo","PropsWithChildren","ComponentType","useMemo","Fragment","UseBoundStore","StoreApi","create","useAui","ThreadListItemRuntimeProvider","ThreadRuntimeCore","ThreadListRuntimeCore","AssistantRuntime","BaseSubscribable","ThreadRuntimeImpl","ThreadListRuntimeImpl","RemoteThreadListHook","RemoteThreadListHookInstance","runtime","ProviderRenderDetector","detectorRef","t0","$","_c","t1","t2","current","RemoteThreadListHookInstanceManager","useRuntimeHook","useRuntime","instances","Map","useAliveThreadsKeysChanged","parent","constructor","runtimeHook","startThreadRuntime","threadId","has","set","setState","Promise","resolve","reject","callback","instance","get","dispose","Error","subscribe","getThreadRuntimeCore","undefined","stopThreadRuntime","delete","_notifySubscribers","setRuntimeHook","newRuntimeHook","prevRuntimeHook","getState","_RuntimeBinder","children","threadBinding","thread","__internal_threadBinding","updateRuntime","aliveThread","isMounted","outerSubscribe","aui","initPromiseRef","hasInitializedRef","runtimeCore","setGetInitializePromise","Record","__internal_setGetInitializePromise","call","threads","main","unstable_on","state","threadListItem","status","initialize","generateTitle","_OuterActiveThreadProvider","provider","Provider","getItemById","process","env","NODE_ENV","id","setTimeout","console","warn","clearTimeout","__internal_RenderThreadRuntimes","Array","from","keys","map"],"sources":["../../../src/react/runtimes/RemoteThreadListHookInstanceManager.tsx"],"sourcesContent":["import {\n type FC,\n type RefObject,\n useCallback,\n useRef,\n useEffect,\n useLayoutEffect,\n memo,\n type PropsWithChildren,\n type ComponentType,\n useMemo,\n Fragment,\n} from \"react\";\nimport { type UseBoundStore, type StoreApi, create } from \"zustand\";\nimport { useAui } from \"@assistant-ui/store\";\nimport { ThreadListItemRuntimeProvider } from \"../providers/ThreadListItemRuntimeProvider\";\nimport type { ThreadRuntimeCore } from \"../../runtime/interfaces/thread-runtime-core\";\nimport type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport type { AssistantRuntime } from \"../../runtime/api/assistant-runtime\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport type { ThreadRuntimeImpl } from \"../../runtime/api/thread-runtime\";\nimport { ThreadListRuntimeImpl } from \"../../runtime/api/thread-list-runtime\";\n\ntype RemoteThreadListHook = () => AssistantRuntime;\n\ntype RemoteThreadListHookInstance = {\n runtime?: ThreadRuntimeCore;\n};\n\nconst ProviderRenderDetector: FC<{\n detectorRef: RefObject<boolean>;\n}> = ({ detectorRef }) => {\n useLayoutEffect(() => {\n detectorRef.current = true;\n }, [detectorRef]);\n return null;\n};\nexport class RemoteThreadListHookInstanceManager extends BaseSubscribable {\n private useRuntimeHook: UseBoundStore<\n StoreApi<{ useRuntime: RemoteThreadListHook }>\n >;\n private instances = new Map<string, RemoteThreadListHookInstance>();\n private useAliveThreadsKeysChanged = create(() => ({}));\n private parent: ThreadListRuntimeCore;\n\n constructor(\n runtimeHook: RemoteThreadListHook,\n parent: ThreadListRuntimeCore,\n ) {\n super();\n this.parent = parent;\n this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));\n }\n\n public startThreadRuntime(threadId: string) {\n if (!this.instances.has(threadId)) {\n this.instances.set(threadId, {});\n this.useAliveThreadsKeysChanged.setState({}, true);\n }\n\n return new Promise<ThreadRuntimeCore>((resolve, reject) => {\n const callback = () => {\n const instance = this.instances.get(threadId);\n if (!instance) {\n dispose();\n reject(new Error(\"Thread was deleted before runtime was started\"));\n } else if (!instance.runtime) {\n return; // misc update\n } else {\n dispose();\n resolve(instance.runtime);\n }\n };\n const dispose = this.subscribe(callback);\n callback();\n });\n }\n\n public getThreadRuntimeCore(threadId: string) {\n const instance = this.instances.get(threadId);\n if (!instance) return undefined;\n return instance.runtime;\n }\n\n public stopThreadRuntime(threadId: string) {\n this.instances.delete(threadId);\n this.useAliveThreadsKeysChanged.setState({}, true);\n this._notifySubscribers();\n }\n\n public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {\n const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;\n if (prevRuntimeHook !== newRuntimeHook) {\n this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);\n }\n }\n\n // Rendered as a child of the user's Provider so the runtime hook can\n // read context the Provider injects (e.g. RuntimeAdapterProvider).\n private _RuntimeBinder: FC<PropsWithChildren<{ threadId: string }>> = ({\n threadId,\n children,\n }) => {\n const { useRuntime } = this.useRuntimeHook();\n const runtime = useRuntime();\n\n const threadBinding = (runtime.thread as ThreadRuntimeImpl)\n .__internal_threadBinding;\n\n const updateRuntime = useCallback(() => {\n const aliveThread = this.instances.get(threadId);\n if (!aliveThread)\n throw new Error(\n `Thread \"${threadId}\" runtime binding not found. This is a bug in assistant-ui.`,\n );\n\n aliveThread.runtime = threadBinding.getState();\n this._notifySubscribers();\n }, [threadId, threadBinding]);\n\n const isMounted = useRef(false);\n if (!isMounted.current) {\n updateRuntime();\n }\n\n useEffect(() => {\n isMounted.current = true;\n updateRuntime();\n return threadBinding.outerSubscribe(updateRuntime);\n }, [threadBinding, updateRuntime]);\n\n const aui = useAui();\n const initPromiseRef = useRef<Promise<unknown> | undefined>(undefined);\n const hasInitializedRef = useRef(false);\n\n useEffect(() => {\n const runtimeCore = threadBinding.getState();\n const setGetInitializePromise = (runtimeCore as Record<string, unknown>)\n .__internal_setGetInitializePromise;\n if (typeof setGetInitializePromise === \"function\") {\n setGetInitializePromise.call(runtimeCore, () => initPromiseRef.current);\n }\n }, [threadBinding]);\n\n useEffect(() => {\n hasInitializedRef.current = false;\n return runtime.threads.main.unstable_on(\"initialize\", () => {\n if (hasInitializedRef.current) return;\n\n const state = aui.threadListItem().getState();\n if (state.status !== \"new\") return;\n hasInitializedRef.current = true;\n\n initPromiseRef.current = aui.threadListItem().initialize();\n\n const dispose = runtime.thread.unstable_on(\"runEnd\", () => {\n dispose();\n aui.threadListItem().generateTitle();\n });\n });\n }, [runtime, aui]);\n\n return <>{children}</>;\n };\n\n private _OuterActiveThreadProvider: FC<{\n threadId: string;\n provider: ComponentType<PropsWithChildren>;\n }> = memo(({ threadId, provider: Provider }) => {\n const runtime = useMemo(\n () => new ThreadListRuntimeImpl(this.parent).getItemById(threadId),\n [threadId],\n );\n\n const detectorRef = useRef(false);\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\" && Provider !== Fragment) {\n const id = setTimeout(() => {\n if (!detectorRef.current) {\n console.warn(\n \"RemoteThreadListAdapter.unstable_Provider did not render its `children` synchronously. \" +\n \"Render `children` on first commit; deferring them behind a loading state, Suspense boundary, \" +\n \"or `useEffect` gate strands the runtime binder and leaves the thread without context.\",\n );\n }\n }, 100);\n return () => clearTimeout(id);\n }\n return undefined;\n }, [Provider]);\n\n return (\n <ThreadListItemRuntimeProvider runtime={runtime}>\n <Provider>\n <this._RuntimeBinder threadId={threadId}>\n <ProviderRenderDetector detectorRef={detectorRef} />\n </this._RuntimeBinder>\n </Provider>\n </ThreadListItemRuntimeProvider>\n );\n });\n\n public __internal_RenderThreadRuntimes: FC<{\n provider: ComponentType<PropsWithChildren>;\n }> = ({ provider }) => {\n this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change\n\n return Array.from(this.instances.keys()).map((threadId) => (\n <this._OuterActiveThreadProvider\n key={threadId}\n threadId={threadId}\n provider={provider}\n />\n ));\n };\n}\n"],"mappings":"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"}
@@ -9,7 +9,7 @@ import { AddToolResultOptions, RespondToToolApprovalOptions, ResumeRunConfig, Re
9
9
  import { ThreadListRuntimeCore } from "../../runtime/interfaces/thread-list-runtime-core.js";
10
10
  import { BaseSubscribable } from "../../subscribable/subscribable.js";
11
11
  import "../../store/index.js";
12
- import { RemoteThreadInitializeResponse, RemoteThreadListOptions } from "../../runtimes/remote-thread-list/types.js";
12
+ import { RemoteThreadListOptions } from "../../runtimes/remote-thread-list/types.js";
13
13
  import { RemoteThreadData, THREAD_MAPPING_ID } from "../../runtimes/remote-thread-list/remote-thread-state.js";
14
14
  import "../../internal.js";
15
15
  import "../../index.js";
@@ -21,6 +21,8 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
21
21
  private _loadThreadsPromise;
22
22
  private _loadMorePromise;
23
23
  private _loadGeneration;
24
+ private _switchGeneration;
25
+ private _switchTask;
24
26
  private _mainThreadId;
25
27
  private readonly _state;
26
28
  get threadItems(): Readonly<Record<THREAD_MAPPING_ID, RemoteThreadData>>;
@@ -149,8 +151,13 @@ declare class RemoteThreadListThreadListRuntimeCore extends BaseSubscribable imp
149
151
  switchToThread(threadIdOrRemoteId: string, options?: {
150
152
  unarchive?: boolean;
151
153
  }): Promise<void>;
154
+ private _switchToThread;
152
155
  switchToNewThread(): Promise<void>;
153
- initialize: (threadId: string) => Promise<RemoteThreadInitializeResponse>;
156
+ private _switchToNewThread;
157
+ initialize: (threadId: string) => Promise<{
158
+ remoteId: string;
159
+ externalId: string | undefined;
160
+ }>;
154
161
  generateTitle: (threadId: string) => Promise<void>;
155
162
  rename(threadIdOrRemoteId: string, newTitle: string): Promise<void>;
156
163
  updateCustom(threadIdOrRemoteId: string, custom: Record<string, unknown> | undefined): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;;;cAoCa,8CACH,4BACG;UAEH;mBACS;UAET;UACA;UACA;UAEA;mBACS;MAWN,eAAW,SAAA,OAvBX,mBAuBW;EAIf,yBAAqB;EAsDrB,YAAY;mBAmDF;cAGf,SAAS,yBACT,iBAAiB;UAoBX;UACA;EAED,sBAAsB,SAAS;EA0B/B;EAUA,UAAM;MAWF;MAIA;MAIA;MAIA;MAIA;MAIA;MAIA;cAMC;UAKJ;UAEA;EAOD,4BAAwB;;;eAvDlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DN,qBAAqB,6BAA0B;;;eANvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBxB,YAAY,6BAA0B;EAIhC,eACX,4BACA;IAAY;MACX;EA+EU,qBAAqB;EAyC3B,aAAoB,qBAAgB,QAzCT;EA+F3B,gBAAuB,qBAAgB;EAmCvC,OAAO,4BAA4B,mBAAmB;EA6BtD,aACL,4BACA,QAAQ,sCACP;UAiDW;EASD,QAAQ,6BAA0B;EAmBxC,UAAU,6BAA6B;EAsBjC,OAAO,6BAA0B;EAoBjC,OAAO,6BAA6B;UAUzC;EAED,4BAA4B"}
1
+ {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.d.ts","names":[],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"mappings":";;;;;;;;;;;;;;;;;cAoCa,8CACH,4BACG;UAEH;mBACS;UAET;UACA;UACA;UACA;UACA;UAEA;mBACS;MAWN,eAAW,SAAA,OAzBX,mBAyBW;EAIf,yBAAqB;EAsDrB,YAAY;mBAmDF;EAGf,YAAA,SAAS,yBACT,iBAAiB;UAoBX;UACA;EAED,sBAAsB,SAAS;EA0B/B;EAUA,UAAM;MAWF;MAIA;MAIA;MAIA;MAIA;MAIA;MAIA;cAMC;UAKJ;UAEA;EAOD,4BAAwB;;;eAvDlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DN,qBAAqB,6BAA0B;;;eANvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBxB,YAAY,6BAA0B;EAItC,eACL,4BACA;IAAY;MACX;UAOW;EAwFP,qBAAqB;UAOd;EA0CP,aAAoB,qBAAgB;;;;EAwDpC,gBAAuB,qBAAgB;EAmCvC,OAAO,4BAA4B,mBAAmB;EA6BtD,aACL,4BACA,QAAQ,sCACP;UAiDW;EAsBD,QAAQ,6BAA0B;EAmBxC,UAAU,6BAA6B;EAsBjC,OAAO,6BAA0B;EAoBjC,OAAO,6BAA6B;UAUzC;EAED,4BAA4B"}
@@ -18,6 +18,8 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
18
18
  _loadThreadsPromise;
19
19
  _loadMorePromise;
20
20
  _loadGeneration = 0;
21
+ _switchGeneration = 0;
22
+ _switchTask;
21
23
  _mainThreadId;
22
24
  _state = new OptimisticState({
23
25
  isLoading: true,
@@ -216,10 +218,17 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
216
218
  getItemById(threadIdOrRemoteId) {
217
219
  return getThreadData(this._state.value, threadIdOrRemoteId);
218
220
  }
219
- async switchToThread(threadIdOrRemoteId, options) {
221
+ switchToThread(threadIdOrRemoteId, options) {
222
+ const generation = ++this._switchGeneration;
223
+ const task = this._switchToThread(threadIdOrRemoteId, options, generation);
224
+ this._switchTask = task;
225
+ return task;
226
+ }
227
+ async _switchToThread(threadIdOrRemoteId, options, generation) {
220
228
  let data = this.getItemById(threadIdOrRemoteId);
221
229
  if (!data) {
222
230
  const remoteMetadata = await this._options.adapter.fetch(threadIdOrRemoteId);
231
+ if (generation !== this._switchGeneration) return;
223
232
  const state = this._state.value;
224
233
  const mappingId = createThreadMappingId(remoteMetadata.remoteId);
225
234
  const newThreadData = {
@@ -260,13 +269,26 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
260
269
  const task = this._hookManager.startThreadRuntime(data.id);
261
270
  if (this.mainThreadId !== void 0) await task;
262
271
  else task.then(() => this._notifySubscribers());
263
- if (data.status === "archived" && options?.unarchive !== false) await this.unarchive(data.id);
272
+ if (generation !== this._switchGeneration) return;
273
+ if (data.status === "archived" && options?.unarchive !== false) {
274
+ await this.unarchive(data.id);
275
+ if (generation !== this._switchGeneration) return;
276
+ }
264
277
  this._mainThreadId = data.id;
265
278
  this._notifySubscribers();
266
279
  this._notifyThreadIdChange();
267
280
  }
268
- async switchToNewThread() {
269
- while (this._state.baseValue.newThreadId !== void 0 && this._state.value.newThreadId === void 0) await this._state.waitForUpdate();
281
+ switchToNewThread() {
282
+ const generation = ++this._switchGeneration;
283
+ const task = this._switchToNewThread(generation);
284
+ this._switchTask = task;
285
+ return task;
286
+ }
287
+ async _switchToNewThread(generation) {
288
+ while (this._state.baseValue.newThreadId !== void 0 && this._state.value.newThreadId === void 0) {
289
+ await this._state.waitForUpdate();
290
+ if (generation !== this._switchGeneration) return;
291
+ }
270
292
  const state = this._state.value;
271
293
  let id = this._state.value.newThreadId;
272
294
  if (id === void 0) {
@@ -294,16 +316,20 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
294
316
  }
295
317
  });
296
318
  }
297
- return this.switchToThread(id);
319
+ return this._switchToThread(id, void 0, generation);
298
320
  }
299
321
  initialize = async (threadId) => {
300
322
  if (this._state.value.newThreadId !== threadId) {
301
323
  const data = this.getItemById(threadId);
302
324
  if (!data) throw threadNotFoundError(threadId, "initializing it");
303
325
  if (data.status === "new") throw threadStatusError(threadId, data.status, "be initialized here");
304
- return data.initializeTask;
326
+ const { remoteId, externalId } = await data.initializeTask;
327
+ return {
328
+ remoteId,
329
+ externalId
330
+ };
305
331
  }
306
- return this._state.optimisticUpdate({
332
+ const { remoteId, externalId } = await this._state.optimisticUpdate({
307
333
  execute: () => {
308
334
  return this._options.adapter.initialize(threadId);
309
335
  },
@@ -348,6 +374,10 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
348
374
  };
349
375
  }
350
376
  });
377
+ return {
378
+ remoteId,
379
+ externalId
380
+ };
351
381
  };
352
382
  generateTitle = async (threadId) => {
353
383
  const data = this.getItemById(threadId);
@@ -431,7 +461,18 @@ var RemoteThreadListThreadListRuntimeCore = class extends BaseSubscribable {
431
461
  }
432
462
  async _ensureThreadIsNotMain(threadId) {
433
463
  if (threadId === this.newThreadId) throw new Error("Cannot ensure new thread is not main");
434
- if (threadId === this._mainThreadId) await this.switchToNewThread();
464
+ let lastAwaitedTask;
465
+ while (threadId === this._mainThreadId) {
466
+ let switchTask = this._switchTask;
467
+ const startedFallback = !switchTask || switchTask === lastAwaitedTask;
468
+ if (startedFallback) switchTask = this.switchToNewThread();
469
+ lastAwaitedTask = switchTask;
470
+ try {
471
+ await switchTask;
472
+ } catch (error) {
473
+ if (startedFallback && this._switchTask === switchTask) throw error;
474
+ }
475
+ }
435
476
  }
436
477
  async archive(threadIdOrRemoteId) {
437
478
  const data = this.getItemById(threadIdOrRemoteId);
@@ -1 +1 @@
1
- {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","generateId","BaseSubscribable","OptimisticState","EMPTY_THREAD_CORE","RemoteThreadData","RemoteThreadState","classifyThreads","createThreadMappingId","getThreadData","normalizeCursor","updateStatusReducer","RemoteThreadListOptions","RemoteThreadListHookInstanceManager","FC","Fragment","useEffect","useId","create","AssistantMessageStream","ModelContextProvider","RuntimeAdapterProvider","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_mainThreadId","_state","isLoading","isLoadingMore","cursor","undefined","newThreadId","threadIds","archivedThreadIds","threadIdMap","threadData","threadItems","value","getLoadThreadsPromise","generation","optimisticUpdate","execute","adapter","list","loading","state","then","l","fresh","threads","nextCursor","catch","error","console","update","baseValue","loadMore","initialState","resolve","dedup","after","appended","contextProvider","constructor","options","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","useProvider","Provider","unstable_Provider","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","getState","setState","setRuntimeHook","__internal_load","startThreadId","threadId","initialThreadId","switchToThread","reload","hasMore","mainThreadId","_mainThreadRemoteId","remoteId","_lastNotifiedThreadId","onThreadIdChange","getMainThreadRuntimeCore","result","getThreadRuntimeCore","data","getItemById","id","unarchive","remoteMetadata","fetch","mappingId","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","threadIdsWithoutRemote","filter","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","task","startThreadRuntime","waitForUpdate","initialize","optimistic","generateTitle","runtimeCore","messages","stream","messageStream","fromAssistantStream","newTitle","parts","c","type","text","currentData","rename","updateCustom","Record","_ensureThreadIsNotMain","archive","delete","stopThreadRuntime","detach","useBoundIds","__internal_RenderComponent","s","i","boundIds","adapters","modelContext","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { generateId } from \"../../utils/id\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n updateStatusReducer,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type { RemoteThreadListOptions } from \"../../runtimes/remote-thread-list/types\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport { type FC, Fragment, useEffect, useId } from \"react\";\nimport { create } from \"zustand\";\nimport { AssistantMessageStream } from \"assistant-stream\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>({\n isLoading: true,\n isLoadingMore: false,\n cursor: undefined,\n newThreadId: undefined,\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n return {\n ...state,\n isLoading: true,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n return {\n ...state,\n isLoading: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: {\n ...state.threadIdMap,\n ...fresh.threadIdMap,\n },\n threadData: {\n ...state.threadData,\n ...fresh.threadData,\n },\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n });\n })\n .then(() => {});\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => ({ ...state, isLoadingMore: true }),\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n private readonly contextProvider: ModelContextProvider;\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n this.contextProvider = contextProvider;\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this.useProvider = create(() => ({\n Provider: options.adapter.unstable_Provider ?? Fragment,\n }));\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private useProvider;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n\n this._options = options;\n\n const Provider = options.adapter.unstable_Provider ?? Fragment;\n if (Provider !== this.useProvider.getState().Provider) {\n this.useProvider.setState({ Provider }, true);\n }\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n }\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (!this._initialThreadLoaded && startThreadId) {\n this._initialThreadLoaded = true;\n this.switchToThread(startThreadId).catch(() => {});\n }\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange() {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n this._options.onThreadIdChange?.(threadId);\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public async switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // Filter both arrays first so a concurrent `list()` can't leave the id\n // duplicated or under the wrong status.\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n task.then(() => this._notifySubscribers());\n }\n\n if (data.status === \"archived\" && options?.unarchive !== false) {\n await this.unarchive(data.id);\n }\n this._mainThreadId = data.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange();\n }\n\n public async switchToNewThread(): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n }\n\n const state = this._state.value;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n do {\n id = `__LOCALID_${generateId()}`;\n } while (state.threadIdMap[id]);\n\n const mappingId = createThreadMappingId(id);\n this._state.update({\n ...state,\n newThreadId: id,\n threadIdMap: {\n ...state.threadIdMap,\n [id]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n status: \"new\",\n id,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n custom: undefined,\n } satisfies RemoteThreadData,\n },\n });\n }\n\n return this.switchToThread(id);\n }\n\n public initialize = async (threadId: string) => {\n if (this._state.value.newThreadId !== threadId) {\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n return data.initializeTask;\n }\n\n return this._state.optimisticUpdate({\n execute: () => {\n return this._options.adapter.initialize(threadId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, threadId, \"regular\");\n },\n loading: (state, task) => {\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...state.threadData[mappingId],\n initializeTask: task,\n },\n },\n };\n },\n then: (state, { remoteId, externalId }) => {\n const data = getThreadData(state, threadId);\n if (!data) return state;\n\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...data,\n initializeTask: Promise.resolve({ remoteId, externalId }),\n remoteId,\n externalId,\n },\n },\n };\n },\n });\n };\n\n public generateTitle = async (threadId: string) => {\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n const messages = runtimeCore.messages;\n const stream = await this._options.adapter.generateTitle(\n remoteId,\n messages,\n );\n const messageStream = AssistantMessageStream.fromAssistantStream(stream);\n for await (const result of messageStream) {\n const newTitle = result.parts.filter((c) => c.type === \"text\")[0]?.text;\n const state = this._state.baseValue;\n const currentData = getThreadData(state, data.id);\n if (!currentData) continue;\n this._state.update({\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n });\n }\n };\n\n public rename(threadIdOrRemoteId: string, newTitle: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n title: newTitle,\n },\n },\n };\n },\n });\n }\n\n public updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!this._options.adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n const adapter = this._options.adapter;\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n if (threadId === this._mainThreadId) {\n await this.switchToNewThread();\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public unarchive(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.unarchive(remoteId);\n } catch (error) {\n await this._ensureThreadIsNotMain(data.id);\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private useBoundIds = create<string[]>(() => []);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.useBoundIds.setState((s) => [...s, id], true);\n return () => {\n this.useBoundIds.setState((s) => s.filter((i) => i !== id), true);\n };\n }, [id]);\n\n const boundIds = this.useBoundIds();\n const { Provider } = this.useProvider();\n\n const adapters = {\n modelContext: this.contextProvider,\n };\n\n return (\n (boundIds.length === 0 || boundIds[0] === id) && (\n // only render if the component is the first one mounted\n <RuntimeAdapterProvider adapters={adapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"RemoteThreadListThreadListRuntimeCore.js","names":["ThreadListRuntimeCore","generateId","BaseSubscribable","OptimisticState","EMPTY_THREAD_CORE","RemoteThreadData","RemoteThreadState","classifyThreads","createThreadMappingId","getThreadData","normalizeCursor","updateStatusReducer","RemoteThreadListOptions","RemoteThreadListHookInstanceManager","FC","Fragment","useEffect","useId","create","AssistantMessageStream","ModelContextProvider","RuntimeAdapterProvider","threadNotFoundError","threadIdOrRemoteId","action","Error","threadStatusError","status","RemoteThreadListThreadListRuntimeCore","_options","_hookManager","_loadThreadsPromise","Promise","_loadMorePromise","_loadGeneration","_switchGeneration","_switchTask","_mainThreadId","_state","isLoading","isLoadingMore","cursor","undefined","newThreadId","threadIds","archivedThreadIds","threadIdMap","threadData","threadItems","value","getLoadThreadsPromise","generation","optimisticUpdate","execute","adapter","list","loading","state","then","l","fresh","threads","nextCursor","catch","error","console","update","baseValue","loadMore","initialState","resolve","dedup","after","appended","contextProvider","constructor","options","subscribe","_notifySubscribers","_notifyThreadIdChange","runtimeHook","useProvider","Provider","unstable_Provider","__internal_setOptions","switchToNewThread","_initialThreadLoaded","adapterChanged","getState","setState","setRuntimeHook","__internal_load","startThreadId","threadId","initialThreadId","switchToThread","reload","hasMore","mainThreadId","_mainThreadRemoteId","remoteId","_lastNotifiedThreadId","onThreadIdChange","getMainThreadRuntimeCore","result","getThreadRuntimeCore","data","getItemById","id","unarchive","task","_switchToThread","remoteMetadata","fetch","mappingId","newThreadData","initializeTask","externalId","title","lastMessageAt","custom","newThreadIdMap","threadIdsWithoutRemote","filter","archivedThreadIdsWithoutRemote","newThreadIds","newArchivedThreadIds","startThreadRuntime","_switchToNewThread","waitForUpdate","initialize","optimistic","generateTitle","runtimeCore","messages","stream","messageStream","fromAssistantStream","newTitle","parts","c","type","text","currentData","rename","updateCustom","Record","_ensureThreadIsNotMain","lastAwaitedTask","switchTask","startedFallback","archive","delete","stopThreadRuntime","detach","useBoundIds","__internal_RenderComponent","s","i","boundIds","adapters","modelContext","length"],"sources":["../../../src/react/runtimes/RemoteThreadListThreadListRuntimeCore.tsx"],"sourcesContent":["import type { ThreadListRuntimeCore } from \"../../runtime/interfaces/thread-list-runtime-core\";\nimport { generateId } from \"../../utils/id\";\nimport { BaseSubscribable } from \"../../subscribable/subscribable\";\nimport { OptimisticState } from \"../../runtimes/remote-thread-list/optimistic-state\";\nimport { EMPTY_THREAD_CORE } from \"../../runtimes/remote-thread-list/empty-thread-core\";\nimport type {\n RemoteThreadData,\n RemoteThreadState,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport {\n classifyThreads,\n createThreadMappingId,\n getThreadData,\n normalizeCursor,\n updateStatusReducer,\n} from \"../../runtimes/remote-thread-list/remote-thread-state\";\nimport type { RemoteThreadListOptions } from \"../../runtimes/remote-thread-list/types\";\nimport { RemoteThreadListHookInstanceManager } from \"./RemoteThreadListHookInstanceManager\";\nimport { type FC, Fragment, useEffect, useId } from \"react\";\nimport { create } from \"zustand\";\nimport { AssistantMessageStream } from \"assistant-stream\";\nimport type { ModelContextProvider } from \"../../model-context/types\";\nimport { RuntimeAdapterProvider } from \"./RuntimeAdapterProvider\";\n\nconst threadNotFoundError = (threadIdOrRemoteId: string, action: string) =>\n new Error(`Thread \"${threadIdOrRemoteId}\" not found while ${action}.`);\n\nconst threadStatusError = (\n threadIdOrRemoteId: string,\n status: RemoteThreadData[\"status\"],\n action: string,\n) =>\n new Error(\n `Thread \"${threadIdOrRemoteId}\" has status \"${status}\", so it cannot ${action}.`,\n );\n\nexport class RemoteThreadListThreadListRuntimeCore\n extends BaseSubscribable\n implements ThreadListRuntimeCore\n{\n private _options!: RemoteThreadListOptions;\n private readonly _hookManager: RemoteThreadListHookInstanceManager;\n\n private _loadThreadsPromise: Promise<void> | undefined;\n private _loadMorePromise: Promise<void> | undefined;\n private _loadGeneration = 0;\n private _switchGeneration = 0;\n private _switchTask: Promise<void> | undefined;\n\n private _mainThreadId!: string;\n private readonly _state = new OptimisticState<RemoteThreadState>({\n isLoading: true,\n isLoadingMore: false,\n cursor: undefined,\n newThreadId: undefined,\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n public get threadItems() {\n return this._state.value.threadData;\n }\n\n public getLoadThreadsPromise() {\n // TODO this needs to be cached in case this promise is loaded during suspense\n if (!this._loadThreadsPromise) {\n const generation = this._loadGeneration;\n this._loadThreadsPromise = this._state\n .optimisticUpdate({\n execute: () => this._options.adapter.list(),\n loading: (state) => {\n return {\n ...state,\n isLoading: true,\n };\n },\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n const fresh = classifyThreads(l.threads, {\n threadIds: [],\n archivedThreadIds: [],\n threadIdMap: {},\n threadData: {},\n });\n\n return {\n ...state,\n isLoading: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: fresh.threadIds,\n archivedThreadIds: fresh.archivedThreadIds,\n threadIdMap: {\n ...state.threadIdMap,\n ...fresh.threadIdMap,\n },\n threadData: {\n ...state.threadData,\n ...fresh.threadData,\n },\n };\n },\n })\n .catch((error: unknown) => {\n if (generation !== this._loadGeneration) return;\n console.error(\"[assistant-ui] thread list load failed:\", error);\n this._loadThreadsPromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n isLoading: false,\n });\n })\n .then(() => {});\n }\n\n return this._loadThreadsPromise;\n }\n\n public loadMore(): Promise<void> {\n if (this._loadMorePromise) return this._loadMorePromise;\n\n const initialState = this._state.value;\n if (initialState.cursor === undefined || initialState.isLoading) {\n return Promise.resolve();\n }\n\n const generation = this._loadGeneration;\n const adapter = this._options.adapter;\n const cursor = initialState.cursor;\n\n const dedup = this._state\n .optimisticUpdate({\n execute: () => adapter.list({ after: cursor }),\n loading: (state) => ({ ...state, isLoadingMore: true }),\n then: (state, l) => {\n if (generation !== this._loadGeneration) return state;\n if (adapter !== this._options.adapter) return state;\n\n const appended = classifyThreads(l.threads, {\n threadIds: [...state.threadIds],\n archivedThreadIds: [...state.archivedThreadIds],\n threadIdMap: { ...state.threadIdMap },\n threadData: { ...state.threadData },\n });\n\n return {\n ...state,\n isLoadingMore: false,\n cursor: normalizeCursor(l.nextCursor),\n threadIds: appended.threadIds,\n archivedThreadIds: appended.archivedThreadIds,\n threadIdMap: appended.threadIdMap,\n threadData: appended.threadData,\n };\n },\n })\n .catch((error: unknown) => {\n console.error(\"[assistant-ui] thread list loadMore failed:\", error);\n })\n .then(() => {\n if (this._loadMorePromise === dedup) {\n this._loadMorePromise = undefined;\n }\n });\n\n this._loadMorePromise = dedup;\n return dedup;\n }\n\n private readonly contextProvider: ModelContextProvider;\n\n constructor(\n options: RemoteThreadListOptions,\n contextProvider: ModelContextProvider,\n ) {\n super();\n this.contextProvider = contextProvider;\n\n this._state.subscribe(() => {\n this._notifySubscribers();\n this._notifyThreadIdChange();\n });\n this._hookManager = new RemoteThreadListHookInstanceManager(\n options.runtimeHook,\n this,\n );\n this.useProvider = create(() => ({\n Provider: options.adapter.unstable_Provider ?? Fragment,\n }));\n this.__internal_setOptions(options);\n this.switchToNewThread();\n }\n\n private _initialThreadLoaded = false;\n private useProvider;\n\n public __internal_setOptions(options: RemoteThreadListOptions) {\n if (this._options === options) return;\n\n const adapterChanged =\n this._options !== undefined && this._options.adapter !== options.adapter;\n\n this._options = options;\n\n const Provider = options.adapter.unstable_Provider ?? Fragment;\n if (Provider !== this.useProvider.getState().Provider) {\n this.useProvider.setState({ Provider }, true);\n }\n\n this._hookManager.setRuntimeHook(options.runtimeHook);\n\n if (adapterChanged) {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n }\n }\n\n public __internal_load() {\n this.getLoadThreadsPromise(); // begin loading on initial bind\n const startThreadId =\n this._options.threadId ?? this._options.initialThreadId;\n if (!this._initialThreadLoaded && startThreadId) {\n this._initialThreadLoaded = true;\n this.switchToThread(startThreadId).catch(() => {});\n }\n }\n\n public reload() {\n this._loadGeneration++;\n this._loadThreadsPromise = undefined;\n this._loadMorePromise = undefined;\n this._state.update({\n ...this._state.baseValue,\n cursor: undefined,\n });\n return this.getLoadThreadsPromise();\n }\n\n public get isLoading() {\n return this._state.value.isLoading;\n }\n\n public get isLoadingMore() {\n return this._state.value.isLoadingMore;\n }\n\n public get hasMore() {\n return this._state.value.cursor !== undefined;\n }\n\n public get threadIds() {\n return this._state.value.threadIds;\n }\n\n public get archivedThreadIds() {\n return this._state.value.archivedThreadIds;\n }\n\n public get newThreadId() {\n return this._state.value.newThreadId;\n }\n\n public get mainThreadId(): string {\n return this._mainThreadId;\n }\n\n // The settled remote ID of the active thread, or undefined while it is still\n // a new/optimistic thread. This is the value surfaced to `onThreadIdChange`.\n private get _mainThreadRemoteId(): string | undefined {\n if (this._mainThreadId === undefined) return undefined;\n return getThreadData(this._state.value, this._mainThreadId)?.remoteId;\n }\n\n private _lastNotifiedThreadId: string | undefined = undefined;\n\n private _notifyThreadIdChange() {\n const threadId = this._mainThreadRemoteId;\n if (this._lastNotifiedThreadId === threadId) return;\n this._lastNotifiedThreadId = threadId;\n this._options.onThreadIdChange?.(threadId);\n }\n\n public getMainThreadRuntimeCore() {\n const result = this._hookManager.getThreadRuntimeCore(this._mainThreadId);\n if (!result) return EMPTY_THREAD_CORE;\n return result;\n }\n\n public getThreadRuntimeCore(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(threadIdOrRemoteId, \"getting its runtime\");\n\n const result = this._hookManager.getThreadRuntimeCore(data.id);\n if (!result)\n throw new Error(\n `Runtime for thread \"${threadIdOrRemoteId}\" not found while getting its runtime.`,\n );\n return result;\n }\n\n public getItemById(threadIdOrRemoteId: string) {\n return getThreadData(this._state.value, threadIdOrRemoteId);\n }\n\n public switchToThread(\n threadIdOrRemoteId: string,\n options?: { unarchive?: boolean },\n ): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToThread(threadIdOrRemoteId, options, generation);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToThread(\n threadIdOrRemoteId: string,\n options: { unarchive?: boolean } | undefined,\n generation: number,\n ): Promise<void> {\n let data = this.getItemById(threadIdOrRemoteId);\n\n if (!data) {\n const remoteMetadata =\n await this._options.adapter.fetch(threadIdOrRemoteId);\n if (generation !== this._switchGeneration) return;\n\n const state = this._state.value;\n const mappingId = createThreadMappingId(remoteMetadata.remoteId);\n\n const newThreadData = {\n ...state.threadData,\n [mappingId]: {\n id: mappingId,\n initializeTask: Promise.resolve({\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n }),\n remoteId: remoteMetadata.remoteId,\n externalId: remoteMetadata.externalId,\n status: remoteMetadata.status,\n title: remoteMetadata.title,\n lastMessageAt: remoteMetadata.lastMessageAt,\n custom: remoteMetadata.custom,\n } as RemoteThreadData,\n };\n\n const newThreadIdMap = {\n ...state.threadIdMap,\n [remoteMetadata.remoteId]: mappingId,\n };\n\n // Filter both arrays first so a concurrent `list()` can't leave the id\n // duplicated or under the wrong status.\n const threadIdsWithoutRemote = state.threadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n const archivedThreadIdsWithoutRemote = state.archivedThreadIds.filter(\n (id) => id !== remoteMetadata.remoteId,\n );\n\n const newThreadIds =\n remoteMetadata.status === \"regular\"\n ? [...threadIdsWithoutRemote, remoteMetadata.remoteId]\n : threadIdsWithoutRemote;\n const newArchivedThreadIds =\n remoteMetadata.status === \"archived\"\n ? [...archivedThreadIdsWithoutRemote, remoteMetadata.remoteId]\n : archivedThreadIdsWithoutRemote;\n\n this._state.update({\n ...state,\n threadIds: newThreadIds,\n archivedThreadIds: newArchivedThreadIds,\n threadIdMap: newThreadIdMap,\n threadData: newThreadData,\n });\n\n data = this.getItemById(threadIdOrRemoteId);\n }\n\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"switching to it\");\n if (this._mainThreadId === data.id) return;\n\n const task = this._hookManager.startThreadRuntime(data.id);\n if (this.mainThreadId !== undefined) {\n await task;\n } else {\n task.then(() => this._notifySubscribers());\n }\n\n if (generation !== this._switchGeneration) return;\n\n if (data.status === \"archived\" && options?.unarchive !== false) {\n await this.unarchive(data.id);\n if (generation !== this._switchGeneration) return;\n }\n this._mainThreadId = data.id;\n\n this._notifySubscribers();\n this._notifyThreadIdChange();\n }\n\n public switchToNewThread(): Promise<void> {\n const generation = ++this._switchGeneration;\n const task = this._switchToNewThread(generation);\n this._switchTask = task;\n return task;\n }\n\n private async _switchToNewThread(generation: number): Promise<void> {\n // an initialization transaction is in progress, wait for it to settle\n while (\n this._state.baseValue.newThreadId !== undefined &&\n this._state.value.newThreadId === undefined\n ) {\n await this._state.waitForUpdate();\n if (generation !== this._switchGeneration) return;\n }\n\n const state = this._state.value;\n let id: string | undefined = this._state.value.newThreadId;\n if (id === undefined) {\n do {\n id = `__LOCALID_${generateId()}`;\n } while (state.threadIdMap[id]);\n\n const mappingId = createThreadMappingId(id);\n this._state.update({\n ...state,\n newThreadId: id,\n threadIdMap: {\n ...state.threadIdMap,\n [id]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n status: \"new\",\n id,\n remoteId: undefined,\n externalId: undefined,\n title: undefined,\n custom: undefined,\n } satisfies RemoteThreadData,\n },\n });\n }\n\n return this._switchToThread(id, undefined, generation);\n }\n\n public initialize = async (threadId: string) => {\n if (this._state.value.newThreadId !== threadId) {\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"initializing it\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"be initialized here\");\n const { remoteId, externalId } = await data.initializeTask;\n return { remoteId, externalId };\n }\n\n const { remoteId, externalId } = await this._state.optimisticUpdate({\n execute: () => {\n return this._options.adapter.initialize(threadId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, threadId, \"regular\");\n },\n loading: (state, task) => {\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...state.threadData[mappingId],\n initializeTask: task,\n },\n },\n };\n },\n then: (state, { remoteId, externalId }) => {\n const data = getThreadData(state, threadId);\n if (!data) return state;\n\n const mappingId = createThreadMappingId(threadId);\n return {\n ...state,\n threadIdMap: {\n ...state.threadIdMap,\n [remoteId]: mappingId,\n },\n threadData: {\n ...state.threadData,\n [mappingId]: {\n ...data,\n initializeTask: Promise.resolve({ remoteId, externalId }),\n remoteId,\n externalId,\n },\n },\n };\n },\n });\n return { remoteId, externalId };\n };\n\n public generateTitle = async (threadId: string) => {\n const data = this.getItemById(threadId);\n if (!data) throw threadNotFoundError(threadId, \"generating its title\");\n if (data.status === \"new\")\n throw threadStatusError(threadId, data.status, \"generate a title\");\n\n const { remoteId } = await data.initializeTask;\n\n const runtimeCore = this._hookManager.getThreadRuntimeCore(data.id);\n if (!runtimeCore) return; // thread is no longer running\n\n const messages = runtimeCore.messages;\n const stream = await this._options.adapter.generateTitle(\n remoteId,\n messages,\n );\n const messageStream = AssistantMessageStream.fromAssistantStream(stream);\n for await (const result of messageStream) {\n const newTitle = result.parts.filter((c) => c.type === \"text\")[0]?.text;\n const state = this._state.baseValue;\n const currentData = getThreadData(state, data.id);\n if (!currentData) continue;\n this._state.update({\n ...state,\n threadData: {\n ...state.threadData,\n [currentData.id]: {\n ...currentData,\n title: newTitle,\n },\n },\n });\n }\n };\n\n public rename(threadIdOrRemoteId: string, newTitle: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"renaming it\");\n if (data.status === \"new\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be renamed\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.rename(remoteId, newTitle);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n title: newTitle,\n },\n },\n };\n },\n });\n }\n\n public updateCustom(\n threadIdOrRemoteId: string,\n custom: Record<string, unknown> | undefined,\n ): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data)\n throw threadNotFoundError(\n threadIdOrRemoteId,\n \"updating its custom metadata\",\n );\n if (data.status === \"new\")\n throw threadStatusError(\n threadIdOrRemoteId,\n data.status,\n \"update custom metadata\",\n );\n\n if (!this._options.adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n const adapter = this._options.adapter;\n if (!adapter.updateCustom) {\n throw new Error(\n \"Remote thread list adapter does not support updating custom metadata\",\n );\n }\n return adapter.updateCustom(remoteId, custom);\n },\n optimistic: (state) => {\n const data = getThreadData(state, threadIdOrRemoteId);\n if (!data) return state;\n\n return {\n ...state,\n threadData: {\n ...state.threadData,\n [data.id]: {\n ...data,\n custom,\n },\n },\n };\n },\n });\n }\n\n private async _ensureThreadIsNotMain(threadId: string) {\n if (threadId === this.newThreadId)\n throw new Error(\"Cannot ensure new thread is not main\");\n\n let lastAwaitedTask: Promise<void> | undefined;\n\n while (threadId === this._mainThreadId) {\n let switchTask = this._switchTask;\n const startedFallback = !switchTask || switchTask === lastAwaitedTask;\n if (startedFallback) switchTask = this.switchToNewThread();\n lastAwaitedTask = switchTask;\n\n try {\n await switchTask;\n } catch (error) {\n if (startedFallback && this._switchTask === switchTask) {\n throw error;\n }\n }\n }\n }\n\n public async archive(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"archiving it\");\n if (data.status !== \"regular\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be archived\");\n\n await this._ensureThreadIsNotMain(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return this._options.adapter.archive(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"archived\");\n },\n });\n }\n\n public unarchive(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"unarchiving it\");\n if (data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be unarchived\");\n\n return this._state.optimisticUpdate({\n execute: async () => {\n try {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.unarchive(remoteId);\n } catch (error) {\n await this._ensureThreadIsNotMain(data.id);\n throw error;\n }\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"regular\");\n },\n });\n }\n\n public async delete(threadIdOrRemoteId: string) {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"deleting it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be deleted\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n\n return this._state.optimisticUpdate({\n execute: async () => {\n const { remoteId } = await data.initializeTask;\n return await this._options.adapter.delete(remoteId);\n },\n optimistic: (state) => {\n return updateStatusReducer(state, data.id, \"deleted\");\n },\n });\n }\n\n public async detach(threadIdOrRemoteId: string): Promise<void> {\n const data = this.getItemById(threadIdOrRemoteId);\n if (!data) throw threadNotFoundError(threadIdOrRemoteId, \"detaching it\");\n if (data.status !== \"regular\" && data.status !== \"archived\")\n throw threadStatusError(threadIdOrRemoteId, data.status, \"be detached\");\n\n await this._ensureThreadIsNotMain(data.id);\n this._hookManager.stopThreadRuntime(data.id);\n }\n\n private useBoundIds = create<string[]>(() => []);\n\n public __internal_RenderComponent: FC = () => {\n const id = useId();\n useEffect(() => {\n this.useBoundIds.setState((s) => [...s, id], true);\n return () => {\n this.useBoundIds.setState((s) => s.filter((i) => i !== id), true);\n };\n }, [id]);\n\n const boundIds = this.useBoundIds();\n const { Provider } = this.useProvider();\n\n const adapters = {\n modelContext: this.contextProvider,\n };\n\n return (\n (boundIds.length === 0 || boundIds[0] === id) && (\n // only render if the component is the first one mounted\n <RuntimeAdapterProvider adapters={adapters}>\n <this._hookManager.__internal_RenderThreadRuntimes\n provider={Provider}\n />\n </RuntimeAdapterProvider>\n )\n );\n };\n}\n"],"mappings":"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"}
@@ -14,7 +14,7 @@ var AssistantCloudThreadHistoryAdapter = class {
14
14
  }
15
15
  get _persistence() {
16
16
  const key = this.aui.threadListItem();
17
- if (!globalPersistence.has(key)) globalPersistence.set(key, new CloudMessagePersistence(this.cloudRef.current));
17
+ if (!globalPersistence.has(key)) globalPersistence.set(key, new CloudMessagePersistence(() => this.cloudRef.current));
18
18
  return globalPersistence.get(key);
19
19
  }
20
20
  withFormat(formatAdapter) {