langgraph-ui-components 0.0.17 → 0.0.18

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 (316) hide show
  1. package/dist/index.es100.js +20 -354
  2. package/dist/index.es100.js.map +1 -1
  3. package/dist/index.es101.js +172 -127
  4. package/dist/index.es101.js.map +1 -1
  5. package/dist/index.es102.js +231 -60
  6. package/dist/index.es102.js.map +1 -1
  7. package/dist/index.es103.js +352 -34
  8. package/dist/index.es103.js.map +1 -1
  9. package/dist/index.es104.js +134 -34
  10. package/dist/index.es104.js.map +1 -1
  11. package/dist/index.es105.js +65 -161
  12. package/dist/index.es105.js.map +1 -1
  13. package/dist/index.es106.js +30 -196
  14. package/dist/index.es106.js.map +1 -1
  15. package/dist/index.es107.js +36 -13
  16. package/dist/index.es107.js.map +1 -1
  17. package/dist/index.es108.js +162 -26
  18. package/dist/index.es108.js.map +1 -1
  19. package/dist/index.es109.js +196 -27
  20. package/dist/index.es109.js.map +1 -1
  21. package/dist/index.es110.js +13 -3156
  22. package/dist/index.es110.js.map +1 -1
  23. package/dist/index.es111.js +27 -34
  24. package/dist/index.es111.js.map +1 -1
  25. package/dist/index.es112.js +34 -5
  26. package/dist/index.es112.js.map +1 -1
  27. package/dist/index.es113.js +3145 -61
  28. package/dist/index.es113.js.map +1 -1
  29. package/dist/index.es114.js +33 -33
  30. package/dist/index.es114.js.map +1 -1
  31. package/dist/index.es115.js +5 -21
  32. package/dist/index.es115.js.map +1 -1
  33. package/dist/index.es116.js +69 -64
  34. package/dist/index.es116.js.map +1 -1
  35. package/dist/index.es117.js +37 -3
  36. package/dist/index.es117.js.map +1 -1
  37. package/dist/index.es12.js +1 -1
  38. package/dist/index.es121.js +9 -9
  39. package/dist/index.es122.js +1 -1
  40. package/dist/index.es126.js +1 -1
  41. package/dist/index.es128.js +2 -2
  42. package/dist/index.es13.js +9 -3
  43. package/dist/index.es13.js.map +1 -1
  44. package/dist/index.es136.js +1 -1
  45. package/dist/index.es137.js +6 -6
  46. package/dist/index.es139.js +1 -1
  47. package/dist/index.es14.js +6 -6
  48. package/dist/index.es140.js +1 -1
  49. package/dist/index.es143.js +1 -1
  50. package/dist/index.es144.js +1 -1
  51. package/dist/index.es145.js +1 -1
  52. package/dist/index.es146.js +1 -1
  53. package/dist/index.es147.js +1 -1
  54. package/dist/index.es148.js +1 -1
  55. package/dist/index.es149.js +1 -1
  56. package/dist/index.es150.js +1 -1
  57. package/dist/index.es151.js +1 -1
  58. package/dist/index.es152.js +1 -1
  59. package/dist/index.es153.js +1 -1
  60. package/dist/index.es154.js +1 -1
  61. package/dist/index.es155.js +1 -1
  62. package/dist/index.es156.js +1 -1
  63. package/dist/index.es157.js +1 -1
  64. package/dist/index.es158.js +1 -1
  65. package/dist/index.es159.js +1 -1
  66. package/dist/index.es16.js +10 -5
  67. package/dist/index.es16.js.map +1 -1
  68. package/dist/index.es160.js +1 -1
  69. package/dist/index.es161.js +1 -1
  70. package/dist/index.es162.js +1 -1
  71. package/dist/index.es163.js +1 -1
  72. package/dist/index.es164.js +1 -1
  73. package/dist/index.es165.js +1 -1
  74. package/dist/index.es166.js +1 -1
  75. package/dist/index.es167.js +1 -1
  76. package/dist/index.es168.js +1 -1
  77. package/dist/index.es169.js +1 -1
  78. package/dist/index.es170.js +1 -1
  79. package/dist/index.es171.js +1 -1
  80. package/dist/index.es172.js +1 -1
  81. package/dist/index.es173.js +1 -1
  82. package/dist/index.es174.js +1 -1
  83. package/dist/index.es175.js +1 -1
  84. package/dist/index.es176.js +1 -1
  85. package/dist/index.es177.js +1 -1
  86. package/dist/index.es178.js +1 -1
  87. package/dist/index.es179.js +1 -1
  88. package/dist/index.es18.js +7 -7
  89. package/dist/index.es180.js +1 -1
  90. package/dist/index.es181.js +1 -1
  91. package/dist/index.es182.js +1 -1
  92. package/dist/index.es183.js +1 -1
  93. package/dist/index.es184.js +1 -1
  94. package/dist/index.es185.js +1 -1
  95. package/dist/index.es186.js +1 -1
  96. package/dist/index.es187.js +1 -1
  97. package/dist/index.es191.js +2 -56
  98. package/dist/index.es191.js.map +1 -1
  99. package/dist/index.es192.js +2 -100
  100. package/dist/index.es192.js.map +1 -1
  101. package/dist/index.es193.js +2 -191
  102. package/dist/index.es193.js.map +1 -1
  103. package/dist/index.es194.js +2 -110
  104. package/dist/index.es194.js.map +1 -1
  105. package/dist/index.es195.js +2 -35
  106. package/dist/index.es195.js.map +1 -1
  107. package/dist/index.es196.js +2 -10
  108. package/dist/index.es196.js.map +1 -1
  109. package/dist/index.es197.js +2 -11
  110. package/dist/index.es197.js.map +1 -1
  111. package/dist/index.es198.js +2 -12
  112. package/dist/index.es198.js.map +1 -1
  113. package/dist/index.es199.js +2 -91
  114. package/dist/index.es199.js.map +1 -1
  115. package/dist/index.es2.js +96 -11
  116. package/dist/index.es2.js.map +1 -1
  117. package/dist/index.es20.js +2 -2
  118. package/dist/index.es200.js +2 -275
  119. package/dist/index.es200.js.map +1 -1
  120. package/dist/index.es201.js +2 -2
  121. package/dist/index.es202.js +2 -164
  122. package/dist/index.es202.js.map +1 -1
  123. package/dist/index.es203.js +2 -51
  124. package/dist/index.es203.js.map +1 -1
  125. package/dist/index.es204.js +2 -40
  126. package/dist/index.es204.js.map +1 -1
  127. package/dist/index.es205.js +2 -35
  128. package/dist/index.es205.js.map +1 -1
  129. package/dist/index.es206.js +2 -40
  130. package/dist/index.es206.js.map +1 -1
  131. package/dist/index.es207.js +2 -24
  132. package/dist/index.es207.js.map +1 -1
  133. package/dist/index.es208.js +2 -591
  134. package/dist/index.es208.js.map +1 -1
  135. package/dist/index.es209.js +2 -125
  136. package/dist/index.es209.js.map +1 -1
  137. package/dist/index.es210.js +2 -164
  138. package/dist/index.es210.js.map +1 -1
  139. package/dist/index.es211.js +2 -2
  140. package/dist/index.es212.js +2 -2
  141. package/dist/index.es213.js +2 -2
  142. package/dist/index.es214.js +2 -2
  143. package/dist/index.es215.js +2 -2
  144. package/dist/index.es216.js +2 -2
  145. package/dist/index.es217.js +2 -2
  146. package/dist/index.es218.js +2 -2
  147. package/dist/index.es219.js +2 -2
  148. package/dist/index.es22.js +35 -119
  149. package/dist/index.es22.js.map +1 -1
  150. package/dist/index.es220.js +2 -2
  151. package/dist/index.es221.js +2 -2
  152. package/dist/index.es222.js +2 -2
  153. package/dist/index.es223.js +2 -2
  154. package/dist/index.es224.js +2 -2
  155. package/dist/index.es225.js +2 -2
  156. package/dist/index.es226.js +2 -2
  157. package/dist/index.es227.js +2 -2
  158. package/dist/index.es228.js +2 -2
  159. package/dist/index.es229.js +2 -2
  160. package/dist/index.es23.js +66 -36
  161. package/dist/index.es23.js.map +1 -1
  162. package/dist/index.es230.js +2 -2
  163. package/dist/index.es231.js +2 -2
  164. package/dist/index.es232.js +2 -2
  165. package/dist/index.es233.js +2 -2
  166. package/dist/index.es234.js +2 -2
  167. package/dist/index.es235.js +2 -2
  168. package/dist/index.es236.js +56 -2
  169. package/dist/index.es236.js.map +1 -1
  170. package/dist/index.es237.js +100 -2
  171. package/dist/index.es237.js.map +1 -1
  172. package/dist/index.es238.js +191 -2
  173. package/dist/index.es238.js.map +1 -1
  174. package/dist/index.es239.js +110 -2
  175. package/dist/index.es239.js.map +1 -1
  176. package/dist/index.es24.js +30 -64
  177. package/dist/index.es24.js.map +1 -1
  178. package/dist/index.es240.js +35 -2
  179. package/dist/index.es240.js.map +1 -1
  180. package/dist/index.es241.js +10 -2
  181. package/dist/index.es241.js.map +1 -1
  182. package/dist/index.es242.js +11 -2
  183. package/dist/index.es242.js.map +1 -1
  184. package/dist/index.es243.js +12 -2
  185. package/dist/index.es243.js.map +1 -1
  186. package/dist/index.es244.js +91 -2
  187. package/dist/index.es244.js.map +1 -1
  188. package/dist/index.es245.js +275 -2
  189. package/dist/index.es245.js.map +1 -1
  190. package/dist/index.es246.js +2 -2
  191. package/dist/index.es247.js +164 -2
  192. package/dist/index.es247.js.map +1 -1
  193. package/dist/index.es248.js +51 -2
  194. package/dist/index.es248.js.map +1 -1
  195. package/dist/index.es249.js +40 -2
  196. package/dist/index.es249.js.map +1 -1
  197. package/dist/index.es25.js +120 -29
  198. package/dist/index.es25.js.map +1 -1
  199. package/dist/index.es250.js +35 -2
  200. package/dist/index.es250.js.map +1 -1
  201. package/dist/index.es251.js +40 -2
  202. package/dist/index.es251.js.map +1 -1
  203. package/dist/index.es252.js +24 -2
  204. package/dist/index.es252.js.map +1 -1
  205. package/dist/index.es253.js +591 -2
  206. package/dist/index.es253.js.map +1 -1
  207. package/dist/index.es254.js +125 -2
  208. package/dist/index.es254.js.map +1 -1
  209. package/dist/index.es255.js +164 -2
  210. package/dist/index.es255.js.map +1 -1
  211. package/dist/index.es256.js +2 -2
  212. package/dist/index.es26.js +102 -123
  213. package/dist/index.es26.js.map +1 -1
  214. package/dist/index.es267.js +1 -1
  215. package/dist/index.es27.js +66 -101
  216. package/dist/index.es27.js.map +1 -1
  217. package/dist/index.es28.js +139 -66
  218. package/dist/index.es28.js.map +1 -1
  219. package/dist/index.es29.js +295 -131
  220. package/dist/index.es29.js.map +1 -1
  221. package/dist/index.es30.js +114 -298
  222. package/dist/index.es30.js.map +1 -1
  223. package/dist/index.es305.js +1 -1
  224. package/dist/index.es307.js +1 -1
  225. package/dist/index.es319.js +1 -1
  226. package/dist/index.es32.js +7 -7
  227. package/dist/index.es33.js +1 -1
  228. package/dist/index.es339.js +2 -2
  229. package/dist/index.es36.js +4 -4
  230. package/dist/index.es37.js +289 -114
  231. package/dist/index.es37.js.map +1 -1
  232. package/dist/index.es38.js +44 -70
  233. package/dist/index.es38.js.map +1 -1
  234. package/dist/index.es39.js +145 -19
  235. package/dist/index.es39.js.map +1 -1
  236. package/dist/index.es40.js +5 -261
  237. package/dist/index.es40.js.map +1 -1
  238. package/dist/index.es41.js +247 -38
  239. package/dist/index.es41.js.map +1 -1
  240. package/dist/index.es42.js +110 -207
  241. package/dist/index.es42.js.map +1 -1
  242. package/dist/index.es43.js +68 -64
  243. package/dist/index.es43.js.map +1 -1
  244. package/dist/index.es44.js +17 -141
  245. package/dist/index.es44.js.map +1 -1
  246. package/dist/index.es45.js +251 -14
  247. package/dist/index.es45.js.map +1 -1
  248. package/dist/index.es46.js +36 -223
  249. package/dist/index.es46.js.map +1 -1
  250. package/dist/index.es47.js +213 -7
  251. package/dist/index.es47.js.map +1 -1
  252. package/dist/index.es48.js +55 -1180
  253. package/dist/index.es48.js.map +1 -1
  254. package/dist/index.es49.js +141 -6
  255. package/dist/index.es49.js.map +1 -1
  256. package/dist/index.es50.js +21 -144
  257. package/dist/index.es50.js.map +1 -1
  258. package/dist/index.es51.js +230 -5
  259. package/dist/index.es51.js.map +1 -1
  260. package/dist/index.es52.js +8 -292
  261. package/dist/index.es52.js.map +1 -1
  262. package/dist/index.es53.js +1190 -43
  263. package/dist/index.es53.js.map +1 -1
  264. package/dist/index.es54.js +7 -144
  265. package/dist/index.es54.js.map +1 -1
  266. package/dist/index.es55.js +136 -241
  267. package/dist/index.es55.js.map +1 -1
  268. package/dist/index.es59.js +1 -1
  269. package/dist/index.es6.js +21 -8
  270. package/dist/index.es6.js.map +1 -1
  271. package/dist/index.es60.js +1 -1
  272. package/dist/index.es61.js +1 -1
  273. package/dist/index.es62.js +7 -7
  274. package/dist/index.es67.js +3 -3
  275. package/dist/index.es69.js +2 -2
  276. package/dist/index.es70.js +1 -1
  277. package/dist/index.es71.js +1 -1
  278. package/dist/index.es72.js +1 -1
  279. package/dist/index.es77.js +7 -7
  280. package/dist/index.es78.js +17 -17
  281. package/dist/index.es82.js +1 -1
  282. package/dist/index.es83.js +4 -4
  283. package/dist/index.es84.js +20 -11
  284. package/dist/index.es84.js.map +1 -1
  285. package/dist/index.es85.js +66 -38
  286. package/dist/index.es85.js.map +1 -1
  287. package/dist/index.es86.js +3 -34
  288. package/dist/index.es86.js.map +1 -1
  289. package/dist/index.es87.js +10 -230
  290. package/dist/index.es87.js.map +1 -1
  291. package/dist/index.es88.js +39 -29
  292. package/dist/index.es88.js.map +1 -1
  293. package/dist/index.es89.js +32 -73
  294. package/dist/index.es89.js.map +1 -1
  295. package/dist/index.es90.js +200 -44
  296. package/dist/index.es90.js.map +1 -1
  297. package/dist/index.es91.js +15 -37
  298. package/dist/index.es91.js.map +1 -1
  299. package/dist/index.es92.js +71 -26
  300. package/dist/index.es92.js.map +1 -1
  301. package/dist/index.es93.js +72 -39
  302. package/dist/index.es93.js.map +1 -1
  303. package/dist/index.es94.js +48 -53
  304. package/dist/index.es94.js.map +1 -1
  305. package/dist/index.es95.js +30 -13
  306. package/dist/index.es95.js.map +1 -1
  307. package/dist/index.es96.js +40 -134
  308. package/dist/index.es96.js.map +1 -1
  309. package/dist/index.es97.js +56 -20
  310. package/dist/index.es97.js.map +1 -1
  311. package/dist/index.es98.js +11 -180
  312. package/dist/index.es98.js.map +1 -1
  313. package/dist/index.es99.js +129 -233
  314. package/dist/index.es99.js.map +1 -1
  315. package/dist/styles.css +1 -1
  316. package/package.json +1 -1
