@assistant-ui/react 0.11.6 → 0.11.7

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 (89) hide show
  1. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts +8 -1
  2. package/dist/legacy-runtime/runtime/ThreadRuntime.d.ts.map +1 -1
  3. package/dist/legacy-runtime/runtime/ThreadRuntime.js +5 -1
  4. package/dist/legacy-runtime/runtime/ThreadRuntime.js.map +1 -1
  5. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts +12 -0
  6. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.d.ts.map +1 -0
  7. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js +52 -0
  8. package/dist/legacy-runtime/runtime-cores/assistant-transport/commandQueue.js.map +1 -0
  9. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.d.ts +3 -0
  10. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.d.ts.map +1 -0
  11. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.js +6 -0
  12. package/dist/legacy-runtime/runtime-cores/assistant-transport/index.js.map +1 -0
  13. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts +11 -0
  14. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.d.ts.map +1 -0
  15. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js +55 -0
  16. package/dist/legacy-runtime/runtime-cores/assistant-transport/runManager.js.map +1 -0
  17. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts +66 -0
  18. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.d.ts.map +1 -0
  19. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.js +1 -0
  20. package/dist/legacy-runtime/runtime-cores/assistant-transport/types.js.map +1 -0
  21. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts +7 -0
  22. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.d.ts.map +1 -0
  23. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js +185 -0
  24. package/dist/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.js.map +1 -0
  25. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts +3 -0
  26. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.d.ts.map +1 -0
  27. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js +12 -0
  28. package/dist/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.js.map +1 -0
  29. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts +4 -0
  30. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.d.ts.map +1 -0
  31. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js +13 -0
  32. package/dist/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.js.map +1 -0
  33. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.d.ts +13 -0
  34. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.d.ts.map +1 -0
  35. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.js +138 -0
  36. package/dist/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.js.map +1 -0
  37. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.d.ts +13 -0
  38. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.d.ts.map +1 -0
  39. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.js +32 -0
  40. package/dist/legacy-runtime/runtime-cores/assistant-transport/utils.js.map +1 -0
  41. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts +1 -0
  42. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.d.ts.map +1 -1
  43. package/dist/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.js.map +1 -1
  44. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts +2 -1
  45. package/dist/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.d.ts.map +1 -1
  46. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts +3 -1
  47. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.d.ts.map +1 -1
  48. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts +3 -2
  49. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.d.ts.map +1 -1
  50. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.js +9 -2
  51. package/dist/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.js.map +1 -1
  52. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.d.ts.map +1 -1
  53. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js +2 -2
  54. package/dist/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.js.map +1 -1
  55. package/dist/legacy-runtime/runtime-cores/index.d.ts +1 -0
  56. package/dist/legacy-runtime/runtime-cores/index.d.ts.map +1 -1
  57. package/dist/legacy-runtime/runtime-cores/index.js +1 -0
  58. package/dist/legacy-runtime/runtime-cores/index.js.map +1 -1
  59. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts +1 -0
  60. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.d.ts.map +1 -1
  61. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.js +5 -0
  62. package/dist/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.js.map +1 -1
  63. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.d.ts.map +1 -1
  64. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.js +3 -0
  65. package/dist/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.js.map +1 -1
  66. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts +2 -0
  67. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListHookInstanceManager.d.ts.map +1 -1
  68. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts +2 -0
  69. package/dist/legacy-runtime/runtime-cores/remote-thread-list/RemoteThreadListThreadListRuntimeCore.d.ts.map +1 -1
  70. package/package.json +1 -1
  71. package/src/legacy-runtime/runtime/ThreadRuntime.ts +14 -2
  72. package/src/legacy-runtime/runtime-cores/assistant-transport/commandQueue.ts +62 -0
  73. package/src/legacy-runtime/runtime-cores/assistant-transport/index.ts +2 -0
  74. package/src/legacy-runtime/runtime-cores/assistant-transport/runManager.ts +67 -0
  75. package/src/legacy-runtime/runtime-cores/assistant-transport/types.ts +96 -0
  76. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransport.spec.md +125 -0
  77. package/src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx +232 -0
  78. package/src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts +18 -0
  79. package/src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts +9 -0
  80. package/src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.ts +173 -0
  81. package/src/legacy-runtime/runtime-cores/assistant-transport/utils.ts +42 -0
  82. package/src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx +1 -0
  83. package/src/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.tsx +2 -1
  84. package/src/legacy-runtime/runtime-cores/external-store/ExternalStoreAdapter.tsx +3 -0
  85. package/src/legacy-runtime/runtime-cores/external-store/ExternalStoreThreadRuntimeCore.tsx +13 -2
  86. package/src/legacy-runtime/runtime-cores/external-store/ThreadMessageLike.tsx +2 -5
  87. package/src/legacy-runtime/runtime-cores/index.ts +1 -0
  88. package/src/legacy-runtime/runtime-cores/local/LocalThreadRuntimeCore.tsx +6 -0
  89. package/src/legacy-runtime/runtime-cores/remote-thread-list/EMPTY_THREAD_CORE.tsx +4 -0
