langgraph-ui-components 0.0.10 → 0.0.11-testing

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 (393) hide show
  1. package/dist/index.es.js +3 -2
  2. package/dist/index.es10.js +25 -6
  3. package/dist/index.es10.js.map +1 -1
  4. package/dist/index.es100.js +131 -64
  5. package/dist/index.es100.js.map +1 -1
  6. package/dist/index.es101.js +65 -32
  7. package/dist/index.es101.js.map +1 -1
  8. package/dist/index.es102.js +34 -34
  9. package/dist/index.es102.js.map +1 -1
  10. package/dist/index.es103.js +35 -164
  11. package/dist/index.es103.js.map +1 -1
  12. package/dist/index.es104.js +156 -193
  13. package/dist/index.es104.js.map +1 -1
  14. package/dist/index.es105.js +202 -13
  15. package/dist/index.es105.js.map +1 -1
  16. package/dist/index.es106.js +13 -29
  17. package/dist/index.es106.js.map +1 -1
  18. package/dist/index.es107.js +25 -29
  19. package/dist/index.es107.js.map +1 -1
  20. package/dist/index.es108.js +24 -3147
  21. package/dist/index.es108.js.map +1 -1
  22. package/dist/index.es109.js +3151 -31
  23. package/dist/index.es109.js.map +1 -1
  24. package/dist/index.es110.js +21 -5
  25. package/dist/index.es110.js.map +1 -1
  26. package/dist/index.es111.js +64 -69
  27. package/dist/index.es111.js.map +1 -1
  28. package/dist/index.es112.js +3 -37
  29. package/dist/index.es112.js.map +1 -1
  30. package/dist/index.es113.js +16 -5
  31. package/dist/index.es113.js.map +1 -1
  32. package/dist/index.es114.js +7 -2
  33. package/dist/index.es114.js.map +1 -1
  34. package/dist/index.es115.js +2 -13
  35. package/dist/index.es115.js.map +1 -1
  36. package/dist/index.es116.js +9 -499
  37. package/dist/index.es116.js.map +1 -1
  38. package/dist/index.es117.js +501 -5
  39. package/dist/index.es117.js.map +1 -1
  40. package/dist/index.es118.js +7 -2
  41. package/dist/index.es118.js.map +1 -1
  42. package/dist/index.es119.js +2 -148
  43. package/dist/index.es119.js.map +1 -1
  44. package/dist/index.es120.js +118 -878
  45. package/dist/index.es120.js.map +1 -1
  46. package/dist/index.es121.js +877 -251
  47. package/dist/index.es121.js.map +1 -1
  48. package/dist/index.es122.js +281 -3
  49. package/dist/index.es122.js.map +1 -1
  50. package/dist/index.es123.js +3 -445
  51. package/dist/index.es123.js.map +1 -1
  52. package/dist/index.es124.js +437 -39
  53. package/dist/index.es124.js.map +1 -1
  54. package/dist/index.es125.js +46 -22
  55. package/dist/index.es125.js.map +1 -1
  56. package/dist/index.es126.js +21 -78
  57. package/dist/index.es126.js.map +1 -1
  58. package/dist/index.es127.js +76 -126
  59. package/dist/index.es127.js.map +1 -1
  60. package/dist/index.es128.js +125 -45
  61. package/dist/index.es128.js.map +1 -1
  62. package/dist/index.es129.js +48 -9
  63. package/dist/index.es129.js.map +1 -1
  64. package/dist/index.es130.js +10 -45
  65. package/dist/index.es130.js.map +1 -1
  66. package/dist/index.es131.js +43 -97
  67. package/dist/index.es131.js.map +1 -1
  68. package/dist/index.es132.js +94 -48
  69. package/dist/index.es132.js.map +1 -1
  70. package/dist/index.es133.js +51 -14
  71. package/dist/index.es133.js.map +1 -1
  72. package/dist/index.es134.js +1 -1
  73. package/dist/index.es135.js +1 -1
  74. package/dist/index.es138.js +1 -1
  75. package/dist/index.es139.js +1 -1
  76. package/dist/index.es140.js +1 -1
  77. package/dist/index.es141.js +1 -1
  78. package/dist/index.es142.js +1 -1
  79. package/dist/index.es143.js +1 -1
  80. package/dist/index.es144.js +1 -1
  81. package/dist/index.es145.js +1 -1
  82. package/dist/index.es146.js +1 -1
  83. package/dist/index.es147.js +1 -1
  84. package/dist/index.es148.js +1 -1
  85. package/dist/index.es149.js +1 -1
  86. package/dist/index.es150.js +1 -1
  87. package/dist/index.es151.js +1 -1
  88. package/dist/index.es152.js +1 -1
  89. package/dist/index.es153.js +1 -1
  90. package/dist/index.es154.js +1 -1
  91. package/dist/index.es155.js +1 -1
  92. package/dist/index.es156.js +1 -1
  93. package/dist/index.es157.js +1 -1
  94. package/dist/index.es158.js +1 -1
  95. package/dist/index.es159.js +1 -1
  96. package/dist/index.es16.js +3 -3
  97. package/dist/index.es16.js.map +1 -1
  98. package/dist/index.es160.js +1 -1
  99. package/dist/index.es161.js +1 -1
  100. package/dist/index.es162.js +1 -1
  101. package/dist/index.es163.js +1 -1
  102. package/dist/index.es164.js +1 -1
  103. package/dist/index.es165.js +1 -1
  104. package/dist/index.es166.js +1 -1
  105. package/dist/index.es167.js +1 -1
  106. package/dist/index.es168.js +1 -1
  107. package/dist/index.es169.js +1 -1
  108. package/dist/index.es170.js +1 -1
  109. package/dist/index.es171.js +1 -1
  110. package/dist/index.es172.js +1 -1
  111. package/dist/index.es173.js +1 -1
  112. package/dist/index.es174.js +1 -1
  113. package/dist/index.es175.js +1 -1
  114. package/dist/index.es176.js +1 -1
  115. package/dist/index.es177.js +1 -1
  116. package/dist/index.es178.js +1 -1
  117. package/dist/index.es179.js +1 -1
  118. package/dist/index.es18.js +15 -15
  119. package/dist/index.es180.js +1 -1
  120. package/dist/index.es181.js +1 -1
  121. package/dist/index.es182.js +1 -1
  122. package/dist/index.es183.js +162 -13
  123. package/dist/index.es183.js.map +1 -1
  124. package/dist/index.es184.js +2 -89
  125. package/dist/index.es184.js.map +1 -1
  126. package/dist/index.es185.js +15 -2
  127. package/dist/index.es185.js.map +1 -1
  128. package/dist/index.es186.js +89 -2
  129. package/dist/index.es186.js.map +1 -1
  130. package/dist/index.es187.js +2 -2
  131. package/dist/index.es188.js +56 -2
  132. package/dist/index.es188.js.map +1 -1
  133. package/dist/index.es189.js +100 -2
  134. package/dist/index.es189.js.map +1 -1
  135. package/dist/index.es190.js +191 -2
  136. package/dist/index.es190.js.map +1 -1
  137. package/dist/index.es191.js +110 -2
  138. package/dist/index.es191.js.map +1 -1
  139. package/dist/index.es192.js +35 -2
  140. package/dist/index.es192.js.map +1 -1
  141. package/dist/index.es193.js +10 -2
  142. package/dist/index.es193.js.map +1 -1
  143. package/dist/index.es194.js +11 -2
  144. package/dist/index.es194.js.map +1 -1
  145. package/dist/index.es195.js +12 -2
  146. package/dist/index.es195.js.map +1 -1
  147. package/dist/index.es196.js +91 -2
  148. package/dist/index.es196.js.map +1 -1
  149. package/dist/index.es197.js +275 -2
  150. package/dist/index.es197.js.map +1 -1
  151. package/dist/index.es198.js +2 -2
  152. package/dist/index.es199.js +164 -2
  153. package/dist/index.es199.js.map +1 -1
  154. package/dist/index.es200.js +51 -2
  155. package/dist/index.es200.js.map +1 -1
  156. package/dist/index.es201.js +40 -2
  157. package/dist/index.es201.js.map +1 -1
  158. package/dist/index.es202.js +35 -2
  159. package/dist/index.es202.js.map +1 -1
  160. package/dist/index.es203.js +40 -2
  161. package/dist/index.es203.js.map +1 -1
  162. package/dist/index.es204.js +24 -2
  163. package/dist/index.es204.js.map +1 -1
  164. package/dist/index.es205.js +591 -2
  165. package/dist/index.es205.js.map +1 -1
  166. package/dist/index.es206.js +125 -2
  167. package/dist/index.es206.js.map +1 -1
  168. package/dist/index.es207.js +2 -2
  169. package/dist/index.es208.js +2 -2
  170. package/dist/index.es209.js +2 -2
  171. package/dist/index.es210.js +2 -2
  172. package/dist/index.es211.js +2 -2
  173. package/dist/index.es212.js +2 -2
  174. package/dist/index.es213.js +2 -2
  175. package/dist/index.es214.js +2 -2
  176. package/dist/index.es215.js +2 -2
  177. package/dist/index.es216.js +2 -2
  178. package/dist/index.es217.js +2 -2
  179. package/dist/index.es218.js +2 -2
  180. package/dist/index.es219.js +2 -2
  181. package/dist/index.es220.js +2 -2
  182. package/dist/index.es221.js +2 -2
  183. package/dist/index.es222.js +2 -2
  184. package/dist/index.es223.js +2 -2
  185. package/dist/index.es224.js +2 -2
  186. package/dist/index.es225.js +2 -2
  187. package/dist/index.es226.js +2 -2
  188. package/dist/index.es227.js +2 -2
  189. package/dist/index.es228.js +2 -2
  190. package/dist/index.es229.js +2 -2
  191. package/dist/index.es230.js +2 -2
  192. package/dist/index.es231.js +2 -56
  193. package/dist/index.es231.js.map +1 -1
  194. package/dist/index.es232.js +2 -100
  195. package/dist/index.es232.js.map +1 -1
  196. package/dist/index.es233.js +2 -191
  197. package/dist/index.es233.js.map +1 -1
  198. package/dist/index.es234.js +2 -110
  199. package/dist/index.es234.js.map +1 -1
  200. package/dist/index.es235.js +2 -35
  201. package/dist/index.es235.js.map +1 -1
  202. package/dist/index.es236.js +2 -10
  203. package/dist/index.es236.js.map +1 -1
  204. package/dist/index.es237.js +2 -11
  205. package/dist/index.es237.js.map +1 -1
  206. package/dist/index.es238.js +2 -12
  207. package/dist/index.es238.js.map +1 -1
  208. package/dist/index.es239.js +2 -91
  209. package/dist/index.es239.js.map +1 -1
  210. package/dist/index.es24.js +1 -1
  211. package/dist/index.es240.js +2 -275
  212. package/dist/index.es240.js.map +1 -1
  213. package/dist/index.es241.js +2 -2
  214. package/dist/index.es242.js +2 -164
  215. package/dist/index.es242.js.map +1 -1
  216. package/dist/index.es243.js +2 -51
  217. package/dist/index.es243.js.map +1 -1
  218. package/dist/index.es244.js +2 -40
  219. package/dist/index.es244.js.map +1 -1
  220. package/dist/index.es245.js +2 -35
  221. package/dist/index.es245.js.map +1 -1
  222. package/dist/index.es246.js +2 -40
  223. package/dist/index.es246.js.map +1 -1
  224. package/dist/index.es247.js +2 -24
  225. package/dist/index.es247.js.map +1 -1
  226. package/dist/index.es248.js +2 -591
  227. package/dist/index.es248.js.map +1 -1
  228. package/dist/index.es249.js +2 -125
  229. package/dist/index.es249.js.map +1 -1
  230. package/dist/index.es25.js +3 -1
  231. package/dist/index.es25.js.map +1 -1
  232. package/dist/index.es250.js +2 -164
  233. package/dist/index.es250.js.map +1 -1
  234. package/dist/index.es251.js +2 -2
  235. package/dist/index.es252.js +2 -2
  236. package/dist/index.es253.js +1 -1
  237. package/dist/index.es258.js +1 -1
  238. package/dist/index.es260.js +2 -2
  239. package/dist/index.es262.js +2 -2
  240. package/dist/index.es265.js +1 -1
  241. package/dist/index.es267.js +1 -1
  242. package/dist/index.es277.js +2 -147
  243. package/dist/index.es277.js.map +1 -1
  244. package/dist/index.es278.js +126 -167
  245. package/dist/index.es278.js.map +1 -1
  246. package/dist/index.es279.js +188 -2
  247. package/dist/index.es279.js.map +1 -1
  248. package/dist/index.es280.js +1 -1
  249. package/dist/index.es283.js +1 -1
  250. package/dist/index.es288.js +1 -1
  251. package/dist/index.es29.js +1 -1
  252. package/dist/index.es3.js +24 -9
  253. package/dist/index.es3.js.map +1 -1
  254. package/dist/index.es300.js +1 -1
  255. package/dist/index.es302.js +1 -1
  256. package/dist/index.es31.js +7 -7
  257. package/dist/index.es314.js +1 -1
  258. package/dist/index.es32.js +1 -1
  259. package/dist/index.es334.js +2 -2
  260. package/dist/index.es35.js +4 -4
  261. package/dist/index.es36.js +1185 -111
  262. package/dist/index.es36.js.map +1 -1
  263. package/dist/index.es37.js +7 -71
  264. package/dist/index.es37.js.map +1 -1
  265. package/dist/index.es38.js +9 -18
  266. package/dist/index.es38.js.map +1 -1
  267. package/dist/index.es39.js +136 -250
  268. package/dist/index.es39.js.map +1 -1
  269. package/dist/index.es4.js +2 -1
  270. package/dist/index.es4.js.map +1 -1
  271. package/dist/index.es40.js +116 -41
  272. package/dist/index.es40.js.map +1 -1
  273. package/dist/index.es41.js +64 -208
  274. package/dist/index.es41.js.map +1 -1
  275. package/dist/index.es42.js +17 -66
  276. package/dist/index.es42.js.map +1 -1
  277. package/dist/index.es43.js +236 -117
  278. package/dist/index.es43.js.map +1 -1
  279. package/dist/index.es44.js +38 -19
  280. package/dist/index.es44.js.map +1 -1
  281. package/dist/index.es45.js +202 -217
  282. package/dist/index.es45.js.map +1 -1
  283. package/dist/index.es46.js +65 -7
  284. package/dist/index.es46.js.map +1 -1
  285. package/dist/index.es47.js +131 -1181
  286. package/dist/index.es47.js.map +1 -1
  287. package/dist/index.es48.js +25 -8
  288. package/dist/index.es48.js.map +1 -1
  289. package/dist/index.es49.js +218 -135
  290. package/dist/index.es49.js.map +1 -1
  291. package/dist/index.es5.js.map +1 -1
  292. package/dist/index.es50.js +5 -208
  293. package/dist/index.es50.js.map +1 -1
  294. package/dist/index.es51.js +208 -5
  295. package/dist/index.es51.js.map +1 -1
  296. package/dist/index.es52.js +90 -7
  297. package/dist/index.es52.js.map +1 -1
  298. package/dist/index.es53.js +6 -92
  299. package/dist/index.es53.js.map +1 -1
  300. package/dist/index.es54.js +14 -3
  301. package/dist/index.es54.js.map +1 -1
  302. package/dist/index.es55.js +8 -36
  303. package/dist/index.es55.js.map +1 -1
  304. package/dist/index.es56.js +83 -61
  305. package/dist/index.es56.js.map +1 -1
  306. package/dist/index.es57.js +3 -37
  307. package/dist/index.es57.js.map +1 -1
  308. package/dist/index.es58.js +34 -304
  309. package/dist/index.es58.js.map +1 -1
  310. package/dist/index.es59.js +72 -9
  311. package/dist/index.es59.js.map +1 -1
  312. package/dist/index.es60.js +32 -85
  313. package/dist/index.es60.js.map +1 -1
  314. package/dist/index.es61.js +304 -6
  315. package/dist/index.es61.js.map +1 -1
  316. package/dist/index.es62.js +9 -15
  317. package/dist/index.es62.js.map +1 -1
  318. package/dist/index.es63.js +3 -3
  319. package/dist/index.es64.js +5 -142
  320. package/dist/index.es64.js.map +1 -1
  321. package/dist/index.es65.js +148 -285
  322. package/dist/index.es65.js.map +1 -1
  323. package/dist/index.es66.js +668 -62
  324. package/dist/index.es66.js.map +1 -1
  325. package/dist/index.es67.js +131 -201
  326. package/dist/index.es67.js.map +1 -1
  327. package/dist/index.es68.js +295 -29
  328. package/dist/index.es68.js.map +1 -1
  329. package/dist/index.es69.js +65 -8
  330. package/dist/index.es69.js.map +1 -1
  331. package/dist/index.es7.js +2 -1
  332. package/dist/index.es7.js.map +1 -1
  333. package/dist/index.es70.js +210 -9
  334. package/dist/index.es70.js.map +1 -1
  335. package/dist/index.es71.js +28 -181
  336. package/dist/index.es71.js.map +1 -1
  337. package/dist/index.es72.js +8 -23
  338. package/dist/index.es72.js.map +1 -1
  339. package/dist/index.es73.js +9 -1397
  340. package/dist/index.es73.js.map +1 -1
  341. package/dist/index.es74.js +187 -9
  342. package/dist/index.es74.js.map +1 -1
  343. package/dist/index.es75.js +24 -8
  344. package/dist/index.es75.js.map +1 -1
  345. package/dist/index.es76.js +1399 -5
  346. package/dist/index.es76.js.map +1 -1
  347. package/dist/index.es77.js +9 -163
  348. package/dist/index.es77.js.map +1 -1
  349. package/dist/index.es78.js +8 -672
  350. package/dist/index.es78.js.map +1 -1
  351. package/dist/index.es79.js +36 -20
  352. package/dist/index.es79.js.map +1 -1
  353. package/dist/index.es80.js +5 -68
  354. package/dist/index.es80.js.map +1 -1
  355. package/dist/index.es81.js +73 -3
  356. package/dist/index.es81.js.map +1 -1
  357. package/dist/index.es82.js +36 -11
  358. package/dist/index.es82.js.map +1 -1
  359. package/dist/index.es83.js +10 -38
  360. package/dist/index.es83.js.map +1 -1
  361. package/dist/index.es84.js +34 -28
  362. package/dist/index.es84.js.map +1 -1
  363. package/dist/index.es85.js +28 -226
  364. package/dist/index.es85.js.map +1 -1
  365. package/dist/index.es86.js +228 -26
  366. package/dist/index.es86.js.map +1 -1
  367. package/dist/index.es87.js +26 -71
  368. package/dist/index.es87.js.map +1 -1
  369. package/dist/index.es88.js +41 -42
  370. package/dist/index.es88.js.map +1 -1
  371. package/dist/index.es89.js +71 -47
  372. package/dist/index.es89.js.map +1 -1
  373. package/dist/index.es90.js +37 -15
  374. package/dist/index.es90.js.map +1 -1
  375. package/dist/index.es91.js +6 -19
  376. package/dist/index.es91.js.map +1 -1
  377. package/dist/index.es92.js +40 -54
  378. package/dist/index.es92.js.map +1 -1
  379. package/dist/index.es93.js +56 -12
  380. package/dist/index.es93.js.map +1 -1
  381. package/dist/index.es94.js +13 -137
  382. package/dist/index.es94.js.map +1 -1
  383. package/dist/index.es95.js +135 -19
  384. package/dist/index.es95.js.map +1 -1
  385. package/dist/index.es96.js +18 -179
  386. package/dist/index.es96.js.map +1 -1
  387. package/dist/index.es97.js +163 -222
  388. package/dist/index.es97.js.map +1 -1
  389. package/dist/index.es98.js +187 -301
  390. package/dist/index.es98.js.map +1 -1
  391. package/dist/index.es99.js +348 -130
  392. package/dist/index.es99.js.map +1 -1
  393. package/package.json +1 -1