@@ -1,256 +1,151 @@
1
- const sections = {
2
- 172351395: { name: "EBML", type: "Container" },
3
- 646: { name: "EBMLVersion", type: "Uint" },
4
- 759: { name: "EBMLReadVersion", type: "Uint" },
5
- 754: { name: "EBMLMaxIDLength", type: "Uint" },
6
- 755: { name: "EBMLMaxSizeLength", type: "Uint" },
7
- 642: { name: "DocType", type: "String" },
8
- 647: { name: "DocTypeVersion", type: "Uint" },
9
- 645: { name: "DocTypeReadVersion", type: "Uint" },
10
- 108: { name: "Void", type: "Binary" },
11
- 1161: { name: "Duration", type: "Float" },
12
- 139690087: { name: "Segment", type: "Container" },
13
- 88713574: { name: "Info", type: "Container" },
14
- 710577: { name: "TimecodeScale", type: "Uint" }
15
- };
16
- class WebmBase {
17
- source;
18
- data;
19
- name;
20
- type;
21
- constructor(name = "Unknown", type = "Unknown") {
22
- this.name = name;
23
- this.type = type;
24
- }
25
- updateBySource() {
26
- }
27
- setSource(source) {
28
- this.source = source;
29
- this.updateBySource();
30
- }
31
- updateByData() {
32
- }
33
- setData(data) {
34
- this.data = data;
35
- this.updateByData();
36
- }
37
- }
38
- class WebmUint extends WebmBase {
39
- constructor(name, type) {
40
- super(name, type || "Uint");
41
- }
42
- updateBySource() {
43
- this.data = "";
44
- for (let i = 0; i < this.source.length; i++) {
45
- const hex = this.source[i].toString(16);
46
- this.data += padHex(hex);
47
- }
48
- }
49
- updateByData() {
50
- const length = this.data.length / 2;
51
- this.source = new Uint8Array(length);
52
- for (let i = 0; i < length; i++) {
53
- const hex = this.data.substr(i * 2, 2);
54
- this.source[i] = parseInt(hex, 16);
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);
55
33
  }
56
- }
57
- getValue() {
58
- return parseInt(this.data, 16);
59
- }
60
- setValue(value) {
61
- this.setData(padHex(value.toString(16)));
62
- }
63
- }
64
- function padHex(hex) {
65
- return hex.length % 2 === 1 ? "0" + hex : hex;
66
- }
67
- class WebmFloat extends WebmBase {
68
- constructor(name, type) {
69
- super(name, type || "Float");
70
- }
71
- getFloatArrayType() {
72
- return this.source && this.source.length === 4 ? Float32Array : Float64Array;
73
- }
74
- updateBySource() {
75
- const byteArray = this.source.slice().reverse();
76
- const floatArrayType = this.getFloatArrayType();
77
- const floatArray = new floatArrayType(byteArray.buffer);
78
- this.data = floatArray[0];
79
- }
80
- updateByData() {
81
- const floatArrayType = this.getFloatArrayType();
82
- const floatArray = new floatArrayType([this.data]);
83
- const byteArray = new Uint8Array(floatArray.buffer);
84
- this.source = byteArray.slice().reverse();
85
- }
86
- getValue() {
87
- return this.data;
88
- }
89
- setValue(value) {
90
- this.setData(value);
91
- }
92
- }
93
- class WebmContainer extends WebmBase {
94
- offset = 0;
95
- data = [];
96
- constructor(name, type) {
97
- super(name, type || "Container");
98
- }
99
- readByte() {
100
- return this.source[this.offset++];
101
- }
102
- readUint() {
103
- const firstByte = this.readByte();
104
- const bytes = 8 - firstByte.toString(2).length;
105
- let value = firstByte - (1 << 7 - bytes);
106
- for (let i = 0; i < bytes; i++) {
107
- value *= 256;
108
- value += this.readByte();
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);
109
64
  }
110
- return value;
111
- }
112
- updateBySource() {
113
- let end = void 0;
114
- this.data = [];
115
- for (this.offset = 0; this.offset < this.source.length; this.offset = end) {
116
- const id = this.readUint();
117
- const len = this.readUint();
118
- end = Math.min(this.offset + len, this.source.length);
119
- const data = this.source.slice(this.offset, end);
120
- const info = sections[id] || { name: "Unknown", type: "Unknown" };
121
- let ctr = WebmBase;
122
- switch (info.type) {
123
- case "Container":
124
- ctr = WebmContainer;
125
- break;
126
- case "Uint":
127
- ctr = WebmUint;
128
- break;
129
- case "Float":
130
- ctr = WebmFloat;
131
- break;
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);
132
79
  }
133
- const section = new ctr(info.name, info.type);
134
- section.setSource(data);
135
- this.data.push({
80
+ sequence.items.push({
81
+ type: "node",
82
+ value,
83
+ path
84
+ });
85
+ queue.push({
136
86
  id,
137
- idHex: id.toString(16),
138
- data: section
87
+ sequence,
88
+ path
139
89
  });
140
90
  }
141
91
  }
142
- writeUint(x, draft = false) {
143
- let bytes = 1, flag = 128;
144
- while (x >= flag && bytes < 8) {
145
- bytes++;
146
- flag *= 128;
147
- }
148
- if (!draft) {
149
- let value = flag + x;
150
- for (let i = bytes - 1; i >= 0; i--) {
151
- const c = value % 256;
152
- this.source[this.offset + i] = c;
153
- value = (value - c) / 256;
154
- }
155
- }
156
- this.offset += bytes;
157
- }
158
- writeSections(draft = false) {
159
- this.offset = 0;
160
- for (let i = 0; i < this.data.length; i++) {
161
- const section = this.data[i], content = section.data.source, contentLength = content.length;
162
- this.writeUint(section.id, draft);
163
- this.writeUint(contentLength, draft);
164
- if (!draft) {
165
- this.source.set(content, this.offset);
166
- }
167
- this.offset += contentLength;
168
- }
169
- return this.offset;
170
- }
171
- updateByData() {
172
- const length = this.writeSections(true);
173
- this.source = new Uint8Array(length);
174
- this.writeSections();
175
- }
176
- getSectionById(id) {
177
- for (let i = 0; i < this.data.length; i++) {
178
- const section = this.data[i];
179
- if (section.id === id) {
180
- return section.data;
181
- }
182
- }
183
- return void 0;
184
- }
92
+ return {
93
+ rootSequence,
94
+ paths
95
+ };
185
96
  }