@@ -0,0 +1,185 @@
1
+ "use client";
2
+
3
+ // src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx
4
+ import {
5
+ asAsyncIterableStream
6
+ } from "assistant-stream/utils";
7
+ import { useExternalStoreRuntime } from "../external-store/useExternalStoreRuntime.js";
8
+ import { useState, useRef, useMemo } from "react";
9
+ import {
10
+ AssistantMessageAccumulator,
11
+ DataStreamDecoder,
12
+ unstable_createInitialMessage as createInitialMessage
13
+ } from "assistant-stream";
14
+ import { useCommandQueue } from "./commandQueue.js";
15
+ import { useRunManager } from "./runManager.js";
16
+ import { useConvertedState } from "./useConvertedState.js";
17
+ import { useToolInvocations } from "./useToolInvocations.js";
18
+ import { toAISDKTools, getEnabledTools, createRequestHeaders } from "./utils.js";
19
+ import { useRemoteThreadListRuntime } from "../remote-thread-list/useRemoteThreadListRuntime.js";
20
+ import { InMemoryThreadListAdapter } from "../remote-thread-list/adapter/in-memory.js";
21
+ var useAssistantTransportThreadRuntime = (options) => {
22
+ const agentStateRef = useRef(options.initialState);
23
+ const [, rerender] = useState(0);
24
+ const resumeFlagRef = useRef(false);
25
+ const commandQueue = useCommandQueue({
26
+ onQueue: () => runManager.schedule()
27
+ });
28
+ const runManager = useRunManager({
29
+ onRun: async (signal) => {
30
+ const isResume = resumeFlagRef.current;
31
+ resumeFlagRef.current = false;
32
+ const commands = isResume ? [] : commandQueue.flush();
33
+ if (commands.length === 0 && !isResume)
34
+ throw new Error("No commands to send");
35
+ const headers = await createRequestHeaders(options.headers);
36
+ const context = runtime.thread.getModelContext();
37
+ const response = await fetch(
38
+ isResume ? options.resumeApi : options.api,
39
+ {
40
+ method: "POST",
41
+ headers,
42
+ body: JSON.stringify({
43
+ commands,
44
+ state: agentStateRef.current,
45
+ system: context.system,
46
+ tools: context.tools ? toAISDKTools(getEnabledTools(context.tools)) : void 0,
47
+ ...context.callSettings,
48
+ ...context.config,
49
+ ...options.body
50
+ }),
51
+ signal
52
+ }
53
+ );
54
+ options.onResponse?.(response);
55
+ if (!response.ok) {
56
+ throw new Error(`Status ${response.status}: ${await response.text()}`);
57
+ }
58
+ if (!response.body) {
59
+ throw new Error("Response body is null");
60
+ }
61
+ const stream = response.body.pipeThrough(new DataStreamDecoder()).pipeThrough(
62
+ new AssistantMessageAccumulator({
63
+ initialMessage: createInitialMessage({
64
+ unstable_state: agentStateRef.current ?? null
65
+ })
66
+ })
67
+ );
68
+ let markedDelivered = false;
69
+ for await (const chunk of asAsyncIterableStream(stream)) {
70
+ if (chunk.metadata.unstable_state === agentStateRef.current) continue;
71
+ if (!markedDelivered) {
72
+ commandQueue.markDelivered();
73
+ markedDelivered = true;
74
+ }
75
+ agentStateRef.current = chunk.metadata.unstable_state;
76
+ rerender((prev) => prev + 1);
77
+ }
78
+ },
79
+ onFinish: options.onFinish,
80
+ onError: (error) => {
81
+ if (error instanceof Error && error.name === "AbortError") {
82
+ const cmds = [
83
+ ...commandQueue.state.inTransit,
84
+ ...commandQueue.state.queued
85
+ ];
86
+ options.onCancel?.({
87
+ commands: cmds,
88
+ updateState: (updater) => {
89
+ agentStateRef.current = updater(agentStateRef.current);
90
+ rerender((prev) => prev + 1);
91
+ }
92
+ });
93
+ commandQueue.reset();
94
+ } else {
95
+ const cmds = [...commandQueue.state.inTransit];
96
+ options.onError?.(error, {
97
+ commands: cmds,
98
+ updateState: (updater) => {
99
+ agentStateRef.current = updater(agentStateRef.current);
100
+ rerender((prev) => prev + 1);
101
+ }
102
+ });
103
+ commandQueue.markDelivered();
104
+ }
105
+ }
106
+ });
107
+ const pendingCommands = useMemo(
108
+ () => [...commandQueue.state.inTransit, ...commandQueue.state.queued],
109
+ [commandQueue.state]
110
+ );
111
+ const converted = useConvertedState(
112
+ options.converter,
113
+ agentStateRef.current,
114
+ pendingCommands,
115
+ runManager.isRunning
116
+ );
117
+ const runtime = useExternalStoreRuntime({
118
+ isRunning: converted.isRunning,
119
+ messages: converted.messages,
120
+ adapters: options.adapters,
121
+ onNew: async (message) => {
122
+ const parts = [];
123
+ for (const content of message.content) {
124
+ if (content.type === "text") {
125
+ parts.push({ type: "text", text: content.text });
126
+ } else if (content.type === "image") {
127
+ parts.push({ type: "image", image: content.image });
128
+ }
129
+ }
130
+ const command = {
131
+ type: "add-message",
132
+ message: {
133
+ role: "user",
134
+ parts
135
+ }
136
+ };
137
+ commandQueue.enqueue(command);
138
+ },
139
+ onCancel: async () => {
140
+ runManager.cancel();
141
+ toolInvocations.abort();
142
+ },
143
+ onResume: async () => {
144
+ if (!options.resumeApi)
145
+ throw new Error("Must pass resumeApi to options to resume runs");
146
+ resumeFlagRef.current = true;
147
+ runManager.schedule();
148
+ },
149
+ onAddToolResult: async (toolOptions) => {
150
+ const command = {
151
+ type: "add-tool-result",
152
+ toolCallId: toolOptions.toolCallId,
153
+ result: toolOptions.result,
154
+ toolName: toolOptions.toolName,
155
+ isError: toolOptions.isError,
156
+ ...toolOptions.artifact && { artifact: toolOptions.artifact }
157
+ };
158
+ commandQueue.enqueue(command);
159
+ },
160
+ onLoadExternalState: async (state) => {
161
+ agentStateRef.current = state;
162
+ toolInvocations.reset();
163
+ rerender((prev) => prev + 1);
164
+ }
165
+ });
166
+ const toolInvocations = useToolInvocations({
167
+ state: converted,
168
+ getTools: () => runtime.thread.getModelContext().tools,
169
+ onResult: commandQueue.enqueue
170
+ });
171
+ return runtime;
172
+ };
173
+ var useAssistantTransportRuntime = (options) => {
174
+ const runtime = useRemoteThreadListRuntime({
175
+ runtimeHook: function RuntimeHook() {
176
+ return useAssistantTransportThreadRuntime(options);
177
+ },
178
+ adapter: new InMemoryThreadListAdapter()
179
+ });
180
+ return runtime;
181
+ };
182
+ export {
183
+ useAssistantTransportRuntime
184
+ };
185
+ //# sourceMappingURL=useAssistantTransportRuntime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useAssistantTransportRuntime.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n ReadonlyJSONObject,\n ReadonlyJSONValue,\n asAsyncIterableStream,\n} from \"assistant-stream/utils\";\nimport { AppendMessage } from \"../../../types\";\nimport { useExternalStoreRuntime } from \"../external-store/useExternalStoreRuntime\";\nimport { AssistantRuntime } from \"../../runtime/AssistantRuntime\";\nimport { AddToolResultOptions } from \"../core\";\nimport { useState, useRef, useMemo } from \"react\";\nimport {\n AssistantMessageAccumulator,\n DataStreamDecoder,\n unstable_createInitialMessage as createInitialMessage,\n} from \"assistant-stream\";\nimport {\n AssistantTransportOptions,\n AddMessageCommand,\n AddToolResultCommand,\n UserMessagePart,\n QueuedCommand,\n} from \"./types\";\nimport { useCommandQueue } from \"./commandQueue\";\nimport { useRunManager } from \"./runManager\";\nimport { useConvertedState } from \"./useConvertedState\";\nimport { useToolInvocations } from \"./useToolInvocations\";\nimport { toAISDKTools, getEnabledTools, createRequestHeaders } from \"./utils\";\nimport { useRemoteThreadListRuntime } from \"../remote-thread-list/useRemoteThreadListRuntime\";\nimport { InMemoryThreadListAdapter } from \"../remote-thread-list/adapter/in-memory\";\n\nconst useAssistantTransportThreadRuntime = <T,>(\n options: AssistantTransportOptions<T>,\n): AssistantRuntime => {\n const agentStateRef = useRef(options.initialState);\n const [, rerender] = useState(0);\n const resumeFlagRef = useRef(false);\n const commandQueue = useCommandQueue({\n onQueue: () => runManager.schedule(),\n });\n\n const runManager = useRunManager({\n onRun: async (signal: AbortSignal) => {\n const isResume = resumeFlagRef.current;\n resumeFlagRef.current = false;\n const commands: QueuedCommand[] = isResume ? [] : commandQueue.flush();\n if (commands.length === 0 && !isResume)\n throw new Error(\"No commands to send\");\n\n const headers = await createRequestHeaders(options.headers);\n const context = runtime.thread.getModelContext();\n\n const response = await fetch(\n isResume ? options.resumeApi! : options.api,\n {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n commands,\n state: agentStateRef.current,\n system: context.system,\n tools: context.tools\n ? toAISDKTools(getEnabledTools(context.tools))\n : undefined,\n ...context.callSettings,\n ...context.config,\n ...options.body,\n }),\n signal,\n },\n );\n\n options.onResponse?.(response);\n\n if (!response.ok) {\n throw new Error(`Status ${response.status}: ${await response.text()}`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const stream = response.body\n .pipeThrough(new DataStreamDecoder())\n .pipeThrough(\n new AssistantMessageAccumulator({\n initialMessage: createInitialMessage({\n unstable_state:\n (agentStateRef.current as ReadonlyJSONValue) ?? null,\n }),\n }),\n );\n\n let markedDelivered = false;\n\n for await (const chunk of asAsyncIterableStream(stream)) {\n if (chunk.metadata.unstable_state === agentStateRef.current) continue;\n\n if (!markedDelivered) {\n commandQueue.markDelivered();\n markedDelivered = true;\n }\n\n agentStateRef.current = chunk.metadata.unstable_state as T;\n rerender((prev) => prev + 1);\n }\n },\n onFinish: options.onFinish,\n onError: (error) => {\n if (error instanceof Error && error.name === \"AbortError\") {\n const cmds = [\n ...commandQueue.state.inTransit,\n ...commandQueue.state.queued,\n ];\n options.onCancel?.({\n commands: cmds,\n updateState: (updater) => {\n agentStateRef.current = updater(agentStateRef.current);\n rerender((prev) => prev + 1);\n },\n });\n\n commandQueue.reset();\n } else {\n const cmds = [...commandQueue.state.inTransit];\n options.onError?.(error as Error, {\n commands: cmds,\n updateState: (updater) => {\n agentStateRef.current = updater(agentStateRef.current);\n rerender((prev) => prev + 1);\n },\n });\n commandQueue.markDelivered();\n }\n },\n });\n\n // Reactive conversion of agent state + connection metadata → UI state\n const pendingCommands = useMemo(\n () => [...commandQueue.state.inTransit, ...commandQueue.state.queued],\n [commandQueue.state],\n );\n const converted = useConvertedState(\n options.converter,\n agentStateRef.current,\n pendingCommands,\n runManager.isRunning,\n );\n\n // Create runtime\n const runtime = useExternalStoreRuntime({\n isRunning: converted.isRunning,\n messages: converted.messages,\n adapters: options.adapters,\n onNew: async (message: AppendMessage): Promise<void> => {\n // Convert AppendMessage to AddMessageCommand\n const parts: UserMessagePart[] = [];\n\n for (const content of message.content) {\n if (content.type === \"text\") {\n parts.push({ type: \"text\", text: content.text });\n } else if (content.type === \"image\") {\n parts.push({ type: \"image\", image: content.image });\n }\n }\n\n const command: AddMessageCommand = {\n type: \"add-message\",\n message: {\n role: \"user\",\n parts,\n },\n };\n\n commandQueue.enqueue(command);\n },\n onCancel: async () => {\n runManager.cancel();\n toolInvocations.abort();\n },\n onResume: async () => {\n if (!options.resumeApi)\n throw new Error(\"Must pass resumeApi to options to resume runs\");\n\n resumeFlagRef.current = true;\n runManager.schedule();\n },\n onAddToolResult: async (\n toolOptions: AddToolResultOptions,\n ): Promise<void> => {\n const command: AddToolResultCommand = {\n type: \"add-tool-result\",\n toolCallId: toolOptions.toolCallId,\n result: toolOptions.result as ReadonlyJSONObject,\n toolName: toolOptions.toolName,\n isError: toolOptions.isError,\n ...(toolOptions.artifact && { artifact: toolOptions.artifact }),\n };\n\n commandQueue.enqueue(command);\n },\n onLoadExternalState: async (state) => {\n agentStateRef.current = state as T;\n toolInvocations.reset();\n rerender((prev) => prev + 1);\n },\n });\n\n const toolInvocations = useToolInvocations({\n state: converted,\n getTools: () => runtime.thread.getModelContext().tools,\n onResult: commandQueue.enqueue,\n });\n\n return runtime;\n};\n\n/**\n * @alpha This is an experimental API that is subject to change.\n */\nexport const useAssistantTransportRuntime = <T,>(\n options: AssistantTransportOptions<T>,\n): AssistantRuntime => {\n const runtime = useRemoteThreadListRuntime({\n runtimeHook: function RuntimeHook() {\n return useAssistantTransportThreadRuntime(options);\n },\n adapter: new InMemoryThreadListAdapter(),\n });\n return runtime;\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,3 @@
1
+ import type { AssistantTransportCommand, AssistantTransportState, AssistantTransportStateConverter } from "./types";
2
+ export declare function useConvertedState<T>(converter: AssistantTransportStateConverter<T>, agentState: T, pendingCommands: AssistantTransportCommand[], isSending: boolean): AssistantTransportState;
3
+ //# sourceMappingURL=useConvertedState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useConvertedState.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACvB,gCAAgC,EACjC,MAAM,SAAS,CAAC;AAEjB,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,SAAS,EAAE,gCAAgC,CAAC,CAAC,CAAC,EAC9C,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,yBAAyB,EAAE,EAC5C,SAAS,EAAE,OAAO,GACjB,uBAAuB,CAKzB"}
@@ -0,0 +1,12 @@
1
+ // src/legacy-runtime/runtime-cores/assistant-transport/useConvertedState.ts
2
+ import { useMemo } from "react";
3
+ function useConvertedState(converter, agentState, pendingCommands, isSending) {
4
+ return useMemo(
5
+ () => converter(agentState, { pendingCommands, isSending }),
6
+ [converter, agentState, pendingCommands, isSending]
7
+ );
8
+ }
9
+ export {
10
+ useConvertedState
11
+ };
12
+ //# sourceMappingURL=useConvertedState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"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\";\n\nexport function useConvertedState<T>(\n converter: AssistantTransportStateConverter<T>,\n agentState: T,\n pendingCommands: AssistantTransportCommand[],\n isSending: boolean,\n): AssistantTransportState {\n return useMemo(\n () => converter(agentState, { pendingCommands, isSending }),\n [converter, agentState, pendingCommands, isSending],\n );\n}\n"],"mappings":";AAAA,SAAS,eAAe;AAOjB,SAAS,kBACd,WACA,YACA,iBACA,WACyB;AACzB,SAAO;AAAA,IACL,MAAM,UAAU,YAAY,EAAE,iBAAiB,UAAU,CAAC;AAAA,IAC1D,CAAC,WAAW,YAAY,iBAAiB,SAAS;AAAA,EACpD;AACF;","names":[]}
@@ -0,0 +1,4 @@
1
+ export declare function useLatestRef<T>(value: T): {
2
+ current: T;
3
+ };
4
+ //# sourceMappingURL=useLatestRef.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLatestRef.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAKxB;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CAC7B"}
@@ -0,0 +1,13 @@
1
+ // src/legacy-runtime/runtime-cores/assistant-transport/useLatestRef.ts
2
+ import { useEffect, useRef } from "react";
3
+ function useLatestRef(value) {
4
+ const ref = useRef(value);
5
+ useEffect(() => {
6
+ ref.current = value;
7
+ }, [value]);
8
+ return ref;
9
+ }
10
+ export {
11
+ useLatestRef
12
+ };
13
+ //# sourceMappingURL=useLatestRef.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"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":";AAAA,SAAS,WAAW,cAAc;AAE3B,SAAS,aAAgB,OAAU;AACxC,QAAM,MAAM,OAAO,KAAK;AACxB,YAAU,MAAM;AACd,QAAI,UAAU;AAAA,EAChB,GAAG,CAAC,KAAK,CAAC;AACV,SAAO;AACT;","names":[]}
@@ -0,0 +1,13 @@
1
+ import { type Tool } from "assistant-stream";
2
+ import type { AssistantTransportCommand, AssistantTransportState } from "./types";
3
+ type UseToolInvocationsParams = {
4
+ state: AssistantTransportState;
5
+ getTools: () => Record<string, Tool> | undefined;
6
+ onResult: (command: AssistantTransportCommand) => void;
7
+ };
8
+ export declare function useToolInvocations({ state, getTools, onResult, }: UseToolInvocationsParams): {
9
+ reset: () => void;
10
+ abort: () => void;
11
+ };
12
+ export {};
13
+ //# sourceMappingURL=useToolInvocations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useToolInvocations.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,IAAI,EACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAejB,KAAK,wBAAwB,GAAG;IAC9B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;IACjD,QAAQ,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,QAAQ,EACR,QAAQ,GACT,EAAE,wBAAwB;;;EAwI1B"}
@@ -0,0 +1,138 @@
1
+ // src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.ts
2
+ import { useEffect, useRef, useState } from "react";
3
+ import {
4
+ createAssistantStreamController,
5
+ ToolResponse,
6
+ unstable_toolResultStream
7
+ } from "assistant-stream";
8
+ import {
9
+ AssistantMetaTransformStream
10
+ } from "assistant-stream/utils";
11
+ var isArgsTextComplete = (argsText) => {
12
+ try {
13
+ JSON.parse(argsText);
14
+ return true;
15
+ } catch {
16
+ return false;
17
+ }
18
+ };
19
+ function useToolInvocations({
20
+ state,
21
+ getTools,
22
+ onResult
23
+ }) {
24
+ const lastToolStates = useRef({});
25
+ const acRef = useRef(new AbortController());
26
+ const [controller] = useState(() => {
27
+ const [stream, controller2] = createAssistantStreamController();
28
+ const transform = unstable_toolResultStream(
29
+ getTools,
30
+ () => acRef.current?.signal ?? new AbortController().signal
31
+ );
32
+ stream.pipeThrough(transform).pipeThrough(new AssistantMetaTransformStream()).pipeTo(
33
+ new WritableStream({
34
+ write(chunk) {
35
+ if (chunk.type === "result") {
36
+ if (lastToolStates.current[chunk.meta.toolCallId]?.hasResult)
37
+ return;
38
+ onResult({
39
+ type: "add-tool-result",
40
+ toolCallId: chunk.meta.toolCallId,
41
+ toolName: chunk.meta.toolName,
42
+ result: chunk.result,
43
+ isError: chunk.isError,
44
+ ...chunk.artifact && { artifact: chunk.artifact }
45
+ });
46
+ }
47
+ }
48
+ })
49
+ );
50
+ return controller2;
51
+ });
52
+ const ignoredToolIds = useRef(/* @__PURE__ */ new Set());
53
+ const isInititialState = useRef(true);
54
+ useEffect(() => {
55
+ if (isInititialState.current) {
56
+ state.messages.forEach((message) => {
57
+ message.content.forEach((content) => {
58
+ if (content.type === "tool-call") {
59
+ ignoredToolIds.current.add(content.toolCallId);
60
+ }
61
+ });
62
+ });
63
+ isInititialState.current = false;
64
+ } else {
65
+ state.messages.forEach((message) => {
66
+ message.content.forEach((content) => {
67
+ if (content.type === "tool-call") {
68
+ if (ignoredToolIds.current.has(content.toolCallId)) {
69
+ return;
70
+ }
71
+ let lastState = lastToolStates.current[content.toolCallId];
72
+ if (!lastState) {
73
+ const toolCallController = controller.addToolCallPart({
74
+ toolName: content.toolName,
75
+ toolCallId: content.toolCallId
76
+ });
77
+ lastState = {
78
+ argsText: "",
79
+ hasResult: false,
80
+ controller: toolCallController
81
+ };
82
+ lastToolStates.current[content.toolCallId] = lastState;
83
+ }
84
+ if (content.argsText !== lastState.argsText) {
85
+ if (!content.argsText.startsWith(lastState.argsText)) {
86
+ throw new Error(
87
+ `Tool call argsText can only be appended, not updated: ${content.argsText} does not start with ${lastState.argsText}`
88
+ );
89
+ }
90
+ const argsTextDelta = content.argsText.slice(
91
+ lastState.argsText.length
92
+ );
93
+ lastState.controller.argsText.append(argsTextDelta);
94
+ if (isArgsTextComplete(content.argsText)) {
95
+ lastState.controller.argsText.close();
96
+ }
97
+ lastToolStates.current[content.toolCallId] = {
98
+ argsText: content.argsText,
99
+ hasResult: lastState.hasResult,
100
+ controller: lastState.controller
101
+ };
102
+ }
103
+ if (content.result !== void 0 && !lastState.hasResult) {
104
+ lastState.controller.setResponse(
105
+ new ToolResponse({
106
+ result: content.result,
107
+ artifact: content.artifact,
108
+ isError: content.isError
109
+ })
110
+ );
111
+ lastState.controller.close();
112
+ lastToolStates.current[content.toolCallId] = {
113
+ hasResult: true,
114
+ argsText: lastState.argsText,
115
+ controller: lastState.controller
116
+ };
117
+ }
118
+ }
119
+ });
120
+ });
121
+ }
122
+ }, [state]);
123
+ return {
124
+ reset: () => {
125
+ acRef.current.abort();
126
+ acRef.current = new AbortController();
127
+ isInititialState.current = true;
128
+ },
129
+ abort: () => {
130
+ acRef.current.abort();
131
+ acRef.current = new AbortController();
132
+ }
133
+ };
134
+ }
135
+ export {
136
+ useToolInvocations
137
+ };
138
+ //# sourceMappingURL=useToolInvocations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/useToolInvocations.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n createAssistantStreamController,\n ToolCallStreamController,\n ToolResponse,\n unstable_toolResultStream,\n type Tool,\n} from \"assistant-stream\";\nimport type {\n AssistantTransportCommand,\n AssistantTransportState,\n} from \"./types\";\nimport {\n AssistantMetaTransformStream,\n ReadonlyJSONValue,\n} from \"assistant-stream/utils\";\n\nconst isArgsTextComplete = (argsText: string) => {\n try {\n JSON.parse(argsText);\n return true;\n } catch {\n return false;\n }\n};\n\ntype UseToolInvocationsParams = {\n state: AssistantTransportState;\n getTools: () => Record<string, Tool> | undefined;\n onResult: (command: AssistantTransportCommand) => void;\n};\n\nexport function useToolInvocations({\n state,\n getTools,\n onResult,\n}: UseToolInvocationsParams) {\n const lastToolStates = useRef<\n Record<\n string,\n {\n argsText: string;\n hasResult: boolean;\n controller: ToolCallStreamController;\n }\n >\n >({});\n\n const acRef = useRef<AbortController>(new AbortController());\n const [controller] = useState(() => {\n const [stream, controller] = createAssistantStreamController();\n const transform = unstable_toolResultStream(\n getTools,\n () => acRef.current?.signal ?? new AbortController().signal,\n );\n stream\n .pipeThrough(transform)\n .pipeThrough(new AssistantMetaTransformStream())\n .pipeTo(\n new WritableStream({\n write(chunk) {\n if (chunk.type === \"result\") {\n // the tool call result was already set by the backend\n if (lastToolStates.current[chunk.meta.toolCallId]?.hasResult)\n return;\n\n onResult({\n type: \"add-tool-result\",\n toolCallId: chunk.meta.toolCallId,\n toolName: chunk.meta.toolName,\n result: chunk.result,\n isError: chunk.isError,\n ...(chunk.artifact && { artifact: chunk.artifact }),\n });\n }\n },\n }),\n );\n\n return controller;\n });\n\n const ignoredToolIds = useRef<Set<string>>(new Set());\n const isInititialState = useRef(true);\n\n useEffect(() => {\n if (isInititialState.current) {\n state.messages.forEach((message) => {\n message.content.forEach((content) => {\n if (content.type === \"tool-call\") {\n ignoredToolIds.current.add(content.toolCallId);\n }\n });\n });\n isInititialState.current = false;\n } else {\n state.messages.forEach((message) => {\n message.content.forEach((content) => {\n if (content.type === \"tool-call\") {\n if (ignoredToolIds.current.has(content.toolCallId)) {\n return;\n }\n let lastState = lastToolStates.current[content.toolCallId];\n if (!lastState) {\n const toolCallController = controller.addToolCallPart({\n toolName: content.toolName,\n toolCallId: content.toolCallId,\n });\n lastState = {\n argsText: \"\",\n hasResult: false,\n controller: toolCallController,\n };\n lastToolStates.current[content.toolCallId] = lastState;\n }\n\n if (content.argsText !== lastState.argsText) {\n if (!content.argsText.startsWith(lastState.argsText)) {\n throw new Error(\n `Tool call argsText can only be appended, not updated: ${content.argsText} does not start with ${lastState.argsText}`,\n );\n }\n\n const argsTextDelta = content.argsText.slice(\n lastState.argsText.length,\n );\n lastState.controller.argsText.append(argsTextDelta);\n\n if (isArgsTextComplete(content.argsText)) {\n lastState.controller.argsText.close();\n }\n\n lastToolStates.current[content.toolCallId] = {\n argsText: content.argsText,\n hasResult: lastState.hasResult,\n controller: lastState.controller,\n };\n }\n\n if (content.result !== undefined && !lastState.hasResult) {\n lastState.controller.setResponse(\n new ToolResponse({\n result: content.result as ReadonlyJSONValue,\n artifact: content.artifact as ReadonlyJSONValue | undefined,\n isError: content.isError,\n }),\n );\n lastState.controller.close();\n\n lastToolStates.current[content.toolCallId] = {\n hasResult: true,\n argsText: lastState.argsText,\n controller: lastState.controller,\n };\n }\n }\n });\n });\n }\n }, [state]);\n\n return {\n reset: () => {\n acRef.current.abort();\n acRef.current = new AbortController();\n isInititialState.current = true;\n },\n abort: () => {\n acRef.current.abort();\n acRef.current = new AbortController();\n },\n };\n}\n"],"mappings":"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","names":["controller"]}
@@ -0,0 +1,13 @@
1
+ import { Tool } from "assistant-stream";
2
+ import { JSONSchema7 } from "json-schema";
3
+ export declare const toAISDKTools: (tools: Record<string, Tool>) => {
4
+ [k: string]: {
5
+ parameters: JSONSchema7;
6
+ description?: string;
7
+ };
8
+ };
9
+ export declare const getEnabledTools: (tools: Record<string, Tool>) => {
10
+ [k: string]: Tool;
11
+ };
12
+ export declare const createRequestHeaders: (headersValue: Record<string, string> | Headers | (() => Promise<Record<string, string> | Headers>)) => Promise<Headers>;
13
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;;oBAQxB,WAAW;;;CAI1C,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;;CAM1D,CAAC;AAGF,eAAO,MAAM,oBAAoB,GAC/B,cACI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACtB,OAAO,GACP,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,KACpD,OAAO,CAAC,OAAO,CAOjB,CAAC"}
@@ -0,0 +1,32 @@
1
+ // src/legacy-runtime/runtime-cores/assistant-transport/utils.ts
2
+ import { z } from "zod";
3
+ var toAISDKTools = (tools) => {
4
+ return Object.fromEntries(
5
+ Object.entries(tools).map(([name, tool]) => [
6
+ name,
7
+ {
8
+ ...tool.description ? { description: tool.description } : void 0,
9
+ parameters: tool.parameters instanceof z.ZodType ? z.toJSONSchema(tool.parameters) : tool.parameters
10
+ }
11
+ ])
12
+ );
13
+ };
14
+ var getEnabledTools = (tools) => {
15
+ return Object.fromEntries(
16
+ Object.entries(tools).filter(
17
+ ([, tool]) => !tool.disabled && tool.type !== "backend"
18
+ )
19
+ );
20
+ };
21
+ var createRequestHeaders = async (headersValue) => {
22
+ const resolvedHeaders = typeof headersValue === "function" ? await headersValue() : headersValue;
23
+ const headers = new Headers(resolvedHeaders);
24
+ headers.set("Content-Type", "application/json");
25
+ return headers;
26
+ };
27
+ export {
28
+ createRequestHeaders,
29
+ getEnabledTools,
30
+ toAISDKTools
31
+ };
32
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/assistant-transport/utils.ts"],"sourcesContent":["import { Tool } from \"assistant-stream\";\nimport { JSONSchema7 } from \"json-schema\";\nimport { z } from \"zod\";\n\n// Convert tools to AI SDK format\nexport const toAISDKTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).map(([name, tool]) => [\n name,\n {\n ...(tool.description ? { description: tool.description } : undefined),\n parameters: (tool.parameters instanceof z.ZodType\n ? z.toJSONSchema(tool.parameters)\n : tool.parameters) as JSONSchema7,\n },\n ]),\n );\n};\n\n// Filter enabled tools\nexport const getEnabledTools = (tools: Record<string, Tool>) => {\n return Object.fromEntries(\n Object.entries(tools).filter(\n ([, tool]) => !tool.disabled && tool.type !== \"backend\",\n ),\n );\n};\n\n// Create headers for fetch request\nexport const createRequestHeaders = async (\n headersValue:\n | Record<string, string>\n | Headers\n | (() => Promise<Record<string, string> | Headers>),\n): Promise<Headers> => {\n const resolvedHeaders =\n typeof headersValue === \"function\" ? await headersValue() : headersValue;\n\n const headers = new Headers(resolvedHeaders);\n headers.set(\"Content-Type\", \"application/json\");\n return headers;\n};\n"],"mappings":";AAEA,SAAS,SAAS;AAGX,IAAM,eAAe,CAAC,UAAgC;AAC3D,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,IAAI,MAAM;AAAA,MAC1C;AAAA,MACA;AAAA,QACE,GAAI,KAAK,cAAc,EAAE,aAAa,KAAK,YAAY,IAAI;AAAA,QAC3D,YAAa,KAAK,sBAAsB,EAAE,UACtC,EAAE,aAAa,KAAK,UAAU,IAC9B,KAAK;AAAA,MACX;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGO,IAAM,kBAAkB,CAAC,UAAgC;AAC9D,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,KAAK,EAAE;AAAA,MACpB,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,YAAY,KAAK,SAAS;AAAA,IAChD;AAAA,EACF;AACF;AAGO,IAAM,uBAAuB,OAClC,iBAIqB;AACrB,QAAM,kBACJ,OAAO,iBAAiB,aAAa,MAAM,aAAa,IAAI;AAE9D,QAAM,UAAU,IAAI,QAAQ,eAAe;AAC3C,UAAQ,IAAI,gBAAgB,kBAAkB;AAC9C,SAAO;AACT;","names":[]}
@@ -29,6 +29,7 @@ export declare abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore
29
29
  abstract resumeRun(config: ResumeRunConfig): void;
