@langchain/langgraph-sdk 1.6.5 → 1.7.0

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 (177) hide show
  1. package/dist/client.cjs +2 -1
  2. package/dist/client.cjs.map +1 -1
  3. package/dist/client.d.cts.map +1 -1
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +2 -1
  6. package/dist/client.js.map +1 -1
  7. package/dist/index.d.cts +4 -4
  8. package/dist/index.d.ts +4 -4
  9. package/dist/react/index.cjs +46 -10
  10. package/dist/react/index.cjs.map +1 -0
  11. package/dist/react/index.d.cts +14 -11
  12. package/dist/react/index.d.cts.map +1 -0
  13. package/dist/react/index.d.ts +14 -11
  14. package/dist/react/index.d.ts.map +1 -0
  15. package/dist/react/index.js +14 -4
  16. package/dist/react/index.js.map +1 -0
  17. package/dist/react-ui/index.cjs +38 -13
  18. package/dist/react-ui/index.d.cts +1 -2
  19. package/dist/react-ui/index.d.ts +1 -2
  20. package/dist/react-ui/index.js +2 -8
  21. package/dist/react-ui/server/index.cjs +14 -4
  22. package/dist/react-ui/server/index.d.cts +1 -2
  23. package/dist/react-ui/server/index.d.ts +1 -2
  24. package/dist/react-ui/server/index.js +1 -2
  25. package/dist/types.messages.d.cts +5 -3
  26. package/dist/types.messages.d.cts.map +1 -1
  27. package/dist/types.messages.d.ts +5 -3
  28. package/dist/types.messages.d.ts.map +1 -1
  29. package/dist/ui/branching.cjs +24 -0
  30. package/dist/ui/branching.cjs.map +1 -1
  31. package/dist/ui/branching.d.cts +26 -1
  32. package/dist/ui/branching.d.cts.map +1 -1
  33. package/dist/ui/branching.d.ts +26 -1
  34. package/dist/ui/branching.d.ts.map +1 -1
  35. package/dist/ui/branching.js +25 -1
  36. package/dist/ui/branching.js.map +1 -1
  37. package/dist/ui/index.cjs +30 -0
  38. package/dist/ui/index.d.cts +15 -0
  39. package/dist/ui/index.d.ts +15 -0
  40. package/dist/ui/index.js +11 -0
  41. package/dist/ui/interrupts.cjs +21 -0
  42. package/dist/ui/interrupts.cjs.map +1 -0
  43. package/dist/ui/interrupts.d.cts +11 -0
  44. package/dist/ui/interrupts.d.cts.map +1 -0
  45. package/dist/ui/interrupts.d.ts +11 -0
  46. package/dist/ui/interrupts.d.ts.map +1 -0
  47. package/dist/ui/interrupts.js +20 -0
  48. package/dist/ui/interrupts.js.map +1 -0
  49. package/dist/ui/manager.cjs +8 -3
  50. package/dist/ui/manager.cjs.map +1 -1
  51. package/dist/ui/manager.d.cts +224 -0
  52. package/dist/ui/manager.d.cts.map +1 -0
  53. package/dist/ui/manager.d.ts +224 -0
  54. package/dist/ui/manager.d.ts.map +1 -0
  55. package/dist/ui/manager.js +8 -3
  56. package/dist/ui/manager.js.map +1 -1
  57. package/dist/ui/messages.cjs +19 -0
  58. package/dist/ui/messages.cjs.map +1 -1
  59. package/dist/ui/messages.d.cts +36 -0
  60. package/dist/ui/messages.d.cts.map +1 -0
  61. package/dist/ui/messages.d.ts +36 -0
  62. package/dist/ui/messages.d.ts.map +1 -0
  63. package/dist/ui/messages.js +18 -1
  64. package/dist/ui/messages.js.map +1 -1
  65. package/dist/ui/queue.cjs +75 -0
  66. package/dist/ui/queue.cjs.map +1 -0
  67. package/dist/ui/queue.d.cts +72 -0
  68. package/dist/ui/queue.d.cts.map +1 -0
  69. package/dist/ui/queue.d.ts +72 -0
  70. package/dist/ui/queue.d.ts.map +1 -0
  71. package/dist/ui/queue.js +74 -0
  72. package/dist/ui/queue.js.map +1 -0
  73. package/dist/ui/stream/base.d.cts +11 -0
  74. package/dist/ui/stream/base.d.cts.map +1 -1
  75. package/dist/ui/stream/base.d.ts +11 -0
  76. package/dist/ui/stream/base.d.ts.map +1 -1
  77. package/dist/ui/stream/index.d.cts +4 -4
  78. package/dist/ui/stream/index.d.cts.map +1 -1
  79. package/dist/ui/stream/index.d.ts +4 -4
  80. package/dist/ui/stream/index.d.ts.map +1 -1
  81. package/dist/ui/subagents.cjs +4 -1
  82. package/dist/ui/subagents.cjs.map +1 -1
  83. package/dist/ui/subagents.d.cts +7 -0
  84. package/dist/ui/subagents.d.cts.map +1 -1
  85. package/dist/ui/subagents.d.ts +7 -0
  86. package/dist/ui/subagents.d.ts.map +1 -1
  87. package/dist/ui/subagents.js +4 -1
  88. package/dist/ui/subagents.js.map +1 -1
  89. package/dist/ui/transport.cjs +31 -0
  90. package/dist/ui/transport.cjs.map +1 -0
  91. package/dist/{react/stream.custom.d.cts → ui/transport.d.cts} +3 -3
  92. package/dist/ui/transport.d.cts.map +1 -0
  93. package/dist/{react/stream.custom.d.ts → ui/transport.d.ts} +3 -3
  94. package/dist/ui/transport.d.ts.map +1 -0
  95. package/dist/ui/transport.js +31 -0
  96. package/dist/ui/transport.js.map +1 -0
  97. package/dist/ui/types.d.cts +125 -16
  98. package/dist/ui/types.d.cts.map +1 -1
  99. package/dist/ui/types.d.ts +125 -16
  100. package/dist/ui/types.d.ts.map +1 -1
  101. package/dist/ui/utils.d.cts +7 -0
  102. package/dist/ui/utils.d.cts.map +1 -0
  103. package/dist/ui/utils.d.ts +7 -0
  104. package/dist/ui/utils.d.ts.map +1 -0
  105. package/dist/utils/index.cjs +9 -0
  106. package/dist/utils/index.d.cts +4 -0
  107. package/dist/utils/index.d.ts +4 -0
  108. package/dist/utils/index.js +5 -0
  109. package/dist/utils/sse.d.cts +11 -0
  110. package/dist/utils/sse.d.cts.map +1 -0
  111. package/dist/utils/sse.d.ts +11 -0
  112. package/dist/utils/sse.d.ts.map +1 -0
  113. package/dist/utils/stream.d.cts +19 -0
  114. package/dist/utils/stream.d.cts.map +1 -0
  115. package/dist/utils/stream.d.ts +19 -0
  116. package/dist/utils/stream.d.ts.map +1 -0
  117. package/dist/utils/tools.cjs +26 -17
  118. package/dist/utils/tools.cjs.map +1 -1
  119. package/dist/utils/tools.d.cts +7 -0
  120. package/dist/utils/tools.d.cts.map +1 -0
  121. package/dist/utils/tools.d.ts +7 -0
  122. package/dist/utils/tools.d.ts.map +1 -0
  123. package/dist/utils/tools.js +26 -17
  124. package/dist/utils/tools.js.map +1 -1
  125. package/package.json +41 -12
  126. package/dist/react/stream.cjs +0 -18
  127. package/dist/react/stream.cjs.map +0 -1
  128. package/dist/react/stream.custom.cjs +0 -164
  129. package/dist/react/stream.custom.cjs.map +0 -1
  130. package/dist/react/stream.custom.d.cts.map +0 -1
  131. package/dist/react/stream.custom.d.ts.map +0 -1
  132. package/dist/react/stream.custom.js +0 -162
  133. package/dist/react/stream.custom.js.map +0 -1
  134. package/dist/react/stream.d.cts +0 -174
  135. package/dist/react/stream.d.cts.map +0 -1
  136. package/dist/react/stream.d.ts +0 -174
  137. package/dist/react/stream.d.ts.map +0 -1
  138. package/dist/react/stream.js +0 -17
  139. package/dist/react/stream.js.map +0 -1
  140. package/dist/react/stream.lgp.cjs +0 -544
  141. package/dist/react/stream.lgp.cjs.map +0 -1
  142. package/dist/react/stream.lgp.js +0 -543
  143. package/dist/react/stream.lgp.js.map +0 -1
  144. package/dist/react/thread.cjs +0 -21
  145. package/dist/react/thread.cjs.map +0 -1
  146. package/dist/react/thread.js +0 -20
  147. package/dist/react/thread.js.map +0 -1
  148. package/dist/react/types.d.cts +0 -79
  149. package/dist/react/types.d.cts.map +0 -1
  150. package/dist/react/types.d.ts +0 -79
  151. package/dist/react/types.d.ts.map +0 -1
  152. package/dist/react-ui/client.cjs +0 -138
  153. package/dist/react-ui/client.cjs.map +0 -1
  154. package/dist/react-ui/client.d.cts +0 -76
  155. package/dist/react-ui/client.d.cts.map +0 -1
  156. package/dist/react-ui/client.d.ts +0 -76
  157. package/dist/react-ui/client.d.ts.map +0 -1
  158. package/dist/react-ui/client.js +0 -132
  159. package/dist/react-ui/client.js.map +0 -1
  160. package/dist/react-ui/index.cjs.map +0 -1
  161. package/dist/react-ui/index.js.map +0 -1
  162. package/dist/react-ui/server/server.cjs +0 -57
  163. package/dist/react-ui/server/server.cjs.map +0 -1
  164. package/dist/react-ui/server/server.d.cts +0 -54
  165. package/dist/react-ui/server/server.d.cts.map +0 -1
  166. package/dist/react-ui/server/server.d.ts +0 -54
  167. package/dist/react-ui/server/server.d.ts.map +0 -1
  168. package/dist/react-ui/server/server.js +0 -56
  169. package/dist/react-ui/server/server.js.map +0 -1
  170. package/dist/react-ui/types.cjs +0 -38
  171. package/dist/react-ui/types.cjs.map +0 -1
  172. package/dist/react-ui/types.d.cts +0 -25
  173. package/dist/react-ui/types.d.cts.map +0 -1
  174. package/dist/react-ui/types.d.ts +0 -25
  175. package/dist/react-ui/types.d.ts.map +0 -1
  176. package/dist/react-ui/types.js +0 -35
  177. package/dist/react-ui/types.js.map +0 -1
