langgraph-ui-components 0.0.3 → 0.0.4
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.
- package/README.md +32 -0
- package/dist/index.es100.js +3157 -5
- package/dist/index.es100.js.map +1 -1
- package/dist/index.es101.js +35 -71
- package/dist/index.es101.js.map +1 -1
- package/dist/index.es102.js +5 -37
- package/dist/index.es102.js.map +1 -1
- package/dist/index.es103.js +73 -5
- package/dist/index.es103.js.map +1 -1
- package/dist/index.es104.js +39 -2
- package/dist/index.es104.js.map +1 -1
- package/dist/index.es105.js +5 -11
- package/dist/index.es105.js.map +1 -1
- package/dist/index.es106.js +2 -503
- package/dist/index.es106.js.map +1 -1
- package/dist/index.es107.js +11 -5
- package/dist/index.es107.js.map +1 -1
- package/dist/index.es108.js +503 -2
- package/dist/index.es108.js.map +1 -1
- package/dist/index.es109.js +5 -146
- package/dist/index.es109.js.map +1 -1
- package/dist/index.es110.js +2 -908
- package/dist/index.es110.js.map +1 -1
- package/dist/index.es111.js +128 -262
- package/dist/index.es111.js.map +1 -1
- package/dist/index.es112.js +907 -3
- package/dist/index.es112.js.map +1 -1
- package/dist/index.es113.js +262 -426
- package/dist/index.es113.js.map +1 -1
- package/dist/index.es114.js +3 -47
- package/dist/index.es114.js.map +1 -1
- package/dist/index.es115.js +443 -21
- package/dist/index.es115.js.map +1 -1
- package/dist/index.es116.js +42 -75
- package/dist/index.es116.js.map +1 -1
- package/dist/index.es117.js +22 -129
- package/dist/index.es117.js.map +1 -1
- package/dist/index.es118.js +74 -44
- package/dist/index.es118.js.map +1 -1
- package/dist/index.es119.js +129 -10
- package/dist/index.es119.js.map +1 -1
- package/dist/index.es12.js +7 -7
- package/dist/index.es12.js.map +1 -1
- package/dist/index.es120.js +47 -43
- package/dist/index.es120.js.map +1 -1
- package/dist/index.es121.js +9 -98
- package/dist/index.es121.js.map +1 -1
- package/dist/index.es122.js +43 -51
- package/dist/index.es122.js.map +1 -1
- package/dist/index.es123.js +96 -13
- package/dist/index.es123.js.map +1 -1
- package/dist/index.es124.js +52 -14
- package/dist/index.es124.js.map +1 -1
- package/dist/index.es125.js +13 -86
- package/dist/index.es125.js.map +1 -1
- package/dist/index.es126.js +15 -2
- package/dist/index.es126.js.map +1 -1
- package/dist/index.es127.js +87 -54
- package/dist/index.es127.js.map +1 -1
- package/dist/index.es128.js +2 -100
- package/dist/index.es128.js.map +1 -1
- package/dist/index.es129.js +51 -186
- package/dist/index.es129.js.map +1 -1
- package/dist/index.es13.js +5 -6
- package/dist/index.es13.js.map +1 -1
- package/dist/index.es130.js +87 -97
- package/dist/index.es130.js.map +1 -1
- package/dist/index.es131.js +187 -31
- package/dist/index.es131.js.map +1 -1
- package/dist/index.es132.js +110 -10
- package/dist/index.es132.js.map +1 -1
- package/dist/index.es133.js +35 -11
- package/dist/index.es133.js.map +1 -1
- package/dist/index.es134.js +10 -12
- package/dist/index.es134.js.map +1 -1
- package/dist/index.es135.js +10 -90
- package/dist/index.es135.js.map +1 -1
- package/dist/index.es136.js +11 -274
- package/dist/index.es136.js.map +1 -1
- package/dist/index.es137.js +91 -2
- package/dist/index.es137.js.map +1 -1
- package/dist/index.es138.js +261 -150
- package/dist/index.es138.js.map +1 -1
- package/dist/index.es139.js +2 -51
- package/dist/index.es139.js.map +1 -1
- package/dist/index.es140.js +158 -34
- package/dist/index.es140.js.map +1 -1
- package/dist/index.es141.js +50 -34
- package/dist/index.es141.js.map +1 -1
- package/dist/index.es142.js +32 -32
- package/dist/index.es142.js.map +1 -1
- package/dist/index.es143.js +34 -23
- package/dist/index.es143.js.map +1 -1
- package/dist/index.es144.js +32 -583
- package/dist/index.es144.js.map +1 -1
- package/dist/index.es145.js +20 -121
- package/dist/index.es145.js.map +1 -1
- package/dist/index.es146.js +585 -158
- package/dist/index.es146.js.map +1 -1
- package/dist/index.es147.js +125 -2
- package/dist/index.es147.js.map +1 -1
- package/dist/index.es148.js +164 -2
- package/dist/index.es148.js.map +1 -1
- package/dist/index.es149.js +2 -2
- package/dist/index.es15.js +15 -15
- package/dist/index.es150.js +2 -22
- package/dist/index.es150.js.map +1 -1
- package/dist/index.es151.js +2 -2
- package/dist/index.es152.js +21 -24
- package/dist/index.es152.js.map +1 -1
- package/dist/index.es153.js +2 -4
- package/dist/index.es153.js.map +1 -1
- package/dist/index.es154.js +25 -5
- package/dist/index.es154.js.map +1 -1
- package/dist/index.es155.js +7 -12
- package/dist/index.es155.js.map +1 -1
- package/dist/index.es156.js +5 -6
- package/dist/index.es156.js.map +1 -1
- package/dist/index.es157.js +12 -7
- package/dist/index.es157.js.map +1 -1
- package/dist/index.es158.js +6 -64
- package/dist/index.es158.js.map +1 -1
- package/dist/index.es159.js +63 -21
- package/dist/index.es159.js.map +1 -1
- package/dist/index.es16.js +2 -2
- package/dist/index.es160.js +21 -5
- package/dist/index.es160.js.map +1 -1
- package/dist/index.es161.js +5 -348
- package/dist/index.es161.js.map +1 -1
- package/dist/index.es162.js +346 -22
- package/dist/index.es162.js.map +1 -1
- package/dist/index.es163.js +25 -12
- package/dist/index.es163.js.map +1 -1
- package/dist/index.es164.js +11 -53
- package/dist/index.es164.js.map +1 -1
- package/dist/index.es165.js +53 -6
- package/dist/index.es165.js.map +1 -1
- package/dist/index.es166.js +7 -103
- package/dist/index.es166.js.map +1 -1
- package/dist/index.es167.js +101 -117
- package/dist/index.es167.js.map +1 -1
- package/dist/index.es168.js +110 -127
- package/dist/index.es168.js.map +1 -1
- package/dist/index.es169.js +128 -107
- package/dist/index.es169.js.map +1 -1
- package/dist/index.es17.js +2 -2
- package/dist/index.es170.js +115 -6
- package/dist/index.es170.js.map +1 -1
- package/dist/index.es171.js +6 -2
- package/dist/index.es171.js.map +1 -1
- package/dist/index.es172.js +3 -141
- package/dist/index.es172.js.map +1 -1
- package/dist/index.es173.js +2 -2
- package/dist/index.es174.js +2 -2
- package/dist/index.es175.js +1 -1
- package/dist/index.es177.js +2 -2
- package/dist/index.es179.js +1 -1
- package/dist/index.es182.js +1 -1
- package/dist/index.es19.js +15 -119
- package/dist/index.es19.js.map +1 -1
- package/dist/index.es190.js +142 -32
- package/dist/index.es190.js.map +1 -1
- package/dist/index.es191.js +2 -6
- package/dist/index.es191.js.map +1 -1
- package/dist/index.es192.js +31 -105
- package/dist/index.es192.js.map +1 -1
- package/dist/index.es193.js +6 -13
- package/dist/index.es193.js.map +1 -1
- package/dist/index.es194.js +105 -17
- package/dist/index.es194.js.map +1 -1
- package/dist/index.es195.js +11 -29
- package/dist/index.es195.js.map +1 -1
- package/dist/index.es196.js +17 -3
- package/dist/index.es196.js.map +1 -1
- package/dist/index.es197.js +30 -4
- package/dist/index.es197.js.map +1 -1
- package/dist/index.es198.js +4 -5
- package/dist/index.es198.js.map +1 -1
- package/dist/index.es199.js +4 -36
- package/dist/index.es199.js.map +1 -1
- package/dist/index.es2.js +2 -2
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es20.js +68 -17
- package/dist/index.es20.js.map +1 -1
- package/dist/index.es200.js +5 -8
- package/dist/index.es200.js.map +1 -1
- package/dist/index.es201.js +36 -5
- package/dist/index.es201.js.map +1 -1
- package/dist/index.es202.js +5 -4
- package/dist/index.es202.js.map +1 -1
- package/dist/index.es203.js +5 -41
- package/dist/index.es203.js.map +1 -1
- package/dist/index.es204.js +4 -10
- package/dist/index.es204.js.map +1 -1
- package/dist/index.es205.js +39 -239
- package/dist/index.es205.js.map +1 -1
- package/dist/index.es206.js +10 -48
- package/dist/index.es206.js.map +1 -1
- package/dist/index.es207.js +239 -32
- package/dist/index.es207.js.map +1 -1
- package/dist/index.es208.js +49 -11
- package/dist/index.es208.js.map +1 -1
- package/dist/index.es209.js +33 -6
- package/dist/index.es209.js.map +1 -1
- package/dist/index.es21.js +36 -67
- package/dist/index.es21.js.map +1 -1
- package/dist/index.es210.js +12 -6
- package/dist/index.es210.js.map +1 -1
- package/dist/index.es211.js +7 -64
- package/dist/index.es211.js.map +1 -1
- package/dist/index.es212.js +6 -40
- package/dist/index.es212.js.map +1 -1
- package/dist/index.es213.js +63 -30
- package/dist/index.es213.js.map +1 -1
- package/dist/index.es214.js +35 -56
- package/dist/index.es214.js.map +1 -1
- package/dist/index.es215.js +32 -15
- package/dist/index.es215.js.map +1 -1
- package/dist/index.es216.js +60 -21
- package/dist/index.es216.js.map +1 -1
- package/dist/index.es217.js +15 -5
- package/dist/index.es217.js.map +1 -1
- package/dist/index.es218.js +21 -15
- package/dist/index.es218.js.map +1 -1
- package/dist/index.es219.js +4 -32
- package/dist/index.es219.js.map +1 -1
- package/dist/index.es22.js +25 -34
- package/dist/index.es22.js.map +1 -1
- package/dist/index.es220.js +16 -4
- package/dist/index.es220.js.map +1 -1
- package/dist/index.es221.js +32 -4
- package/dist/index.es221.js.map +1 -1
- package/dist/index.es222.js +5 -5
- package/dist/index.es222.js.map +1 -1
- package/dist/index.es223.js +4 -7
- package/dist/index.es223.js.map +1 -1
- package/dist/index.es224.js +4 -91
- package/dist/index.es224.js.map +1 -1
- package/dist/index.es225.js +7 -17
- package/dist/index.es225.js.map +1 -1
- package/dist/index.es226.js +90 -760
- package/dist/index.es226.js.map +1 -1
- package/dist/index.es227.js +18 -66
- package/dist/index.es227.js.map +1 -1
- package/dist/index.es228.js +749 -161
- package/dist/index.es228.js.map +1 -1
- package/dist/index.es229.js +66 -38
- package/dist/index.es229.js.map +1 -1
- package/dist/index.es23.js +144 -29
- package/dist/index.es23.js.map +1 -1
- package/dist/index.es230.js +172 -135
- package/dist/index.es230.js.map +1 -1
- package/dist/index.es231.js +37 -92
- package/dist/index.es231.js.map +1 -1
- package/dist/index.es232.js +135 -31
- package/dist/index.es232.js.map +1 -1
- package/dist/index.es233.js +92 -284
- package/dist/index.es233.js.map +1 -1
- package/dist/index.es234.js +31 -24
- package/dist/index.es234.js.map +1 -1
- package/dist/index.es235.js +284 -23
- package/dist/index.es235.js.map +1 -1
- package/dist/index.es236.js +24 -13
- package/dist/index.es236.js.map +1 -1
- package/dist/index.es237.js +22 -13
- package/dist/index.es237.js.map +1 -1
- package/dist/index.es238.js +13 -24
- package/dist/index.es238.js.map +1 -1
- package/dist/index.es239.js +12 -43
- package/dist/index.es239.js.map +1 -1
- package/dist/index.es24.js +291 -133
- package/dist/index.es24.js.map +1 -1
- package/dist/index.es240.js +24 -10
- package/dist/index.es240.js.map +1 -1
- package/dist/index.es241.js +45 -11
- package/dist/index.es241.js.map +1 -1
- package/dist/index.es242.js +10 -10
- package/dist/index.es242.js.map +1 -1
- package/dist/index.es243.js +11 -14
- package/dist/index.es243.js.map +1 -1
- package/dist/index.es244.js +10 -10
- package/dist/index.es244.js.map +1 -1
- package/dist/index.es245.js +14 -11
- package/dist/index.es245.js.map +1 -1
- package/dist/index.es246.js +11 -11
- package/dist/index.es246.js.map +1 -1
- package/dist/index.es247.js +11 -15
- package/dist/index.es247.js.map +1 -1
- package/dist/index.es248.js +11 -11
- package/dist/index.es248.js.map +1 -1
- package/dist/index.es249.js +15 -11
- package/dist/index.es249.js.map +1 -1
- package/dist/index.es25.js +116 -96
- package/dist/index.es25.js.map +1 -1
- package/dist/index.es250.js +11 -11
- package/dist/index.es250.js.map +1 -1
- package/dist/index.es251.js +11 -11
- package/dist/index.es251.js.map +1 -1
- package/dist/index.es252.js +10 -10
- package/dist/index.es252.js.map +1 -1
- package/dist/index.es253.js +10 -10
- package/dist/index.es253.js.map +1 -1
- package/dist/index.es254.js +10 -10
- package/dist/index.es254.js.map +1 -1
- package/dist/index.es255.js +10 -10
- package/dist/index.es255.js.map +1 -1
- package/dist/index.es256.js +11 -56
- package/dist/index.es256.js.map +1 -1
- package/dist/index.es257.js +11 -49
- package/dist/index.es257.js.map +1 -1
- package/dist/index.es258.js +51 -114
- package/dist/index.es258.js.map +1 -1
- package/dist/index.es259.js +43 -378
- package/dist/index.es259.js.map +1 -1
- package/dist/index.es26.js +5 -70
- package/dist/index.es26.js.map +1 -1
- package/dist/index.es260.js +117 -16
- package/dist/index.es260.js.map +1 -1
- package/dist/index.es261.js +384 -11
- package/dist/index.es261.js.map +1 -1
- package/dist/index.es262.js +13 -26
- package/dist/index.es262.js.map +1 -1
- package/dist/index.es263.js +10 -30
- package/dist/index.es263.js.map +1 -1
- package/dist/index.es264.js +25 -56
- package/dist/index.es264.js.map +1 -1
- package/dist/index.es265.js +25 -11
- package/dist/index.es265.js.map +1 -1
- package/dist/index.es266.js +49 -64
- package/dist/index.es266.js.map +1 -1
- package/dist/index.es267.js +17 -11
- package/dist/index.es267.js.map +1 -1
- package/dist/index.es268.js +77 -11
- package/dist/index.es268.js.map +1 -1
- package/dist/index.es269.js +11 -15
- package/dist/index.es269.js.map +1 -1
- package/dist/index.es27.js +91 -168
- package/dist/index.es27.js.map +1 -1
- package/dist/index.es270.js +11 -52
- package/dist/index.es270.js.map +1 -1
- package/dist/index.es271.js +13 -164
- package/dist/index.es271.js.map +1 -1
- package/dist/index.es272.js +53 -2
- package/dist/index.es272.js.map +1 -1
- package/dist/index.es273.js +166 -10
- package/dist/index.es273.js.map +1 -1
- package/dist/index.es274.js +2 -20
- package/dist/index.es274.js.map +1 -1
- package/dist/index.es275.js +10 -38
- package/dist/index.es275.js.map +1 -1
- package/dist/index.es276.js +23 -0
- package/dist/index.es276.js.map +1 -0
- package/dist/index.es277.js +42 -0
- package/dist/index.es277.js.map +1 -0
- package/dist/index.es28.js +68 -24
- package/dist/index.es28.js.map +1 -1
- package/dist/index.es29.js +178 -12
- package/dist/index.es29.js.map +1 -1
- package/dist/index.es30.js +23 -437
- package/dist/index.es30.js.map +1 -1
- package/dist/index.es31.js +13 -15
- package/dist/index.es31.js.map +1 -1
- package/dist/index.es32.js +429 -107
- package/dist/index.es32.js.map +1 -1
- package/dist/index.es33.js +13 -70
- package/dist/index.es33.js.map +1 -1
- package/dist/index.es34.js +119 -19
- package/dist/index.es34.js.map +1 -1
- package/dist/index.es35.js +66 -256
- package/dist/index.es35.js.map +1 -1
- package/dist/index.es36.js +17 -42
- package/dist/index.es36.js.map +1 -1
- package/dist/index.es37.js +239 -193
- package/dist/index.es37.js.map +1 -1
- package/dist/index.es38.js +17 -41
- package/dist/index.es38.js.map +1 -1
- package/dist/index.es39.js +193 -120
- package/dist/index.es39.js.map +1 -1
- package/dist/index.es40.js +60 -17
- package/dist/index.es40.js.map +1 -1
- package/dist/index.es41.js +123 -211
- package/dist/index.es41.js.map +1 -1
- package/dist/index.es42.js +22 -7
- package/dist/index.es42.js.map +1 -1
- package/dist/index.es43.js +214 -1176
- package/dist/index.es43.js.map +1 -1
- package/dist/index.es44.js +10 -8
- package/dist/index.es44.js.map +1 -1
- package/dist/index.es45.js +1182 -137
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +8 -8
- package/dist/index.es46.js.map +1 -1
- package/dist/index.es47.js +138 -84
- package/dist/index.es47.js.map +1 -1
- package/dist/index.es48.js +8 -4
- package/dist/index.es48.js.map +1 -1
- package/dist/index.es49.js +91 -33
- package/dist/index.es49.js.map +1 -1
- package/dist/index.es50.js +3 -71
- package/dist/index.es50.js.map +1 -1
- package/dist/index.es51.js +34 -36
- package/dist/index.es51.js.map +1 -1
- package/dist/index.es52.js +61 -295
- package/dist/index.es52.js.map +1 -1
- package/dist/index.es53.js +38 -9
- package/dist/index.es53.js.map +1 -1
- package/dist/index.es54.js +296 -81
- package/dist/index.es54.js.map +1 -1
- package/dist/index.es55.js +9 -8
- package/dist/index.es55.js.map +1 -1
- package/dist/index.es56.js +89 -13
- package/dist/index.es56.js.map +1 -1
- package/dist/index.es57.js +6 -141
- package/dist/index.es57.js.map +1 -1
- package/dist/index.es58.js +12 -297
- package/dist/index.es58.js.map +1 -1
- package/dist/index.es59.js +137 -60
- package/dist/index.es59.js.map +1 -1
- package/dist/index.es6.js +21 -5
- package/dist/index.es6.js.map +1 -1
- package/dist/index.es60.js +247 -160
- package/dist/index.es60.js.map +1 -1
- package/dist/index.es61.js +63 -31
- package/dist/index.es61.js.map +1 -1
- package/dist/index.es62.js +212 -8
- package/dist/index.es62.js.map +1 -1
- package/dist/index.es63.js +32 -10
- package/dist/index.es63.js.map +1 -1
- package/dist/index.es64.js +8 -186
- package/dist/index.es64.js.map +1 -1
- package/dist/index.es65.js +11 -23
- package/dist/index.es65.js.map +1 -1
- package/dist/index.es66.js +183 -1396
- package/dist/index.es66.js.map +1 -1
- package/dist/index.es67.js +24 -9
- package/dist/index.es67.js.map +1 -1
- package/dist/index.es68.js +1400 -8
- package/dist/index.es68.js.map +1 -1
- package/dist/index.es69.js +9 -6
- package/dist/index.es69.js.map +1 -1
- package/dist/index.es70.js +8 -163
- package/dist/index.es70.js.map +1 -1
- package/dist/index.es71.js +6 -672
- package/dist/index.es71.js.map +1 -1
- package/dist/index.es72.js +161 -10
- package/dist/index.es72.js.map +1 -1
- package/dist/index.es73.js +671 -39
- package/dist/index.es73.js.map +1 -1
- package/dist/index.es74.js +10 -32
- package/dist/index.es74.js.map +1 -1
- package/dist/index.es75.js +31 -223
- package/dist/index.es75.js.map +1 -1
- package/dist/index.es76.js +33 -29
- package/dist/index.es76.js.map +1 -1
- package/dist/index.es77.js +193 -36
- package/dist/index.es77.js.map +1 -1
- package/dist/index.es78.js +26 -72
- package/dist/index.es78.js.map +1 -1
- package/dist/index.es79.js +70 -47
- package/dist/index.es79.js.map +1 -1
- package/dist/index.es80.js +72 -26
- package/dist/index.es80.js.map +1 -1
- package/dist/index.es81.js +37 -28
- package/dist/index.es81.js.map +1 -1
- package/dist/index.es82.js +28 -55
- package/dist/index.es82.js.map +1 -1
- package/dist/index.es83.js +43 -13
- package/dist/index.es83.js.map +1 -1
- package/dist/index.es84.js +52 -132
- package/dist/index.es84.js.map +1 -1
- package/dist/index.es85.js +13 -21
- package/dist/index.es85.js.map +1 -1
- package/dist/index.es86.js +124 -169
- package/dist/index.es86.js.map +1 -1
- package/dist/index.es87.js +19 -239
- package/dist/index.es87.js.map +1 -1
- package/dist/index.es88.js +165 -338
- package/dist/index.es88.js.map +1 -1
- package/dist/index.es89.js +231 -127
- package/dist/index.es89.js.map +1 -1
- package/dist/index.es90.js +348 -63
- package/dist/index.es90.js.map +1 -1
- package/dist/index.es91.js +133 -33
- package/dist/index.es91.js.map +1 -1
- package/dist/index.es92.js +67 -34
- package/dist/index.es92.js.map +1 -1
- package/dist/index.es93.js +33 -162
- package/dist/index.es93.js.map +1 -1
- package/dist/index.es94.js +34 -200
- package/dist/index.es94.js.map +1 -1
- package/dist/index.es95.js +165 -13
- package/dist/index.es95.js.map +1 -1
- package/dist/index.es96.js +198 -25
- package/dist/index.es96.js.map +1 -1
- package/dist/index.es97.js +13 -33
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +24 -3151
- package/dist/index.es98.js.map +1 -1
- package/dist/index.es99.js +30 -33
- package/dist/index.es99.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +5 -1
package/dist/index.es59.js
CHANGED
|
@@ -1,69 +1,146 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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;
|
|
1
|
+
import { __export } from "./index.es48.js";
|
|
2
|
+
import { mapKeys, keyToJson } from "./index.es74.js";
|
|
3
|
+
import { escapeIfNeeded } from "./index.es75.js";
|
|
4
|
+
var serializable_exports = {};
|
|
5
|
+
__export(serializable_exports, {
|
|
6
|
+
Serializable: () => Serializable,
|
|
7
|
+
get_lc_unique_name: () => get_lc_unique_name
|
|
8
|
+
});
|
|
9
|
+
function shallowCopy(obj) {
|
|
10
|
+
return Array.isArray(obj) ? [...obj] : { ...obj };
|
|
23
11
|
}
|
|
24
|
-
function
|
|
25
|
-
|
|
12
|
+
function replaceSecrets(root, secretsMap) {
|
|
13
|
+
const result = shallowCopy(root);
|
|
14
|
+
for (const [path, secretId] of Object.entries(secretsMap)) {
|
|
15
|
+
const [last, ...partsReverse] = path.split(".").reverse();
|
|
16
|
+
let current = result;
|
|
17
|
+
for (const part of partsReverse.reverse()) {
|
|
18
|
+
if (current[part] === void 0) break;
|
|
19
|
+
current[part] = shallowCopy(current[part]);
|
|
20
|
+
current = current[part];
|
|
21
|
+
}
|
|
22
|
+
if (current[last] !== void 0) current[last] = {
|
|
23
|
+
lc: 1,
|
|
24
|
+
type: "secret",
|
|
25
|
+
id: [secretId]
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
26
29
|
}
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
return
|
|
30
|
+
function get_lc_unique_name(serializableClass) {
|
|
31
|
+
const parentClass = Object.getPrototypeOf(serializableClass);
|
|
32
|
+
const lcNameIsSubclassed = typeof serializableClass.lc_name === "function" && (typeof parentClass.lc_name !== "function" || serializableClass.lc_name() !== parentClass.lc_name());
|
|
33
|
+
if (lcNameIsSubclassed) return serializableClass.lc_name();
|
|
34
|
+
else return serializableClass.name;
|
|
32
35
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
36
|
+
var Serializable = class Serializable2 {
|
|
37
|
+
lc_serializable = false;
|
|
38
|
+
lc_kwargs;
|
|
39
|
+
/**
|
|
40
|
+
* The name of the serializable. Override to provide an alias or
|
|
41
|
+
* to preserve the serialized module name in minified environments.
|
|
42
|
+
*
|
|
43
|
+
* Implemented as a static method to support loading logic.
|
|
44
|
+
*/
|
|
45
|
+
static lc_name() {
|
|
46
|
+
return this.name;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The final serialized identifier for the module.
|
|
50
|
+
*/
|
|
51
|
+
get lc_id() {
|
|
52
|
+
return [...this.lc_namespace, get_lc_unique_name(this.constructor)];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A map of secrets, which will be omitted from serialization.
|
|
56
|
+
* Keys are paths to the secret in constructor args, e.g. "foo.bar.baz".
|
|
57
|
+
* Values are the secret ids, which will be used when deserializing.
|
|
58
|
+
*/
|
|
59
|
+
get lc_secrets() {
|
|
60
|
+
return void 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A map of additional attributes to merge with constructor args.
|
|
64
|
+
* Keys are the attribute names, e.g. "foo".
|
|
65
|
+
* Values are the attribute values, which will be serialized.
|
|
66
|
+
* These attributes need to be accepted by the constructor as arguments.
|
|
67
|
+
*/
|
|
68
|
+
get lc_attributes() {
|
|
69
|
+
return void 0;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* A map of aliases for constructor args.
|
|
73
|
+
* Keys are the attribute names, e.g. "foo".
|
|
74
|
+
* Values are the alias that will replace the key in serialization.
|
|
75
|
+
* This is used to eg. make argument names match Python.
|
|
76
|
+
*/
|
|
77
|
+
get lc_aliases() {
|
|
78
|
+
return void 0;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A manual list of keys that should be serialized.
|
|
82
|
+
* If not overridden, all fields passed into the constructor will be serialized.
|
|
83
|
+
*/
|
|
84
|
+
get lc_serializable_keys() {
|
|
85
|
+
return void 0;
|
|
86
|
+
}
|
|
87
|
+
constructor(kwargs, ..._args) {
|
|
88
|
+
if (this.lc_serializable_keys !== void 0) this.lc_kwargs = Object.fromEntries(Object.entries(kwargs || {}).filter(([key]) => this.lc_serializable_keys?.includes(key)));
|
|
89
|
+
else this.lc_kwargs = kwargs ?? {};
|
|
90
|
+
}
|
|
91
|
+
toJSON() {
|
|
92
|
+
if (!this.lc_serializable) return this.toJSONNotImplemented();
|
|
93
|
+
if (this.lc_kwargs instanceof Serializable2 || typeof this.lc_kwargs !== "object" || Array.isArray(this.lc_kwargs)) return this.toJSONNotImplemented();
|
|
94
|
+
const aliases = {};
|
|
95
|
+
const secrets = {};
|
|
96
|
+
const kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {
|
|
97
|
+
acc[key] = key in this ? this[key] : this.lc_kwargs[key];
|
|
98
|
+
return acc;
|
|
99
|
+
}, {});
|
|
100
|
+
for (let current = Object.getPrototypeOf(this); current; current = Object.getPrototypeOf(current)) {
|
|
101
|
+
Object.assign(aliases, Reflect.get(current, "lc_aliases", this));
|
|
102
|
+
Object.assign(secrets, Reflect.get(current, "lc_secrets", this));
|
|
103
|
+
Object.assign(kwargs, Reflect.get(current, "lc_attributes", this));
|
|
104
|
+
}
|
|
105
|
+
Object.keys(secrets).forEach((keyPath) => {
|
|
106
|
+
let read = this;
|
|
107
|
+
let write = kwargs;
|
|
108
|
+
const [last, ...partsReverse] = keyPath.split(".").reverse();
|
|
109
|
+
for (const key of partsReverse.reverse()) {
|
|
110
|
+
if (!(key in read) || read[key] === void 0) return;
|
|
111
|
+
if (!(key in write) || write[key] === void 0) {
|
|
112
|
+
if (typeof read[key] === "object" && read[key] != null) write[key] = {};
|
|
113
|
+
else if (Array.isArray(read[key])) write[key] = [];
|
|
114
|
+
}
|
|
115
|
+
read = read[key];
|
|
116
|
+
write = write[key];
|
|
117
|
+
}
|
|
118
|
+
if (last in read && read[last] !== void 0) write[last] = write[last] || read[last];
|
|
119
|
+
});
|
|
120
|
+
const escapedKwargs = {};
|
|
121
|
+
const pathSet = /* @__PURE__ */ new WeakSet();
|
|
122
|
+
pathSet.add(this);
|
|
123
|
+
for (const [key, value] of Object.entries(kwargs)) escapedKwargs[key] = escapeIfNeeded(value, pathSet);
|
|
124
|
+
const kwargsWithSecrets = Object.keys(secrets).length ? replaceSecrets(escapedKwargs, secrets) : escapedKwargs;
|
|
125
|
+
const processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);
|
|
126
|
+
return {
|
|
127
|
+
lc: 1,
|
|
128
|
+
type: "constructor",
|
|
129
|
+
id: this.lc_id,
|
|
130
|
+
kwargs: processedKwargs
|
|
56
131
|
};
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
132
|
+
}
|
|
133
|
+
toJSONNotImplemented() {
|
|
134
|
+
return {
|
|
135
|
+
lc: 1,
|
|
136
|
+
type: "not_implemented",
|
|
137
|
+
id: this.lc_id
|
|
60
138
|
};
|
|
61
139
|
}
|
|
62
|
-
|
|
63
|
-
}
|
|
140
|
+
};
|
|
64
141
|
export {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
142
|
+
Serializable,
|
|
143
|
+
get_lc_unique_name,
|
|
144
|
+
serializable_exports
|
|
68
145
|
};
|
|
69
146
|
//# sourceMappingURL=index.es59.js.map
|
package/dist/index.es59.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es59.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/
|
|
1
|
+
{"version":3,"file":"index.es59.js","sources":["../node_modules/.pnpm/@langchain+core@1.1.13_openai@6.16.0_zod@4.3.5_/node_modules/@langchain/core/dist/load/serializable.js"],"sourcesContent":["import { __export } from \"../_virtual/rolldown_runtime.js\";\nimport { keyToJson, mapKeys } from \"./map_keys.js\";\nimport { escapeIfNeeded } from \"./validation.js\";\n\n//#region src/load/serializable.ts\nvar serializable_exports = {};\n__export(serializable_exports, {\n\tSerializable: () => Serializable,\n\tget_lc_unique_name: () => get_lc_unique_name\n});\nfunction shallowCopy(obj) {\n\treturn Array.isArray(obj) ? [...obj] : { ...obj };\n}\nfunction replaceSecrets(root, secretsMap) {\n\tconst result = shallowCopy(root);\n\tfor (const [path, secretId] of Object.entries(secretsMap)) {\n\t\tconst [last, ...partsReverse] = path.split(\".\").reverse();\n\t\tlet current = result;\n\t\tfor (const part of partsReverse.reverse()) {\n\t\t\tif (current[part] === void 0) break;\n\t\t\tcurrent[part] = shallowCopy(current[part]);\n\t\t\tcurrent = current[part];\n\t\t}\n\t\tif (current[last] !== void 0) current[last] = {\n\t\t\tlc: 1,\n\t\t\ttype: \"secret\",\n\t\t\tid: [secretId]\n\t\t};\n\t}\n\treturn result;\n}\n/**\n* Get a unique name for the module, rather than parent class implementations.\n* Should not be subclassed, subclass lc_name above instead.\n*/\nfunction get_lc_unique_name(serializableClass) {\n\tconst parentClass = Object.getPrototypeOf(serializableClass);\n\tconst lcNameIsSubclassed = typeof serializableClass.lc_name === \"function\" && (typeof parentClass.lc_name !== \"function\" || serializableClass.lc_name() !== parentClass.lc_name());\n\tif (lcNameIsSubclassed) return serializableClass.lc_name();\n\telse return serializableClass.name;\n}\nvar Serializable = class Serializable {\n\tlc_serializable = false;\n\tlc_kwargs;\n\t/**\n\t* The name of the serializable. Override to provide an alias or\n\t* to preserve the serialized module name in minified environments.\n\t*\n\t* Implemented as a static method to support loading logic.\n\t*/\n\tstatic lc_name() {\n\t\treturn this.name;\n\t}\n\t/**\n\t* The final serialized identifier for the module.\n\t*/\n\tget lc_id() {\n\t\treturn [...this.lc_namespace, get_lc_unique_name(this.constructor)];\n\t}\n\t/**\n\t* A map of secrets, which will be omitted from serialization.\n\t* Keys are paths to the secret in constructor args, e.g. \"foo.bar.baz\".\n\t* Values are the secret ids, which will be used when deserializing.\n\t*/\n\tget lc_secrets() {\n\t\treturn void 0;\n\t}\n\t/**\n\t* A map of additional attributes to merge with constructor args.\n\t* Keys are the attribute names, e.g. \"foo\".\n\t* Values are the attribute values, which will be serialized.\n\t* These attributes need to be accepted by the constructor as arguments.\n\t*/\n\tget lc_attributes() {\n\t\treturn void 0;\n\t}\n\t/**\n\t* A map of aliases for constructor args.\n\t* Keys are the attribute names, e.g. \"foo\".\n\t* Values are the alias that will replace the key in serialization.\n\t* This is used to eg. make argument names match Python.\n\t*/\n\tget lc_aliases() {\n\t\treturn void 0;\n\t}\n\t/**\n\t* A manual list of keys that should be serialized.\n\t* If not overridden, all fields passed into the constructor will be serialized.\n\t*/\n\tget lc_serializable_keys() {\n\t\treturn void 0;\n\t}\n\tconstructor(kwargs, ..._args) {\n\t\tif (this.lc_serializable_keys !== void 0) this.lc_kwargs = Object.fromEntries(Object.entries(kwargs || {}).filter(([key]) => this.lc_serializable_keys?.includes(key)));\n\t\telse this.lc_kwargs = kwargs ?? {};\n\t}\n\ttoJSON() {\n\t\tif (!this.lc_serializable) return this.toJSONNotImplemented();\n\t\tif (this.lc_kwargs instanceof Serializable || typeof this.lc_kwargs !== \"object\" || Array.isArray(this.lc_kwargs)) return this.toJSONNotImplemented();\n\t\tconst aliases = {};\n\t\tconst secrets = {};\n\t\tconst kwargs = Object.keys(this.lc_kwargs).reduce((acc, key) => {\n\t\t\tacc[key] = key in this ? this[key] : this.lc_kwargs[key];\n\t\t\treturn acc;\n\t\t}, {});\n\t\tfor (let current = Object.getPrototypeOf(this); current; current = Object.getPrototypeOf(current)) {\n\t\t\tObject.assign(aliases, Reflect.get(current, \"lc_aliases\", this));\n\t\t\tObject.assign(secrets, Reflect.get(current, \"lc_secrets\", this));\n\t\t\tObject.assign(kwargs, Reflect.get(current, \"lc_attributes\", this));\n\t\t}\n\t\tObject.keys(secrets).forEach((keyPath) => {\n\t\t\tlet read = this;\n\t\t\tlet write = kwargs;\n\t\t\tconst [last, ...partsReverse] = keyPath.split(\".\").reverse();\n\t\t\tfor (const key of partsReverse.reverse()) {\n\t\t\t\tif (!(key in read) || read[key] === void 0) return;\n\t\t\t\tif (!(key in write) || write[key] === void 0) {\n\t\t\t\t\tif (typeof read[key] === \"object\" && read[key] != null) write[key] = {};\n\t\t\t\t\telse if (Array.isArray(read[key])) write[key] = [];\n\t\t\t\t}\n\t\t\t\tread = read[key];\n\t\t\t\twrite = write[key];\n\t\t\t}\n\t\t\tif (last in read && read[last] !== void 0) write[last] = write[last] || read[last];\n\t\t});\n\t\tconst escapedKwargs = {};\n\t\tconst pathSet = /* @__PURE__ */ new WeakSet();\n\t\tpathSet.add(this);\n\t\tfor (const [key, value] of Object.entries(kwargs)) escapedKwargs[key] = escapeIfNeeded(value, pathSet);\n\t\tconst kwargsWithSecrets = Object.keys(secrets).length ? replaceSecrets(escapedKwargs, secrets) : escapedKwargs;\n\t\tconst processedKwargs = mapKeys(kwargsWithSecrets, keyToJson, aliases);\n\t\treturn {\n\t\t\tlc: 1,\n\t\t\ttype: \"constructor\",\n\t\t\tid: this.lc_id,\n\t\t\tkwargs: processedKwargs\n\t\t};\n\t}\n\ttoJSONNotImplemented() {\n\t\treturn {\n\t\t\tlc: 1,\n\t\t\ttype: \"not_implemented\",\n\t\t\tid: this.lc_id\n\t\t};\n\t}\n};\n\n//#endregion\nexport { Serializable, get_lc_unique_name, serializable_exports };\n//# sourceMappingURL=serializable.js.map"],"names":["Serializable"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/index.es6.js
CHANGED
|
@@ -83,10 +83,12 @@ const StreamSession = ({ children }) => {
|
|
|
83
83
|
if (options?.type === "ai") {
|
|
84
84
|
setLocalMessages((prev) => [...prev, messageObj]);
|
|
85
85
|
if (options.ui && options.ui.length > 0) {
|
|
86
|
-
const uiWithMessageId = options.ui.map((ui) => ({
|
|
86
|
+
const uiWithMessageId = options.ui.map((ui, index) => ({
|
|
87
87
|
...ui,
|
|
88
|
-
id: messageId
|
|
89
|
-
//
|
|
88
|
+
id: messageId,
|
|
89
|
+
// Link to the message ID so CustomComponentRender can find it
|
|
90
|
+
// Ensure each UI component has a unique identifier for React keys
|
|
91
|
+
_key: ui._key || `${messageId}-ui-${index}`
|
|
90
92
|
}));
|
|
91
93
|
setLocalUI((prev) => [...prev, ...uiWithMessageId]);
|
|
92
94
|
}
|
|
@@ -111,10 +113,24 @@ const StreamSession = ({ children }) => {
|
|
|
111
113
|
[streamValue, identity, configuration, setLocalMessages, setLocalUI]
|
|
112
114
|
);
|
|
113
115
|
const combinedMessages = useMemo(() => {
|
|
114
|
-
|
|
116
|
+
const allMessages = [...localMessages, ...streamValue.messages || []];
|
|
117
|
+
const seen = /* @__PURE__ */ new Set();
|
|
118
|
+
return allMessages.filter((msg) => {
|
|
119
|
+
if (!msg.id) return true;
|
|
120
|
+
if (seen.has(msg.id)) return false;
|
|
121
|
+
seen.add(msg.id);
|
|
122
|
+
return true;
|
|
123
|
+
});
|
|
115
124
|
}, [localMessages, streamValue.messages]);
|
|
116
125
|
const combinedUI = useMemo(() => {
|
|
117
|
-
|
|
126
|
+
const allUI = [...localUI, ...streamValue.values?.ui || []];
|
|
127
|
+
const seen = /* @__PURE__ */ new Set();
|
|
128
|
+
return allUI.filter((ui) => {
|
|
129
|
+
const key = ui._key || `${ui.id}-${ui.name}`;
|
|
130
|
+
if (seen.has(key)) return false;
|
|
131
|
+
seen.add(key);
|
|
132
|
+
return true;
|
|
133
|
+
});
|
|
118
134
|
}, [localUI, streamValue.values?.ui]);
|
|
119
135
|
const submitMessage = useCallback(
|
|
120
136
|
async (message, options) => {
|
package/dist/index.es6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es6.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\";\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};\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\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 // console.log(\"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 => ({\n ...ui,\n id: messageId, // Use the same message ID so CustomComponentRender can find it\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, maintaining chronological order\n const combinedMessages = useMemo(() => {\n return [...localMessages, ...(streamValue.messages || [])];\n }, [localMessages, streamValue.messages]);\n\n // Combine local UI with stream UI\n const combinedUI = useMemo(() => {\n // console.log(\"Combining local UI with stream UI:\", localUI, streamValue.values?.ui);\n return [...localUI, ...(streamValue.values?.ui || [])];\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 }),\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.es6.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\";\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};\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\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 // console.log(\"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 }),\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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"}
|