@xpert-ai/chatkit-ui 0.0.15 → 0.0.16

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 (287) hide show
  1. package/dist/app/assets/{abap-BWs0QYPi.js → abap-BoIjZmaZ.js} +1 -1
  2. package/dist/app/assets/{abnf-D836Ekee.js → abnf-dSbn3xkN.js} +1 -1
  3. package/dist/app/assets/{actionscript-DwxVdnYd.js → actionscript-ChuNDFqb.js} +1 -1
  4. package/dist/app/assets/{ada-DuqPZP7y.js → ada-Dvd3C277.js} +1 -1
  5. package/dist/app/assets/{agda--lKV47zi.js → agda-0xfHec_W.js} +1 -1
  6. package/dist/app/assets/{al-DmWukAFp.js → al-Coze2G4P.js} +1 -1
  7. package/dist/app/assets/{antlr4-Cui9A7Z6.js → antlr4-DAeOwqy-.js} +1 -1
  8. package/dist/app/assets/{apacheconf-p7Nhi2d3.js → apacheconf-C37ePIkJ.js} +1 -1
  9. package/dist/app/assets/{apex-wwNmkUuv.js → apex-DH8r9Bnu.js} +1 -1
  10. package/dist/app/assets/{apl-CQGwfDry.js → apl-G86Tst_e.js} +1 -1
  11. package/dist/app/assets/{applescript-CxRglPCi.js → applescript-D7AnwBsW.js} +1 -1
  12. package/dist/app/assets/{aql-DzrzGLDh.js → aql-CEIMa69e.js} +1 -1
  13. package/dist/app/assets/{arduino-Bl4m690J.js → arduino-C4__FgG7.js} +1 -1
  14. package/dist/app/assets/{arff-Bi4yNRUp.js → arff-DucTCOwY.js} +1 -1
  15. package/dist/app/assets/{asciidoc-CPTTRBXf.js → asciidoc-b6l_xRT-.js} +1 -1
  16. package/dist/app/assets/{asm6502-CBolQ2s3.js → asm6502-B2aeOPaQ.js} +1 -1
  17. package/dist/app/assets/{asmatmel-DwyOAW8C.js → asmatmel-DWoi6J9F.js} +1 -1
  18. package/dist/app/assets/{aspnet-K1n3IryN.js → aspnet-CWRG9aUZ.js} +1 -1
  19. package/dist/app/assets/{autohotkey-DKr5NeGL.js → autohotkey-B0_8QbTJ.js} +1 -1
  20. package/dist/app/assets/{autoit-BmaRQ3eS.js → autoit-CHJRnMaa.js} +1 -1
  21. package/dist/app/assets/{avisynth-B5jllq4s.js → avisynth-nYVaucuS.js} +1 -1
  22. package/dist/app/assets/{avro-idl-D79eqXPk.js → avro-idl-5HEY8nyQ.js} +1 -1
  23. package/dist/app/assets/{bash-DWI44uVu.js → bash-CbjNmFNe.js} +1 -1
  24. package/dist/app/assets/{basic-DX5tJRab.js → basic-Bk4MU9TY.js} +1 -1
  25. package/dist/app/assets/{batch-BZon0dQf.js → batch-BVR1Z-Ze.js} +1 -1
  26. package/dist/app/assets/{bbcode-CCzrmpJu.js → bbcode-BXZzCVWs.js} +1 -1
  27. package/dist/app/assets/{bicep-BhU89M6Z.js → bicep-C7--NbzV.js} +1 -1
  28. package/dist/app/assets/{birb-CpbVfpC3.js → birb-BoaEfruo.js} +1 -1
  29. package/dist/app/assets/{bison-C7eKJdUK.js → bison-46XaAAX9.js} +1 -1
  30. package/dist/app/assets/{bnf-C41JeurH.js → bnf-iXMbAgBJ.js} +1 -1
  31. package/dist/app/assets/{brainfuck-DL3BN1lC.js → brainfuck-Jzxh49W2.js} +1 -1
  32. package/dist/app/assets/{brightscript-C1ciaxot.js → brightscript-BadaxwXh.js} +1 -1
  33. package/dist/app/assets/{bro-DeUBCRiY.js → bro-CR7xdyd-.js} +1 -1
  34. package/dist/app/assets/{bsl-BVdoLWrt.js → bsl-9EeFiwxQ.js} +1 -1
  35. package/dist/app/assets/{c-D-NlgPSm.js → c-DQ7liO6a.js} +1 -1
  36. package/dist/app/assets/{cfscript-CI77gY57.js → cfscript-SALoq7FX.js} +1 -1
  37. package/dist/app/assets/{chaiscript-D92IIXjK.js → chaiscript-CNEL74a4.js} +1 -1
  38. package/dist/app/assets/{cil-Vi00szx4.js → cil-C2ZEDTDB.js} +1 -1
  39. package/dist/app/assets/{clike-K_AYaoxN.js → clike-DsD21Evf.js} +1 -1
  40. package/dist/app/assets/{clojure-IjprIaXK.js → clojure-CZHHyOHz.js} +1 -1
  41. package/dist/app/assets/{cmake-CiZsn6Cd.js → cmake-CTchcqYX.js} +1 -1
  42. package/dist/app/assets/{cobol-BsMCYJOB.js → cobol-BiftCL-L.js} +1 -1
  43. package/dist/app/assets/{coffeescript-Tn0NVIMO.js → coffeescript-DijTcNNW.js} +1 -1
  44. package/dist/app/assets/{concurnas-Qkduv-yR.js → concurnas-ard6ErmL.js} +1 -1
  45. package/dist/app/assets/{coq-CkiZ3gEL.js → coq-i9-qHej_.js} +1 -1
  46. package/dist/app/assets/{core-BIe9U2bi.js → core-aj5JZjcO.js} +1 -1
  47. package/dist/app/assets/{cpp-DUkuUOiy.js → cpp-BT7nVZr2.js} +1 -1
  48. package/dist/app/assets/{crystal-DzDaEh84.js → crystal-_iZ0Q5Jk.js} +1 -1
  49. package/dist/app/assets/{csharp-Ds4tzl1h.js → csharp-CTQVhFeP.js} +1 -1
  50. package/dist/app/assets/{cshtml-XSfeicox.js → cshtml-DVHl3YlJ.js} +1 -1
  51. package/dist/app/assets/{csp-BnuytBc2.js → csp-Jhq_JW1m.js} +1 -1
  52. package/dist/app/assets/{css-uvHkMV3H.js → css-Cokpob_V.js} +1 -1
  53. package/dist/app/assets/{css-extras-BYbzAK7f.js → css-extras-BZG-mKgU.js} +1 -1
  54. package/dist/app/assets/{csv-ZTBDHIMG.js → csv-DJ6MtS6f.js} +1 -1
  55. package/dist/app/assets/{cypher-8jmGfbdR.js → cypher-DLIBipvO.js} +1 -1
  56. package/dist/app/assets/{d-DFbflmjx.js → d-vgJqU9a6.js} +1 -1
  57. package/dist/app/assets/{dart-xe2OJ0zL.js → dart-mEK1vzDL.js} +1 -1
  58. package/dist/app/assets/{dataweave-cyUIz_PL.js → dataweave-Dgcq8Rdn.js} +1 -1
  59. package/dist/app/assets/{dax-BnxULnvb.js → dax-C7NOquac.js} +1 -1
  60. package/dist/app/assets/{dhall-DkVQZ3C3.js → dhall-DQcztP06.js} +1 -1
  61. package/dist/app/assets/{diff-u2elSjyY.js → diff-CIWhtMw0.js} +1 -1
  62. package/dist/app/assets/{django-DWfaa1BH.js → django-B28DWuEq.js} +1 -1
  63. package/dist/app/assets/{dns-zone-file-BxxD9YiY.js → dns-zone-file-C0LYWClw.js} +1 -1
  64. package/dist/app/assets/{docker-agJ_fYVN.js → docker-XC07_dge.js} +1 -1
  65. package/dist/app/assets/{dot-DfK48nzU.js → dot-B-cLSr2L.js} +1 -1
  66. package/dist/app/assets/{ebnf-D2_uN5ZR.js → ebnf-LdHuV98Q.js} +1 -1
  67. package/dist/app/assets/{editorconfig-Bkm8bu86.js → editorconfig-6qFF56uJ.js} +1 -1
  68. package/dist/app/assets/{eiffel-KNdMI65Y.js → eiffel-BBlop-Ob.js} +1 -1
  69. package/dist/app/assets/{ejs-CscaSYIN.js → ejs-Cpb8mc_5.js} +1 -1
  70. package/dist/app/assets/{elixir-BNlWI1r7.js → elixir-BCH_jx6L.js} +1 -1
  71. package/dist/app/assets/{elm-CNwbF3_9.js → elm-BYitJ5N8.js} +1 -1
  72. package/dist/app/assets/{erb-DtFL1xmZ.js → erb-BM71CWBM.js} +1 -1
  73. package/dist/app/assets/{erlang-C0jBeitv.js → erlang-C3MAiPYK.js} +1 -1
  74. package/dist/app/assets/{etlua-B_FYDHoo.js → etlua-B59J9deP.js} +1 -1
  75. package/dist/app/assets/{excel-formula-Ddk-Nf9I.js → excel-formula-DL0sVnhe.js} +1 -1
  76. package/dist/app/assets/{factor-CmwX-7Jh.js → factor-C0qd9-Ik.js} +1 -1
  77. package/dist/app/assets/{false-DyBWE4qx.js → false-CJfgqy4_.js} +1 -1
  78. package/dist/app/assets/{firestore-security-rules-BnA9yQQx.js → firestore-security-rules-DwecoR3J.js} +1 -1
  79. package/dist/app/assets/{flow-DN7IgZst.js → flow-CDbqIUbL.js} +1 -1
  80. package/dist/app/assets/{fortran-CWBI75l9.js → fortran-hpiaS8_6.js} +1 -1
  81. package/dist/app/assets/{fsharp-Be4_1ptQ.js → fsharp-DbRhkxgi.js} +1 -1
  82. package/dist/app/assets/{ftl-CGRdQf4s.js → ftl-1DykyJWZ.js} +1 -1
  83. package/dist/app/assets/{gap-BKioDcPC.js → gap-DoGlEwd3.js} +1 -1
  84. package/dist/app/assets/{gcode-Dn2cLzkC.js → gcode-D-Px2cE_.js} +1 -1
  85. package/dist/app/assets/{gdscript-CJOS-gjk.js → gdscript-BrNoOncy.js} +1 -1
  86. package/dist/app/assets/{gedcom-CplceX5G.js → gedcom-B_NdfrML.js} +1 -1
  87. package/dist/app/assets/{gherkin-DMSysr5I.js → gherkin-CqgRkfNX.js} +1 -1
  88. package/dist/app/assets/{git-CPW7sXGf.js → git-CvFmzhfv.js} +1 -1
  89. package/dist/app/assets/{glsl-k-facHOT.js → glsl-CLucsEPA.js} +1 -1
  90. package/dist/app/assets/{gml-CV--3uCc.js → gml-BlpkejAp.js} +1 -1
  91. package/dist/app/assets/{gn-jkosEbNS.js → gn-BhXi_GxX.js} +1 -1
  92. package/dist/app/assets/{go-BNQLRlmA.js → go-2dcH9sSS.js} +1 -1
  93. package/dist/app/assets/{go-module-DbWOj2H0.js → go-module-DzMt3K71.js} +1 -1
  94. package/dist/app/assets/{graphql-usPW3Fl7.js → graphql-dsIFYpYZ.js} +1 -1
  95. package/dist/app/assets/{groovy-MKE1O2R9.js → groovy-DgzpjP_D.js} +1 -1
  96. package/dist/app/assets/{haml-_mDStvsq.js → haml-DT74cpdh.js} +1 -1
  97. package/dist/app/assets/{handlebars-CIl8TmZq.js → handlebars-Dz1-cyuE.js} +1 -1
  98. package/dist/app/assets/{haskell-Cm4BzUdQ.js → haskell-BtvH26fL.js} +1 -1
  99. package/dist/app/assets/{haxe-COKxOzXV.js → haxe-CJ2gszbA.js} +1 -1
  100. package/dist/app/assets/{hcl-DUZa-9cr.js → hcl-BNZH9Ib9.js} +1 -1
  101. package/dist/app/assets/{hlsl-Dxo1rrBG.js → hlsl-CSuHbA9t.js} +1 -1
  102. package/dist/app/assets/{hoon-DZk8Paai.js → hoon-BeJF0lUF.js} +1 -1
  103. package/dist/app/assets/{hpkp-Bf9ZU2kJ.js → hpkp-Biss6dVt.js} +1 -1
  104. package/dist/app/assets/{hsts-CMX9dH_c.js → hsts-CLEmT2zf.js} +1 -1
  105. package/dist/app/assets/{http-BdPDUUlX.js → http-CTrWhEI8.js} +1 -1
  106. package/dist/app/assets/{ichigojam-DZWqQfTk.js → ichigojam-CM00i9P4.js} +1 -1
  107. package/dist/app/assets/{icon-CSC5VGP_.js → icon-DEnOKKOC.js} +1 -1
  108. package/dist/app/assets/{icu-message-format-CtRFWyFe.js → icu-message-format-3z4ane6q.js} +1 -1
  109. package/dist/app/assets/{idris-D2LDs3co.js → idris-CkNPAoKr.js} +1 -1
  110. package/dist/app/assets/{iecst-kpaa10GT.js → iecst-3D5UGiz6.js} +1 -1
  111. package/dist/app/assets/{ignore-B6TeQ2cq.js → ignore-BrbB_BSD.js} +1 -1
  112. package/dist/app/assets/index-BTGdEmOx.css +1 -0
  113. package/dist/app/assets/index-DAVw-s04.js +439 -0
  114. package/dist/app/assets/{inform7-B2DiX5z0.js → inform7-XNwha8I1.js} +1 -1
  115. package/dist/app/assets/{ini-CJgz2CJx.js → ini-DLlwf2gT.js} +1 -1
  116. package/dist/app/assets/{io-C4PjllHD.js → io-D2RYUqys.js} +1 -1
  117. package/dist/app/assets/{j-BKSoIQwQ.js → j-BasAkJbf.js} +1 -1
  118. package/dist/app/assets/{java-CHbVZ6UP.js → java-6c1Mm3IN.js} +1 -1
  119. package/dist/app/assets/{javadoc-CPqAjHoM.js → javadoc-CRaAlfqw.js} +1 -1
  120. package/dist/app/assets/{javadoclike-Bs-8xh3H.js → javadoclike-9bpcWOkY.js} +1 -1
  121. package/dist/app/assets/{javascript-BT_NpjyP.js → javascript-DZUmzoI7.js} +1 -1
  122. package/dist/app/assets/{javastacktrace-Drjxr-oB.js → javastacktrace-g-dS0tWu.js} +1 -1
  123. package/dist/app/assets/{jexl-BxjDgVx9.js → jexl-BrjlwC5s.js} +1 -1
  124. package/dist/app/assets/{jolie-BqMpKk0G.js → jolie-CXt8utu9.js} +1 -1
  125. package/dist/app/assets/{jq-BHUHr0op.js → jq-Bcnqodq2.js} +1 -1
  126. package/dist/app/assets/{js-extras-D4wvqur3.js → js-extras-_DMxxy53.js} +1 -1
  127. package/dist/app/assets/{js-templates-Yv-O3_U6.js → js-templates-B1Xy1qPf.js} +1 -1
  128. package/dist/app/assets/{jsdoc-OgQO3nf9.js → jsdoc-CRLso8tn.js} +1 -1
  129. package/dist/app/assets/{json-DVZtz_Zz.js → json-DGdFBZaG.js} +1 -1
  130. package/dist/app/assets/{json5--f2Givq3.js → json5-DHfIgdC6.js} +1 -1
  131. package/dist/app/assets/{jsonp-DVGUcHMz.js → jsonp-DQjCVsy3.js} +1 -1
  132. package/dist/app/assets/{jsstacktrace-D-yoMr1R.js → jsstacktrace-DdpnKq-S.js} +1 -1
  133. package/dist/app/assets/{jsx-C05X4U8h.js → jsx-DGHeNivK.js} +1 -1
  134. package/dist/app/assets/{julia-DgnoOAdD.js → julia-C4_8nu13.js} +1 -1
  135. package/dist/app/assets/{keepalived-JD08MytA.js → keepalived-CgBr_LcP.js} +1 -1
  136. package/dist/app/assets/{keyman-azrDuGNy.js → keyman-DLsdmPzg.js} +1 -1
  137. package/dist/app/assets/{kotlin-Bq9qLl8S.js → kotlin-BIyZ_mVz.js} +1 -1
  138. package/dist/app/assets/{kumir-BaIa8IWz.js → kumir-DxZ90Jrj.js} +1 -1
  139. package/dist/app/assets/{kusto-DQhcCWAA.js → kusto-DXX_XYlb.js} +1 -1
  140. package/dist/app/assets/{latex-qLbFVwxL.js → latex-Chy4MZga.js} +1 -1
  141. package/dist/app/assets/{latte-BIpeH7ye.js → latte-CwOr4WSZ.js} +1 -1
  142. package/dist/app/assets/{less-DCAm2XKc.js → less-NIIuxYev.js} +1 -1
  143. package/dist/app/assets/{lilypond-URqh-pba.js → lilypond-I8E_e9s3.js} +1 -1
  144. package/dist/app/assets/{liquid-BdNjEMRj.js → liquid-CC9-AlJL.js} +1 -1
  145. package/dist/app/assets/{lisp-DdMDpbFO.js → lisp-DU3ynTRL.js} +1 -1
  146. package/dist/app/assets/{livescript-YUBYodrC.js → livescript-mede3eXX.js} +1 -1
  147. package/dist/app/assets/{llvm-BdNAFhzC.js → llvm-ChOZipf9.js} +1 -1
  148. package/dist/app/assets/{log-BdA3w0be.js → log-BlgfBYo8.js} +1 -1
  149. package/dist/app/assets/{lolcode-BqnlYMBu.js → lolcode-Dxp_wkNH.js} +1 -1
  150. package/dist/app/assets/{lua-Z_Qxo3dR.js → lua-De71Dk_o.js} +1 -1
  151. package/dist/app/assets/{magma-rsT2u-lT.js → magma-Xk9asSNm.js} +1 -1
  152. package/dist/app/assets/{makefile-CrrMmdVS.js → makefile-D8AvVIZr.js} +1 -1
  153. package/dist/app/assets/{markdown-B5hh6ods.js → markdown-f2l7WvCf.js} +1 -1
  154. package/dist/app/assets/{markup-templating-CbtO_SGF.js → markup-templating-DGy3xLOw.js} +1 -1
  155. package/dist/app/assets/{markup-BiaBQ4Go.js → markup-twhd9bJ7.js} +1 -1
  156. package/dist/app/assets/{matlab-BXD-ZhVV.js → matlab-BnnzNP6N.js} +1 -1
  157. package/dist/app/assets/{maxscript-NZobaPB9.js → maxscript-wegT0Hte.js} +1 -1
  158. package/dist/app/assets/{mel-BsjN8CzC.js → mel-BeWBIIM8.js} +1 -1
  159. package/dist/app/assets/{mermaid-B5UiXAS_.js → mermaid-BTAS88aZ.js} +1 -1
  160. package/dist/app/assets/{mizar-CuUsPtTq.js → mizar-DwJSTZ3i.js} +1 -1
  161. package/dist/app/assets/{mongodb-D3GB0bU8.js → mongodb-CXGzXJVg.js} +1 -1
  162. package/dist/app/assets/{monkey-CK-Syk83.js → monkey-CDzLAr7y.js} +1 -1
  163. package/dist/app/assets/{moonscript-CxgNQMDf.js → moonscript-CMoyqNP7.js} +1 -1
  164. package/dist/app/assets/{n1ql-B0gvukgr.js → n1ql-xaPxaJST.js} +1 -1
  165. package/dist/app/assets/{n4js-CSiVWG8j.js → n4js-BZ6fn5FD.js} +1 -1
  166. package/dist/app/assets/{nand2tetris-hdl-BvvEGqNK.js → nand2tetris-hdl-DAx6t1t9.js} +1 -1
  167. package/dist/app/assets/{naniscript-45A_ER_d.js → naniscript-DF84GuME.js} +1 -1
  168. package/dist/app/assets/{nasm-CyYsQrbV.js → nasm-B7uV0gGJ.js} +1 -1
  169. package/dist/app/assets/{neon-BiKXlKLm.js → neon-CKj_SNMo.js} +1 -1
  170. package/dist/app/assets/{nevod-8Kv8aVJh.js → nevod-Dhy_1bov.js} +1 -1
  171. package/dist/app/assets/{nginx-Cqo-dGUO.js → nginx-p1M3Geay.js} +1 -1
  172. package/dist/app/assets/{nim-Cy_EjBaO.js → nim-CU39HumB.js} +1 -1
  173. package/dist/app/assets/{nix-BmTy7l9S.js → nix-CwpMGFgf.js} +1 -1
  174. package/dist/app/assets/{nsis-XTneXqGR.js → nsis-eoDJFK6h.js} +1 -1
  175. package/dist/app/assets/{objectivec-Dmg9RHOg.js → objectivec-C3g9_fbX.js} +1 -1
  176. package/dist/app/assets/{ocaml-CWRJM2tE.js → ocaml-CSHSpeFg.js} +1 -1
  177. package/dist/app/assets/{opencl-D8_U7ZHs.js → opencl-BdyiZtQ0.js} +1 -1
  178. package/dist/app/assets/{openqasm--Tw4PlEa.js → openqasm-je8WlDNj.js} +1 -1
  179. package/dist/app/assets/{oz-D-aUSxpN.js → oz-CUz9q9Cx.js} +1 -1
  180. package/dist/app/assets/{parigp-MtrGmHWf.js → parigp-BlcFmUeN.js} +1 -1
  181. package/dist/app/assets/{parser-h_-AW9-T.js → parser-BEb8_JfW.js} +1 -1
  182. package/dist/app/assets/{pascal-DAMDGrIq.js → pascal-CXud7dwk.js} +1 -1
  183. package/dist/app/assets/{pascaligo-TT68AZ0R.js → pascaligo-D8TqU7tP.js} +1 -1
  184. package/dist/app/assets/{pcaxis-BZabfhMp.js → pcaxis-Rc2xz6nY.js} +1 -1
  185. package/dist/app/assets/{peoplecode-8Z4ArX58.js → peoplecode-vcggeuWN.js} +1 -1
  186. package/dist/app/assets/{perl-Tf2L_iWK.js → perl-UKwRKGyT.js} +1 -1
  187. package/dist/app/assets/{php-Citv4wvI.js → php-AVlR1HxF.js} +1 -1
  188. package/dist/app/assets/{php-extras-CXdnzF7N.js → php-extras-9vU0n0hg.js} +1 -1
  189. package/dist/app/assets/{phpdoc-D6tsAiH4.js → phpdoc-DdNIP5Cz.js} +1 -1
  190. package/dist/app/assets/{plsql-DJtQNxFM.js → plsql-CHF_uFPR.js} +1 -1
  191. package/dist/app/assets/{powerquery-CP9sQCLl.js → powerquery-DYaLrf7D.js} +1 -1
  192. package/dist/app/assets/{powershell-CKCDLWVv.js → powershell-C_A95Q2Z.js} +1 -1
  193. package/dist/app/assets/{processing-D4muvaDA.js → processing-D2A_N_ov.js} +1 -1
  194. package/dist/app/assets/{prolog-DqCpmAF7.js → prolog-uXSXcG5C.js} +1 -1
  195. package/dist/app/assets/{promql-DNdbBZJb.js → promql-BphtLzBj.js} +1 -1
  196. package/dist/app/assets/{properties-DQUwwb8x.js → properties-By8wzMLh.js} +1 -1
  197. package/dist/app/assets/{protobuf-BNe-4-Ln.js → protobuf-Br036i_2.js} +1 -1
  198. package/dist/app/assets/{psl-DHT7D5Zu.js → psl-BqC5a1i2.js} +1 -1
  199. package/dist/app/assets/{pug-BYrNe-ek.js → pug-CIlbkPhR.js} +1 -1
  200. package/dist/app/assets/{puppet-IzXU2QnL.js → puppet-BPgrPqLm.js} +1 -1
  201. package/dist/app/assets/{pure-C8utNRFH.js → pure-B8Dte7PK.js} +1 -1
  202. package/dist/app/assets/{purebasic-BLFLiyfl.js → purebasic-BLQdSyOI.js} +1 -1
  203. package/dist/app/assets/{purescript-CGkGiDmC.js → purescript-Cqa3iDCo.js} +1 -1
  204. package/dist/app/assets/{q-Ch-_c3XY.js → q-BGRU5tMs.js} +1 -1
  205. package/dist/app/assets/{qml-BCtzfHKg.js → qml-4wkr_e8q.js} +1 -1
  206. package/dist/app/assets/{qore-6XNyhUtr.js → qore-Dn8DPaxX.js} +1 -1
  207. package/dist/app/assets/{qsharp-KFIiBs-v.js → qsharp-DuHfkgke.js} +1 -1
  208. package/dist/app/assets/{r-VHCTkPpx.js → r-JNvVUTzQ.js} +1 -1
  209. package/dist/app/assets/{racket-1qTUuxaw.js → racket-CuuQfryI.js} +1 -1
  210. package/dist/app/assets/{reason-c3DD7ovu.js → reason-BkulNhIX.js} +1 -1
  211. package/dist/app/assets/{regex-CKlhWzhL.js → regex-BK250LBm.js} +1 -1
  212. package/dist/app/assets/{rego-B6Roc-f_.js → rego-DD4jfVrz.js} +1 -1
  213. package/dist/app/assets/{renpy-B8vDLdIS.js → renpy-Up6DOU68.js} +1 -1
  214. package/dist/app/assets/{rest-CbuvO7de.js → rest-JgcjFndH.js} +1 -1
  215. package/dist/app/assets/{rip-sVuuKWbv.js → rip-Bw1N4gpB.js} +1 -1
  216. package/dist/app/assets/{roboconf-BidW62eI.js → roboconf-BSia62DO.js} +1 -1
  217. package/dist/app/assets/{robotframework-Cd11Dy3l.js → robotframework-CD3SIrcT.js} +1 -1
  218. package/dist/app/assets/{ruby-BMwY3KVp.js → ruby-DjzxjDrP.js} +1 -1
  219. package/dist/app/assets/{rust-DglFfUim.js → rust-CenxkUdd.js} +1 -1
  220. package/dist/app/assets/{sas-BCWGGNZo.js → sas-CkhHqzKO.js} +1 -1
  221. package/dist/app/assets/{sass-Chbcrpqb.js → sass-Bj5RvbQb.js} +1 -1
  222. package/dist/app/assets/{scala-ClwErATt.js → scala-CD7YOhd_.js} +1 -1
  223. package/dist/app/assets/{scheme-mqaymmTS.js → scheme-C7ztqGcC.js} +1 -1
  224. package/dist/app/assets/{scss-BBhxumOr.js → scss-jngc2vM4.js} +1 -1
  225. package/dist/app/assets/{shell-session-CuI4Rdf4.js → shell-session-Cf8TkgCb.js} +1 -1
  226. package/dist/app/assets/{smali-BoavhNXE.js → smali-BWjG_F2J.js} +1 -1
  227. package/dist/app/assets/{smalltalk-WiUFOepn.js → smalltalk-B7bFUWh2.js} +1 -1
  228. package/dist/app/assets/{smarty-BP4mWIwR.js → smarty-BtDh_Lbq.js} +1 -1
  229. package/dist/app/assets/{sml-AFqGvMHc.js → sml-baFYvc0l.js} +1 -1
  230. package/dist/app/assets/{solidity-D5h9njh8.js → solidity-BHUtyotx.js} +1 -1
  231. package/dist/app/assets/{solution-file-BLK1IrUz.js → solution-file-B2B1VEoF.js} +1 -1
  232. package/dist/app/assets/{soy-Cf8u5dko.js → soy-D07-kKcL.js} +1 -1
  233. package/dist/app/assets/{sparql-C9KxnH23.js → sparql-Bq1nby44.js} +1 -1
  234. package/dist/app/assets/{splunk-spl-BxUXtsOD.js → splunk-spl-7OB4FDIj.js} +1 -1
  235. package/dist/app/assets/{sqf-qlV7g48i.js → sqf-Y8kPyUGy.js} +1 -1
  236. package/dist/app/assets/{sql-C-p1pos9.js → sql-cchOGBTS.js} +1 -1
  237. package/dist/app/assets/{squirrel-PX1Grtap.js → squirrel-B5XNpE09.js} +1 -1
  238. package/dist/app/assets/{stan-zV2a82m3.js → stan-BbdO1pjw.js} +1 -1
  239. package/dist/app/assets/{stylus-BrnUo9zO.js → stylus-CEx2rDQb.js} +1 -1
  240. package/dist/app/assets/{swift-Byy18r0p.js → swift-E_SJ1p-z.js} +1 -1
  241. package/dist/app/assets/{systemd-BtqJkXRf.js → systemd-Bp6JJhYd.js} +1 -1
  242. package/dist/app/assets/{t4-cs-C5jp0bkn.js → t4-cs-B6VxfevA.js} +1 -1
  243. package/dist/app/assets/{t4-templating-Bmu7FZgm.js → t4-templating-BFVCMjcF.js} +1 -1
  244. package/dist/app/assets/{t4-vb-CczRCjMn.js → t4-vb-Cw44ZeAl.js} +1 -1
  245. package/dist/app/assets/{tap-DUhOrRiK.js → tap-BeeNW0Dn.js} +1 -1
  246. package/dist/app/assets/{tcl-BGDNQuGV.js → tcl-Dr9LwAok.js} +1 -1
  247. package/dist/app/assets/{textile-BGym3KVm.js → textile-DxUzeEfH.js} +1 -1
  248. package/dist/app/assets/{toml-h2DQ44P0.js → toml-DW-fj9Ve.js} +1 -1
  249. package/dist/app/assets/{tremor-CwHv-OnP.js → tremor-CSPNAvxf.js} +1 -1
  250. package/dist/app/assets/{tt2-qgYZXJPR.js → tt2-5hZ0qseS.js} +1 -1
  251. package/dist/app/assets/{turtle-Czr_CW8r.js → turtle-D78spzhr.js} +1 -1
  252. package/dist/app/assets/{twig-Bq_oAHcm.js → twig-DSTGGsFD.js} +1 -1
  253. package/dist/app/assets/{typescript-mXKzIg0y.js → typescript-DeKf5Yx2.js} +1 -1
  254. package/dist/app/assets/{typoscript-CLdCbPty.js → typoscript-mYWtQCKO.js} +1 -1
  255. package/dist/app/assets/{unrealscript-CdYUVWsh.js → unrealscript-DEhfFJlC.js} +1 -1
  256. package/dist/app/assets/{uorazor-DxNXLQYo.js → uorazor-0uC9DIjB.js} +1 -1
  257. package/dist/app/assets/{uri-DYk5U2Tx.js → uri-Df_kC31y.js} +1 -1
  258. package/dist/app/assets/{v-ZpnMXAp_.js → v-LL1hUydo.js} +1 -1
  259. package/dist/app/assets/{vala-hVJU5BfN.js → vala-D02QI2Px.js} +1 -1
  260. package/dist/app/assets/{vbnet-CmY51d5G.js → vbnet-CR3y5qLg.js} +1 -1
  261. package/dist/app/assets/{velocity-CsvRt2hb.js → velocity-HNtJrOJ1.js} +1 -1
  262. package/dist/app/assets/{verilog-CPo8f42m.js → verilog-BLgKa5W4.js} +1 -1
  263. package/dist/app/assets/{vhdl-WKsKMPi0.js → vhdl-CNY_UEqB.js} +1 -1
  264. package/dist/app/assets/{vim-BgsS8AXO.js → vim-BZUpIPYO.js} +1 -1
  265. package/dist/app/assets/{visual-basic-CufJPq0T.js → visual-basic-DQ5SAQUu.js} +1 -1
  266. package/dist/app/assets/{warpscript-BMGdLyX8.js → warpscript-C8sl0AcI.js} +1 -1
  267. package/dist/app/assets/{wasm-BwoGQtY0.js → wasm-CtcB8nnU.js} +1 -1
  268. package/dist/app/assets/{web-idl-CQh6nLUF.js → web-idl-CVztrMTV.js} +1 -1
  269. package/dist/app/assets/{wiki-BBUQmhnv.js → wiki-gaSWHzkK.js} +1 -1
  270. package/dist/app/assets/{wolfram-TAz_4SnR.js → wolfram-Bep9vU4v.js} +1 -1
  271. package/dist/app/assets/{wren-CVPXcwur.js → wren-C21a2Yjt.js} +1 -1
  272. package/dist/app/assets/{xeora-DFQOGccv.js → xeora-Dp4LrTkO.js} +1 -1
  273. package/dist/app/assets/{xml-doc-DU62FPEw.js → xml-doc-Doj5uv_S.js} +1 -1
  274. package/dist/app/assets/{xojo-CRo0kja2.js → xojo-DG95hxHV.js} +1 -1
  275. package/dist/app/assets/{xquery-lrNjl9FO.js → xquery-BF4ZgZA4.js} +1 -1
  276. package/dist/app/assets/{yaml-PqToDf_Q.js → yaml-BKgY30GP.js} +1 -1
  277. package/dist/app/assets/{yang-BQDTSngB.js → yang-1nC5puJT.js} +1 -1
  278. package/dist/app/assets/{zig-D_9EoT5C.js → zig-CYQ8mjbV.js} +1 -1
  279. package/dist/app/index.html +2 -2
  280. package/dist/index.cjs +326 -60
  281. package/dist/index.css +0 -36
  282. package/dist/index.d.cts +2 -2
  283. package/dist/index.d.ts +2 -2
  284. package/dist/index.js +332 -62
  285. package/package.json +3 -3
  286. package/dist/app/assets/index-C9w4yW8p.js +0 -438
  287. package/dist/app/assets/index-DcB156i0.css +0 -1