186
- class WebmFile extends WebmContainer {
187
- constructor(source) {
188
- super("File", "File");
189
- this.setSource(source);
190
- }
191
- fixDuration(duration) {
192
- const segmentSection = this.getSectionById(139690087);
193
- if (!segmentSection) {
194
- return false;
195
- }
196
- const infoSection = segmentSection.getSectionById(88713574);
197
- if (!infoSection) {
198
- return false;
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
+ };
199
121
  }
200
- const timeScaleSection = infoSection.getSectionById(710577);
201
- if (!timeScaleSection) {
202
- return false;
203
- }
204
- let durationSection = infoSection.getSectionById(1161);
205
- if (durationSection) {
206
- if (durationSection.getValue() <= 0) {
207
- durationSection.setValue(duration);
208
- } else {
209
- return false;
210
- }
211
- } else {
212
- durationSection = new WebmFloat("Duration", "Float");
213
- durationSection.setValue(duration);
214
- infoSection.data.push({
215
- id: 1161,
216
- data: durationSection
217
- });
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);
218
131
  }
219
- timeScaleSection.setValue(1e6);
220
- infoSection.updateByData();
221
- segmentSection.updateByData();
222
- this.updateByData();
223
- return true;
224
- }
225
- toBlob(type = "video/webm") {
226
- return new Blob([this.source.buffer], { type });
227
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
+ };
228
147
  }
