@assistant-ui/react 0.7.45 → 0.7.47

Sign up to get free protection for your applications and to get access to all the features.
Files changed (221) hide show
  1. package/dist/api/AssistantRuntime.d.ts +1 -0
  2. package/dist/api/AssistantRuntime.d.ts.map +1 -1
  3. package/dist/api/AssistantRuntime.js +5 -0
  4. package/dist/api/AssistantRuntime.js.map +1 -1
  5. package/dist/api/AssistantRuntime.mjs +5 -0
  6. package/dist/api/AssistantRuntime.mjs.map +1 -1
  7. package/dist/api/AttachmentRuntime.d.ts +1 -0
  8. package/dist/api/AttachmentRuntime.d.ts.map +1 -1
  9. package/dist/api/AttachmentRuntime.js +5 -0
  10. package/dist/api/AttachmentRuntime.js.map +1 -1
  11. package/dist/api/AttachmentRuntime.mjs +5 -0
  12. package/dist/api/AttachmentRuntime.mjs.map +1 -1
  13. package/dist/api/ComposerRuntime.d.ts +2 -0
  14. package/dist/api/ComposerRuntime.d.ts.map +1 -1
  15. package/dist/api/ComposerRuntime.js +19 -0
  16. package/dist/api/ComposerRuntime.js.map +1 -1
  17. package/dist/api/ComposerRuntime.mjs +19 -0
  18. package/dist/api/ComposerRuntime.mjs.map +1 -1
  19. package/dist/api/ContentPartRuntime.d.ts +1 -0
  20. package/dist/api/ContentPartRuntime.d.ts.map +1 -1
  21. package/dist/api/ContentPartRuntime.js +5 -0
  22. package/dist/api/ContentPartRuntime.js.map +1 -1
  23. package/dist/api/ContentPartRuntime.mjs +5 -0
  24. package/dist/api/ContentPartRuntime.mjs.map +1 -1
  25. package/dist/api/MessageRuntime.d.ts +1 -0
  26. package/dist/api/MessageRuntime.d.ts.map +1 -1
  27. package/dist/api/MessageRuntime.js +13 -0
  28. package/dist/api/MessageRuntime.js.map +1 -1
  29. package/dist/api/MessageRuntime.mjs +13 -0
  30. package/dist/api/MessageRuntime.mjs.map +1 -1
  31. package/dist/api/ThreadListItemRuntime.d.ts +1 -0
  32. package/dist/api/ThreadListItemRuntime.d.ts.map +1 -1
  33. package/dist/api/ThreadListItemRuntime.js +11 -0
  34. package/dist/api/ThreadListItemRuntime.js.map +1 -1
  35. package/dist/api/ThreadListItemRuntime.mjs +11 -0
  36. package/dist/api/ThreadListItemRuntime.mjs.map +1 -1
  37. package/dist/api/ThreadListRuntime.d.ts +1 -0
  38. package/dist/api/ThreadListRuntime.d.ts.map +1 -1
  39. package/dist/api/ThreadListRuntime.js +10 -0
  40. package/dist/api/ThreadListRuntime.js.map +1 -1
  41. package/dist/api/ThreadListRuntime.mjs +10 -0
  42. package/dist/api/ThreadListRuntime.mjs.map +1 -1
  43. package/dist/api/ThreadRuntime.d.ts +1 -1
  44. package/dist/api/ThreadRuntime.d.ts.map +1 -1
  45. package/dist/api/ThreadRuntime.js +14 -3
  46. package/dist/api/ThreadRuntime.js.map +1 -1
  47. package/dist/api/ThreadRuntime.mjs +14 -3
  48. package/dist/api/ThreadRuntime.mjs.map +1 -1
  49. package/dist/context/providers/AssistantRuntimeProvider.d.ts.map +1 -1
  50. package/dist/context/providers/AssistantRuntimeProvider.js +5 -14
  51. package/dist/context/providers/AssistantRuntimeProvider.js.map +1 -1
  52. package/dist/context/providers/AssistantRuntimeProvider.mjs +5 -14
  53. package/dist/context/providers/AssistantRuntimeProvider.mjs.map +1 -1
  54. package/dist/context/providers/AttachmentRuntimeProvider.d.ts.map +1 -1
  55. package/dist/context/providers/AttachmentRuntimeProvider.js +5 -16
  56. package/dist/context/providers/AttachmentRuntimeProvider.js.map +1 -1
  57. package/dist/context/providers/AttachmentRuntimeProvider.mjs +6 -21
  58. package/dist/context/providers/AttachmentRuntimeProvider.mjs.map +1 -1
  59. package/dist/context/providers/ContentPartRuntimeProvider.d.ts +0 -1
  60. package/dist/context/providers/ContentPartRuntimeProvider.d.ts.map +1 -1
  61. package/dist/context/providers/ContentPartRuntimeProvider.js +5 -15
  62. package/dist/context/providers/ContentPartRuntimeProvider.js.map +1 -1
  63. package/dist/context/providers/ContentPartRuntimeProvider.mjs +4 -13
  64. package/dist/context/providers/ContentPartRuntimeProvider.mjs.map +1 -1
  65. package/dist/context/providers/MessageRuntimeProvider.d.ts.map +1 -1
  66. package/dist/context/providers/MessageRuntimeProvider.js +3 -22
  67. package/dist/context/providers/MessageRuntimeProvider.js.map +1 -1
  68. package/dist/context/providers/MessageRuntimeProvider.mjs +3 -22
  69. package/dist/context/providers/MessageRuntimeProvider.mjs.map +1 -1
  70. package/dist/context/providers/TextContentPartProvider.d.ts.map +1 -1
  71. package/dist/context/providers/TextContentPartProvider.js +13 -12
  72. package/dist/context/providers/TextContentPartProvider.js.map +1 -1
  73. package/dist/context/providers/TextContentPartProvider.mjs +13 -12
  74. package/dist/context/providers/TextContentPartProvider.mjs.map +1 -1
  75. package/dist/context/providers/ThreadListItemRuntimeProvider.d.ts +0 -1
  76. package/dist/context/providers/ThreadListItemRuntimeProvider.d.ts.map +1 -1
  77. package/dist/context/providers/ThreadListItemRuntimeProvider.js +5 -15
  78. package/dist/context/providers/ThreadListItemRuntimeProvider.js.map +1 -1
  79. package/dist/context/providers/ThreadListItemRuntimeProvider.mjs +4 -13
  80. package/dist/context/providers/ThreadListItemRuntimeProvider.mjs.map +1 -1
  81. package/dist/context/providers/ThreadRuntimeProvider.d.ts.map +1 -1
  82. package/dist/context/providers/ThreadRuntimeProvider.js +5 -24
  83. package/dist/context/providers/ThreadRuntimeProvider.js.map +1 -1
  84. package/dist/context/providers/ThreadRuntimeProvider.mjs +6 -25
  85. package/dist/context/providers/ThreadRuntimeProvider.mjs.map +1 -1
  86. package/dist/context/react/AssistantContext.d.ts +26 -17
  87. package/dist/context/react/AssistantContext.d.ts.map +1 -1
  88. package/dist/context/react/AssistantContext.js +3 -4
  89. package/dist/context/react/AssistantContext.js.map +1 -1
  90. package/dist/context/react/AssistantContext.mjs +3 -4
  91. package/dist/context/react/AssistantContext.mjs.map +1 -1
  92. package/dist/context/react/AttachmentContext.d.ts +558 -30
  93. package/dist/context/react/AttachmentContext.d.ts.map +1 -1
  94. package/dist/context/react/AttachmentContext.js +32 -52
  95. package/dist/context/react/AttachmentContext.js.map +1 -1
  96. package/dist/context/react/AttachmentContext.mjs +33 -52
  97. package/dist/context/react/AttachmentContext.mjs.map +1 -1
  98. package/dist/context/react/ComposerContext.d.ts +28 -19
  99. package/dist/context/react/ComposerContext.d.ts.map +1 -1
  100. package/dist/context/react/ComposerContext.js +2 -19
  101. package/dist/context/react/ComposerContext.js.map +1 -1
  102. package/dist/context/react/ComposerContext.mjs +4 -20
  103. package/dist/context/react/ComposerContext.mjs.map +1 -1
  104. package/dist/context/react/ContentPartContext.d.ts +22 -16
  105. package/dist/context/react/ContentPartContext.d.ts.map +1 -1
  106. package/dist/context/react/ContentPartContext.js +2 -7
  107. package/dist/context/react/ContentPartContext.js.map +1 -1
  108. package/dist/context/react/ContentPartContext.mjs +2 -6
  109. package/dist/context/react/ContentPartContext.mjs.map +1 -1
  110. package/dist/context/react/MessageContext.d.ts +49 -29
  111. package/dist/context/react/MessageContext.d.ts.map +1 -1
  112. package/dist/context/react/MessageContext.js +5 -9
  113. package/dist/context/react/MessageContext.js.map +1 -1
  114. package/dist/context/react/MessageContext.mjs +5 -8
  115. package/dist/context/react/MessageContext.mjs.map +1 -1
  116. package/dist/context/react/ThreadContext.d.ts +44 -24
  117. package/dist/context/react/ThreadContext.d.ts.map +1 -1
  118. package/dist/context/react/ThreadContext.js +5 -9
  119. package/dist/context/react/ThreadContext.js.map +1 -1
  120. package/dist/context/react/ThreadContext.mjs +5 -8
  121. package/dist/context/react/ThreadContext.mjs.map +1 -1
  122. package/dist/context/react/ThreadListItemContext.d.ts +22 -16
  123. package/dist/context/react/ThreadListItemContext.d.ts.map +1 -1
  124. package/dist/context/react/ThreadListItemContext.js +3 -6
  125. package/dist/context/react/ThreadListItemContext.js.map +1 -1
  126. package/dist/context/react/ThreadListItemContext.mjs +3 -5
  127. package/dist/context/react/ThreadListItemContext.mjs.map +1 -1
  128. package/dist/context/react/index.d.ts +1 -0
  129. package/dist/context/react/index.d.ts.map +1 -1
  130. package/dist/context/react/index.js +3 -0
  131. package/dist/context/react/index.js.map +1 -1
  132. package/dist/context/react/index.mjs +2 -0
  133. package/dist/context/react/index.mjs.map +1 -1
  134. package/dist/context/react/utils/createContextHook.d.ts +3 -8
  135. package/dist/context/react/utils/createContextHook.d.ts.map +1 -1
  136. package/dist/context/react/utils/createContextHook.js.map +1 -1
  137. package/dist/context/react/utils/createContextHook.mjs.map +1 -1
  138. package/dist/context/react/utils/createStateHookForRuntime.d.ts +31 -0
  139. package/dist/context/react/utils/createStateHookForRuntime.d.ts.map +1 -0
  140. package/dist/context/react/utils/createStateHookForRuntime.js +47 -0
  141. package/dist/context/react/utils/createStateHookForRuntime.js.map +1 -0
  142. package/dist/context/react/utils/createStateHookForRuntime.mjs +24 -0
  143. package/dist/context/react/utils/createStateHookForRuntime.mjs.map +1 -0
  144. package/dist/context/react/utils/ensureBinding.d.ts +2 -0
  145. package/dist/context/react/utils/ensureBinding.d.ts.map +1 -0
  146. package/dist/context/react/utils/ensureBinding.js +36 -0
  147. package/dist/context/react/utils/ensureBinding.js.map +1 -0
  148. package/dist/context/react/utils/ensureBinding.mjs +11 -0
  149. package/dist/context/react/utils/ensureBinding.mjs.map +1 -0
  150. package/dist/context/react/utils/useRuntimeState.d.ts +10 -0
  151. package/dist/context/react/utils/useRuntimeState.d.ts.map +1 -0
  152. package/dist/context/react/utils/useRuntimeState.js +48 -0
  153. package/dist/context/react/utils/useRuntimeState.js.map +1 -0
  154. package/dist/context/react/utils/useRuntimeState.mjs +22 -0
  155. package/dist/context/react/utils/useRuntimeState.mjs.map +1 -0
  156. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts +1 -1
  157. package/dist/runtimes/adapters/attachment/AttachmentAdapter.d.ts.map +1 -1
  158. package/dist/runtimes/adapters/attachment/AttachmentAdapter.js.map +1 -1
  159. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.d.ts +1 -1
  160. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.d.ts.map +1 -1
  161. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.js +1 -1
  162. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.js.map +1 -1
  163. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.mjs +1 -1
  164. package/dist/runtimes/adapters/attachment/CompositeAttachmentAdapter.mjs.map +1 -1
  165. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.d.ts.map +1 -1
  166. package/dist/runtimes/adapters/thread-history/ThreadHistoryAdapter.js.map +1 -1
  167. package/dist/runtimes/composer/BaseComposerRuntimeCore.d.ts.map +1 -1
  168. package/dist/runtimes/composer/BaseComposerRuntimeCore.js +22 -2
  169. package/dist/runtimes/composer/BaseComposerRuntimeCore.js.map +1 -1
  170. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs +22 -2
  171. package/dist/runtimes/composer/BaseComposerRuntimeCore.mjs.map +1 -1
  172. package/dist/runtimes/local/useLocalRuntime.d.ts.map +1 -1
  173. package/dist/runtimes/local/useLocalRuntime.js +4 -0
  174. package/dist/runtimes/local/useLocalRuntime.js.map +1 -1
  175. package/dist/runtimes/local/useLocalRuntime.mjs +4 -0
  176. package/dist/runtimes/local/useLocalRuntime.mjs.map +1 -1
  177. package/dist/ui/thread-config.d.ts +1 -0
  178. package/dist/ui/thread-config.d.ts.map +1 -1
  179. package/dist/ui/thread-config.js.map +1 -1
  180. package/dist/ui/thread-config.mjs.map +1 -1
  181. package/dist/ui/thread.d.ts +2 -1
  182. package/dist/ui/thread.d.ts.map +1 -1
  183. package/dist/ui/thread.js +15 -2
  184. package/dist/ui/thread.js.map +1 -1
  185. package/dist/ui/thread.mjs +15 -2
  186. package/dist/ui/thread.mjs.map +1 -1
  187. package/package.json +2 -2
  188. package/src/api/AssistantRuntime.ts +7 -0
  189. package/src/api/AttachmentRuntime.ts +6 -0
  190. package/src/api/ComposerRuntime.ts +21 -0
  191. package/src/api/ContentPartRuntime.ts +6 -0
  192. package/src/api/MessageRuntime.ts +15 -0
  193. package/src/api/ThreadListItemRuntime.ts +12 -0
  194. package/src/api/ThreadListRuntime.ts +11 -0
  195. package/src/api/ThreadRuntime.ts +15 -4
  196. package/src/context/providers/AssistantRuntimeProvider.tsx +5 -17
  197. package/src/context/providers/AttachmentRuntimeProvider.tsx +6 -24
  198. package/src/context/providers/ContentPartRuntimeProvider.tsx +4 -14
  199. package/src/context/providers/MessageRuntimeProvider.tsx +5 -31
  200. package/src/context/providers/TextContentPartProvider.tsx +26 -22
  201. package/src/context/providers/ThreadListItemRuntimeProvider.tsx +3 -14
  202. package/src/context/providers/ThreadRuntimeProvider.tsx +7 -33
  203. package/src/context/react/AssistantContext.ts +7 -7
  204. package/src/context/react/AttachmentContext.ts +45 -136
  205. package/src/context/react/ComposerContext.ts +6 -29
  206. package/src/context/react/ContentPartContext.ts +3 -8
  207. package/src/context/react/MessageContext.ts +10 -13
  208. package/src/context/react/ThreadContext.ts +9 -12
  209. package/src/context/react/ThreadListItemContext.ts +4 -7
  210. package/src/context/react/index.ts +2 -0
  211. package/src/context/react/utils/createContextHook.ts +1 -3
  212. package/src/context/react/utils/createStateHookForRuntime.ts +80 -0
  213. package/src/context/react/utils/ensureBinding.ts +45 -0
  214. package/src/context/react/utils/useRuntimeState.ts +43 -0
  215. package/src/runtimes/adapters/attachment/AttachmentAdapter.ts +3 -1
  216. package/src/runtimes/adapters/attachment/CompositeAttachmentAdapter.ts +1 -1
  217. package/src/runtimes/adapters/thread-history/ThreadHistoryAdapter.ts +1 -0
  218. package/src/runtimes/composer/BaseComposerRuntimeCore.tsx +24 -2
  219. package/src/runtimes/local/useLocalRuntime.tsx +5 -0
  220. package/src/ui/thread-config.tsx +1 -0
  221. package/src/ui/thread.tsx +14 -3