@@ -1,5 +1,15 @@
1
- import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "../ui/subagents.js";
2
- import { FetchStreamTransport } from "./stream.custom.js";
3
- import { useStream } from "./stream.js";
1
+ import { toMessageDict } from "../ui/messages.js";
2
+ import { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream as useStream$1 } from "@langchain/react";
4
3
 
5
- export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
4
+ //#region src/react/index.ts
5
+ function useStream(...args) {
6
+ const options = args[0];
7
+ return useStream$1({
8
+ ...options,
9
+ toMessage: toMessageDict
10
+ });
11
+ }
12
+
13
+ //#endregion
14
+ export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_useStream"],"sources":["../../src/react/index.ts"],"sourcesContent":["import {\n useStream as _useStream,\n FetchStreamTransport,\n} from \"@langchain/react\";\nimport type { BagTemplate } from \"@langchain/langgraph-sdk\";\nimport type {\n ResolveStreamInterface,\n ResolveStreamOptions,\n UseStreamCustomOptions,\n InferBag,\n InferStateType,\n} from \"@langchain/langgraph-sdk/ui\";\nimport { toMessageDict } from \"../ui/messages.js\";\n\nexport { FetchStreamTransport };\n\n/**\n * Re-export of useStream that forces plain Message[] output\n * for backward compatibility with @langchain/langgraph-sdk/react users.\n */\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n>(\n options: ResolveStreamOptions<T, InferBag<T, Bag>>\n): ResolveStreamInterface<T, InferBag<T, Bag>>;\n\nexport function useStream<\n T = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n>(\n options: UseStreamCustomOptions<InferStateType<T>, InferBag<T, Bag>>\n): ResolveStreamInterface<T, InferBag<T, Bag>>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useStream(...args: any[]): any {\n const options = args[0];\n return _useStream({\n ...options,\n toMessage: toMessageDict,\n });\n}\n\nexport type {\n UseStream,\n UseStreamCustom,\n SubagentStream,\n SubagentStreamInterface,\n} from \"@langchain/react\";\nexport type {\n BaseStream,\n UseAgentStream,\n UseAgentStreamOptions,\n UseDeepAgentStream,\n UseDeepAgentStreamOptions,\n ResolveStreamInterface,\n ResolveStreamOptions,\n InferStateType,\n InferToolCalls,\n InferSubagentStates,\n InferNodeNames,\n InferBag,\n} from \"@langchain/react\";\nexport type {\n MessageMetadata,\n UseStreamOptions,\n UseStreamCustomOptions,\n UseStreamTransport,\n UseStreamThread,\n GetToolCallsType,\n AgentTypeConfigLike,\n IsAgentLike,\n ExtractAgentConfig,\n InferAgentToolCalls,\n SubagentToolCall,\n SubagentStatus,\n SubAgentLike,\n CompiledSubAgentLike,\n DeepAgentTypeConfigLike,\n IsDeepAgentLike,\n ExtractDeepAgentConfig,\n ExtractSubAgentMiddleware,\n InferDeepAgentSubagents,\n InferSubagentByName,\n InferSubagentState,\n InferSubagentNames,\n SubagentStateMap,\n DefaultSubagentStates,\n BaseSubagentState,\n} from \"@langchain/react\";\nexport type {\n ToolCallWithResult,\n ToolCallState,\n DefaultToolCall,\n ToolCallFromTool,\n ToolCallsFromTools,\n} from \"@langchain/langgraph-sdk\";\nexport {\n SubagentManager,\n extractToolCallIdFromNamespace,\n calculateDepthFromNamespace,\n extractParentIdFromNamespace,\n isSubagentNamespace,\n} from \"@langchain/react\";\n"],"mappings":";;;;AAmCA,SAAgB,UAAU,GAAG,MAAkB;CAC7C,MAAM,UAAU,KAAK;AACrB,QAAOA,YAAW;EAChB,GAAG;EACH,WAAW;EACZ,CAAC"}
@@ -1,15 +1,40 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_client = require('./client.cjs');
3
- const require_types = require('./types.cjs');
2
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
3
+ let _langchain_react_react_ui = require("@langchain/react/react-ui");
4
4
 