package/dist/index.cjs CHANGED
@@ -89,6 +89,15 @@ function createMessageId() {
89
89
  return globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
90
90
  }
91
91
 
92
+ // src/lib/scroll.ts
93
+ var BOTTOM_FOLLOW_THRESHOLD_PX = 48;
94
+ function getDistanceFromBottom(element) {
95
+ return Math.max(0, element.scrollHeight - element.clientHeight - element.scrollTop);
96
+ }
97
+ function isNearBottom(element, threshold = BOTTOM_FOLLOW_THRESHOLD_PX) {
98
+ return getDistanceFromBottom(element) <= threshold;
99
+ }
100
+
92
101
  // src/providers/Stream.tsx
93
102
  var import_react3 = require("react");
94
103
  var import_nuqs = require("nuqs");
@@ -327,11 +336,41 @@ function useParentMessenger({ onSetOptions } = {}) {
327
336
  return messenger;
328
337
  }
329
338
 
339
+ // src/lib/thread-context-usage.ts
340
+ function normalizeContextUsageNumber(value) {
341
+ if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
342
+ return Math.floor(value);
343
+ }
344
+ if (typeof value === "string") {
345
+ const parsed = Number.parseFloat(value);
346
+ if (Number.isFinite(parsed) && parsed >= 0) {
347
+ return Math.floor(parsed);
348
+ }
349
+ }
350
+ return null;
351
+ }
352
+ function getThreadContextUsage(state, agentKey) {
353
+ if (!agentKey) return null;
354
+ return state[agentKey] ?? null;
355
+ }
356
+ function getThreadContextUsageTotalTokens(event) {
357
+ return normalizeContextUsageNumber(event?.usage?.totalTokens);
358
+ }
359
+ function resolveUsedContextSize(options) {
360
+ const realtimeUsedTokens = getThreadContextUsageTotalTokens(
361
+ options.realtimeUsage
362
+ );
363
+ if (realtimeUsedTokens != null) {
364
+ return realtimeUsedTokens;
365
+ }
366
+ return normalizeContextUsageNumber(options.fallbackUsedTokens) ?? 0;
367
+ }
368
+
330
369
  // src/providers/Stream.tsx