@@ -55,6 +55,18 @@ export class ThreadListItemRuntimeImpl implements ThreadListItemRuntime {
55
55
  private _threadListBinding: ThreadListRuntimeCoreBinding,
56
56
  ) {}
57
57
 
58
+ protected __internal_bindMethods() {
59
+ this.switchTo = this.switchTo.bind(this);
60
+ this.rename = this.rename.bind(this);
61
+ this.archive = this.archive.bind(this);
62
+ this.unarchive = this.unarchive.bind(this);
63
+ this.delete = this.delete.bind(this);
64
+ this.initialize = this.initialize.bind(this);
65
+ this.subscribe = this.subscribe.bind(this);
66
+ this.unstable_on = this.unstable_on.bind(this);
67
+ this.getState = this.getState.bind(this);
68
+ }
69
+
58
70
  public getState(): ThreadListItemState {
59
71
  return this._core.getState();
60
72
  }
@@ -116,6 +116,17 @@ export class ThreadListRuntimeImpl implements ThreadListRuntime {
116
116
  );
117
117
  }
118
118
 
119
+ protected __internal_bindMethods() {
120
+ this.switchToThread = this.switchToThread.bind(this);
121
+ this.switchToNewThread = this.switchToNewThread.bind(this);
122
+ this.getState = this.getState.bind(this);
123
+ this.subscribe = this.subscribe.bind(this);
124
+ this.getById = this.getById.bind(this);
125
+ this.getItemById = this.getItemById.bind(this);
126
+ this.getItemByIndex = this.getItemByIndex.bind(this);
127
+ this.getArchivedItemByIndex = this.getArchivedItemByIndex.bind(this);
128
+ }
129
+
119
130
  public switchToThread(threadId: string): Promise<void> {
120
131
  return this._core.switchToThread(threadId);
121
132
  }