@@ -1,37 +1,303 @@
1
- function convertToFormattedString(message, format = "pretty") {
2
- if (format === "pretty") return convertToPrettyString(message);
3
- return JSON.stringify(message);
1
+ import { _isContentBlock, _isObject, _isString, _isArray, iife, safeParseJson, _isNumber } from "./index.es85.js";
2
+ function convertAnthropicAnnotation(citation) {
3
+ if (citation.type === "char_location" && _isString(citation.document_title) && _isNumber(citation.start_char_index) && _isNumber(citation.end_char_index) && _isString(citation.cited_text)) {
4
+ const { document_title, start_char_index, end_char_index, cited_text, ...rest } = citation;
5
+ return {
6
+ ...rest,
7
+ type: "citation",
8
+ source: "char",
9
+ title: document_title ?? void 0,
10
+ startIndex: start_char_index,
11
+ endIndex: end_char_index,
12
+ citedText: cited_text
13
+ };
14
+ }
15
+ if (citation.type === "page_location" && _isString(citation.document_title) && _isNumber(citation.start_page_number) && _isNumber(citation.end_page_number) && _isString(citation.cited_text)) {
16
+ const { document_title, start_page_number, end_page_number, cited_text, ...rest } = citation;
17
+ return {
18
+ ...rest,
19
+ type: "citation",
20
+ source: "page",
21
+ title: document_title ?? void 0,
22
+ startIndex: start_page_number,
23
+ endIndex: end_page_number,
24
+ citedText: cited_text
25
+ };
26
+ }
27
+ if (citation.type === "content_block_location" && _isString(citation.document_title) && _isNumber(citation.start_block_index) && _isNumber(citation.end_block_index) && _isString(citation.cited_text)) {
28
+ const { document_title, start_block_index, end_block_index, cited_text, ...rest } = citation;
29
+ return {
30
+ ...rest,
31
+ type: "citation",
32
+ source: "block",
33
+ title: document_title ?? void 0,
34
+ startIndex: start_block_index,
35
+ endIndex: end_block_index,
36
+ citedText: cited_text
37
+ };
38
+ }
39
+ if (citation.type === "web_search_result_location" && _isString(citation.url) && _isString(citation.title) && _isString(citation.encrypted_index) && _isString(citation.cited_text)) {
40
+ const { url, title, encrypted_index, cited_text, ...rest } = citation;
41
+ return {
42
+ ...rest,
43
+ type: "citation",
44
+ source: "url",
45
+ url,
46
+ title,
47
+ startIndex: Number(encrypted_index),
48
+ endIndex: Number(encrypted_index),
49
+ citedText: cited_text
50
+ };
51
+ }
52
+ if (citation.type === "search_result_location" && _isString(citation.source) && _isString(citation.title) && _isNumber(citation.start_block_index) && _isNumber(citation.end_block_index) && _isString(citation.cited_text)) {
53
+ const { source, title, start_block_index, end_block_index, cited_text, ...rest } = citation;
54
+ return {
55
+ ...rest,
56
+ type: "citation",
57
+ source: "search",
58
+ url: source,
59
+ title: title ?? void 0,
60
+ startIndex: start_block_index,
61
+ endIndex: end_block_index,
62
+ citedText: cited_text
63
+ };
64
+ }
65
+ return void 0;
4
66
  }
5
- function convertToPrettyString(message) {
6
- const lines = [];
7
- const title = ` ${message.type.charAt(0).toUpperCase() + message.type.slice(1)} Message `;
8
- const sepLen = Math.floor((80 - title.length) / 2);
9
- const sep = "=".repeat(sepLen);
10
- const secondSep = title.length % 2 === 0 ? sep : `${sep}=`;
11
- lines.push(`${sep}${title}${secondSep}`);
12
- if (message.type === "ai") {
13
- const aiMessage = message;
14
- if (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {
15
- lines.push("Tool Calls:");
16
- for (const tc of aiMessage.tool_calls) {
17
- lines.push(` ${tc.name} (${tc.id})`);
18
- lines.push(` Call ID: ${tc.id}`);
19
- lines.push(" Args:");
20
- for (const [key, value] of Object.entries(tc.args)) lines.push(` ${key}: ${typeof value === "object" ? JSON.stringify(value) : value}`);
21
- }
22
- }
67
+ function convertToV1FromAnthropicContentBlock(block) {
68
+ if (_isContentBlock(block, "document") && _isObject(block.source) && "type" in block.source) {
69
+ if (block.source.type === "base64" && _isString(block.source.media_type) && _isString(block.source.data)) return {
70
+ type: "file",
71
+ mimeType: block.source.media_type,
72
+ data: block.source.data
73
+ };
74
+ else if (block.source.type === "url" && _isString(block.source.url)) return {
75
+ type: "file",
76
+ url: block.source.url
77
+ };
78
+ else if (block.source.type === "file" && _isString(block.source.file_id)) return {
79
+ type: "file",
80
+ fileId: block.source.file_id
81
+ };
82
+ else if (block.source.type === "text" && _isString(block.source.data)) return {
83
+ type: "file",
84
+ mimeType: String(block.source.media_type ?? "text/plain"),
85
+ data: block.source.data
86
+ };
87
+ } else if (_isContentBlock(block, "image") && _isObject(block.source) && "type" in block.source) {
88
+ if (block.source.type === "base64" && _isString(block.source.media_type) && _isString(block.source.data)) return {
89
+ type: "image",
90
+ mimeType: block.source.media_type,
91
+ data: block.source.data
92
+ };
93
+ else if (block.source.type === "url" && _isString(block.source.url)) return {
94
+ type: "image",
95
+ url: block.source.url
96
+ };
97
+ else if (block.source.type === "file" && _isString(block.source.file_id)) return {
98
+ type: "image",
99
+ fileId: block.source.file_id
100
+ };
23
101
  }
24
- if (message.type === "tool") {
25
- const toolMessage = message;
26
- if (toolMessage.name) lines.push(`Name: ${toolMessage.name}`);
102
+ return void 0;
103
+ }
104
+ function convertToV1FromAnthropicInput(content) {
105
+ function* iterateContent() {
106
+ for (const block of content) {
107
+ const stdBlock = convertToV1FromAnthropicContentBlock(block);
108
+ if (stdBlock) yield stdBlock;
109
+ else yield block;
110
+ }
27
111
  }
28
- if (typeof message.content === "string" && message.content.trim()) {
29
- if (lines.length > 1) lines.push("");
30
- lines.push(message.content);
112
+ return Array.from(iterateContent());
113
+ }
114
+ function convertToV1FromAnthropicMessage(message) {
115
+ function* iterateContent() {
116
+ const content = typeof message.content === "string" ? [{
117
+ type: "text",
118
+ text: message.content
119
+ }] : message.content;
120
+ for (const block of content) {
121
+ if (_isContentBlock(block, "text") && _isString(block.text)) {
122
+ const { text, citations, ...rest } = block;
123
+ if (_isArray(citations) && citations.length) {
124
+ const _citations = citations.reduce((acc, item) => {
125
+ const citation = convertAnthropicAnnotation(item);
126
+ if (citation) return [...acc, citation];
127
+ return acc;
128
+ }, []);
129
+ yield {
130
+ ...rest,
131
+ type: "text",
132
+ text,
133
+ annotations: _citations
134
+ };
135
+ continue;
136
+ } else {
137
+ yield {
138
+ ...rest,
139
+ type: "text",
140
+ text
141
+ };
142
+ continue;
143
+ }
144
+ } else if (_isContentBlock(block, "thinking") && _isString(block.thinking)) {
145
+ const { thinking, signature, ...rest } = block;
146
+ yield {
147
+ ...rest,
148
+ type: "reasoning",
149
+ reasoning: thinking,
150
+ signature
151
+ };
152
+ continue;
153
+ } else if (_isContentBlock(block, "redacted_thinking")) {
154
+ yield {
155
+ type: "non_standard",
156
+ value: block
157
+ };
158
+ continue;
159
+ } else if (_isContentBlock(block, "tool_use") && _isString(block.name) && _isString(block.id)) {
160
+ yield {
161
+ type: "tool_call",
162
+ id: block.id,
163
+ name: block.name,
164
+ args: block.input
165
+ };
166
+ continue;
167
+ } else if (_isContentBlock(block, "input_json_delta")) {
168
+ if (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {
169
+ const tool_call_chunk = message.tool_call_chunks[0];
170
+ yield {
171
+ type: "tool_call_chunk",
172
+ id: tool_call_chunk.id,
173
+ name: tool_call_chunk.name,
174
+ args: tool_call_chunk.args,
175
+ index: tool_call_chunk.index
176
+ };
177
+ continue;
178
+ }
179
+ } else if (_isContentBlock(block, "server_tool_use") && _isString(block.name) && _isString(block.id)) {
180
+ const { name, id } = block;
181
+ if (name === "web_search") {
182
+ const query = iife(() => {
183
+ if (typeof block.input === "string") return block.input;
184
+ else if (_isObject(block.input) && _isString(block.input.query)) return block.input.query;
185
+ else if (_isString(block.partial_json)) {
186
+ const json = safeParseJson(block.partial_json);
187
+ if (json?.query) return json.query;
188
+ }
189
+ return "";
190
+ });
191
+ yield {
192
+ id,
193
+ type: "server_tool_call",
194
+ name: "web_search",
195
+ args: { query }
196
+ };
197
+ continue;
198
+ } else if (block.name === "code_execution") {
199
+ const code = iife(() => {
200
+ if (typeof block.input === "string") return block.input;
201
+ else if (_isObject(block.input) && _isString(block.input.code)) return block.input.code;
202
+ else if (_isString(block.partial_json)) {
203
+ const json = safeParseJson(block.partial_json);
204
+ if (json?.code) return json.code;
205
+ }
206
+ return "";
207
+ });
208
+ yield {
209
+ id,
210
+ type: "server_tool_call",
211
+ name: "code_execution",
212
+ args: { code }
213
+ };
214
+ continue;
215
+ }
216
+ } else if (_isContentBlock(block, "web_search_tool_result") && _isString(block.tool_use_id) && _isArray(block.content)) {
217
+ const { content: content$1, tool_use_id } = block;
218
+ const urls = content$1.reduce((acc, content$2) => {
219
+ if (_isContentBlock(content$2, "web_search_result")) return [...acc, content$2.url];
220
+ return acc;
221
+ }, []);
222
+ yield {
223
+ type: "server_tool_call_result",
224
+ name: "web_search",
225
+ toolCallId: tool_use_id,
226
+ status: "success",
227
+ output: { urls }
228
+ };
229
+ continue;
230
+ } else if (_isContentBlock(block, "code_execution_tool_result") && _isString(block.tool_use_id) && _isObject(block.content)) {
231
+ yield {
232
+ type: "server_tool_call_result",
233
+ name: "code_execution",
234
+ toolCallId: block.tool_use_id,
235
+ status: "success",
236
+ output: block.content
237
+ };
238
+ continue;
239
+ } else if (_isContentBlock(block, "mcp_tool_use")) {
240
+ yield {
241
+ id: block.id,
242
+ type: "server_tool_call",
243
+ name: "mcp_tool_use",
244
+ args: block.input
245
+ };
246
+ continue;
247
+ } else if (_isContentBlock(block, "mcp_tool_result") && _isString(block.tool_use_id) && _isObject(block.content)) {
248
+ yield {
249
+ type: "server_tool_call_result",
250
+ name: "mcp_tool_use",
251
+ toolCallId: block.tool_use_id,
252
+ status: "success",
253
+ output: block.content
254
+ };
255
+ continue;
256
+ } else if (_isContentBlock(block, "container_upload")) {
257
+ yield {
258
+ type: "server_tool_call",
259
+ name: "container_upload",
260
+ args: block.input
261
+ };
262
+ continue;
263
+ } else if (_isContentBlock(block, "search_result")) {
264
+ yield {
265
+ id: block.id,
266
+ type: "non_standard",
267
+ value: block
268
+ };
269
+ continue;
270
+ } else if (_isContentBlock(block, "tool_result")) {
271
+ yield {
272
+ id: block.id,
273
+ type: "non_standard",
274
+ value: block
275
+ };
276
+ continue;
277
+ } else {
278
+ const stdBlock = convertToV1FromAnthropicContentBlock(block);
279
+ if (stdBlock) {
280
+ yield stdBlock;
281
+ continue;
282
+ }
283
+ }
284
+ yield {
285
+ type: "non_standard",
286
+ value: block
287
+ };
288
+ }
31
289
  }
32
- return lines.join("\n");
290
+ return Array.from(iterateContent());
291
+ }
292
+ const ChatAnthropicTranslator = {
293
+ translateContent: convertToV1FromAnthropicMessage,
294
+ translateContentChunk: convertToV1FromAnthropicMessage
295
+ };
296
+ function _isAIMessageChunk(message) {
297
+ return typeof message?._getType === "function" && typeof message.concat === "function" && message._getType() === "ai";
33
298
  }
34
299
  export {
35
- convertToFormattedString
300
+ ChatAnthropicTranslator,
301
+ convertToV1FromAnthropicInput
36
302
  };
37
303
  //# sourceMappingURL=index.es68.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es68.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/format.js"],"sourcesContent":["//#region src/messages/format.ts\nfunction convertToFormattedString(message, format = \"pretty\") {\n\tif (format === \"pretty\") return convertToPrettyString(message);\n\treturn JSON.stringify(message);\n}\nfunction convertToPrettyString(message) {\n\tconst lines = [];\n\tconst title = ` ${message.type.charAt(0).toUpperCase() + message.type.slice(1)} Message `;\n\tconst sepLen = Math.floor((80 - title.length) / 2);\n\tconst sep = \"=\".repeat(sepLen);\n\tconst secondSep = title.length % 2 === 0 ? sep : `${sep}=`;\n\tlines.push(`${sep}${title}${secondSep}`);\n\tif (message.type === \"ai\") {\n\t\tconst aiMessage = message;\n\t\tif (aiMessage.tool_calls && aiMessage.tool_calls.length > 0) {\n\t\t\tlines.push(\"Tool Calls:\");\n\t\t\tfor (const tc of aiMessage.tool_calls) {\n\t\t\t\tlines.push(` ${tc.name} (${tc.id})`);\n\t\t\t\tlines.push(` Call ID: ${tc.id}`);\n\t\t\t\tlines.push(\" Args:\");\n\t\t\t\tfor (const [key, value] of Object.entries(tc.args)) lines.push(` ${key}: ${typeof value === \"object\" ? JSON.stringify(value) : value}`);\n\t\t\t}\n\t\t}\n\t}\n\tif (message.type === \"tool\") {\n\t\tconst toolMessage = message;\n\t\tif (toolMessage.name) lines.push(`Name: ${toolMessage.name}`);\n\t}\n\tif (typeof message.content === \"string\" && message.content.trim()) {\n\t\tif (lines.length > 1) lines.push(\"\");\n\t\tlines.push(message.content);\n\t}\n\treturn lines.join(\"\\n\");\n}\n\n//#endregion\nexport { convertToFormattedString };\n//# sourceMappingURL=format.js.map"],"names":[],"mappings":"AACA,SAAS,yBAAyB,SAAS,SAAS,UAAU;AAC7D,MAAI,WAAW,SAAU,QAAO,sBAAsB,OAAO;AAC7D,SAAO,KAAK,UAAU,OAAO;AAC9B;AACA,SAAS,sBAAsB,SAAS;AACvC,QAAM,QAAQ,CAAA;AACd,QAAM,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,EAAE,YAAW,IAAK,QAAQ,KAAK,MAAM,CAAC,CAAC;AAC9E,QAAM,SAAS,KAAK,OAAO,KAAK,MAAM,UAAU,CAAC;AACjD,QAAM,MAAM,IAAI,OAAO,MAAM;AAC7B,QAAM,YAAY,MAAM,SAAS,MAAM,IAAI,MAAM,GAAG,GAAG;AACvD,QAAM,KAAK,GAAG,GAAG,GAAG,KAAK,GAAG,SAAS,EAAE;AACvC,MAAI,QAAQ,SAAS,MAAM;AAC1B,UAAM,YAAY;AAClB,QAAI,UAAU,cAAc,UAAU,WAAW,SAAS,GAAG;AAC5D,YAAM,KAAK,aAAa;AACxB,iBAAW,MAAM,UAAU,YAAY;AACtC,cAAM,KAAK,KAAK,GAAG,IAAI,KAAK,GAAG,EAAE,GAAG;AACpC,cAAM,KAAK,aAAa,GAAG,EAAE,EAAE;AAC/B,cAAM,KAAK,SAAS;AACpB,mBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,IAAI,EAAG,OAAM,KAAK,OAAO,GAAG,KAAK,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,KAAK,EAAE;AAAA,MAC1I;AAAA,IACD;AAAA,EACD;AACA,MAAI,QAAQ,SAAS,QAAQ;AAC5B,UAAM,cAAc;AACpB,QAAI,YAAY,KAAM,OAAM,KAAK,SAAS,YAAY,IAAI,EAAE;AAAA,EAC7D;AACA,MAAI,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,QAAQ;AAClE,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK,EAAE;AACnC,UAAM,KAAK,QAAQ,OAAO;AAAA,EAC3B;AACA,SAAO,MAAM,KAAK,IAAI;AACvB;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es68.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/anthropic.js"],"sourcesContent":["import { _isArray, _isContentBlock, _isNumber, _isObject, _isString, iife, safeParseJson } from \"./utils.js\";\n\n//#region src/messages/block_translators/anthropic.ts\nfunction convertAnthropicAnnotation(citation) {\n\tif (citation.type === \"char_location\" && _isString(citation.document_title) && _isNumber(citation.start_char_index) && _isNumber(citation.end_char_index) && _isString(citation.cited_text)) {\n\t\tconst { document_title, start_char_index, end_char_index, cited_text,...rest } = citation;\n\t\treturn {\n\t\t\t...rest,\n\t\t\ttype: \"citation\",\n\t\t\tsource: \"char\",\n\t\t\ttitle: document_title ?? void 0,\n\t\t\tstartIndex: start_char_index,\n\t\t\tendIndex: end_char_index,\n\t\t\tcitedText: cited_text\n\t\t};\n\t}\n\tif (citation.type === \"page_location\" && _isString(citation.document_title) && _isNumber(citation.start_page_number) && _isNumber(citation.end_page_number) && _isString(citation.cited_text)) {\n\t\tconst { document_title, start_page_number, end_page_number, cited_text,...rest } = citation;\n\t\treturn {\n\t\t\t...rest,\n\t\t\ttype: \"citation\",\n\t\t\tsource: \"page\",\n\t\t\ttitle: document_title ?? void 0,\n\t\t\tstartIndex: start_page_number,\n\t\t\tendIndex: end_page_number,\n\t\t\tcitedText: cited_text\n\t\t};\n\t}\n\tif (citation.type === \"content_block_location\" && _isString(citation.document_title) && _isNumber(citation.start_block_index) && _isNumber(citation.end_block_index) && _isString(citation.cited_text)) {\n\t\tconst { document_title, start_block_index, end_block_index, cited_text,...rest } = citation;\n\t\treturn {\n\t\t\t...rest,\n\t\t\ttype: \"citation\",\n\t\t\tsource: \"block\",\n\t\t\ttitle: document_title ?? void 0,\n\t\t\tstartIndex: start_block_index,\n\t\t\tendIndex: end_block_index,\n\t\t\tcitedText: cited_text\n\t\t};\n\t}\n\tif (citation.type === \"web_search_result_location\" && _isString(citation.url) && _isString(citation.title) && _isString(citation.encrypted_index) && _isString(citation.cited_text)) {\n\t\tconst { url, title, encrypted_index, cited_text,...rest } = citation;\n\t\treturn {\n\t\t\t...rest,\n\t\t\ttype: \"citation\",\n\t\t\tsource: \"url\",\n\t\t\turl,\n\t\t\ttitle,\n\t\t\tstartIndex: Number(encrypted_index),\n\t\t\tendIndex: Number(encrypted_index),\n\t\t\tcitedText: cited_text\n\t\t};\n\t}\n\tif (citation.type === \"search_result_location\" && _isString(citation.source) && _isString(citation.title) && _isNumber(citation.start_block_index) && _isNumber(citation.end_block_index) && _isString(citation.cited_text)) {\n\t\tconst { source, title, start_block_index, end_block_index, cited_text,...rest } = citation;\n\t\treturn {\n\t\t\t...rest,\n\t\t\ttype: \"citation\",\n\t\t\tsource: \"search\",\n\t\t\turl: source,\n\t\t\ttitle: title ?? void 0,\n\t\t\tstartIndex: start_block_index,\n\t\t\tendIndex: end_block_index,\n\t\t\tcitedText: cited_text\n\t\t};\n\t}\n\treturn void 0;\n}\n/**\n* Converts an Anthropic content block to a standard V1 content block.\n*\n* This function handles the conversion of Anthropic-specific content blocks\n* (document and image blocks) to the standardized V1 format. It supports\n* various source types including base64 data, URLs, file IDs, and text data.\n*\n* @param block - The Anthropic content block to convert\n* @returns A standard V1 content block if conversion is successful, undefined otherwise\n*\n* @example\n* ```typescript\n* const anthropicBlock = {\n* type: \"image\",\n* source: {\n* type: \"base64\",\n* media_type: \"image/png\",\n* data: \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n* }\n* };\n*\n* const standardBlock = convertToV1FromAnthropicContentBlock(anthropicBlock);\n* // Returns: { type: \"image\", mimeType: \"image/png\", data: \"...\" }\n* ```\n*/\nfunction convertToV1FromAnthropicContentBlock(block) {\n\tif (_isContentBlock(block, \"document\") && _isObject(block.source) && \"type\" in block.source) {\n\t\tif (block.source.type === \"base64\" && _isString(block.source.media_type) && _isString(block.source.data)) return {\n\t\t\ttype: \"file\",\n\t\t\tmimeType: block.source.media_type,\n\t\t\tdata: block.source.data\n\t\t};\n\t\telse if (block.source.type === \"url\" && _isString(block.source.url)) return {\n\t\t\ttype: \"file\",\n\t\t\turl: block.source.url\n\t\t};\n\t\telse if (block.source.type === \"file\" && _isString(block.source.file_id)) return {\n\t\t\ttype: \"file\",\n\t\t\tfileId: block.source.file_id\n\t\t};\n\t\telse if (block.source.type === \"text\" && _isString(block.source.data)) return {\n\t\t\ttype: \"file\",\n\t\t\tmimeType: String(block.source.media_type ?? \"text/plain\"),\n\t\t\tdata: block.source.data\n\t\t};\n\t} else if (_isContentBlock(block, \"image\") && _isObject(block.source) && \"type\" in block.source) {\n\t\tif (block.source.type === \"base64\" && _isString(block.source.media_type) && _isString(block.source.data)) return {\n\t\t\ttype: \"image\",\n\t\t\tmimeType: block.source.media_type,\n\t\t\tdata: block.source.data\n\t\t};\n\t\telse if (block.source.type === \"url\" && _isString(block.source.url)) return {\n\t\t\ttype: \"image\",\n\t\t\turl: block.source.url\n\t\t};\n\t\telse if (block.source.type === \"file\" && _isString(block.source.file_id)) return {\n\t\t\ttype: \"image\",\n\t\t\tfileId: block.source.file_id\n\t\t};\n\t}\n\treturn void 0;\n}\n/**\n* Converts an array of content blocks from Anthropic format to v1 standard format.\n*\n* This function processes each content block in the input array, attempting to convert\n* Anthropic-specific block formats (like image blocks with source objects, document blocks, etc.)\n* to the standardized v1 content block format. If a block cannot be converted, it is\n* passed through as-is with a type assertion to ContentBlock.Standard.\n*\n* @param content - Array of content blocks in Anthropic format to be converted\n* @returns Array of content blocks in v1 standard format\n*/\nfunction convertToV1FromAnthropicInput(content) {\n\tfunction* iterateContent() {\n\t\tfor (const block of content) {\n\t\t\tconst stdBlock = convertToV1FromAnthropicContentBlock(block);\n\t\t\tif (stdBlock) yield stdBlock;\n\t\t\telse yield block;\n\t\t}\n\t}\n\treturn Array.from(iterateContent());\n}\n/**\n* Converts an Anthropic AI message to an array of v1 standard content blocks.\n*\n* This function processes an AI message containing Anthropic-specific content blocks\n* and converts them to the standardized v1 content block format.\n*\n* @param message - The AI message containing Anthropic-formatted content blocks\n* @returns Array of content blocks in v1 standard format\n*\n* @example\n* ```typescript\n* const message = new AIMessage([\n* { type: \"text\", text: \"Hello world\" },\n* { type: \"thinking\", text: \"Let me think about this...\" },\n* { type: \"tool_use\", id: \"123\", name: \"calculator\", input: { a: 1, b: 2 } }\n* ]);\n*\n* const standardBlocks = convertToV1FromAnthropicMessage(message);\n* // Returns:\n* // [\n* // { type: \"text\", text: \"Hello world\" },\n* // { type: \"reasoning\", reasoning: \"Let me think about this...\" },\n* // { type: \"tool_call\", id: \"123\", name: \"calculator\", args: { a: 1, b: 2 } }\n* // ]\n* ```\n*/\nfunction convertToV1FromAnthropicMessage(message) {\n\tfunction* iterateContent() {\n\t\tconst content = typeof message.content === \"string\" ? [{\n\t\t\ttype: \"text\",\n\t\t\ttext: message.content\n\t\t}] : message.content;\n\t\tfor (const block of content) {\n\t\t\tif (_isContentBlock(block, \"text\") && _isString(block.text)) {\n\t\t\t\tconst { text, citations,...rest } = block;\n\t\t\t\tif (_isArray(citations) && citations.length) {\n\t\t\t\t\tconst _citations = citations.reduce((acc, item) => {\n\t\t\t\t\t\tconst citation = convertAnthropicAnnotation(item);\n\t\t\t\t\t\tif (citation) return [...acc, citation];\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, []);\n\t\t\t\t\tyield {\n\t\t\t\t\t\t...rest,\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext,\n\t\t\t\t\t\tannotations: _citations\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\tyield {\n\t\t\t\t\t\t...rest,\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (_isContentBlock(block, \"thinking\") && _isString(block.thinking)) {\n\t\t\t\tconst { thinking, signature,...rest } = block;\n\t\t\t\tyield {\n\t\t\t\t\t...rest,\n\t\t\t\t\ttype: \"reasoning\",\n\t\t\t\t\treasoning: thinking,\n\t\t\t\t\tsignature\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"redacted_thinking\")) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"non_standard\",\n\t\t\t\t\tvalue: block\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"tool_use\") && _isString(block.name) && _isString(block.id)) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"tool_call\",\n\t\t\t\t\tid: block.id,\n\t\t\t\t\tname: block.name,\n\t\t\t\t\targs: block.input\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"input_json_delta\")) {\n\t\t\t\tif (_isAIMessageChunk(message) && message.tool_call_chunks?.length) {\n\t\t\t\t\tconst tool_call_chunk = message.tool_call_chunks[0];\n\t\t\t\t\tyield {\n\t\t\t\t\t\ttype: \"tool_call_chunk\",\n\t\t\t\t\t\tid: tool_call_chunk.id,\n\t\t\t\t\t\tname: tool_call_chunk.name,\n\t\t\t\t\t\targs: tool_call_chunk.args,\n\t\t\t\t\t\tindex: tool_call_chunk.index\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (_isContentBlock(block, \"server_tool_use\") && _isString(block.name) && _isString(block.id)) {\n\t\t\t\tconst { name, id } = block;\n\t\t\t\tif (name === \"web_search\") {\n\t\t\t\t\tconst query = iife(() => {\n\t\t\t\t\t\tif (typeof block.input === \"string\") return block.input;\n\t\t\t\t\t\telse if (_isObject(block.input) && _isString(block.input.query)) return block.input.query;\n\t\t\t\t\t\telse if (_isString(block.partial_json)) {\n\t\t\t\t\t\t\tconst json = safeParseJson(block.partial_json);\n\t\t\t\t\t\t\tif (json?.query) return json.query;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t});\n\t\t\t\t\tyield {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"server_tool_call\",\n\t\t\t\t\t\tname: \"web_search\",\n\t\t\t\t\t\targs: { query }\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (block.name === \"code_execution\") {\n\t\t\t\t\tconst code = iife(() => {\n\t\t\t\t\t\tif (typeof block.input === \"string\") return block.input;\n\t\t\t\t\t\telse if (_isObject(block.input) && _isString(block.input.code)) return block.input.code;\n\t\t\t\t\t\telse if (_isString(block.partial_json)) {\n\t\t\t\t\t\t\tconst json = safeParseJson(block.partial_json);\n\t\t\t\t\t\t\tif (json?.code) return json.code;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn \"\";\n\t\t\t\t\t});\n\t\t\t\t\tyield {\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"server_tool_call\",\n\t\t\t\t\t\tname: \"code_execution\",\n\t\t\t\t\t\targs: { code }\n\t\t\t\t\t};\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t} else if (_isContentBlock(block, \"web_search_tool_result\") && _isString(block.tool_use_id) && _isArray(block.content)) {\n\t\t\t\tconst { content: content$1, tool_use_id } = block;\n\t\t\t\tconst urls = content$1.reduce((acc, content$2) => {\n\t\t\t\t\tif (_isContentBlock(content$2, \"web_search_result\")) return [...acc, content$2.url];\n\t\t\t\t\treturn acc;\n\t\t\t\t}, []);\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"server_tool_call_result\",\n\t\t\t\t\tname: \"web_search\",\n\t\t\t\t\ttoolCallId: tool_use_id,\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\toutput: { urls }\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"code_execution_tool_result\") && _isString(block.tool_use_id) && _isObject(block.content)) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"server_tool_call_result\",\n\t\t\t\t\tname: \"code_execution\",\n\t\t\t\t\ttoolCallId: block.tool_use_id,\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\toutput: block.content\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"mcp_tool_use\")) {\n\t\t\t\tyield {\n\t\t\t\t\tid: block.id,\n\t\t\t\t\ttype: \"server_tool_call\",\n\t\t\t\t\tname: \"mcp_tool_use\",\n\t\t\t\t\targs: block.input\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"mcp_tool_result\") && _isString(block.tool_use_id) && _isObject(block.content)) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"server_tool_call_result\",\n\t\t\t\t\tname: \"mcp_tool_use\",\n\t\t\t\t\ttoolCallId: block.tool_use_id,\n\t\t\t\t\tstatus: \"success\",\n\t\t\t\t\toutput: block.content\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"container_upload\")) {\n\t\t\t\tyield {\n\t\t\t\t\ttype: \"server_tool_call\",\n\t\t\t\t\tname: \"container_upload\",\n\t\t\t\t\targs: block.input\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"search_result\")) {\n\t\t\t\tyield {\n\t\t\t\t\tid: block.id,\n\t\t\t\t\ttype: \"non_standard\",\n\t\t\t\t\tvalue: block\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else if (_isContentBlock(block, \"tool_result\")) {\n\t\t\t\tyield {\n\t\t\t\t\tid: block.id,\n\t\t\t\t\ttype: \"non_standard\",\n\t\t\t\t\tvalue: block\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tconst stdBlock = convertToV1FromAnthropicContentBlock(block);\n\t\t\t\tif (stdBlock) {\n\t\t\t\t\tyield stdBlock;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tyield {\n\t\t\t\ttype: \"non_standard\",\n\t\t\t\tvalue: block\n\t\t\t};\n\t\t}\n\t}\n\treturn Array.from(iterateContent());\n}\nconst ChatAnthropicTranslator = {\n\ttranslateContent: convertToV1FromAnthropicMessage,\n\ttranslateContentChunk: convertToV1FromAnthropicMessage\n};\nfunction _isAIMessageChunk(message) {\n\treturn typeof message?._getType === \"function\" && typeof message.concat === \"function\" && message._getType() === \"ai\";\n}\n\n//#endregion\nexport { ChatAnthropicTranslator, convertToV1FromAnthropicInput };\n//# sourceMappingURL=anthropic.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,12 +1,69 @@
1
- function addLangChainErrorFields(error, lc_error_code) {
2
- error.lc_error_code = lc_error_code;
3
- error.message = `${error.message}
4
-
5
- Troubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/
6
- `;
7
- return error;
1
+ import { isURLContentBlock, isBase64ContentBlock, isIDContentBlock, parseBase64DataUrl } from "./index.es56.js";
2
+ import { _isContentBlock, _isObject, _isString } from "./index.es85.js";
3
+ function convertToV1FromDataContentBlock(block) {
4
+ if (isURLContentBlock(block)) return {
5
+ type: block.type,
6
+ mimeType: block.mime_type,
7
+ url: block.url,
8
+ metadata: block.metadata
9
+ };
10
+ if (isBase64ContentBlock(block)) return {
11
+ type: block.type,
12
+ mimeType: block.mime_type ?? "application/octet-stream",
13
+ data: block.data,
14
+ metadata: block.metadata
15
+ };
16
+ if (isIDContentBlock(block)) return {
17
+ type: block.type,
18
+ mimeType: block.mime_type,
19
+ fileId: block.id,
20
+ metadata: block.metadata
21
+ };
22
+ return block;
23
+ }
24
+ function convertToV1FromDataContent(content) {
25
+ return content.map(convertToV1FromDataContentBlock);
26
+ }
27
+ function isOpenAIDataBlock(block) {
28
+ if (_isContentBlock(block, "image_url") && _isObject(block.image_url)) return true;
29
+ if (_isContentBlock(block, "input_audio") && _isObject(block.input_audio)) return true;
30
+ if (_isContentBlock(block, "file") && _isObject(block.file)) return true;
31
+ return false;
32
+ }
33
+ function convertToV1FromOpenAIDataBlock(block) {
34
+ if (_isContentBlock(block, "image_url") && _isObject(block.image_url) && _isString(block.image_url.url)) {
35
+ const parsed = parseBase64DataUrl({ dataUrl: block.image_url.url });
36
+ if (parsed) return {
37
+ type: "image",
38
+ mimeType: parsed.mime_type,
39
+ data: parsed.data
40
+ };
41
+ else return {
42
+ type: "image",
43
+ url: block.image_url.url
44
+ };
45
+ } else if (_isContentBlock(block, "input_audio") && _isObject(block.input_audio) && _isString(block.input_audio.data) && _isString(block.input_audio.format)) return {
46
+ type: "audio",
47
+ data: block.input_audio.data,
48
+ mimeType: `audio/${block.input_audio.format}`
49
+ };
50
+ else if (_isContentBlock(block, "file") && _isObject(block.file) && _isString(block.file.data)) {
51
+ const parsed = parseBase64DataUrl({ dataUrl: block.file.data });
52
+ if (parsed) return {
53
+ type: "file",
54
+ data: parsed.data,
55
+ mimeType: parsed.mime_type
56
+ };
57
+ else if (_isString(block.file.file_id)) return {
58
+ type: "file",
59
+ fileId: block.file.file_id
60
+ };
61
+ }
62
+ return block;
8
63
  }
9
64
  export {
10
- addLangChainErrorFields
65
+ convertToV1FromDataContent,
66
+ convertToV1FromOpenAIDataBlock,
67
+ isOpenAIDataBlock
11
68
  };
12
69
  //# sourceMappingURL=index.es69.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es69.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/errors/index.js"],"sourcesContent":["//#region src/errors/index.ts\nfunction addLangChainErrorFields(error, lc_error_code) {\n\terror.lc_error_code = lc_error_code;\n\terror.message = `${error.message}\\n\\nTroubleshooting URL: https://docs.langchain.com/oss/javascript/langchain/errors/${lc_error_code}/\\n`;\n\treturn error;\n}\n\n//#endregion\nexport { addLangChainErrorFields };\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"AACA,SAAS,wBAAwB,OAAO,eAAe;AACtD,QAAM,gBAAgB;AACtB,QAAM,UAAU,GAAG,MAAM,OAAO;AAAA;AAAA,kFAAuF,aAAa;AAAA;AACpI,SAAO;AACR;","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index.es69.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/messages/block_translators/data.js"],"sourcesContent":["import { isBase64ContentBlock, isIDContentBlock, isURLContentBlock, parseBase64DataUrl } from \"../content/data.js\";\nimport { _isContentBlock, _isObject, _isString } from \"./utils.js\";\n\n//#region src/messages/block_translators/data.ts\nfunction convertToV1FromDataContentBlock(block) {\n\tif (isURLContentBlock(block)) return {\n\t\ttype: block.type,\n\t\tmimeType: block.mime_type,\n\t\turl: block.url,\n\t\tmetadata: block.metadata\n\t};\n\tif (isBase64ContentBlock(block)) return {\n\t\ttype: block.type,\n\t\tmimeType: block.mime_type ?? \"application/octet-stream\",\n\t\tdata: block.data,\n\t\tmetadata: block.metadata\n\t};\n\tif (isIDContentBlock(block)) return {\n\t\ttype: block.type,\n\t\tmimeType: block.mime_type,\n\t\tfileId: block.id,\n\t\tmetadata: block.metadata\n\t};\n\treturn block;\n}\nfunction convertToV1FromDataContent(content) {\n\treturn content.map(convertToV1FromDataContentBlock);\n}\nfunction isOpenAIDataBlock(block) {\n\tif (_isContentBlock(block, \"image_url\") && _isObject(block.image_url)) return true;\n\tif (_isContentBlock(block, \"input_audio\") && _isObject(block.input_audio)) return true;\n\tif (_isContentBlock(block, \"file\") && _isObject(block.file)) return true;\n\treturn false;\n}\nfunction convertToV1FromOpenAIDataBlock(block) {\n\tif (_isContentBlock(block, \"image_url\") && _isObject(block.image_url) && _isString(block.image_url.url)) {\n\t\tconst parsed = parseBase64DataUrl({ dataUrl: block.image_url.url });\n\t\tif (parsed) return {\n\t\t\ttype: \"image\",\n\t\t\tmimeType: parsed.mime_type,\n\t\t\tdata: parsed.data\n\t\t};\n\t\telse return {\n\t\t\ttype: \"image\",\n\t\t\turl: block.image_url.url\n\t\t};\n\t} else if (_isContentBlock(block, \"input_audio\") && _isObject(block.input_audio) && _isString(block.input_audio.data) && _isString(block.input_audio.format)) return {\n\t\ttype: \"audio\",\n\t\tdata: block.input_audio.data,\n\t\tmimeType: `audio/${block.input_audio.format}`\n\t};\n\telse if (_isContentBlock(block, \"file\") && _isObject(block.file) && _isString(block.file.data)) {\n\t\tconst parsed = parseBase64DataUrl({ dataUrl: block.file.data });\n\t\tif (parsed) return {\n\t\t\ttype: \"file\",\n\t\t\tdata: parsed.data,\n\t\t\tmimeType: parsed.mime_type\n\t\t};\n\t\telse if (_isString(block.file.file_id)) return {\n\t\t\ttype: \"file\",\n\t\t\tfileId: block.file.file_id\n\t\t};\n\t}\n\treturn block;\n}\n\n//#endregion\nexport { convertToV1FromDataContent, convertToV1FromOpenAIDataBlock, isOpenAIDataBlock };\n//# sourceMappingURL=data.js.map"],"names":[],"mappings":";;AAIA,SAAS,gCAAgC,OAAO;AAC/C,MAAI,kBAAkB,KAAK,EAAG,QAAO;AAAA,IACpC,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,KAAK,MAAM;AAAA,IACX,UAAU,MAAM;AAAA,EAClB;AACC,MAAI,qBAAqB,KAAK,EAAG,QAAO;AAAA,IACvC,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM,aAAa;AAAA,IAC7B,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,EAClB;AACC,MAAI,iBAAiB,KAAK,EAAG,QAAO;AAAA,IACnC,MAAM,MAAM;AAAA,IACZ,UAAU,MAAM;AAAA,IAChB,QAAQ,MAAM;AAAA,IACd,UAAU,MAAM;AAAA,EAClB;AACC,SAAO;AACR;AACA,SAAS,2BAA2B,SAAS;AAC5C,SAAO,QAAQ,IAAI,+BAA+B;AACnD;AACA,SAAS,kBAAkB,OAAO;AACjC,MAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,EAAG,QAAO;AAC9E,MAAI,gBAAgB,OAAO,aAAa,KAAK,UAAU,MAAM,WAAW,EAAG,QAAO;AAClF,MAAI,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,EAAG,QAAO;AACpE,SAAO;AACR;AACA,SAAS,+BAA+B,OAAO;AAC9C,MAAI,gBAAgB,OAAO,WAAW,KAAK,UAAU,MAAM,SAAS,KAAK,UAAU,MAAM,UAAU,GAAG,GAAG;AACxG,UAAM,SAAS,mBAAmB,EAAE,SAAS,MAAM,UAAU,KAAK;AAClE,QAAI,OAAQ,QAAO;AAAA,MAClB,MAAM;AAAA,MACN,UAAU,OAAO;AAAA,MACjB,MAAM,OAAO;AAAA,IAChB;AAAA,QACO,QAAO;AAAA,MACX,MAAM;AAAA,MACN,KAAK,MAAM,UAAU;AAAA,IACxB;AAAA,EACC,WAAW,gBAAgB,OAAO,aAAa,KAAK,UAAU,MAAM,WAAW,KAAK,UAAU,MAAM,YAAY,IAAI,KAAK,UAAU,MAAM,YAAY,MAAM,EAAG,QAAO;AAAA,IACpK,MAAM;AAAA,IACN,MAAM,MAAM,YAAY;AAAA,IACxB,UAAU,SAAS,MAAM,YAAY,MAAM;AAAA,EAC7C;AAAA,WACU,gBAAgB,OAAO,MAAM,KAAK,UAAU,MAAM,IAAI,KAAK,UAAU,MAAM,KAAK,IAAI,GAAG;AAC/F,UAAM,SAAS,mBAAmB,EAAE,SAAS,MAAM,KAAK,MAAM;AAC9D,QAAI,OAAQ,QAAO;AAAA,MAClB,MAAM;AAAA,MACN,MAAM,OAAO;AAAA,MACb,UAAU,OAAO;AAAA,IACpB;AAAA,aACW,UAAU,MAAM,KAAK,OAAO,EAAG,QAAO;AAAA,MAC9C,MAAM;AAAA,MACN,QAAQ,MAAM,KAAK;AAAA,IACtB;AAAA,EACC;AACA,SAAO;AACR;","x_google_ignoreList":[0]}
package/dist/index.es7.js CHANGED
@@ -154,7 +154,8 @@ const StreamSession = ({ children }) => {
154
154
  { messages: [...allCurrentMessages, message] },
155
155
  {
156
156
  streamMode: options?.streamMode || ["values"],
157
- streamSubgraphs: options?.streamSubgraphs ?? true,
157
+ streamSubgraphs: options?.streamSubgraphs ?? false,
158
+ // Disable subgraph streaming to prevent duplicates
158
159
  streamResumable: options?.streamResumable ?? true,
159
160
  optimisticValues: (prev) => ({
160
161
  ...prev,
@@ -1 +1 @@
1
- {"version":3,"file":"index.es7.js","sources":["../src/providers/Stream.tsx"],"sourcesContent":["/* @refresh reset */\nimport { useChatRuntime } from \"@/providers/ChatRuntime\";\nimport { type Message } from \"@langchain/langgraph-sdk\";\nimport { useStream, type UseStream } from \"@langchain/langgraph-sdk/react\";\nimport {\n isRemoveUIMessage,\n isUIMessage,\n type RemoveUIMessage,\n type UIMessage,\n uiMessageReducer,\n} from \"@langchain/langgraph-sdk/react-ui\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { toast } from \"sonner\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { useThread } from \"./Thread\";\nimport { logger } from \"@/utils/logger\";\n\nexport type StateType = {\n messages: Message[];\n ui?: UIMessage[];\n suggestions?: string[];\n};\n\nconst useTypedStream = useStream<\n StateType,\n {\n UpdateType: {\n messages?: Message[] | Message | string;\n ui?: (UIMessage | RemoveUIMessage)[] | UIMessage | RemoveUIMessage;\n };\n CustomEventType: UIMessage | RemoveUIMessage;\n }\n>;\n\ntype StreamContextType = UseStream<StateType, {\n UpdateType: {\n messages?: Message[] | Message | string;\n ui?: (UIMessage | RemoveUIMessage)[] | UIMessage | RemoveUIMessage;\n };\n CustomEventType: UIMessage | RemoveUIMessage;\n}> & {\n sendMessage: (\n message: Message | string,\n options?: {\n /** If true, message is meant for agent only (not user-visible) */\n type?: Message[\"type\"];\n /** Additional config to pass to the agent */\n config?: any;\n /** Name field required for function/tool messages */\n name?: string;\n /** If true, message is hidden from user UI */\n hidden?: boolean;\n /** Tool calls associated with this message */\n tool_calls?: any[];\n /** Invalid tool calls associated with this message */\n invalid_tool_calls?: any[];\n /** If provided, use this ID for the message instead of generating one */\n tool_call_id?: string;\n /** Additional kwargs to attach to the message */\n additional_kwargs?: Record<string, unknown>;\n /** UI components to display alongside the message */\n ui?: UIMessage[];\n /** Custom ID for the message (will also be used for UI components) */\n id?: string;\n }\n ) => Promise<void>;\n submitMessage: (\n message: Message,\n options?: {\n streamMode?: (\"values\" | \"updates\" | \"messages\" | \"custom\" | \"debug\")[];\n streamSubgraphs?: boolean;\n streamResumable?: boolean;\n config?: any;\n }\n ) => Promise<void>;\n fetchCatalog: () => Promise<any | null>;\n};\n\nconst StreamContext = createContext<StreamContextType | undefined>(undefined);\n\nasync function checkGraphStatus(apiUrl: string, authToken: string | null | undefined) {\n try {\n const res = await fetch(`${apiUrl}/info`, {\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : undefined,\n });\n return res.ok;\n } catch {\n console.error(\"Failed to intialize LangGraph Agent\");\n }\n}\n\nasync function fetchCatalog(apiUrl: string, authToken: string | null | undefined) {\n try {\n const res = await fetch(`${apiUrl}/agents/catalog`, {\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : undefined,\n });\n if (res.ok) {\n const data = await res.json();\n return data;\n }\n return null;\n }\n catch {\n console.error(\"Failed to fetch LangGraph Catalog\");\n return null;\n }\n}\n\nconst StreamSession = ({ children }: { children: ReactNode }) => {\n const { apiUrl, assistantId, identity } = useChatRuntime();\n const { mode, threadId, setThreadId, configuration } = useThread();\n\n // Store local-only AI messages that shouldn't trigger backend calls\n const [localMessages, setLocalMessages] = useState<Message[]>([]);\n // Store local-only UI components\n const [localUI, setLocalUI] = useState<UIMessage[]>([]);\n\n const streamValue = useTypedStream({\n apiUrl,\n assistantId,\n threadId: mode === \"multi\" ? threadId : null,\n defaultHeaders: identity?.authToken\n ? { Authorization: `Bearer ${identity?.authToken}` }\n : undefined,\n fetchStateHistory: true,\n onCustomEvent: (event, options) => {\n if (isUIMessage(event) || isRemoveUIMessage(event)) {\n options.mutate((prev) => {\n logger.debug(\"UI Event received in StreamProvider:\", event);\n const ui = uiMessageReducer(prev.ui ?? [], event);\n return { ...prev, ui };\n });\n }\n },\n\n onThreadId: (id) => {\n if (!id) return;\n if (mode === \"single\") {\n // lock once\n if (!threadId) setThreadId(id);\n } else {\n // switch freely\n setThreadId(id);\n }\n },\n });\n\n /**\n * Send a message to the agent programmatically\n * Useful for triggering agent actions without user-visible messages\n * e.g., \"login completed\", \"card clicked: {id}\"\n */\n const sendMessage = useCallback(\n async (\n message: Message | string,\n options?: {\n type?: Message[\"type\"];\n config?: any;\n name?: string;\n hidden?: boolean;\n tool_calls?: any[];\n invalid_tool_calls?: any[];\n tool_call_id?: string;\n additional_kwargs?: Record<string, unknown>;\n ui?: UIMessage[];\n id?: string; // Allow passing custom ID\n }\n ) => {\n // Use provided ID or generate new one\n const messageId = options?.id || uuidv4();\n\n const messageObj: Message =\n typeof message === \"string\"\n ? ({\n id: messageId, // Use the determined ID\n type: options?.type ?? \"human\",\n content: message,\n ...(options?.name && { name: options.name }),\n ...(options?.tool_calls && { tool_calls: options.tool_calls }),\n ...(options?.invalid_tool_calls && { invalid_tool_calls: options.invalid_tool_calls }),\n ...(options?.tool_call_id && { tool_call_id: options.tool_call_id }),\n ...((options?.additional_kwargs || options?.hidden) && {\n additional_kwargs: {\n ...(options?.hidden && { hidden: true }),\n ...(options?.additional_kwargs ?? {}),\n }\n }),\n } as Message)\n : {\n ...message,\n id: messageId, // Override with determined ID\n // Allow overriding message fields with options\n ...(options?.tool_calls && { tool_calls: options.tool_calls }),\n ...(options?.additional_kwargs && {\n additional_kwargs: {\n ...message.additional_kwargs,\n ...options.additional_kwargs,\n }\n }),\n };\n\n // console.log(\"Sending message via sendMessage:\", messageObj);\n\n // If message type is \"ai\", just append to local state without submitting to agent\n // This is useful for injecting initial messages or system messages that don't need agent processing\n if (options?.type === \"ai\") {\n setLocalMessages((prev) => [...prev, messageObj]);\n // console.log(\"Appended AI message to localMessages:\", options?.ui)\n // Also store any UI components, linking them to the message id\n if (options.ui && options.ui.length > 0) {\n const uiWithMessageId = options.ui.map((ui, index) => ({\n ...ui,\n id: messageId, // Link to the message ID so CustomComponentRender can find it\n // Ensure each UI component has a unique identifier for React keys\n _key: (ui as any)._key || `${messageId}-ui-${index}`,\n })) as UIMessage[];\n setLocalUI((prev) => [...prev, ...uiWithMessageId]);\n }\n return;\n }\n\n // For non-AI messages, submit to the agent\n const currentMessages = streamValue.messages || [];\n await streamValue.submit(\n { messages: [...currentMessages, messageObj] }, // Append to existing messages\n {\n config: {\n ...options?.config,\n configurable: {\n ...identity,\n ...configuration,\n ...(options?.config?.configurable ?? {}),\n },\n },\n }\n );\n },\n [streamValue, identity, configuration, setLocalMessages, setLocalUI]\n );\n\n // Combine stream messages with local AI messages, deduplicating by ID\n const combinedMessages = useMemo(() => {\n const allMessages = [...localMessages, ...(streamValue.messages || [])];\n // Deduplicate by message ID, keeping the first occurrence\n const seen = new Set<string>();\n return allMessages.filter(msg => {\n if (!msg.id) return true; // Keep messages without IDs\n if (seen.has(msg.id)) return false;\n seen.add(msg.id);\n return true;\n });\n }, [localMessages, streamValue.messages]);\n\n // Combine local UI with stream UI, deduplicating by unique key\n const combinedUI = useMemo(() => {\n // console.log(\"Combining local UI with stream UI:\", localUI, streamValue.values?.ui);\n const allUI = [...localUI, ...(streamValue.values?.ui || [])];\n // Deduplicate by _key or id+name combination\n const seen = new Set<string>();\n return allUI.filter(ui => {\n const key = (ui as any)._key || `${ui.id}-${ui.name}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }, [localUI, streamValue.values?.ui]);\n\n const submitMessage = useCallback(\n async (\n message: Message,\n options?: {\n streamMode?: (\"values\" | \"updates\" | \"messages\" | \"custom\" | \"debug\")[];\n streamSubgraphs?: boolean;\n streamResumable?: boolean;\n config?: any;\n }\n ) => {\n // Get ALL current messages (including local AI messages)\n const allCurrentMessages = combinedMessages || [];\n\n await streamValue.submit(\n { messages: [...allCurrentMessages, message] },\n {\n streamMode: options?.streamMode || [\"values\"],\n streamSubgraphs: options?.streamSubgraphs ?? true,\n streamResumable: options?.streamResumable ?? true,\n optimisticValues: (prev) => ({\n ...prev,\n messages: [...allCurrentMessages, message],\n }),\n config: {\n ...options?.config,\n configurable: {\n ...identity,\n ...configuration,\n ...(options?.config?.configurable ?? {}),\n },\n },\n }\n );\n },\n [streamValue, identity, configuration, combinedMessages]\n );\n\n useEffect(() => {\n checkGraphStatus(apiUrl, identity?.authToken).then((ok) => {\n if (!ok) {\n toast.error(\"Failed to connect to LangGraph server\", {\n description: `Unable to reach ${apiUrl}`,\n duration: 10000,\n });\n }\n });\n }, [apiUrl, identity?.authToken]);\n\n const value = useMemo(\n () => ({\n ...streamValue,\n messages: combinedMessages, // Override with combined messages\n values: {\n ...streamValue.values,\n ui: combinedUI, // Override with combined UI\n },\n sendMessage,\n submitMessage,\n fetchCatalog: () => fetchCatalog(apiUrl, identity?.authToken),\n }),\n [streamValue, combinedMessages, combinedUI, sendMessage, submitMessage]\n );\n\n return (\n <StreamContext.Provider value={value}>{children}</StreamContext.Provider>\n );\n};\n\n/**\n * Provides streaming message functionality for real-time AI responses.\n * Manages message state, handles streaming updates, and provides submit/sendMessage functions.\n * \n * @example\n * ```tsx\n * <StreamProvider>\n * <ChatInterface />\n * </StreamProvider>\n * ```\n */\nexport function StreamProvider({ children }: { children: ReactNode }) {\n return <StreamSession>{children}</StreamSession>;\n}\n\n/**\n * Hook to access the streaming context.\n * Provides access to messages, loading state, and functions to submit messages.\n * \n * @throws {Error} If used outside of StreamProvider\n * \n * @example\n * ```tsx\n * const { messages, isLoading, submit, sendMessage } = useStreamContext();\n * ```\n */\nexport function useStreamContext(): StreamContextType {\n const ctx = useContext(StreamContext);\n if (!ctx) {\n throw new Error(\"useStreamContext must be used within StreamProvider\");\n }\n return ctx;\n}\n"],"names":["uuidv4"],"mappings":"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"}
1
+ {"version":3,"file":"index.es7.js","sources":["../src/providers/Stream.tsx"],"sourcesContent":["/* @refresh reset */\nimport { useChatRuntime } from \"@/providers/ChatRuntime\";\nimport { type Message } from \"@langchain/langgraph-sdk\";\nimport { useStream, type UseStream } from \"@langchain/langgraph-sdk/react\";\nimport {\n isRemoveUIMessage,\n isUIMessage,\n type RemoveUIMessage,\n type UIMessage,\n uiMessageReducer,\n} from \"@langchain/langgraph-sdk/react-ui\";\nimport {\n createContext,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { toast } from \"sonner\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { useThread } from \"./Thread\";\nimport { logger } from \"@/utils/logger\";\n\nexport type StateType = {\n messages: Message[];\n ui?: UIMessage[];\n suggestions?: string[];\n};\n\nconst useTypedStream = useStream<\n StateType,\n {\n UpdateType: {\n messages?: Message[] | Message | string;\n ui?: (UIMessage | RemoveUIMessage)[] | UIMessage | RemoveUIMessage;\n };\n CustomEventType: UIMessage | RemoveUIMessage;\n }\n>;\n\ntype StreamContextType = UseStream<StateType, {\n UpdateType: {\n messages?: Message[] | Message | string;\n ui?: (UIMessage | RemoveUIMessage)[] | UIMessage | RemoveUIMessage;\n };\n CustomEventType: UIMessage | RemoveUIMessage;\n}> & {\n sendMessage: (\n message: Message | string,\n options?: {\n /** If true, message is meant for agent only (not user-visible) */\n type?: Message[\"type\"];\n /** Additional config to pass to the agent */\n config?: any;\n /** Name field required for function/tool messages */\n name?: string;\n /** If true, message is hidden from user UI */\n hidden?: boolean;\n /** Tool calls associated with this message */\n tool_calls?: any[];\n /** Invalid tool calls associated with this message */\n invalid_tool_calls?: any[];\n /** If provided, use this ID for the message instead of generating one */\n tool_call_id?: string;\n /** Additional kwargs to attach to the message */\n additional_kwargs?: Record<string, unknown>;\n /** UI components to display alongside the message */\n ui?: UIMessage[];\n /** Custom ID for the message (will also be used for UI components) */\n id?: string;\n }\n ) => Promise<void>;\n submitMessage: (\n message: Message,\n options?: {\n streamMode?: (\"values\" | \"updates\" | \"messages\" | \"custom\" | \"debug\")[];\n streamSubgraphs?: boolean;\n streamResumable?: boolean;\n config?: any;\n }\n ) => Promise<void>;\n fetchCatalog: () => Promise<any | null>;\n};\n\nconst StreamContext = createContext<StreamContextType | undefined>(undefined);\n\nasync function checkGraphStatus(apiUrl: string, authToken: string | null | undefined) {\n try {\n const res = await fetch(`${apiUrl}/info`, {\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : undefined,\n });\n return res.ok;\n } catch {\n console.error(\"Failed to intialize LangGraph Agent\");\n }\n}\n\nasync function fetchCatalog(apiUrl: string, authToken: string | null | undefined) {\n try {\n const res = await fetch(`${apiUrl}/agents/catalog`, {\n headers: authToken ? { Authorization: `Bearer ${authToken}` } : undefined,\n });\n if (res.ok) {\n const data = await res.json();\n return data;\n }\n return null;\n }\n catch {\n console.error(\"Failed to fetch LangGraph Catalog\");\n return null;\n }\n}\n\nconst StreamSession = ({ children }: { children: ReactNode }) => {\n const { apiUrl, assistantId, identity } = useChatRuntime();\n const { mode, threadId, setThreadId, configuration } = useThread();\n\n // Store local-only AI messages that shouldn't trigger backend calls\n const [localMessages, setLocalMessages] = useState<Message[]>([]);\n // Store local-only UI components\n const [localUI, setLocalUI] = useState<UIMessage[]>([]);\n\n const streamValue = useTypedStream({\n apiUrl,\n assistantId,\n threadId: mode === \"multi\" ? threadId : null,\n defaultHeaders: identity?.authToken\n ? { Authorization: `Bearer ${identity?.authToken}` }\n : undefined,\n fetchStateHistory: true,\n onCustomEvent: (event, options) => {\n if (isUIMessage(event) || isRemoveUIMessage(event)) {\n options.mutate((prev) => {\n logger.debug(\"UI Event received in StreamProvider:\", event);\n const ui = uiMessageReducer(prev.ui ?? [], event);\n return { ...prev, ui };\n });\n }\n },\n\n onThreadId: (id) => {\n if (!id) return;\n if (mode === \"single\") {\n // lock once\n if (!threadId) setThreadId(id);\n } else {\n // switch freely\n setThreadId(id);\n }\n },\n });\n\n /**\n * Send a message to the agent programmatically\n * Useful for triggering agent actions without user-visible messages\n * e.g., \"login completed\", \"card clicked: {id}\"\n */\n const sendMessage = useCallback(\n async (\n message: Message | string,\n options?: {\n type?: Message[\"type\"];\n config?: any;\n name?: string;\n hidden?: boolean;\n tool_calls?: any[];\n invalid_tool_calls?: any[];\n tool_call_id?: string;\n additional_kwargs?: Record<string, unknown>;\n ui?: UIMessage[];\n id?: string; // Allow passing custom ID\n }\n ) => {\n // Use provided ID or generate new one\n const messageId = options?.id || uuidv4();\n\n const messageObj: Message =\n typeof message === \"string\"\n ? ({\n id: messageId, // Use the determined ID\n type: options?.type ?? \"human\",\n content: message,\n ...(options?.name && { name: options.name }),\n ...(options?.tool_calls && { tool_calls: options.tool_calls }),\n ...(options?.invalid_tool_calls && { invalid_tool_calls: options.invalid_tool_calls }),\n ...(options?.tool_call_id && { tool_call_id: options.tool_call_id }),\n ...((options?.additional_kwargs || options?.hidden) && {\n additional_kwargs: {\n ...(options?.hidden && { hidden: true }),\n ...(options?.additional_kwargs ?? {}),\n }\n }),\n } as Message)\n : {\n ...message,\n id: messageId, // Override with determined ID\n // Allow overriding message fields with options\n ...(options?.tool_calls && { tool_calls: options.tool_calls }),\n ...(options?.additional_kwargs && {\n additional_kwargs: {\n ...message.additional_kwargs,\n ...options.additional_kwargs,\n }\n }),\n };\n\n // console.log(\"Sending message via sendMessage:\", messageObj);\n\n // If message type is \"ai\", just append to local state without submitting to agent\n // This is useful for injecting initial messages or system messages that don't need agent processing\n if (options?.type === \"ai\") {\n setLocalMessages((prev) => [...prev, messageObj]);\n // console.log(\"Appended AI message to localMessages:\", options?.ui)\n // Also store any UI components, linking them to the message id\n if (options.ui && options.ui.length > 0) {\n const uiWithMessageId = options.ui.map((ui, index) => ({\n ...ui,\n id: messageId, // Link to the message ID so CustomComponentRender can find it\n // Ensure each UI component has a unique identifier for React keys\n _key: (ui as any)._key || `${messageId}-ui-${index}`,\n })) as UIMessage[];\n setLocalUI((prev) => [...prev, ...uiWithMessageId]);\n }\n return;\n }\n\n // For non-AI messages, submit to the agent\n const currentMessages = streamValue.messages || [];\n await streamValue.submit(\n { messages: [...currentMessages, messageObj] }, // Append to existing messages\n {\n config: {\n ...options?.config,\n configurable: {\n ...identity,\n ...configuration,\n ...(options?.config?.configurable ?? {}),\n },\n },\n }\n );\n },\n [streamValue, identity, configuration, setLocalMessages, setLocalUI]\n );\n\n // Combine stream messages with local AI messages, deduplicating by ID\n const combinedMessages = useMemo(() => {\n const allMessages = [...localMessages, ...(streamValue.messages || [])];\n // Deduplicate by message ID, keeping the first occurrence\n const seen = new Set<string>();\n return allMessages.filter(msg => {\n if (!msg.id) return true; // Keep messages without IDs\n if (seen.has(msg.id)) return false;\n seen.add(msg.id);\n return true;\n });\n }, [localMessages, streamValue.messages]);\n\n // Combine local UI with stream UI, deduplicating by unique key\n const combinedUI = useMemo(() => {\n // console.log(\"Combining local UI with stream UI:\", localUI, streamValue.values?.ui);\n const allUI = [...localUI, ...(streamValue.values?.ui || [])];\n // Deduplicate by _key or id+name combination\n const seen = new Set<string>();\n return allUI.filter(ui => {\n const key = (ui as any)._key || `${ui.id}-${ui.name}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }, [localUI, streamValue.values?.ui]);\n\n const submitMessage = useCallback(\n async (\n message: Message,\n options?: {\n streamMode?: (\"values\" | \"updates\" | \"messages\" | \"custom\" | \"debug\")[];\n streamSubgraphs?: boolean;\n streamResumable?: boolean;\n config?: any;\n }\n ) => {\n // Get ALL current messages (including local AI messages)\n const allCurrentMessages = combinedMessages || [];\n\n await streamValue.submit(\n { messages: [...allCurrentMessages, message] },\n {\n streamMode: options?.streamMode || [\"values\"],\n streamSubgraphs: options?.streamSubgraphs ?? false, // Disable subgraph streaming to prevent duplicates\n streamResumable: options?.streamResumable ?? true,\n optimisticValues: (prev) => ({\n ...prev,\n messages: [...allCurrentMessages, message],\n }),\n config: {\n ...options?.config,\n configurable: {\n ...identity,\n ...configuration,\n ...(options?.config?.configurable ?? {}),\n },\n },\n }\n );\n },\n [streamValue, identity, configuration, combinedMessages]\n );\n\n useEffect(() => {\n checkGraphStatus(apiUrl, identity?.authToken).then((ok) => {\n if (!ok) {\n toast.error(\"Failed to connect to LangGraph server\", {\n description: `Unable to reach ${apiUrl}`,\n duration: 10000,\n });\n }\n });\n }, [apiUrl, identity?.authToken]);\n\n const value = useMemo(\n () => ({\n ...streamValue,\n messages: combinedMessages, // Override with combined messages\n values: {\n ...streamValue.values,\n ui: combinedUI, // Override with combined UI\n },\n sendMessage,\n submitMessage,\n fetchCatalog: () => fetchCatalog(apiUrl, identity?.authToken),\n }),\n [streamValue, combinedMessages, combinedUI, sendMessage, submitMessage]\n );\n\n return (\n <StreamContext.Provider value={value}>{children}</StreamContext.Provider>\n );\n};\n\n/**\n * Provides streaming message functionality for real-time AI responses.\n * Manages message state, handles streaming updates, and provides submit/sendMessage functions.\n * \n * @example\n * ```tsx\n * <StreamProvider>\n * <ChatInterface />\n * </StreamProvider>\n * ```\n */\nexport function StreamProvider({ children }: { children: ReactNode }) {\n return <StreamSession>{children}</StreamSession>;\n}\n\n/**\n * Hook to access the streaming context.\n * Provides access to messages, loading state, and functions to submit messages.\n * \n * @throws {Error} If used outside of StreamProvider\n * \n * @example\n * ```tsx\n * const { messages, isLoading, submit, sendMessage } = useStreamContext();\n * ```\n */\nexport function useStreamContext(): StreamContextType {\n const ctx = useContext(StreamContext);\n if (!ctx) {\n throw new Error(\"useStreamContext must be used within StreamProvider\");\n }\n return ctx;\n}\n"],"names":["uuidv4"],"mappings":"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"}