@assistant-ui/react 0.15.14 → 0.15.16

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 (210) hide show
  1. package/dist/assistant-transport.d.ts +32 -0
  2. package/dist/assistant-transport.d.ts.map +1 -0
  3. package/dist/assistant-transport.js +27 -0
  4. package/dist/assistant-transport.js.map +1 -0
  5. package/dist/context/providers/MessageProvider.js +1 -1
  6. package/dist/devtools/DevToolsHooks.d.ts +0 -2
  7. package/dist/devtools/DevToolsHooks.d.ts.map +1 -1
  8. package/dist/devtools/DevToolsHooks.js +10 -12
  9. package/dist/devtools/DevToolsHooks.js.map +1 -1
  10. package/dist/hooks/useMessageQuote.js +1 -1
  11. package/dist/hooks/useToolCallElapsed.js +1 -1
  12. package/dist/index.d.ts +4 -7
  13. package/dist/index.js +6 -8
  14. package/dist/legacy-runtime/AssistantRuntimeProvider.js +1 -1
  15. package/dist/mcp-apps/McpAppRenderer.js +1 -1
  16. package/dist/mcp-apps/McpAppsRemoteHost.d.ts.map +1 -1
  17. package/dist/mcp-apps/McpAppsRemoteHost.js +18 -2
  18. package/dist/mcp-apps/McpAppsRemoteHost.js.map +1 -1
  19. package/dist/mcp-apps/bridge.d.ts.map +1 -1
  20. package/dist/mcp-apps/bridge.js +33 -24
  21. package/dist/mcp-apps/bridge.js.map +1 -1
  22. package/dist/model-context/makeAssistantVisible.js +1 -1
  23. package/dist/primitives/actionBar/ActionBarCopy.js +1 -1
  24. package/dist/primitives/actionBar/ActionBarExportMarkdown.d.ts.map +1 -1
  25. package/dist/primitives/actionBar/ActionBarExportMarkdown.js +5 -2
  26. package/dist/primitives/actionBar/ActionBarExportMarkdown.js.map +1 -1
  27. package/dist/primitives/actionBar/ActionBarFeedbackNegative.js +1 -1
  28. package/dist/primitives/actionBar/ActionBarFeedbackPositive.js +1 -1
  29. package/dist/primitives/actionBar/ActionBarStopSpeaking.d.ts.map +1 -1
  30. package/dist/primitives/actionBar/ActionBarStopSpeaking.js +24 -37
  31. package/dist/primitives/actionBar/ActionBarStopSpeaking.js.map +1 -1
  32. package/dist/primitives/actionBar/useActionBarFloatStatus.js +1 -1
  33. package/dist/primitives/assistantModal/AssistantModalRoot.js +1 -1
  34. package/dist/primitives/attachment/AttachmentName.js +1 -1
  35. package/dist/primitives/attachment/AttachmentRemove.js +1 -1
  36. package/dist/primitives/attachment/AttachmentThumb.js +1 -1
  37. package/dist/primitives/branchPicker/BranchPickerCount.js +1 -1
  38. package/dist/primitives/branchPicker/BranchPickerNumber.js +1 -1
  39. package/dist/primitives/branchPicker/BranchPickerRoot.d.ts.map +1 -1
  40. package/dist/primitives/branchPicker/BranchPickerRoot.js +20 -15
  41. package/dist/primitives/branchPicker/BranchPickerRoot.js.map +1 -1
  42. package/dist/primitives/chainOfThought/ChainOfThoughtAccordionTrigger.js +1 -1
  43. package/dist/primitives/composer/ComposerAddAttachment.js +1 -1
  44. package/dist/primitives/composer/ComposerAttachmentDropzone.js +1 -1
  45. package/dist/primitives/composer/ComposerDictationTranscript.d.ts +2 -2
  46. package/dist/primitives/composer/ComposerDictationTranscript.js +3 -3
  47. package/dist/primitives/composer/ComposerDictationTranscript.js.map +1 -1
  48. package/dist/primitives/composer/ComposerInput.js +2 -2
  49. package/dist/primitives/composer/ComposerInput.js.map +1 -1
  50. package/dist/primitives/composer/ComposerQuote.js +1 -1
  51. package/dist/primitives/composer/ComposerRoot.js +1 -1
  52. package/dist/primitives/composer/ComposerStopDictation.js +1 -1
  53. package/dist/primitives/composer/trigger/TriggerPopover.js +1 -1
  54. package/dist/primitives/composer/trigger/triggerSelectionResource.d.ts.map +1 -1
  55. package/dist/primitives/composer/trigger/triggerSelectionResource.js +24 -20
  56. package/dist/primitives/composer/trigger/triggerSelectionResource.js.map +1 -1
  57. package/dist/primitives/composer/useComposerInputState.js +1 -1
  58. package/dist/primitives/message/MessageIf.js +1 -1
  59. package/dist/primitives/message/MessagePartsGrouped.js +1 -1
  60. package/dist/primitives/message/MessageRoot.js +1 -1
  61. package/dist/primitives/message.js +1 -1
  62. package/dist/primitives/queueItem/QueueItemRemove.js +1 -1
  63. package/dist/primitives/queueItem/QueueItemSteer.js +1 -1
  64. package/dist/primitives/queueItem/QueueItemText.js +1 -1
  65. package/dist/primitives/selectionToolbar/SelectionToolbarQuote.js +1 -1
  66. package/dist/primitives/suggestion/SuggestionDescription.js +1 -1
  67. package/dist/primitives/suggestion/SuggestionTitle.js +1 -1
  68. package/dist/primitives/suggestion/SuggestionTrigger.js +1 -1
  69. package/dist/primitives/thread/ThreadIf.js +1 -1
  70. package/dist/primitives/thread/ThreadRoot.d.ts +3 -0
  71. package/dist/primitives/thread/ThreadRoot.d.ts.map +1 -1
  72. package/dist/primitives/thread/ThreadRoot.js +44 -9
  73. package/dist/primitives/thread/ThreadRoot.js.map +1 -1
  74. package/dist/primitives/thread/ThreadViewport.d.ts.map +1 -1
  75. package/dist/primitives/thread/ThreadViewport.js +2 -13
  76. package/dist/primitives/thread/ThreadViewport.js.map +1 -1
  77. package/dist/primitives/thread/useThreadViewportAutoScroll.d.ts.map +1 -1
  78. package/dist/primitives/thread/useThreadViewportAutoScroll.js +23 -8
  79. package/dist/primitives/thread/useThreadViewportAutoScroll.js.map +1 -1
  80. package/dist/primitives/threadList/ThreadListNew.js +1 -1
  81. package/dist/sandbox-host/SandboxHost.d.ts.map +1 -1
  82. package/dist/sandbox-host/SandboxHost.js +6 -1
  83. package/dist/sandbox-host/SandboxHost.js.map +1 -1
  84. package/dist/unstable/useComposerInput.d.ts +2 -2
  85. package/dist/unstable/useComposerInput.js +1 -1
  86. package/dist/unstable/useComposerInput.js.map +1 -1
  87. package/dist/unstable/useComposerInputHistory.js +2 -2
  88. package/dist/unstable/useComposerInputHistory.js.map +1 -1
  89. package/dist/unstable/useLiveCompletionAdapter.d.ts +5 -0
  90. package/dist/unstable/useLiveCompletionAdapter.d.ts.map +1 -1
  91. package/dist/unstable/useLiveCompletionAdapter.js +16 -3
  92. package/dist/unstable/useLiveCompletionAdapter.js.map +1 -1
  93. package/dist/unstable/useMentionAdapter.d.ts +1 -1
  94. package/dist/utils/invokeCallbackSafely.d.ts +5 -0
  95. package/dist/utils/invokeCallbackSafely.d.ts.map +1 -0
  96. package/dist/utils/invokeCallbackSafely.js +15 -0
  97. package/dist/utils/invokeCallbackSafely.js.map +1 -0
  98. package/dist/utils/smooth/SmoothContext.d.ts +6 -6
  99. package/dist/utils/smooth/SmoothContext.js +1 -1
  100. package/dist/utils/smooth/useSmooth.d.ts +3 -0
  101. package/dist/utils/smooth/useSmooth.d.ts.map +1 -1
  102. package/dist/utils/smooth/useSmooth.js +16 -1
  103. package/dist/utils/smooth/useSmooth.js.map +1 -1
  104. package/dist/utils/useToolArgsFieldStatus.js +1 -1
  105. package/package.json +10 -10
  106. package/src/assistant-transport.ts +94 -0
  107. package/src/devtools/DevToolsHooks.test.ts +40 -0
  108. package/src/devtools/DevToolsHooks.ts +10 -15
  109. package/src/index.ts +8 -4
  110. package/src/mcp-apps/McpAppsRemoteHost.test.ts +29 -3
  111. package/src/mcp-apps/McpAppsRemoteHost.ts +42 -7
  112. package/src/mcp-apps/bridge.test.ts +153 -0
  113. package/src/mcp-apps/bridge.ts +42 -30
  114. package/src/model-context/frame/SPEC_AssistantFrame.md +1 -1
  115. package/src/primitives/actionBar/ActionBarExportMarkdown.test.tsx +67 -0
  116. package/src/primitives/actionBar/ActionBarExportMarkdown.tsx +3 -1
  117. package/src/primitives/actionBar/ActionBarStopSpeaking.tsx +0 -9
  118. package/src/primitives/branchPicker/BranchPickerRoot.tsx +5 -3
  119. package/src/primitives/composer/ComposerDictationTranscript.tsx +2 -2
  120. package/src/primitives/composer/ComposerInput.tsx +1 -1
  121. package/src/primitives/composer/trigger/triggerSelectionResource.test.ts +135 -0
  122. package/src/primitives/composer/trigger/triggerSelectionResource.ts +2 -0
  123. package/src/primitives/thread/ThreadRoot.test.tsx +251 -0
  124. package/src/primitives/thread/ThreadRoot.tsx +33 -0
  125. package/src/primitives/thread/ThreadViewport.tsx +1 -8
  126. package/src/primitives/thread/useThreadViewportAutoScroll.test.tsx +152 -0
  127. package/src/primitives/thread/useThreadViewportAutoScroll.ts +26 -19
  128. package/src/sandbox-host/SandboxHost.test.tsx +90 -0
  129. package/src/sandbox-host/SandboxHost.tsx +8 -2
  130. package/src/tests/RemoteThreadListRuntime.adapterProvider.test.tsx +24 -3
  131. package/src/tests/RemoteThreadListRuntime.reloadMainThread.test.tsx +1 -2
  132. package/src/tests/augmentations.test.ts +49 -0
  133. package/src/tests/in-memory-thread-list.test.tsx +1 -1
  134. package/src/tests/threadMessageById.test.tsx +61 -1
  135. package/src/unstable/useComposerInput.ts +2 -2
  136. package/src/unstable/useComposerInputHistory.test.tsx +4 -4
  137. package/src/unstable/useComposerInputHistory.ts +1 -1
  138. package/src/unstable/useLiveCompletionAdapter.test.tsx +157 -0
  139. package/src/unstable/useLiveCompletionAdapter.ts +41 -17
  140. package/src/utils/invokeCallbackSafely.ts +11 -0
  141. package/src/utils/smooth/useSmooth.test.tsx +110 -0
  142. package/src/utils/smooth/useSmooth.ts +20 -6
  143. package/dist/client/InMemoryThreadList.d.ts +0 -12
  144. package/dist/client/InMemoryThreadList.d.ts.map +0 -1
  145. package/dist/client/InMemoryThreadList.js +0 -374
  146. package/dist/client/InMemoryThreadList.js.map +0 -1
  147. package/dist/context/react/utils/ensureBinding.d.ts +0 -5
  148. package/dist/context/react/utils/ensureBinding.d.ts.map +0 -1
  149. package/dist/context/react/utils/ensureBinding.js +0 -24
  150. package/dist/context/react/utils/ensureBinding.js.map +0 -1
  151. package/dist/context/react/utils/useRuntimeState.d.ts +0 -13
  152. package/dist/context/react/utils/useRuntimeState.d.ts.map +0 -1
  153. package/dist/context/react/utils/useRuntimeState.js +0 -33
  154. package/dist/context/react/utils/useRuntimeState.js.map +0 -1
  155. package/dist/legacy-runtime/cloud/auiV0.d.ts +0 -119
  156. package/dist/legacy-runtime/cloud/auiV0.d.ts.map +0 -1
  157. package/dist/legacy-runtime/cloud/auiV0.js +0 -137
  158. package/dist/legacy-runtime/cloud/auiV0.js.map +0 -1
  159. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts +0 -16
  160. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.d.ts.map +0 -1
  161. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js +0 -36
  162. package/dist/legacy-runtime/cloud/useCloudThreadListRuntime.js.map +0 -1
  163. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +0 -17
  164. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +0 -1
  165. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +0 -55
  166. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +0 -1
  167. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts +0 -11
  168. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.d.ts.map +0 -1
  169. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js +0 -165
  170. package/dist/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.js.map +0 -1
  171. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts +0 -15
  172. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +0 -1
  173. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js +0 -81
  174. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +0 -1
  175. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +0 -126
  176. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +0 -1
  177. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.js +0 -0
  178. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +0 -14
  179. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +0 -1
  180. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +0 -290
  181. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +0 -1
  182. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts +0 -7
  183. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts.map +0 -1
  184. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +0 -25
  185. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +0 -1
  186. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts +0 -7
  187. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts.map +0 -1
  188. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +0 -27
  189. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +0 -1
  190. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.d.ts +0 -2
  191. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.js +0 -2
  192. package/src/client/InMemoryThreadList.ts +0 -247
  193. package/src/context/react/utils/ensureBinding.ts +0 -46
  194. package/src/context/react/utils/useRuntimeState.ts +0 -46
  195. package/src/legacy-runtime/cloud/auiV0.ts +0 -331
  196. package/src/legacy-runtime/cloud/useCloudThreadListRuntime.ts +0 -31
  197. package/src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts +0 -68
  198. package/src/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.test.ts +0 -455
  199. package/src/legacy-runtime/runtime-cores/assistant-transport/replayBoundaryStream.ts +0 -172
  200. package/src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts +0 -113
  201. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-delivery.test.tsx +0 -79
  202. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-parentid.test.tsx +0 -97
  203. package/src/legacy-runtime/runtime-cores/assistant-transport/transport-scheduling.test.ts +0 -307
  204. package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +0 -170
  205. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransport.spec.md +0 -141
  206. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.test.tsx +0 -585
  207. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.ts +0 -476
  208. package/src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts +0 -20
  209. package/src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts +0 -9
  210. package/src/legacy-runtime/runtime-cores/assistant-transport/utils.ts +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useConvertedState.d.ts","names":[],"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts"],"mappings":";;;iBAQgB,kBAAkB,GAChC,WAAW,iCAAiC,IAC5C,YAAY,GACZ,iBAAiB,6BACjB,oBACA,cAAc,eAAe,uBAC5B"}
