@assistant-ui/react 0.7.23 → 0.7.25

Sign up to get free protection for your applications and to get access to all the features.
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,72 @@
1
+ import { AssistantCloudAPI } from "./AssistantCloudAPI";
2
+
3
+ type AssistantCloudThreadsListQuery = {
4
+ is_archived?: boolean;
5
+ limit?: number;
6
+ after?: string;
7
+ };
8
+
9
+ type CloudThread = {
10
+ title: string;
11
+ last_message_at: Date;
12
+ metadata: unknown;
13
+ external_id: string | null;
14
+ id: string;
15
+ project_id: string;
16
+ created_at: Date;
17
+ updated_at: Date;
18
+ workspace_id: string;
19
+ is_archived: boolean;
20
+ };
21
+
22
+ type AssistantCloudThreadsListResponse = {
23
+ threads: CloudThread[];
24
+ };
25
+
26
+ type AssistantCloudThreadsCreateBody = {
27
+ title: string;
28
+ last_message_at: Date;
29
+ metadata?: unknown | undefined;
30
+ external_id?: string | undefined;
31
+ };
32
+
33
+ type AssistantCloudThreadsCreateResponse = {
34
+ thread_id: string;
35
+ };
36
+
37
+ type AssistantCloudThreadsUpdateBody = {
38
+ title?: string | undefined;
39
+ last_message_at?: Date | undefined;
40
+ metadata?: unknown | undefined;
41
+ is_archived?: boolean | undefined;
42
+ };
43
+
44
+ export class AssistantCloudThreads {
45
+ constructor(private cloud: AssistantCloudAPI) {}
46
+
47
+ public async list(
48
+ query?: AssistantCloudThreadsListQuery,
49
+ ): Promise<AssistantCloudThreadsListResponse> {
50
+ return this.cloud.makeRequest("/threads", { query });
51
+ }
52
+
53
+ public async create(
54
+ body: AssistantCloudThreadsCreateBody,
55
+ ): Promise<AssistantCloudThreadsCreateResponse> {
56
+ return this.cloud.makeRequest("/threads", { method: "POST", body });
57
+ }
58
+
59
+ public async update(
60
+ threadId: string,
61
+ body: AssistantCloudThreadsUpdateBody,
62
+ ): Promise<void> {
63
+ return this.cloud.makeRequest(`/threads/${threadId}`, {
64
+ method: "PUT",
65
+ body,
66
+ });
67
+ }
68
+
69
+ public async delete(threadId: string): Promise<void> {
70
+ return this.cloud.makeRequest(`/threads/${threadId}`, { method: "DELETE" });
71
+ }
72
+ }
@@ -0,0 +1,12 @@
1
+ import { createContext } from "react";
2
+
3
+ export type CloudInitializeResponse = {
4
+ remoteId: string;
5
+ externalId: string | undefined;
6
+ };
7
+
8
+ type CloudContextValue = {
9
+ initialize: () => Promise<CloudInitializeResponse>;
10
+ };
11
+
12
+ export const CloudContext = createContext<CloudContextValue | null>(null);
@@ -0,0 +1,3 @@
1
+ export { useCloudThreadListRuntime } from "./useCloudThreadListRuntime";
2
+ export { useCloudGetOrCreateThread } from "./useCloudGetOrCreateThread";
3
+ export { AssistantCloud } from "./AssistantCloud";
@@ -0,0 +1,19 @@
1
+ "use client";
2
+
3
+ import { useContext } from "react";
4
+ import { useThreadListItem } from "../../../context/react/ThreadListItemContext";
5
+ import { CloudContext } from "./CloudContext";
6
+
7
+ export const useCloudGetOrCreateThread = () => {
8
+ const currentId = useThreadListItem((i) => i.externalId);
9
+ const cloudContextValue = useContext(CloudContext);
10
+ if (!cloudContextValue) throw new Error("CloudContext not available");
11
+
12
+ return async () => {
13
+ let externalId = currentId;
14
+ if (!externalId) {
15
+ externalId = (await cloudContextValue.initialize()).externalId;
16
+ }
17
+ return { externalId };
18
+ };
19
+ };
@@ -0,0 +1,100 @@
1
+ "use client";
2
+
3
+ import { AssistantRuntime } from "@assistant-ui/react";
4
+ import { PropsWithChildren, useEffect, useMemo, useRef } from "react";
5
+ import { useRemoteThreadListRuntime } from "../useRemoteThreadListRuntime";
6
+ import { AssistantCloud } from "./AssistantCloud";
7
+ import { CloudContext, CloudInitializeResponse } from "./CloudContext";
8
+
9
+ type ThreadData = {
10
+ externalId: string;
11
+ };
12
+
13
+ type CloudThreadListAdapter = {
14
+ cloud: AssistantCloud;
15
+
16
+ runtimeHook: () => AssistantRuntime;
17
+
18
+ create?(): Promise<ThreadData>;
19
+ delete?(threadId: string): Promise<void>;
20
+ };
21
+
22
+ export const useCloudThreadListRuntime = (adapter: CloudThreadListAdapter) => {
23
+ const adapterRef = useRef(adapter);
24
+ useEffect(() => {
25
+ adapterRef.current = adapter;
26
+ }, [adapter]);
27
+
28
+ const cloudContextValue = useMemo(() => {
29
+ const subscribers = new Set<
30
+ (result: Promise<CloudInitializeResponse>) => void
31
+ >();
32
+ return {
33
+ initialize: async () => {
34
+ const createTask = adapterRef.current.create?.() ?? Promise.resolve();
35
+ const task = createTask.then(async (t) => {
36
+ const external_id = t ? t.externalId : undefined;
37
+ const { thread_id } = await adapterRef.current.cloud.threads.create({
38
+ title: "New Thread",
39
+ last_message_at: new Date(),
40
+ external_id,
41
+ });
42
+ return { externalId: external_id, remoteId: thread_id };
43
+ });
44
+ for (const subscriber of subscribers) {
45
+ subscriber(task);
46
+ }
47
+ return task;
48
+ },
49
+ subscribe: (
50
+ callback: (result: Promise<CloudInitializeResponse>) => void,
51
+ ) => {
52
+ subscribers.add(callback);
53
+ return () => {
54
+ subscribers.delete(callback);
55
+ };
56
+ },
57
+ };
58
+ }, []);
59
+
60
+ const runtime = useRemoteThreadListRuntime({
61
+ runtimeHook: adapter.runtimeHook,
62
+ list: async () => {
63
+ const { threads } = await adapter.cloud.threads.list();
64
+ return {
65
+ threads: threads.map((t) => ({
66
+ status: t.is_archived ? "archived" : "regular",
67
+ remoteId: t.id,
68
+ title: t.title,
69
+ externalId: t.external_id ?? undefined,
70
+ })),
71
+ };
72
+ },
73
+ rename: async (threadId, newTitle) => {
74
+ return adapter.cloud.threads.update(threadId, { title: newTitle });
75
+ },
76
+ archive: async (threadId) => {
77
+ return adapter.cloud.threads.update(threadId, { is_archived: true });
78
+ },
79
+ unarchive: async (threadId) => {
80
+ return adapter.cloud.threads.update(threadId, { is_archived: false });
81
+ },
82
+ delete: async (threadId) => {
83
+ await adapter.delete?.(threadId);
84
+ return adapter.cloud.threads.delete(threadId);
85
+ },
86
+ onInitialize: (callback) => {
87
+ return cloudContextValue.subscribe(callback);
88
+ },
89
+ __internal_RenderComponent: ({ children }: PropsWithChildren) => {
90
+ console.log("RENDER COMPONENT");
91
+ return (
92
+ <CloudContext.Provider value={cloudContextValue}>
93
+ {children}
94
+ </CloudContext.Provider>
95
+ );
96
+ },
97
+ });
98
+
99
+ return runtime;
100
+ };
@@ -0,0 +1,2 @@
1
+ // export { useRemoteThreadListRuntime } from "./useRemoteThreadListRuntime";
2
+ export * from "./cloud";
@@ -0,0 +1,34 @@
1
+ import { FC, PropsWithChildren } from "react";
2
+ import { AssistantRuntime } from "../../api";
3
+ import { Unsubscribe } from "../../types";
4
+ import { CloudInitializeResponse } from "./cloud/CloudContext";
5
+
6
+ export type RemoteThreadMetadata = {
7
+ readonly status: "regular" | "archived";
8
+ readonly remoteId: string;
9
+ readonly externalId?: string | undefined;
10
+ readonly title?: string | undefined;
11
+ };
12
+
13
+ export type RemoteThreadListResponse = {
14
+ threads: RemoteThreadMetadata[];
15
+ };
16
+
17
+ export type RemoteThreadListHook = () => AssistantRuntime;
18
+
19
+ export type RemoteThreadListAdapter = {
20
+ runtimeHook: RemoteThreadListHook;
21
+
22
+ list(): Promise<RemoteThreadListResponse>;
23
+
24
+ rename(remoteId: string, newTitle: string): Promise<void>;
25
+ archive(remoteId: string): Promise<void>;
26
+ unarchive(remoteId: string): Promise<void>;
27
+ delete(remoteId: string): Promise<void>;
28
+
29
+ onInitialize(
30
+ callback: (task: Promise<CloudInitializeResponse>) => Promise<void>,
31
+ ): Unsubscribe;
32
+
33
+ __internal_RenderComponent?: FC<PropsWithChildren>;
34
+ };
@@ -0,0 +1,28 @@
1
+ import { useState, useEffect, useMemo } from "react";
2
+ import { BaseAssistantRuntimeCore } from "../core/BaseAssistantRuntimeCore";
3
+ import { RemoteThreadListThreadListRuntimeCore } from "./RemoteThreadListThreadListRuntimeCore";
4
+ import { RemoteThreadListAdapter } from "./types";
5
+ import { AssistantRuntimeImpl } from "../../internal";
6
+
7
+ class RemoteThreadListRuntimeCore extends BaseAssistantRuntimeCore {
8
+ public readonly threadList;
9
+
10
+ constructor(adapter: RemoteThreadListAdapter) {
11
+ super();
12
+ this.threadList = new RemoteThreadListThreadListRuntimeCore(adapter);
13
+ }
14
+
15
+ public get __internal_RenderComponent() {
16
+ return this.threadList.__internal_RenderComponent;
17
+ }
18
+ }
19
+
20
+ export const useRemoteThreadListRuntime = (
21
+ adapter: RemoteThreadListAdapter,
22
+ ) => {
23
+ const [runtime] = useState(() => new RemoteThreadListRuntimeCore(adapter));
24
+ useEffect(() => {
25
+ runtime.threadList.__internal_setAdapter(adapter);
26
+ }, [runtime, adapter]);
27
+ return useMemo(() => AssistantRuntimeImpl.create(runtime), [runtime]);
28
+ };
@@ -73,7 +73,11 @@
73
73
  /* attachment */
