@assistant-ui/react 0.7.23 → 0.7.25

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 (231) hide show
  1. package/dist/api/AssistantRuntime.d.ts +1 -1
  2. package/dist/api/AssistantRuntime.d.ts.map +1 -1
  3. package/dist/api/AssistantRuntime.js +1 -1
  4. package/dist/api/AssistantRuntime.js.map +1 -1
  5. package/dist/api/AssistantRuntime.mjs +1 -1
  6. package/dist/api/AssistantRuntime.mjs.map +1 -1
  7. package/dist/api/ComposerRuntime.d.ts +4 -2
  8. package/dist/api/ComposerRuntime.d.ts.map +1 -1
  9. package/dist/api/ComposerRuntime.js +6 -1
  10. package/dist/api/ComposerRuntime.js.map +1 -1
  11. package/dist/api/ComposerRuntime.mjs +6 -1
  12. package/dist/api/ComposerRuntime.mjs.map +1 -1
  13. package/dist/api/ThreadListItemRuntime.d.ts +3 -1
  14. package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
  15. package/dist/api/ThreadListItemRuntime.js.map +1 -1
  16. package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
  17. package/dist/api/ThreadListRuntime.d.ts +8 -8
  18. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  19. package/dist/api/ThreadListRuntime.js +7 -5
  20. package/dist/api/ThreadListRuntime.js.map +1 -1
  21. package/dist/api/ThreadListRuntime.mjs +7 -5
  22. package/dist/api/ThreadListRuntime.mjs.map +1 -1
  23. package/dist/api/ThreadRuntime.d.ts +59 -32
  24. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  25. package/dist/api/ThreadRuntime.js +2 -2
  26. package/dist/api/ThreadRuntime.js.map +1 -1
  27. package/dist/api/ThreadRuntime.mjs +2 -2
  28. package/dist/api/ThreadRuntime.mjs.map +1 -1
  29. package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
  30. package/dist/context/providers/AssistantRuntimeProvider.js +8 -3
  31. package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
  32. package/dist/context/providers/AssistantRuntimeProvider.mjs +8 -3
  33. package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
  34. package/dist/primitives/threadList/ThreadListItems.d.ts.map +1 -1
  35. package/dist/primitives/threadList/ThreadListItems.js +2 -4
  36. package/dist/primitives/threadList/ThreadListItems.js.map +1 -1
  37. package/dist/primitives/threadList/ThreadListItems.mjs +2 -4
  38. package/dist/primitives/threadList/ThreadListItems.mjs.map +1 -1
  39. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts +6 -6
  40. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  41. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +29 -20
  42. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  43. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +29 -20
  44. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
  45. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.d.ts.map +1 -1
  46. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js +2 -3
  47. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.js.map +1 -1
  48. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs +2 -3
  49. package/dist/runtimes/composer/DefaultEditComposerRuntimeCore.mjs.map +1 -1
  50. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js +1 -1
  51. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.js.map +1 -1
  52. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs +1 -1
  53. package/dist/runtimes/composer/DefaultThreadComposerRuntimeCore.mjs.map +1 -1
  54. package/dist/runtimes/core/AssistantRuntimeCore.d.ts +2 -0
  55. package/dist/runtimes/core/AssistantRuntimeCore.d.ts.map +1 -1
  56. package/dist/runtimes/core/AssistantRuntimeCore.js.map +1 -1
  57. package/dist/runtimes/core/ComposerRuntimeCore.d.ts +2 -1
  58. package/dist/runtimes/core/ComposerRuntimeCore.d.ts.map +1 -1
  59. package/dist/runtimes/core/ComposerRuntimeCore.js.map +1 -1
  60. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts +4 -1
  61. package/dist/runtimes/core/ThreadListRuntimeCore.d.ts.map +1 -1
  62. package/dist/runtimes/core/ThreadListRuntimeCore.js.map +1 -1
  63. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts +1 -1
  64. package/dist/runtimes/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  65. package/dist/runtimes/external-store/ExternalStoreAdapter.js.map +1 -1
  66. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts +1 -0
  67. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.d.ts.map +1 -1
  68. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js +5 -1
  69. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.js.map +1 -1
  70. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs +5 -1
  71. package/dist/runtimes/external-store/ExternalStoreThreadListRuntimeCore.mjs.map +1 -1
  72. package/dist/runtimes/index.d.ts +5 -4
  73. package/dist/runtimes/index.d.ts.map +1 -1
  74. package/dist/runtimes/index.js +11 -9
  75. package/dist/runtimes/index.js.map +1 -1
  76. package/dist/runtimes/index.mjs +5 -4
  77. package/dist/runtimes/index.mjs.map +1 -1
  78. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts +2 -1
  79. package/dist/runtimes/local/LocalThreadListRuntimeCore.d.ts.map +1 -1
  80. package/dist/runtimes/local/LocalThreadListRuntimeCore.js +12 -8
  81. package/dist/runtimes/local/LocalThreadListRuntimeCore.js.map +1 -1
  82. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs +12 -8
  83. package/dist/runtimes/local/LocalThreadListRuntimeCore.mjs.map +1 -1
  84. package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts +8 -0
  85. package/dist/runtimes/remote-thread-list/BaseSubscribable.d.ts.map +1 -0
  86. package/dist/runtimes/remote-thread-list/BaseSubscribable.js +62 -0
  87. package/dist/runtimes/remote-thread-list/BaseSubscribable.js.map +1 -0
  88. package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs +37 -0
  89. package/dist/runtimes/remote-thread-list/BaseSubscribable.mjs.map +1 -0
  90. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts +3 -0
  91. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -0
  92. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js +150 -0
  93. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -0
  94. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs +125 -0
  95. package/dist/runtimes/remote-thread-list/EMPTY_THREAD_CORE.mjs.map +1 -0
  96. package/dist/runtimes/remote-thread-list/OptimisticState.d.ts +23 -0
  97. package/dist/runtimes/remote-thread-list/OptimisticState.d.ts.map +1 -0
  98. package/dist/runtimes/remote-thread-list/OptimisticState.js +83 -0
  99. package/dist/runtimes/remote-thread-list/OptimisticState.js.map +1 -0
  100. package/dist/runtimes/remote-thread-list/OptimisticState.mjs +58 -0
  101. package/dist/runtimes/remote-thread-list/OptimisticState.mjs.map +1 -0
  102. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +75 -0
  103. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -0
  104. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js +127 -0
  105. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.js.map +1 -0
  106. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs +102 -0
  107. package/dist/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.mjs.map +1 -0
  108. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +76 -0
  109. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -0
  110. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js +396 -0
  111. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.js.map +1 -0
  112. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs +371 -0
  113. package/dist/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.mjs.map +1 -0
  114. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts +7 -0
  115. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.d.ts.map +1 -0
  116. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js +39 -0
  117. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.js.map +1 -0
  118. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs +14 -0
  119. package/dist/runtimes/remote-thread-list/cloud/AssistantCloud.mjs.map +1 -0
  120. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts +19 -0
  121. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.d.ts.map +1 -0
  122. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js +79 -0
  123. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.js.map +1 -0
  124. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs +57 -0
  125. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAPI.mjs.map +1 -0
  126. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts +20 -0
  127. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.d.ts.map +1 -0
  128. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js +95 -0
  129. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.js.map +1 -0
  130. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs +69 -0
  131. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.mjs.map +1 -0
  132. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts +46 -0
  133. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.d.ts.map +1 -0
  134. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js +50 -0
  135. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.js.map +1 -0
  136. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs +25 -0
  137. package/dist/runtimes/remote-thread-list/cloud/AssistantCloudThreads.mjs.map +1 -0
  138. package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts +10 -0
  139. package/dist/runtimes/remote-thread-list/cloud/CloudContext.d.ts.map +1 -0
  140. package/dist/runtimes/remote-thread-list/cloud/CloudContext.js +32 -0
  141. package/dist/runtimes/remote-thread-list/cloud/CloudContext.js.map +1 -0
  142. package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs +7 -0
  143. package/dist/runtimes/remote-thread-list/cloud/CloudContext.mjs.map +1 -0
  144. package/dist/runtimes/remote-thread-list/cloud/index.d.ts +4 -0
  145. package/dist/runtimes/remote-thread-list/cloud/index.d.ts.map +1 -0
  146. package/dist/runtimes/remote-thread-list/cloud/index.js +37 -0
  147. package/dist/runtimes/remote-thread-list/cloud/index.js.map +1 -0
  148. package/dist/runtimes/remote-thread-list/cloud/index.mjs +10 -0
  149. package/dist/runtimes/remote-thread-list/cloud/index.mjs.map +1 -0
  150. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts +4 -0
  151. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.d.ts.map +1 -0
  152. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js +46 -0
  153. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.js.map +1 -0
  154. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs +22 -0
  155. package/dist/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.mjs.map +1 -0
  156. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts +14 -0
  157. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.d.ts.map +1 -0
  158. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js +103 -0
  159. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.js.map +1 -0
  160. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs +79 -0
  161. package/dist/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.mjs.map +1 -0
  162. package/dist/runtimes/remote-thread-list/index.d.ts +2 -0
  163. package/dist/runtimes/remote-thread-list/index.d.ts.map +1 -0
  164. package/dist/runtimes/remote-thread-list/index.js +25 -0
  165. package/dist/runtimes/remote-thread-list/index.js.map +1 -0
  166. package/dist/runtimes/remote-thread-list/index.mjs +3 -0
  167. package/dist/runtimes/remote-thread-list/index.mjs.map +1 -0
  168. package/dist/runtimes/remote-thread-list/types.d.ts +25 -0
  169. package/dist/runtimes/remote-thread-list/types.d.ts.map +1 -0
  170. package/dist/runtimes/remote-thread-list/types.js +19 -0
  171. package/dist/runtimes/remote-thread-list/types.js.map +1 -0
  172. package/dist/runtimes/remote-thread-list/types.mjs +1 -0
  173. package/dist/runtimes/remote-thread-list/types.mjs.map +1 -0
  174. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts +3 -0
  175. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.d.ts.map +1 -0
  176. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js +51 -0
  177. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.js.map +1 -0
  178. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs +26 -0
  179. package/dist/runtimes/remote-thread-list/useRemoteThreadListRuntime.mjs.map +1 -0
  180. package/dist/styles/index.css +2 -0
  181. package/dist/styles/index.css.map +1 -1
  182. package/dist/styles/tailwindcss/thread.css +5 -1
  183. package/dist/styles/tailwindcss/thread.css.json +4 -1
  184. package/dist/ui/attachment-ui.d.ts.map +1 -1
  185. package/dist/ui/attachment-ui.js +12 -7
  186. package/dist/ui/attachment-ui.js.map +1 -1
  187. package/dist/ui/attachment-ui.mjs +12 -7
  188. package/dist/ui/attachment-ui.mjs.map +1 -1
  189. package/dist/utils/createActionButton.d.ts +2 -2
  190. package/dist/utils/createActionButton.d.ts.map +1 -1
  191. package/dist/utils/createActionButton.js +2 -4
  192. package/dist/utils/createActionButton.js.map +1 -1
  193. package/dist/utils/createActionButton.mjs +5 -5
  194. package/dist/utils/createActionButton.mjs.map +1 -1
  195. package/package.json +3 -3
  196. package/src/api/AssistantRuntime.ts +2 -6
  197. package/src/api/ComposerRuntime.ts +10 -2
  198. package/src/api/ThreadListItemRuntime.ts +3 -1
  199. package/src/api/ThreadListRuntime.ts +11 -9
  200. package/src/api/ThreadRuntime.ts +3 -3
  201. package/src/context/providers/AssistantRuntimeProvider.tsx +21 -6
  202. package/src/primitives/threadList/ThreadListItems.tsx +3 -5
  203. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +43 -25
  204. package/src/runtimes/composer/DefaultEditComposerRuntimeCore.tsx +2 -3
  205. package/src/runtimes/composer/DefaultThreadComposerRuntimeCore.tsx +1 -1
  206. package/src/runtimes/core/AssistantRuntimeCore.tsx +3 -0
  207. package/src/runtimes/core/ComposerRuntimeCore.tsx +2 -1
  208. package/src/runtimes/core/ThreadListRuntimeCore.tsx +5 -2
  209. package/src/runtimes/external-store/ExternalStoreAdapter.tsx +1 -1
  210. package/src/runtimes/external-store/ExternalStoreThreadListRuntimeCore.tsx +6 -1
  211. package/src/runtimes/index.ts +5 -4
  212. package/src/runtimes/local/LocalThreadListRuntimeCore.tsx +14 -9
  213. package/src/runtimes/remote-thread-list/BaseSubscribable.tsx +38 -0
  214. package/src/runtimes/remote-thread-list/EMPTY_THREAD_CORE.tsx +158 -0
  215. package/src/runtimes/remote-thread-list/OptimisticState.ts +82 -0
  216. package/src/runtimes/remote-thread-list/RemoteThreadListHookInstanceManager.tsx +132 -0
  217. package/src/runtimes/remote-thread-list/RemoteThreadListThreadListRuntimeCore.tsx +486 -0
  218. package/src/runtimes/remote-thread-list/cloud/AssistantCloud.tsx +11 -0
  219. package/src/runtimes/remote-thread-list/cloud/AssistantCloudAPI.tsx +81 -0
  220. package/src/runtimes/remote-thread-list/cloud/AssistantCloudAuthStrategy.tsx +95 -0
  221. package/src/runtimes/remote-thread-list/cloud/AssistantCloudThreads.tsx +72 -0
  222. package/src/runtimes/remote-thread-list/cloud/CloudContext.tsx +12 -0
  223. package/src/runtimes/remote-thread-list/cloud/index.ts +3 -0
  224. package/src/runtimes/remote-thread-list/cloud/useCloudGetOrCreateThread.tsx +19 -0
  225. package/src/runtimes/remote-thread-list/cloud/useCloudThreadListRuntime.tsx +100 -0
  226. package/src/runtimes/remote-thread-list/index.ts +2 -0
  227. package/src/runtimes/remote-thread-list/types.tsx +34 -0
  228. package/src/runtimes/remote-thread-list/useRemoteThreadListRuntime.tsx +28 -0
  229. package/src/styles/tailwindcss/thread.css +5 -1
  230. package/src/ui/attachment-ui.tsx +20 -14
  231. package/src/utils/createActionButton.tsx +11 -6