229
- const webmFixDuration = (blob, duration, type = "video/webm") => {
230
- return new Promise((resolve, reject) => {
231
- try {
232
- const reader = new FileReader();
233
- reader.addEventListener("loadend", () => {
234
- try {
235
- const result = reader.result;
236
- const file = new WebmFile(new Uint8Array(result));
237
- if (file.fixDuration(duration)) {
238
- resolve(file.toBlob(type));
239
- } else {
240
- resolve(blob);
241
- }
242
- } catch (ex) {
243
- reject(ex);
244
- }
245
- });
246
- reader.addEventListener("error", () => reject());
247
- reader.readAsArrayBuffer(blob);
248
- } catch (ex) {
249
- reject(ex);
250
- }
251
- });
252
- };
253
148
  export {
254
- webmFixDuration
149
+ getBranchContext
255
150
  };
256
151
  //# sourceMappingURL=index.es55.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es55.js","sources":["../src/utils/BlobFix.ts"],"sourcesContent":["/*\n * There is a bug where `navigator.mediaDevices.getUserMedia` + `MediaRecorder`\n * creates WEBM files without duration metadata. See:\n * - https://bugs.chromium.org/p/chromium/issues/detail?id=642012\n * - https://stackoverflow.com/a/39971175/13989043\n *\n * This file contains a function that fixes the duration metadata of a WEBM file.\n * - Answer found: https://stackoverflow.com/a/75218309/13989043\n * - Code adapted from: https://github.com/mat-sz/webm-fix-duration\n * (forked from: https://github.com/yusitnikov/fix-webm-duration)\n */\n\ninterface Section {\n name: string;\n type: string;\n}\n\nconst sections: Record<number, Section> = {\n 0xa45dfa3: { name: \"EBML\", type: \"Container\" },\n 0x286: { name: \"EBMLVersion\", type: \"Uint\" },\n 0x2f7: { name: \"EBMLReadVersion\", type: \"Uint\" },\n 0x2f2: { name: \"EBMLMaxIDLength\", type: \"Uint\" },\n 0x2f3: { name: \"EBMLMaxSizeLength\", type: \"Uint\" },\n 0x282: { name: \"DocType\", type: \"String\" },\n 0x287: { name: \"DocTypeVersion\", type: \"Uint\" },\n 0x285: { name: \"DocTypeReadVersion\", type: \"Uint\" },\n 0x6c: { name: \"Void\", type: \"Binary\" },\n 0x489: { name: \"Duration\", type: \"Float\" },\n 0x8538067: { name: \"Segment\", type: \"Container\" },\n 0x549a966: { name: \"Info\", type: \"Container\" },\n 0xad7b1: { name: \"TimecodeScale\", type: \"Uint\" },\n};\n\nclass WebmBase<T> {\n source?: Uint8Array;\n data?: T;\n name: string;\n type: string;\n\n constructor(name = \"Unknown\", type = \"Unknown\") {\n this.name = name;\n this.type = type;\n }\n\n updateBySource() {}\n\n setSource(source: Uint8Array) {\n this.source = source;\n this.updateBySource();\n }\n\n updateByData() {}\n\n setData(data: T) {\n this.data = data;\n this.updateByData();\n }\n}\n\nclass WebmUint extends WebmBase<string> {\n constructor(name: string, type: string) {\n super(name, type || \"Uint\");\n }\n\n updateBySource() {\n this.data = \"\";\n for (let i = 0; i < this.source!.length; i++) {\n const hex = this.source![i].toString(16);\n this.data += padHex(hex);\n }\n }\n\n updateByData() {\n const length = this.data!.length / 2;\n this.source = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n const hex = this.data!.substr(i * 2, 2);\n this.source[i] = parseInt(hex, 16);\n }\n }\n\n getValue() {\n return parseInt(this.data!, 16);\n }\n\n setValue(value: number) {\n this.setData(padHex(value.toString(16)));\n }\n}\n\nfunction padHex(hex: string) {\n return hex.length % 2 === 1 ? \"0\" + hex : hex;\n}\n\nclass WebmFloat extends WebmBase<number> {\n constructor(name: string, type: string) {\n super(name, type || \"Float\");\n }\n\n getFloatArrayType() {\n return this.source && this.source.length === 4\n ? Float32Array\n : Float64Array;\n }\n \n updateBySource() {\n const byteArray = this.source!.slice().reverse();\n const floatArrayType = this.getFloatArrayType();\n const floatArray = new floatArrayType(byteArray.buffer as ArrayBuffer);\n this.data! = floatArray[0];\n }\n \n updateByData() {\n const floatArrayType = this.getFloatArrayType();\n const floatArray = new floatArrayType([this.data!]);\n const byteArray = new Uint8Array(floatArray.buffer as ArrayBuffer);\n this.source = byteArray.slice().reverse();\n }\n \n getValue() {\n return this.data;\n }\n \n setValue(value: number) {\n this.setData(value);\n }\n}\n\ninterface ContainerData {\n id: number;\n idHex?: string;\n data: WebmBase<any>;\n}\n\nclass WebmContainer extends WebmBase<ContainerData[]> {\n offset: number = 0;\n data: ContainerData[] = [];\n\n constructor(name: string, type: string) {\n super(name, type || \"Container\");\n }\n\n readByte() {\n return this.source![this.offset++];\n }\n \n readUint() {\n const firstByte = this.readByte();\n const bytes = 8 - firstByte.toString(2).length;\n let value = firstByte - (1 << (7 - bytes));\n for (let i = 0; i < bytes; i++) {\n value *= 256;\n value += this.readByte();\n }\n return value;\n }\n \n updateBySource() {\n let end: number | undefined = undefined;\n this.data = [];\n for (\n this.offset = 0;\n this.offset < this.source!.length;\n this.offset = end\n ) {\n const id = this.readUint();\n const len = this.readUint();\n end = Math.min(this.offset + len, this.source!.length);\n const data = this.source!.slice(this.offset, end);\n\n const info = sections[id] || { name: \"Unknown\", type: \"Unknown\" };\n let ctr: any = WebmBase;\n switch (info.type) {\n case \"Container\":\n ctr = WebmContainer;\n break;\n case \"Uint\":\n ctr = WebmUint;\n break;\n case \"Float\":\n ctr = WebmFloat;\n break;\n }\n const section = new ctr(info.name, info.type);\n section.setSource(data);\n this.data.push({\n id: id,\n idHex: id.toString(16),\n data: section,\n });\n }\n }\n \n writeUint(x: number, draft = false) {\n let bytes = 1, flag = 0x80;\n while (x >= flag && bytes < 8) {\n bytes++;\n flag *= 0x80;\n }\n\n if (!draft) {\n let value = flag + x;\n for (let i = bytes - 1; i >= 0; i--) {\n const c = value % 256;\n this.source![this.offset! + i] = c;\n value = (value - c) / 256;\n }\n }\n\n this.offset += bytes;\n }\n\n writeSections(draft = false) {\n this.offset = 0;\n for (let i = 0; i < this.data.length; i++) {\n const section = this.data[i],\n content = section.data.source,\n contentLength = content!.length;\n this.writeUint(section.id, draft);\n this.writeUint(contentLength, draft);\n if (!draft) {\n this.source!.set(content!, this.offset);\n }\n this.offset += contentLength;\n }\n return this.offset;\n }\n\n updateByData() {\n const length = this.writeSections(true);\n this.source = new Uint8Array(length);\n this.writeSections();\n }\n\n getSectionById(id: number) {\n for (let i = 0; i < this.data.length; i++) {\n const section = this.data[i];\n if (section.id === id) {\n return section.data;\n }\n }\n return undefined;\n }\n}\n\nclass WebmFile extends WebmContainer {\n constructor(source: Uint8Array) {\n super(\"File\", \"File\");\n this.setSource(source);\n }\n\n fixDuration(duration: number) {\n const segmentSection = this.getSectionById(0x8538067) as WebmContainer;\n if (!segmentSection) {\n return false;\n }\n\n const infoSection = segmentSection.getSectionById(0x549a966) as WebmContainer;\n if (!infoSection) {\n return false;\n }\n\n const timeScaleSection = infoSection.getSectionById(0xad7b1) as WebmFloat;\n if (!timeScaleSection) {\n return false;\n }\n\n let durationSection = infoSection.getSectionById(0x489) as WebmFloat;\n if (durationSection) {\n if (durationSection.getValue()! <= 0) {\n durationSection.setValue(duration);\n } else {\n return false;\n }\n } else {\n durationSection = new WebmFloat(\"Duration\", \"Float\");\n durationSection.setValue(duration);\n infoSection.data.push({\n id: 0x489,\n data: durationSection,\n });\n }\n\n timeScaleSection.setValue(1000000);\n infoSection.updateByData();\n segmentSection.updateByData();\n this.updateByData();\n\n return true;\n }\n\n toBlob(type = \"video/webm\") {\n return new Blob([this.source!.buffer as ArrayBuffer], { type });\n }\n}\n\nexport const webmFixDuration = (\n blob: Blob,\n duration: number,\n type = \"video/webm\",\n): Promise<Blob> => {\n return new Promise((resolve, reject) => {\n try {\n const reader = new FileReader();\n\n reader.addEventListener(\"loadend\", () => {\n try {\n const result = reader.result as ArrayBuffer;\n const file = new WebmFile(new Uint8Array(result));\n if (file.fixDuration(duration)) {\n resolve(file.toBlob(type));\n } else {\n resolve(blob);\n }\n } catch (ex) {\n reject(ex);\n }\n });\n\n reader.addEventListener(\"error\", () => reject());\n\n reader.readAsArrayBuffer(blob);\n } catch (ex) {\n reject(ex);\n }\n });\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.es55.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]}