331
370
  var import_jsx_runtime2 = require("react/jsx-runtime");
332
371
  var import_meta = {};
333
372
  var StreamContext = (0, import_react3.createContext)(void 0);
334
- var defaultApiUrl = import_meta.env.VITE_XPERTAI_API_URL ?? "https://api.mtda.cloud/api/ai";
373
+ var defaultApiUrl = import_meta.env.VITE_XPERTAI_API_URL ?? "https://api.xpertai.cn/api/ai";
335
374
  var useStreamContext = () => {
336
375
  const context = (0, import_react3.useContext)(StreamContext);
337
376
  if (!context) {
@@ -451,6 +490,7 @@ var en_US_default = {
451
490
  loadingThread: "Loading thread...",
452
491
  stop: "Stop",
453
492
  send: "Send message",
493
+ scrollToBottom: "Scroll to bottom",
454
494
  retryUpload: "Retry upload",
455
495
  poweredBy: "Powered by Xpert AI",
456
496
  errors: {
@@ -509,6 +549,7 @@ var zh_CN_default = {
509
549
  loadingThread: "\u6B63\u5728\u52A0\u8F7D\u7EBF\u7A0B...",
510
550
  stop: "\u505C\u6B62",
511
551
  send: "\u53D1\u9001\u6D88\u606F",
552
+ scrollToBottom: "\u56DE\u5230\u5E95\u90E8",
512
553
  retryUpload: "\u91CD\u65B0\u4E0A\u4F20",
513
554
  poweredBy: "\u7531 Xpert AI \u9A71\u52A8",
514
555
  errors: {
@@ -1607,6 +1648,12 @@ TooltipIconButton.displayName = "TooltipIconButton";
1607
1648
  // src/components/thread/markdown-text.tsx
1608
1649
  var import_katex_min = require("katex/dist/katex.min.css");
1609
1650
  var import_jsx_runtime17 = require("react/jsx-runtime");
1651
+ var getTextContent = (children) => import_react6.Children.toArray(children).map((child) => {
1652
+ if (typeof child === "string" || typeof child === "number") {
1653
+ return String(child);
1654
+ }
1655
+ return "";
1656
+ }).join("");
1610
1657
  var useCopyToClipboard = ({
1611
1658
  copiedDuration = 3e3
1612
1659
  } = {}) => {
@@ -1643,7 +1690,7 @@ var CodeHeader = ({ language, code }) => {
1643
1690
  ] });
1644
1691
  };
1645
1692
  var defaultComponents = {
1646
- h1: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1693
+ h1: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1647
1694
  "h1",
1648
1695
  {
1649
1696
  className: cn(
@@ -1653,7 +1700,7 @@ var defaultComponents = {
1653
1700
  ...props
1654
1701
  }
1655
1702
  ),
1656
- h2: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1703
+ h2: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1657
1704
  "h2",
1658
1705
  {
1659
1706
  className: cn(
@@ -1663,7 +1710,7 @@ var defaultComponents = {
1663
1710
  ...props
1664
1711
  }
1665
1712
  ),
1666
- h3: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1713
+ h3: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1667
1714
  "h3",
1668
1715
  {
1669
1716
  className: cn(
@@ -1673,7 +1720,7 @@ var defaultComponents = {
1673
1720
  ...props
1674
1721
  }
1675
1722
  ),
1676
- h4: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1723
+ h4: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1677
1724
  "h4",
1678
1725
  {
1679
1726
  className: cn(
@@ -1683,7 +1730,7 @@ var defaultComponents = {
1683
1730
  ...props
1684
1731
  }
1685
1732
  ),
1686
- h5: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1733
+ h5: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1687
1734
  "h5",
1688
1735
  {
1689
1736
  className: cn(
@@ -1693,21 +1740,21 @@ var defaultComponents = {
1693
1740
  ...props
1694
1741
  }
1695
1742
  ),
1696
- h6: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1743
+ h6: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1697
1744
  "h6",
1698
1745
  {
1699
1746
  className: cn("my-4 font-semibold first:mt-0 last:mb-0", className),
1700
1747
  ...props
1701
1748
  }
1702
1749
  ),
1703
- p: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1750
+ p: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1704
1751
  "p",
1705
1752
  {
1706
1753
  className: cn("mt-5 mb-5 leading-7 first:mt-0 last:mb-0", className),
1707
1754
  ...props
1708
1755
  }
1709
1756
  ),
1710
- a: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1757
+ a: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1711
1758
  "a",
1712
1759
  {
1713
1760
  className: cn(
@@ -1719,35 +1766,46 @@ var defaultComponents = {
1719
1766
  ...props
1720
1767
  }
1721
1768
  ),
1722
- blockquote: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1769
+ blockquote: ({
1770
+ className,
1771
+ node: _node,
1772
+ ...props
1773
+ }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1723
1774
  "blockquote",
1724
1775
  {
1725
- className: cn("border-l-2 pl-6 italic", className),
1776
+ className: cn(
1777
+ "border-l-4 border-border pl-6 italic text-muted-foreground",
1778
+ className
1779
+ ),
1726
1780
  ...props
1727
1781
  }
1728
1782
  ),
1729
- ul: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1783
+ ul: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1730
1784
  "ul",
1731
1785
  {
1732
1786
  className: cn("my-5 list-outside list-disc pl-6 [&>li]:mt-2", className),
1733
1787
  ...props
1734
1788
  }
1735
1789
  ),
1736
- ol: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1790
+ ol: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1737
1791
  "ol",
1738
1792
  {
1739
1793
  className: cn("my-5 list-outside list-decimal pl-8 [&>li]:mt-2", className),
1740
1794
  ...props
1741
1795
  }
1742
1796
  ),
1743
- hr: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1797
+ hr: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1744
1798
  "hr",
1745
1799
  {
1746
1800
  className: cn("my-5 border-b", className),
1747
1801
  ...props
1748
1802
  }
1749
1803
  ),
1750
- table: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1804
+ table: ({
1805
+ className,
1806
+ node: _node,
1807
+ ...props
1808
+ }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1751
1809
  "table",
1752
1810
  {
1753
1811
  className: cn(
@@ -1757,48 +1815,48 @@ var defaultComponents = {
1757
1815
  ...props
1758
1816
  }
1759
1817
  ),
1760
- th: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1818
+ th: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1761
1819
  "th",
1762
1820
  {
1763
1821
  className: cn(
1764
- "bg-muted px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg [&[align=center]]:text-center [&[align=right]]:text-right",
1822
+ "bg-muted border-border border-y border-l px-4 py-2 text-left font-bold first:rounded-tl-lg last:rounded-tr-lg last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
1765
1823
  className
1766
1824
  ),
1767
1825
  ...props
1768
1826
  }
1769
1827
  ),
1770
- td: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1828
+ td: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1771
1829
  "td",
1772
1830
  {
1773
1831
  className: cn(
1774
- "border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
1832
+ "border-border border-b border-l px-4 py-2 text-left last:border-r [&[align=center]]:text-center [&[align=right]]:text-right",
1775
1833
  className
1776
1834
  ),
1777
1835
  ...props
1778
1836
  }
1779
1837
  ),
1780
- tr: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1838
+ tr: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1781
1839
  "tr",
1782
1840
  {
1783
1841
  className: cn(
1784
- "m-0 border-b p-0 first:border-t [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",
1842
+ "m-0 p-0 even:bg-muted/50 [&:last-child>td:first-child]:rounded-bl-lg [&:last-child>td:last-child]:rounded-br-lg",
1785
1843
  className
1786
1844
  ),
1787
1845
  ...props
1788
1846
  }
1789
1847
  ),
1790
- sup: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1848
+ sup: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1791
1849
  "sup",
1792
1850
  {
1793
1851
  className: cn("[&>a]:text-xs [&>a]:no-underline", className),
1794
1852
  ...props
1795
1853
  }
1796
1854
  ),
1797
- pre: ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1798
- "pre",
1855
+ pre: ({ className, node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1856
+ "div",
1799
1857
  {
1800
1858
  className: cn(
1801
- "max-w-4xl overflow-x-auto rounded-lg text-sm bg-black text-white dark:bg-zinc-800 ",
1859
+ "max-w-4xl overflow-x-auto rounded-lg text-sm bg-black text-white dark:bg-zinc-800",
1802
1860
  className
1803
1861
  ),
1804
1862
  ...props
@@ -1807,18 +1865,21 @@ var defaultComponents = {
1807
1865
  code: ({
1808
1866
  className,
1809
1867
  children,
1868
+ node: _node,
1810
1869
  ...props
1811
1870
  }) => {
1812
1871
  const match = /language-(\w+)/.exec(className || "");
1872
+ const code = getTextContent(children);
1873
+ const isBlockCode = code.includes("\n");
1813
1874
  if (match) {
1814
1875
  const language = match[1];
1815
- const code = String(children).replace(/\n$/, "");
1876
+ const normalizedCode = code.replace(/\n$/, "");
1816
1877
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
1817
1878
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1818
1879
  CodeHeader,
1819
1880
  {
1820
1881
  language,
1821
- code
1882
+ code: normalizedCode
1822
1883
  }
1823
1884
  ),
1824
1885
  /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
@@ -1826,15 +1887,31 @@ var defaultComponents = {
1826
1887
  {
1827
1888
  language,
1828
1889
  className,
1829
- children: code
1890
+ children: normalizedCode
1830
1891
  }
1831
1892
  )
1832
1893
  ] });
1833
1894
  }
1895
+ if (isBlockCode) {
1896
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1897
+ "code",
1898
+ {
1899
+ className: cn(
1900
+ "block min-w-full whitespace-pre px-4 py-4 font-mono text-inherit",
1901
+ className
1902
+ ),
1903
+ ...props,
1904
+ children: code.replace(/\n$/, "")
1905
+ }
1906
+ );
1907
+ }
1834
1908
  return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1835
1909
  "code",
1836
1910
  {
1837
- className: cn("rounded font-semibold", className),
1911
+ className: cn(
1912
+ "bg-muted rounded px-1.5 py-0.5 font-mono text-[0.9em] font-semibold",
1913
+ className
1914
+ ),
1838
1915
  ...props,
1839
1916
  children
1840
1917
  }
@@ -1954,6 +2031,8 @@ function MemoryBlock({ content }) {
1954
2031
  function ComponentBlock({ content }) {
1955
2032
  const [isExpanded, setIsExpanded] = React13.useState(false);
1956
2033
  const contentRef = React13.useRef(null);
2034
+ const shouldAutoScrollRef = React13.useRef(true);
2035
+ const previousScrollTopRef = React13.useRef(0);
1957
2036
  const data = content.data ?? {};
1958
2037
  const category = data.category ?? "Component";
1959
2038
  const title = data.tool && category === "Tool" ? data.tool : data.title ?? data.type ?? "Component";
@@ -1967,10 +2046,36 @@ function ComponentBlock({ content }) {
1967
2046
  if (status === "running" && output !== null) setIsExpanded(true);
1968
2047
  }, [status, output]);
1969
2048
  React13.useEffect(() => {
1970
- if (status === "running" && contentRef.current) {
1971
- contentRef.current.scrollTop = contentRef.current.scrollHeight;
2049
+ const element = contentRef.current;
2050
+ if (!element) return;
2051
+ previousScrollTopRef.current = element.scrollTop;
2052
+ const updateAutoScrollState = () => {
2053
+ const nextScrollTop = element.scrollTop;
2054
+ const isScrollingUp = nextScrollTop < previousScrollTopRef.current - 1;
2055
+ previousScrollTopRef.current = nextScrollTop;
2056
+ if (isScrollingUp) {
2057
+ shouldAutoScrollRef.current = false;
2058
+ return;
2059
+ }
2060
+ shouldAutoScrollRef.current = isNearBottom(element);
2061
+ };
2062
+ updateAutoScrollState();
2063
+ element.addEventListener("scroll", updateAutoScrollState, { passive: true });
2064
+ return () => {
2065
+ element.removeEventListener("scroll", updateAutoScrollState);
2066
+ };
2067
+ }, [isExpanded]);
2068
+ React13.useEffect(() => {
2069
+ if (status !== "running") {
2070
+ shouldAutoScrollRef.current = true;
2071
+ return;
1972
2072
  }
1973
- }, [status, output]);
2073
+ const element = contentRef.current;
2074
+ if (!element || !shouldAutoScrollRef.current) {
2075
+ return;
2076
+ }
2077
+ element.scrollTop = element.scrollHeight;
2078
+ }, [isExpanded, output, status]);
1974
2079
  const config = status ? statusConfig[status] : null;
1975
2080
  const StatusIcon = config?.icon;
1976
2081
  return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Card, { children: [
@@ -2391,18 +2496,6 @@ var kNumberFormatter = new Intl.NumberFormat("en-US", {
2391
2496
  minimumFractionDigits: 0,
2392
2497
  maximumFractionDigits: 1
2393
2498
  });
2394
- function normalizeContextSize(value) {
2395
- if (typeof value === "number" && Number.isFinite(value) && value >= 0) {
2396
- return Math.floor(value);
2397
- }
2398
- if (typeof value === "string") {
2399
- const parsed = Number.parseInt(value, 10);
2400
- if (Number.isFinite(parsed) && parsed >= 0) {
2401
- return parsed;
2402
- }
2403
- }
2404
- return null;
2405
- }
2406
2499
  function normalizeAgentKey(value) {
2407
2500
  if (typeof value !== "string") {
2408
2501
  return null;
@@ -2411,7 +2504,7 @@ function normalizeAgentKey(value) {
2411
2504
  return normalized ? normalized : null;
2412
2505
  }
2413
2506
  function resolveAssistantContextSize(assistant) {
2414
- return normalizeContextSize(assistant.metadata?.context_size) ?? normalizeContextSize(assistant.config?.configurable?.context_size);
2507
+ return normalizeContextUsageNumber(assistant.metadata?.context_size) ?? normalizeContextUsageNumber(assistant.config?.configurable?.context_size);
2415
2508
  }
2416
2509
  function resolveAssistantAgentKey(assistant) {
2417
2510
  return normalizeAgentKey(assistant.metadata?.agent_key) ?? normalizeAgentKey(assistant.config?.configurable?.agentKey);
@@ -2434,6 +2527,16 @@ function ContextUsageIndicator({
2434
2527
  const [maxContextSize, setMaxContextSize] = React17.useState(null);
2435
2528
  const [usedContextSize, setUsedContextSize] = React17.useState(null);
2436
2529
  const [assistantAgentKey, setAssistantAgentKey] = React17.useState(null);
2530
+ const latestRealtimeUsageRef = React17.useRef({
2531
+ threadId: null,
2532
+ agentKey: null,
2533
+ usedTokens: null
2534
+ });
2535
+ const realtimeUsage = React17.useMemo(
2536
+ () => getThreadContextUsage(stream.contextUsageByAgentKey, assistantAgentKey),
2537
+ [assistantAgentKey, stream.contextUsageByAgentKey]
2538
+ );
2539
+ const realtimeUsedContextSize = getThreadContextUsageTotalTokens(realtimeUsage);
2437
2540
  React17.useEffect(() => {
2438
2541
  if (!stream.client || !stream.assistantId) {
2439
2542
  setMaxContextSize(null);
@@ -2454,6 +2557,17 @@ function ContextUsageIndicator({
2454
2557
  cancelled = true;
2455
2558
  };
2456
2559
  }, [stream.client, stream.assistantId]);
2560
+ React17.useEffect(() => {
2561
+ latestRealtimeUsageRef.current = {
2562
+ threadId: stream.threadId ?? null,
2563
+ agentKey: assistantAgentKey,
2564
+ usedTokens: realtimeUsedContextSize
2565
+ };
2566
+ }, [assistantAgentKey, realtimeUsedContextSize, stream.threadId]);
2567
+ React17.useEffect(() => {
2568
+ if (realtimeUsedContextSize == null) return;
2569
+ setUsedContextSize(realtimeUsedContextSize);
2570
+ }, [realtimeUsedContextSize]);
2457
2571
  React17.useEffect(() => {
2458
2572
  if (!stream.client) {
2459
2573
  setUsedContextSize(null);
@@ -2463,14 +2577,25 @@ function ContextUsageIndicator({
2463
2577
  setUsedContextSize(0);
2464
2578
  return;
2465
2579
  }
2580
+ if (realtimeUsedContextSize != null) return;
2466
2581
  if (stream.isLoading) return;
2467
2582
  let cancelled = false;
2583
+ const requestThreadId = stream.threadId;
2584
+ const requestAgentKey = assistantAgentKey;
2468
2585
  stream.client.threads.getContextUsage(
2469
- stream.threadId,
2470
- assistantAgentKey ? { agentKey: assistantAgentKey } : void 0
2471
- ).then((result) => normalizeContextSize(result?.usage?.context_tokens)).then((result) => {
2586
+ requestThreadId,
2587
+ requestAgentKey ? { agentKey: requestAgentKey } : void 0
2588
+ ).then((result) => normalizeContextUsageNumber(result?.usage?.context_tokens)).then((result) => {
2472
2589
  if (cancelled) return;
2473
- setUsedContextSize(result ?? 0);
2590
+ const latestRealtimeUsage = latestRealtimeUsageRef.current;
2591
+ if (latestRealtimeUsage.usedTokens != null && latestRealtimeUsage.threadId === requestThreadId && latestRealtimeUsage.agentKey === requestAgentKey) {
2592
+ return;
2593
+ }
2594
+ setUsedContextSize(
2595
+ resolveUsedContextSize({
2596
+ fallbackUsedTokens: result
2597
+ })
2598
+ );
2474
2599
  }).catch((err) => {
2475
2600
  if (cancelled) return;
2476
2601
  console.warn("[Chat] Failed to load thread context usage:", err);
@@ -2478,7 +2603,15 @@ function ContextUsageIndicator({
2478
2603
  return () => {
2479
2604
  cancelled = true;
2480
2605
  };
2481
- }, [assistantAgentKey, stream.apiKey, stream.apiUrl, stream.client, stream.threadId, stream.isLoading]);
2606
+ }, [
2607
+ assistantAgentKey,
2608
+ realtimeUsedContextSize,
2609
+ stream.apiKey,
2610
+ stream.apiUrl,
2611
+ stream.client,
2612
+ stream.threadId,
2613
+ stream.isLoading
2614
+ ]);
2482
2615
  if (typeof maxContextSize !== "number" || !Number.isFinite(maxContextSize) || maxContextSize <= 0) {
2483
2616
  return null;
2484
2617
  }
@@ -2597,6 +2730,8 @@ function Chat({
2597
2730
  const [draft, setDraft] = React18.useState("");
2598
2731
  const [selectedTool, setSelectedTool] = React18.useState(null);
2599
2732
  const [attachments, setAttachments] = React18.useState([]);
2733
+ const [isAtBottom, setIsAtBottom] = React18.useState(true);
2734
+ const [hasUpdatesBelow, setHasUpdatesBelow] = React18.useState(false);
2600
2735
  const {
2601
2736
  threads,
2602
2737
  deleteThread,
@@ -2605,27 +2740,141 @@ function Chat({
2605
2740
  } = useThreads();
2606
2741
  const viewportRef = React18.useRef(null);
2607
2742
  const fileInputRef = React18.useRef(null);
2743
+ const shouldAutoScrollRef = React18.useRef(true);
2744
+ const forceFollowRef = React18.useRef(false);
2745
+ const previousMessageCountRef = React18.useRef(0);
2746
+ const previousScrollTopRef = React18.useRef(0);
2747
+ const autoScrollFrameRef = React18.useRef(null);
2748
+ const isPointerDownRef = React18.useRef(false);
2749
+ const lastTouchYRef = React18.useRef(null);
2608
2750
  const resolvedTitle = title ?? t("chat.title");
2609
2751
  const resolvedPlaceholder = placeholder ?? t("chat.placeholder");
2610
2752
  const inputPlaceholder = selectedTool?.placeholderOverride ?? composer?.placeholder ?? resolvedPlaceholder;
2611
- const messages = stream.messages ?? [];
2753
+ const messages = React18.useMemo(() => stream.messages ?? [], [stream.messages]);
2612
2754
  const trimmedDraft = draft.trim();
2613
- const scrollToBottom = React18.useCallback((smooth = false) => {
2614
- requestAnimationFrame(() => {
2755
+ const cancelPendingAutoScroll = React18.useCallback(() => {
2756
+ if (autoScrollFrameRef.current !== null) {
2757
+ cancelAnimationFrame(autoScrollFrameRef.current);
2758
+ autoScrollFrameRef.current = null;
2759
+ }
2760
+ }, []);
2761
+ const disableAutoFollow = React18.useCallback(() => {
2762
+ forceFollowRef.current = false;
2763
+ shouldAutoScrollRef.current = false;
2764
+ cancelPendingAutoScroll();
2765
+ }, [cancelPendingAutoScroll]);
2766
+ const enableAutoFollow = React18.useCallback(() => {
2767
+ forceFollowRef.current = true;
2768
+ shouldAutoScrollRef.current = true;
2769
+ setHasUpdatesBelow(false);
2770
+ }, []);
2771
+ const scrollToBottom = React18.useCallback((smooth = false, force = false) => {
2772
+ if (force) {
2773
+ enableAutoFollow();
2774
+ }
2775
+ cancelPendingAutoScroll();
2776
+ autoScrollFrameRef.current = requestAnimationFrame(() => {
2777
+ autoScrollFrameRef.current = null;
2615
2778
  const viewport = viewportRef.current;
2616
2779
  if (viewport) {
2780
+ if (!force && !shouldAutoScrollRef.current) {
2781
+ return;
2782
+ }
2617
2783
  viewport.scrollTo({
2618
2784
  top: viewport.scrollHeight,
2619
2785
  behavior: smooth ? "smooth" : "instant"
2620
2786
  });
2621
2787
  }
2622
2788
  });
2623
- }, []);
2789
+ }, [cancelPendingAutoScroll, enableAutoFollow]);
2790
+ React18.useEffect(() => {
2791
+ const viewport = viewportRef.current;
2792
+ if (!viewport) return;
2793
+ previousScrollTopRef.current = viewport.scrollTop;
2794
+ const stopPointerTracking = () => {
2795
+ isPointerDownRef.current = false;
2796
+ };
2797
+ const updateAutoScrollState = () => {
2798
+ const nextScrollTop = viewport.scrollTop;
2799
+ const isScrollingUp = nextScrollTop < previousScrollTopRef.current - 1;
2800
+ previousScrollTopRef.current = nextScrollTop;
2801
+ const nearBottom = isNearBottom(viewport);
2802
+ setIsAtBottom(nearBottom);
2803
+ if (nearBottom) {
2804
+ shouldAutoScrollRef.current = true;
2805
+ setHasUpdatesBelow(false);
2806
+ return;
2807
+ }
2808
+ if (forceFollowRef.current) {
2809
+ shouldAutoScrollRef.current = true;
2810
+ return;
2811
+ }
2812
+ if (isPointerDownRef.current && isScrollingUp) {
2813
+ disableAutoFollow();
2814
+ return;
2815
+ }
2816
+ shouldAutoScrollRef.current = false;
2817
+ };
2818
+ const handleWheel = (event) => {
2819
+ if (event.deltaY < 0) {
2820
+ disableAutoFollow();
2821
+ }
2822
+ };
2823
+ const handlePointerDown = () => {
2824
+ isPointerDownRef.current = true;
2825
+ };
2826
+ const handleTouchStart = (event) => {
2827
+ lastTouchYRef.current = event.touches[0]?.clientY ?? null;
2828
+ };
2829
+ const handleTouchMove = (event) => {
2830
+ const nextTouchY = event.touches[0]?.clientY;
2831
+ if (typeof nextTouchY !== "number") return;
2832
+ if (lastTouchYRef.current !== null && nextTouchY > lastTouchYRef.current + 1) {
2833
+ disableAutoFollow();
2834
+ }
2835
+ lastTouchYRef.current = nextTouchY;
2836
+ };
2837
+ const handleTouchEnd = () => {
2838
+ lastTouchYRef.current = null;
2839
+ };
2840
+ updateAutoScrollState();
2841
+ viewport.addEventListener("wheel", handleWheel, { passive: true });
2842
+ viewport.addEventListener("pointerdown", handlePointerDown, { passive: true });
2843
+ viewport.addEventListener("scroll", updateAutoScrollState, { passive: true });
2844
+ viewport.addEventListener("touchstart", handleTouchStart, { passive: true });
2845
+ viewport.addEventListener("touchmove", handleTouchMove, { passive: true });
2846
+ viewport.addEventListener("touchend", handleTouchEnd, { passive: true });
2847
+ window.addEventListener("pointerup", stopPointerTracking, { passive: true });
2848
+ window.addEventListener("pointercancel", stopPointerTracking, { passive: true });
2849
+ return () => {
2850
+ cancelPendingAutoScroll();
2851
+ viewport.removeEventListener("wheel", handleWheel);
2852
+ viewport.removeEventListener("pointerdown", handlePointerDown);
2853
+ viewport.removeEventListener("scroll", updateAutoScrollState);
2854
+ viewport.removeEventListener("touchstart", handleTouchStart);
2855
+ viewport.removeEventListener("touchmove", handleTouchMove);
2856
+ viewport.removeEventListener("touchend", handleTouchEnd);
2857
+ window.removeEventListener("pointerup", stopPointerTracking);
2858
+ window.removeEventListener("pointercancel", stopPointerTracking);
2859
+ };
2860
+ }, [cancelPendingAutoScroll, disableAutoFollow]);
2624
2861
  React18.useEffect(() => {
2625
- scrollToBottom();
2626
- }, [messages.length, scrollToBottom]);
2862
+ shouldAutoScrollRef.current = true;
2863
+ forceFollowRef.current = false;
2864
+ previousScrollTopRef.current = 0;
2865
+ setIsAtBottom(true);
2866
+ setHasUpdatesBelow(false);
2867
+ }, [stream.threadId]);
2627
2868
  React18.useEffect(() => {
2628
- if (stream.isLoading) {
2869
+ const messageCountChanged = messages.length !== previousMessageCountRef.current;
2870
+ previousMessageCountRef.current = messages.length;
2871
+ if (!shouldAutoScrollRef.current) {
2872
+ if (messageCountChanged || stream.isLoading) {
2873
+ setHasUpdatesBelow(true);
2874
+ }
2875
+ return;
2876
+ }
2877
+ if (messageCountChanged || stream.isLoading) {
2629
2878
  scrollToBottom();
2630
2879
  }
2631
2880
  }, [stream.isLoading, messages, scrollToBottom]);
@@ -2683,7 +2932,7 @@ function Chat({
2683
2932
  }
2684
2933
  }
2685
2934
  );
2686
- scrollToBottom(true);
2935
+ scrollToBottom(true, true);
2687
2936
  if (selectedTool && !selectedTool.pinned) {
2688
2937
  setSelectedTool(null);
2689
2938
  }
@@ -2785,7 +3034,7 @@ function Chat({
2785
3034
  }
2786
3035
  }
2787
3036
  );
2788
- scrollToBottom(true);
3037
+ scrollToBottom(true, true);
2789
3038
  };
2790
3039
  const loadConversationMessages = React18.useCallback(
2791
3040
  async (recordId) => {
@@ -2865,6 +3114,7 @@ function Chat({
2865
3114
  }
2866
3115
  }
2867
3116
  );
3117
+ scrollToBottom(true, true);
2868
3118
  }
2869
3119
  };
2870
3120
  const acceptMimes = composer?.attachments?.accept ? Object.entries(composer.attachments.accept).map(([mime, exts]) => [mime, ...exts.map((e) => `.${e}`)].join(",")).join(",") : void 0;
@@ -2883,7 +3133,7 @@ function Chat({
2883
3133
  {
2884
3134
  ref: viewportRef,
2885
3135
  className: cn(
2886
- "flex h-full w-full flex-col flex-1 overflow-y-auto bg-background shadow-sm",
3136
+ "relative flex h-full w-full flex-col flex-1 overflow-y-auto bg-background shadow-sm",
2887
3137
  className
2888
3138
  ),
2889
3139
  children: [
@@ -3020,6 +3270,22 @@ function Chat({
3020
3270
  })()
3021
3271
  ] })
3022
3272
  ] }),
3273
+ !isAtBottom && messages.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
3274
+ Button,
3275
+ {
3276
+ type: "button",
3277
+ size: "icon-sm",
3278
+ variant: hasUpdatesBelow ? "default" : "outline",
3279
+ className: cn(
3280
+ "pointer-events-auto rounded-full shadow-md dark:border-white/20 dark:ring-1 dark:ring-white/15 dark:shadow-[0_0_0_1px_rgba(255,255,255,0.06),0_10px_30px_rgba(0,0,0,0.45)]",
3281
+ hasUpdatesBelow && "animate-bounce"
3282
+ ),
3283
+ onClick: () => scrollToBottom(true, true),
3284
+ "aria-label": t("chat.scrollToBottom"),
3285
+ title: t("chat.scrollToBottom"),
3286
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_lucide_react9.ArrowDown, { size: 16 })
3287
+ }
3288
+ ) }),
3023
3289
  /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "p-2 sticky bottom-0 z-10 bg-background", children: [
3024
3290
  threadErrorMessage && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: threadErrorMessage }),
3025
3291
  /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(