@@ -0,0 +1,158 @@
1
+ import { ThreadRuntimeCore } from "../../internal";
2
+
3
+ const EMPTY_THREAD_ERROR = new Error(
4
+ "This is the empty thread, a placeholder for the main thread. You cannot perform any actions on this thread instance. This error is probably because you tried to call a thread method in your render function. Call the method inside a `useEffect` hook instead.",
5
+ );
6
+ export const EMPTY_THREAD_CORE: ThreadRuntimeCore = {
7
+ getMessageById() {
8
+ return undefined;
9
+ },
10
+
11
+ getBranches() {
12
+ return [];
13
+ },
14
+
15
+ switchToBranch() {
16
+ throw EMPTY_THREAD_ERROR;
17
+ },
18
+
19
+ append() {
20
+ throw EMPTY_THREAD_ERROR;
21
+ },
22
+
23
+ startRun() {
24
+ throw EMPTY_THREAD_ERROR;
25
+ },
26
+
27
+ cancelRun() {
28
+ throw EMPTY_THREAD_ERROR;
29
+ },
30
+
31
+ addToolResult() {
32
+ throw EMPTY_THREAD_ERROR;
33
+ },
34
+
35
+ speak() {
36
+ throw EMPTY_THREAD_ERROR;
37
+ },
38
+
39
+ stopSpeaking() {
40
+ throw EMPTY_THREAD_ERROR;
41
+ },
42
+
43
+ getSubmittedFeedback() {
44
+ return undefined;
45
+ },
46
+
47
+ submitFeedback() {
48
+ throw EMPTY_THREAD_ERROR;
49
+ },
50
+
51
+ getModelConfig() {
52
+ return {};
53
+ },
54
+
55
+ composer: {
56
+ attachments: [],
57
+
58
+ getAttachmentAccept() {
59
+ return "*";
60
+ },
61
+
62
+ async addAttachment() {
63
+ throw EMPTY_THREAD_ERROR;
64
+ },
65
+
66
+ async removeAttachment() {
67
+ throw EMPTY_THREAD_ERROR;
68
+ },
69
+
70
+ isEditing: false,
71
+
72
+ canCancel: false,
73
+ isEmpty: true,
74
+
75
+ text: "",
76
+
77
+ setText() {
78
+ throw EMPTY_THREAD_ERROR;
79
+ },
80
+
81
+ role: "user",
82
+
83
+ setRole() {
84
+ throw EMPTY_THREAD_ERROR;
85
+ },
86
+
87
+ runConfig: {},
88
+
89
+ setRunConfig() {
90
+ throw EMPTY_THREAD_ERROR;
91
+ },
92
+
93
+ reset() {
94
+ throw EMPTY_THREAD_ERROR;
95
+ },
96
+
97
+ send() {
98
+ throw EMPTY_THREAD_ERROR;
99
+ },
100
+
101
+ cancel() {
102
+ throw EMPTY_THREAD_ERROR;
103
+ },
104
+
105
+ subscribe() {
106
+ return () => {};
107
+ },
108
+
109
+ unstable_on() {
110
+ return () => {};
111
+ },
112
+ },
113
+
114
+ getEditComposer() {
115
+ return undefined;
116
+ },
117
+
118
+ beginEdit() {
119
+ throw EMPTY_THREAD_ERROR;
120
+ },
121
+
122
+ speech: undefined,
123
+
124
+ capabilities: {
125
+ switchToBranch: false,
126
+ edit: false,
127
+ reload: false,
128
+ cancel: false,
129
+ unstable_copy: false,
130
+ speech: false,
131
+ attachments: false,
132
+ feedback: false,
133
+ },
134
+
135
+ isDisabled: true,
136
+
137
+ messages: [],
138
+
139
+ suggestions: [],
140
+
141
+ extras: undefined,
142
+
143
+ subscribe() {
144
+ return () => {};
145
+ },
146
+
147
+ import() {
148
+ throw EMPTY_THREAD_ERROR;
149
+ },
150
+
151
+ export() {
152
+ return { messages: [] };
153
+ },
154
+
155
+ unstable_on() {
156
+ return () => {};
157
+ },
158
+ };
@@ -0,0 +1,82 @@
1
+ import { BaseSubscribable } from "./BaseSubscribable";
2
+
3
+ type Transform<TState, TResult> = {
4
+ execute: () => Promise<TResult>;
5
+
6
+ /** transform the state after the promise resolves */
7
+ then?: (state: TState, result: TResult) => TState;
8
+
9
+ /** transform the state during resolution and afterwards */
10
+ optimistic?: (state: TState) => TState;
11
+
12
+ /** transform the state only while loading */
13
+ loading?: (state: TState) => TState;
14
+ };
15
+
16
+ const pipeTransforms = <TState, TExtra>(
17
+ initialState: TState,
18
+ extraParam: TExtra,
19
+ transforms: (((state: TState, extra: TExtra) => TState) | undefined)[],
20
+ ): TState => {
21
+ return transforms.reduce((state, transform) => {
22
+ return transform?.(state, extraParam) ?? state;
23
+ }, initialState);
24
+ };
25
+
26
+ export class OptimisticState<TState> extends BaseSubscribable {
27
+ private readonly _pendingTransforms: Array<Transform<TState, any>> = [];
28
+ private _baseValue: TState;
29
+ private _cachedValue: TState;
30
+
31
+ public constructor(initialState: TState) {
32
+ super();
33
+ this._baseValue = initialState;
34
+ this._cachedValue = initialState;
35
+ }
36
+
37
+ private _updateState(): void {
38
+ this._cachedValue = this._pendingTransforms.reduce((state, transform) => {
39
+ return pipeTransforms(state, undefined, [
40
+ transform.loading,
41
+ transform.optimistic,
42
+ ]);
43
+ }, this._baseValue);
44
+
45
+ this._notifySubscribers();
46
+ }
47
+
48
+ public get baseValue(): TState {
49
+ return this._baseValue;
50
+ }
51
+
52
+ public get value(): TState {
53
+ return this._cachedValue;
54
+ }
55
+
56
+ public update(state: TState): void {
57
+ this._baseValue = state;
58
+ this._updateState();
59
+ }
60
+
61
+ public async optimisticUpdate<TResult>(
62
+ transform: Transform<TState, TResult>,
63
+ ): Promise<TResult> {
64
+ this._pendingTransforms.push(transform);
65
+ this._updateState();
66
+
67
+ try {
68
+ const result = await transform.execute();
69
+ this._baseValue = pipeTransforms(this._baseValue, result, [
70
+ transform.optimistic,
71
+ transform.then,
72
+ ]);
73
+ return result;
74
+ } finally {
75
+ const index = this._pendingTransforms.indexOf(transform);
76
+ if (index > -1) {
77
+ this._pendingTransforms.splice(index, 1);
78
+ }
79
+ this._updateState();
80
+ }
81
+ }
82
+ }
@@ -0,0 +1,132 @@
1
+ import { FC, useCallback, useRef, useEffect, memo, useMemo } from "react";
2
+ import { UseBoundStore, StoreApi, create } from "zustand";
3
+ import { useAssistantRuntime } from "../../context";
4
+ import { ThreadListItemRuntimeProvider } from "../../context/providers/ThreadListItemRuntimeProvider";
5
+ import { useThreadListItem } from "../../context/react/ThreadListItemContext";
6
+ import { ThreadRuntimeCore, ThreadRuntimeImpl } from "../../internal";
7
+ import { BaseSubscribable } from "./BaseSubscribable";
8
+ import { RemoteThreadListHook } from "./types";
9
+
10
+ type RemoteThreadListHookInstance = {
11
+ runtime?: ThreadRuntimeCore;
12
+ };
13
+ export class RemoteThreadListHookInstanceManager extends BaseSubscribable {
14
+ private useRuntimeHook: UseBoundStore<
15
+ StoreApi<{ useRuntime: RemoteThreadListHook }>
16
+ >;
17
+ private instances = new Map<string, RemoteThreadListHookInstance>();
18
+ private useAliveThreadsKeysChanged = create(() => ({}));
19
+
20
+ constructor(runtimeHook: RemoteThreadListHook) {
21
+ super();
22
+ this.useRuntimeHook = create(() => ({ useRuntime: runtimeHook }));
23
+ }
24
+
25
+ public startThreadRuntime(threadId: string) {
26
+ if (!this.instances.has(threadId)) {
27
+ this.instances.set(threadId, {});
28
+ this.useAliveThreadsKeysChanged.setState({}, true);
29
+ }
30
+
31
+ return new Promise<ThreadRuntimeCore>((resolve, reject) => {
32
+ const callback = () => {
33
+ const instance = this.instances.get(threadId);
34
+ if (!instance) {
35
+ dispose();
36
+ reject(new Error("Thread was deleted before runtime was started"));
37
+ } else if (!instance.runtime) {
38
+ return; // misc update
39
+ } else {
40
+ dispose();
41
+ resolve(instance.runtime);
42
+ }
43
+ };
44
+ const dispose = this.subscribe(callback);
45
+ callback();
46
+ });
47
+ }
48
+
49
+ public getThreadRuntimeCore(threadId: string) {
50
+ const instance = this.instances.get(threadId);
51
+ if (!instance)
52
+ throw new Error(
53
+ "getThreadRuntimeCore not found. This is a bug in assistant-ui.",
54
+ );
55
+ return instance.runtime;
56
+ }
57
+
58
+ public stopThreadRuntime(threadId: string) {
59
+ this.instances.delete(threadId);
60
+ this.useAliveThreadsKeysChanged.setState({}, true);
61
+ }
62
+
63
+ public setRuntimeHook(newRuntimeHook: RemoteThreadListHook) {
64
+ const prevRuntimeHook = this.useRuntimeHook.getState().useRuntime;
65
+ if (prevRuntimeHook !== newRuntimeHook) {
66
+ this.useRuntimeHook.setState({ useRuntime: newRuntimeHook }, true);
67
+ }
68
+ }
69
+
70
+ private _InnerActiveThreadProvider: FC = () => {
71
+ const { id } = useThreadListItem();
72
+
73
+ const { useRuntime } = this.useRuntimeHook();
74
+ const runtime = useRuntime();
75
+
76
+ const threadBinding = (runtime.thread as ThreadRuntimeImpl)
77
+ .__internal_threadBinding;
78
+
79
+ const updateRuntime = useCallback(() => {
80
+ const aliveThread = this.instances.get(id);
81
+ if (!aliveThread)
82
+ throw new Error("Thread not found. This is a bug in assistant-ui.");
83
+
84
+ aliveThread.runtime = threadBinding.getState();
85
+
86
+ if (isMounted) {
87
+ this._notifySubscribers();
88
+ }
89
+ }, [id, threadBinding]);
90
+
91
+ const isMounted = useRef(false);
92
+ if (!isMounted.current) {
93
+ updateRuntime();
94
+ }
95
+
96
+ useEffect(() => {
97
+ isMounted.current = true;
98
+ updateRuntime();
99
+ return threadBinding.outerSubscribe(updateRuntime);
100
+ }, [threadBinding]);
101
+
102
+ return null;
103
+ };
104
+
105
+ private _OuterActiveThreadProvider: FC<{ threadId: string }> = memo(
106
+ ({ threadId }) => {
107
+ const assistantRuntime = useAssistantRuntime();
108
+ const threadListItemRuntime = useMemo(
109
+ () => assistantRuntime.threadList.getItemById(threadId),
110
+ [assistantRuntime, threadId],
111
+ );
112
+
113
+ return (
114
+ <ThreadListItemRuntimeProvider runtime={threadListItemRuntime}>
115
+ <this._InnerActiveThreadProvider />
116
+ </ThreadListItemRuntimeProvider>
117
+ );
118
+ },
119
+ );
120
+
121
+ public __internal_RenderThreadRuntimes: FC = () => {
122
+ this.useAliveThreadsKeysChanged(); // trigger re-render on alive threads change
123
+
124
+ return [
125
+ ...this.instances
126
+ .keys()
127
+ .map((threadId) => (
128
+ <this._OuterActiveThreadProvider key={threadId} threadId={threadId} />
129
+ )),
130
+ ];
131
+ };
132
+ }