@@ -1,4 +1,4 @@
1
- import { _mergeDicts } from "./index.es40.js";
1
+ import { _mergeDicts } from "./index.es45.js";
2
2
  function mergeResponseMetadata(a, b) {
3
3
  const output = _mergeDicts(a, b) ?? {};
4
4
  return output;
package/dist/index.es6.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { getApiKey } from "@langchain/langgraph-sdk";
2
+ import "@langchain/langgraph-sdk";
3
3
  import { createContext, useContext, useState, useEffect, useCallback } from "react";
4
4
  import { validate } from "uuid";
5
5
  import { useChatRuntime } from "./index.es5.js";
@@ -13,7 +13,7 @@ function getThreadSearchMetadata(assistantId) {
13
13
  }
14
14
  }
15
15
  function ThreadProvider({ children }) {
16
- const { apiUrl, assistantId } = useChatRuntime();
16
+ const { apiUrl, assistantId, identity } = useChatRuntime();
17
17
  const [threads, setThreads] = useState([]);
18
18
  const [threadsLoading, setThreadsLoading] = useState(false);
19
19
  const [threadId, setThreadId] = useState(null);
@@ -28,7 +28,12 @@ function ThreadProvider({ children }) {
28
28
  }, []);
29
29
  const getThreads = useCallback(async () => {
30
30
  if (!apiUrl || !assistantId) return [];
31
- const client = createClient(apiUrl, getApiKey("") ?? void 0);
31
+ if (!identity?.authToken) {
32
+ console.error("No authToken available for getThreads");
33
+ return [];
34
+ }
35
+ console.log("Fetching threads with authToken:", identity?.authToken);
36
+ const client = createClient(apiUrl, identity?.authToken ?? void 0);
32
37
  const threads2 = await client.threads.search({
33
38
  metadata: {
34
39
  ...getThreadSearchMetadata(assistantId)
@@ -36,23 +41,31 @@ function ThreadProvider({ children }) {
36
41
  limit: 100
37
42
  });
38
43
  return threads2;
39
- }, [apiUrl, assistantId]);
44
+ }, [apiUrl, assistantId, identity]);
40
45
  const deleteThread = useCallback(async (threadIdToDelete) => {
41
46
  if (!apiUrl) return;
42
- const client = createClient(apiUrl, getApiKey("") ?? void 0);
47
+ if (!identity?.authToken) {
48
+ console.error("No authToken available for deleteThread");
49
+ return;
50
+ }
51
+ const client = createClient(apiUrl, identity?.authToken ?? void 0);
43
52
  await client.threads.delete(threadIdToDelete);
44
53
  setThreads((prev) => prev.filter((t) => t.thread_id !== threadIdToDelete));
45
54
  if (threadId === threadIdToDelete) {
46
55
  setThreadId(null);
47
56
  }
48
- }, [apiUrl, threadId]);
57
+ }, [apiUrl, threadId, identity]);
49
58
  const updateThread = useCallback(async (threadIdToUpdate, metadata) => {
50
59
  if (!apiUrl) return;
51
- const client = createClient(apiUrl, getApiKey("") ?? void 0);
60
+ if (!identity?.authToken) {
61
+ console.error("No authToken available for updateThread");
62
+ return;
63
+ }
64
+ const client = createClient(apiUrl, identity?.authToken ?? void 0);
52
65
  await client.threads.update(threadIdToUpdate, { metadata });
53
66
  const updatedThreads = await getThreads();
54
67
  setThreads(updatedThreads);
55
- }, [apiUrl, getThreads]);
68
+ }, [apiUrl, getThreads, identity]);
56
69
  return /* @__PURE__ */ jsx(
57
70
  ThreadContext.Provider,
58
71
  {
@@ -1 +1 @@
1
- {"version":3,"file":"index.es6.js","sources":["../src/providers/Thread.tsx"],"sourcesContent":["import { getApiKey, type Thread } from \"@langchain/langgraph-sdk\";\nimport { createContext, useCallback, useContext, useEffect, useState, type Dispatch, type ReactNode, type SetStateAction } from \"react\";\nimport { validate } from \"uuid\";\nimport { useChatRuntime } from \"./ChatRuntime\";\nimport { createClient } from \"./client\";\n/**\n * Thread context manages the current conversation thread ID and configuration.\n * A thread represents a single conversation session with the AI.\n */\n\nexport type ThreadMode = \"single\" | \"multi\";\n\n\ninterface ThreadContextType {\n /** Current thread ID, null if no thread exists yet */\n threadId: string | null;\n /** Set or update the current thread ID */\n setThreadId: (id: string | null) => void;\n /** List of existing threads */\n threads: Thread[];\n /** Function to fetch existing threads from the API */\n getThreads: () => Promise<Thread[]>;\n /** Function to update the list of threads */\n setThreads: Dispatch<SetStateAction<Thread[]>>;\n /** Thread-specific configuration passed to the LangGraph API */\n configuration: any;\n /** Update thread configuration */\n setConfiguration: (config: any) => void;\n /** Whether threads are currently being loaded */\n threadsLoading: boolean;\n /** Set the loading state for threads */\n setThreadsLoading: Dispatch<SetStateAction<boolean>>;\n\n mode: ThreadMode;\n setMode: Dispatch<SetStateAction<ThreadMode>>;\n /** Delete a thread by ID */\n deleteThread: (threadId: string) => Promise<void>;\n /** Update thread metadata */\n updateThread: (threadId: string, metadata: Record<string, any>) => Promise<void>;\n // createNewThread: () => void;\n // clearThread: () => void;\n}\n\n\nconst ThreadContext = createContext<ThreadContextType | undefined>(undefined);\n\nfunction getThreadSearchMetadata(\n assistantId: string,\n): { graph_id: string } | { assistant_id: string } {\n if (validate(assistantId)) {\n return { assistant_id: assistantId };\n } else {\n return { graph_id: assistantId };\n }\n}\n\n/**\n * Provides thread management for chat conversations.\n * Stores the current thread ID and configuration.\n * \n * @example\n * ```tsx\n * <ThreadProvider>\n * <YourChatComponent />\n * </ThreadProvider>\n * ```\n */\nexport function ThreadProvider({ children }: { children: ReactNode }) {\n\n const { apiUrl, assistantId } = useChatRuntime();\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n const [threadId, setThreadId] = useState<string | null>(null);\n const [configuration, setConfiguration] = useState<any>();\n\n const [mode, setMode] = useState<ThreadMode>(\"single\");\n\n // Extract thread ID from URL query parameter on component mount\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const threadFromUrl = searchParams.get(\"thread\");\n if (threadFromUrl) {\n setThreadId(threadFromUrl);\n }\n }, []);\n\n\n const getThreads = useCallback(async (): Promise<Thread[]> => {\n if (!apiUrl || !assistantId) return [];\n const client = createClient(apiUrl, getApiKey(\"\") ?? undefined);\n\n const threads = await client.threads.search({\n metadata: {\n ...getThreadSearchMetadata(assistantId),\n },\n limit: 100,\n });\n\n return threads;\n }, [apiUrl, assistantId]);\n\n const deleteThread = useCallback(async (threadIdToDelete: string) => {\n if (!apiUrl) return;\n const client = createClient(apiUrl, getApiKey(\"\") ?? undefined);\n\n await client.threads.delete(threadIdToDelete);\n\n // Update local state\n setThreads(prev => prev.filter(t => t.thread_id !== threadIdToDelete));\n\n // Clear current thread if it was deleted\n if (threadId === threadIdToDelete) {\n setThreadId(null);\n }\n }, [apiUrl, threadId]);\n\n const updateThread = useCallback(async (threadIdToUpdate: string, metadata: Record<string, any>) => {\n if (!apiUrl) return;\n const client = createClient(apiUrl, getApiKey(\"\") ?? undefined);\n\n await client.threads.update(threadIdToUpdate, { metadata });\n\n // Refresh threads to get updated data\n const updatedThreads = await getThreads();\n setThreads(updatedThreads);\n }, [apiUrl, getThreads]);\n\n return (\n <ThreadContext.Provider\n value={{ mode, setMode, threadId, setThreadId, getThreads, threads, setThreads, configuration, setConfiguration, threadsLoading, setThreadsLoading, deleteThread, updateThread }}\n >\n {children}\n </ThreadContext.Provider>\n );\n}\n\n/**\n * Hook to access the current thread context.\n * Use this to get or set the thread ID and configuration.\n * \n * @throws {Error} If used outside of ThreadProvider\n * \n * @example\n * ```tsx\n * const { threadId, setThreadId, configuration, setConfiguration } = useThread();\n * ```\n */\nexport function useThread() {\n const context = useContext(ThreadContext);\n if (!context) {\n throw new Error(\"useThread must be used within a ThreadProvider\");\n }\n return context;\n}\n"],"names":["threads"],"mappings":";;;;;;AA4CA,MAAM,gBAAgB,cAA6C,MAAS;AAE5E,SAAS,wBACP,aACiD;AACjD,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,EAAE,cAAc,YAAA;AAAA,EACzB,OAAO;AACL,WAAO,EAAE,UAAU,YAAA;AAAA,EACrB;AACF;AAaO,SAAS,eAAe,EAAE,YAAqC;AAEpE,QAAM,EAAE,QAAQ,YAAA,IAAgB,eAAA;AAChC,QAAM,CAAC,SAAS,UAAU,IAAI,SAAmB,CAAA,CAAE;AACnD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAE1D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAA;AAE1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAqB,QAAQ;AAGrD,YAAU,MAAM;AACd,UAAM,eAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,UAAM,gBAAgB,aAAa,IAAI,QAAQ;AAC/C,QAAI,eAAe;AACjB,kBAAY,aAAa;AAAA,IAC3B;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,QAAM,aAAa,YAAY,YAA+B;AAC5D,QAAI,CAAC,UAAU,CAAC,oBAAoB,CAAA;AACpC,UAAM,SAAS,aAAa,QAAQ,UAAU,EAAE,KAAK,MAAS;AAE9D,UAAMA,WAAU,MAAM,OAAO,QAAQ,OAAO;AAAA,MAC1C,UAAU;AAAA,QACR,GAAG,wBAAwB,WAAW;AAAA,MAAA;AAAA,MAExC,OAAO;AAAA,IAAA,CACR;AAED,WAAOA;AAAAA,EACT,GAAG,CAAC,QAAQ,WAAW,CAAC;AAExB,QAAM,eAAe,YAAY,OAAO,qBAA6B;AACnE,QAAI,CAAC,OAAQ;AACb,UAAM,SAAS,aAAa,QAAQ,UAAU,EAAE,KAAK,MAAS;AAE9D,UAAM,OAAO,QAAQ,OAAO,gBAAgB;AAG5C,eAAW,UAAQ,KAAK,OAAO,OAAK,EAAE,cAAc,gBAAgB,CAAC;AAGrE,QAAI,aAAa,kBAAkB;AACjC,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,QAAQ,CAAC;AAErB,QAAM,eAAe,YAAY,OAAO,kBAA0B,aAAkC;AAClG,QAAI,CAAC,OAAQ;AACb,UAAM,SAAS,aAAa,QAAQ,UAAU,EAAE,KAAK,MAAS;AAE9D,UAAM,OAAO,QAAQ,OAAO,kBAAkB,EAAE,UAAU;AAG1D,UAAM,iBAAiB,MAAM,WAAA;AAC7B,eAAW,cAAc;AAAA,EAC3B,GAAG,CAAC,QAAQ,UAAU,CAAC;AAEvB,SACE;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAO,EAAE,MAAM,SAAS,UAAU,aAAa,YAAY,SAAS,YAAY,eAAe,kBAAkB,gBAAgB,mBAAmB,cAAc,aAAA;AAAA,MAEjK;AAAA,IAAA;AAAA,EAAA;AAGP;AAaO,SAAS,YAAY;AAC1B,QAAM,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;"}
1
+ {"version":3,"file":"index.es6.js","sources":["../src/providers/Thread.tsx"],"sourcesContent":["import { type Thread } from \"@langchain/langgraph-sdk\";\nimport { createContext, useCallback, useContext, useEffect, useState, type Dispatch, type ReactNode, type SetStateAction } from \"react\";\nimport { validate } from \"uuid\";\nimport { useChatRuntime } from \"./ChatRuntime\";\nimport { createClient } from \"./client\";\n/**\n * Thread context manages the current conversation thread ID and configuration.\n * A thread represents a single conversation session with the AI.\n */\n\nexport type ThreadMode = \"single\" | \"multi\";\n\n\ninterface ThreadContextType {\n /** Current thread ID, null if no thread exists yet */\n threadId: string | null;\n /** Set or update the current thread ID */\n setThreadId: (id: string | null) => void;\n /** List of existing threads */\n threads: Thread[];\n /** Function to fetch existing threads from the API */\n getThreads: () => Promise<Thread[]>;\n /** Function to update the list of threads */\n setThreads: Dispatch<SetStateAction<Thread[]>>;\n /** Thread-specific configuration passed to the LangGraph API */\n configuration: any;\n /** Update thread configuration */\n setConfiguration: (config: any) => void;\n /** Whether threads are currently being loaded */\n threadsLoading: boolean;\n /** Set the loading state for threads */\n setThreadsLoading: Dispatch<SetStateAction<boolean>>;\n\n mode: ThreadMode;\n setMode: Dispatch<SetStateAction<ThreadMode>>;\n /** Delete a thread by ID */\n deleteThread: (threadId: string) => Promise<void>;\n /** Update thread metadata */\n updateThread: (threadId: string, metadata: Record<string, any>) => Promise<void>;\n // createNewThread: () => void;\n // clearThread: () => void;\n}\n\n\nconst ThreadContext = createContext<ThreadContextType | undefined>(undefined);\n\nfunction getThreadSearchMetadata(\n assistantId: string,\n): { graph_id: string } | { assistant_id: string } {\n if (validate(assistantId)) {\n return { assistant_id: assistantId };\n } else {\n return { graph_id: assistantId };\n }\n}\n\n/**\n * Provides thread management for chat conversations.\n * Stores the current thread ID and configuration.\n * \n * @example\n * ```tsx\n * <ThreadProvider>\n * <YourChatComponent />\n * </ThreadProvider>\n * ```\n */\nexport function ThreadProvider({ children }: { children: ReactNode }) {\n\n const { apiUrl, assistantId, identity } = useChatRuntime();\n const [threads, setThreads] = useState<Thread[]>([]);\n const [threadsLoading, setThreadsLoading] = useState(false);\n\n const [threadId, setThreadId] = useState<string | null>(null);\n const [configuration, setConfiguration] = useState<any>();\n\n const [mode, setMode] = useState<ThreadMode>(\"single\");\n\n // Extract thread ID from URL query parameter on component mount\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search);\n const threadFromUrl = searchParams.get(\"thread\");\n if (threadFromUrl) {\n setThreadId(threadFromUrl);\n }\n }, []);\n\n\n const getThreads = useCallback(async (): Promise<Thread[]> => {\n if (!apiUrl || !assistantId) return [];\n if (!identity?.authToken) {\n console.error(\"No authToken available for getThreads\");\n return [];\n }\n console.log(\"Fetching threads with authToken:\", identity?.authToken);\n const client = createClient(apiUrl, identity?.authToken ?? undefined);\n\n const threads = await client.threads.search({\n metadata: {\n ...getThreadSearchMetadata(assistantId),\n },\n limit: 100,\n });\n\n return threads;\n }, [apiUrl, assistantId, identity]);\n\n const deleteThread = useCallback(async (threadIdToDelete: string) => {\n if (!apiUrl) return;\n if (!identity?.authToken) {\n console.error(\"No authToken available for deleteThread\");\n return;\n }\n const client = createClient(apiUrl, identity?.authToken ?? undefined);\n\n await client.threads.delete(threadIdToDelete);\n\n // Update local state\n setThreads(prev => prev.filter(t => t.thread_id !== threadIdToDelete));\n\n // Clear current thread if it was deleted\n if (threadId === threadIdToDelete) {\n setThreadId(null);\n }\n }, [apiUrl, threadId, identity]);\n\n const updateThread = useCallback(async (threadIdToUpdate: string, metadata: Record<string, any>) => {\n if (!apiUrl) return;\n if (!identity?.authToken) {\n console.error(\"No authToken available for updateThread\");\n return;\n }\n const client = createClient(apiUrl, identity?.authToken ?? undefined);\n\n await client.threads.update(threadIdToUpdate, { metadata });\n\n // Refresh threads to get updated data\n const updatedThreads = await getThreads();\n setThreads(updatedThreads);\n }, [apiUrl, getThreads, identity]);\n\n return (\n <ThreadContext.Provider\n value={{ mode, setMode, threadId, setThreadId, getThreads, threads, setThreads, configuration, setConfiguration, threadsLoading, setThreadsLoading, deleteThread, updateThread }}\n >\n {children}\n </ThreadContext.Provider>\n );\n}\n\n/**\n * Hook to access the current thread context.\n * Use this to get or set the thread ID and configuration.\n * \n * @throws {Error} If used outside of ThreadProvider\n * \n * @example\n * ```tsx\n * const { threadId, setThreadId, configuration, setConfiguration } = useThread();\n * ```\n */\nexport function useThread() {\n const context = useContext(ThreadContext);\n if (!context) {\n throw new Error(\"useThread must be used within a ThreadProvider\");\n }\n return context;\n}\n"],"names":["threads"],"mappings":";;;;;;AA4CA,MAAM,gBAAgB,cAA6C,MAAS;AAE5E,SAAS,wBACP,aACiD;AACjD,MAAI,SAAS,WAAW,GAAG;AACzB,WAAO,EAAE,cAAc,YAAA;AAAA,EACzB,OAAO;AACL,WAAO,EAAE,UAAU,YAAA;AAAA,EACrB;AACF;AAaO,SAAS,eAAe,EAAE,YAAqC;AAEpE,QAAM,EAAE,QAAQ,aAAa,SAAA,IAAa,eAAA;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAmB,CAAA,CAAE;AACnD,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAS,KAAK;AAE1D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAC5D,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAA;AAE1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAqB,QAAQ;AAGrD,YAAU,MAAM;AACd,UAAM,eAAe,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC/D,UAAM,gBAAgB,aAAa,IAAI,QAAQ;AAC/C,QAAI,eAAe;AACjB,kBAAY,aAAa;AAAA,IAC3B;AAAA,EACF,GAAG,CAAA,CAAE;AAGL,QAAM,aAAa,YAAY,YAA+B;AAC5D,QAAI,CAAC,UAAU,CAAC,oBAAoB,CAAA;AACpC,QAAI,CAAC,UAAU,WAAW;AACxB,cAAQ,MAAM,uCAAuC;AACrD,aAAO,CAAA;AAAA,IACT;AACA,YAAQ,IAAI,oCAAoC,UAAU,SAAS;AACnE,UAAM,SAAS,aAAa,QAAQ,UAAU,aAAa,MAAS;AAEpE,UAAMA,WAAU,MAAM,OAAO,QAAQ,OAAO;AAAA,MAC1C,UAAU;AAAA,QACR,GAAG,wBAAwB,WAAW;AAAA,MAAA;AAAA,MAExC,OAAO;AAAA,IAAA,CACR;AAED,WAAOA;AAAAA,EACT,GAAG,CAAC,QAAQ,aAAa,QAAQ,CAAC;AAElC,QAAM,eAAe,YAAY,OAAO,qBAA6B;AACnE,QAAI,CAAC,OAAQ;AACb,QAAI,CAAC,UAAU,WAAW;AACxB,cAAQ,MAAM,yCAAyC;AACvD;AAAA,IACF;AACA,UAAM,SAAS,aAAa,QAAQ,UAAU,aAAa,MAAS;AAEpE,UAAM,OAAO,QAAQ,OAAO,gBAAgB;AAG5C,eAAW,UAAQ,KAAK,OAAO,OAAK,EAAE,cAAc,gBAAgB,CAAC;AAGrE,QAAI,aAAa,kBAAkB;AACjC,kBAAY,IAAI;AAAA,IAClB;AAAA,EACF,GAAG,CAAC,QAAQ,UAAU,QAAQ,CAAC;AAE/B,QAAM,eAAe,YAAY,OAAO,kBAA0B,aAAkC;AAClG,QAAI,CAAC,OAAQ;AACb,QAAI,CAAC,UAAU,WAAW;AACxB,cAAQ,MAAM,yCAAyC;AACvD;AAAA,IACF;AACA,UAAM,SAAS,aAAa,QAAQ,UAAU,aAAa,MAAS;AAEpE,UAAM,OAAO,QAAQ,OAAO,kBAAkB,EAAE,UAAU;AAG1D,UAAM,iBAAiB,MAAM,WAAA;AAC7B,eAAW,cAAc;AAAA,EAC3B,GAAG,CAAC,QAAQ,YAAY,QAAQ,CAAC;AAEjC,SACE;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACC,OAAO,EAAE,MAAM,SAAS,UAAU,aAAa,YAAY,SAAS,YAAY,eAAe,kBAAkB,gBAAgB,mBAAmB,cAAc,aAAA;AAAA,MAEjK;AAAA,IAAA;AAAA,EAAA;AAGP;AAaO,SAAS,YAAY;AAC1B,QAAM,UAAU,WAAW,aAAa;AACxC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,gDAAgD;AAAA,EAClE;AACA,SAAO;AACT;"}
@@ -1,4 +1,4 @@
1
- import { BaseMessageChunk, _mergeDicts, mergeContent, BaseMessage } from "./index.es40.js";
1
+ import { BaseMessageChunk, _mergeDicts, mergeContent, BaseMessage } from "./index.es45.js";
2
2
  var ChatMessage = class ChatMessage2 extends BaseMessage {
3
3
  static lc_name() {
4
4
  return "ChatMessage";
@@ -1,4 +1,4 @@
1
- import { BaseMessageChunk, _mergeDicts, mergeContent, BaseMessage } from "./index.es40.js";
1
+ import { BaseMessageChunk, _mergeDicts, mergeContent, BaseMessage } from "./index.es45.js";
2
2
  var FunctionMessage = class extends BaseMessage {
3
3
  static lc_name() {
4
4
  return "FunctionMessage";
@@ -1,12 +1,12 @@
1
- import { isBaseMessageChunk } from "./index.es40.js";
2
- import { ToolMessageChunk, ToolMessage } from "./index.es44.js";
1
+ import { isBaseMessageChunk } from "./index.es45.js";
2
+ import { ToolMessageChunk, ToolMessage } from "./index.es49.js";
3
3
  import { ChatMessageChunk, ChatMessage } from "./index.es60.js";
4
4
  import { FunctionMessageChunk, FunctionMessage } from "./index.es61.js";
5
- import { HumanMessageChunk, HumanMessage } from "./index.es41.js";
6
- import { RemoveMessage } from "./index.es45.js";
7
- import { SystemMessageChunk, SystemMessage } from "./index.es43.js";
8
- import { convertToChunk } from "./index.es46.js";
9
- import { AIMessageChunk, AIMessage } from "./index.es42.js";
5
+ import { HumanMessageChunk, HumanMessage } from "./index.es46.js";
6
+ import { RemoveMessage } from "./index.es50.js";
7
+ import { SystemMessageChunk, SystemMessage } from "./index.es48.js";
8
+ import { convertToChunk } from "./index.es51.js";
9
+ import { AIMessageChunk, AIMessage } from "./index.es47.js";
10
10
  import { RunnableLambda } from "./index.es78.js";
11
11
  const _isMessageType = (msg, types) => {
12
12
  const typesAsStrings = [...new Set(types?.map((t) => {
@@ -1,8 +1,8 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { PrismAsyncLight } from "react-syntax-highlighter";
3
- import tsx from "./index.es115.js";
4
- import python from "./index.es116.js";
5
- import { p as prismExports } from "./index.es117.js";
3
+ import tsx from "./index.es84.js";
4
+ import python from "./index.es85.js";
5
+ import { p as prismExports } from "./index.es86.js";
6
6
  import "react";
7
7
  PrismAsyncLight.registerLanguage("js", tsx);
8
8
  PrismAsyncLight.registerLanguage("jsx", tsx);
@@ -1,6 +1,6 @@
1
1
  import { __export } from "./index.es56.js";
2
- import { mapKeys, keyToJson } from "./index.es84.js";
3
- import { escapeIfNeeded } from "./index.es85.js";
2
+ import { mapKeys, keyToJson } from "./index.es87.js";
3
+ import { escapeIfNeeded } from "./index.es88.js";
4
4
  var serializable_exports = {};
5
5
  __export(serializable_exports, {
6
6
  Serializable: () => Serializable,
@@ -1,4 +1,4 @@
1
- import { _isContentBlock, _isObject, _isString, _isArray, iife, safeParseJson, _isNumber } from "./index.es86.js";
1
+ import { _isContentBlock, _isObject, _isString, _isArray, iife, safeParseJson, _isNumber } from "./index.es89.js";
2
2
  function convertAnthropicAnnotation(citation) {
3
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
4
  const { document_title, start_char_index, end_char_index, cited_text, ...rest } = citation;
@@ -1,5 +1,5 @@
1
1
  import { isURLContentBlock, isBase64ContentBlock, isIDContentBlock, parseBase64DataUrl } from "./index.es57.js";
2
- import { _isContentBlock, _isObject, _isString } from "./index.es86.js";
2
+ import { _isContentBlock, _isObject, _isString } from "./index.es89.js";
3
3
  function convertToV1FromDataContentBlock(block) {
4
4
  if (isURLContentBlock(block)) return {
5
5
  type: block.type,
@@ -1,4 +1,4 @@
1
- import { _isObject, _isArray, _isString, _isContentBlock, iife } from "./index.es86.js";
1
+ import { _isObject, _isArray, _isString, _isContentBlock, iife } from "./index.es89.js";
2
2
  import { isOpenAIDataBlock, convertToV1FromOpenAIDataBlock } from "./index.es71.js";
3
3
  function convertToV1FromChatCompletions(message) {
4
4
  const blocks = [];