74
74
 
75
75
  .aui-attachment-root {
76
- @apply relative mt-3 flex h-12 w-40 items-center justify-center gap-2 rounded-lg border p-1;
76
+ @apply relative mt-3;
77
+ }
78
+
79
+ .aui-attachment-content {
80
+ @apply flex h-12 w-40 items-center justify-center gap-2 rounded-lg border p-1;
77
81
  }
78
82
 
79
83
  .aui-attachment-preview-trigger {
@@ -29,6 +29,10 @@ const AttachmentRoot = withDefaults(AttachmentPrimitive.Root, {
29
29
  className: "aui-attachment-root",
30
30
  });
31
31
 
32
+ const AttachmentContent = withDefaults("div", {
33
+ className: "aui-attachment-content",
34
+ });
35
+
32
36
  AttachmentRoot.displayName = "AttachmentRoot";
33
37
 
34
38
  const useFileSrc = (file: File | undefined) => {
@@ -141,20 +145,22 @@ const AttachmentUI: FC = () => {
141
145
  });
142
146
  return (
143
147
  <Tooltip>
144
- <AttachmentPreviewDialog>
145
- <TooltipTrigger asChild>
146
- <AttachmentRoot>
147
- <AttachmentThumb />
148
- <div className="aui-attachment-text">
149
- <p className="aui-attachment-name">
150
- <AttachmentPrimitive.Name />
151
- </p>
152
- <p className="aui-attachment-type">{typeLabel}</p>
153
- </div>
154
- {canRemove && <AttachmentRemove />}
155
- </AttachmentRoot>
156
- </TooltipTrigger>
157
- </AttachmentPreviewDialog>
148
+ <AttachmentRoot>
149
+ <AttachmentPreviewDialog>
150
+ <TooltipTrigger asChild>
151
+ <AttachmentContent>
152
+ <AttachmentThumb />
153
+ <div className="aui-attachment-text">
154
+ <p className="aui-attachment-name">
155
+ <AttachmentPrimitive.Name />
156
+ </p>
157
+ <p className="aui-attachment-type">{typeLabel}</p>
158
+ </div>
159
+ </AttachmentContent>
160
+ </TooltipTrigger>
161
+ </AttachmentPreviewDialog>
162
+ {canRemove && <AttachmentRemove />}
163
+ </AttachmentRoot>
158
164
  <TooltipContent side="top">
159
165
  <AttachmentPrimitive.Name />
160
166
  </TooltipContent>
@@ -1,10 +1,17 @@
1
1
  "use client";
2
2
 
3
- import { ElementRef, forwardRef, ComponentPropsWithoutRef } from "react";
3
+ import {
4
+ ElementRef,
5
+ forwardRef,
6
+ ComponentPropsWithoutRef,
7
+ MouseEventHandler,
8
+ } from "react";
4
9
  import { Primitive } from "@radix-ui/react-primitive";
5
10
  import { composeEventHandlers } from "@radix-ui/primitive";
6
11
 
7
- type ActionButtonCallback<TProps> = (props: TProps) => null | (() => void);
12
+ type ActionButtonCallback<TProps> = (
13
+ props: TProps,
14
+ ) => MouseEventHandler<HTMLButtonElement> | null;
8
15
 
9
16
  type PrimitiveButtonProps = ComponentPropsWithoutRef<typeof Primitive.button>;
10
17
 
@@ -33,16 +40,14 @@ export const createActionButton = <TProps,>(
33
40
  }
34
41
  });
35
42
 
36
- const callback = useActionButton(forwardedProps as TProps);
43
+ const callback = useActionButton(forwardedProps as TProps) ?? undefined;
37
44
  return (
38
45
  <Primitive.button
39
46
  type="button"
40
47
  {...primitiveProps}
41
48
  ref={forwardedRef}
42
49
  disabled={primitiveProps.disabled || !callback}
43
- onClick={composeEventHandlers(primitiveProps.onClick, () => {
44
- callback?.();
45
- })}
50
+ onClick={composeEventHandlers(primitiveProps.onClick, callback)}
46
51
  />
47
52
  );
48
53
  });