30
30
  abstract addToolResult(options: AddToolResultOptions): void;
31
31
  abstract cancelRun(): void;
32
+ abstract unstable_loadExternalState(state: any): void;
32
33
  get messages(): readonly import("../../..").ThreadMessage[];
33
34
  get state(): string | number | boolean | import("assistant-stream/utils").ReadonlyJSONObject | import("assistant-stream/utils").ReadonlyJSONArray | null;
34
35
  readonly composer: DefaultThreadComposerRuntimeCore;
@@ -1 +1 @@
1
- {"version":3,"file":"BaseThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"BaseThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"sourcesContent":["import type { AppendMessage, Unsubscribe } from \"../../../types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/MessageRepository\";\nimport { DefaultThreadComposerRuntimeCore } from \"../composer/DefaultThreadComposerRuntimeCore\";\nimport {\n AddToolResultOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n RuntimeCapabilities,\n SubmittedFeedback,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"./ThreadRuntimeCore\";\nimport { DefaultEditComposerRuntimeCore } from \"../composer/DefaultEditComposerRuntimeCore\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport { getThreadMessageText } from \"../../../utils/getThreadMessageText\";\nimport { ModelContextProvider } from \"../../../model-context\";\nimport { ThreadMessageLike } from \"../external-store\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {\n private _subscriptions = new Set<() => void>();\n private _isInitialized = false;\n\n protected readonly repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract cancelRun(): void;\n\n public get messages() {\n return this.repository.getMessages();\n }\n\n public get state() {\n let mostRecentAssistantMessage;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n break;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n constructor(private readonly _contextProvider: ModelContextProvider) {}\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n public beginEdit(messageId: string) {\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n protected _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public _notifyEventSubscribers(event: ThreadRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private _submittedFeedback: Record<string, SubmittedFeedback> = {};\n\n public getSubmittedFeedback(messageId: string) {\n return this._submittedFeedback[messageId];\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n adapter.submit({ message, type });\n\n this._submittedFeedback[messageId] = { type };\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n\n this._stopSpeaking?.();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n const unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n } else {\n this.speech = { messageId, status: utterance.status };\n }\n this._notifySubscribers();\n });\n\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n\n this._stopSpeaking = () => {\n utterance.cancel();\n unsub();\n this.speech = undefined;\n this._stopSpeaking = undefined;\n };\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n this._stopSpeaking();\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\");\n }\n }\n\n // TODO import()/export() on external store doesn't make much sense\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<() => void>\n >();\n\n public unstable_on(event: ThreadRuntimeEventType, callback: () => void) {\n if (event === \"model-context-update\") {\n return this._contextProvider.subscribe?.(callback) ?? (() => {});\n }\n\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event)!;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
1
+ {"version":3,"sources":["../../../../src/legacy-runtime/runtime-cores/core/BaseThreadRuntimeCore.tsx"],"sourcesContent":["import type { AppendMessage, Unsubscribe } from \"../../../types\";\nimport {\n ExportedMessageRepository,\n MessageRepository,\n} from \"../utils/MessageRepository\";\nimport { DefaultThreadComposerRuntimeCore } from \"../composer/DefaultThreadComposerRuntimeCore\";\nimport {\n AddToolResultOptions,\n ThreadSuggestion,\n SubmitFeedbackOptions,\n ThreadRuntimeCore,\n SpeechState,\n RuntimeCapabilities,\n SubmittedFeedback,\n ThreadRuntimeEventType,\n StartRunConfig,\n ResumeRunConfig,\n} from \"./ThreadRuntimeCore\";\nimport { DefaultEditComposerRuntimeCore } from \"../composer/DefaultEditComposerRuntimeCore\";\nimport { SpeechSynthesisAdapter } from \"../adapters/speech/SpeechAdapterTypes\";\nimport { FeedbackAdapter } from \"../adapters/feedback/FeedbackAdapter\";\nimport { AttachmentAdapter } from \"../adapters/attachment\";\nimport { getThreadMessageText } from \"../../../utils/getThreadMessageText\";\nimport { ModelContextProvider } from \"../../../model-context\";\nimport { ThreadMessageLike } from \"../external-store\";\n\ntype BaseThreadAdapters = {\n speech?: SpeechSynthesisAdapter | undefined;\n feedback?: FeedbackAdapter | undefined;\n attachments?: AttachmentAdapter | undefined;\n};\n\nexport abstract class BaseThreadRuntimeCore implements ThreadRuntimeCore {\n private _subscriptions = new Set<() => void>();\n private _isInitialized = false;\n\n protected readonly repository = new MessageRepository();\n public abstract get adapters(): BaseThreadAdapters | undefined;\n public abstract get isDisabled(): boolean;\n public abstract get isLoading(): boolean;\n public abstract get suggestions(): readonly ThreadSuggestion[];\n public abstract get extras(): unknown;\n\n public abstract get capabilities(): RuntimeCapabilities;\n public abstract append(message: AppendMessage): void;\n public abstract startRun(config: StartRunConfig): void;\n public abstract resumeRun(config: ResumeRunConfig): void;\n public abstract addToolResult(options: AddToolResultOptions): void;\n public abstract cancelRun(): void;\n public abstract unstable_loadExternalState(state: any): void;\n\n public get messages() {\n return this.repository.getMessages();\n }\n\n public get state() {\n let mostRecentAssistantMessage;\n for (const message of this.messages) {\n if (message.role === \"assistant\") {\n mostRecentAssistantMessage = message;\n break;\n }\n }\n\n return mostRecentAssistantMessage?.metadata.unstable_state ?? null;\n }\n\n public readonly composer = new DefaultThreadComposerRuntimeCore(this);\n\n constructor(private readonly _contextProvider: ModelContextProvider) {}\n\n public getModelContext() {\n return this._contextProvider.getModelContext();\n }\n\n private _editComposers = new Map<string, DefaultEditComposerRuntimeCore>();\n public getEditComposer(messageId: string) {\n return this._editComposers.get(messageId);\n }\n public beginEdit(messageId: string) {\n if (this._editComposers.has(messageId))\n throw new Error(\"Edit already in progress\");\n\n this._editComposers.set(\n messageId,\n new DefaultEditComposerRuntimeCore(\n this,\n () => this._editComposers.delete(messageId),\n this.repository.getMessage(messageId),\n ),\n );\n this._notifySubscribers();\n }\n\n public getMessageById(messageId: string) {\n try {\n return this.repository.getMessage(messageId);\n } catch {\n return undefined;\n }\n }\n\n public getBranches(messageId: string): string[] {\n return this.repository.getBranches(messageId);\n }\n\n public switchToBranch(branchId: string): void {\n this.repository.switchToBranch(branchId);\n this._notifySubscribers();\n }\n\n protected _notifySubscribers() {\n for (const callback of this._subscriptions) callback();\n }\n\n public _notifyEventSubscribers(event: ThreadRuntimeEventType) {\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) return;\n\n for (const callback of subscribers) callback();\n }\n\n public subscribe(callback: () => void): Unsubscribe {\n this._subscriptions.add(callback);\n return () => this._subscriptions.delete(callback);\n }\n\n private _submittedFeedback: Record<string, SubmittedFeedback> = {};\n\n public getSubmittedFeedback(messageId: string) {\n return this._submittedFeedback[messageId];\n }\n\n public submitFeedback({ messageId, type }: SubmitFeedbackOptions) {\n const adapter = this.adapters?.feedback;\n if (!adapter) throw new Error(\"Feedback adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n adapter.submit({ message, type });\n\n this._submittedFeedback[messageId] = { type };\n this._notifySubscribers();\n }\n\n private _stopSpeaking: Unsubscribe | undefined;\n public speech: SpeechState | undefined;\n\n public speak(messageId: string) {\n const adapter = this.adapters?.speech;\n if (!adapter) throw new Error(\"Speech adapter not configured\");\n\n const { message } = this.repository.getMessage(messageId);\n\n this._stopSpeaking?.();\n\n const utterance = adapter.speak(getThreadMessageText(message));\n const unsub = utterance.subscribe(() => {\n if (utterance.status.type === \"ended\") {\n this._stopSpeaking = undefined;\n this.speech = undefined;\n } else {\n this.speech = { messageId, status: utterance.status };\n }\n this._notifySubscribers();\n });\n\n this.speech = { messageId, status: utterance.status };\n this._notifySubscribers();\n\n this._stopSpeaking = () => {\n utterance.cancel();\n unsub();\n this.speech = undefined;\n this._stopSpeaking = undefined;\n };\n }\n\n public stopSpeaking() {\n if (!this._stopSpeaking) throw new Error(\"No message is being spoken\");\n this._stopSpeaking();\n this._notifySubscribers();\n }\n\n protected ensureInitialized() {\n if (!this._isInitialized) {\n this._isInitialized = true;\n this._notifyEventSubscribers(\"initialize\");\n }\n }\n\n // TODO import()/export() on external store doesn't make much sense\n public export() {\n return this.repository.export();\n }\n\n public import(data: ExportedMessageRepository) {\n this.ensureInitialized();\n this.repository.clear();\n this.repository.import(data);\n this._notifySubscribers();\n }\n\n public reset(initialMessages?: readonly ThreadMessageLike[]) {\n this.import(ExportedMessageRepository.fromArray(initialMessages ?? []));\n }\n\n private _eventSubscribers = new Map<\n ThreadRuntimeEventType,\n Set<() => void>\n >();\n\n public unstable_on(event: ThreadRuntimeEventType, callback: () => void) {\n if (event === \"model-context-update\") {\n return this._contextProvider.subscribe?.(callback) ?? (() => {});\n }\n\n const subscribers = this._eventSubscribers.get(event);\n if (!subscribers) {\n this._eventSubscribers.set(event, new Set([callback]));\n } else {\n subscribers.add(callback);\n }\n\n return () => {\n const subscribers = this._eventSubscribers.get(event)!;\n subscribers.delete(callback);\n };\n }\n}\n"],"mappings":"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","names":["subscribers"]}
@@ -47,7 +47,7 @@ export type StartRunConfig = {
47
47
  runConfig: RunConfig;
48
48
  };
49
49
  export type ResumeRunConfig = StartRunConfig & {
50
- stream: (options: ChatModelRunOptions) => AsyncGenerator<ChatModelRunResult, void, unknown>;
50
+ stream?: (options: ChatModelRunOptions) => AsyncGenerator<ChatModelRunResult, void, unknown>;
51
51
  };
52
52
  export type ThreadRuntimeCore = Readonly<{
53
53
  getMessageById: (messageId: string) => {
@@ -82,5 +82,6 @@ export type ThreadRuntimeCore = Readonly<{
82
82
  export(): ExportedMessageRepository;
83
83
  reset(initialMessages?: readonly ThreadMessageLike[]): void;
84
84
  unstable_on(event: ThreadRuntimeEventType, callback: () => void): Unsubscribe;
85
+ unstable_loadExternalState: (state: any) => void;
85
86
  }>;
86
87
  //# sourceMappingURL=ThreadRuntimeCore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThreadRuntimeCore.d.ts","sourceRoot":"","sources":["../../../../src/legacy-runtime/runtime-cores/core/ThreadRuntimeCore.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { AppendMessage, ThreadMessage } from "../../../types";
2
2
  import { AttachmentAdapter } from "../adapters/attachment";
3
- import { AddToolResultOptions, StartRunConfig, ThreadSuggestion } from "../core/ThreadRuntimeCore";
3
+ import { AddToolResultOptions, ResumeRunConfig, StartRunConfig, ThreadSuggestion } from "../core/ThreadRuntimeCore";
4
4
  import { FeedbackAdapter } from "../adapters/feedback/FeedbackAdapter";
5
5
  import { SpeechSynthesisAdapter } from "../adapters/speech/SpeechAdapterTypes";
6
6
  import { ThreadMessageLike } from "./ThreadMessageLike";
@@ -47,9 +47,11 @@ type ExternalStoreAdapterBase<T> = {
47
47
  extras?: unknown;
48
48
  setMessages?: ((messages: readonly T[]) => void) | undefined;
49
49
  onImport?: ((messages: readonly ThreadMessage[]) => void) | undefined;
50
+ onLoadExternalState?: ((state: any) => void) | undefined;
50
51
  onNew: (message: AppendMessage) => Promise<void>;
51
52
  onEdit?: ((message: AppendMessage) => Promise<void>) | undefined;
52
53
  onReload?: ((parentId: string | null, config: StartRunConfig) => Promise<void>) | undefined;
54
+ onResume?: ((config: ResumeRunConfig) => Promise<void>) | undefined;
53
55
  onCancel?: (() => Promise<void>) | undefined;
54
56
  onAddToolResult?: ((options: AddToolResultOptions) => Promise<void> | void) | undefined;
55
57
  convertMessage?: ExternalStoreMessageConverter<T> | undefined;