@@ -1,25 +0,0 @@
1
- import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
- import "@assistant-ui/tap/react-shim";
3
- //#region src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts
4
- function useConvertedState(converter, agentState, pendingCommands, isSending, toolStatuses) {
5
- const $ = c(6);
6
- let t0;
7
- if ($[0] !== agentState || $[1] !== converter || $[2] !== isSending || $[3] !== pendingCommands || $[4] !== toolStatuses) {
8
- t0 = converter(agentState, {
9
- pendingCommands,
10
- isSending,
11
- toolStatuses
12
- });
13
- $[0] = agentState;
14
- $[1] = converter;
15
- $[2] = isSending;
16
- $[3] = pendingCommands;
17
- $[4] = toolStatuses;
18
- $[5] = t0;
19
- } else t0 = $[5];
20
- return t0;
21
- }
22
- //#endregion
23
- export { useConvertedState };
24
-
25
- //# sourceMappingURL=useConvertedState.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useConvertedState.js","names":["useMemo","AssistantTransportCommand","AssistantTransportState","AssistantTransportStateConverter","ToolExecutionStatus","useConvertedState","converter","agentState","pendingCommands","isSending","toolStatuses","$","_c","t0"],"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport type {\n AssistantTransportCommand,\n AssistantTransportState,\n AssistantTransportStateConverter,\n} from \"./types\";\nimport type { ToolExecutionStatus } from \"@assistant-ui/core\";\n\nexport function useConvertedState<T>(\n converter: AssistantTransportStateConverter<T>,\n agentState: T,\n pendingCommands: AssistantTransportCommand[],\n isSending: boolean,\n toolStatuses: Record<string, ToolExecutionStatus>,\n): AssistantTransportState {\n return useMemo(\n () => converter(agentState, { pendingCommands, isSending, toolStatuses }),\n [converter, agentState, pendingCommands, isSending, toolStatuses],\n );\n}\n"],"mappings":";;;AAQA,SAAOK,kBAAAC,WAAAC,YAAAC,iBAAAC,WAAAC,cAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CAAA,IAAAC;CAAA,IAAAF,EAAA,OAAAJ,cAAAI,EAAA,OAAAL,aAAAK,EAAA,OAAAF,aAAAE,EAAA,OAAAH,mBAAAG,EAAA,OAAAD,cAAA;EAQGG,KAAAP,UAAUC,YAAY;GAAAC;GAAAC;GAAAC;EAA2C,CAAC;EAACC,EAAA,KAAAJ;EAAAI,EAAA,KAAAL;EAAAK,EAAA,KAAAF;EAAAE,EAAA,KAAAH;EAAAG,EAAA,KAAAD;EAAAC,EAAA,KAAAE;CAAA,OAAAA,KAAAF,EAAA;CAAA,OAAnEE;AAAmE"}
@@ -1,7 +0,0 @@
1
- //#region src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts
2
- declare function useLatestRef<T>(value: T): {
3
- current: T;
4
- };
5
- //#endregion
6
- export { useLatestRef };
7
- //# sourceMappingURL=useLatestRef.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLatestRef.d.ts","names":[],"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts"],"mappings":";iBAEgB,aAAa,GAAG,OAAO;EAKrB,SAAS"}
@@ -1,27 +0,0 @@
1
- import { c } from "@assistant-ui/tap/react-shim/compiler-runtime";
2
- import { useEffect, useRef } from "@assistant-ui/tap/react-shim";
3
- //#region src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts
4
- function useLatestRef(value) {
5
- const $ = c(3);
6
- const ref = useRef(value);
7
- let t0;
8
- let t1;
9
- if ($[0] !== value) {
10
- t0 = () => {
11
- ref.current = value;
12
- };
13
- t1 = [value];
14
- $[0] = value;
15
- $[1] = t0;
16
- $[2] = t1;
17
- } else {
18
- t0 = $[1];
19
- t1 = $[2];
20
- }
21
- useEffect(t0, t1);
22
- return ref;
23
- }
24
- //#endregion
25
- export { useLatestRef };
26
-
27
- //# sourceMappingURL=useLatestRef.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLatestRef.js","names":["useEffect","useRef","useLatestRef","value","$","_c","ref","t0","t1","current","T"],"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts"],"sourcesContent":["import { useEffect, useRef } from \"react\";\n\nexport function useLatestRef<T>(value: T) {\n const ref = useRef(value);\n useEffect(() => {\n ref.current = value;\n }, [value]);\n return ref as { current: T };\n}\n"],"mappings":";;;AAEA,SAAOE,aAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,CAAA;CACL,MAAAC,MAAYL,OAAOE,KAAK;CAAE,IAAAI;CAAA,IAAAC;CAAA,IAAAJ,EAAA,OAAAD,OAAA;EAChBI,WAAA;GACRD,IAAGG,UAAWN;EAAH;EACVK,KAAA,CAACL,KAAK;EAACC,EAAA,KAAAD;EAAAC,EAAA,KAAAG;EAAAH,EAAA,KAAAI;CAAA,OAAA;EAAAD,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;CAAA;CAFVJ,UAAUO,IAEPC,EAAO;CAAC,OACJF;AAAqB"}
@@ -1,2 +0,0 @@
1
- import { createRequestHeaders } from "@assistant-ui/core";
2
- export { createRequestHeaders };
@@ -1,2 +0,0 @@
1
- import { createRequestHeaders } from "@assistant-ui/core";
2
- export { createRequestHeaders };
@@ -1,247 +0,0 @@
1
- import { useState, useMemo } from "react";
2
- import { resource, withKey, type ResourceElement } from "@assistant-ui/tap";
3
- import {
4
- type ClientOutput,
5
- useClientLookup,
6
- Derived,
7
- attachTransformScopes,
8
- useClientResource,
9
- } from "@assistant-ui/store";
10
- import { generateId } from "@assistant-ui/core";
11
-
12
- import { ModelContext } from "@assistant-ui/core/store";
13
- import { Tools, DataRenderers } from "@assistant-ui/core/react";
14
-
15
- const RESOLVED_PROMISE = Promise.resolve();
16
-
17
- export type InMemoryThreadListProps = {
18
- thread: (threadId: string) => ResourceElement<ClientOutput<"thread">>;
19
- onSwitchToThread?: (threadId: string) => void;
20
- onSwitchToNewThread?: () => void;
21
- };
22
-
23
- type ThreadData = {
24
- id: string;
25
- title?: string;
26
- status: "regular" | "archived";
27
- custom?: Record<string, unknown> | undefined;
28
- };
29
-
30
- // ThreadListItem Client
31
- const useThreadListItemClient = (props: {
32
- data: ThreadData;
33
- isRunning: boolean;
34
- onSwitchTo: () => void;
35
- onRename: (title: string) => void;
36
- onUpdateCustom: (custom: Record<string, unknown> | undefined) => void;
37
- onArchive: () => void;
38
- onUnarchive: () => void;
39
- onDelete: () => void;
40
- }): ClientOutput<"threadListItem"> => {
41
- const {
42
- data,
43
- isRunning,
44
- onSwitchTo,
45
- onRename,
46
- onUpdateCustom,
47
- onArchive,
48
- onUnarchive,
49
- onDelete,
50
- } = props;
51
- const state = useMemo(
52
- () => ({
53
- id: data.id,
54
- remoteId: undefined,
55
- externalId: undefined,
56
- title: data.title,
57
- status: data.status,
58
- custom: data.custom,
59
- isRunning,
60
- }),
61
- [data.id, data.title, data.status, data.custom, isRunning],
62
- );
63
-
64
- return {
65
- getState: () => state,
66
- switchTo: onSwitchTo,
67
- rename: onRename,
68
- updateCustom: onUpdateCustom,
69
- archive: onArchive,
70
- unarchive: onUnarchive,
71
- delete: onDelete,
72
- generateTitle: () => {},
73
- initialize: async () => ({ remoteId: data.id, externalId: undefined }),
74
- detach: () => {},
75
- };
76
- };
77
-
78
- const ThreadListItemClient = resource(useThreadListItemClient);
79
-
80
- // InMemoryThreadList Client
81
- const useInMemoryThreadList = (
82
- props: InMemoryThreadListProps,
83
- ): ClientOutput<"threads"> => {
84
- const {
85
- thread: threadFactory,
86
- onSwitchToThread,
87
- onSwitchToNewThread,
88
- } = props;
89
-
90
- const [mainThreadId, setMainThreadId] = useState("main");
91
- const [threads, setThreads] = useState<readonly ThreadData[]>(() => [
92
- { id: "main", title: "Main Thread", status: "regular" },
93
- ]);
94
-
95
- const handleSwitchToThread = (threadId: string) => {
96
- setMainThreadId(threadId);
97
- onSwitchToThread?.(threadId);
98
- };
99
-
100
- const handleRename = (threadId: string, title: string) => {
101
- setThreads((prev) =>
102
- prev.map((t) => (t.id === threadId ? { ...t, title } : t)),
103
- );
104
- };
105
-
106
- const handleArchive = (threadId: string) => {
107
- setThreads((prev) =>
108
- prev.map((t) =>
109
- t.id === threadId ? { ...t, status: "archived" as const } : t,
110
- ),
111
- );
112
- };
113
-
114
- const handleUnarchive = (threadId: string) => {
115
- setThreads((prev) =>
116
- prev.map((t) =>
117
- t.id === threadId ? { ...t, status: "regular" as const } : t,
118
- ),
119
- );
120
- };
121
-
122
- const handleUpdateCustom = (
123
- threadId: string,
124
- custom: Record<string, unknown> | undefined,
125
- ) => {
126
- setThreads((prev) =>
127
- prev.map((t) => (t.id === threadId ? { ...t, custom } : t)),
128
- );
129
- };
130
-
131
- const handleDelete = (threadId: string) => {
132
- setThreads((prev) => prev.filter((t) => t.id !== threadId));
133
- setMainThreadId((prev) =>
134
- prev === threadId
135
- ? threads.find((t) => t.id !== threadId)?.id || "main"
136
- : prev,
137
- );
138
- };
139
-
140
- const handleSwitchToNewThread = () => {
141
- const newId = `thread-${generateId()}`;
142
- setThreads((prev) => [
143
- ...prev,
144
- { id: newId, title: "New Thread", status: "regular" },
145
- ]);
146
- setMainThreadId(newId);
147
- onSwitchToNewThread?.();
148
- };
149
-
150
- // Only the main thread is mounted, so it is the only thread that can run.
151
- const mainThreadClient = useClientResource(threadFactory(mainThreadId));
152
-
153
- const threadListItems = useClientLookup(
154
- threads.map((t) =>
155
- withKey(
156
- t.id,
157
- ThreadListItemClient({
158
- data: t,
159
- isRunning: t.id === mainThreadId && mainThreadClient.state.isRunning,
160
- onSwitchTo: () => handleSwitchToThread(t.id),
161
- onRename: (title) => handleRename(t.id, title),
162
- onUpdateCustom: (custom) => handleUpdateCustom(t.id, custom),
163
- onArchive: () => handleArchive(t.id),
164
- onUnarchive: () => handleUnarchive(t.id),
165
- onDelete: () => handleDelete(t.id),
166
- }),
167
- ),
168
- ),
169
- );
170
-
171
- const state = useMemo(() => {
172
- const regularThreads = threads.filter((t) => t.status === "regular");
173
- const archivedThreads = threads.filter((t) => t.status === "archived");
174
-
175
- return {
176
- mainThreadId,
177
- newThreadId: null,
178
- isLoading: false,
179
- isLoadingMore: false,
180
- hasMore: false,
181
- threadIds: regularThreads.map((t) => t.id),
182
- archivedThreadIds: archivedThreads.map((t) => t.id),
183
- threadItems: threadListItems.state,
184
- main: mainThreadClient.state,
185
- };
186
- }, [mainThreadId, threads, threadListItems.state, mainThreadClient.state]);
187
-
188
- return {
189
- getState: () => state,
190
- switchToThread: handleSwitchToThread,
191
- switchToNewThread: handleSwitchToNewThread,
192
- getLoadThreadsPromise: () => RESOLVED_PROMISE,
193
- reload: () => RESOLVED_PROMISE,
194
- reloadMainThread: () =>
195
- mainThreadClient.methods.unstable_refetchThread?.() ?? RESOLVED_PROMISE,
196
- loadMore: () => RESOLVED_PROMISE,
197
- item: (selector) => {
198
- if (selector === "main") {
199
- const index = threads.findIndex((t) => t.id === mainThreadId);
200
- return threadListItems.get({ index: index === -1 ? 0 : index });
201
- }
202
- if ("id" in selector) {
203
- const index = threads.findIndex((t) => t.id === selector.id);
204
- return threadListItems.get({ index });
205
- }
206
- return threadListItems.get(selector);
207
- },
208
- thread: () => mainThreadClient.methods,
209
- };
210
- };
211
-
212
- export const InMemoryThreadList = resource(useInMemoryThreadList);
213
-
214
- attachTransformScopes(useInMemoryThreadList, (scopes, parent) => {
215
- scopes.thread ??= Derived({
216
- source: "threads",
217
- query: { type: "main" },
218
- get: (aui) => aui.threads.thread("main"),
219
- });
220
- scopes.threadListItem ??= Derived({
221
- source: "threads",
222
- query: { type: "main" },
223
- get: (aui) => aui.threads.item("main"),
224
- });
225
- scopes.composer ??= Derived({
226
- source: "thread",
227
- query: {},
228
- get: (aui) => aui.threads.thread("main").composer(),
229
- });
230
-
231
- if (!scopes.modelContext && parent.modelContext.source === null) {
232
- scopes.modelContext = ModelContext();
233
- }
234
- if (!scopes.tools && parent.tools.source === null) {
235
- scopes.tools = Tools({});
236
- }
237
- if (!scopes.dataRenderers && parent.dataRenderers.source === null) {
238
- scopes.dataRenderers = DataRenderers();
239
- }
240
- if (!scopes.suggestions && parent.suggestions.source === null) {
241
- scopes.suggestions = Derived({
242
- source: "thread",
243
- query: {},
244
- get: (aui) => aui.thread.suggestions(),
245
- });
246
- }
247
- });
@@ -1,46 +0,0 @@
1
- type Bindable = {
2
- __internal_bindMethods?: () => void;
3
- __isBound?: boolean;
4
- };
5
- const debugVerifyPrototype = (
6
- runtime: Record<string, unknown>,
7
- prototype: any,
8
- ) => {
9
- const unboundMethods = Object.getOwnPropertyNames(prototype).filter(
10
- (methodStr) => {
11
- const descriptor = Object.getOwnPropertyDescriptor(prototype, methodStr);
12
- const isMethod = descriptor && typeof descriptor.value === "function";
13
- if (!isMethod) return false;
14
-
15
- const methodName = methodStr as keyof typeof runtime | "constructor";
16
- return (
17
- isMethod &&
18
- !methodName.startsWith("_") &&
19
- methodName !== "constructor" &&
20
- prototype[methodName] === runtime[methodName]
21
- );
22
- },
23
- );
24
-
25
- if (unboundMethods.length > 0) {
26
- throw new Error(
27
- `The following methods are not bound: ${JSON.stringify(unboundMethods)}`,
28
- );
29
- }
30
-
31
- const prototypePrototype = Object.getPrototypeOf(prototype);
32
- if (prototypePrototype && prototypePrototype !== Object.prototype) {
33
- debugVerifyPrototype(runtime, prototypePrototype);
34
- }
35
- };
36
- export const ensureBinding = (r: unknown) => {
37
- const runtime = r as Bindable;
38
- if (runtime.__isBound) return;
39
-
40
- runtime.__internal_bindMethods?.();
41
- runtime.__isBound = true;
42
-
43
- if (process.env.NODE_ENV !== "production") {
44
- debugVerifyPrototype(runtime, Object.getPrototypeOf(runtime));
45
- }
46
- };
@@ -1,46 +0,0 @@
1
- import type { Unsubscribe } from "@assistant-ui/core";
2
- import { useDebugValue, useSyncExternalStore } from "react";
3
- import { ensureBinding } from "./ensureBinding";
4
-
5
- export type SubscribableRuntime<TState> = {
6
- getState: () => TState;
7
- subscribe: (callback: () => void) => Unsubscribe;
8
- };
9
-
10
- export function useRuntimeStateInternal<TState, TSelected>(
11
- runtime: SubscribableRuntime<TState>,
12
- selector: ((state: TState) => TSelected | TState) | undefined = identity,
13
- ): TSelected | TState {
14
- // TODO move to useRuntimeState
15
- ensureBinding(runtime);
16
-
17
- const slice = useSyncExternalStore(
18
- runtime.subscribe,
19
- () => selector(runtime.getState()),
20
- () => selector(runtime.getState()),
21
- );
22
- useDebugValue(slice);
23
- return slice;
24
- }
25
-
26
- const identity = <T>(arg: T): T => arg;
27
- export function useRuntimeState<TState>(
28
- runtime: SubscribableRuntime<TState>,
29
- ): TState;
30
- export function useRuntimeState<TState, TSelected>(
31
- runtime: SubscribableRuntime<TState>,
32
- selector: (state: TState) => TSelected,
33
- ): TSelected;
34
- export function useRuntimeState<TState, TSelected>(
35
- runtime: SubscribableRuntime<TState>,
36
- selector: ((state: TState) => TSelected) | undefined,
37
- ): TSelected | TState;
38
- export function useRuntimeState<TState, TSelected>(
39
- runtime: SubscribableRuntime<TState>,
40
- selector?: ((state: TState) => TSelected) | undefined,
41
- ): TSelected | TState {
42
- // ensure that the runtime is bound
43
- // ensureBinding(runtime);
44
-
45
- return useRuntimeStateInternal(runtime, selector);
46
- }