5
- //#region src/react-ui/index.ts
6
- require_client.bootstrapUiContext();
7
-
8
- //#endregion
9
- exports.LoadExternalComponent = require_client.LoadExternalComponent;
10
- exports.experimental_loadShare = require_client.experimental_loadShare;
11
- exports.isRemoveUIMessage = require_types.isRemoveUIMessage;
12
- exports.isUIMessage = require_types.isUIMessage;
13
- exports.uiMessageReducer = require_types.uiMessageReducer;
14
- exports.useStreamContext = require_client.useStreamContext;
15
- //# sourceMappingURL=index.cjs.map
5
+ Object.defineProperty(exports, 'LoadExternalComponent', {
6
+ enumerable: true,
7
+ get: function () {
8
+ return _langchain_react_react_ui.LoadExternalComponent;
9
+ }
10
+ });
11
+ Object.defineProperty(exports, 'experimental_loadShare', {
12
+ enumerable: true,
13
+ get: function () {
14
+ return _langchain_react_react_ui.experimental_loadShare;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, 'isRemoveUIMessage', {
18
+ enumerable: true,
19
+ get: function () {
20
+ return _langchain_react_react_ui.isRemoveUIMessage;
21
+ }
22
+ });
23
+ Object.defineProperty(exports, 'isUIMessage', {
24
+ enumerable: true,
25
+ get: function () {
26
+ return _langchain_react_react_ui.isUIMessage;
27
+ }
28
+ });
29
+ Object.defineProperty(exports, 'uiMessageReducer', {
30
+ enumerable: true,
31
+ get: function () {
32
+ return _langchain_react_react_ui.uiMessageReducer;
33
+ }
34
+ });
35
+ Object.defineProperty(exports, 'useStreamContext', {
36
+ enumerable: true,
37
+ get: function () {
38
+ return _langchain_react_react_ui.useStreamContext;
39
+ }
40
+ });
@@ -1,3 +1,2 @@
1
- import { RemoveUIMessage, UIMessage, isRemoveUIMessage, isUIMessage, uiMessageReducer } from "./types.cjs";
2
- import { LoadExternalComponent, experimental_loadShare, useStreamContext } from "./client.cjs";
1
+ import { LoadExternalComponent, RemoveUIMessage, UIMessage, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext } from "@langchain/react/react-ui";
3
2
  export { LoadExternalComponent, type RemoveUIMessage, type UIMessage, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext };
@@ -1,3 +1,2 @@
1
- import { RemoveUIMessage, UIMessage, isRemoveUIMessage, isUIMessage, uiMessageReducer } from "./types.js";
2
- import { LoadExternalComponent, experimental_loadShare, useStreamContext } from "./client.js";
1
+ import { LoadExternalComponent, RemoveUIMessage, UIMessage, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext } from "@langchain/react/react-ui";
3
2
  export { LoadExternalComponent, type RemoveUIMessage, type UIMessage, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext };
@@ -1,9 +1,3 @@
1
- import { LoadExternalComponent, bootstrapUiContext, experimental_loadShare, useStreamContext } from "./client.js";
2
- import { isRemoveUIMessage, isUIMessage, uiMessageReducer } from "./types.js";
1
+ import { LoadExternalComponent, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext } from "@langchain/react/react-ui";
3
2
 
4
- //#region src/react-ui/index.ts
5
- bootstrapUiContext();
6
-
7
- //#endregion
8
- export { LoadExternalComponent, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext };
9
- //# sourceMappingURL=index.js.map
3
+ export { LoadExternalComponent, experimental_loadShare, isRemoveUIMessage, isUIMessage, uiMessageReducer, useStreamContext };
@@ -1,6 +1,16 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_types = require('../types.cjs');
3
- const require_server = require('./server.cjs');
2
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
3
+ let _langchain_react_react_ui_server = require("@langchain/react/react-ui/server");
4
4
 
5
- exports.typedUi = require_server.typedUi;
6
- exports.uiMessageReducer = require_types.uiMessageReducer;
5
+ Object.defineProperty(exports, 'typedUi', {
6
+ enumerable: true,
7
+ get: function () {
8
+ return _langchain_react_react_ui_server.typedUi;
9
+ }
10
+ });
11
+ Object.defineProperty(exports, 'uiMessageReducer', {
12
+ enumerable: true,
13
+ get: function () {
14
+ return _langchain_react_react_ui_server.uiMessageReducer;
15
+ }
16
+ });
@@ -1,3 +1,2 @@
1
- import { RemoveUIMessage, UIMessage, uiMessageReducer } from "../types.cjs";
2
- import { typedUi } from "./server.cjs";
1
+ import { RemoveUIMessage, UIMessage, typedUi, uiMessageReducer } from "@langchain/react/react-ui/server";
3
2
  export { type RemoveUIMessage, type UIMessage, typedUi, uiMessageReducer };
@@ -1,3 +1,2 @@
1
- import { RemoveUIMessage, UIMessage, uiMessageReducer } from "../types.js";
2
- import { typedUi } from "./server.js";
1
+ import { RemoveUIMessage, UIMessage, typedUi, uiMessageReducer } from "@langchain/react/react-ui/server";
3
2
  export { type RemoveUIMessage, type UIMessage, typedUi, uiMessageReducer };
@@ -1,4 +1,3 @@
1
- import { uiMessageReducer } from "../types.js";
2
- import { typedUi } from "./server.js";
1
+ import { typedUi, uiMessageReducer } from "@langchain/react/react-ui/server";
3
2
 
4
3
  export { typedUi, uiMessageReducer };
@@ -226,8 +226,10 @@ type ToolCallState = "pending" | "completed" | "error";
226
226
  * Useful for rendering tool invocations and their outputs together.
227
227
  *
228
228
  * @template ToolCall The type of the tool call.
229
+ * @template TToolMessage The type of the tool result message. Defaults to the SDK's plain ToolMessage interface.
230
+ * @template TAIMessage The type of the AI message. Defaults to the SDK's plain AIMessage interface.
229
231
  */
230
- type ToolCallWithResult<ToolCall = DefaultToolCall> = {
232
+ type ToolCallWithResult<ToolCall = DefaultToolCall, TToolMessage = ToolMessage, TAIMessage = AIMessage<ToolCall>> = {
231
233
  /**
232
234
  * Unique identifier for this tool call.
233
235
  * Uses the tool call's id if available, otherwise generates one from aiMessage.id and index.
@@ -241,11 +243,11 @@ type ToolCallWithResult<ToolCall = DefaultToolCall> = {
241
243
  * The result message from tool execution.
242
244
  * `undefined` if the tool is still being executed or no result was received.
243
245
  */
244
- result: ToolMessage | undefined;
246
+ result: TToolMessage | undefined;
245
247
  /**
246
248
  * The AI message that initiated this tool call.
247
249
  */
248
- aiMessage: AIMessage<ToolCall>;
250
+ aiMessage: TAIMessage;
249
251
  /**
250
252
  * Index of this tool call within the AI message's tool_calls array.
251
253
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.messages.d.cts","names":[],"sources":["../src/types.messages.ts"],"mappings":";KAAK,WAAA;AAAA,KACA,sBAAA;EACH,IAAA;EACA,SAAA;IAAsB,GAAA;IAAa,MAAA,GAAS,WAAA;EAAA;AAAA;AAAA,KAGzC,kBAAA;EAAuB,IAAA;EAAc,IAAA;AAAA;AAAA,KACrC,qBAAA,GAAwB,kBAAA,GAAqB,sBAAA;AAAA,KAC7C,cAAA,YAA0B,qBAAA;;;;KAK1B,uBAAA,GAA0B,MAAA;AAAA,KAE1B,WAAA;EACH,iBAAA,GAAoB,uBAAA;EACpB,OAAA,EAAS,cAAA;EACT,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;AAAA;AAAA,KAGV,YAAA,GAAe,WAAA;EACzB,IAAA;EACA,OAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EAEA,IAAA;IAAA,CAAS,CAAA;EAAA;EACT,EAAA;EACA,IAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;KAMU,aAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;IAEM,KAAA;IACA,UAAA;IACA,cAAA;EAAA;EAGN,oBAAA;IACM,KAAA;IAA4B,SAAA;EAAA;AAAA;;;;;;;;;AAvBpC;;;;;;;;;;;AAWA;;;;;;;;KA2CY,SAAA,YAAqB,eAAA,IAAmB,WAAA;EAClD,IAAA;EACA,OAAA;EACA,UAAA,GAAa,QAAA;EACb,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,aAAA;AAAA;AAAA,KAGP,WAAA,GAAc,WAAA;EACxB,IAAA;EACA,MAAA;EACA,YAAA;EAX+B;;;;;;;EAoB/B,QAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,WAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;;;AAxBF;;;KAgCY,OAAA,YAAmB,eAAA,IAC3B,YAAA,GACA,SAAA,CAAU,QAAA,IACV,WAAA,GACA,aAAA,GACA,eAAA,GACA,aAAA;;;;;;;;KAUC,gBAAA,MAAsB,CAAA;EAAY,IAAA;IAAQ,KAAA;EAAA;AAAA,IAC3C,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,IAAA;;;;AA5BJ;;KAoCK,cAAA,MAAoB,CAAA;EAEvB,KAAA,GAAQ,GAAA,iBAAoB,IAAA;AAAA,IAE1B,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,gBAAA,CAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AA3BH;KAsDN,gBAAA,MAAsB,CAAA;EAAY,IAAA;AAAA,IAC1C,cAAA,CAAe,CAAA,uBACb,IAAA,yBAGA,IAAA,SAAa,MAAA;EACT,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,IAAA;EAAM,EAAA;EAAa,IAAA;AAAA;;;;;;;;AA/CpC;;;;;;;;;;;;;;;;;;;;;;KAiFI,kBAAA,iCACV,CAAA,iDACI,gBAAA,CAAiB,KAAA,IAAS,kBAAA,CAAmB,IAAA;AA1CnD;;;;;;;AAAA,KAoDY,aAAA;;;;;;;KAQA,kBAAA,YAA8B,eAAA;EA3DtC;;;;EAgEF,EAAA;EA5DiB;;;EAiEjB,IAAA,EAAM,QAAA;EAhEiB;;;;EAsEvB,MAAA,EAAQ,WAAA;EApCE;;;EAyCV,SAAA,EAAW,SAAA,CAAU,QAAA;EAvCA;;;EA4CrB,KAAA;EA5CgD;;;;;;;EAqDhD,KAAA,EAAO,aAAA;AAAA"}
1
+ {"version":3,"file":"types.messages.d.cts","names":[],"sources":["../src/types.messages.ts"],"mappings":";KAAK,WAAA;AAAA,KACA,sBAAA;EACH,IAAA;EACA,SAAA;IAAsB,GAAA;IAAa,MAAA,GAAS,WAAA;EAAA;AAAA;AAAA,KAGzC,kBAAA;EAAuB,IAAA;EAAc,IAAA;AAAA;AAAA,KACrC,qBAAA,GAAwB,kBAAA,GAAqB,sBAAA;AAAA,KAC7C,cAAA,YAA0B,qBAAA;;;;KAK1B,uBAAA,GAA0B,MAAA;AAAA,KAE1B,WAAA;EACH,iBAAA,GAAoB,uBAAA;EACpB,OAAA,EAAS,cAAA;EACT,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;AAAA;AAAA,KAGV,YAAA,GAAe,WAAA;EACzB,IAAA;EACA,OAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EAEA,IAAA;IAAA,CAAS,CAAA;EAAA;EACT,EAAA;EACA,IAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;KAMU,aAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;IAEM,KAAA;IACA,UAAA;IACA,cAAA;EAAA;EAGN,oBAAA;IACM,KAAA;IAA4B,SAAA;EAAA;AAAA;;;;;;;;;AAvBpC;;;;;;;;;;;AAWA;;;;;;;;KA2CY,SAAA,YAAqB,eAAA,IAAmB,WAAA;EAClD,IAAA;EACA,OAAA;EACA,UAAA,GAAa,QAAA;EACb,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,aAAA;AAAA;AAAA,KAGP,WAAA,GAAc,WAAA;EACxB,IAAA;EACA,MAAA;EACA,YAAA;EAX+B;;;;;;;EAoB/B,QAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,WAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;;;AAxBF;;;KAgCY,OAAA,YAAmB,eAAA,IAC3B,YAAA,GACA,SAAA,CAAU,QAAA,IACV,WAAA,GACA,aAAA,GACA,eAAA,GACA,aAAA;;;;;;;;KAUC,gBAAA,MAAsB,CAAA;EAAY,IAAA;IAAQ,KAAA;EAAA;AAAA,IAC3C,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,IAAA;;;;AA5BJ;;KAoCK,cAAA,MAAoB,CAAA;EAEvB,KAAA,GAAQ,GAAA,iBAAoB,IAAA;AAAA,IAE1B,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,gBAAA,CAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AA3BH;KAsDN,gBAAA,MAAsB,CAAA;EAAY,IAAA;AAAA,IAC1C,cAAA,CAAe,CAAA,uBACb,IAAA,yBAGA,IAAA,SAAa,MAAA;EACT,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,IAAA;EAAM,EAAA;EAAa,IAAA;AAAA;;;;;;;;AA/CpC;;;;;;;;;;;;;;;;;;;;;;KAiFI,kBAAA,iCACV,CAAA,iDACI,gBAAA,CAAiB,KAAA,IAAS,kBAAA,CAAmB,IAAA;AA1CnD;;;;;;;AAAA,KAoDY,aAAA;;;;;;;;;KAUA,kBAAA,YACC,eAAA,iBACI,WAAA,eACF,SAAA,CAAU,QAAA;EAhEW;;;;EAsElC,EAAA;EAjEc;;;EAsEd,IAAA,EAAM,QAAA;EAtEoC;;;AAkC5C;EA0CE,MAAA,EAAQ,YAAA;EA1CoB;;;EA+C5B,SAAA,EAAW,UAAA;EA7CsC;;;EAkDjD,KAAA;EApD6B;;;;;;;EA6D7B,KAAA,EAAO,aAAA;AAAA"}
@@ -226,8 +226,10 @@ type ToolCallState = "pending" | "completed" | "error";
226
226
  * Useful for rendering tool invocations and their outputs together.
227
227
  *
228
228
  * @template ToolCall The type of the tool call.
229
+ * @template TToolMessage The type of the tool result message. Defaults to the SDK's plain ToolMessage interface.
230
+ * @template TAIMessage The type of the AI message. Defaults to the SDK's plain AIMessage interface.
229
231
  */
230
- type ToolCallWithResult<ToolCall = DefaultToolCall> = {
232
+ type ToolCallWithResult<ToolCall = DefaultToolCall, TToolMessage = ToolMessage, TAIMessage = AIMessage<ToolCall>> = {
231
233
  /**
232
234
  * Unique identifier for this tool call.
233
235
  * Uses the tool call's id if available, otherwise generates one from aiMessage.id and index.
@@ -241,11 +243,11 @@ type ToolCallWithResult<ToolCall = DefaultToolCall> = {
241
243
  * The result message from tool execution.
242
244
  * `undefined` if the tool is still being executed or no result was received.
243
245
  */
244
- result: ToolMessage | undefined;
246
+ result: TToolMessage | undefined;
245
247
  /**
246
248
  * The AI message that initiated this tool call.
247
249
  */
248
- aiMessage: AIMessage<ToolCall>;
250
+ aiMessage: TAIMessage;
249
251
  /**
250
252
  * Index of this tool call within the AI message's tool_calls array.
251
253
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.messages.d.ts","names":[],"sources":["../src/types.messages.ts"],"mappings":";KAAK,WAAA;AAAA,KACA,sBAAA;EACH,IAAA;EACA,SAAA;IAAsB,GAAA;IAAa,MAAA,GAAS,WAAA;EAAA;AAAA;AAAA,KAGzC,kBAAA;EAAuB,IAAA;EAAc,IAAA;AAAA;AAAA,KACrC,qBAAA,GAAwB,kBAAA,GAAqB,sBAAA;AAAA,KAC7C,cAAA,YAA0B,qBAAA;;;;KAK1B,uBAAA,GAA0B,MAAA;AAAA,KAE1B,WAAA;EACH,iBAAA,GAAoB,uBAAA;EACpB,OAAA,EAAS,cAAA;EACT,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;AAAA;AAAA,KAGV,YAAA,GAAe,WAAA;EACzB,IAAA;EACA,OAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EAEA,IAAA;IAAA,CAAS,CAAA;EAAA;EACT,EAAA;EACA,IAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;KAMU,aAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;IAEM,KAAA;IACA,UAAA;IACA,cAAA;EAAA;EAGN,oBAAA;IACM,KAAA;IAA4B,SAAA;EAAA;AAAA;;;;;;;;;AAvBpC;;;;;;;;;;;AAWA;;;;;;;;KA2CY,SAAA,YAAqB,eAAA,IAAmB,WAAA;EAClD,IAAA;EACA,OAAA;EACA,UAAA,GAAa,QAAA;EACb,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,aAAA;AAAA;AAAA,KAGP,WAAA,GAAc,WAAA;EACxB,IAAA;EACA,MAAA;EACA,YAAA;EAX+B;;;;;;;EAoB/B,QAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,WAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;;;AAxBF;;;KAgCY,OAAA,YAAmB,eAAA,IAC3B,YAAA,GACA,SAAA,CAAU,QAAA,IACV,WAAA,GACA,aAAA,GACA,eAAA,GACA,aAAA;;;;;;;;KAUC,gBAAA,MAAsB,CAAA;EAAY,IAAA;IAAQ,KAAA;EAAA;AAAA,IAC3C,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,IAAA;;;;AA5BJ;;KAoCK,cAAA,MAAoB,CAAA;EAEvB,KAAA,GAAQ,GAAA,iBAAoB,IAAA;AAAA,IAE1B,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,gBAAA,CAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AA3BH;KAsDN,gBAAA,MAAsB,CAAA;EAAY,IAAA;AAAA,IAC1C,cAAA,CAAe,CAAA,uBACb,IAAA,yBAGA,IAAA,SAAa,MAAA;EACT,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,IAAA;EAAM,EAAA;EAAa,IAAA;AAAA;;;;;;;;AA/CpC;;;;;;;;;;;;;;;;;;;;;;KAiFI,kBAAA,iCACV,CAAA,iDACI,gBAAA,CAAiB,KAAA,IAAS,kBAAA,CAAmB,IAAA;AA1CnD;;;;;;;AAAA,KAoDY,aAAA;;;;;;;KAQA,kBAAA,YAA8B,eAAA;EA3DtC;;;;EAgEF,EAAA;EA5DiB;;;EAiEjB,IAAA,EAAM,QAAA;EAhEiB;;;;EAsEvB,MAAA,EAAQ,WAAA;EApCE;;;EAyCV,SAAA,EAAW,SAAA,CAAU,QAAA;EAvCA;;;EA4CrB,KAAA;EA5CgD;;;;;;;EAqDhD,KAAA,EAAO,aAAA;AAAA"}
1
+ {"version":3,"file":"types.messages.d.ts","names":[],"sources":["../src/types.messages.ts"],"mappings":";KAAK,WAAA;AAAA,KACA,sBAAA;EACH,IAAA;EACA,SAAA;IAAsB,GAAA;IAAa,MAAA,GAAS,WAAA;EAAA;AAAA;AAAA,KAGzC,kBAAA;EAAuB,IAAA;EAAc,IAAA;AAAA;AAAA,KACrC,qBAAA,GAAwB,kBAAA,GAAqB,sBAAA;AAAA,KAC7C,cAAA,YAA0B,qBAAA;;;;KAK1B,uBAAA,GAA0B,MAAA;AAAA,KAE1B,WAAA;EACH,iBAAA,GAAoB,uBAAA;EACpB,OAAA,EAAS,cAAA;EACT,EAAA;EACA,IAAA;EACA,iBAAA,GAAoB,MAAA;AAAA;AAAA,KAGV,YAAA,GAAe,WAAA;EACzB,IAAA;EACA,OAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EAEA,IAAA;IAAA,CAAS,CAAA;EAAA;EACT,EAAA;EACA,IAAA;AAAA;;;;KAMU,eAAA;EACV,IAAA;EACA,IAAA;EACA,EAAA;EACA,KAAA;EACA,IAAA;AAAA;;;;KAMU,aAAA;EACV,YAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;IAEM,KAAA;IACA,UAAA;IACA,cAAA;EAAA;EAGN,oBAAA;IACM,KAAA;IAA4B,SAAA;EAAA;AAAA;;;;;;;;;AAvBpC;;;;;;;;;;;AAWA;;;;;;;;KA2CY,SAAA,YAAqB,eAAA,IAAmB,WAAA;EAClD,IAAA;EACA,OAAA;EACA,UAAA,GAAa,QAAA;EACb,kBAAA,GAAqB,eAAA;EACrB,cAAA,GAAiB,aAAA;AAAA;AAAA,KAGP,WAAA,GAAc,WAAA;EACxB,IAAA;EACA,MAAA;EACA,YAAA;EAX+B;;;;;;;EAoB/B,QAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,WAAA;EAC5B,IAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA;EAC1B,IAAA;AAAA;;;AAxBF;;;KAgCY,OAAA,YAAmB,eAAA,IAC3B,YAAA,GACA,SAAA,CAAU,QAAA,IACV,WAAA,GACA,aAAA,GACA,eAAA,GACA,aAAA;;;;;;;;KAUC,gBAAA,MAAsB,CAAA;EAAY,IAAA;IAAQ,KAAA;EAAA;AAAA,IAC3C,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,IAAA;;;;AA5BJ;;KAoCK,cAAA,MAAoB,CAAA;EAEvB,KAAA,GAAQ,GAAA,iBAAoB,IAAA;AAAA,IAE1B,IAAA,GACA,CAAA;EAAY,MAAA;AAAA,IACZ,gBAAA,CAAiB,CAAA;;;;;;;;;;;;;;;;;;;;;;;AA3BH;KAsDN,gBAAA,MAAsB,CAAA;EAAY,IAAA;AAAA,IAC1C,cAAA,CAAe,CAAA,uBACb,IAAA,yBAGA,IAAA,SAAa,MAAA;EACT,IAAA,EAAM,CAAA;EAAG,IAAA,EAAM,IAAA;EAAM,EAAA;EAAa,IAAA;AAAA;;;;;;;;AA/CpC;;;;;;;;;;;;;;;;;;;;;;KAiFI,kBAAA,iCACV,CAAA,iDACI,gBAAA,CAAiB,KAAA,IAAS,kBAAA,CAAmB,IAAA;AA1CnD;;;;;;;AAAA,KAoDY,aAAA;;;;;;;;;KAUA,kBAAA,YACC,eAAA,iBACI,WAAA,eACF,SAAA,CAAU,QAAA;EAhEW;;;;EAsElC,EAAA;EAjEc;;;EAsEd,IAAA,EAAM,QAAA;EAtEoC;;;AAkC5C;EA0CE,MAAA,EAAQ,YAAA;EA1CoB;;;EA+C5B,SAAA,EAAW,UAAA;EA7CsC;;;EAkDjD,KAAA;EApD6B;;;;;;;EA6D7B,KAAA,EAAO,aAAA;AAAA"}
@@ -1,3 +1,4 @@
1
+ const require_utils = require('./utils.cjs');
1
2
 
2
3
  //#region src/ui/branching.ts
3
4
  function getBranchSequence(history) {
@@ -147,7 +148,30 @@ function getBranchContext(branch, history) {
147
148
  threadHead: flatHistory.at(-1)
148
149
  };
149
150
  }
151
+ function getMessagesMetadataMap(options) {
152
+ const currentValues = options.branchContext.threadHead?.values ?? options.initialValues ?? {};
153
+ const alreadyShown = /* @__PURE__ */ new Set();
154
+ return options.getMessages(currentValues).map((message, idx) => {
155
+ const messageId = message.id ?? idx;
156
+ const firstSeenState = require_utils.findLast(options.history ?? [], (state) => options.getMessages(state.values).map((m, idx) => m.id ?? idx).includes(messageId));
157
+ const checkpointId = firstSeenState?.checkpoint?.checkpoint_id;
158
+ let branch = checkpointId != null ? options.branchContext.branchByCheckpoint[checkpointId] : void 0;
159
+ if (!branch?.branch?.length) branch = void 0;
160
+ const optionsShown = branch?.branchOptions?.flat(2).join(",");
161
+ if (optionsShown) {
162
+ if (alreadyShown.has(optionsShown)) branch = void 0;
163
+ alreadyShown.add(optionsShown);
164
+ }
165
+ return {
166
+ messageId: messageId.toString(),
167
+ firstSeenState,
168
+ branch: branch?.branch,
169
+ branchOptions: branch?.branchOptions
170
+ };
171
+ });
172
+ }
150
173
 
151
174
  //#endregion
152
175
  exports.getBranchContext = getBranchContext;
176
+ exports.getMessagesMetadataMap = getMessagesMetadataMap;
153
177
  //# sourceMappingURL=branching.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"branching.cjs","names":[],"sources":["../../src/ui/branching.ts"],"sourcesContent":["import type { ThreadState } from \"../schema.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Node<StateType = any> {\n type: \"node\";\n value: ThreadState<StateType>;\n path: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Fork<StateType = any> {\n type: \"fork\";\n items: Array<Sequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface Sequence<StateType = any> {\n type: \"sequence\";\n items: Array<Node<StateType> | Fork<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidFork<StateType = any> {\n type: \"fork\";\n items: Array<ValidSequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidSequence<StateType = any> {\n type: \"sequence\";\n items: [Node<StateType>, ...(Node<StateType> | ValidFork<StateType>)[]];\n}\n\nexport function getBranchSequence<StateType extends Record<string, unknown>>(\n history: ThreadState<StateType>[]\n) {\n const nodeIds = new Set<string>();\n const childrenMap: Record<string, ThreadState<StateType>[]> = {};\n\n // Short circuit if there's only a singular one state\n if (history.length <= 1) {\n return {\n rootSequence: {\n type: \"sequence\",\n items: history.map((value) => ({ type: \"node\", value, path: [] })),\n } satisfies Sequence<StateType>,\n paths: [],\n };\n }\n\n // First pass - collect nodes for each checkpoint\n history.forEach((state) => {\n const checkpointId = state.parent_checkpoint?.checkpoint_id ?? \"$\";\n childrenMap[checkpointId] ??= [];\n childrenMap[checkpointId].push(state);\n\n if (state.checkpoint?.checkpoint_id != null) {\n nodeIds.add(state.checkpoint.checkpoint_id);\n }\n });\n\n // If dealing with partial history, take the branch\n // with the latest checkpoint and mark it as the root.\n const maxId = (...ids: (string | null)[]) =>\n ids\n .filter((i): i is string => i != null)\n .sort((a, b) => a.localeCompare(b))\n .at(-1)!;\n\n const lastOrphanedNode =\n childrenMap.$ == null\n ? Object.keys(childrenMap)\n .filter((parentId) => !nodeIds.has(parentId))\n .map((parentId) => {\n const queue: string[] = [parentId];\n const seen = new Set<string>();\n\n let lastId = parentId;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (seen.has(current)) continue;\n seen.add(current);\n\n const children = (childrenMap[current] ?? []).flatMap(\n (i) => i.checkpoint?.checkpoint_id ?? []\n );\n\n lastId = maxId(lastId, ...children);\n queue.push(...children);\n }\n\n return { parentId, lastId };\n })\n .sort((a, b) => a.lastId.localeCompare(b.lastId))\n .at(-1)?.parentId\n : undefined;\n\n if (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];\n\n // Second pass - create a tree of sequences\n type Task = { id: string; sequence: Sequence; path: string[] };\n const rootSequence: Sequence = { type: \"sequence\", items: [] };\n const queue: Task[] = [{ id: \"$\", sequence: rootSequence, path: [] }];\n\n const paths: string[][] = [];\n\n const visited = new Set<string>();\n while (queue.length > 0) {\n const task = queue.shift()!;\n if (visited.has(task.id)) continue;\n visited.add(task.id);\n\n const children = childrenMap[task.id];\n if (children == null || children.length === 0) continue;\n\n // If we've encountered a fork (2+ children), push the fork\n // to the sequence and add a new sequence for each child\n let fork: Fork | undefined;\n if (children.length > 1) {\n fork = { type: \"fork\", items: [] };\n task.sequence.items.push(fork);\n }\n\n for (const value of children) {\n const id = value.checkpoint?.checkpoint_id;\n if (id == null) continue;\n\n let { sequence } = task;\n let { path } = task;\n if (fork != null) {\n sequence = { type: \"sequence\", items: [] };\n fork.items.unshift(sequence);\n\n path = path.slice();\n path.push(id);\n paths.push(path);\n }\n\n sequence.items.push({ type: \"node\", value, path });\n queue.push({ id, sequence, path });\n }\n }\n\n return { rootSequence, paths };\n}\n\nconst PATH_SEP = \">\";\nconst ROOT_ID = \"$\";\n\n// Get flat view\nexport function getBranchView<StateType extends Record<string, unknown>>(\n sequence: Sequence<StateType>,\n paths: string[][],\n branch: string\n) {\n const path = branch.split(PATH_SEP);\n const pathMap: Record<string, string[][]> = {};\n\n for (const path of paths) {\n const parent = path.at(-2) ?? ROOT_ID;\n pathMap[parent] ??= [];\n pathMap[parent].unshift(path);\n }\n\n const history: ThreadState<StateType>[] = [];\n const branchByCheckpoint: Record<\n string,\n { branch: string | undefined; branchOptions: string[] | undefined }\n > = {};\n\n const forkStack = path.slice();\n const queue: (Node<StateType> | Fork<StateType>)[] = [...sequence.items];\n\n while (queue.length > 0) {\n const item = queue.shift()!;\n\n if (item.type === \"node\") {\n history.push(item.value);\n const checkpointId = item.value.checkpoint?.checkpoint_id;\n if (checkpointId == null) continue;\n\n branchByCheckpoint[checkpointId] = {\n branch: item.path.join(PATH_SEP),\n branchOptions: (item.path.length > 0\n ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? []\n : []\n ).map((p) => p.join(PATH_SEP)),\n };\n }\n if (item.type === \"fork\") {\n const forkId = forkStack.shift();\n const index =\n forkId != null\n ? item.items.findIndex((value) => {\n const firstItem = value.items.at(0);\n if (!firstItem || firstItem.type !== \"node\") return false;\n return firstItem.value.checkpoint?.checkpoint_id === forkId;\n })\n : -1;\n\n const nextItems = item.items.at(index)?.items ?? [];\n queue.push(...nextItems);\n }\n }\n\n return { history, branchByCheckpoint };\n}\n\nexport function getBranchContext<StateType extends Record<string, unknown>>(\n branch: string,\n history: ThreadState<StateType>[] | undefined\n) {\n const { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);\n const { history: flatHistory, branchByCheckpoint } = getBranchView(\n branchTree,\n paths,\n branch\n );\n\n return {\n branchTree,\n flatHistory,\n branchByCheckpoint,\n threadHead: flatHistory.at(-1),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"branching.cjs","names":["findLast"],"sources":["../../src/ui/branching.ts"],"sourcesContent":["import type { ThreadState } from \"../schema.js\";\nimport { Message } from \"../types.messages.js\";\nimport { findLast } from \"./utils.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Node<StateType = any> {\n type: \"node\";\n value: ThreadState<StateType>;\n path: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Fork<StateType = any> {\n type: \"fork\";\n items: Array<Sequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface Sequence<StateType = any> {\n type: \"sequence\";\n items: Array<Node<StateType> | Fork<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidFork<StateType = any> {\n type: \"fork\";\n items: Array<ValidSequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidSequence<StateType = any> {\n type: \"sequence\";\n items: [Node<StateType>, ...(Node<StateType> | ValidFork<StateType>)[]];\n}\n\nexport function getBranchSequence<StateType extends Record<string, unknown>>(\n history: ThreadState<StateType>[]\n) {\n const nodeIds = new Set<string>();\n const childrenMap: Record<string, ThreadState<StateType>[]> = {};\n\n // Short circuit if there's only a singular one state\n if (history.length <= 1) {\n return {\n rootSequence: {\n type: \"sequence\",\n items: history.map((value) => ({ type: \"node\", value, path: [] })),\n } satisfies Sequence<StateType>,\n paths: [],\n };\n }\n\n // First pass - collect nodes for each checkpoint\n history.forEach((state) => {\n const checkpointId = state.parent_checkpoint?.checkpoint_id ?? \"$\";\n childrenMap[checkpointId] ??= [];\n childrenMap[checkpointId].push(state);\n\n if (state.checkpoint?.checkpoint_id != null) {\n nodeIds.add(state.checkpoint.checkpoint_id);\n }\n });\n\n // If dealing with partial history, take the branch\n // with the latest checkpoint and mark it as the root.\n const maxId = (...ids: (string | null)[]) =>\n ids\n .filter((i): i is string => i != null)\n .sort((a, b) => a.localeCompare(b))\n .at(-1)!;\n\n const lastOrphanedNode =\n childrenMap.$ == null\n ? Object.keys(childrenMap)\n .filter((parentId) => !nodeIds.has(parentId))\n .map((parentId) => {\n const queue: string[] = [parentId];\n const seen = new Set<string>();\n\n let lastId = parentId;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (seen.has(current)) continue;\n seen.add(current);\n\n const children = (childrenMap[current] ?? []).flatMap(\n (i) => i.checkpoint?.checkpoint_id ?? []\n );\n\n lastId = maxId(lastId, ...children);\n queue.push(...children);\n }\n\n return { parentId, lastId };\n })\n .sort((a, b) => a.lastId.localeCompare(b.lastId))\n .at(-1)?.parentId\n : undefined;\n\n if (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];\n\n // Second pass - create a tree of sequences\n type Task = { id: string; sequence: Sequence; path: string[] };\n const rootSequence: Sequence = { type: \"sequence\", items: [] };\n const queue: Task[] = [{ id: \"$\", sequence: rootSequence, path: [] }];\n\n const paths: string[][] = [];\n\n const visited = new Set<string>();\n while (queue.length > 0) {\n const task = queue.shift()!;\n if (visited.has(task.id)) continue;\n visited.add(task.id);\n\n const children = childrenMap[task.id];\n if (children == null || children.length === 0) continue;\n\n // If we've encountered a fork (2+ children), push the fork\n // to the sequence and add a new sequence for each child\n let fork: Fork | undefined;\n if (children.length > 1) {\n fork = { type: \"fork\", items: [] };\n task.sequence.items.push(fork);\n }\n\n for (const value of children) {\n const id = value.checkpoint?.checkpoint_id;\n if (id == null) continue;\n\n let { sequence } = task;\n let { path } = task;\n if (fork != null) {\n sequence = { type: \"sequence\", items: [] };\n fork.items.unshift(sequence);\n\n path = path.slice();\n path.push(id);\n paths.push(path);\n }\n\n sequence.items.push({ type: \"node\", value, path });\n queue.push({ id, sequence, path });\n }\n }\n\n return { rootSequence, paths };\n}\n\nconst PATH_SEP = \">\";\nconst ROOT_ID = \"$\";\n\ntype BranchByCheckpoint = Record<\n string,\n { branch: string | undefined; branchOptions: string[] | undefined }\n>;\n\n// Get flat view\nexport function getBranchView<StateType extends Record<string, unknown>>(\n sequence: Sequence<StateType>,\n paths: string[][],\n branch: string\n) {\n const path = branch.split(PATH_SEP);\n const pathMap: Record<string, string[][]> = {};\n\n for (const path of paths) {\n const parent = path.at(-2) ?? ROOT_ID;\n pathMap[parent] ??= [];\n pathMap[parent].unshift(path);\n }\n\n const history: ThreadState<StateType>[] = [];\n const branchByCheckpoint: BranchByCheckpoint = {};\n\n const forkStack = path.slice();\n const queue: (Node<StateType> | Fork<StateType>)[] = [...sequence.items];\n\n while (queue.length > 0) {\n const item = queue.shift()!;\n\n if (item.type === \"node\") {\n history.push(item.value);\n const checkpointId = item.value.checkpoint?.checkpoint_id;\n if (checkpointId == null) continue;\n\n branchByCheckpoint[checkpointId] = {\n branch: item.path.join(PATH_SEP),\n branchOptions: (item.path.length > 0\n ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? []\n : []\n ).map((p) => p.join(PATH_SEP)),\n };\n }\n if (item.type === \"fork\") {\n const forkId = forkStack.shift();\n const index =\n forkId != null\n ? item.items.findIndex((value) => {\n const firstItem = value.items.at(0);\n if (!firstItem || firstItem.type !== \"node\") return false;\n return firstItem.value.checkpoint?.checkpoint_id === forkId;\n })\n : -1;\n\n const nextItems = item.items.at(index)?.items ?? [];\n queue.push(...nextItems);\n }\n }\n\n return { history, branchByCheckpoint };\n}\n\nexport function getBranchContext<StateType extends Record<string, unknown>>(\n branch: string,\n history: ThreadState<StateType>[] | undefined\n) {\n const { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);\n const { history: flatHistory, branchByCheckpoint } = getBranchView(\n branchTree,\n paths,\n branch\n );\n\n return {\n branchTree,\n flatHistory,\n branchByCheckpoint,\n threadHead: flatHistory.at(-1),\n };\n}\n\nexport function getMessagesMetadataMap<\n StateType extends Record<string, unknown>\n>(options: {\n initialValues: StateType | null | undefined;\n history: ThreadState<StateType>[] | null | undefined;\n getMessages: (values: StateType) => Message[];\n\n branchContext: {\n threadHead: ThreadState<StateType> | undefined;\n branchByCheckpoint: BranchByCheckpoint;\n };\n}) {\n const currentValues =\n options.branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType);\n\n const alreadyShown = new Set<string>();\n return options.getMessages(currentValues).map((message, idx) => {\n const messageId = message.id ?? idx;\n\n // Find the first checkpoint where the message was seen\n const firstSeenState = findLast(options.history ?? [], (state) =>\n options\n .getMessages(state.values)\n .map((m, idx) => m.id ?? idx)\n .includes(messageId)\n );\n\n const checkpointId = firstSeenState?.checkpoint?.checkpoint_id;\n let branch =\n checkpointId != null\n ? options.branchContext.branchByCheckpoint[checkpointId]\n : undefined;\n if (!branch?.branch?.length) branch = undefined;\n\n // serialize branches\n const optionsShown = branch?.branchOptions?.flat(2).join(\",\");\n if (optionsShown) {\n if (alreadyShown.has(optionsShown)) branch = undefined;\n alreadyShown.add(optionsShown);\n }\n\n return {\n messageId: messageId.toString(),\n firstSeenState,\n\n branch: branch?.branch,\n branchOptions: branch?.branchOptions,\n };\n });\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { ThreadState } from "../schema.cjs";
2
+ import { Message } from "../types.messages.cjs";
2
3
 
3
4
  //#region src/ui/branching.d.ts
4
5
  interface Node<StateType = any> {
@@ -14,6 +15,30 @@ interface Sequence<StateType = any> {
14
15
  type: "sequence";
15
16
  items: Array<Node<StateType> | Fork<StateType>>;
16
17
  }
18
+ type BranchByCheckpoint = Record<string, {
19
+ branch: string | undefined;
20
+ branchOptions: string[] | undefined;
21
+ }>;
22
+ declare function getBranchContext<StateType extends Record<string, unknown>>(branch: string, history: ThreadState<StateType>[] | undefined): {
23
+ branchTree: Sequence<any>;
24
+ flatHistory: ThreadState<any>[];
25
+ branchByCheckpoint: BranchByCheckpoint;
26
+ threadHead: ThreadState<any> | undefined;
27
+ };
28
+ declare function getMessagesMetadataMap<StateType extends Record<string, unknown>>(options: {
29
+ initialValues: StateType | null | undefined;
30
+ history: ThreadState<StateType>[] | null | undefined;
31
+ getMessages: (values: StateType) => Message[];
32
+ branchContext: {
33
+ threadHead: ThreadState<StateType> | undefined;
34
+ branchByCheckpoint: BranchByCheckpoint;
35
+ };
36
+ }): {
37
+ messageId: string;
38
+ firstSeenState: ThreadState<StateType> | undefined;
39
+ branch: string | undefined;
40
+ branchOptions: string[] | undefined;
41
+ }[];
17
42
  //#endregion
18
- export { Sequence };
43
+ export { Sequence, getBranchContext, getMessagesMetadataMap };
19
44
  //# sourceMappingURL=branching.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branching.d.cts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;UAGU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA"}
1
+ {"version":3,"file":"branching.d.cts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;;UAKU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA;AAAA,KAqIjC,kBAAA,GAAqB,MAAA;EAEtB,MAAA;EAA4B,aAAA;AAAA;AAAA,iBA2DhB,gBAAA,mBAAmC,MAAA,kBAAA,CACjD,MAAA,UACA,OAAA,EAAS,WAAA,CAAY,SAAA;;;;;;iBAiBP,sBAAA,mBACI,MAAA,kBAAA,CAClB,OAAA;EACA,aAAA,EAAe,SAAA;EACf,OAAA,EAAS,WAAA,CAAY,SAAA;EACrB,WAAA,GAAc,MAAA,EAAQ,SAAA,KAAc,OAAA;EAEpC,aAAA;IACE,UAAA,EAAY,WAAA,CAAY,SAAA;IACxB,kBAAA,EAAoB,kBAAA;EAAA;AAAA"}
@@ -1,4 +1,5 @@
1
1
  import { ThreadState } from "../schema.js";
2
+ import { Message } from "../types.messages.js";
2
3
 
3
4
  //#region src/ui/branching.d.ts
4
5
  interface Node<StateType = any> {
@@ -14,6 +15,30 @@ interface Sequence<StateType = any> {
14
15
  type: "sequence";
15
16
  items: Array<Node<StateType> | Fork<StateType>>;
16
17
  }
18
+ type BranchByCheckpoint = Record<string, {
19
+ branch: string | undefined;
20
+ branchOptions: string[] | undefined;
21
+ }>;
22
+ declare function getBranchContext<StateType extends Record<string, unknown>>(branch: string, history: ThreadState<StateType>[] | undefined): {
23
+ branchTree: Sequence<any>;
24
+ flatHistory: ThreadState<any>[];
25
+ branchByCheckpoint: BranchByCheckpoint;
26
+ threadHead: ThreadState<any> | undefined;
27
+ };
28
+ declare function getMessagesMetadataMap<StateType extends Record<string, unknown>>(options: {
29
+ initialValues: StateType | null | undefined;
30
+ history: ThreadState<StateType>[] | null | undefined;
31
+ getMessages: (values: StateType) => Message[];
32
+ branchContext: {
33
+ threadHead: ThreadState<StateType> | undefined;
34
+ branchByCheckpoint: BranchByCheckpoint;
35
+ };
36
+ }): {
37
+ messageId: string;
38
+ firstSeenState: ThreadState<StateType> | undefined;
39
+ branch: string | undefined;
40
+ branchOptions: string[] | undefined;
41
+ }[];
17
42
  //#endregion
18
- export { Sequence };
43
+ export { Sequence, getBranchContext, getMessagesMetadataMap };
19
44
  //# sourceMappingURL=branching.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"branching.d.ts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;UAGU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA"}
1
+ {"version":3,"file":"branching.d.ts","names":[],"sources":["../../src/ui/branching.ts"],"mappings":";;;;UAKU,IAAA;EACR,IAAA;EACA,KAAA,EAAO,WAAA,CAAY,SAAA;EACnB,IAAA;AAAA;AAAA,UAIQ,IAAA;EACR,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,QAAA,CAAS,SAAA;AAAA;AAAA,UAIP,QAAA;EACf,IAAA;EACA,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA;AAAA;AAAA,KAqIjC,kBAAA,GAAqB,MAAA;EAEtB,MAAA;EAA4B,aAAA;AAAA;AAAA,iBA2DhB,gBAAA,mBAAmC,MAAA,kBAAA,CACjD,MAAA,UACA,OAAA,EAAS,WAAA,CAAY,SAAA;;;;;;iBAiBP,sBAAA,mBACI,MAAA,kBAAA,CAClB,OAAA;EACA,aAAA,EAAe,SAAA;EACf,OAAA,EAAS,WAAA,CAAY,SAAA;EACrB,WAAA,GAAc,MAAA,EAAQ,SAAA,KAAc,OAAA;EAEpC,aAAA;IACE,UAAA,EAAY,WAAA,CAAY,SAAA;IACxB,kBAAA,EAAoB,kBAAA;EAAA;AAAA"}
@@ -1,3 +1,5 @@
1
+ import { findLast } from "./utils.js";
2
+
1
3
  //#region src/ui/branching.ts
2
4
  function getBranchSequence(history) {
3
5
  const nodeIds = /* @__PURE__ */ new Set();
@@ -146,7 +148,29 @@ function getBranchContext(branch, history) {
146
148
  threadHead: flatHistory.at(-1)
147
149
  };
148
150
  }
151
+ function getMessagesMetadataMap(options) {
152
+ const currentValues = options.branchContext.threadHead?.values ?? options.initialValues ?? {};
153
+ const alreadyShown = /* @__PURE__ */ new Set();
154
+ return options.getMessages(currentValues).map((message, idx) => {
155
+ const messageId = message.id ?? idx;
156
+ const firstSeenState = findLast(options.history ?? [], (state) => options.getMessages(state.values).map((m, idx) => m.id ?? idx).includes(messageId));
157
+ const checkpointId = firstSeenState?.checkpoint?.checkpoint_id;
158
+ let branch = checkpointId != null ? options.branchContext.branchByCheckpoint[checkpointId] : void 0;
159
+ if (!branch?.branch?.length) branch = void 0;
160
+ const optionsShown = branch?.branchOptions?.flat(2).join(",");
161
+ if (optionsShown) {
162
+ if (alreadyShown.has(optionsShown)) branch = void 0;
163
+ alreadyShown.add(optionsShown);
164
+ }
165
+ return {
166
+ messageId: messageId.toString(),
167
+ firstSeenState,
168
+ branch: branch?.branch,
169
+ branchOptions: branch?.branchOptions
170
+ };
171
+ });
172
+ }
149
173
 
150
174
  //#endregion
151
- export { getBranchContext };
175
+ export { getBranchContext, getMessagesMetadataMap };
152
176
  //# sourceMappingURL=branching.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"branching.js","names":[],"sources":["../../src/ui/branching.ts"],"sourcesContent":["import type { ThreadState } from \"../schema.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Node<StateType = any> {\n type: \"node\";\n value: ThreadState<StateType>;\n path: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Fork<StateType = any> {\n type: \"fork\";\n items: Array<Sequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface Sequence<StateType = any> {\n type: \"sequence\";\n items: Array<Node<StateType> | Fork<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidFork<StateType = any> {\n type: \"fork\";\n items: Array<ValidSequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidSequence<StateType = any> {\n type: \"sequence\";\n items: [Node<StateType>, ...(Node<StateType> | ValidFork<StateType>)[]];\n}\n\nexport function getBranchSequence<StateType extends Record<string, unknown>>(\n history: ThreadState<StateType>[]\n) {\n const nodeIds = new Set<string>();\n const childrenMap: Record<string, ThreadState<StateType>[]> = {};\n\n // Short circuit if there's only a singular one state\n if (history.length <= 1) {\n return {\n rootSequence: {\n type: \"sequence\",\n items: history.map((value) => ({ type: \"node\", value, path: [] })),\n } satisfies Sequence<StateType>,\n paths: [],\n };\n }\n\n // First pass - collect nodes for each checkpoint\n history.forEach((state) => {\n const checkpointId = state.parent_checkpoint?.checkpoint_id ?? \"$\";\n childrenMap[checkpointId] ??= [];\n childrenMap[checkpointId].push(state);\n\n if (state.checkpoint?.checkpoint_id != null) {\n nodeIds.add(state.checkpoint.checkpoint_id);\n }\n });\n\n // If dealing with partial history, take the branch\n // with the latest checkpoint and mark it as the root.\n const maxId = (...ids: (string | null)[]) =>\n ids\n .filter((i): i is string => i != null)\n .sort((a, b) => a.localeCompare(b))\n .at(-1)!;\n\n const lastOrphanedNode =\n childrenMap.$ == null\n ? Object.keys(childrenMap)\n .filter((parentId) => !nodeIds.has(parentId))\n .map((parentId) => {\n const queue: string[] = [parentId];\n const seen = new Set<string>();\n\n let lastId = parentId;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (seen.has(current)) continue;\n seen.add(current);\n\n const children = (childrenMap[current] ?? []).flatMap(\n (i) => i.checkpoint?.checkpoint_id ?? []\n );\n\n lastId = maxId(lastId, ...children);\n queue.push(...children);\n }\n\n return { parentId, lastId };\n })\n .sort((a, b) => a.lastId.localeCompare(b.lastId))\n .at(-1)?.parentId\n : undefined;\n\n if (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];\n\n // Second pass - create a tree of sequences\n type Task = { id: string; sequence: Sequence; path: string[] };\n const rootSequence: Sequence = { type: \"sequence\", items: [] };\n const queue: Task[] = [{ id: \"$\", sequence: rootSequence, path: [] }];\n\n const paths: string[][] = [];\n\n const visited = new Set<string>();\n while (queue.length > 0) {\n const task = queue.shift()!;\n if (visited.has(task.id)) continue;\n visited.add(task.id);\n\n const children = childrenMap[task.id];\n if (children == null || children.length === 0) continue;\n\n // If we've encountered a fork (2+ children), push the fork\n // to the sequence and add a new sequence for each child\n let fork: Fork | undefined;\n if (children.length > 1) {\n fork = { type: \"fork\", items: [] };\n task.sequence.items.push(fork);\n }\n\n for (const value of children) {\n const id = value.checkpoint?.checkpoint_id;\n if (id == null) continue;\n\n let { sequence } = task;\n let { path } = task;\n if (fork != null) {\n sequence = { type: \"sequence\", items: [] };\n fork.items.unshift(sequence);\n\n path = path.slice();\n path.push(id);\n paths.push(path);\n }\n\n sequence.items.push({ type: \"node\", value, path });\n queue.push({ id, sequence, path });\n }\n }\n\n return { rootSequence, paths };\n}\n\nconst PATH_SEP = \">\";\nconst ROOT_ID = \"$\";\n\n// Get flat view\nexport function getBranchView<StateType extends Record<string, unknown>>(\n sequence: Sequence<StateType>,\n paths: string[][],\n branch: string\n) {\n const path = branch.split(PATH_SEP);\n const pathMap: Record<string, string[][]> = {};\n\n for (const path of paths) {\n const parent = path.at(-2) ?? ROOT_ID;\n pathMap[parent] ??= [];\n pathMap[parent].unshift(path);\n }\n\n const history: ThreadState<StateType>[] = [];\n const branchByCheckpoint: Record<\n string,\n { branch: string | undefined; branchOptions: string[] | undefined }\n > = {};\n\n const forkStack = path.slice();\n const queue: (Node<StateType> | Fork<StateType>)[] = [...sequence.items];\n\n while (queue.length > 0) {\n const item = queue.shift()!;\n\n if (item.type === \"node\") {\n history.push(item.value);\n const checkpointId = item.value.checkpoint?.checkpoint_id;\n if (checkpointId == null) continue;\n\n branchByCheckpoint[checkpointId] = {\n branch: item.path.join(PATH_SEP),\n branchOptions: (item.path.length > 0\n ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? []\n : []\n ).map((p) => p.join(PATH_SEP)),\n };\n }\n if (item.type === \"fork\") {\n const forkId = forkStack.shift();\n const index =\n forkId != null\n ? item.items.findIndex((value) => {\n const firstItem = value.items.at(0);\n if (!firstItem || firstItem.type !== \"node\") return false;\n return firstItem.value.checkpoint?.checkpoint_id === forkId;\n })\n : -1;\n\n const nextItems = item.items.at(index)?.items ?? [];\n queue.push(...nextItems);\n }\n }\n\n return { history, branchByCheckpoint };\n}\n\nexport function getBranchContext<StateType extends Record<string, unknown>>(\n branch: string,\n history: ThreadState<StateType>[] | undefined\n) {\n const { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);\n const { history: flatHistory, branchByCheckpoint } = getBranchView(\n branchTree,\n paths,\n branch\n );\n\n return {\n branchTree,\n flatHistory,\n branchByCheckpoint,\n threadHead: flatHistory.at(-1),\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"branching.js","names":[],"sources":["../../src/ui/branching.ts"],"sourcesContent":["import type { ThreadState } from \"../schema.js\";\nimport { Message } from \"../types.messages.js\";\nimport { findLast } from \"./utils.js\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Node<StateType = any> {\n type: \"node\";\n value: ThreadState<StateType>;\n path: string[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface Fork<StateType = any> {\n type: \"fork\";\n items: Array<Sequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface Sequence<StateType = any> {\n type: \"sequence\";\n items: Array<Node<StateType> | Fork<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidFork<StateType = any> {\n type: \"fork\";\n items: Array<ValidSequence<StateType>>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface ValidSequence<StateType = any> {\n type: \"sequence\";\n items: [Node<StateType>, ...(Node<StateType> | ValidFork<StateType>)[]];\n}\n\nexport function getBranchSequence<StateType extends Record<string, unknown>>(\n history: ThreadState<StateType>[]\n) {\n const nodeIds = new Set<string>();\n const childrenMap: Record<string, ThreadState<StateType>[]> = {};\n\n // Short circuit if there's only a singular one state\n if (history.length <= 1) {\n return {\n rootSequence: {\n type: \"sequence\",\n items: history.map((value) => ({ type: \"node\", value, path: [] })),\n } satisfies Sequence<StateType>,\n paths: [],\n };\n }\n\n // First pass - collect nodes for each checkpoint\n history.forEach((state) => {\n const checkpointId = state.parent_checkpoint?.checkpoint_id ?? \"$\";\n childrenMap[checkpointId] ??= [];\n childrenMap[checkpointId].push(state);\n\n if (state.checkpoint?.checkpoint_id != null) {\n nodeIds.add(state.checkpoint.checkpoint_id);\n }\n });\n\n // If dealing with partial history, take the branch\n // with the latest checkpoint and mark it as the root.\n const maxId = (...ids: (string | null)[]) =>\n ids\n .filter((i): i is string => i != null)\n .sort((a, b) => a.localeCompare(b))\n .at(-1)!;\n\n const lastOrphanedNode =\n childrenMap.$ == null\n ? Object.keys(childrenMap)\n .filter((parentId) => !nodeIds.has(parentId))\n .map((parentId) => {\n const queue: string[] = [parentId];\n const seen = new Set<string>();\n\n let lastId = parentId;\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n\n if (seen.has(current)) continue;\n seen.add(current);\n\n const children = (childrenMap[current] ?? []).flatMap(\n (i) => i.checkpoint?.checkpoint_id ?? []\n );\n\n lastId = maxId(lastId, ...children);\n queue.push(...children);\n }\n\n return { parentId, lastId };\n })\n .sort((a, b) => a.lastId.localeCompare(b.lastId))\n .at(-1)?.parentId\n : undefined;\n\n if (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];\n\n // Second pass - create a tree of sequences\n type Task = { id: string; sequence: Sequence; path: string[] };\n const rootSequence: Sequence = { type: \"sequence\", items: [] };\n const queue: Task[] = [{ id: \"$\", sequence: rootSequence, path: [] }];\n\n const paths: string[][] = [];\n\n const visited = new Set<string>();\n while (queue.length > 0) {\n const task = queue.shift()!;\n if (visited.has(task.id)) continue;\n visited.add(task.id);\n\n const children = childrenMap[task.id];\n if (children == null || children.length === 0) continue;\n\n // If we've encountered a fork (2+ children), push the fork\n // to the sequence and add a new sequence for each child\n let fork: Fork | undefined;\n if (children.length > 1) {\n fork = { type: \"fork\", items: [] };\n task.sequence.items.push(fork);\n }\n\n for (const value of children) {\n const id = value.checkpoint?.checkpoint_id;\n if (id == null) continue;\n\n let { sequence } = task;\n let { path } = task;\n if (fork != null) {\n sequence = { type: \"sequence\", items: [] };\n fork.items.unshift(sequence);\n\n path = path.slice();\n path.push(id);\n paths.push(path);\n }\n\n sequence.items.push({ type: \"node\", value, path });\n queue.push({ id, sequence, path });\n }\n }\n\n return { rootSequence, paths };\n}\n\nconst PATH_SEP = \">\";\nconst ROOT_ID = \"$\";\n\ntype BranchByCheckpoint = Record<\n string,\n { branch: string | undefined; branchOptions: string[] | undefined }\n>;\n\n// Get flat view\nexport function getBranchView<StateType extends Record<string, unknown>>(\n sequence: Sequence<StateType>,\n paths: string[][],\n branch: string\n) {\n const path = branch.split(PATH_SEP);\n const pathMap: Record<string, string[][]> = {};\n\n for (const path of paths) {\n const parent = path.at(-2) ?? ROOT_ID;\n pathMap[parent] ??= [];\n pathMap[parent].unshift(path);\n }\n\n const history: ThreadState<StateType>[] = [];\n const branchByCheckpoint: BranchByCheckpoint = {};\n\n const forkStack = path.slice();\n const queue: (Node<StateType> | Fork<StateType>)[] = [...sequence.items];\n\n while (queue.length > 0) {\n const item = queue.shift()!;\n\n if (item.type === \"node\") {\n history.push(item.value);\n const checkpointId = item.value.checkpoint?.checkpoint_id;\n if (checkpointId == null) continue;\n\n branchByCheckpoint[checkpointId] = {\n branch: item.path.join(PATH_SEP),\n branchOptions: (item.path.length > 0\n ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? []\n : []\n ).map((p) => p.join(PATH_SEP)),\n };\n }\n if (item.type === \"fork\") {\n const forkId = forkStack.shift();\n const index =\n forkId != null\n ? item.items.findIndex((value) => {\n const firstItem = value.items.at(0);\n if (!firstItem || firstItem.type !== \"node\") return false;\n return firstItem.value.checkpoint?.checkpoint_id === forkId;\n })\n : -1;\n\n const nextItems = item.items.at(index)?.items ?? [];\n queue.push(...nextItems);\n }\n }\n\n return { history, branchByCheckpoint };\n}\n\nexport function getBranchContext<StateType extends Record<string, unknown>>(\n branch: string,\n history: ThreadState<StateType>[] | undefined\n) {\n const { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);\n const { history: flatHistory, branchByCheckpoint } = getBranchView(\n branchTree,\n paths,\n branch\n );\n\n return {\n branchTree,\n flatHistory,\n branchByCheckpoint,\n threadHead: flatHistory.at(-1),\n };\n}\n\nexport function getMessagesMetadataMap<\n StateType extends Record<string, unknown>\n>(options: {\n initialValues: StateType | null | undefined;\n history: ThreadState<StateType>[] | null | undefined;\n getMessages: (values: StateType) => Message[];\n\n branchContext: {\n threadHead: ThreadState<StateType> | undefined;\n branchByCheckpoint: BranchByCheckpoint;\n };\n}) {\n const currentValues =\n options.branchContext.threadHead?.values ??\n options.initialValues ??\n ({} as StateType);\n\n const alreadyShown = new Set<string>();\n return options.getMessages(currentValues).map((message, idx) => {\n const messageId = message.id ?? idx;\n\n // Find the first checkpoint where the message was seen\n const firstSeenState = findLast(options.history ?? [], (state) =>\n options\n .getMessages(state.values)\n .map((m, idx) => m.id ?? idx)\n .includes(messageId)\n );\n\n const checkpointId = firstSeenState?.checkpoint?.checkpoint_id;\n let branch =\n checkpointId != null\n ? options.branchContext.branchByCheckpoint[checkpointId]\n : undefined;\n if (!branch?.branch?.length) branch = undefined;\n\n // serialize branches\n const optionsShown = branch?.branchOptions?.flat(2).join(\",\");\n if (optionsShown) {\n if (alreadyShown.has(optionsShown)) branch = undefined;\n alreadyShown.add(optionsShown);\n }\n\n return {\n messageId: messageId.toString(),\n firstSeenState,\n\n branch: branch?.branch,\n branchOptions: branch?.branchOptions,\n };\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+ const require_errors = require('./errors.cjs');
3
+ const require_messages = require('./messages.cjs');
4
+ const require_subagents = require('./subagents.cjs');
5
+ const require_manager = require('./manager.cjs');
6
+ const require_utils = require('./utils.cjs');
7
+ const require_branching = require('./branching.cjs');
8
+ const require_interrupts = require('./interrupts.cjs');
9
+ const require_transport = require('./transport.cjs');
10
+ const require_queue = require('./queue.cjs');
11
+
12
+ exports.FetchStreamTransport = require_transport.FetchStreamTransport;
13
+ exports.MessageTupleManager = require_messages.MessageTupleManager;
14
+ exports.PendingRunsTracker = require_queue.PendingRunsTracker;
15
+ exports.StreamError = require_errors.StreamError;
16
+ exports.StreamManager = require_manager.StreamManager;
17
+ exports.SubagentManager = require_subagents.SubagentManager;
18
+ exports.calculateDepthFromNamespace = require_subagents.calculateDepthFromNamespace;
19
+ exports.ensureMessageInstances = require_messages.ensureMessageInstances;
20
+ exports.extractInterrupts = require_interrupts.extractInterrupts;
21
+ exports.extractParentIdFromNamespace = require_subagents.extractParentIdFromNamespace;
22
+ exports.extractToolCallIdFromNamespace = require_subagents.extractToolCallIdFromNamespace;
23
+ exports.filterStream = require_utils.filterStream;
24
+ exports.findLast = require_utils.findLast;
25
+ exports.getBranchContext = require_branching.getBranchContext;
26
+ exports.getMessagesMetadataMap = require_branching.getMessagesMetadataMap;
27
+ exports.isSubagentNamespace = require_subagents.isSubagentNamespace;
28
+ exports.toMessageClass = require_messages.toMessageClass;
29
+ exports.toMessageDict = require_messages.toMessageDict;
30
+ exports.unique = require_utils.unique;
@@ -0,0 +1,15 @@
1
+ import { AcceptBaseMessages, AgentMiddlewareLike, AgentTypeConfigLike, AnyStreamCustomOptions, AnyStreamOptions, BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, ExtractToolCallsFromState, GetConfigurableType, GetCustomEventType, GetInterruptType, GetToolCallsType, GetUpdateType, InferAgentState, InferAgentToolCalls, InferDeepAgentSubagents, InferMiddlewareStatesFromArray, InferSubagentByName, InferSubagentNames, InferSubagentState, IsAgentLike, IsDeepAgentLike, MessageMetadata, RunCallbackMeta, StreamBase, SubAgentLike, SubagentApi, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, SubmitOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport, UseStreamTransportPayload } from "./types.cjs";
2
+ import { Sequence, getBranchContext, getMessagesMetadataMap } from "./branching.cjs";
3
+ import { PendingRunsTracker, QueueEntry, QueueInterface } from "./queue.cjs";
4
+ import { BaseStream } from "./stream/base.cjs";
5
+ import { UseAgentStream, UseAgentStreamOptions } from "./stream/agent.cjs";
6
+ import { UseDeepAgentStream, UseDeepAgentStreamOptions } from "./stream/deep-agent.cjs";
7
+ import { InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, ResolveStreamInterface, ResolveStreamOptions } from "./stream/index.cjs";
8
+ import { StreamError } from "./errors.cjs";
9
+ import { MessageTupleManager, ensureMessageInstances, toMessageClass, toMessageDict } from "./messages.cjs";
10
+ import { EventStreamEvent, StreamManager } from "./manager.cjs";
11
+ import { extractInterrupts } from "./interrupts.cjs";
12
+ import { FetchStreamTransport } from "./transport.cjs";
13
+ import { filterStream, findLast, unique } from "./utils.cjs";
14
+ import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "./subagents.cjs";
15
+ export { AcceptBaseMessages, AgentMiddlewareLike, AgentTypeConfigLike, AnyStreamCustomOptions, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, type EventStreamEvent, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, ExtractToolCallsFromState, FetchStreamTransport, GetConfigurableType, GetCustomEventType, GetInterruptType, GetToolCallsType, GetUpdateType, InferAgentState, InferAgentToolCalls, InferBag, InferDeepAgentSubagents, InferMiddlewareStatesFromArray, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageTupleManager, PendingRunsTracker, type QueueEntry, type QueueInterface, ResolveStreamInterface, ResolveStreamOptions, RunCallbackMeta, type Sequence, StreamBase, StreamError, StreamManager, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport, UseStreamTransportPayload, calculateDepthFromNamespace, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, findLast, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass, toMessageDict, unique };
@@ -0,0 +1,15 @@
1
+ import { AcceptBaseMessages, AgentMiddlewareLike, AgentTypeConfigLike, AnyStreamCustomOptions, AnyStreamOptions, BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, ExtractToolCallsFromState, GetConfigurableType, GetCustomEventType, GetInterruptType, GetToolCallsType, GetUpdateType, InferAgentState, InferAgentToolCalls, InferDeepAgentSubagents, InferMiddlewareStatesFromArray, InferSubagentByName, InferSubagentNames, InferSubagentState, IsAgentLike, IsDeepAgentLike, MessageMetadata, RunCallbackMeta, StreamBase, SubAgentLike, SubagentApi, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, SubmitOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport, UseStreamTransportPayload } from "./types.js";
2
+ import { Sequence, getBranchContext, getMessagesMetadataMap } from "./branching.js";
3
+ import { PendingRunsTracker, QueueEntry, QueueInterface } from "./queue.js";
4
+ import { BaseStream } from "./stream/base.js";
5
+ import { UseAgentStream, UseAgentStreamOptions } from "./stream/agent.js";
6
+ import { UseDeepAgentStream, UseDeepAgentStreamOptions } from "./stream/deep-agent.js";
7
+ import { InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, ResolveStreamInterface, ResolveStreamOptions } from "./stream/index.js";
8
+ import { StreamError } from "./errors.js";
9
+ import { MessageTupleManager, ensureMessageInstances, toMessageClass, toMessageDict } from "./messages.js";
10
+ import { EventStreamEvent, StreamManager } from "./manager.js";
11
+ import { extractInterrupts } from "./interrupts.js";
12
+ import { FetchStreamTransport } from "./transport.js";
13
+ import { filterStream, findLast, unique } from "./utils.js";
14
+ import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "./subagents.js";
15
+ export { AcceptBaseMessages, AgentMiddlewareLike, AgentTypeConfigLike, AnyStreamCustomOptions, AnyStreamOptions, BaseStream, BaseSubagentState, CompiledSubAgentLike, CustomSubmitOptions, DeepAgentTypeConfigLike, DefaultSubagentStates, type EventStreamEvent, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, ExtractToolCallsFromState, FetchStreamTransport, GetConfigurableType, GetCustomEventType, GetInterruptType, GetToolCallsType, GetUpdateType, InferAgentState, InferAgentToolCalls, InferBag, InferDeepAgentSubagents, InferMiddlewareStatesFromArray, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentByName, InferSubagentNames, InferSubagentState, InferSubagentStates, InferToolCalls, IsAgentLike, IsDeepAgentLike, MessageMetadata, MessageTupleManager, PendingRunsTracker, type QueueEntry, type QueueInterface, ResolveStreamInterface, ResolveStreamOptions, RunCallbackMeta, type Sequence, StreamBase, StreamError, StreamManager, SubAgentLike, SubagentApi, SubagentManager, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, SubmitOptions, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport, UseStreamTransportPayload, calculateDepthFromNamespace, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, findLast, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass, toMessageDict, unique };
@@ -0,0 +1,11 @@
1
+ import { StreamError } from "./errors.js";
2
+ import { MessageTupleManager, ensureMessageInstances, toMessageClass, toMessageDict } from "./messages.js";
3
+ import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "./subagents.js";
4
+ import { StreamManager } from "./manager.js";
5
+ import { filterStream, findLast, unique } from "./utils.js";
6
+ import { getBranchContext, getMessagesMetadataMap } from "./branching.js";
7
+ import { extractInterrupts } from "./interrupts.js";
8
+ import { FetchStreamTransport } from "./transport.js";
9
+ import { PendingRunsTracker } from "./queue.js";
10
+
11
+ export { FetchStreamTransport, MessageTupleManager, PendingRunsTracker, StreamError, StreamManager, SubagentManager, calculateDepthFromNamespace, ensureMessageInstances, extractInterrupts, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterStream, findLast, getBranchContext, getMessagesMetadataMap, isSubagentNamespace, toMessageClass, toMessageDict, unique };