langgraph-ui-components 0.0.7 → 0.0.8

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 (283) hide show
  1. package/dist/index.es100.js +25 -157
  2. package/dist/index.es100.js.map +1 -1
  3. package/dist/index.es101.js +3130 -176
  4. package/dist/index.es101.js.map +1 -1
  5. package/dist/index.es102.js +36 -13
  6. package/dist/index.es102.js.map +1 -1
  7. package/dist/index.es103.js +5 -30
  8. package/dist/index.es103.js.map +1 -1
  9. package/dist/index.es104.js +69 -30
  10. package/dist/index.es104.js.map +1 -1
  11. package/dist/index.es105.js +28 -3148
  12. package/dist/index.es105.js.map +1 -1
  13. package/dist/index.es106.js +5 -16
  14. package/dist/index.es106.js.map +1 -1
  15. package/dist/index.es107.js +2 -7
  16. package/dist/index.es107.js.map +1 -1
  17. package/dist/index.es108.js +13 -2
  18. package/dist/index.es108.js.map +1 -1
  19. package/dist/index.es109.js +499 -9
  20. package/dist/index.es109.js.map +1 -1
  21. package/dist/index.es11.js +2 -2
  22. package/dist/index.es11.js.map +1 -1
  23. package/dist/index.es110.js +5 -501
  24. package/dist/index.es110.js.map +1 -1
  25. package/dist/index.es111.js +2 -7
  26. package/dist/index.es111.js.map +1 -1
  27. package/dist/index.es112.js +148 -2
  28. package/dist/index.es112.js.map +1 -1
  29. package/dist/index.es113.js +878 -118
  30. package/dist/index.es113.js.map +1 -1
  31. package/dist/index.es114.js +251 -877
  32. package/dist/index.es114.js.map +1 -1
  33. package/dist/index.es115.js +3 -281
  34. package/dist/index.es115.js.map +1 -1
  35. package/dist/index.es116.js +445 -3
  36. package/dist/index.es116.js.map +1 -1
  37. package/dist/index.es117.js +39 -437
  38. package/dist/index.es117.js.map +1 -1
  39. package/dist/index.es118.js +22 -46
  40. package/dist/index.es118.js.map +1 -1
  41. package/dist/index.es119.js +78 -21
  42. package/dist/index.es119.js.map +1 -1
  43. package/dist/index.es120.js +126 -76
  44. package/dist/index.es120.js.map +1 -1
  45. package/dist/index.es121.js +45 -125
  46. package/dist/index.es121.js.map +1 -1
  47. package/dist/index.es122.js +9 -48
  48. package/dist/index.es122.js.map +1 -1
  49. package/dist/index.es123.js +45 -10
  50. package/dist/index.es123.js.map +1 -1
  51. package/dist/index.es124.js +97 -43
  52. package/dist/index.es124.js.map +1 -1
  53. package/dist/index.es125.js +48 -94
  54. package/dist/index.es125.js.map +1 -1
  55. package/dist/index.es126.js +14 -51
  56. package/dist/index.es126.js.map +1 -1
  57. package/dist/index.es127.js +13 -162
  58. package/dist/index.es127.js.map +1 -1
  59. package/dist/index.es128.js +89 -2
  60. package/dist/index.es128.js.map +1 -1
  61. package/dist/index.es129.js +2 -15
  62. package/dist/index.es129.js.map +1 -1
  63. package/dist/index.es130.js +54 -87
  64. package/dist/index.es130.js.map +1 -1
  65. package/dist/index.es131.js +100 -2
  66. package/dist/index.es131.js.map +1 -1
  67. package/dist/index.es132.js +186 -51
  68. package/dist/index.es132.js.map +1 -1
  69. package/dist/index.es133.js +97 -87
  70. package/dist/index.es133.js.map +1 -1
  71. package/dist/index.es134.js +31 -187
  72. package/dist/index.es134.js.map +1 -1
  73. package/dist/index.es135.js +10 -110
  74. package/dist/index.es135.js.map +1 -1
  75. package/dist/index.es136.js +11 -35
  76. package/dist/index.es136.js.map +1 -1
  77. package/dist/index.es137.js +12 -10
  78. package/dist/index.es137.js.map +1 -1
  79. package/dist/index.es138.js +90 -10
  80. package/dist/index.es138.js.map +1 -1
  81. package/dist/index.es139.js +274 -11
  82. package/dist/index.es139.js.map +1 -1
  83. package/dist/index.es140.js +2 -91
  84. package/dist/index.es140.js.map +1 -1
  85. package/dist/index.es141.js +150 -261
  86. package/dist/index.es141.js.map +1 -1
  87. package/dist/index.es142.js +51 -2
  88. package/dist/index.es142.js.map +1 -1
  89. package/dist/index.es143.js +34 -158
  90. package/dist/index.es143.js.map +1 -1
  91. package/dist/index.es144.js +34 -50
  92. package/dist/index.es144.js.map +1 -1
  93. package/dist/index.es145.js +32 -32
  94. package/dist/index.es145.js.map +1 -1
  95. package/dist/index.es146.js +23 -34
  96. package/dist/index.es146.js.map +1 -1
  97. package/dist/index.es147.js +583 -32
  98. package/dist/index.es147.js.map +1 -1
  99. package/dist/index.es148.js +121 -20
  100. package/dist/index.es148.js.map +1 -1
  101. package/dist/index.es149.js +158 -585
  102. package/dist/index.es149.js.map +1 -1
  103. package/dist/index.es15.js +15 -15
  104. package/dist/index.es150.js +2 -125
  105. package/dist/index.es150.js.map +1 -1
  106. package/dist/index.es157.js +2 -2
  107. package/dist/index.es159.js +2 -2
  108. package/dist/index.es161.js +64 -25
  109. package/dist/index.es161.js.map +1 -1
  110. package/dist/index.es162.js +22 -12
  111. package/dist/index.es162.js.map +1 -1
  112. package/dist/index.es163.js +5 -53
  113. package/dist/index.es163.js.map +1 -1
  114. package/dist/index.es164.js +337 -52
  115. package/dist/index.es164.js.map +1 -1
  116. package/dist/index.es165.js +24 -21
  117. package/dist/index.es165.js.map +1 -1
  118. package/dist/index.es166.js +12 -6
  119. package/dist/index.es166.js.map +1 -1
  120. package/dist/index.es167.js +49 -344
  121. package/dist/index.es167.js.map +1 -1
  122. package/dist/index.es175.js +1 -1
  123. package/dist/index.es178.js +1 -1
  124. package/dist/index.es183.js +1 -1
  125. package/dist/index.es195.js +2 -2
  126. package/dist/index.es197.js +2 -2
  127. package/dist/index.es200.js +1 -1
  128. package/dist/index.es201.js +1 -1
  129. package/dist/index.es203.js +1 -1
  130. package/dist/index.es204.js +2 -2
  131. package/dist/index.es206.js +1 -1
  132. package/dist/index.es209.js +3 -3
  133. package/dist/index.es21.js +1 -1
  134. package/dist/index.es210.js +2 -2
  135. package/dist/index.es212.js +1 -1
  136. package/dist/index.es214.js +1 -1
  137. package/dist/index.es215.js +1 -1
  138. package/dist/index.es217.js +1 -1
  139. package/dist/index.es218.js +2 -2
  140. package/dist/index.es219.js +1 -1
  141. package/dist/index.es220.js +1 -1
  142. package/dist/index.es221.js +1 -1
  143. package/dist/index.es222.js +1 -1
  144. package/dist/index.es223.js +1 -1
  145. package/dist/index.es224.js +1 -1
  146. package/dist/index.es225.js +1 -1
  147. package/dist/index.es229.js +2 -2
  148. package/dist/index.es28.js +7 -7
  149. package/dist/index.es29.js +1 -1
  150. package/dist/index.es32.js +4 -4
  151. package/dist/index.es33.js +15 -1191
  152. package/dist/index.es33.js.map +1 -1
  153. package/dist/index.es34.js +117 -6
  154. package/dist/index.es34.js.map +1 -1
  155. package/dist/index.es35.js +70 -8
  156. package/dist/index.es35.js.map +1 -1
  157. package/dist/index.es36.js +19 -148
  158. package/dist/index.es36.js.map +1 -1
  159. package/dist/index.es37.js +255 -112
  160. package/dist/index.es37.js.map +1 -1
  161. package/dist/index.es38.js +40 -68
  162. package/dist/index.es38.js.map +1 -1
  163. package/dist/index.es39.js +214 -17
  164. package/dist/index.es39.js.map +1 -1
  165. package/dist/index.es40.js +53 -247
  166. package/dist/index.es40.js.map +1 -1
  167. package/dist/index.es41.js +123 -24
  168. package/dist/index.es41.js.map +1 -1
  169. package/dist/index.es42.js +14 -205
  170. package/dist/index.es42.js.map +1 -1
  171. package/dist/index.es43.js +221 -58
  172. package/dist/index.es43.js.map +1 -1
  173. package/dist/index.es44.js +7 -140
  174. package/dist/index.es44.js.map +1 -1
  175. package/dist/index.es45.js +1185 -17
  176. package/dist/index.es45.js.map +1 -1
  177. package/dist/index.es46.js +6 -229
  178. package/dist/index.es46.js.map +1 -1
  179. package/dist/index.es47.js +146 -15
  180. package/dist/index.es47.js.map +1 -1
  181. package/dist/index.es49.js +7 -90
  182. package/dist/index.es49.js.map +1 -1
  183. package/dist/index.es50.js +92 -6
  184. package/dist/index.es50.js.map +1 -1
  185. package/dist/index.es51.js +3 -14
  186. package/dist/index.es51.js.map +1 -1
  187. package/dist/index.es52.js +36 -8
  188. package/dist/index.es52.js.map +1 -1
  189. package/dist/index.es53.js +61 -83
  190. package/dist/index.es53.js.map +1 -1
  191. package/dist/index.es54.js +37 -3
  192. package/dist/index.es54.js.map +1 -1
  193. package/dist/index.es55.js +304 -34
  194. package/dist/index.es55.js.map +1 -1
  195. package/dist/index.es56.js +9 -72
  196. package/dist/index.es56.js.map +1 -1
  197. package/dist/index.es57.js +85 -32
  198. package/dist/index.es57.js.map +1 -1
  199. package/dist/index.es58.js +6 -304
  200. package/dist/index.es58.js.map +1 -1
  201. package/dist/index.es59.js +15 -9
  202. package/dist/index.es59.js.map +1 -1
  203. package/dist/index.es60.js +142 -5
  204. package/dist/index.es60.js.map +1 -1
  205. package/dist/index.es61.js +285 -148
  206. package/dist/index.es61.js.map +1 -1
  207. package/dist/index.es62.js +62 -668
  208. package/dist/index.es62.js.map +1 -1
  209. package/dist/index.es63.js +201 -131
  210. package/dist/index.es63.js.map +1 -1
  211. package/dist/index.es64.js +29 -295
  212. package/dist/index.es64.js.map +1 -1
  213. package/dist/index.es65.js +8 -65
  214. package/dist/index.es65.js.map +1 -1
  215. package/dist/index.es66.js +9 -210
  216. package/dist/index.es66.js.map +1 -1
  217. package/dist/index.es67.js +181 -28
  218. package/dist/index.es67.js.map +1 -1
  219. package/dist/index.es68.js +23 -8
  220. package/dist/index.es68.js.map +1 -1
  221. package/dist/index.es69.js +1397 -9
  222. package/dist/index.es69.js.map +1 -1
  223. package/dist/index.es70.js +9 -187
  224. package/dist/index.es70.js.map +1 -1
  225. package/dist/index.es71.js +8 -24
  226. package/dist/index.es71.js.map +1 -1
  227. package/dist/index.es72.js +5 -1399
  228. package/dist/index.es72.js.map +1 -1
  229. package/dist/index.es73.js +163 -9
  230. package/dist/index.es73.js.map +1 -1
  231. package/dist/index.es74.js +672 -8
  232. package/dist/index.es74.js.map +1 -1
  233. package/dist/index.es75.js +11 -36
  234. package/dist/index.es75.js.map +1 -1
  235. package/dist/index.es76.js +40 -5
  236. package/dist/index.es76.js.map +1 -1
  237. package/dist/index.es77.js +32 -71
  238. package/dist/index.es77.js.map +1 -1
  239. package/dist/index.es78.js +225 -30
  240. package/dist/index.es78.js.map +1 -1
  241. package/dist/index.es79.js +29 -11
  242. package/dist/index.es79.js.map +1 -1
  243. package/dist/index.es80.js +72 -37
  244. package/dist/index.es80.js.map +1 -1
  245. package/dist/index.es81.js +74 -32
  246. package/dist/index.es81.js.map +1 -1
  247. package/dist/index.es82.js +46 -226
  248. package/dist/index.es82.js.map +1 -1
  249. package/dist/index.es83.js +6 -6
  250. package/dist/index.es83.js.map +1 -1
  251. package/dist/index.es84.js +39 -71
  252. package/dist/index.es84.js.map +1 -1
  253. package/dist/index.es85.js +54 -73
  254. package/dist/index.es85.js.map +1 -1
  255. package/dist/index.es86.js +13 -52
  256. package/dist/index.es86.js.map +1 -1
  257. package/dist/index.es87.js +135 -28
  258. package/dist/index.es87.js.map +1 -1
  259. package/dist/index.es88.js +20 -42
  260. package/dist/index.es88.js.map +1 -1
  261. package/dist/index.es89.js +175 -50
  262. package/dist/index.es89.js.map +1 -1
  263. package/dist/index.es90.js +240 -12
  264. package/dist/index.es90.js.map +1 -1
  265. package/dist/index.es91.js +348 -130
  266. package/dist/index.es91.js.map +1 -1
  267. package/dist/index.es92.js +134 -18
  268. package/dist/index.es92.js.map +1 -1
  269. package/dist/index.es93.js +62 -174
  270. package/dist/index.es93.js.map +1 -1
  271. package/dist/index.es94.js +30 -234
  272. package/dist/index.es94.js.map +1 -1
  273. package/dist/index.es95.js +26 -344
  274. package/dist/index.es95.js.map +1 -1
  275. package/dist/index.es96.js +156 -127
  276. package/dist/index.es96.js.map +1 -1
  277. package/dist/index.es97.js +196 -63
  278. package/dist/index.es97.js.map +1 -1
  279. package/dist/index.es98.js +14 -37
  280. package/dist/index.es98.js.map +1 -1
  281. package/dist/index.es99.js +27 -34
  282. package/dist/index.es99.js.map +1 -1
  283. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.es45.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/modifier.js"],"sourcesContent":["import { BaseMessage } from \"./base.js\";\n\n//#region src/messages/modifier.ts\n/**\n* Message responsible for deleting other messages.\n*/\nvar RemoveMessage = class extends BaseMessage {\n\ttype = \"remove\";\n\t/**\n\t* The ID of the message to remove.\n\t*/\n\tid;\n\tconstructor(fields) {\n\t\tsuper({\n\t\t\t...fields,\n\t\t\tcontent: []\n\t\t});\n\t\tthis.id = fields.id;\n\t}\n\tget _printableFields() {\n\t\treturn {\n\t\t\t...super._printableFields,\n\t\t\tid: this.id\n\t\t};\n\t}\n\tstatic isInstance(obj) {\n\t\treturn super.isInstance(obj) && obj.type === \"remove\";\n\t}\n};\n\n//#endregion\nexport { RemoveMessage };\n//# sourceMappingURL=modifier.js.map"],"names":[],"mappings":";AAMG,IAAC,gBAAgB,cAAc,YAAY;AAAA,EAC7C,OAAO;AAAA;AAAA;AAAA;AAAA,EAIP;AAAA,EACA,YAAY,QAAQ;AACnB,UAAM;AAAA,MACL,GAAG;AAAA,MACH,SAAS,CAAA;AAAA,IACZ,CAAG;AACD,SAAK,KAAK,OAAO;AAAA,EAClB;AAAA,EACA,IAAI,mBAAmB;AACtB,WAAO;AAAA,MACN,GAAG,MAAM;AAAA,MACT,IAAI,KAAK;AAAA,IACZ;AAAA,EACC;AAAA,EACA,OAAO,WAAW,KAAK;AACtB,WAAO,MAAM,WAAW,GAAG,KAAK,IAAI,SAAS;AAAA,EAC9C;AACD;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es45.js","sources":["../node_modules/.pnpm/@langchain+langgraph-sdk@1.5.3_@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5___react-d_6e8116ad15c37793c6138fe0d58aa04e/node_modules/@langchain/langgraph-sdk/dist/client.js"],"sourcesContent":["import { AsyncCaller } from \"./utils/async_caller.js\";\nimport { getEnvironmentVariable } from \"./utils/env.js\";\nimport { mergeSignals } from \"./utils/signals.js\";\nimport { BytesLineDecoder, SSEDecoder } from \"./utils/sse.js\";\nimport { streamWithRetry } from \"./utils/stream.js\";\n\n//#region src/client.ts\nfunction* iterateHeaders(headers) {\n\tlet iter;\n\tlet shouldClear = false;\n\tif (headers instanceof Headers) {\n\t\tconst entries = [];\n\t\theaders.forEach((value, name) => {\n\t\t\tentries.push([name, value]);\n\t\t});\n\t\titer = entries;\n\t} else if (Array.isArray(headers)) iter = headers;\n\telse {\n\t\tshouldClear = true;\n\t\titer = Object.entries(headers ?? {});\n\t}\n\tfor (const item of iter) {\n\t\tconst name = item[0];\n\t\tif (typeof name !== \"string\") throw new TypeError(`Expected header name to be a string, got ${typeof name}`);\n\t\tconst values = Array.isArray(item[1]) ? item[1] : [item[1]];\n\t\tlet didClear = false;\n\t\tfor (const value of values) {\n\t\t\tif (value === void 0) continue;\n\t\t\tif (shouldClear && !didClear) {\n\t\t\t\tdidClear = true;\n\t\t\t\tyield [name, null];\n\t\t\t}\n\t\t\tyield [name, value];\n\t\t}\n\t}\n}\nfunction mergeHeaders(...headerObjects) {\n\tconst outputHeaders = new Headers();\n\tfor (const headers of headerObjects) {\n\t\tif (!headers) continue;\n\t\tfor (const [name, value] of iterateHeaders(headers)) if (value === null) outputHeaders.delete(name);\n\t\telse outputHeaders.append(name, value);\n\t}\n\tconst headerEntries = [];\n\toutputHeaders.forEach((value, name) => {\n\t\theaderEntries.push([name, value]);\n\t});\n\treturn Object.fromEntries(headerEntries);\n}\n/**\n* Get the API key from the environment.\n* Precedence:\n* 1. explicit argument (if string)\n* 2. LANGGRAPH_API_KEY\n* 3. LANGSMITH_API_KEY\n* 4. LANGCHAIN_API_KEY\n*\n* @param apiKey - API key provided as an argument. If null, skips environment lookup. If undefined, tries environment.\n* @returns The API key if found, otherwise undefined\n*/\nfunction getApiKey(apiKey) {\n\tif (apiKey === null) return;\n\tif (apiKey) return apiKey;\n\tfor (const prefix of [\n\t\t\"LANGGRAPH\",\n\t\t\"LANGSMITH\",\n\t\t\"LANGCHAIN\"\n\t]) {\n\t\tconst envKey = getEnvironmentVariable(`${prefix}_API_KEY`);\n\t\tif (envKey) return envKey.trim().replace(/^[\"']|[\"']$/g, \"\");\n\t}\n}\nconst REGEX_RUN_METADATA = /(\\/threads\\/(?<thread_id>.+))?\\/runs\\/(?<run_id>.+)/;\nfunction getRunMetadataFromResponse(response) {\n\tconst contentLocation = response.headers.get(\"Content-Location\");\n\tif (!contentLocation) return void 0;\n\tconst match = REGEX_RUN_METADATA.exec(contentLocation);\n\tif (!match?.groups?.run_id) return void 0;\n\treturn {\n\t\trun_id: match.groups.run_id,\n\t\tthread_id: match.groups.thread_id || void 0\n\t};\n}\nvar BaseClient = class {\n\tasyncCaller;\n\ttimeoutMs;\n\tapiUrl;\n\tdefaultHeaders;\n\tonRequest;\n\tconstructor(config) {\n\t\tconst callerOptions = {\n\t\t\tmaxRetries: 4,\n\t\t\tmaxConcurrency: 4,\n\t\t\t...config?.callerOptions\n\t\t};\n\t\tlet defaultApiUrl = \"http://localhost:8123\";\n\t\tif (!config?.apiUrl && typeof globalThis === \"object\" && globalThis != null) {\n\t\t\tconst fetchSmb = Symbol.for(\"langgraph_api:fetch\");\n\t\t\tconst urlSmb = Symbol.for(\"langgraph_api:url\");\n\t\t\tconst global = globalThis;\n\t\t\tif (global[fetchSmb]) callerOptions.fetch ??= global[fetchSmb];\n\t\t\tif (global[urlSmb]) defaultApiUrl = global[urlSmb];\n\t\t}\n\t\tthis.asyncCaller = new AsyncCaller(callerOptions);\n\t\tthis.timeoutMs = config?.timeoutMs;\n\t\tthis.apiUrl = config?.apiUrl?.replace(/\\/$/, \"\") || defaultApiUrl;\n\t\tthis.defaultHeaders = config?.defaultHeaders || {};\n\t\tthis.onRequest = config?.onRequest;\n\t\tconst apiKey = getApiKey(config?.apiKey);\n\t\tif (apiKey) this.defaultHeaders[\"x-api-key\"] = apiKey;\n\t}\n\tprepareFetchOptions(path, options) {\n\t\tconst mutatedOptions = {\n\t\t\t...options,\n\t\t\theaders: mergeHeaders(this.defaultHeaders, options?.headers)\n\t\t};\n\t\tif (mutatedOptions.json) {\n\t\t\tmutatedOptions.body = JSON.stringify(mutatedOptions.json);\n\t\t\tmutatedOptions.headers = mergeHeaders(mutatedOptions.headers, { \"content-type\": \"application/json\" });\n\t\t\tdelete mutatedOptions.json;\n\t\t}\n\t\tif (mutatedOptions.withResponse) delete mutatedOptions.withResponse;\n\t\tlet timeoutSignal = null;\n\t\tif (typeof options?.timeoutMs !== \"undefined\") {\n\t\t\tif (options.timeoutMs != null) timeoutSignal = AbortSignal.timeout(options.timeoutMs);\n\t\t} else if (this.timeoutMs != null) timeoutSignal = AbortSignal.timeout(this.timeoutMs);\n\t\tmutatedOptions.signal = mergeSignals(timeoutSignal, mutatedOptions.signal);\n\t\tconst targetUrl = new URL(`${this.apiUrl}${path}`);\n\t\tif (mutatedOptions.params) {\n\t\t\tfor (const [key, value] of Object.entries(mutatedOptions.params)) {\n\t\t\t\tif (value == null) continue;\n\t\t\t\tconst strValue = typeof value === \"string\" || typeof value === \"number\" ? value.toString() : JSON.stringify(value);\n\t\t\t\ttargetUrl.searchParams.append(key, strValue);\n\t\t\t}\n\t\t\tdelete mutatedOptions.params;\n\t\t}\n\t\treturn [targetUrl, mutatedOptions];\n\t}\n\tasync fetch(path, options) {\n\t\tconst [url, init] = this.prepareFetchOptions(path, options);\n\t\tlet finalInit = init;\n\t\tif (this.onRequest) finalInit = await this.onRequest(url, init);\n\t\tconst response = await this.asyncCaller.fetch(url, finalInit);\n\t\tconst body = (() => {\n\t\t\tif (response.status === 202 || response.status === 204) return;\n\t\t\treturn response.json();\n\t\t})();\n\t\tif (options?.withResponse) return [await body, response];\n\t\treturn body;\n\t}\n\t/**\n\t* Protected helper for streaming with automatic retry logic.\n\t* Handles both initial requests and reconnections with SSE.\n\t*/\n\tasync *streamWithRetry(config) {\n\t\tconst makeRequest = async (reconnectParams) => {\n\t\t\tconst requestEndpoint = reconnectParams?.reconnectPath || config.endpoint;\n\t\t\tconst isReconnect = !!reconnectParams?.reconnectPath;\n\t\t\tconst method = isReconnect ? \"GET\" : config.method || \"GET\";\n\t\t\tconst requestHeaders = isReconnect && reconnectParams?.lastEventId ? {\n\t\t\t\t...config.headers,\n\t\t\t\t\"Last-Event-ID\": reconnectParams.lastEventId\n\t\t\t} : config.headers;\n\t\t\tlet [url, init] = this.prepareFetchOptions(requestEndpoint, {\n\t\t\t\tmethod,\n\t\t\t\ttimeoutMs: null,\n\t\t\t\tsignal: config.signal,\n\t\t\t\theaders: requestHeaders,\n\t\t\t\tparams: config.params,\n\t\t\t\tjson: isReconnect ? void 0 : config.json\n\t\t\t});\n\t\t\tif (this.onRequest != null) init = await this.onRequest(url, init);\n\t\t\tconst response = await this.asyncCaller.fetch(url, init);\n\t\t\tif (!isReconnect && config.onInitialResponse) await config.onInitialResponse(response);\n\t\t\treturn {\n\t\t\t\tresponse,\n\t\t\t\tstream: (response.body || new ReadableStream({ start: (ctrl) => ctrl.close() })).pipeThrough(BytesLineDecoder()).pipeThrough(SSEDecoder())\n\t\t\t};\n\t\t};\n\t\tyield* streamWithRetry(makeRequest, {\n\t\t\tmaxRetries: config.maxRetries ?? 5,\n\t\t\tsignal: config.signal,\n\t\t\tonReconnect: config.onReconnect\n\t\t});\n\t}\n};\nvar CronsClient = class extends BaseClient {\n\t/**\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param assistantId Assistant ID to use for this cron job.\n\t* @param payload Payload for creating a cron job.\n\t* @returns The created background run.\n\t*/\n\tasync createForThread(threadId, assistantId, payload) {\n\t\tconst json = {\n\t\t\tschedule: payload?.schedule,\n\t\t\tinput: payload?.input,\n\t\t\tconfig: payload?.config,\n\t\t\tcontext: payload?.context,\n\t\t\tmetadata: payload?.metadata,\n\t\t\tassistant_id: assistantId,\n\t\t\tinterrupt_before: payload?.interruptBefore,\n\t\t\tinterrupt_after: payload?.interruptAfter,\n\t\t\twebhook: payload?.webhook,\n\t\t\tmultitask_strategy: payload?.multitaskStrategy,\n\t\t\tif_not_exists: payload?.ifNotExists,\n\t\t\tcheckpoint_during: payload?.checkpointDuring,\n\t\t\tdurability: payload?.durability\n\t\t};\n\t\treturn this.fetch(`/threads/${threadId}/runs/crons`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\tsignal: payload?.signal\n\t\t});\n\t}\n\t/**\n\t*\n\t* @param assistantId Assistant ID to use for this cron job.\n\t* @param payload Payload for creating a cron job.\n\t* @returns\n\t*/\n\tasync create(assistantId, payload) {\n\t\tconst json = {\n\t\t\tschedule: payload?.schedule,\n\t\t\tinput: payload?.input,\n\t\t\tconfig: payload?.config,\n\t\t\tcontext: payload?.context,\n\t\t\tmetadata: payload?.metadata,\n\t\t\tassistant_id: assistantId,\n\t\t\tinterrupt_before: payload?.interruptBefore,\n\t\t\tinterrupt_after: payload?.interruptAfter,\n\t\t\twebhook: payload?.webhook,\n\t\t\ton_run_completed: payload?.onRunCompleted,\n\t\t\tmultitask_strategy: payload?.multitaskStrategy,\n\t\t\tif_not_exists: payload?.ifNotExists,\n\t\t\tcheckpoint_during: payload?.checkpointDuring,\n\t\t\tdurability: payload?.durability\n\t\t};\n\t\treturn this.fetch(`/runs/crons`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\tsignal: payload?.signal\n\t\t});\n\t}\n\t/**\n\t*\n\t* @param cronId Cron ID of Cron job to delete.\n\t*/\n\tasync delete(cronId, options) {\n\t\tawait this.fetch(`/runs/crons/${cronId}`, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t*\n\t* @param query Query options.\n\t* @returns List of crons.\n\t*/\n\tasync search(query) {\n\t\treturn this.fetch(\"/runs/crons/search\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tassistant_id: query?.assistantId ?? void 0,\n\t\t\t\tthread_id: query?.threadId ?? void 0,\n\t\t\t\tlimit: query?.limit ?? 10,\n\t\t\t\toffset: query?.offset ?? 0,\n\t\t\t\tsort_by: query?.sortBy ?? void 0,\n\t\t\t\tsort_order: query?.sortOrder ?? void 0,\n\t\t\t\tselect: query?.select ?? void 0\n\t\t\t},\n\t\t\tsignal: query?.signal\n\t\t});\n\t}\n\t/**\n\t* Count cron jobs matching filters.\n\t*\n\t* @param query.assistantId Assistant ID to filter by.\n\t* @param query.threadId Thread ID to filter by.\n\t* @returns Number of cron jobs matching the criteria.\n\t*/\n\tasync count(query) {\n\t\treturn this.fetch(`/runs/crons/count`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tassistant_id: query?.assistantId ?? void 0,\n\t\t\t\tthread_id: query?.threadId ?? void 0\n\t\t\t},\n\t\t\tsignal: query?.signal\n\t\t});\n\t}\n};\nvar AssistantsClient = class extends BaseClient {\n\t/**\n\t* Get an assistant by ID.\n\t*\n\t* @param assistantId The ID of the assistant.\n\t* @returns Assistant\n\t*/\n\tasync get(assistantId, options) {\n\t\treturn this.fetch(`/assistants/${assistantId}`, { signal: options?.signal });\n\t}\n\t/**\n\t* Get the JSON representation of the graph assigned to a runnable\n\t* @param assistantId The ID of the assistant.\n\t* @param options.xray Whether to include subgraphs in the serialized graph representation. If an integer value is provided, only subgraphs with a depth less than or equal to the value will be included.\n\t* @returns Serialized graph\n\t*/\n\tasync getGraph(assistantId, options) {\n\t\treturn this.fetch(`/assistants/${assistantId}/graph`, {\n\t\t\tparams: { xray: options?.xray },\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Get the state and config schema of the graph assigned to a runnable\n\t* @param assistantId The ID of the assistant.\n\t* @returns Graph schema\n\t*/\n\tasync getSchemas(assistantId, options) {\n\t\treturn this.fetch(`/assistants/${assistantId}/schemas`, { signal: options?.signal });\n\t}\n\t/**\n\t* Get the schemas of an assistant by ID.\n\t*\n\t* @param assistantId The ID of the assistant to get the schema of.\n\t* @param options Additional options for getting subgraphs, such as namespace or recursion extraction.\n\t* @returns The subgraphs of the assistant.\n\t*/\n\tasync getSubgraphs(assistantId, options) {\n\t\tif (options?.namespace) return this.fetch(`/assistants/${assistantId}/subgraphs/${options.namespace}`, {\n\t\t\tparams: { recurse: options?.recurse },\n\t\t\tsignal: options?.signal\n\t\t});\n\t\treturn this.fetch(`/assistants/${assistantId}/subgraphs`, {\n\t\t\tparams: { recurse: options?.recurse },\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Create a new assistant.\n\t* @param payload Payload for creating an assistant.\n\t* @returns The created assistant.\n\t*/\n\tasync create(payload) {\n\t\treturn this.fetch(\"/assistants\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tgraph_id: payload.graphId,\n\t\t\t\tconfig: payload.config,\n\t\t\t\tcontext: payload.context,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t\tassistant_id: payload.assistantId,\n\t\t\t\tif_exists: payload.ifExists,\n\t\t\t\tname: payload.name,\n\t\t\t\tdescription: payload.description\n\t\t\t},\n\t\t\tsignal: payload.signal\n\t\t});\n\t}\n\t/**\n\t* Update an assistant.\n\t* @param assistantId ID of the assistant.\n\t* @param payload Payload for updating the assistant.\n\t* @returns The updated assistant.\n\t*/\n\tasync update(assistantId, payload) {\n\t\treturn this.fetch(`/assistants/${assistantId}`, {\n\t\t\tmethod: \"PATCH\",\n\t\t\tjson: {\n\t\t\t\tgraph_id: payload.graphId,\n\t\t\t\tconfig: payload.config,\n\t\t\t\tcontext: payload.context,\n\t\t\t\tmetadata: payload.metadata,\n\t\t\t\tname: payload.name,\n\t\t\t\tdescription: payload.description\n\t\t\t},\n\t\t\tsignal: payload.signal\n\t\t});\n\t}\n\t/**\n\t* Delete an assistant.\n\t*\n\t* @param assistantId ID of the assistant.\n\t* @param deleteThreads If true, delete all threads with `metadata.assistant_id` equal to `assistantId`. Defaults to false.\n\t*/\n\tasync delete(assistantId, options) {\n\t\treturn this.fetch(`/assistants/${assistantId}?delete_threads=${options?.deleteThreads ?? false}`, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\tasync search(query) {\n\t\tconst json = {\n\t\t\tgraph_id: query?.graphId ?? void 0,\n\t\t\tname: query?.name ?? void 0,\n\t\t\tmetadata: query?.metadata ?? void 0,\n\t\t\tlimit: query?.limit ?? 10,\n\t\t\toffset: query?.offset ?? 0,\n\t\t\tsort_by: query?.sortBy ?? void 0,\n\t\t\tsort_order: query?.sortOrder ?? void 0,\n\t\t\tselect: query?.select ?? void 0\n\t\t};\n\t\tconst [assistants, response] = await this.fetch(\"/assistants/search\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\twithResponse: true,\n\t\t\tsignal: query?.signal\n\t\t});\n\t\tif (query?.includePagination) return {\n\t\t\tassistants,\n\t\t\tnext: response.headers.get(\"X-Pagination-Next\")\n\t\t};\n\t\treturn assistants;\n\t}\n\t/**\n\t* Count assistants matching filters.\n\t*\n\t* @param query.metadata Metadata to filter by. Exact match for each key/value.\n\t* @param query.graphId Optional graph id to filter by.\n\t* @param query.name Optional name to filter by.\n\t* @returns Number of assistants matching the criteria.\n\t*/\n\tasync count(query) {\n\t\treturn this.fetch(`/assistants/count`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tmetadata: query?.metadata ?? void 0,\n\t\t\t\tgraph_id: query?.graphId ?? void 0,\n\t\t\t\tname: query?.name ?? void 0\n\t\t\t},\n\t\t\tsignal: query?.signal\n\t\t});\n\t}\n\t/**\n\t* List all versions of an assistant.\n\t*\n\t* @param assistantId ID of the assistant.\n\t* @returns List of assistant versions.\n\t*/\n\tasync getVersions(assistantId, payload) {\n\t\treturn this.fetch(`/assistants/${assistantId}/versions`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tmetadata: payload?.metadata ?? void 0,\n\t\t\t\tlimit: payload?.limit ?? 10,\n\t\t\t\toffset: payload?.offset ?? 0\n\t\t\t},\n\t\t\tsignal: payload?.signal\n\t\t});\n\t}\n\t/**\n\t* Change the version of an assistant.\n\t*\n\t* @param assistantId ID of the assistant.\n\t* @param version The version to change to.\n\t* @returns The updated assistant.\n\t*/\n\tasync setLatest(assistantId, version, options) {\n\t\treturn this.fetch(`/assistants/${assistantId}/latest`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: { version },\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n};\nvar ThreadsClient = class extends BaseClient {\n\t/**\n\t* Get a thread by ID.\n\t*\n\t* @param threadId ID of the thread.\n\t* @returns The thread.\n\t*/\n\tasync get(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}`, { signal: options?.signal });\n\t}\n\t/**\n\t* Create a new thread.\n\t*\n\t* @param payload Payload for creating a thread.\n\t* @returns The created thread.\n\t*/\n\tasync create(payload) {\n\t\tconst ttlPayload = typeof payload?.ttl === \"number\" ? {\n\t\t\tttl: payload.ttl,\n\t\t\tstrategy: \"delete\"\n\t\t} : payload?.ttl;\n\t\treturn this.fetch(`/threads`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tmetadata: {\n\t\t\t\t\t...payload?.metadata,\n\t\t\t\t\tgraph_id: payload?.graphId\n\t\t\t\t},\n\t\t\t\tthread_id: payload?.threadId,\n\t\t\t\tif_exists: payload?.ifExists,\n\t\t\t\tsupersteps: payload?.supersteps?.map((s) => ({ updates: s.updates.map((u) => ({\n\t\t\t\t\tvalues: u.values,\n\t\t\t\t\tcommand: u.command,\n\t\t\t\t\tas_node: u.asNode\n\t\t\t\t})) })),\n\t\t\t\tttl: ttlPayload\n\t\t\t},\n\t\t\tsignal: payload?.signal\n\t\t});\n\t}\n\t/**\n\t* Copy an existing thread\n\t* @param threadId ID of the thread to be copied\n\t* @returns Newly copied thread\n\t*/\n\tasync copy(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/copy`, {\n\t\t\tmethod: \"POST\",\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Update a thread.\n\t*\n\t* @param threadId ID of the thread.\n\t* @param payload Payload for updating the thread.\n\t* @returns The updated thread.\n\t*/\n\tasync update(threadId, payload) {\n\t\tconst ttlPayload = typeof payload?.ttl === \"number\" ? {\n\t\t\tttl: payload.ttl,\n\t\t\tstrategy: \"delete\"\n\t\t} : payload?.ttl;\n\t\treturn this.fetch(`/threads/${threadId}`, {\n\t\t\tmethod: \"PATCH\",\n\t\t\tjson: {\n\t\t\t\tmetadata: payload?.metadata,\n\t\t\t\tttl: ttlPayload\n\t\t\t},\n\t\t\tsignal: payload?.signal\n\t\t});\n\t}\n\t/**\n\t* Delete a thread.\n\t*\n\t* @param threadId ID of the thread.\n\t*/\n\tasync delete(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}`, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* List threads\n\t*\n\t* @param query Query options\n\t* @returns List of threads\n\t*/\n\tasync search(query) {\n\t\treturn this.fetch(\"/threads/search\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tmetadata: query?.metadata ?? void 0,\n\t\t\t\tids: query?.ids ?? void 0,\n\t\t\t\tlimit: query?.limit ?? 10,\n\t\t\t\toffset: query?.offset ?? 0,\n\t\t\t\tstatus: query?.status,\n\t\t\t\tsort_by: query?.sortBy,\n\t\t\t\tsort_order: query?.sortOrder,\n\t\t\t\tselect: query?.select ?? void 0,\n\t\t\t\tvalues: query?.values ?? void 0\n\t\t\t},\n\t\t\tsignal: query?.signal\n\t\t});\n\t}\n\t/**\n\t* Count threads matching filters.\n\t*\n\t* @param query.metadata Thread metadata to filter on.\n\t* @param query.values State values to filter on.\n\t* @param query.status Thread status to filter on.\n\t* @returns Number of threads matching the criteria.\n\t*/\n\tasync count(query) {\n\t\treturn this.fetch(`/threads/count`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tmetadata: query?.metadata ?? void 0,\n\t\t\t\tvalues: query?.values ?? void 0,\n\t\t\t\tstatus: query?.status ?? void 0\n\t\t\t},\n\t\t\tsignal: query?.signal\n\t\t});\n\t}\n\t/**\n\t* Get state for a thread.\n\t*\n\t* @param threadId ID of the thread.\n\t* @returns Thread state.\n\t*/\n\tasync getState(threadId, checkpoint, options) {\n\t\tif (checkpoint != null) {\n\t\t\tif (typeof checkpoint !== \"string\") return this.fetch(`/threads/${threadId}/state/checkpoint`, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tjson: {\n\t\t\t\t\tcheckpoint,\n\t\t\t\t\tsubgraphs: options?.subgraphs\n\t\t\t\t},\n\t\t\t\tsignal: options?.signal\n\t\t\t});\n\t\t\treturn this.fetch(`/threads/${threadId}/state/${checkpoint}`, {\n\t\t\t\tparams: { subgraphs: options?.subgraphs },\n\t\t\t\tsignal: options?.signal\n\t\t\t});\n\t\t}\n\t\treturn this.fetch(`/threads/${threadId}/state`, {\n\t\t\tparams: { subgraphs: options?.subgraphs },\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Add state to a thread.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @returns\n\t*/\n\tasync updateState(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/state`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tvalues: options.values,\n\t\t\t\tcheckpoint_id: options.checkpointId,\n\t\t\t\tcheckpoint: options.checkpoint,\n\t\t\t\tas_node: options?.asNode\n\t\t\t},\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Patch the metadata of a thread.\n\t*\n\t* @param threadIdOrConfig Thread ID or config to patch the state of.\n\t* @param metadata Metadata to patch the state with.\n\t*/\n\tasync patchState(threadIdOrConfig, metadata, options) {\n\t\tlet threadId;\n\t\tif (typeof threadIdOrConfig !== \"string\") {\n\t\t\tif (typeof threadIdOrConfig.configurable?.thread_id !== \"string\") throw new Error(\"Thread ID is required when updating state with a config.\");\n\t\t\tthreadId = threadIdOrConfig.configurable.thread_id;\n\t\t} else threadId = threadIdOrConfig;\n\t\treturn this.fetch(`/threads/${threadId}/state`, {\n\t\t\tmethod: \"PATCH\",\n\t\t\tjson: { metadata },\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Get all past states for a thread.\n\t*\n\t* @param threadId ID of the thread.\n\t* @param options Additional options.\n\t* @returns List of thread states.\n\t*/\n\tasync getHistory(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/history`, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: {\n\t\t\t\tlimit: options?.limit ?? 10,\n\t\t\t\tbefore: options?.before,\n\t\t\t\tmetadata: options?.metadata,\n\t\t\t\tcheckpoint: options?.checkpoint\n\t\t\t},\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\tasync *joinStream(threadId, options) {\n\t\tyield* this.streamWithRetry({\n\t\t\tendpoint: `/threads/${threadId}/stream`,\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: options?.signal,\n\t\t\theaders: options?.lastEventId ? { \"Last-Event-ID\": options.lastEventId } : void 0,\n\t\t\tparams: options?.streamMode ? { stream_mode: options.streamMode } : void 0\n\t\t});\n\t}\n};\nvar RunsClient = class extends BaseClient {\n\t/**\n\t* Create a run and stream the results.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param assistantId Assistant ID to use for this run.\n\t* @param payload Payload for creating a run.\n\t*/\n\tasync *stream(threadId, assistantId, payload) {\n\t\tconst json = {\n\t\t\tinput: payload?.input,\n\t\t\tcommand: payload?.command,\n\t\t\tconfig: payload?.config,\n\t\t\tcontext: payload?.context,\n\t\t\tmetadata: payload?.metadata,\n\t\t\tstream_mode: payload?.streamMode,\n\t\t\tstream_subgraphs: payload?.streamSubgraphs,\n\t\t\tstream_resumable: payload?.streamResumable,\n\t\t\tfeedback_keys: payload?.feedbackKeys,\n\t\t\tassistant_id: assistantId,\n\t\t\tinterrupt_before: payload?.interruptBefore,\n\t\t\tinterrupt_after: payload?.interruptAfter,\n\t\t\tcheckpoint: payload?.checkpoint,\n\t\t\tcheckpoint_id: payload?.checkpointId,\n\t\t\twebhook: payload?.webhook,\n\t\t\tmultitask_strategy: payload?.multitaskStrategy,\n\t\t\ton_completion: payload?.onCompletion,\n\t\t\ton_disconnect: payload?.onDisconnect,\n\t\t\tafter_seconds: payload?.afterSeconds,\n\t\t\tif_not_exists: payload?.ifNotExists,\n\t\t\tcheckpoint_during: payload?.checkpointDuring,\n\t\t\tdurability: payload?.durability\n\t\t};\n\t\tyield* this.streamWithRetry({\n\t\t\tendpoint: threadId == null ? `/runs/stream` : `/threads/${threadId}/runs/stream`,\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\tsignal: payload?.signal,\n\t\t\tonInitialResponse: (response) => {\n\t\t\t\tconst runMetadata = getRunMetadataFromResponse(response);\n\t\t\t\tif (runMetadata) payload?.onRunCreated?.(runMetadata);\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Create a run.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param assistantId Assistant ID to use for this run.\n\t* @param payload Payload for creating a run.\n\t* @returns The created run.\n\t*/\n\tasync create(threadId, assistantId, payload) {\n\t\tconst json = {\n\t\t\tinput: payload?.input,\n\t\t\tcommand: payload?.command,\n\t\t\tconfig: payload?.config,\n\t\t\tcontext: payload?.context,\n\t\t\tmetadata: payload?.metadata,\n\t\t\tstream_mode: payload?.streamMode,\n\t\t\tstream_subgraphs: payload?.streamSubgraphs,\n\t\t\tstream_resumable: payload?.streamResumable,\n\t\t\tassistant_id: assistantId,\n\t\t\tinterrupt_before: payload?.interruptBefore,\n\t\t\tinterrupt_after: payload?.interruptAfter,\n\t\t\twebhook: payload?.webhook,\n\t\t\tcheckpoint: payload?.checkpoint,\n\t\t\tcheckpoint_id: payload?.checkpointId,\n\t\t\tmultitask_strategy: payload?.multitaskStrategy,\n\t\t\tafter_seconds: payload?.afterSeconds,\n\t\t\tif_not_exists: payload?.ifNotExists,\n\t\t\tcheckpoint_during: payload?.checkpointDuring,\n\t\t\tdurability: payload?.durability,\n\t\t\tlangsmith_tracer: payload?._langsmithTracer ? {\n\t\t\t\tproject_name: payload?._langsmithTracer?.projectName,\n\t\t\t\texample_id: payload?._langsmithTracer?.exampleId\n\t\t\t} : void 0\n\t\t};\n\t\tconst endpoint = threadId === null ? \"/runs\" : `/threads/${threadId}/runs`;\n\t\tconst [run, response] = await this.fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\tsignal: payload?.signal,\n\t\t\twithResponse: true\n\t\t});\n\t\tconst runMetadata = getRunMetadataFromResponse(response);\n\t\tif (runMetadata) payload?.onRunCreated?.(runMetadata);\n\t\treturn run;\n\t}\n\t/**\n\t* Create a batch of stateless background runs.\n\t*\n\t* @param payloads An array of payloads for creating runs.\n\t* @returns An array of created runs.\n\t*/\n\tasync createBatch(payloads, options) {\n\t\tconst filteredPayloads = payloads.map((payload) => ({\n\t\t\t...payload,\n\t\t\tassistant_id: payload.assistantId\n\t\t})).map((payload) => {\n\t\t\treturn Object.fromEntries(Object.entries(payload).filter(([_, v]) => v !== void 0));\n\t\t});\n\t\treturn this.fetch(\"/runs/batch\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: filteredPayloads,\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Create a run and wait for it to complete.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param assistantId Assistant ID to use for this run.\n\t* @param payload Payload for creating a run.\n\t* @returns The last values chunk of the thread.\n\t*/\n\tasync wait(threadId, assistantId, payload) {\n\t\tconst json = {\n\t\t\tinput: payload?.input,\n\t\t\tcommand: payload?.command,\n\t\t\tconfig: payload?.config,\n\t\t\tcontext: payload?.context,\n\t\t\tmetadata: payload?.metadata,\n\t\t\tassistant_id: assistantId,\n\t\t\tinterrupt_before: payload?.interruptBefore,\n\t\t\tinterrupt_after: payload?.interruptAfter,\n\t\t\tcheckpoint: payload?.checkpoint,\n\t\t\tcheckpoint_id: payload?.checkpointId,\n\t\t\twebhook: payload?.webhook,\n\t\t\tmultitask_strategy: payload?.multitaskStrategy,\n\t\t\ton_completion: payload?.onCompletion,\n\t\t\ton_disconnect: payload?.onDisconnect,\n\t\t\tafter_seconds: payload?.afterSeconds,\n\t\t\tif_not_exists: payload?.ifNotExists,\n\t\t\tcheckpoint_during: payload?.checkpointDuring,\n\t\t\tdurability: payload?.durability,\n\t\t\tlangsmith_tracer: payload?._langsmithTracer ? {\n\t\t\t\tproject_name: payload?._langsmithTracer?.projectName,\n\t\t\t\texample_id: payload?._langsmithTracer?.exampleId\n\t\t\t} : void 0\n\t\t};\n\t\tconst endpoint = threadId == null ? `/runs/wait` : `/threads/${threadId}/runs/wait`;\n\t\tconst [run, response] = await this.fetch(endpoint, {\n\t\t\tmethod: \"POST\",\n\t\t\tjson,\n\t\t\ttimeoutMs: null,\n\t\t\tsignal: payload?.signal,\n\t\t\twithResponse: true\n\t\t});\n\t\tconst runMetadata = getRunMetadataFromResponse(response);\n\t\tif (runMetadata) payload?.onRunCreated?.(runMetadata);\n\t\tif ((payload?.raiseError !== void 0 ? payload.raiseError : true) && \"__error__\" in run && typeof run.__error__ === \"object\" && run.__error__ && \"error\" in run.__error__ && \"message\" in run.__error__) throw new Error(`${run.__error__?.error}: ${run.__error__?.message}`);\n\t\treturn run;\n\t}\n\t/**\n\t* List all runs for a thread.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param options Filtering and pagination options.\n\t* @returns List of runs.\n\t*/\n\tasync list(threadId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/runs`, {\n\t\t\tparams: {\n\t\t\t\tlimit: options?.limit ?? 10,\n\t\t\t\toffset: options?.offset ?? 0,\n\t\t\t\tstatus: options?.status ?? void 0,\n\t\t\t\tselect: options?.select ?? void 0\n\t\t\t},\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Get a run by ID.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param runId The ID of the run.\n\t* @returns The run.\n\t*/\n\tasync get(threadId, runId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/runs/${runId}`, { signal: options?.signal });\n\t}\n\t/**\n\t* Cancel a run.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param runId The ID of the run.\n\t* @param wait Whether to block when canceling\n\t* @param action Action to take when cancelling the run. Possible values are `interrupt` or `rollback`. Default is `interrupt`.\n\t* @returns\n\t*/\n\tasync cancel(threadId, runId, wait = false, action = \"interrupt\", options = {}) {\n\t\treturn this.fetch(`/threads/${threadId}/runs/${runId}/cancel`, {\n\t\t\tmethod: \"POST\",\n\t\t\tparams: {\n\t\t\t\twait: wait ? \"1\" : \"0\",\n\t\t\t\taction\n\t\t\t},\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Block until a run is done.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param runId The ID of the run.\n\t* @returns\n\t*/\n\tasync join(threadId, runId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/runs/${runId}/join`, {\n\t\t\ttimeoutMs: null,\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Stream output from a run in real-time, until the run is done.\n\t*\n\t* @param threadId The ID of the thread. Can be set to `null` | `undefined` for stateless runs.\n\t* @param runId The ID of the run.\n\t* @param options Additional options for controlling the stream behavior:\n\t* - signal: An AbortSignal that can be used to cancel the stream request\n\t* - lastEventId: The ID of the last event received. Can be used to reconnect to a stream without losing events.\n\t* - cancelOnDisconnect: When true, automatically cancels the run if the client disconnects from the stream\n\t* - streamMode: Controls what types of events to receive from the stream (can be a single mode or array of modes)\n\t* Must be a subset of the stream modes passed when creating the run. Background runs default to having the union of all\n\t* stream modes enabled.\n\t* @returns An async generator yielding stream parts.\n\t*/\n\tasync *joinStream(threadId, runId, options) {\n\t\tconst opts = typeof options === \"object\" && options != null && options instanceof AbortSignal ? { signal: options } : options;\n\t\tyield* this.streamWithRetry({\n\t\t\tendpoint: threadId != null ? `/threads/${threadId}/runs/${runId}/stream` : `/runs/${runId}/stream`,\n\t\t\tmethod: \"GET\",\n\t\t\tsignal: opts?.signal,\n\t\t\theaders: opts?.lastEventId ? { \"Last-Event-ID\": opts.lastEventId } : void 0,\n\t\t\tparams: {\n\t\t\t\tcancel_on_disconnect: opts?.cancelOnDisconnect ? \"1\" : \"0\",\n\t\t\t\tstream_mode: opts?.streamMode\n\t\t\t}\n\t\t});\n\t}\n\t/**\n\t* Delete a run.\n\t*\n\t* @param threadId The ID of the thread.\n\t* @param runId The ID of the run.\n\t* @returns\n\t*/\n\tasync delete(threadId, runId, options) {\n\t\treturn this.fetch(`/threads/${threadId}/runs/${runId}`, {\n\t\t\tmethod: \"DELETE\",\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n};\nvar StoreClient = class extends BaseClient {\n\t/**\n\t* Store or update an item.\n\t*\n\t* @param namespace A list of strings representing the namespace path.\n\t* @param key The unique identifier for the item within the namespace.\n\t* @param value A dictionary containing the item's data.\n\t* @param options.index Controls search indexing - null (use defaults), false (disable), or list of field paths to index.\n\t* @param options.ttl Optional time-to-live in minutes for the item, or null for no expiration.\n\t* @returns Promise<void>\n\t*\n\t* @example\n\t* ```typescript\n\t* await client.store.putItem(\n\t* [\"documents\", \"user123\"],\n\t* \"item456\",\n\t* { title: \"My Document\", content: \"Hello World\" },\n\t* { ttl: 60 } // expires in 60 minutes\n\t* );\n\t* ```\n\t*/\n\tasync putItem(namespace, key, value, options) {\n\t\tnamespace.forEach((label) => {\n\t\t\tif (label.includes(\".\")) throw new Error(`Invalid namespace label '${label}'. Namespace labels cannot contain periods ('.')`);\n\t\t});\n\t\tconst payload = {\n\t\t\tnamespace,\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\tindex: options?.index,\n\t\t\tttl: options?.ttl\n\t\t};\n\t\treturn this.fetch(\"/store/items\", {\n\t\t\tmethod: \"PUT\",\n\t\t\tjson: payload,\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Retrieve a single item.\n\t*\n\t* @param namespace A list of strings representing the namespace path.\n\t* @param key The unique identifier for the item.\n\t* @param options.refreshTtl Whether to refresh the TTL on this read operation. If null, uses the store's default behavior.\n\t* @returns Promise<Item>\n\t*\n\t* @example\n\t* ```typescript\n\t* const item = await client.store.getItem(\n\t* [\"documents\", \"user123\"],\n\t* \"item456\",\n\t* { refreshTtl: true }\n\t* );\n\t* console.log(item);\n\t* // {\n\t* // namespace: [\"documents\", \"user123\"],\n\t* // key: \"item456\",\n\t* // value: { title: \"My Document\", content: \"Hello World\" },\n\t* // createdAt: \"2024-07-30T12:00:00Z\",\n\t* // updatedAt: \"2024-07-30T12:00:00Z\"\n\t* // }\n\t* ```\n\t*/\n\tasync getItem(namespace, key, options) {\n\t\tnamespace.forEach((label) => {\n\t\t\tif (label.includes(\".\")) throw new Error(`Invalid namespace label '${label}'. Namespace labels cannot contain periods ('.')`);\n\t\t});\n\t\tconst params = {\n\t\t\tnamespace: namespace.join(\".\"),\n\t\t\tkey\n\t\t};\n\t\tif (options?.refreshTtl !== void 0) params.refresh_ttl = options.refreshTtl;\n\t\tconst response = await this.fetch(\"/store/items\", {\n\t\t\tparams,\n\t\t\tsignal: options?.signal\n\t\t});\n\t\treturn response ? {\n\t\t\t...response,\n\t\t\tcreatedAt: response.created_at,\n\t\t\tupdatedAt: response.updated_at\n\t\t} : null;\n\t}\n\t/**\n\t* Delete an item.\n\t*\n\t* @param namespace A list of strings representing the namespace path.\n\t* @param key The unique identifier for the item.\n\t* @returns Promise<void>\n\t*/\n\tasync deleteItem(namespace, key, options) {\n\t\tnamespace.forEach((label) => {\n\t\t\tif (label.includes(\".\")) throw new Error(`Invalid namespace label '${label}'. Namespace labels cannot contain periods ('.')`);\n\t\t});\n\t\treturn this.fetch(\"/store/items\", {\n\t\t\tmethod: \"DELETE\",\n\t\t\tjson: {\n\t\t\t\tnamespace,\n\t\t\t\tkey\n\t\t\t},\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n\t/**\n\t* Search for items within a namespace prefix.\n\t*\n\t* @param namespacePrefix List of strings representing the namespace prefix.\n\t* @param options.filter Optional dictionary of key-value pairs to filter results.\n\t* @param options.limit Maximum number of items to return (default is 10).\n\t* @param options.offset Number of items to skip before returning results (default is 0).\n\t* @param options.query Optional search query.\n\t* @param options.refreshTtl Whether to refresh the TTL on items returned by this search. If null, uses the store's default behavior.\n\t* @returns Promise<SearchItemsResponse>\n\t*\n\t* @example\n\t* ```typescript\n\t* const results = await client.store.searchItems(\n\t* [\"documents\"],\n\t* {\n\t* filter: { author: \"John Doe\" },\n\t* limit: 5,\n\t* refreshTtl: true\n\t* }\n\t* );\n\t* console.log(results);\n\t* // {\n\t* // items: [\n\t* // {\n\t* // namespace: [\"documents\", \"user123\"],\n\t* // key: \"item789\",\n\t* // value: { title: \"Another Document\", author: \"John Doe\" },\n\t* // createdAt: \"2024-07-30T12:00:00Z\",\n\t* // updatedAt: \"2024-07-30T12:00:00Z\"\n\t* // },\n\t* // // ... additional items ...\n\t* // ]\n\t* // }\n\t* ```\n\t*/\n\tasync searchItems(namespacePrefix, options) {\n\t\tconst payload = {\n\t\t\tnamespace_prefix: namespacePrefix,\n\t\t\tfilter: options?.filter,\n\t\t\tlimit: options?.limit ?? 10,\n\t\t\toffset: options?.offset ?? 0,\n\t\t\tquery: options?.query,\n\t\t\trefresh_ttl: options?.refreshTtl\n\t\t};\n\t\treturn { items: (await this.fetch(\"/store/items/search\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: payload,\n\t\t\tsignal: options?.signal\n\t\t})).items.map((item) => ({\n\t\t\t...item,\n\t\t\tcreatedAt: item.created_at,\n\t\t\tupdatedAt: item.updated_at\n\t\t})) };\n\t}\n\t/**\n\t* List namespaces with optional match conditions.\n\t*\n\t* @param options.prefix Optional list of strings representing the prefix to filter namespaces.\n\t* @param options.suffix Optional list of strings representing the suffix to filter namespaces.\n\t* @param options.maxDepth Optional integer specifying the maximum depth of namespaces to return.\n\t* @param options.limit Maximum number of namespaces to return (default is 100).\n\t* @param options.offset Number of namespaces to skip before returning results (default is 0).\n\t* @returns Promise<ListNamespaceResponse>\n\t*/\n\tasync listNamespaces(options) {\n\t\tconst payload = {\n\t\t\tprefix: options?.prefix,\n\t\t\tsuffix: options?.suffix,\n\t\t\tmax_depth: options?.maxDepth,\n\t\t\tlimit: options?.limit ?? 100,\n\t\t\toffset: options?.offset ?? 0\n\t\t};\n\t\treturn this.fetch(\"/store/namespaces\", {\n\t\t\tmethod: \"POST\",\n\t\t\tjson: payload,\n\t\t\tsignal: options?.signal\n\t\t});\n\t}\n};\nvar UiClient = class UiClient extends BaseClient {\n\tstatic promiseCache = {};\n\tstatic getOrCached(key, fn) {\n\t\tif (UiClient.promiseCache[key] != null) return UiClient.promiseCache[key];\n\t\tconst promise = fn();\n\t\tUiClient.promiseCache[key] = promise;\n\t\treturn promise;\n\t}\n\tasync getComponent(assistantId, agentName) {\n\t\treturn UiClient.getOrCached(`${this.apiUrl}-${assistantId}-${agentName}`, async () => {\n\t\t\tlet [url, init] = this.prepareFetchOptions(`/ui/${assistantId}`, {\n\t\t\t\theaders: {\n\t\t\t\t\tAccept: \"text/html\",\n\t\t\t\t\t\"Content-Type\": \"application/json\"\n\t\t\t\t},\n\t\t\t\tmethod: \"POST\",\n\t\t\t\tjson: { name: agentName }\n\t\t\t});\n\t\t\tif (this.onRequest != null) init = await this.onRequest(url, init);\n\t\t\treturn (await this.asyncCaller.fetch(url, init)).text();\n\t\t});\n\t}\n};\nvar Client = class {\n\t/**\n\t* The client for interacting with assistants.\n\t*/\n\tassistants;\n\t/**\n\t* The client for interacting with threads.\n\t*/\n\tthreads;\n\t/**\n\t* The client for interacting with runs.\n\t*/\n\truns;\n\t/**\n\t* The client for interacting with cron runs.\n\t*/\n\tcrons;\n\t/**\n\t* The client for interacting with the KV store.\n\t*/\n\tstore;\n\t/**\n\t* The client for interacting with the UI.\n\t* @internal Used by LoadExternalComponent and the API might change in the future.\n\t*/\n\t\"~ui\";\n\t/**\n\t* @internal Used to obtain a stable key representing the client.\n\t*/\n\t\"~configHash\";\n\tconstructor(config) {\n\t\tthis[\"~configHash\"] = JSON.stringify({\n\t\t\tapiUrl: config?.apiUrl,\n\t\t\tapiKey: config?.apiKey,\n\t\t\ttimeoutMs: config?.timeoutMs,\n\t\t\tdefaultHeaders: config?.defaultHeaders,\n\t\t\tmaxConcurrency: config?.callerOptions?.maxConcurrency,\n\t\t\tmaxRetries: config?.callerOptions?.maxRetries,\n\t\t\tcallbacks: {\n\t\t\t\tonFailedResponseHook: config?.callerOptions?.onFailedResponseHook != null,\n\t\t\t\tonRequest: config?.onRequest != null,\n\t\t\t\tfetch: config?.callerOptions?.fetch != null\n\t\t\t}\n\t\t});\n\t\tthis.assistants = new AssistantsClient(config);\n\t\tthis.threads = new ThreadsClient(config);\n\t\tthis.runs = new RunsClient(config);\n\t\tthis.crons = new CronsClient(config);\n\t\tthis.store = new StoreClient(config);\n\t\tthis[\"~ui\"] = new UiClient(config);\n\t}\n};\n/**\n* @internal Used to obtain a stable key representing the client.\n*/\nfunction getClientConfigHash(client) {\n\treturn client[\"~configHash\"];\n}\n\n//#endregion\nexport { AssistantsClient, Client, CronsClient, RunsClient, StoreClient, ThreadsClient, getApiKey, getClientConfigHash };\n//# sourceMappingURL=client.js.map"],"names":["UiClient"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,234 +1,11 @@
1
- import { isBaseMessage, _isMessageFieldWithRole } from "./index.es40.js";
2
- import { ToolMessage } from "./index.es44.js";
3
- import { addLangChainErrorFields } from "./index.es68.js";
4
- import { _isToolCall } from "./index.es69.js";
5
- import { parsePartialJson } from "./index.es70.js";
6
- import { ChatMessage, ChatMessageChunk } from "./index.es56.js";
7
- import { FunctionMessage, FunctionMessageChunk } from "./index.es57.js";
8
- import { HumanMessage, HumanMessageChunk } from "./index.es41.js";
9
- import { RemoveMessage } from "./index.es45.js";
10
- import { SystemMessage, SystemMessageChunk } from "./index.es43.js";
11
- import { AIMessage, AIMessageChunk } from "./index.es42.js";
12
- const iife = (fn) => fn();
13
- function _coerceToolCall(toolCall) {
14
- if (_isToolCall(toolCall)) return toolCall;
15
- else if (typeof toolCall.id === "string" && toolCall.type === "function" && typeof toolCall.function === "object" && toolCall.function !== null && "arguments" in toolCall.function && typeof toolCall.function.arguments === "string" && "name" in toolCall.function && typeof toolCall.function.name === "string") return {
16
- id: toolCall.id,
17
- args: JSON.parse(toolCall.function.arguments),
18
- name: toolCall.function.name,
19
- type: "tool_call"
20
- };
21
- else return toolCall;
1
+ function unique(array) {
2
+ return [...new Set(array)];
22
3
  }
23
- function isSerializedConstructor(x) {
24
- return typeof x === "object" && x != null && x.lc === 1 && Array.isArray(x.id) && x.kwargs != null && typeof x.kwargs === "object";
25
- }
26
- function _constructMessageFromParams(params) {
27
- let type;
28
- let rest;
29
- if (isSerializedConstructor(params)) {
30
- const className = params.id.at(-1);
31
- if (className === "HumanMessage" || className === "HumanMessageChunk") type = "user";
32
- else if (className === "AIMessage" || className === "AIMessageChunk") type = "assistant";
33
- else if (className === "SystemMessage" || className === "SystemMessageChunk") type = "system";
34
- else if (className === "FunctionMessage" || className === "FunctionMessageChunk") type = "function";
35
- else if (className === "ToolMessage" || className === "ToolMessageChunk") type = "tool";
36
- else type = "unknown";
37
- rest = params.kwargs;
38
- } else {
39
- const { type: extractedType, ...otherParams } = params;
40
- type = extractedType;
41
- rest = otherParams;
42
- }
43
- if (type === "human" || type === "user") return new HumanMessage(rest);
44
- else if (type === "ai" || type === "assistant") {
45
- const { tool_calls: rawToolCalls, ...other } = rest;
46
- if (!Array.isArray(rawToolCalls)) return new AIMessage(rest);
47
- const tool_calls = rawToolCalls.map(_coerceToolCall);
48
- return new AIMessage({
49
- ...other,
50
- tool_calls
51
- });
52
- } else if (type === "system") return new SystemMessage(rest);
53
- else if (type === "developer") return new SystemMessage({
54
- ...rest,
55
- additional_kwargs: {
56
- ...rest.additional_kwargs,
57
- __openai_role__: "developer"
58
- }
59
- });
60
- else if (type === "tool" && "tool_call_id" in rest) return new ToolMessage({
61
- ...rest,
62
- content: rest.content,
63
- tool_call_id: rest.tool_call_id,
64
- name: rest.name
65
- });
66
- else if (type === "remove" && "id" in rest && typeof rest.id === "string") return new RemoveMessage({
67
- ...rest,
68
- id: rest.id
69
- });
70
- else {
71
- const error = addLangChainErrorFields(/* @__PURE__ */ new Error(`Unable to coerce message from array: only human, AI, system, developer, or tool message coercion is currently supported.
72
-
73
- Received: ${JSON.stringify(params, null, 2)}`), "MESSAGE_COERCION_FAILURE");
74
- throw error;
75
- }
76
- }
77
- function coerceMessageLikeToMessage(messageLike) {
78
- if (typeof messageLike === "string") return new HumanMessage(messageLike);
79
- else if (isBaseMessage(messageLike)) return messageLike;
80
- if (Array.isArray(messageLike)) {
81
- const [type, content] = messageLike;
82
- return _constructMessageFromParams({
83
- type,
84
- content
85
- });
86
- } else if (_isMessageFieldWithRole(messageLike)) {
87
- const { role: type, ...rest } = messageLike;
88
- return _constructMessageFromParams({
89
- ...rest,
90
- type
91
- });
92
- } else return _constructMessageFromParams(messageLike);
93
- }
94
- function getBufferString(messages, humanPrefix = "Human", aiPrefix = "AI") {
95
- const string_messages = [];
96
- for (const m of messages) {
97
- let role;
98
- if (m.type === "human") role = humanPrefix;
99
- else if (m.type === "ai") role = aiPrefix;
100
- else if (m.type === "system") role = "System";
101
- else if (m.type === "tool") role = "Tool";
102
- else if (m.type === "generic") role = m.role;
103
- else throw new Error(`Got unsupported message type: ${m.type}`);
104
- const nameStr = m.name ? `${m.name}, ` : "";
105
- const readableContent = m.text;
106
- let message = `${role}: ${nameStr}${readableContent}`;
107
- if (m.type === "ai") {
108
- const aiMessage = m;
109
- if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) message += JSON.stringify(aiMessage.tool_calls);
110
- else if (aiMessage.additional_kwargs && "function_call" in aiMessage.additional_kwargs) message += JSON.stringify(aiMessage.additional_kwargs.function_call);
111
- }
112
- string_messages.push(message);
113
- }
114
- return string_messages.join("\n");
115
- }
116
- function mapV1MessageToStoredMessage(message) {
117
- if (message.data !== void 0) return message;
118
- else {
119
- const v1Message = message;
120
- return {
121
- type: v1Message.type,
122
- data: {
123
- content: v1Message.text,
124
- role: v1Message.role,
125
- name: void 0,
126
- tool_call_id: void 0
127
- }
128
- };
129
- }
130
- }
131
- function mapStoredMessageToChatMessage(message) {
132
- const storedMessage = mapV1MessageToStoredMessage(message);
133
- switch (storedMessage.type) {
134
- case "human":
135
- return new HumanMessage(storedMessage.data);
136
- case "ai":
137
- return new AIMessage(storedMessage.data);
138
- case "system":
139
- return new SystemMessage(storedMessage.data);
140
- case "function":
141
- if (storedMessage.data.name === void 0) throw new Error("Name must be defined for function messages");
142
- return new FunctionMessage(storedMessage.data);
143
- case "tool":
144
- if (storedMessage.data.tool_call_id === void 0) throw new Error("Tool call ID must be defined for tool messages");
145
- return new ToolMessage(storedMessage.data);
146
- case "generic":
147
- if (storedMessage.data.role === void 0) throw new Error("Role must be defined for chat messages");
148
- return new ChatMessage(storedMessage.data);
149
- default:
150
- throw new Error(`Got unexpected type: ${storedMessage.type}`);
151
- }
152
- }
153
- function mapStoredMessagesToChatMessages(messages) {
154
- return messages.map(mapStoredMessageToChatMessage);
155
- }
156
- function mapChatMessagesToStoredMessages(messages) {
157
- return messages.map((message) => message.toDict());
158
- }
159
- function convertToChunk(message) {
160
- const type = message._getType();
161
- if (type === "human") return new HumanMessageChunk({ ...message });
162
- else if (type === "ai") {
163
- let aiChunkFields = { ...message };
164
- if ("tool_calls" in aiChunkFields) aiChunkFields = {
165
- ...aiChunkFields,
166
- tool_call_chunks: aiChunkFields.tool_calls?.map((tc) => ({
167
- ...tc,
168
- type: "tool_call_chunk",
169
- index: void 0,
170
- args: JSON.stringify(tc.args)
171
- }))
172
- };
173
- return new AIMessageChunk({ ...aiChunkFields });
174
- } else if (type === "system") return new SystemMessageChunk({ ...message });
175
- else if (type === "function") return new FunctionMessageChunk({ ...message });
176
- else if (ChatMessage.isInstance(message)) return new ChatMessageChunk({ ...message });
177
- else throw new Error("Unknown message type.");
178
- }
179
- function collapseToolCallChunks(chunks) {
180
- const groupedToolCallChunks = chunks.reduce((acc, chunk) => {
181
- const matchedChunkIndex = acc.findIndex(([match]) => {
182
- if ("id" in chunk && chunk.id && "index" in chunk && chunk.index !== void 0) return chunk.id === match.id && chunk.index === match.index;
183
- if ("id" in chunk && chunk.id) return chunk.id === match.id;
184
- if ("index" in chunk && chunk.index !== void 0) return chunk.index === match.index;
185
- return false;
186
- });
187
- if (matchedChunkIndex !== -1) acc[matchedChunkIndex].push(chunk);
188
- else acc.push([chunk]);
189
- return acc;
190
- }, []);
191
- const toolCalls = [];
192
- const invalidToolCalls = [];
193
- for (const chunks$1 of groupedToolCallChunks) {
194
- let parsedArgs = null;
195
- const name = chunks$1[0]?.name ?? "";
196
- const joinedArgs = chunks$1.map((c) => c.args || "").join("").trim();
197
- const argsStr = joinedArgs.length ? joinedArgs : "{}";
198
- const id = chunks$1[0]?.id;
199
- try {
200
- parsedArgs = parsePartialJson(argsStr);
201
- if (!id || parsedArgs === null || typeof parsedArgs !== "object" || Array.isArray(parsedArgs)) throw new Error("Malformed tool call chunk args.");
202
- toolCalls.push({
203
- name,
204
- args: parsedArgs,
205
- id,
206
- type: "tool_call"
207
- });
208
- } catch {
209
- invalidToolCalls.push({
210
- name,
211
- args: argsStr,
212
- id,
213
- error: "Malformed args.",
214
- type: "invalid_tool_call"
215
- });
216
- }
217
- }
218
- return {
219
- tool_call_chunks: chunks,
220
- tool_calls: toolCalls,
221
- invalid_tool_calls: invalidToolCalls
222
- };
4
+ function findLast(array, predicate) {
5
+ for (let i = array.length - 1; i >= 0; i -= 1) if (predicate(array[i])) return array[i];
223
6
  }
224
7
  export {
225
- coerceMessageLikeToMessage,
226
- collapseToolCallChunks,
227
- convertToChunk,
228
- getBufferString,
229
- iife,
230
- mapChatMessagesToStoredMessages,
231
- mapStoredMessageToChatMessage,
232
- mapStoredMessagesToChatMessages
8
+ findLast,
9
+ unique
233
10
  };
234
11
  //# sourceMappingURL=index.es46.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es46.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/utils.js"],"sourcesContent":["import { _isMessageFieldWithRole, isBaseMessage } from \"./base.js\";\nimport { ToolMessage } from \"./tool.js\";\nimport { addLangChainErrorFields } from \"../errors/index.js\";\nimport { _isToolCall } from \"../tools/utils.js\";\nimport { parsePartialJson } from \"../utils/json.js\";\nimport { ChatMessage, ChatMessageChunk } from \"./chat.js\";\nimport { FunctionMessage, FunctionMessageChunk } from \"./function.js\";\nimport { HumanMessage, HumanMessageChunk } from \"./human.js\";\nimport { RemoveMessage } from \"./modifier.js\";\nimport { SystemMessage, SystemMessageChunk } from \"./system.js\";\nimport { AIMessage, AIMessageChunk } from \"./ai.js\";\n\n//#region src/messages/utils.ts\n/**\n* Immediately-invoked function expression.\n*\n* @param fn - The function to execute\n* @returns The result of the function\n*/\nconst iife = (fn) => fn();\nfunction _coerceToolCall(toolCall) {\n\tif (_isToolCall(toolCall)) return toolCall;\n\telse if (typeof toolCall.id === \"string\" && toolCall.type === \"function\" && typeof toolCall.function === \"object\" && toolCall.function !== null && \"arguments\" in toolCall.function && typeof toolCall.function.arguments === \"string\" && \"name\" in toolCall.function && typeof toolCall.function.name === \"string\") return {\n\t\tid: toolCall.id,\n\t\targs: JSON.parse(toolCall.function.arguments),\n\t\tname: toolCall.function.name,\n\t\ttype: \"tool_call\"\n\t};\n\telse return toolCall;\n}\nfunction isSerializedConstructor(x) {\n\treturn typeof x === \"object\" && x != null && x.lc === 1 && Array.isArray(x.id) && x.kwargs != null && typeof x.kwargs === \"object\";\n}\nfunction _constructMessageFromParams(params) {\n\tlet type;\n\tlet rest;\n\tif (isSerializedConstructor(params)) {\n\t\tconst className = params.id.at(-1);\n\t\tif (className === \"HumanMessage\" || className === \"HumanMessageChunk\") type = \"user\";\n\t\telse if (className === \"AIMessage\" || className === \"AIMessageChunk\") type = \"assistant\";\n\t\telse if (className === \"SystemMessage\" || className === \"SystemMessageChunk\") type = \"system\";\n\t\telse if (className === \"FunctionMessage\" || className === \"FunctionMessageChunk\") type = \"function\";\n\t\telse if (className === \"ToolMessage\" || className === \"ToolMessageChunk\") type = \"tool\";\n\t\telse type = \"unknown\";\n\t\trest = params.kwargs;\n\t} else {\n\t\tconst { type: extractedType,...otherParams } = params;\n\t\ttype = extractedType;\n\t\trest = otherParams;\n\t}\n\tif (type === \"human\" || type === \"user\") return new HumanMessage(rest);\n\telse if (type === \"ai\" || type === \"assistant\") {\n\t\tconst { tool_calls: rawToolCalls,...other } = rest;\n\t\tif (!Array.isArray(rawToolCalls)) return new AIMessage(rest);\n\t\tconst tool_calls = rawToolCalls.map(_coerceToolCall);\n\t\treturn new AIMessage({\n\t\t\t...other,\n\t\t\ttool_calls\n\t\t});\n\t} else if (type === \"system\") return new SystemMessage(rest);\n\telse if (type === \"developer\") return new SystemMessage({\n\t\t...rest,\n\t\tadditional_kwargs: {\n\t\t\t...rest.additional_kwargs,\n\t\t\t__openai_role__: \"developer\"\n\t\t}\n\t});\n\telse if (type === \"tool\" && \"tool_call_id\" in rest) return new ToolMessage({\n\t\t...rest,\n\t\tcontent: rest.content,\n\t\ttool_call_id: rest.tool_call_id,\n\t\tname: rest.name\n\t});\n\telse if (type === \"remove\" && \"id\" in rest && typeof rest.id === \"string\") return new RemoveMessage({\n\t\t...rest,\n\t\tid: rest.id\n\t});\n\telse {\n\t\tconst error = addLangChainErrorFields(/* @__PURE__ */ new Error(`Unable to coerce message from array: only human, AI, system, developer, or tool message coercion is currently supported.\\n\\nReceived: ${JSON.stringify(params, null, 2)}`), \"MESSAGE_COERCION_FAILURE\");\n\t\tthrow error;\n\t}\n}\nfunction coerceMessageLikeToMessage(messageLike) {\n\tif (typeof messageLike === \"string\") return new HumanMessage(messageLike);\n\telse if (isBaseMessage(messageLike)) return messageLike;\n\tif (Array.isArray(messageLike)) {\n\t\tconst [type, content] = messageLike;\n\t\treturn _constructMessageFromParams({\n\t\t\ttype,\n\t\t\tcontent\n\t\t});\n\t} else if (_isMessageFieldWithRole(messageLike)) {\n\t\tconst { role: type,...rest } = messageLike;\n\t\treturn _constructMessageFromParams({\n\t\t\t...rest,\n\t\t\ttype\n\t\t});\n\t} else return _constructMessageFromParams(messageLike);\n}\n/**\n* This function is used by memory classes to get a string representation\n* of the chat message history, based on the message content and role.\n*\n* Produces compact output like:\n* ```\n* Human: What's the weather?\n* AI: Let me check...[tool_calls]\n* Tool: 72°F and sunny\n* ```\n*\n* This avoids token inflation from metadata when stringifying message objects directly.\n*/\nfunction getBufferString(messages, humanPrefix = \"Human\", aiPrefix = \"AI\") {\n\tconst string_messages = [];\n\tfor (const m of messages) {\n\t\tlet role;\n\t\tif (m.type === \"human\") role = humanPrefix;\n\t\telse if (m.type === \"ai\") role = aiPrefix;\n\t\telse if (m.type === \"system\") role = \"System\";\n\t\telse if (m.type === \"tool\") role = \"Tool\";\n\t\telse if (m.type === \"generic\") role = m.role;\n\t\telse throw new Error(`Got unsupported message type: ${m.type}`);\n\t\tconst nameStr = m.name ? `${m.name}, ` : \"\";\n\t\tconst readableContent = m.text;\n\t\tlet message = `${role}: ${nameStr}${readableContent}`;\n\t\tif (m.type === \"ai\") {\n\t\t\tconst aiMessage = m;\n\t\t\tif (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) message += JSON.stringify(aiMessage.tool_calls);\n\t\t\telse if (aiMessage.additional_kwargs && \"function_call\" in aiMessage.additional_kwargs) message += JSON.stringify(aiMessage.additional_kwargs.function_call);\n\t\t}\n\t\tstring_messages.push(message);\n\t}\n\treturn string_messages.join(\"\\n\");\n}\n/**\n* Maps messages from an older format (V1) to the current `StoredMessage`\n* format. If the message is already in the `StoredMessage` format, it is\n* returned as is. Otherwise, it transforms the V1 message into a\n* `StoredMessage`. This function is important for maintaining\n* compatibility with older message formats.\n*/\nfunction mapV1MessageToStoredMessage(message) {\n\tif (message.data !== void 0) return message;\n\telse {\n\t\tconst v1Message = message;\n\t\treturn {\n\t\t\ttype: v1Message.type,\n\t\t\tdata: {\n\t\t\t\tcontent: v1Message.text,\n\t\t\t\trole: v1Message.role,\n\t\t\t\tname: void 0,\n\t\t\t\ttool_call_id: void 0\n\t\t\t}\n\t\t};\n\t}\n}\nfunction mapStoredMessageToChatMessage(message) {\n\tconst storedMessage = mapV1MessageToStoredMessage(message);\n\tswitch (storedMessage.type) {\n\t\tcase \"human\": return new HumanMessage(storedMessage.data);\n\t\tcase \"ai\": return new AIMessage(storedMessage.data);\n\t\tcase \"system\": return new SystemMessage(storedMessage.data);\n\t\tcase \"function\":\n\t\t\tif (storedMessage.data.name === void 0) throw new Error(\"Name must be defined for function messages\");\n\t\t\treturn new FunctionMessage(storedMessage.data);\n\t\tcase \"tool\":\n\t\t\tif (storedMessage.data.tool_call_id === void 0) throw new Error(\"Tool call ID must be defined for tool messages\");\n\t\t\treturn new ToolMessage(storedMessage.data);\n\t\tcase \"generic\":\n\t\t\tif (storedMessage.data.role === void 0) throw new Error(\"Role must be defined for chat messages\");\n\t\t\treturn new ChatMessage(storedMessage.data);\n\t\tdefault: throw new Error(`Got unexpected type: ${storedMessage.type}`);\n\t}\n}\n/**\n* Transforms an array of `StoredMessage` instances into an array of\n* `BaseMessage` instances. It uses the `mapV1MessageToStoredMessage`\n* function to ensure all messages are in the `StoredMessage` format, then\n* creates new instances of the appropriate `BaseMessage` subclass based\n* on the type of each message. This function is used to prepare stored\n* messages for use in a chat context.\n*/\nfunction mapStoredMessagesToChatMessages(messages) {\n\treturn messages.map(mapStoredMessageToChatMessage);\n}\n/**\n* Transforms an array of `BaseMessage` instances into an array of\n* `StoredMessage` instances. It does this by calling the `toDict` method\n* on each `BaseMessage`, which returns a `StoredMessage`. This function\n* is used to prepare chat messages for storage.\n*/\nfunction mapChatMessagesToStoredMessages(messages) {\n\treturn messages.map((message) => message.toDict());\n}\nfunction convertToChunk(message) {\n\tconst type = message._getType();\n\tif (type === \"human\") return new HumanMessageChunk({ ...message });\n\telse if (type === \"ai\") {\n\t\tlet aiChunkFields = { ...message };\n\t\tif (\"tool_calls\" in aiChunkFields) aiChunkFields = {\n\t\t\t...aiChunkFields,\n\t\t\ttool_call_chunks: aiChunkFields.tool_calls?.map((tc) => ({\n\t\t\t\t...tc,\n\t\t\t\ttype: \"tool_call_chunk\",\n\t\t\t\tindex: void 0,\n\t\t\t\targs: JSON.stringify(tc.args)\n\t\t\t}))\n\t\t};\n\t\treturn new AIMessageChunk({ ...aiChunkFields });\n\t} else if (type === \"system\") return new SystemMessageChunk({ ...message });\n\telse if (type === \"function\") return new FunctionMessageChunk({ ...message });\n\telse if (ChatMessage.isInstance(message)) return new ChatMessageChunk({ ...message });\n\telse throw new Error(\"Unknown message type.\");\n}\n/**\n* Collapses an array of tool call chunks into complete tool calls.\n*\n* This function groups tool call chunks by their id and/or index, then attempts to\n* parse and validate the accumulated arguments for each group. Successfully parsed\n* tool calls are returned as valid `ToolCall` objects, while malformed ones are\n* returned as `InvalidToolCall` objects.\n*\n* @param chunks - An array of `ToolCallChunk` objects to collapse\n* @returns An object containing:\n* - `tool_call_chunks`: The original input chunks\n* - `tool_calls`: An array of successfully parsed and validated tool calls\n* - `invalid_tool_calls`: An array of tool calls that failed parsing or validation\n*\n* @remarks\n* Chunks are grouped using the following matching logic:\n* - If a chunk has both an id and index, it matches chunks with the same id and index\n* - If a chunk has only an id, it matches chunks with the same id\n* - If a chunk has only an index, it matches chunks with the same index\n*\n* For each group, the function:\n* 1. Concatenates all `args` strings from the chunks\n* 2. Attempts to parse the concatenated string as JSON\n* 3. Validates that the result is a non-null object with a valid id\n* 4. Creates either a `ToolCall` (if valid) or `InvalidToolCall` (if invalid)\n*/\nfunction collapseToolCallChunks(chunks) {\n\tconst groupedToolCallChunks = chunks.reduce((acc, chunk) => {\n\t\tconst matchedChunkIndex = acc.findIndex(([match]) => {\n\t\t\tif (\"id\" in chunk && chunk.id && \"index\" in chunk && chunk.index !== void 0) return chunk.id === match.id && chunk.index === match.index;\n\t\t\tif (\"id\" in chunk && chunk.id) return chunk.id === match.id;\n\t\t\tif (\"index\" in chunk && chunk.index !== void 0) return chunk.index === match.index;\n\t\t\treturn false;\n\t\t});\n\t\tif (matchedChunkIndex !== -1) acc[matchedChunkIndex].push(chunk);\n\t\telse acc.push([chunk]);\n\t\treturn acc;\n\t}, []);\n\tconst toolCalls = [];\n\tconst invalidToolCalls = [];\n\tfor (const chunks$1 of groupedToolCallChunks) {\n\t\tlet parsedArgs = null;\n\t\tconst name = chunks$1[0]?.name ?? \"\";\n\t\tconst joinedArgs = chunks$1.map((c) => c.args || \"\").join(\"\").trim();\n\t\tconst argsStr = joinedArgs.length ? joinedArgs : \"{}\";\n\t\tconst id = chunks$1[0]?.id;\n\t\ttry {\n\t\t\tparsedArgs = parsePartialJson(argsStr);\n\t\t\tif (!id || parsedArgs === null || typeof parsedArgs !== \"object\" || Array.isArray(parsedArgs)) throw new Error(\"Malformed tool call chunk args.\");\n\t\t\ttoolCalls.push({\n\t\t\t\tname,\n\t\t\t\targs: parsedArgs,\n\t\t\t\tid,\n\t\t\t\ttype: \"tool_call\"\n\t\t\t});\n\t\t} catch {\n\t\t\tinvalidToolCalls.push({\n\t\t\t\tname,\n\t\t\t\targs: argsStr,\n\t\t\t\tid,\n\t\t\t\terror: \"Malformed args.\",\n\t\t\t\ttype: \"invalid_tool_call\"\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\ttool_call_chunks: chunks,\n\t\ttool_calls: toolCalls,\n\t\tinvalid_tool_calls: invalidToolCalls\n\t};\n}\n\n//#endregion\nexport { coerceMessageLikeToMessage, collapseToolCallChunks, convertToChunk, getBufferString, iife, mapChatMessagesToStoredMessages, mapStoredMessageToChatMessage, mapStoredMessagesToChatMessages };\n//# sourceMappingURL=utils.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es46.js","sources":["../node_modules/.pnpm/@langchain+langgraph-sdk@1.5.3_@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5___react-d_6e8116ad15c37793c6138fe0d58aa04e/node_modules/@langchain/langgraph-sdk/dist/ui/utils.js"],"sourcesContent":["//#region src/ui/utils.ts\nfunction unique(array) {\n\treturn [...new Set(array)];\n}\nfunction findLast(array, predicate) {\n\tfor (let i = array.length - 1; i >= 0; i -= 1) if (predicate(array[i])) return array[i];\n}\n\n//#endregion\nexport { findLast, unique };\n//# sourceMappingURL=utils.js.map"],"names":[],"mappings":"AACA,SAAS,OAAO,OAAO;AACtB,SAAO,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC;AAC1B;AACA,SAAS,SAAS,OAAO,WAAW;AACnC,WAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,EAAG,KAAI,UAAU,MAAM,CAAC,CAAC,EAAG,QAAO,MAAM,CAAC;AACvF;","x_google_ignoreList":[0]}
@@ -1,20 +1,151 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import ReactMarkdown from "react-markdown";
3
- import remarkGfm from "remark-gfm";
4
- import remarkBreaks from "remark-breaks";
5
- import remarkMath from "remark-math";
6
- import rehypeHighlight from "rehype-highlight";
7
- function AgentMarkdown({ content }) {
8
- return /* @__PURE__ */ jsx(
9
- ReactMarkdown,
10
- {
11
- remarkPlugins: [remarkGfm, remarkBreaks, remarkMath],
12
- rehypePlugins: [rehypeHighlight],
13
- children: content
1
+ function getBranchSequence(history) {
2
+ const nodeIds = /* @__PURE__ */ new Set();
3
+ const childrenMap = {};
4
+ if (history.length <= 1) return {
5
+ rootSequence: {
6
+ type: "sequence",
7
+ items: history.map((value) => ({
8
+ type: "node",
9
+ value,
10
+ path: []
11
+ }))
12
+ },
13
+ paths: []
14
+ };
15
+ history.forEach((state) => {
16
+ const checkpointId = state.parent_checkpoint?.checkpoint_id ?? "$";
17
+ childrenMap[checkpointId] ??= [];
18
+ childrenMap[checkpointId].push(state);
19
+ if (state.checkpoint?.checkpoint_id != null) nodeIds.add(state.checkpoint.checkpoint_id);
20
+ });
21
+ const maxId = (...ids) => ids.filter((i) => i != null).sort((a, b) => a.localeCompare(b)).at(-1);
22
+ const lastOrphanedNode = childrenMap.$ == null ? Object.keys(childrenMap).filter((parentId) => !nodeIds.has(parentId)).map((parentId) => {
23
+ const queue$1 = [parentId];
24
+ const seen = /* @__PURE__ */ new Set();
25
+ let lastId = parentId;
26
+ while (queue$1.length > 0) {
27
+ const current = queue$1.shift();
28
+ if (seen.has(current)) continue;
29
+ seen.add(current);
30
+ const children = (childrenMap[current] ?? []).flatMap((i) => i.checkpoint?.checkpoint_id ?? []);
31
+ lastId = maxId(lastId, ...children);
32
+ queue$1.push(...children);
14
33
  }
15
- );
34
+ return {
35
+ parentId,
36
+ lastId
37
+ };
38
+ }).sort((a, b) => a.lastId.localeCompare(b.lastId)).at(-1)?.parentId : void 0;
39
+ if (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];
40
+ const rootSequence = {
41
+ type: "sequence",
42
+ items: []
43
+ };
44
+ const queue = [{
45
+ id: "$",
46
+ sequence: rootSequence,
47
+ path: []
48
+ }];
49
+ const paths = [];
50
+ const visited = /* @__PURE__ */ new Set();
51
+ while (queue.length > 0) {
52
+ const task = queue.shift();
53
+ if (visited.has(task.id)) continue;
54
+ visited.add(task.id);
55
+ const children = childrenMap[task.id];
56
+ if (children == null || children.length === 0) continue;
57
+ let fork;
58
+ if (children.length > 1) {
59
+ fork = {
60
+ type: "fork",
61
+ items: []
62
+ };
63
+ task.sequence.items.push(fork);
64
+ }
65
+ for (const value of children) {
66
+ const id = value.checkpoint?.checkpoint_id;
67
+ if (id == null) continue;
68
+ let { sequence } = task;
69
+ let { path } = task;
70
+ if (fork != null) {
71
+ sequence = {
72
+ type: "sequence",
73
+ items: []
74
+ };
75
+ fork.items.unshift(sequence);
76
+ path = path.slice();
77
+ path.push(id);
78
+ paths.push(path);
79
+ }
80
+ sequence.items.push({
81
+ type: "node",
82
+ value,
83
+ path
84
+ });
85
+ queue.push({
86
+ id,
87
+ sequence,
88
+ path
89
+ });
90
+ }
91
+ }
92
+ return {
93
+ rootSequence,
94
+ paths
95
+ };
96
+ }
97
+ const PATH_SEP = ">";
98
+ const ROOT_ID = "$";
99
+ function getBranchView(sequence, paths, branch) {
100
+ const path = branch.split(PATH_SEP);
101
+ const pathMap = {};
102
+ for (const path$1 of paths) {
103
+ const parent = path$1.at(-2) ?? ROOT_ID;
104
+ pathMap[parent] ??= [];
105
+ pathMap[parent].unshift(path$1);
106
+ }
107
+ const history = [];
108
+ const branchByCheckpoint = {};
109
+ const forkStack = path.slice();
110
+ const queue = [...sequence.items];
111
+ while (queue.length > 0) {
112
+ const item = queue.shift();
113
+ if (item.type === "node") {
114
+ history.push(item.value);
115
+ const checkpointId = item.value.checkpoint?.checkpoint_id;
116
+ if (checkpointId == null) continue;
117
+ branchByCheckpoint[checkpointId] = {
118
+ branch: item.path.join(PATH_SEP),
119
+ branchOptions: (item.path.length > 0 ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? [] : []).map((p) => p.join(PATH_SEP))
120
+ };
121
+ }
122
+ if (item.type === "fork") {
123
+ const forkId = forkStack.shift();
124
+ const index = forkId != null ? item.items.findIndex((value) => {
125
+ const firstItem = value.items.at(0);
126
+ if (!firstItem || firstItem.type !== "node") return false;
127
+ return firstItem.value.checkpoint?.checkpoint_id === forkId;
128
+ }) : -1;
129
+ const nextItems = item.items.at(index)?.items ?? [];
130
+ queue.push(...nextItems);
131
+ }
132
+ }
133
+ return {
134
+ history,
135
+ branchByCheckpoint
136
+ };
137
+ }
138
+ function getBranchContext(branch, history) {
139
+ const { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);
140
+ const { history: flatHistory, branchByCheckpoint } = getBranchView(branchTree, paths, branch);
141
+ return {
142
+ branchTree,
143
+ flatHistory,
144
+ branchByCheckpoint,
145
+ threadHead: flatHistory.at(-1)
146
+ };
16
147
  }
17
148
  export {
18
- AgentMarkdown
149
+ getBranchContext
19
150
  };
20
151
  //# sourceMappingURL=index.es47.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es47.js","sources":["../src/components/messages/AgentMarkdown.tsx"],"sourcesContent":["import ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkBreaks from \"remark-breaks\";\nimport remarkMath from \"remark-math\";\nimport rehypeHighlight from \"rehype-highlight\";\n// import \"highlight.js/styles/github.css\";\n\nexport function AgentMarkdown({ content }: { content: string }) {\n return (\n <ReactMarkdown\n remarkPlugins={[remarkGfm, remarkBreaks, remarkMath]}\n rehypePlugins={[rehypeHighlight]}\n >\n {content}\n </ReactMarkdown>\n );\n}\n"],"names":[],"mappings":";;;;;;AAOO,SAAS,cAAc,EAAE,WAAgC;AAC9D,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,eAAe,CAAC,WAAW,cAAc,UAAU;AAAA,MACnD,eAAe,CAAC,eAAe;AAAA,MAE9B,UAAA;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"index.es47.js","sources":["../node_modules/.pnpm/@langchain+langgraph-sdk@1.5.3_@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5___react-d_6e8116ad15c37793c6138fe0d58aa04e/node_modules/@langchain/langgraph-sdk/dist/ui/branching.js"],"sourcesContent":["//#region src/ui/branching.ts\nfunction getBranchSequence(history) {\n\tconst nodeIds = /* @__PURE__ */ new Set();\n\tconst childrenMap = {};\n\tif (history.length <= 1) return {\n\t\trootSequence: {\n\t\t\ttype: \"sequence\",\n\t\t\titems: history.map((value) => ({\n\t\t\t\ttype: \"node\",\n\t\t\t\tvalue,\n\t\t\t\tpath: []\n\t\t\t}))\n\t\t},\n\t\tpaths: []\n\t};\n\thistory.forEach((state) => {\n\t\tconst checkpointId = state.parent_checkpoint?.checkpoint_id ?? \"$\";\n\t\tchildrenMap[checkpointId] ??= [];\n\t\tchildrenMap[checkpointId].push(state);\n\t\tif (state.checkpoint?.checkpoint_id != null) nodeIds.add(state.checkpoint.checkpoint_id);\n\t});\n\tconst maxId = (...ids) => ids.filter((i) => i != null).sort((a, b) => a.localeCompare(b)).at(-1);\n\tconst lastOrphanedNode = childrenMap.$ == null ? Object.keys(childrenMap).filter((parentId) => !nodeIds.has(parentId)).map((parentId) => {\n\t\tconst queue$1 = [parentId];\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tlet lastId = parentId;\n\t\twhile (queue$1.length > 0) {\n\t\t\tconst current = queue$1.shift();\n\t\t\tif (seen.has(current)) continue;\n\t\t\tseen.add(current);\n\t\t\tconst children = (childrenMap[current] ?? []).flatMap((i) => i.checkpoint?.checkpoint_id ?? []);\n\t\t\tlastId = maxId(lastId, ...children);\n\t\t\tqueue$1.push(...children);\n\t\t}\n\t\treturn {\n\t\t\tparentId,\n\t\t\tlastId\n\t\t};\n\t}).sort((a, b) => a.lastId.localeCompare(b.lastId)).at(-1)?.parentId : void 0;\n\tif (lastOrphanedNode != null) childrenMap.$ = childrenMap[lastOrphanedNode];\n\tconst rootSequence = {\n\t\ttype: \"sequence\",\n\t\titems: []\n\t};\n\tconst queue = [{\n\t\tid: \"$\",\n\t\tsequence: rootSequence,\n\t\tpath: []\n\t}];\n\tconst paths = [];\n\tconst visited = /* @__PURE__ */ new Set();\n\twhile (queue.length > 0) {\n\t\tconst task = queue.shift();\n\t\tif (visited.has(task.id)) continue;\n\t\tvisited.add(task.id);\n\t\tconst children = childrenMap[task.id];\n\t\tif (children == null || children.length === 0) continue;\n\t\tlet fork;\n\t\tif (children.length > 1) {\n\t\t\tfork = {\n\t\t\t\ttype: \"fork\",\n\t\t\t\titems: []\n\t\t\t};\n\t\t\ttask.sequence.items.push(fork);\n\t\t}\n\t\tfor (const value of children) {\n\t\t\tconst id = value.checkpoint?.checkpoint_id;\n\t\t\tif (id == null) continue;\n\t\t\tlet { sequence } = task;\n\t\t\tlet { path } = task;\n\t\t\tif (fork != null) {\n\t\t\t\tsequence = {\n\t\t\t\t\ttype: \"sequence\",\n\t\t\t\t\titems: []\n\t\t\t\t};\n\t\t\t\tfork.items.unshift(sequence);\n\t\t\t\tpath = path.slice();\n\t\t\t\tpath.push(id);\n\t\t\t\tpaths.push(path);\n\t\t\t}\n\t\t\tsequence.items.push({\n\t\t\t\ttype: \"node\",\n\t\t\t\tvalue,\n\t\t\t\tpath\n\t\t\t});\n\t\t\tqueue.push({\n\t\t\t\tid,\n\t\t\t\tsequence,\n\t\t\t\tpath\n\t\t\t});\n\t\t}\n\t}\n\treturn {\n\t\trootSequence,\n\t\tpaths\n\t};\n}\nconst PATH_SEP = \">\";\nconst ROOT_ID = \"$\";\nfunction getBranchView(sequence, paths, branch) {\n\tconst path = branch.split(PATH_SEP);\n\tconst pathMap = {};\n\tfor (const path$1 of paths) {\n\t\tconst parent = path$1.at(-2) ?? ROOT_ID;\n\t\tpathMap[parent] ??= [];\n\t\tpathMap[parent].unshift(path$1);\n\t}\n\tconst history = [];\n\tconst branchByCheckpoint = {};\n\tconst forkStack = path.slice();\n\tconst queue = [...sequence.items];\n\twhile (queue.length > 0) {\n\t\tconst item = queue.shift();\n\t\tif (item.type === \"node\") {\n\t\t\thistory.push(item.value);\n\t\t\tconst checkpointId = item.value.checkpoint?.checkpoint_id;\n\t\t\tif (checkpointId == null) continue;\n\t\t\tbranchByCheckpoint[checkpointId] = {\n\t\t\t\tbranch: item.path.join(PATH_SEP),\n\t\t\t\tbranchOptions: (item.path.length > 0 ? pathMap[item.path.at(-2) ?? ROOT_ID] ?? [] : []).map((p) => p.join(PATH_SEP))\n\t\t\t};\n\t\t}\n\t\tif (item.type === \"fork\") {\n\t\t\tconst forkId = forkStack.shift();\n\t\t\tconst index = forkId != null ? item.items.findIndex((value) => {\n\t\t\t\tconst firstItem = value.items.at(0);\n\t\t\t\tif (!firstItem || firstItem.type !== \"node\") return false;\n\t\t\t\treturn firstItem.value.checkpoint?.checkpoint_id === forkId;\n\t\t\t}) : -1;\n\t\t\tconst nextItems = item.items.at(index)?.items ?? [];\n\t\t\tqueue.push(...nextItems);\n\t\t}\n\t}\n\treturn {\n\t\thistory,\n\t\tbranchByCheckpoint\n\t};\n}\nfunction getBranchContext(branch, history) {\n\tconst { rootSequence: branchTree, paths } = getBranchSequence(history ?? []);\n\tconst { history: flatHistory, branchByCheckpoint } = getBranchView(branchTree, paths, branch);\n\treturn {\n\t\tbranchTree,\n\t\tflatHistory,\n\t\tbranchByCheckpoint,\n\t\tthreadHead: flatHistory.at(-1)\n\t};\n}\n\n//#endregion\nexport { getBranchContext };\n//# sourceMappingURL=branching.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}