@@ -286,6 +286,21 @@ export class ThreadRuntimeImpl implements ThreadRuntime {
286
286
  );
287
287
  }
288
288
 
289
+ protected __internal_bindMethods() {
290
+ this.append = this.append.bind(this);
291
+ this.startRun = this.startRun.bind(this);
292
+ this.cancelRun = this.cancelRun.bind(this);
293
+ this.stopSpeaking = this.stopSpeaking.bind(this);
294
+ this.export = this.export.bind(this);
295
+ this.import = this.import.bind(this);
296
+ this.getMesssageByIndex = this.getMesssageByIndex.bind(this);
297
+ this.getMesssageById = this.getMesssageById.bind(this);
298
+ this.subscribe = this.subscribe.bind(this);
299
+ this.unstable_on = this.unstable_on.bind(this);
300
+ this.getModelConfig = this.getModelConfig.bind(this);
301
+ this.getState = this.getState.bind(this);
302
+ }
303
+
289
304
  public readonly composer;
290
305
 
291
306
  public getState() {
@@ -324,10 +339,6 @@ export class ThreadRuntimeImpl implements ThreadRuntime {
324
339
  return this._threadBinding.getState().stopSpeaking();
325
340
  }
326
341
 
327
- public getSubmittedFeedback(messageId: string) {
328
- return this._threadBinding.getState().getSubmittedFeedback(messageId);
329
- }
330
-
331
342
  public export() {
332
343
  return this._threadBinding.getState().export();
333
344
  }
@@ -15,6 +15,7 @@ import { AssistantRuntime } from "../../api/AssistantRuntime";
15
15
  import { create } from "zustand";
16
16
  import { writableStore } from "../ReadonlyStore";
17
17
  import { AssistantRuntimeCore } from "../../runtimes/core/AssistantRuntimeCore";
18
+ import { ensureBinding } from "../react/utils/ensureBinding";
18
19
 
19
20
  export namespace AssistantRuntimeProvider {
20
21
  export type Props = PropsWithChildren<{
@@ -29,6 +30,8 @@ const useAssistantRuntimeStore = (runtime: AssistantRuntime) => {
29
30
  const [store] = useState(() => create(() => runtime));
30
31
 
31
32
  useEffect(() => {
33
+ ensureBinding(runtime);
34
+
32
35
  writableStore(store).setState(runtime, true);
33
36
  }, [runtime, store]);
34
37
 
@@ -39,19 +42,6 @@ const useAssistantToolUIsStore = () => {
39
42
  return useMemo(() => makeAssistantToolUIsStore(), []);
40
43
  };
41
44
 
42
- const useThreadListStore = (runtime: AssistantRuntime) => {
43
- const [store] = useState(() => create(() => runtime.threadList.getState()));
44
-
45
- useEffect(() => {
46
- const updateState = () =>
47
- writableStore(store).setState(runtime.threadList.getState(), true);
48
- updateState();
49
- return runtime.threadList.subscribe(updateState);
50
- }, [runtime, store]);
51
-
52
- return store;
53
- };
54
-
55
45
  const getRenderComponent = (runtime: AssistantRuntime) => {
56
46
  return (runtime as { _core?: AssistantRuntimeCore })._core?.RenderComponent;
57
47
  };
@@ -61,14 +51,12 @@ export const AssistantRuntimeProviderImpl: FC<
61
51
  > = ({ children, runtime }) => {
62
52
  const useAssistantRuntime = useAssistantRuntimeStore(runtime);
63
53
  const useToolUIs = useAssistantToolUIsStore();
64
- const useThreadList = useThreadListStore(runtime);
65
- const context = useMemo(() => {
54
+ const [context] = useState(() => {
66
55
  return {
67
56
  useToolUIs,
68
57
  useAssistantRuntime,
69
- useThreadList,
70
58
  };
71
- }, [useAssistantRuntime, useToolUIs, useThreadList]);
59
+ });
72
60
 
73
61
  const RenderComponent = getRenderComponent(runtime);
74
62
 
@@ -1,16 +1,11 @@
1
1
  "use client";
2
2
 
3
- import {
4
- type FC,
5
- type PropsWithChildren,
6
- useEffect,
7
- useMemo,
8
- useState,
9
- } from "react";
3
+ import { type FC, type PropsWithChildren, useEffect, useState } from "react";
10
4
  import { create } from "zustand";
11
5
  import { AttachmentContext } from "../react/AttachmentContext";
12
6
  import { writableStore } from "../ReadonlyStore";
13
7
  import { AttachmentRuntime } from "../../api/AttachmentRuntime";
8
+ import { ensureBinding } from "../react/utils/ensureBinding";
14
9
 
15
10
  export namespace AttachmentRuntimeProvider {
16
11
  export type Props = PropsWithChildren<{
@@ -22,18 +17,9 @@ const useAttachmentRuntimeStore = (runtime: AttachmentRuntime) => {
22
17
  const [store] = useState(() => create(() => runtime));
23
18
 
24
19
  useEffect(() => {
25
- writableStore(store).setState(runtime, true);
26
- }, [runtime, store]);
20
+ ensureBinding(runtime);
27
21
 
28
- return store;
29
- };
30
- const useAttachmentStore = (runtime: AttachmentRuntime) => {
31
- const [store] = useState(() => create(() => runtime.getState()));
32
- useEffect(() => {
33
- const updateState = () =>
34
- writableStore(store).setState(runtime.getState(), true);
35
- updateState();
36
- return runtime.subscribe(updateState);
22
+ writableStore(store).setState(runtime, true);
37
23
  }, [runtime, store]);
38
24
 
39
25
  return store;
@@ -44,15 +30,11 @@ export const AttachmentRuntimeProvider: FC<AttachmentRuntimeProvider.Props> = ({
44
30
  children,
45
31
  }) => {
46
32
  const useAttachmentRuntime = useAttachmentRuntimeStore(runtime);
47
- const useAttachment = useAttachmentStore(runtime);
48
- const source = useAttachment((s) => s.source);
49
- const context = useMemo(() => {
33
+ const [context] = useState(() => {
50
34
  return {
51
- source,
52
35
  useAttachmentRuntime,
53
- useAttachment,
54
36
  };
55
- }, [useAttachmentRuntime, useAttachment]);
37
+ });
56
38
 
57
39
  return (
58
40
  <AttachmentContext.Provider value={context}>
@@ -6,6 +6,7 @@ import { ContentPartContext } from "../react/ContentPartContext";
6
6
  import type { ContentPartContextValue } from "../react/ContentPartContext";
7
7
  import { writableStore } from "../ReadonlyStore";
8
8
  import { ContentPartRuntime } from "../../api/ContentPartRuntime";
9
+ import { ensureBinding } from "../react/utils/ensureBinding";
9
10
 
10
11
  export namespace ContentPartRuntimeProvider {
11
12
  export type Props = PropsWithChildren<{
@@ -17,19 +18,9 @@ const useContentPartRuntimeStore = (runtime: ContentPartRuntime) => {
17
18
  const [store] = useState(() => create(() => runtime));
18
19
 
19
20
  useEffect(() => {
20
- writableStore(store).setState(runtime, true);
21
- }, [runtime, store]);
21
+ ensureBinding(runtime);
22
22
 
23
- return store;
24
- };
25
-
26
- export const useContentPartStore = (runtime: ContentPartRuntime) => {
27
- const [store] = useState(() => create(() => runtime.getState()));
28
- useEffect(() => {
29
- const updateState = () =>
30
- writableStore(store).setState(runtime.getState(), true);
31
- updateState();
32
- return runtime.subscribe(updateState);
23
+ writableStore(store).setState(runtime, true);
33
24
  }, [runtime, store]);
34
25
 
35
26
  return store;
@@ -39,9 +30,8 @@ export const ContentPartRuntimeProvider: FC<
39
30
  ContentPartRuntimeProvider.Props
40
31
  > = ({ runtime, children }) => {
41
32
  const useContentPartRuntime = useContentPartRuntimeStore(runtime);
42
- const useContentPart = useContentPartStore(runtime);
43
33
  const [context] = useState<ContentPartContextValue>(() => {
44
- return { useContentPartRuntime, useContentPart };
34
+ return { useContentPartRuntime };
45
35
  });
46
36
 
47
37
  return (
@@ -5,8 +5,9 @@ import { create } from "zustand";
5
5
  import { MessageContext } from "../react/MessageContext";
6
6
  import type { MessageContextValue } from "../react/MessageContext";
7
7
  import { makeMessageUtilsStore } from "../stores/MessageUtils";
8
- import { ReadonlyStore, writableStore } from "../ReadonlyStore";
8
+ import { writableStore } from "../ReadonlyStore";
9
9
  import { MessageRuntime } from "../../api/MessageRuntime";
10
+ import { ensureBinding } from "../react/utils/ensureBinding";
10
11
 
11
12
  export namespace MessageRuntimeProvider {
12
13
  export type Props = PropsWithChildren<{
@@ -18,19 +19,9 @@ const useMessageRuntimeStore = (runtime: MessageRuntime) => {
18
19
  const [store] = useState(() => create(() => runtime));
19
20
 
20
21
  useEffect(() => {
21
- writableStore(store).setState(runtime, true);
22
- }, [runtime, store]);
22
+ ensureBinding(runtime);
23
23
 
24
- return store;
25
- };
26
-
27
- const useMessageStore = (runtime: MessageRuntime) => {
28
- const [store] = useState(() => create(() => runtime.getState()));
29
- useEffect(() => {
30
- const updateState = () =>
31
- writableStore(store).setState(runtime.getState(), true);
32
- updateState();
33
- return runtime.subscribe(updateState);
24
+ writableStore(store).setState(runtime, true);
34
25
  }, [runtime, store]);
35
26
 
36
27
  return store;
@@ -41,31 +32,14 @@ const useMessageUtilsStore = () => {
41
32
  return store;
42
33
  };
43
34
 
44
- const useEditComposerStore = (
45
- useMessageRuntime: ReadonlyStore<MessageRuntime>,
46
- ) => {
47
- const runtime = useMessageRuntime.getState().composer;
48
- const [store] = useState(() => create(() => runtime.getState()));
49
-
50
- useEffect(() => {
51
- const updateState = () => writableStore(store).setState(runtime.getState());
52
- updateState();
53
- return runtime.subscribe(updateState);
54
- }, [runtime, store]);
55
-
56
- return store;
57
- };
58
-
59
35
  export const MessageRuntimeProvider: FC<MessageRuntimeProvider.Props> = ({
60
36
  runtime,
61
37
  children,
62
38
  }) => {
63
39
  const useMessageRuntime = useMessageRuntimeStore(runtime);
64
- const useMessage = useMessageStore(runtime);
65
40
  const useMessageUtils = useMessageUtilsStore();
66
- const useEditComposer = useEditComposerStore(useMessageRuntime);
67
41
  const [context] = useState<MessageContextValue>(() => {
68
- return { useMessageRuntime, useMessage, useMessageUtils, useEditComposer };
42
+ return { useMessageRuntime, useMessageUtils };
69
43
  });
70
44
 
71
45
  return (
@@ -1,17 +1,18 @@
1
1
  "use client";
2
2
 
3
3
  import { FC, PropsWithChildren, useEffect, useState } from "react";
4
- import { create } from "zustand";
4
+ import { create, StoreApi, UseBoundStore } from "zustand";
5
5
  import {
6
6
  ContentPartContext,
7
7
  ContentPartContextValue,
8
8
  } from "../react/ContentPartContext";
9
- import { ContentPartStatus, TextContentPart } from "../../types/AssistantTypes";
9
+ import { ContentPartStatus } from "../../types/AssistantTypes";
10
10
  import { writableStore } from "../ReadonlyStore";
11
11
  import {
12
12
  ContentPartRuntimeImpl,
13
13
  ContentPartState,
14
14
  } from "../../api/ContentPartRuntime";
15
+ import { ensureBinding } from "../react/utils/ensureBinding";
15
16
 
16
17
  export namespace TextContentPartProvider {
17
18
  export type Props = PropsWithChildren<{
@@ -33,36 +34,39 @@ export const TextContentPartProvider: FC<TextContentPartProvider.Props> = ({
33
34
  text,
34
35
  isRunning,
35
36
  }) => {
36
- const [context] = useState<ContentPartContextValue>(() => {
37
- const useContentPart = create<ContentPartState>(() => ({
37
+ const [context] = useState<
38
+ ContentPartContextValue & {
39
+ useContentPart: UseBoundStore<
40
+ StoreApi<ContentPartState & { type: "text" }>
41
+ >;
42
+ }
43
+ >(() => {
44
+ const useContentPart = create<ContentPartState & { type: "text" }>(() => ({
38
45
  status: isRunning ? RUNNING_STATUS : COMPLETE_STATUS,
39
46
  type: "text",
40
47
  text,
41
48
  }));
42
49
 
43
- const useContentPartRuntime = create(
44
- () =>
45
- new ContentPartRuntimeImpl({
46
- path: {
47
- ref: "text",
48
- threadSelector: { type: "main" },
49
- messageSelector: { type: "messageId", messageId: "" },
50
- contentPartSelector: { type: "index", index: 0 },
51
- },
52
- getState: useContentPart.getState,
53
- subscribe: useContentPart.subscribe,
54
- }),
55
- );
50
+ const contentPartRuntime = new ContentPartRuntimeImpl({
51
+ path: {
52
+ ref: "text",
53
+ threadSelector: { type: "main" },
54
+ messageSelector: { type: "messageId", messageId: "" },
55
+ contentPartSelector: { type: "index", index: 0 },
56
+ },
57
+ getState: useContentPart.getState,
58
+ subscribe: useContentPart.subscribe,
59
+ });
60
+ ensureBinding(contentPartRuntime);
61
+
62
+ const useContentPartRuntime = create(() => contentPartRuntime);
56
63
 
57
64
  return { useContentPartRuntime, useContentPart };
58
65
  });
59
66
 
60
67
  useEffect(() => {
61
- const state = context.useContentPart.getState() as ContentPartState & {
62
- type: "text";
63
- };
64
-
65
- const textUpdated = (state as TextContentPart).text !== text;
68
+ const state = context.useContentPart.getState();
69
+ const textUpdated = state.text !== text;
66
70
  const targetStatus = isRunning ? RUNNING_STATUS : COMPLETE_STATUS;
67
71
  const statusUpdated = state.status !== targetStatus;
68
72
 
@@ -8,6 +8,7 @@ import {
8
8
  } from "../react/ThreadListItemContext";
9
9
  import { writableStore } from "../ReadonlyStore";
10
10
  import { ThreadListItemRuntime } from "../../api/ThreadListItemRuntime";
11
+ import { ensureBinding } from "../react/utils/ensureBinding";
11
12
 
12
13
  export namespace ThreadListItemRuntimeProvider {
13
14
  export type Props = PropsWithChildren<{
@@ -19,31 +20,19 @@ const useThreadListItemRuntimeStore = (runtime: ThreadListItemRuntime) => {
19
20
  const [store] = useState(() => create(() => runtime));
20
21
 
21
22
  useEffect(() => {
23
+ ensureBinding(runtime);
22
24
  writableStore(store).setState(runtime, true);
23
25
  }, [runtime, store]);
24
26
 
25
27
  return store;
26
28
  };
27
29
 
28
- export const useThreadListItemStore = (runtime: ThreadListItemRuntime) => {
29
- const [store] = useState(() => create(() => runtime.getState()));
30
- useEffect(() => {
31
- const updateState = () =>
32
- writableStore(store).setState(runtime.getState(), true);
33
- updateState();
34
- return runtime.subscribe(updateState);
35
- }, [runtime, store]);
36
-
37
- return store;
38
- };
39
-
40
30
  export const ThreadListItemRuntimeProvider: FC<
41
31
  ThreadListItemRuntimeProvider.Props
42
32
  > = ({ runtime, children }) => {
43
33
  const useThreadListItemRuntime = useThreadListItemRuntimeStore(runtime);
44
- const useThreadListItem = useThreadListItemStore(runtime);
45
34
  const [context] = useState<ThreadListItemContextValue>(() => {
46
- return { useThreadListItemRuntime, useThreadListItem };
35
+ return { useThreadListItemRuntime };
47
36
  });
48
37
 
49
38
  return (
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
 
3
3
  import type { FC, PropsWithChildren } from "react";
4
- import { useEffect, useMemo, useState } from "react";
4
+ import { useEffect, useState } from "react";
5
5
  import type { ThreadContextValue } from "../react/ThreadContext";
6
6
  import { ThreadContext } from "../react/ThreadContext";
7
7
  import { makeThreadViewportStore } from "../stores/ThreadViewport";
8
8
  import { writableStore } from "../ReadonlyStore";
9
9
  import { ThreadRuntime } from "../../api/ThreadRuntime";
10
10
  import { create } from "zustand";
11
- import { ThreadComposerRuntime } from "../../api/ComposerRuntime";
12
11
  import { ThreadListItemRuntime } from "../../api/ThreadListItemRuntime";
13
12
  import { ThreadListItemRuntimeProvider } from "./ThreadListItemRuntimeProvider";
13
+ import { ensureBinding } from "../react/utils/ensureBinding";
14
14
 
15
15
  type ThreadProviderProps = {
16
16
  listItemRuntime: ThreadListItemRuntime;
@@ -21,32 +21,10 @@ const useThreadRuntimeStore = (runtime: ThreadRuntime) => {
21
21
  const [store] = useState(() => create(() => runtime));
22
22
 
23
23
  useEffect(() => {
24
- writableStore(store).setState(runtime, true);
25
- }, [runtime, store]);
26
-
27
- return store;
28
- };
29
-
30
- const useThreadStore = (runtime: ThreadRuntime) => {
31
- const [store] = useState(() => create(() => runtime.getState()));
32
- useEffect(() => {
33
- const updateState = () =>
34
- writableStore(store).setState(runtime.getState(), true);
35
- updateState();
36
- return runtime.subscribe(updateState);
37
- }, [runtime, store]);
38
-
39
- return store;
40
- };
24
+ ensureBinding(runtime);
25
+ ensureBinding(runtime.composer);
41
26
 
42
- const useThreadComposerStore = (runtime: ThreadComposerRuntime) => {
43
- const [store] = useState(() => create(() => runtime.getState()));
44
-
45
- useEffect(() => {
46
- const updateState = () =>
47
- writableStore(store).setState(runtime.getState(), true);
48
- updateState();
49
- return runtime.subscribe(updateState);
27
+ writableStore(store).setState(runtime, true);
50
28
  }, [runtime, store]);
51
29
 
52
30
  return store;
@@ -56,19 +34,15 @@ export const ThreadRuntimeProvider: FC<
56
34
  PropsWithChildren<ThreadProviderProps>
57
35
  > = ({ children, listItemRuntime: threadListItemRuntime, runtime }) => {
58
36
  const useThreadRuntime = useThreadRuntimeStore(runtime);
59
- const useThread = useThreadStore(runtime);
60
- const useThreadComposer = useThreadComposerStore(runtime.composer);
61
37
 
62
- const context = useMemo<ThreadContextValue>(() => {
38
+ const [context] = useState<ThreadContextValue>(() => {
63
39
  const useViewport = makeThreadViewportStore();
64
40
 
65
41
  return {
66
- useThread,
67
42
  useThreadRuntime,
68
- useComposer: useThreadComposer,
69
43
  useViewport,
70
44
  };
71
- }, [useThread, useThreadRuntime, useThreadComposer]);
45
+ });
72
46
 
73
47
  return (
74
48
  <ThreadListItemRuntimeProvider runtime={threadListItemRuntime}>
@@ -7,12 +7,12 @@ import { createContextHook } from "./utils/createContextHook";
7
7
  import { createContextStoreHook } from "./utils/createContextStoreHook";
8
8
  import { UseBoundStore } from "zustand";
9
9
  import { AssistantRuntime } from "../../api/AssistantRuntime";
10
- import { ThreadListState } from "../../api/ThreadListRuntime";
10
+ import { ThreadListRuntime } from "../../api/ThreadListRuntime";
11
+ import { createStateHookForRuntime } from "./utils/createStateHookForRuntime";
11
12
 
12
13
  export type AssistantContextValue = {
13
- useToolUIs: UseBoundStore<ReadonlyStore<AssistantToolUIsState>>;
14
14
  useAssistantRuntime: UseBoundStore<ReadonlyStore<AssistantRuntime>>;
15
- useThreadList: UseBoundStore<ReadonlyStore<ThreadListState>>;
15
+ useToolUIs: UseBoundStore<ReadonlyStore<AssistantToolUIsState>>;
16
16
  };
17
17
 
18
18
  export const AssistantContext = createContext<AssistantContextValue | null>(
@@ -43,7 +43,7 @@ export const { useToolUIs, useToolUIsStore } = createContextStoreHook(
43
43
  "useToolUIs",
44
44
  );
45
45
 
46
- export const { useThreadList } = createContextStoreHook(
47
- useAssistantContext,
48
- "useThreadList",
49
- );
46
+ const useThreadListRuntime = (opt: {
47
+ optional: boolean | undefined;
48
+ }): ThreadListRuntime | null => useAssistantRuntime(opt)?.threads ?? null;
49
+ export const useThreadList = createStateHookForRuntime(useThreadListRuntime);