@xpert-ai/chatkit-ui 0.4.9 → 0.4.11

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 (339) hide show
  1. package/dist/app/assets/{_baseUniq-CvUv2HwQ.js → _baseUniq-D3JA5kg6.js} +1 -1
  2. package/dist/app/assets/{abap-BO7niWiC.js → abap-U3trMbvh.js} +1 -1
  3. package/dist/app/assets/{abnf-CWEz7Drs.js → abnf-Bl4asd8k.js} +1 -1
  4. package/dist/app/assets/{actionscript-CyOkZZxh.js → actionscript-D8gfKfJD.js} +1 -1
  5. package/dist/app/assets/{ada-Jlv844Rv.js → ada-DdH41xZz.js} +1 -1
  6. package/dist/app/assets/{agda-C_kFG5ee.js → agda-CRS5ewL6.js} +1 -1
  7. package/dist/app/assets/{al-BJB3bCYn.js → al-6ay2Ap_a.js} +1 -1
  8. package/dist/app/assets/{antlr4-CxC5pLeu.js → antlr4-1_hBGW-a.js} +1 -1
  9. package/dist/app/assets/{apacheconf-Do-yEyZc.js → apacheconf-CZxoTH8B.js} +1 -1
  10. package/dist/app/assets/{apex-_x2gfDUc.js → apex-CrTOQiOq.js} +1 -1
  11. package/dist/app/assets/{apl-CV7O96Vz.js → apl-W2lGuttD.js} +1 -1
  12. package/dist/app/assets/{applescript-BBZjdzgl.js → applescript-b_jfORvY.js} +1 -1
  13. package/dist/app/assets/{aql-CPRi8JU5.js → aql-DcttT6A-.js} +1 -1
  14. package/dist/app/assets/{arc-COu-nBNR.js → arc-CcWnzmyO.js} +1 -1
  15. package/dist/app/assets/{architectureDiagram-Q4EWVU46-D-ddveKc.js → architectureDiagram-Q4EWVU46-BzsxtvCr.js} +1 -1
  16. package/dist/app/assets/{arduino-B_V9Srpy.js → arduino-DcmjPx9R.js} +1 -1
  17. package/dist/app/assets/{arff-DsGhNcbT.js → arff-DdTCsnLN.js} +1 -1
  18. package/dist/app/assets/{asciidoc-B5CEO5fh.js → asciidoc-C3Zw8KHv.js} +1 -1
  19. package/dist/app/assets/{asm6502-D2a8tVul.js → asm6502-Cl6X60ew.js} +1 -1
  20. package/dist/app/assets/{asmatmel-DUTqaTnC.js → asmatmel-4TiHBMZ0.js} +1 -1
  21. package/dist/app/assets/{aspnet-DLUpHuHv.js → aspnet-BAcaJr0W.js} +1 -1
  22. package/dist/app/assets/{autohotkey-BSB_nyws.js → autohotkey-DU4MbEO6.js} +1 -1
  23. package/dist/app/assets/{autoit-BwgYwpuM.js → autoit-DNUFW1WT.js} +1 -1
  24. package/dist/app/assets/{avisynth-Cgf1pYso.js → avisynth-Dj1xCW-P.js} +1 -1
  25. package/dist/app/assets/{avro-idl-XqteGdRE.js → avro-idl-BUuuPK0F.js} +1 -1
  26. package/dist/app/assets/{bash-Dk281cbu.js → bash-Car3l6Qf.js} +1 -1
  27. package/dist/app/assets/{basic-uRpIiMGe.js → basic-Dz2vmq9w.js} +1 -1
  28. package/dist/app/assets/{batch-C4-m-mLr.js → batch-DYOkuO24.js} +1 -1
  29. package/dist/app/assets/{bbcode-B1LUoNFx.js → bbcode-BTogT5Ke.js} +1 -1
  30. package/dist/app/assets/{bicep-CqsJcsXf.js → bicep-gKyzTSH1.js} +1 -1
  31. package/dist/app/assets/{birb-DXU3R8QI.js → birb-D1xh9nGK.js} +1 -1
  32. package/dist/app/assets/{bison-BLjm1RgB.js → bison-y3F6JBTg.js} +1 -1
  33. package/dist/app/assets/{blockDiagram-DXYQGD6D-BHxMFapA.js → blockDiagram-DXYQGD6D-wp5YgjZR.js} +1 -1
  34. package/dist/app/assets/{bnf-D-7oTwhm.js → bnf-CvdKGJcO.js} +1 -1
  35. package/dist/app/assets/{brainfuck-I-YgfuEr.js → brainfuck-zxUjJDmK.js} +1 -1
  36. package/dist/app/assets/{brightscript-CkF_ucD-.js → brightscript-E2VTIZaD.js} +1 -1
  37. package/dist/app/assets/{bro-CPPYpjZw.js → bro-Bf9FPsHP.js} +1 -1
  38. package/dist/app/assets/{bsl-CVgUnXO6.js → bsl-BTf78jgi.js} +1 -1
  39. package/dist/app/assets/{c-BS7yj6Yf.js → c-E6pl-2PD.js} +1 -1
  40. package/dist/app/assets/{c4Diagram-AHTNJAMY-BuCOREEO.js → c4Diagram-AHTNJAMY-BFh75I1O.js} +1 -1
  41. package/dist/app/assets/{cfscript-CIVISA6c.js → cfscript-BU29FYfv.js} +1 -1
  42. package/dist/app/assets/{chaiscript-DPJ77ndP.js → chaiscript-D2Mla472.js} +1 -1
  43. package/dist/app/assets/channel-Dza7FWEy.js +1 -0
  44. package/dist/app/assets/{chunk-4BX2VUAB-C9mHTP0m.js → chunk-4BX2VUAB-D-Payniv.js} +1 -1
  45. package/dist/app/assets/{chunk-4TB4RGXK-B9VoBVJp.js → chunk-4TB4RGXK-Bsata7j8.js} +1 -1
  46. package/dist/app/assets/{chunk-55IACEB6-N4Q-mlk6.js → chunk-55IACEB6-DURW_8ZU.js} +1 -1
  47. package/dist/app/assets/{chunk-EDXVE4YY-D-MWM76q.js → chunk-EDXVE4YY-DUechSa6.js} +1 -1
  48. package/dist/app/assets/{chunk-FMBD7UC4-DDGTq6jI.js → chunk-FMBD7UC4-CKF0xhys.js} +1 -1
  49. package/dist/app/assets/{chunk-OYMX7WX6-BBZDoYQI.js → chunk-OYMX7WX6-ddmRWT15.js} +1 -1
  50. package/dist/app/assets/{chunk-QZHKN3VN-DdnHt9oV.js → chunk-QZHKN3VN-DDobBULn.js} +1 -1
  51. package/dist/app/assets/{chunk-YZCP3GAM-CDlHGJHz.js → chunk-YZCP3GAM-ll1E1L_E.js} +1 -1
  52. package/dist/app/assets/{cil-DZ05JSZt.js → cil-DOsNtjkv.js} +1 -1
  53. package/dist/app/assets/classDiagram-6PBFFD2Q-hqaQDDNp.js +1 -0
  54. package/dist/app/assets/classDiagram-v2-HSJHXN6E-hqaQDDNp.js +1 -0
  55. package/dist/app/assets/{clike-C-dce4Yl.js → clike-dVQK0iCE.js} +1 -1
  56. package/dist/app/assets/{clojure-Cik0pyKG.js → clojure-_I7oUYLh.js} +1 -1
  57. package/dist/app/assets/clone-QKEFKOuT.js +1 -0
  58. package/dist/app/assets/{cmake-ClItZh_8.js → cmake-VLeg6CIA.js} +1 -1
  59. package/dist/app/assets/{cobol-DWNFtn0e.js → cobol-CXrTAELN.js} +1 -1
  60. package/dist/app/assets/{coffeescript-DFxA9g0F.js → coffeescript-D3PuU-yU.js} +1 -1
  61. package/dist/app/assets/{concurnas-uPVT6qf5.js → concurnas-Bq5Sn-8p.js} +1 -1
  62. package/dist/app/assets/{coq-BSKv5Z4t.js → coq-DRNw2I4c.js} +1 -1
  63. package/dist/app/assets/{core-CqabDKxB.js → core-sRD64d7H.js} +1 -1
  64. package/dist/app/assets/{cose-bilkent-S5V4N54A-BRQTAZ30.js → cose-bilkent-S5V4N54A-uleqFww7.js} +1 -1
  65. package/dist/app/assets/{cpp-BKB6xq7P.js → cpp-BDi4JlwY.js} +1 -1
  66. package/dist/app/assets/{crystal-ptPEIgBt.js → crystal-BhcbrMpD.js} +1 -1
  67. package/dist/app/assets/{csharp-DKCrBSIr.js → csharp-Cw8JnLSL.js} +1 -1
  68. package/dist/app/assets/{cshtml-DnjmY1aO.js → cshtml-DXOu3MO1.js} +1 -1
  69. package/dist/app/assets/{csp-CzmWWq7i.js → csp-hJziNvFM.js} +1 -1
  70. package/dist/app/assets/{css-nabIgEws.js → css-DTw2TWVx.js} +1 -1
  71. package/dist/app/assets/{css-extras-CZ9kQxJC.js → css-extras-PKQV57Zr.js} +1 -1
  72. package/dist/app/assets/{csv-BG0H1N52.js → csv-DxeK1pCZ.js} +1 -1
  73. package/dist/app/assets/{cypher-DyEzG7ti.js → cypher-B7sxi8sn.js} +1 -1
  74. package/dist/app/assets/{d-BMmV-4z1.js → d-VOENt14s.js} +1 -1
  75. package/dist/app/assets/{dagre-KV5264BT-B8BjxTZj.js → dagre-KV5264BT-F8PHo6-o.js} +1 -1
  76. package/dist/app/assets/{dart-CpGxTj2o.js → dart-C6P3kCs3.js} +1 -1
  77. package/dist/app/assets/{dataweave-DhQPX3BU.js → dataweave-zcqXRaeA.js} +1 -1
  78. package/dist/app/assets/{dax-C_hSU3cL.js → dax-C5_rBzHq.js} +1 -1
  79. package/dist/app/assets/{dhall-DHj_sxCo.js → dhall-Bx3A89qP.js} +1 -1
  80. package/dist/app/assets/{diagram-5BDNPKRD-CAiueCI6.js → diagram-5BDNPKRD-BJ6gx1Gb.js} +1 -1
  81. package/dist/app/assets/{diagram-G4DWMVQ6-DlsV8l1r.js → diagram-G4DWMVQ6-4TsobmGQ.js} +1 -1
  82. package/dist/app/assets/{diagram-MMDJMWI5-Kv6CoQdl.js → diagram-MMDJMWI5-C15cfaVx.js} +1 -1
  83. package/dist/app/assets/{diagram-TYMM5635-BznfcBm-.js → diagram-TYMM5635-C4QWM_wV.js} +1 -1
  84. package/dist/app/assets/{diff-TDLgKsTC.js → diff-DIp53C-C.js} +1 -1
  85. package/dist/app/assets/{django-BGA6uMwl.js → django-C8OufmY4.js} +1 -1
  86. package/dist/app/assets/{dns-zone-file-CS7N29Nh.js → dns-zone-file-BynM2b-W.js} +1 -1
  87. package/dist/app/assets/{docker-CFuWEMG4.js → docker-CHYID_Vv.js} +1 -1
  88. package/dist/app/assets/{dot-BuI3fIl5.js → dot-CxRj9_e0.js} +1 -1
  89. package/dist/app/assets/{ebnf-0yXcRKzq.js → ebnf-DX9131Gx.js} +1 -1
  90. package/dist/app/assets/{editorconfig-ZwKFQrw_.js → editorconfig-D4jacbLb.js} +1 -1
  91. package/dist/app/assets/{eiffel-CCkWkof9.js → eiffel-ChlDTIQd.js} +1 -1
  92. package/dist/app/assets/{ejs-C9upEEvN.js → ejs-DMwwVwMt.js} +1 -1
  93. package/dist/app/assets/{elixir-DpngNXg2.js → elixir-BQqiT3Sk.js} +1 -1
  94. package/dist/app/assets/{elm-F-WH2jVY.js → elm-pfx4TW8i.js} +1 -1
  95. package/dist/app/assets/{erDiagram-SMLLAGMA-evVGq9aA.js → erDiagram-SMLLAGMA-BkNAnp-O.js} +1 -1
  96. package/dist/app/assets/{erb-BGEr245J.js → erb-6Zc-tMAk.js} +1 -1
  97. package/dist/app/assets/{erlang-R3_RAdeP.js → erlang-NGXc_i-u.js} +1 -1
  98. package/dist/app/assets/{etlua-DqqAkZdO.js → etlua-eDkjyVnU.js} +1 -1
  99. package/dist/app/assets/{excel-formula-CSiml3ju.js → excel-formula-7XJSUddh.js} +1 -1
  100. package/dist/app/assets/{factor-DmMNhX8j.js → factor-BDm_BSrr.js} +1 -1
  101. package/dist/app/assets/{false-BRxcTXb3.js → false-CmPeUbjY.js} +1 -1
  102. package/dist/app/assets/{firestore-security-rules-QUZ9d15G.js → firestore-security-rules-DHkZlm67.js} +1 -1
  103. package/dist/app/assets/{flow-CM8Ul_F8.js → flow-C-a8u5C0.js} +1 -1
  104. package/dist/app/assets/{flowDiagram-DWJPFMVM-CRC5ztDh.js → flowDiagram-DWJPFMVM-Dos2R6DF.js} +1 -1
  105. package/dist/app/assets/{fortran-4BoXeWjv.js → fortran-DgmvqnEK.js} +1 -1
  106. package/dist/app/assets/{fsharp-aLuIEWkd.js → fsharp-TKADo8lI.js} +1 -1
  107. package/dist/app/assets/{ftl-CiEvcjAh.js → ftl-BmLn54KU.js} +1 -1
  108. package/dist/app/assets/{ganttDiagram-T4ZO3ILL-BA5PQPVx.js → ganttDiagram-T4ZO3ILL-DaVRJ0Uz.js} +1 -1
  109. package/dist/app/assets/{gap-DRHnZupb.js → gap-Bjsk63TZ.js} +1 -1
  110. package/dist/app/assets/{gcode-Ci4yyT_S.js → gcode-1WjVfVzX.js} +1 -1
  111. package/dist/app/assets/{gdscript-CwHuZksE.js → gdscript-DciRg-5W.js} +1 -1
  112. package/dist/app/assets/{gedcom-514pRwDC.js → gedcom-DFjhwBQZ.js} +1 -1
  113. package/dist/app/assets/{gherkin-CHJmGFl4.js → gherkin-CO-3f6VP.js} +1 -1
  114. package/dist/app/assets/{git-Cpt88esC.js → git-JidzCe0C.js} +1 -1
  115. package/dist/app/assets/{gitGraphDiagram-UUTBAWPF-r2T7lPpJ.js → gitGraphDiagram-UUTBAWPF-BDm3Pi5R.js} +1 -1
  116. package/dist/app/assets/{glsl-BfrS8yJO.js → glsl-DDTjG0bk.js} +1 -1
  117. package/dist/app/assets/{gml-DDgXE7W7.js → gml-k6Q_j5IU.js} +1 -1
  118. package/dist/app/assets/{gn-CoQG_0n5.js → gn-CJsI82tl.js} +1 -1
  119. package/dist/app/assets/{go-B5zj8JkX.js → go-C-knydKg.js} +1 -1
  120. package/dist/app/assets/{go-module-EmzvkBoA.js → go-module-CfZylmWG.js} +1 -1
  121. package/dist/app/assets/{graph-Cf1KoQrp.js → graph-CX9fPkqi.js} +1 -1
  122. package/dist/app/assets/{graphql-BiDysM4-.js → graphql-DNzt2Vv1.js} +1 -1
  123. package/dist/app/assets/{groovy-CpSog8z5.js → groovy-BtP_mAne.js} +1 -1
  124. package/dist/app/assets/{haml-CvSPf2h1.js → haml-CexsUymU.js} +1 -1
  125. package/dist/app/assets/{handlebars-D-WQRJEB.js → handlebars-Co1eX_hJ.js} +1 -1
  126. package/dist/app/assets/{haskell-C7BRSZIe.js → haskell-PQ0sv3zH.js} +1 -1
  127. package/dist/app/assets/{haxe-_Hcflzq6.js → haxe-CUwllgrP.js} +1 -1
  128. package/dist/app/assets/{hcl-CWqWstRc.js → hcl-Mhayh0kN.js} +1 -1
  129. package/dist/app/assets/{hlsl-BxXCCGJZ.js → hlsl-CxQjFTxz.js} +1 -1
  130. package/dist/app/assets/{hoon-CwaQ-EFH.js → hoon-DHelY60I.js} +1 -1
  131. package/dist/app/assets/{hpkp-DQmRthIx.js → hpkp-CNOmVbEe.js} +1 -1
  132. package/dist/app/assets/{hsts-D8Ur8bD-.js → hsts-J3H51YU7.js} +1 -1
  133. package/dist/app/assets/{http-Cw3RkimR.js → http-BBPS6mp1.js} +1 -1
  134. package/dist/app/assets/{ichigojam-CM6bS6zb.js → ichigojam-WoI4Sjvh.js} +1 -1
  135. package/dist/app/assets/{icon-CtcSAZYC.js → icon-Cxqt5frF.js} +1 -1
  136. package/dist/app/assets/{icu-message-format-DF5LqWc8.js → icu-message-format-CbNr2X1z.js} +1 -1
  137. package/dist/app/assets/{idris-BFiVs7gd.js → idris-B_uYD37d.js} +1 -1
  138. package/dist/app/assets/{iecst-DdrMjXQ5.js → iecst-DBH5ZBla.js} +1 -1
  139. package/dist/app/assets/{ignore-DIq2g2-l.js → ignore-e11AExB3.js} +1 -1
  140. package/dist/app/assets/index-Bz1k_vD4.js +762 -0
  141. package/dist/app/assets/index-CtioO_Xd.css +1 -0
  142. package/dist/app/assets/{infoDiagram-42DDH7IO-wYyuNxNj.js → infoDiagram-42DDH7IO-C6vGng8S.js} +1 -1
  143. package/dist/app/assets/{inform7-DzmXERkt.js → inform7-BuBdwiiY.js} +1 -1
  144. package/dist/app/assets/{ini-D5KL9MSR.js → ini-CZG2vXy_.js} +1 -1
  145. package/dist/app/assets/{io-DhsFH1Tp.js → io-CTkwXIPH.js} +1 -1
  146. package/dist/app/assets/{ishikawaDiagram-UXIWVN3A-C4-BPurQ.js → ishikawaDiagram-UXIWVN3A-B1in37bc.js} +1 -1
  147. package/dist/app/assets/{j-5x99BUy1.js → j-DuEjM6Bj.js} +1 -1
  148. package/dist/app/assets/{java-BF9JoKMx.js → java-BlZmoU8I.js} +1 -1
  149. package/dist/app/assets/{javadoc-BxSJmEM7.js → javadoc-C2k6A4-n.js} +1 -1
  150. package/dist/app/assets/{javadoclike-CPt-8K6_.js → javadoclike-kK2hIzbB.js} +1 -1
  151. package/dist/app/assets/{javascript-BssOsFWy.js → javascript-BoS5KR_7.js} +1 -1
  152. package/dist/app/assets/{javastacktrace-Dd6I7h5J.js → javastacktrace-LrtuAnj1.js} +1 -1
  153. package/dist/app/assets/{jexl-CUEZVd6g.js → jexl-BLuWwkDx.js} +1 -1
  154. package/dist/app/assets/{jolie-D4tUWCAe.js → jolie-CwQmCAzP.js} +1 -1
  155. package/dist/app/assets/{journeyDiagram-VCZTEJTY-4dsXMpZz.js → journeyDiagram-VCZTEJTY-BaS3mXyF.js} +1 -1
  156. package/dist/app/assets/{jq-DA4saxp1.js → jq-BEXhHNOY.js} +1 -1
  157. package/dist/app/assets/{js-extras-BHoZQrc7.js → js-extras-Ct8_w3lG.js} +1 -1
  158. package/dist/app/assets/{js-templates-DHIHpncv.js → js-templates-BkILqbLu.js} +1 -1
  159. package/dist/app/assets/{jsdoc-DiRqJjfA.js → jsdoc-CoMibHem.js} +1 -1
  160. package/dist/app/assets/{json-WG7VBScH.js → json-CY_RB4MI.js} +1 -1
  161. package/dist/app/assets/{json5-TZgr9JRE.js → json5-Dj8cRnNr.js} +1 -1
  162. package/dist/app/assets/{jsonp-Dv9WqRYx.js → jsonp-P7RxrUXF.js} +1 -1
  163. package/dist/app/assets/{jsstacktrace-Gz4Bje7i.js → jsstacktrace-BNUg_CVa.js} +1 -1
  164. package/dist/app/assets/{jsx-Bw3uULWP.js → jsx-CEVEgFxG.js} +1 -1
  165. package/dist/app/assets/{julia-D8b2chKD.js → julia-DfDHC1h7.js} +1 -1
  166. package/dist/app/assets/{kanban-definition-6JOO6SKY-BpSZrzpV.js → kanban-definition-6JOO6SKY-CD7tPba2.js} +1 -1
  167. package/dist/app/assets/{keepalived-CxrShb2S.js → keepalived-oFPT0tbW.js} +1 -1
  168. package/dist/app/assets/{keyman-CiksSo_Q.js → keyman-C57wO1cD.js} +1 -1
  169. package/dist/app/assets/{kotlin-DrUdw5kE.js → kotlin-ZOXm9fam.js} +1 -1
  170. package/dist/app/assets/{kumir-D7RWib-C.js → kumir-Bnsvckx9.js} +1 -1
  171. package/dist/app/assets/{kusto-BV4XMg16.js → kusto-jXKPAUmp.js} +1 -1
  172. package/dist/app/assets/{latex-BC0Uyc-d.js → latex-CMqvt8Q2.js} +1 -1
  173. package/dist/app/assets/{latte-tPT1UrWz.js → latte-BZeQRR6X.js} +1 -1
  174. package/dist/app/assets/{layout-BOlQN9Mo.js → layout-D1Cr86UF.js} +1 -1
  175. package/dist/app/assets/{less-oxG_fu4g.js → less-DzlT6rR0.js} +1 -1
  176. package/dist/app/assets/{lilypond-C88RotJr.js → lilypond-Bhy1kxEo.js} +1 -1
  177. package/dist/app/assets/{linear-BfflU34i.js → linear-CYv9ZVDs.js} +1 -1
  178. package/dist/app/assets/{liquid-C7TfcW57.js → liquid-a0kLlmeN.js} +1 -1
  179. package/dist/app/assets/{lisp-Buz4RfpM.js → lisp-48BMMQcI.js} +1 -1
  180. package/dist/app/assets/{livescript-1DQfUkd-.js → livescript-DE5TQT-Y.js} +1 -1
  181. package/dist/app/assets/{llvm-JvopDbcE.js → llvm-DYLeeTIC.js} +1 -1
  182. package/dist/app/assets/{log-BnfCB9DE.js → log-BN0LG1yL.js} +1 -1
  183. package/dist/app/assets/{lolcode-D_D_7GzE.js → lolcode-CYCvRp7b.js} +1 -1
  184. package/dist/app/assets/{lua-CO1cU0XH.js → lua-CqLmWD7C.js} +1 -1
  185. package/dist/app/assets/{magma-B1G7u0t4.js → magma-Bke0ceyc.js} +1 -1
  186. package/dist/app/assets/{makefile-AeGGTOcq.js → makefile-DBlcQubt.js} +1 -1
  187. package/dist/app/assets/{markdown-C8OTDGWj.js → markdown-BH45bEmz.js} +1 -1
  188. package/dist/app/assets/{markup-fcpLEWs9.js → markup-DmFxGmf3.js} +1 -1
  189. package/dist/app/assets/{markup-templating-BJPOJotJ.js → markup-templating-B_q0uBR_.js} +1 -1
  190. package/dist/app/assets/{matlab-C5u9cVSe.js → matlab-BvTng_-n.js} +1 -1
  191. package/dist/app/assets/{maxscript-D1j46lZY.js → maxscript-EAjZrtH-.js} +1 -1
  192. package/dist/app/assets/{mel-4T8xB3kc.js → mel-B31GmaYN.js} +1 -1
  193. package/dist/app/assets/{mermaid-D2CuapgG.js → mermaid-Bbo9oxye.js} +1 -1
  194. package/dist/app/assets/{min-C6bAU5tf.js → min-C1erP2ys.js} +1 -1
  195. package/dist/app/assets/{mindmap-definition-QFDTVHPH-DQCqFXf4.js → mindmap-definition-QFDTVHPH-DoDM_kwT.js} +1 -1
  196. package/dist/app/assets/{mizar-6YzPCneu.js → mizar-CA6MYAa-.js} +1 -1
  197. package/dist/app/assets/{mongodb-rU_FNrrO.js → mongodb-DBUwhD50.js} +1 -1
  198. package/dist/app/assets/{monkey-DHTaMD5j.js → monkey-W8cNL4gi.js} +1 -1
  199. package/dist/app/assets/{moonscript-B4Q1sWnw.js → moonscript-DlXhfU4k.js} +1 -1
  200. package/dist/app/assets/{n1ql-C-kQ4Dz0.js → n1ql-Dd4Dcmn4.js} +1 -1
  201. package/dist/app/assets/{n4js-B4Kuv0gT.js → n4js-BJwReVRf.js} +1 -1
  202. package/dist/app/assets/{nand2tetris-hdl-BEZvFDwm.js → nand2tetris-hdl-DeAovU0i.js} +1 -1
  203. package/dist/app/assets/{naniscript-0DISbVj5.js → naniscript-B5DfcucH.js} +1 -1
  204. package/dist/app/assets/{nasm-Cy_rHjd9.js → nasm-B2p6UrEt.js} +1 -1
  205. package/dist/app/assets/{neon-CQPnGFjU.js → neon-LRGEn3Kl.js} +1 -1
  206. package/dist/app/assets/{nevod-Cc2uvwJy.js → nevod-DA521y4e.js} +1 -1
  207. package/dist/app/assets/{nginx-CtSV-zWN.js → nginx-DkBE6sdh.js} +1 -1
  208. package/dist/app/assets/{nim-Cx8sXTrq.js → nim-BwHhtLL4.js} +1 -1
  209. package/dist/app/assets/{nix-fzCInmbw.js → nix-DEjXGklZ.js} +1 -1
  210. package/dist/app/assets/{nsis-B-WmXulG.js → nsis-CvAF9MTd.js} +1 -1
  211. package/dist/app/assets/{objectivec-B7mP6oMV.js → objectivec-BnL4g9NC.js} +1 -1
  212. package/dist/app/assets/{ocaml-BCNitKcz.js → ocaml-eNTexkzn.js} +1 -1
  213. package/dist/app/assets/{opencl-Ccg1YnSK.js → opencl-D1mGywOY.js} +1 -1
  214. package/dist/app/assets/{openqasm-CtnHTd2G.js → openqasm-lFdkM6pg.js} +1 -1
  215. package/dist/app/assets/{oz-DXv1OItd.js → oz-DHvmEwQV.js} +1 -1
  216. package/dist/app/assets/{parigp-Cb_kuYUA.js → parigp-es3NjzpJ.js} +1 -1
  217. package/dist/app/assets/{parser-CwT8uubF.js → parser-Bak-ak7k.js} +1 -1
  218. package/dist/app/assets/{pascal-B5wSlm8n.js → pascal-DJr5JSGs.js} +1 -1
  219. package/dist/app/assets/{pascaligo-D7-1FMxX.js → pascaligo-ClJZy1ED.js} +1 -1
  220. package/dist/app/assets/{pcaxis-DbHPrVNE.js → pcaxis-Cq269eOX.js} +1 -1
  221. package/dist/app/assets/{peoplecode-Bwty_AUm.js → peoplecode-CyL_NE7O.js} +1 -1
  222. package/dist/app/assets/{perl-BiIJMtwN.js → perl-DXU8D9bf.js} +1 -1
  223. package/dist/app/assets/{php-6mreideO.js → php-D7BV8qZw.js} +1 -1
  224. package/dist/app/assets/{php-extras-CBjQ7vIX.js → php-extras-DOPW1PzN.js} +1 -1
  225. package/dist/app/assets/{phpdoc-B62bzA5k.js → phpdoc-CRtNn35u.js} +1 -1
  226. package/dist/app/assets/{pieDiagram-DEJITSTG-URmplZD6.js → pieDiagram-DEJITSTG-sozKWzq0.js} +1 -1
  227. package/dist/app/assets/{plsql-BAj_vv6G.js → plsql-BMvjxqWu.js} +1 -1
  228. package/dist/app/assets/{powerquery-CzCmbNz6.js → powerquery-672I_RiA.js} +1 -1
  229. package/dist/app/assets/{powershell-CpwS-v1m.js → powershell-Bbhz0xjs.js} +1 -1
  230. package/dist/app/assets/{processing-9HFL_Kda.js → processing-onwQ_mg1.js} +1 -1
  231. package/dist/app/assets/{prolog-D71hnbvz.js → prolog-R0mnr85o.js} +1 -1
  232. package/dist/app/assets/{promql-Cr4QC9HL.js → promql-Cpdica46.js} +1 -1
  233. package/dist/app/assets/{properties-J9p1gfGR.js → properties-DHo8PbRa.js} +1 -1
  234. package/dist/app/assets/{protobuf-DMxIf431.js → protobuf-DkjPAzxf.js} +1 -1
  235. package/dist/app/assets/{psl-CTytrTSB.js → psl-bLvkZS_A.js} +1 -1
  236. package/dist/app/assets/{pug-jEAnZaKi.js → pug-ByCsGE0M.js} +1 -1
  237. package/dist/app/assets/{puppet-DGT0PXLM.js → puppet-Bln8m9q9.js} +1 -1
  238. package/dist/app/assets/{pure-DFlG-Euv.js → pure-ClPohX0Q.js} +1 -1
  239. package/dist/app/assets/{purebasic-fdJezgk1.js → purebasic-K5G6Cxnt.js} +1 -1
  240. package/dist/app/assets/{purescript-WUURLlSz.js → purescript-BvwLUX-O.js} +1 -1
  241. package/dist/app/assets/{q-CmD9Xmj5.js → q-zX6rqsIp.js} +1 -1
  242. package/dist/app/assets/{qml-BMG0y4hi.js → qml-CklZzPNb.js} +1 -1
  243. package/dist/app/assets/{qore-ndBZlJKP.js → qore-B9lXXujC.js} +1 -1
  244. package/dist/app/assets/{qsharp-DLCEDNKN.js → qsharp-x147BCXH.js} +1 -1
  245. package/dist/app/assets/{quadrantDiagram-34T5L4WZ-DYv3ycY4.js → quadrantDiagram-34T5L4WZ-B-6ATLiH.js} +1 -1
  246. package/dist/app/assets/{r-B8Kaj2hw.js → r-Axvo4Zd_.js} +1 -1
  247. package/dist/app/assets/{racket-BmjGoXCu.js → racket-xW0BNq3A.js} +1 -1
  248. package/dist/app/assets/{reason-BMBey7GD.js → reason-f5QENJ-q.js} +1 -1
  249. package/dist/app/assets/{regex-CcOJ-RBo.js → regex-BpaxF7jU.js} +1 -1
  250. package/dist/app/assets/{rego-BIXa5YcP.js → rego-BUom_JrJ.js} +1 -1
  251. package/dist/app/assets/{renpy-DFVE_JD1.js → renpy-CJyvxC3b.js} +1 -1
  252. package/dist/app/assets/{requirementDiagram-MS252O5E-enCn9qyU.js → requirementDiagram-MS252O5E-CYxoCRf9.js} +1 -1
  253. package/dist/app/assets/{rest-B9H-hgOJ.js → rest-B4ukFYPn.js} +1 -1
  254. package/dist/app/assets/{rip-Bv5Hr1Jw.js → rip-B4q_Vw7R.js} +1 -1
  255. package/dist/app/assets/{roboconf-jRCQTbv5.js → roboconf-CtkjsQy6.js} +1 -1
  256. package/dist/app/assets/{robotframework-B5SYb3S6.js → robotframework-DNz8f1Ip.js} +1 -1
  257. package/dist/app/assets/{ruby-B9xBZ2-7.js → ruby-rJz8oHeT.js} +1 -1
  258. package/dist/app/assets/{rust-DxSKWUH3.js → rust-Cqf9gv1-.js} +1 -1
  259. package/dist/app/assets/{sankeyDiagram-XADWPNL6-Bhc5bfvg.js → sankeyDiagram-XADWPNL6-DdDztt4E.js} +1 -1
  260. package/dist/app/assets/{sas-Ufzee22m.js → sas-EnB4FWaC.js} +1 -1
  261. package/dist/app/assets/{sass-D2SeUbd3.js → sass-DZUC6NF8.js} +1 -1
  262. package/dist/app/assets/{scala-1mDQ7lT3.js → scala-DUd3GTdg.js} +1 -1
  263. package/dist/app/assets/{scheme-C1DE_OtV.js → scheme-BiPREGfN.js} +1 -1
  264. package/dist/app/assets/{scss-CG-uC_jx.js → scss-gvdTHnI9.js} +1 -1
  265. package/dist/app/assets/{sequenceDiagram-FGHM5R23-CDe6bCwe.js → sequenceDiagram-FGHM5R23-lyt-X7gd.js} +1 -1
  266. package/dist/app/assets/{shell-session-BXrndzdM.js → shell-session-BOZ-lbqx.js} +1 -1
  267. package/dist/app/assets/{smali-QM7yFavH.js → smali-BRGQxjkp.js} +1 -1
  268. package/dist/app/assets/{smalltalk-C-fITGMb.js → smalltalk-4xLJEhv1.js} +1 -1
  269. package/dist/app/assets/{smarty-4kJKkU5q.js → smarty-HC6iTXED.js} +1 -1
  270. package/dist/app/assets/{sml-ot95negB.js → sml-aSisqwwP.js} +1 -1
  271. package/dist/app/assets/{solidity-Dx_IP6eq.js → solidity-wi6bpO7H.js} +1 -1
  272. package/dist/app/assets/{solution-file-wapuUhtE.js → solution-file-BiKyTt1v.js} +1 -1
  273. package/dist/app/assets/{soy-D-5oz9aj.js → soy-B5zGlrys.js} +1 -1
  274. package/dist/app/assets/{sparql--6Q0TOqj.js → sparql-DknctEWY.js} +1 -1
  275. package/dist/app/assets/{splunk-spl-CNbdZc4Q.js → splunk-spl-uHY5PLUO.js} +1 -1
  276. package/dist/app/assets/{sqf-DSKo3YQF.js → sqf-C_xrVS5o.js} +1 -1
  277. package/dist/app/assets/{sql-gNTttuTN.js → sql-BPenyVf5.js} +1 -1
  278. package/dist/app/assets/{squirrel-DBA8eFXS.js → squirrel-DADHl-33.js} +1 -1
  279. package/dist/app/assets/{stan-DDf1Y7DO.js → stan-DrWoR2TQ.js} +1 -1
  280. package/dist/app/assets/{stateDiagram-FHFEXIEX-p42Be8mf.js → stateDiagram-FHFEXIEX-CZaq-pRy.js} +1 -1
  281. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-CjL5rpeW.js +1 -0
  282. package/dist/app/assets/{stylus-CjUUyrES.js → stylus-BteIttv6.js} +1 -1
  283. package/dist/app/assets/{swift-CKnKs81t.js → swift-CID0lx8z.js} +1 -1
  284. package/dist/app/assets/{systemd-C10k014a.js → systemd-BfSaVXI_.js} +1 -1
  285. package/dist/app/assets/{t4-cs-DDiM4sZJ.js → t4-cs-BnGkiA9f.js} +1 -1
  286. package/dist/app/assets/{t4-templating-7kKJq4TZ.js → t4-templating-DU7VnNhm.js} +1 -1
  287. package/dist/app/assets/{t4-vb-DuiSnonv.js → t4-vb-DqrbsRf8.js} +1 -1
  288. package/dist/app/assets/{tap-IQ8yl2oh.js → tap-4N6JZhAV.js} +1 -1
  289. package/dist/app/assets/{tcl-DURyRJDt.js → tcl-DAdjH7wF.js} +1 -1
  290. package/dist/app/assets/{textile-DQ_JtUdC.js → textile-Du9JitF-.js} +1 -1
  291. package/dist/app/assets/{timeline-definition-GMOUNBTQ-B4uPbG-W.js → timeline-definition-GMOUNBTQ-CdXHfEQv.js} +1 -1
  292. package/dist/app/assets/{toml-IQN2CNuI.js → toml-B1OC92l7.js} +1 -1
  293. package/dist/app/assets/{tremor-Bny5MqnS.js → tremor-CcXF5xRR.js} +1 -1
  294. package/dist/app/assets/{tt2-DcdeYRm9.js → tt2-CbRAm8Dv.js} +1 -1
  295. package/dist/app/assets/{turtle-ePfiwKUJ.js → turtle-BYM3wDgF.js} +1 -1
  296. package/dist/app/assets/{twig-DYNpPvPW.js → twig-jMTWKrUr.js} +1 -1
  297. package/dist/app/assets/{typescript-myhWeMeg.js → typescript-BUWfHro-.js} +1 -1
  298. package/dist/app/assets/{typoscript-BtWmq6lK.js → typoscript-BYuR5WoR.js} +1 -1
  299. package/dist/app/assets/{unrealscript-BdPAyGL5.js → unrealscript-D0Ks49Es.js} +1 -1
  300. package/dist/app/assets/{uorazor-CdoHfnCa.js → uorazor-BJa2k0kx.js} +1 -1
  301. package/dist/app/assets/{uri-8lWJiWx5.js → uri-BC41d-Kc.js} +1 -1
  302. package/dist/app/assets/{v-0tJN9Hku.js → v-pMjd7J8c.js} +1 -1
  303. package/dist/app/assets/{vala-XUiF0ZAF.js → vala-Cc2iyU85.js} +1 -1
  304. package/dist/app/assets/{vbnet-BUEocEyh.js → vbnet-Cw4YKA4r.js} +1 -1
  305. package/dist/app/assets/{velocity-BEOmqWKD.js → velocity-DgoH540V.js} +1 -1
  306. package/dist/app/assets/{vennDiagram-DHZGUBPP-CiBcI7a1.js → vennDiagram-DHZGUBPP-BGQ4WYyA.js} +1 -1
  307. package/dist/app/assets/{verilog-BBKGGmem.js → verilog-B3IpJw7p.js} +1 -1
  308. package/dist/app/assets/{vhdl-B-_TUb2S.js → vhdl-Bp_kvSRI.js} +1 -1
  309. package/dist/app/assets/{vim-D12Uaiun.js → vim-vIMCVl5h.js} +1 -1
  310. package/dist/app/assets/{visual-basic-Bt6yOtui.js → visual-basic-BDowvLdG.js} +1 -1
  311. package/dist/app/assets/{wardley-RL74JXVD-CAHah9aU.js → wardley-RL74JXVD-Q35_vT4f.js} +1 -1
  312. package/dist/app/assets/{wardleyDiagram-NUSXRM2D-DuJOM0rD.js → wardleyDiagram-NUSXRM2D-tiJkvEP3.js} +1 -1
  313. package/dist/app/assets/{warpscript-CeTM4-Gj.js → warpscript-CGawrQhB.js} +1 -1
  314. package/dist/app/assets/{wasm-SfMoRKqG.js → wasm-DioreXvc.js} +1 -1
  315. package/dist/app/assets/{web-idl-D20E2F0O.js → web-idl-Cl19lMMv.js} +1 -1
  316. package/dist/app/assets/{wiki-D8abQrQq.js → wiki-fhUrXEuf.js} +1 -1
  317. package/dist/app/assets/{wolfram-CGEar8g5.js → wolfram-BBdTj5xJ.js} +1 -1
  318. package/dist/app/assets/{wren-D2cfeRDa.js → wren-DyGar7gV.js} +1 -1
  319. package/dist/app/assets/{xeora-CjjXFLG8.js → xeora-NACaryDq.js} +1 -1
  320. package/dist/app/assets/{xml-doc-3_owB9PN.js → xml-doc-Deba7Hms.js} +1 -1
  321. package/dist/app/assets/{xojo-C312JS6O.js → xojo-BDayHUxW.js} +1 -1
  322. package/dist/app/assets/{xquery-Cn9l8bPn.js → xquery-BUHudJSq.js} +1 -1
  323. package/dist/app/assets/{xychartDiagram-5P7HB3ND-CvrNIPqq.js → xychartDiagram-5P7HB3ND-lPbACL4f.js} +1 -1
  324. package/dist/app/assets/{yaml-OkW6jhVj.js → yaml-Mc4-fPw6.js} +1 -1
  325. package/dist/app/assets/{yang-Dg93mnQG.js → yang-D4m2oyuH.js} +1 -1
  326. package/dist/app/assets/{zig-CD6h8YdZ.js → zig-B87WilJ7.js} +1 -1
  327. package/dist/app/index.html +2 -2
  328. package/dist/index.cjs +653 -425
  329. package/dist/index.d.cts +16 -0
  330. package/dist/index.d.ts +16 -0
  331. package/dist/index.js +687 -442
  332. package/package.json +4 -4
  333. package/dist/app/assets/channel-DqqmKvlV.js +0 -1
  334. package/dist/app/assets/classDiagram-6PBFFD2Q-DDmxiqHK.js +0 -1
  335. package/dist/app/assets/classDiagram-v2-HSJHXN6E-DDmxiqHK.js +0 -1
  336. package/dist/app/assets/clone-DzAFCb4d.js +0 -1
  337. package/dist/app/assets/index-o0o3Q2hC.css +0 -1
  338. package/dist/app/assets/index-tsW7eKsE.js +0 -762
  339. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-CAhlZfwO.js +0 -1
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  // src/components/chat.tsx
2
- import * as React54 from "react";
2
+ import * as React55 from "react";
3
3
  import {
4
4
  ArrowDown as ArrowDown2,
5
5
  ChevronDown as ChevronDown5,
6
6
  FileText as FileText5,
7
7
  ImageIcon,
8
- Loader2 as Loader210,
8
+ Loader2 as Loader211,
9
9
  Minus,
10
10
  Pause,
11
11
  Pencil as Pencil4,
@@ -14,7 +14,7 @@ import {
14
14
  Settings as Settings2,
15
15
  Target as Target3,
16
16
  Trash2 as Trash23,
17
- X as X7
17
+ X as X9
18
18
  } from "lucide-react";
19
19
  import { CHATKIT_TASK_SUMMARY_OPEN_RESOURCE_EFFECT } from "@xpert-ai/chatkit-types";
20
20
 
@@ -806,6 +806,7 @@ function isRuntimeCapabilitiesSelection(value) {
806
806
 
807
807
  // src/providers/ParentMessenger.tsx
808
808
  import { jsx } from "react/jsx-runtime";
809
+ var CHATKIT_INTERNAL_PARENT_EVENT = "chatkit:internal-parent-event";
809
810
  var handledSendUserMessageNonces = /* @__PURE__ */ new Set();
810
811
  var handledSendUserMessageEvents = /* @__PURE__ */ new WeakSet();
811
812
  var getParentOrigin = () => {
@@ -1123,6 +1124,16 @@ function ParentMessengerProvider({
1123
1124
  );
1124
1125
  const sendEvent = useCallback(
1125
1126
  (event, data, transfer) => {
1127
+ if (typeof window !== "undefined") {
1128
+ window.dispatchEvent(
1129
+ new CustomEvent(
1130
+ CHATKIT_INTERNAL_PARENT_EVENT,
1131
+ {
1132
+ detail: { event, data }
1133
+ }
1134
+ )
1135
+ );
1136
+ }
1126
1137
  if (!isParentAvailable) return;
1127
1138
  const message = {
1128
1139
  __xpaiChatKit: true,
@@ -2118,6 +2129,32 @@ import { initReactI18next } from "react-i18next";
2118
2129
 
2119
2130
  // src/i18n/locales/en-US.json
2120
2131
  var en_US_default = {
2132
+ workbench: {
2133
+ title: "Views",
2134
+ description: "Remote workbench views",
2135
+ views: "Available views",
2136
+ open: "Open views",
2137
+ close: "Close views",
2138
+ expandPanel: "Expand panel",
2139
+ restorePanel: "Restore panel",
2140
+ toggleSidebar: "Show or hide sidebar",
2141
+ resize: "Resize views panel",
2142
+ loading: "Loading views...",
2143
+ loadingView: "Loading view...",
2144
+ empty: "No compatible views are available.",
2145
+ loadFailed: "Views could not be loaded.",
2146
+ entryUnavailable: "Remote view content is unavailable.",
2147
+ missingAssistant: "An assistant is required to load views.",
2148
+ retry: "Retry",
2149
+ errors: {
2150
+ contextKeyRequired: "Context key is required.",
2151
+ messageRequired: "Message text is required.",
2152
+ sendFailed: "The message could not be sent.",
2153
+ requestFailed: "The remote view request failed.",
2154
+ requestTimeout: "The remote view request timed out.",
2155
+ clientCommandUnavailable: "No handler is configured for client command {{commandKey}}."
2156
+ }
2157
+ },
2121
2158
  chat: {
2122
2159
  title: "Chat",
2123
2160
  placeholder: "Type a message...",
@@ -2205,6 +2242,9 @@ var en_US_default = {
2205
2242
  history: {
2206
2243
  threadHistory: "Thread history",
2207
2244
  title: "Threads",
2245
+ refresh: "Refresh threads",
2246
+ updatedAt: "Updated {{time}}",
2247
+ deleteThread: "Delete {{title}}",
2208
2248
  newThread: "New Thread",
2209
2249
  empty: "No threads yet",
2210
2250
  newThreadTitle: "New thread",
@@ -2559,6 +2599,32 @@ var en_US_default = {
2559
2599
 
2560
2600
  // src/i18n/locales/zh-CN.json
2561
2601
  var zh_CN_default = {
2602
+ workbench: {
2603
+ title: "\u89C6\u56FE",
2604
+ description: "\u8FDC\u7A0B\u5DE5\u4F5C\u53F0\u89C6\u56FE",
2605
+ views: "\u53EF\u7528\u89C6\u56FE",
2606
+ open: "\u6253\u5F00\u89C6\u56FE",
2607
+ close: "\u5173\u95ED\u89C6\u56FE",
2608
+ expandPanel: "\u5C55\u5F00\u9762\u677F",
2609
+ restorePanel: "\u8FD8\u539F\u9762\u677F",
2610
+ toggleSidebar: "\u663E\u793A/\u9690\u85CF\u4FA7\u8FB9\u680F",
2611
+ resize: "\u8C03\u6574\u89C6\u56FE\u9762\u677F\u5BBD\u5EA6",
2612
+ loading: "\u6B63\u5728\u52A0\u8F7D\u89C6\u56FE...",
2613
+ loadingView: "\u6B63\u5728\u52A0\u8F7D\u89C6\u56FE...",
2614
+ empty: "\u6682\u65E0\u517C\u5BB9\u7684\u89C6\u56FE\u3002",
2615
+ loadFailed: "\u89C6\u56FE\u52A0\u8F7D\u5931\u8D25\u3002",
2616
+ entryUnavailable: "\u8FDC\u7A0B\u89C6\u56FE\u5185\u5BB9\u4E0D\u53EF\u7528\u3002",
2617
+ missingAssistant: "\u9700\u8981 Assistant \u624D\u80FD\u52A0\u8F7D\u89C6\u56FE\u3002",
2618
+ retry: "\u91CD\u8BD5",
2619
+ errors: {
2620
+ contextKeyRequired: "\u5FC5\u987B\u63D0\u4F9B\u4E0A\u4E0B\u6587\u952E\u3002",
2621
+ messageRequired: "\u5FC5\u987B\u63D0\u4F9B\u6D88\u606F\u5185\u5BB9\u3002",
2622
+ sendFailed: "\u6D88\u606F\u53D1\u9001\u5931\u8D25\u3002",
2623
+ requestFailed: "\u8FDC\u7A0B\u89C6\u56FE\u8BF7\u6C42\u5931\u8D25\u3002",
2624
+ requestTimeout: "\u8FDC\u7A0B\u89C6\u56FE\u8BF7\u6C42\u8D85\u65F6\u3002",
2625
+ clientCommandUnavailable: "\u672A\u914D\u7F6E\u5BA2\u6237\u7AEF\u547D\u4EE4 {{commandKey}} \u7684\u5904\u7406\u5668\u3002"
2626
+ }
2627
+ },
2562
2628
  chat: {
2563
2629
  title: "\u804A\u5929",
2564
2630
  placeholder: "\u8F93\u5165\u6D88\u606F...",
@@ -2646,6 +2712,9 @@ var zh_CN_default = {
2646
2712
  history: {
2647
2713
  threadHistory: "\u7EBF\u7A0B\u5386\u53F2",
2648
2714
  title: "\u7EBF\u7A0B",
2715
+ refresh: "\u5237\u65B0\u7EBF\u7A0B",
2716
+ updatedAt: "\u66F4\u65B0\u4E8E {{time}}",
2717
+ deleteThread: "\u5220\u9664 {{title}}",
2649
2718
  newThread: "\u65B0\u7EBF\u7A0B",
2650
2719
  empty: "\u6682\u65E0\u7EBF\u7A0B",
2651
2720
  newThreadTitle: "\u65B0\u7EBF\u7A0B",
@@ -3230,6 +3299,7 @@ function generateGrayscaleColors(grayscale, isDarkMode) {
3230
3299
  }
3231
3300
  function ThemeProvider({ children, theme: themeProp }) {
3232
3301
  const themeRef = React4.useRef(null);
3302
+ const [themeRevision, setThemeRevision] = React4.useState(0);
3233
3303
  const theme = React4.useMemo(() => {
3234
3304
  if (typeof themeProp === "string") {
3235
3305
  return {
@@ -3242,8 +3312,13 @@ function ThemeProvider({ children, theme: themeProp }) {
3242
3312
  return theme.colorScheme === "dark";
3243
3313
  }, [theme]);
3244
3314
  const contextValue = React4.useMemo(
3245
- () => ({ theme, isDarkMode }),
3246
- [theme, isDarkMode]
3315
+ () => ({
3316
+ theme,
3317
+ isDarkMode,
3318
+ themeRootRef: themeRef,
3319
+ themeRevision
3320
+ }),
3321
+ [theme, isDarkMode, themeRevision]
3247
3322
  );
3248
3323
  React4.useEffect(() => {
3249
3324
  if (!themeRef.current) return;
@@ -3340,6 +3415,7 @@ function ThemeProvider({ children, theme: themeProp }) {
3340
3415
  }
3341
3416
  }
3342
3417
  }
3418
+ setThemeRevision((current) => current + 1);
3343
3419
  return () => {
3344
3420
  const root = document.documentElement;
3345
3421
  el.classList.remove("dark");
@@ -4758,7 +4834,14 @@ function SlashPalette({
4758
4834
 
4759
4835
  // src/components/history/HistorySidebar.tsx
4760
4836
  import * as React13 from "react";
4761
- import { History, MessageSquare, PlusCircle, Trash2 } from "lucide-react";
4837
+ import {
4838
+ History,
4839
+ MessageSquare,
4840
+ PlusCircle,
4841
+ RefreshCw,
4842
+ Trash2,
4843
+ X as X3
4844
+ } from "lucide-react";
4762
4845
 
4763
4846
  // src/components/ui/scroll-area.tsx
4764
4847
  import * as React11 from "react";
@@ -4768,10 +4851,10 @@ var ScrollArea = React11.forwardRef(({ className, children, ...props }, ref) =>
4768
4851
  ScrollAreaPrimitive.Root,
4769
4852
  {
4770
4853
  ref,
4771
- className: cn("relative overflow-hidden", className),
4854
+ className: cn("relative min-w-0 overflow-hidden", className),
4772
4855
  ...props,
4773
4856
  children: [
4774
- /* @__PURE__ */ jsx14(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children }),
4857
+ /* @__PURE__ */ jsx14(ScrollAreaPrimitive.Viewport, { className: "h-full w-full min-w-0 max-w-full rounded-[inherit] [&>div]:!block [&>div]:!w-full", children }),
4775
4858
  /* @__PURE__ */ jsx14(ScrollBar, {}),
4776
4859
  /* @__PURE__ */ jsx14(ScrollAreaPrimitive.Corner, {})
4777
4860
  ]
@@ -4806,6 +4889,9 @@ function Sheet({ ...props }) {
4806
4889
  function SheetTrigger({ ...props }) {
4807
4890
  return /* @__PURE__ */ jsx15(SheetPrimitive.Trigger, { ...props });
4808
4891
  }
4892
+ function SheetClose({ ...props }) {
4893
+ return /* @__PURE__ */ jsx15(SheetPrimitive.Close, { ...props });
4894
+ }
4809
4895
  function SheetPortal({ ...props }) {
4810
4896
  return /* @__PURE__ */ jsx15(SheetPrimitive.Portal, { ...props });
4811
4897
  }
@@ -4826,6 +4912,7 @@ function SheetOverlay({
4826
4912
  }
4827
4913
  function SheetContent({
4828
4914
  side = "right",
4915
+ showCloseButton = true,
4829
4916
  className,
4830
4917
  children,
4831
4918
  ...props
@@ -4850,7 +4937,7 @@ function SheetContent({
4850
4937
  ...props,
4851
4938
  children: [
4852
4939
  children,
4853
- /* @__PURE__ */ jsxs8(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
4940
+ showCloseButton && /* @__PURE__ */ jsxs8(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
4854
4941
  /* @__PURE__ */ jsx15(X2, { size: 16 }),
4855
4942
  /* @__PURE__ */ jsx15("span", { className: "sr-only", children: t("sheet.close") })
4856
4943
  ] })
@@ -4889,17 +4976,51 @@ function SheetTitle({
4889
4976
 
4890
4977
  // src/components/history/HistorySidebar.tsx
4891
4978
  import { jsx as jsx16, jsxs as jsxs9 } from "react/jsx-runtime";
4979
+ var formatThreadUpdatedAt = (value, formatters, now = /* @__PURE__ */ new Date()) => {
4980
+ if (Number.isNaN(value.getTime())) return null;
4981
+ const isSameYear = value.getFullYear() === now.getFullYear();
4982
+ const isSameDay = isSameYear && value.getMonth() === now.getMonth() && value.getDate() === now.getDate();
4983
+ return {
4984
+ compact: isSameDay ? formatters.time.format(value) : isSameYear ? formatters.date.format(value) : formatters.dateWithYear.format(value),
4985
+ full: formatters.full.format(value)
4986
+ };
4987
+ };
4892
4988
  function HistorySidebar({
4893
4989
  threads = [],
4894
4990
  currentThreadId,
4895
4991
  onNewThread,
4992
+ onRefresh,
4896
4993
  onSelectThread,
4897
4994
  onDeleteThread,
4995
+ isRefreshing = false,
4898
4996
  showDelete = true,
4899
4997
  disabled = false
4900
4998
  }) {
4901
- const { t } = useChatkitTranslation();
4999
+ const { t, i18n: i18n2 } = useChatkitTranslation();
4902
5000
  const [open, setOpen] = React13.useState(false);
5001
+ const language = i18n2.resolvedLanguage ?? i18n2.language;
5002
+ const threadTimeFormatters = React13.useMemo(
5003
+ () => ({
5004
+ time: new Intl.DateTimeFormat(language, {
5005
+ hour: "2-digit",
5006
+ minute: "2-digit"
5007
+ }),
5008
+ date: new Intl.DateTimeFormat(language, {
5009
+ month: "numeric",
5010
+ day: "numeric"
5011
+ }),
5012
+ dateWithYear: new Intl.DateTimeFormat(language, {
5013
+ year: "numeric",
5014
+ month: "numeric",
5015
+ day: "numeric"
5016
+ }),
5017
+ full: new Intl.DateTimeFormat(language, {
5018
+ dateStyle: "medium",
5019
+ timeStyle: "short"
5020
+ })
5021
+ }),
5022
+ [language]
5023
+ );
4903
5024
  const handleNewThread = () => {
4904
5025
  onNewThread?.();
4905
5026
  setOpen(false);
@@ -4926,49 +5047,118 @@ function HistorySidebar({
4926
5047
  ) }) }) }),
4927
5048
  /* @__PURE__ */ jsx16(TooltipContent, { side: "bottom", children: t("history.threadHistory") })
4928
5049
  ] }),
4929
- /* @__PURE__ */ jsxs9(SheetContent, { side: "right", className: "w-80 p-0", children: [
4930
- /* @__PURE__ */ jsx16(SheetHeader, { className: "border-b p-4", children: /* @__PURE__ */ jsx16(SheetTitle, { children: t("history.title") }) }),
4931
- /* @__PURE__ */ jsx16("div", { className: "p-4", children: /* @__PURE__ */ jsxs9(
4932
- Button,
4933
- {
4934
- onClick: handleNewThread,
4935
- className: "w-full justify-start gap-2",
4936
- variant: "secondary",
4937
- children: [
4938
- /* @__PURE__ */ jsx16(PlusCircle, { size: 16 }),
4939
- t("history.newThread")
4940
- ]
4941
- }
4942
- ) }),
4943
- /* @__PURE__ */ jsx16(ScrollArea, { className: "h-[calc(100vh-140px)]", children: /* @__PURE__ */ jsx16("div", { className: "px-4 pb-4", children: threads.length === 0 ? /* @__PURE__ */ jsx16("div", { className: "py-8 text-center text-sm text-muted-foreground", children: t("history.empty") }) : /* @__PURE__ */ jsx16("div", { className: "space-y-1", children: threads.map((thread) => /* @__PURE__ */ jsxs9(
4944
- "div",
4945
- {
4946
- className: cn(
4947
- "group flex items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors",
4948
- "hover:bg-muted cursor-pointer",
4949
- currentThreadId === thread.id && "bg-muted"
4950
- ),
4951
- onClick: () => handleSelectThread(thread.id),
4952
- children: [
4953
- /* @__PURE__ */ jsx16("span", { className: "text-muted-foreground", children: /* @__PURE__ */ jsx16(MessageSquare, { size: 16 }) }),
4954
- /* @__PURE__ */ jsx16("span", { className: "flex-1 truncate", children: thread.title }),
4955
- showDelete && onDeleteThread && /* @__PURE__ */ jsx16(
4956
- "button",
5050
+ /* @__PURE__ */ jsxs9(
5051
+ SheetContent,
5052
+ {
5053
+ side: "right",
5054
+ className: "w-80 p-0",
5055
+ showCloseButton: false,
5056
+ "aria-describedby": void 0,
5057
+ children: [
5058
+ /* @__PURE__ */ jsxs9(SheetHeader, { className: "grid grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] items-center space-y-0 border-b px-3 py-4", children: [
5059
+ /* @__PURE__ */ jsx16(SheetTitle, { className: "col-start-2 text-center", children: t("history.title") }),
5060
+ /* @__PURE__ */ jsxs9("div", { className: "col-start-3 row-start-1 flex min-w-max items-center gap-1 justify-self-end", children: [
5061
+ onRefresh && /* @__PURE__ */ jsxs9(Tooltip, { children: [
5062
+ /* @__PURE__ */ jsx16(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx16(
5063
+ Button,
5064
+ {
5065
+ type: "button",
5066
+ variant: "ghost",
5067
+ size: "icon-sm",
5068
+ onClick: () => void onRefresh(),
5069
+ disabled: disabled || isRefreshing,
5070
+ className: "cursor-pointer text-muted-foreground hover:bg-accent hover:text-accent-foreground",
5071
+ "aria-label": t("history.refresh"),
5072
+ "aria-busy": isRefreshing,
5073
+ children: /* @__PURE__ */ jsx16(
5074
+ RefreshCw,
5075
+ {
5076
+ size: 16,
5077
+ className: cn(isRefreshing && "animate-spin")
5078
+ }
5079
+ )
5080
+ }
5081
+ ) }),
5082
+ /* @__PURE__ */ jsx16(TooltipContent, { side: "bottom", children: t("history.refresh") })
5083
+ ] }),
5084
+ /* @__PURE__ */ jsx16(SheetClose, { asChild: true, children: /* @__PURE__ */ jsx16(
5085
+ Button,
5086
+ {
5087
+ type: "button",
5088
+ variant: "ghost",
5089
+ size: "icon-sm",
5090
+ className: "cursor-pointer text-muted-foreground hover:bg-accent hover:text-accent-foreground",
5091
+ "aria-label": t("sheet.close"),
5092
+ children: /* @__PURE__ */ jsx16(X3, { size: 16 })
5093
+ }
5094
+ ) })
5095
+ ] })
5096
+ ] }),
5097
+ /* @__PURE__ */ jsx16("div", { className: "p-4", children: /* @__PURE__ */ jsxs9(
5098
+ Button,
5099
+ {
5100
+ onClick: handleNewThread,
5101
+ className: "w-full justify-start gap-2",
5102
+ variant: "secondary",
5103
+ children: [
5104
+ /* @__PURE__ */ jsx16(PlusCircle, { size: 16 }),
5105
+ t("history.newThread")
5106
+ ]
5107
+ }
5108
+ ) }),
5109
+ /* @__PURE__ */ jsx16(ScrollArea, { className: "h-[calc(100vh-140px)]", children: /* @__PURE__ */ jsx16("div", { className: "px-4 pb-4", children: threads.length === 0 ? /* @__PURE__ */ jsx16("div", { className: "py-8 text-center text-sm text-muted-foreground", children: t("history.empty") }) : /* @__PURE__ */ jsx16("div", { children: threads.map((thread) => {
5110
+ const updatedAt = thread.lastMessageAt ? formatThreadUpdatedAt(
5111
+ thread.lastMessageAt,
5112
+ threadTimeFormatters
5113
+ ) : null;
5114
+ return /* @__PURE__ */ jsxs9(
5115
+ "div",
4957
5116
  {
4958
- type: "button",
4959
- onClick: (e) => {
4960
- e.stopPropagation();
4961
- onDeleteThread(thread.id);
4962
- },
4963
- className: "opacity-0 group-hover:opacity-100 p-1 rounded hover:bg-destructive/10 hover:text-destructive transition-all",
4964
- children: /* @__PURE__ */ jsx16(Trash2, { size: 14 })
4965
- }
4966
- )
4967
- ]
4968
- },
4969
- thread.id
4970
- )) }) }) })
4971
- ] })
5117
+ "data-active": currentThreadId === thread.id,
5118
+ className: cn(
5119
+ "group flex items-center gap-2 rounded-lg px-3 py-2 text-sm transition-colors",
5120
+ "cursor-pointer hover:bg-accent hover:text-accent-foreground",
5121
+ "data-[active=true]:bg-accent data-[active=true]:text-accent-foreground"
5122
+ ),
5123
+ onClick: () => handleSelectThread(thread.id),
5124
+ children: [
5125
+ /* @__PURE__ */ jsx16("span", { className: "shrink-0 text-muted-foreground transition-colors group-hover:text-accent-foreground group-data-[active=true]:text-accent-foreground", children: /* @__PURE__ */ jsx16(MessageSquare, { size: 16 }) }),
5126
+ /* @__PURE__ */ jsx16("span", { className: "min-w-0 flex-1 truncate", children: thread.title }),
5127
+ updatedAt && /* @__PURE__ */ jsx16(
5128
+ "time",
5129
+ {
5130
+ dateTime: thread.lastMessageAt?.toISOString(),
5131
+ title: updatedAt.full,
5132
+ "aria-label": t("history.updatedAt", {
5133
+ time: updatedAt.full
5134
+ }),
5135
+ className: "hidden shrink-0 whitespace-nowrap text-xs text-muted-foreground transition-colors group-hover:inline group-hover:text-accent-foreground group-focus-within:inline group-data-[active=true]:text-accent-foreground",
5136
+ children: updatedAt.compact
5137
+ }
5138
+ ),
5139
+ showDelete && onDeleteThread && /* @__PURE__ */ jsx16(
5140
+ "button",
5141
+ {
5142
+ type: "button",
5143
+ onClick: (e) => {
5144
+ e.stopPropagation();
5145
+ onDeleteThread(thread.id);
5146
+ },
5147
+ className: "shrink-0 rounded p-1 opacity-0 transition-all hover:bg-destructive/10 hover:text-destructive group-hover:opacity-100 group-focus-within:opacity-100",
5148
+ "aria-label": t("history.deleteThread", {
5149
+ title: thread.title
5150
+ }),
5151
+ children: /* @__PURE__ */ jsx16(Trash2, { size: 14 })
5152
+ }
5153
+ )
5154
+ ]
5155
+ },
5156
+ thread.id
5157
+ );
5158
+ }) }) }) })
5159
+ ]
5160
+ }
5161
+ )
4972
5162
  ] });
4973
5163
  }
4974
5164
 
@@ -5513,7 +5703,7 @@ import {
5513
5703
  MessageSquare as MessageSquare2,
5514
5704
  Pencil as Pencil2,
5515
5705
  ShieldCheck,
5516
- X as X3
5706
+ X as X4
5517
5707
  } from "lucide-react";
5518
5708
 
5519
5709
  // src/components/thread/json-tree-view.tsx
@@ -5708,7 +5898,7 @@ var decisionOrder = [
5708
5898
  var decisionMeta = {
5709
5899
  approve: { icon: Check, labelKey: "composer.hitl.approve" },
5710
5900
  edit: { icon: Pencil2, labelKey: "composer.hitl.edit" },
5711
- reject: { icon: X3, labelKey: "composer.hitl.reject" },
5901
+ reject: { icon: X4, labelKey: "composer.hitl.reject" },
5712
5902
  respond: { icon: MessageSquare2, labelKey: "composer.hitl.respond" }
5713
5903
  };
5714
5904
  var emptyActions = [];
@@ -7084,7 +7274,7 @@ function useConversationSummaryEvent({
7084
7274
 
7085
7275
  // src/components/chat/attachments.tsx
7086
7276
  import * as React22 from "react";
7087
- import { FileText as FileText2, Loader2 as Loader22, RefreshCw, X as X4 } from "lucide-react";
7277
+ import { FileText as FileText2, Loader2 as Loader22, RefreshCw as RefreshCw2, X as X5 } from "lucide-react";
7088
7278
  import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
7089
7279
  var ACTIVE_PARSE_STATUSES = /* @__PURE__ */ new Set([
7090
7280
  "uploaded",
@@ -7426,7 +7616,7 @@ var ChatAttachments = React22.forwardRef(function ChatAttachments2({
7426
7616
  onClick: () => retryUpload(item.localId),
7427
7617
  className: "ml-1 rounded-full p-0.5 text-destructive hover:bg-destructive/20",
7428
7618
  title: retryUploadLabel,
7429
- children: /* @__PURE__ */ jsx24(RefreshCw, { size: 12 })
7619
+ children: /* @__PURE__ */ jsx24(RefreshCw2, { size: 12 })
7430
7620
  }
7431
7621
  ),
7432
7622
  /* @__PURE__ */ jsx24(
@@ -7438,7 +7628,7 @@ var ChatAttachments = React22.forwardRef(function ChatAttachments2({
7438
7628
  "ml-1 rounded-full p-0.5",
7439
7629
  item.status === "error" ? "text-destructive hover:bg-destructive/20" : "hover:bg-muted-foreground/20"
7440
7630
  ),
7441
- children: /* @__PURE__ */ jsx24(X4, { size: 12 })
7631
+ children: /* @__PURE__ */ jsx24(X5, { size: 12 })
7442
7632
  }
7443
7633
  )
7444
7634
  ]
@@ -9154,7 +9344,7 @@ import {
9154
9344
  memo,
9155
9345
  useContext as useContext5,
9156
9346
  useId as useId4,
9157
- useState as useState14
9347
+ useState as useState15
9158
9348
  } from "react";
9159
9349
  import { CheckIcon as CheckIcon3, ChevronDownIcon, CopyIcon as CopyIcon2, DownloadIcon as DownloadIcon2, ListChecksIcon } from "lucide-react";
9160
9350
 
@@ -9203,7 +9393,7 @@ import {
9203
9393
  ExpandIcon,
9204
9394
  Loader2 as Loader23,
9205
9395
  TriangleAlert,
9206
- X as X5
9396
+ X as X6
9207
9397
  } from "lucide-react";
9208
9398
  import * as React30 from "react";
9209
9399
 
@@ -9491,7 +9681,7 @@ function MermaidPreviewDialog({
9491
9681
  type: "button",
9492
9682
  className: "inline-flex size-10 items-center justify-center rounded-full border border-border bg-card text-muted-foreground transition-colors hover:text-foreground",
9493
9683
  children: [
9494
- /* @__PURE__ */ jsx32(X5, { className: "size-4" }),
9684
+ /* @__PURE__ */ jsx32(X6, { className: "size-4" }),
9495
9685
  /* @__PURE__ */ jsx32("span", { className: "sr-only", children: closeLabel })
9496
9686
  ]
9497
9687
  }
@@ -9909,7 +10099,7 @@ function PlanCard({ children }) {
9909
10099
  const { t } = useChatkitTranslation();
9910
10100
  const planMarkdown = normalizePlanMarkdown(children);
9911
10101
  const contentId = useId4();
9912
- const [isExpanded, setIsExpanded] = useState14(false);
10102
+ const [isExpanded, setIsExpanded] = useState15(false);
9913
10103
  const { isCopied, copyToClipboard } = useCopyToClipboard();
9914
10104
  const onCopy = () => {
9915
10105
  if (!planMarkdown || isCopied) return;
@@ -10015,7 +10205,7 @@ var isMermaidCodeElement = (child) => isValidElement(child) && typeof child.prop
10015
10205
  function useCopyToClipboard({
10016
10206
  copiedDuration = 3e3
10017
10207
  } = {}) {
10018
- const [isCopied, setIsCopied] = useState14(false);
10208
+ const [isCopied, setIsCopied] = useState15(false);
10019
10209
  const copyToClipboard = (value) => {
10020
10210
  if (!value) return;
10021
10211
  navigator.clipboard.writeText(value).then(() => {
@@ -12351,7 +12541,7 @@ function RequestUserInputResultCard({
12351
12541
  }
12352
12542
 
12353
12543
  // src/components/thread/messages/widget.tsx
12354
- import { useEffect as useEffect17, useMemo as useMemo11, useState as useState18 } from "react";
12544
+ import { useEffect as useEffect17, useMemo as useMemo12, useState as useState19 } from "react";
12355
12545
  import {
12356
12546
  A2UIRenderer,
12357
12547
  SurfaceRenderer,
@@ -12394,8 +12584,8 @@ function FlatWidgetSurface({
12394
12584
  surfaceId
12395
12585
  }) {
12396
12586
  const { processMessages } = useA2UI();
12397
- const [renderError, setRenderError] = useState18(false);
12398
- const normalizedMessages = useMemo11(
12587
+ const [renderError, setRenderError] = useState19(false);
12588
+ const normalizedMessages = useMemo12(
12399
12589
  () => normalizeFlatWidgetMessages(messages, surfaceId),
12400
12590
  [messages, surfaceId]
12401
12591
  );
@@ -14378,7 +14568,7 @@ function MessageNavigator({
14378
14568
 
14379
14569
  // src/components/thread/MessageActions.tsx
14380
14570
  import * as React39 from "react";
14381
- import { Check as Check5, Copy as Copy3, RefreshCw as RefreshCw2 } from "lucide-react";
14571
+ import { Check as Check5, Copy as Copy3, RefreshCw as RefreshCw3 } from "lucide-react";
14382
14572
  import { jsx as jsx45, jsxs as jsxs31 } from "react/jsx-runtime";
14383
14573
  function MessageActions({
14384
14574
  content,
@@ -14429,7 +14619,7 @@ function MessageActions({
14429
14619
  onClick: onRetry,
14430
14620
  className: "p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors",
14431
14621
  title: t("messageActions.regenerate"),
14432
- children: /* @__PURE__ */ jsx45(RefreshCw2, { size: 14 })
14622
+ children: /* @__PURE__ */ jsx45(RefreshCw3, { size: 14 })
14433
14623
  }
14434
14624
  )
14435
14625
  ]
@@ -16417,10 +16607,62 @@ function findDomPointForComposerOffset(root, offset) {
16417
16607
  return result ?? { node: lastNode, offset: lastOffset };
16418
16608
  }
16419
16609
 
16420
- // src/components/chat/runtime-capabilities.tsx
16610
+ // src/workbench/WorkbenchShell.tsx
16421
16611
  import * as React51 from "react";
16422
- import { X as X6 } from "lucide-react";
16423
- import { jsx as jsx56, jsxs as jsxs38 } from "react/jsx-runtime";
16612
+ import {
16613
+ ASSISTANT_CHAT_SEND_MESSAGE_COMMAND,
16614
+ ASSISTANT_CONTEXT_SET_COMMAND
16615
+ } from "@xpert-ai/xpert-sdk";
16616
+ import {
16617
+ Loader2 as Loader29,
16618
+ Maximize2,
16619
+ Minimize2,
16620
+ PanelRight,
16621
+ RotateCcw,
16622
+ X as X7
16623
+ } from "lucide-react";
16624
+ import { Fragment as Fragment8, jsx as jsx56, jsxs as jsxs38 } from "react/jsx-runtime";
16625
+ var WorkbenchContext = React51.createContext({
16626
+ enabled: false,
16627
+ open: false,
16628
+ loading: false,
16629
+ available: false,
16630
+ toggle: () => void 0
16631
+ });
16632
+ function useWorkbench() {
16633
+ return React51.useContext(WorkbenchContext);
16634
+ }
16635
+ function WorkbenchToggleButton() {
16636
+ const workbench = useWorkbench();
16637
+ const { t } = useChatkitTranslation();
16638
+ if (!workbench.enabled || workbench.open) return null;
16639
+ const label = t("workbench.open");
16640
+ const tooltip = workbench.disabledReason ?? label;
16641
+ return /* @__PURE__ */ jsxs38(Tooltip, { children: [
16642
+ /* @__PURE__ */ jsx56(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx56("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx56(
16643
+ "button",
16644
+ {
16645
+ type: "button",
16646
+ onClick: workbench.toggle,
16647
+ disabled: !workbench.available,
16648
+ className: cn(
16649
+ "flex h-8 w-8 cursor-pointer items-center justify-center rounded-md",
16650
+ "text-muted-foreground transition-colors duration-150 hover:bg-muted hover:text-foreground",
16651
+ "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50"
16652
+ ),
16653
+ "aria-label": label,
16654
+ "aria-expanded": false,
16655
+ children: workbench.loading ? /* @__PURE__ */ jsx56(Loader29, { size: 16, className: "animate-spin" }) : /* @__PURE__ */ jsx56(PanelRight, { size: 16 })
16656
+ }
16657
+ ) }) }),
16658
+ /* @__PURE__ */ jsx56(TooltipContent, { side: "bottom", children: tooltip })
16659
+ ] });
16660
+ }
16661
+
16662
+ // src/components/chat/runtime-capabilities.tsx
16663
+ import * as React52 from "react";
16664
+ import { X as X8 } from "lucide-react";
16665
+ import { jsx as jsx57, jsxs as jsxs39 } from "react/jsx-runtime";
16424
16666
  function createComposerCapabilityInsertionParts(options) {
16425
16667
  return options.flatMap((option) => [
16426
16668
  createComposerCapabilityPart(option, createMessageId()),
@@ -16493,29 +16735,29 @@ function useRuntimeCapabilitiesState({
16493
16735
  disabled,
16494
16736
  composerParts
16495
16737
  }) {
16496
- const [runtimeCapabilities, setRuntimeCapabilities] = React51.useState(null);
16497
- const [runtimeCapabilitiesReady, setRuntimeCapabilitiesReady] = React51.useState(false);
16498
- const [sessionRuntimeCapabilities, setSessionRuntimeCapabilities] = React51.useState(
16738
+ const [runtimeCapabilities, setRuntimeCapabilities] = React52.useState(null);
16739
+ const [runtimeCapabilitiesReady, setRuntimeCapabilitiesReady] = React52.useState(false);
16740
+ const [sessionRuntimeCapabilities, setSessionRuntimeCapabilities] = React52.useState(
16499
16741
  () => createEmptyRuntimeCapabilitiesSelection()
16500
16742
  );
16501
- const [runRuntimeCapabilities, setRunRuntimeCapabilities] = React51.useState(
16743
+ const [runRuntimeCapabilities, setRunRuntimeCapabilities] = React52.useState(
16502
16744
  () => createEmptyRuntimeCapabilitiesSelection()
16503
16745
  );
16504
- const [runtimeCapabilityPalette, setRuntimeCapabilityPalette] = React51.useState(null);
16505
- const runtimeCapabilityPreferenceLoadRef = React51.useRef(0);
16506
- const pendingExternalRuntimeCapabilitiesRef = React51.useRef(null);
16507
- const runtimeCapabilityOptions = React51.useMemo(
16746
+ const [runtimeCapabilityPalette, setRuntimeCapabilityPalette] = React52.useState(null);
16747
+ const runtimeCapabilityPreferenceLoadRef = React52.useRef(0);
16748
+ const pendingExternalRuntimeCapabilitiesRef = React52.useRef(null);
16749
+ const runtimeCapabilityOptions = React52.useMemo(
16508
16750
  () => getRuntimeCapabilityOptions(runtimeCapabilities),
16509
16751
  [runtimeCapabilities]
16510
16752
  );
16511
- const effectiveSessionRuntimeCapabilities = React51.useMemo(
16753
+ const effectiveSessionRuntimeCapabilities = React52.useMemo(
16512
16754
  () => runtimeCapabilitiesReady && runtimeCapabilities ? mergeRuntimeCapabilitiesSelections(
16513
16755
  runtimeCapabilities,
16514
16756
  sessionRuntimeCapabilities
16515
16757
  ) : null,
16516
16758
  [runtimeCapabilities, runtimeCapabilitiesReady, sessionRuntimeCapabilities]
16517
16759
  );
16518
- const runRuntimeCapabilityOptions = React51.useMemo(
16760
+ const runRuntimeCapabilityOptions = React52.useMemo(
16519
16761
  () => runtimeCapabilityOptions.filter(
16520
16762
  (option) => isRuntimeCapabilitySelected(
16521
16763
  runRuntimeCapabilities,
@@ -16525,11 +16767,11 @@ function useRuntimeCapabilitiesState({
16525
16767
  ),
16526
16768
  [runRuntimeCapabilities, runtimeCapabilityOptions]
16527
16769
  );
16528
- const composerRuntimeCapabilitySelectionKeys = React51.useMemo(
16770
+ const composerRuntimeCapabilitySelectionKeys = React52.useMemo(
16529
16771
  () => getComposerCapabilitySelectionKeys(composerParts),
16530
16772
  [composerParts]
16531
16773
  );
16532
- const detachedRunRuntimeCapabilityOptions = React51.useMemo(
16774
+ const detachedRunRuntimeCapabilityOptions = React52.useMemo(
16533
16775
  () => runRuntimeCapabilityOptions.filter(
16534
16776
  (option) => !composerRuntimeCapabilitySelectionKeys.has(
16535
16777
  getRuntimeCapabilityOptionKey(option)
@@ -16537,7 +16779,7 @@ function useRuntimeCapabilitiesState({
16537
16779
  ),
16538
16780
  [composerRuntimeCapabilitySelectionKeys, runRuntimeCapabilityOptions]
16539
16781
  );
16540
- const persistSessionRuntimeCapabilities = React51.useCallback(
16782
+ const persistSessionRuntimeCapabilities = React52.useCallback(
16541
16783
  async (nextThreadId, selection) => {
16542
16784
  if (!runtimeCapabilities || !selection || !client) {
16543
16785
  return;
@@ -16562,7 +16804,7 @@ function useRuntimeCapabilitiesState({
16562
16804
  },
16563
16805
  [client, runtimeCapabilities]
16564
16806
  );
16565
- const applyExternalRuntimeCapabilities = React51.useCallback(
16807
+ const applyExternalRuntimeCapabilities = React52.useCallback(
16566
16808
  (selection) => {
16567
16809
  pendingExternalRuntimeCapabilitiesRef.current = selection;
16568
16810
  setRunRuntimeCapabilities(() => {
@@ -16583,7 +16825,7 @@ function useRuntimeCapabilitiesState({
16583
16825
  },
16584
16826
  [runtimeCapabilities]
16585
16827
  );
16586
- const handleSessionRuntimeCapabilityToggle = React51.useCallback(
16828
+ const handleSessionRuntimeCapabilityToggle = React52.useCallback(
16587
16829
  (type, id, selected) => {
16588
16830
  setSessionRuntimeCapabilities((previous) => {
16589
16831
  const nextSelection = toggleRuntimeCapabilitySelection(
@@ -16604,7 +16846,7 @@ function useRuntimeCapabilitiesState({
16604
16846
  },
16605
16847
  [persistSessionRuntimeCapabilities, threadId]
16606
16848
  );
16607
- const addRunRuntimeCapabilities = React51.useCallback(
16849
+ const addRunRuntimeCapabilities = React52.useCallback(
16608
16850
  (selection) => {
16609
16851
  setRunRuntimeCapabilities(
16610
16852
  (previous) => runtimeCapabilities ? mergeRuntimeCapabilitiesSelections(
@@ -16616,13 +16858,13 @@ function useRuntimeCapabilitiesState({
16616
16858
  },
16617
16859
  [runtimeCapabilities]
16618
16860
  );
16619
- const resetRunRuntimeCapabilities = React51.useCallback(() => {
16861
+ const resetRunRuntimeCapabilities = React52.useCallback(() => {
16620
16862
  setRunRuntimeCapabilities(
16621
16863
  createEmptyRuntimeCapabilitiesSelection(runtimeCapabilities)
16622
16864
  );
16623
16865
  setRuntimeCapabilityPalette(null);
16624
16866
  }, [runtimeCapabilities]);
16625
- const getRuntimeCapabilitiesForSubmit = React51.useCallback(
16867
+ const getRuntimeCapabilitiesForSubmit = React52.useCallback(
16626
16868
  (recommended) => {
16627
16869
  const recommendedRuntimeCapabilitiesForSubmit = recommended && runtimeCapabilities && runtimeCapabilitiesReady ? mergeRuntimeCapabilitiesSelections(
16628
16870
  runtimeCapabilities,
@@ -16653,7 +16895,7 @@ function useRuntimeCapabilitiesState({
16653
16895
  runtimeCapabilityOptions
16654
16896
  ]
16655
16897
  );
16656
- const getRuntimeCapabilitiesForCommand = React51.useCallback(
16898
+ const getRuntimeCapabilitiesForCommand = React52.useCallback(
16657
16899
  (recommended) => runtimeCapabilities && runtimeCapabilitiesReady ? createRuntimeCapabilitiesForSubmit({
16658
16900
  capabilities: runtimeCapabilities,
16659
16901
  available: effectiveSessionRuntimeCapabilities,
@@ -16665,7 +16907,7 @@ function useRuntimeCapabilitiesState({
16665
16907
  runtimeCapabilitiesReady
16666
16908
  ]
16667
16909
  );
16668
- React51.useEffect(() => {
16910
+ React52.useEffect(() => {
16669
16911
  if (disabled || !client || !assistantId) {
16670
16912
  pendingExternalRuntimeCapabilitiesRef.current = null;
16671
16913
  setRuntimeCapabilities(null);
@@ -16713,7 +16955,7 @@ function useRuntimeCapabilitiesState({
16713
16955
  });
16714
16956
  return () => controller.abort();
16715
16957
  }, [assistantId, client, disabled]);
16716
- React51.useEffect(() => {
16958
+ React52.useEffect(() => {
16717
16959
  const emptyRunSelection = createEmptyRuntimeCapabilitiesSelection(runtimeCapabilities);
16718
16960
  const pendingExternalSelection = pendingExternalRuntimeCapabilitiesRef.current;
16719
16961
  if (pendingExternalSelection && runtimeCapabilities) {
@@ -16805,8 +17047,8 @@ function useRuntimeCapabilityComposerActions({
16805
17047
  commitComposerParts,
16806
17048
  focusComposerAt
16807
17049
  }) {
16808
- const pendingExternalRuntimeCapabilityInsertRef = React51.useRef(null);
16809
- const insertExternalRuntimeCapabilities = React51.useCallback(
17050
+ const pendingExternalRuntimeCapabilityInsertRef = React52.useRef(null);
17051
+ const insertExternalRuntimeCapabilities = React52.useCallback(
16810
17052
  (selection, options) => {
16811
17053
  applyExternalRuntimeCapabilities(selection);
16812
17054
  if (!selection) {
@@ -16861,7 +17103,7 @@ function useRuntimeCapabilityComposerActions({
16861
17103
  setRuntimeCapabilityPalette
16862
17104
  ]
16863
17105
  );
16864
- const applyComposerValueRuntimeCapabilities = React51.useCallback(
17106
+ const applyComposerValueRuntimeCapabilities = React52.useCallback(
16865
17107
  (payload, options) => {
16866
17108
  const runtimeCapabilitiesPayload = isRuntimeCapabilitiesSelection(
16867
17109
  payload.runtimeCapabilities
@@ -16877,7 +17119,7 @@ function useRuntimeCapabilityComposerActions({
16877
17119
  },
16878
17120
  [applyExternalRuntimeCapabilities, insertExternalRuntimeCapabilities]
16879
17121
  );
16880
- const updateRuntimeCapabilityPalette = React51.useCallback(
17122
+ const updateRuntimeCapabilityPalette = React52.useCallback(
16881
17123
  (parts, selectionStart) => {
16882
17124
  const input = composerInputRef.current;
16883
17125
  const editingText = getComposerEditingText(parts);
@@ -16889,7 +17131,7 @@ function useRuntimeCapabilityComposerActions({
16889
17131
  },
16890
17132
  [composerInputRef, setRuntimeCapabilityPalette]
16891
17133
  );
16892
- const removeRunRuntimeCapability = React51.useCallback(
17134
+ const removeRunRuntimeCapability = React52.useCallback(
16893
17135
  (option) => {
16894
17136
  setRunRuntimeCapabilities(
16895
17137
  (previous) => toggleRuntimeCapabilitySelection(
@@ -16909,7 +17151,7 @@ function useRuntimeCapabilityComposerActions({
16909
17151
  },
16910
17152
  [commitComposerParts, composerPartsRef, setRunRuntimeCapabilities]
16911
17153
  );
16912
- const insertComposerCapabilityToken = React51.useCallback(
17154
+ const insertComposerCapabilityToken = React52.useCallback(
16913
17155
  (capability, range) => {
16914
17156
  const replacementParts = createComposerCapabilityInsertionParts([
16915
17157
  capability
@@ -16950,7 +17192,7 @@ function useRuntimeCapabilityComposerActions({
16950
17192
  setRuntimeCapabilityPalette
16951
17193
  ]
16952
17194
  );
16953
- React51.useEffect(() => {
17195
+ React52.useEffect(() => {
16954
17196
  if (!runtimeCapabilitiesReady || !runtimeCapabilities) {
16955
17197
  return;
16956
17198
  }
@@ -16980,16 +17222,16 @@ function HumanRuntimeCapabilityChips({
16980
17222
  if (options.length === 0) {
16981
17223
  return null;
16982
17224
  }
16983
- return /* @__PURE__ */ jsx56("div", { className: "mb-2 flex flex-wrap gap-1.5", children: options.map((option) => {
17225
+ return /* @__PURE__ */ jsx57("div", { className: "mb-2 flex flex-wrap gap-1.5", children: options.map((option) => {
16984
17226
  const color = option.type === "skill" ? void 0 : getRuntimeCapabilityColor(option);
16985
- return /* @__PURE__ */ jsxs38(
17227
+ return /* @__PURE__ */ jsxs39(
16986
17228
  "span",
16987
17229
  {
16988
17230
  className: "inline-flex max-w-full items-center gap-1 rounded-md bg-primary-foreground/20 px-2 py-1 text-xs font-medium text-primary-foreground",
16989
17231
  style: color ? { color } : void 0,
16990
17232
  children: [
16991
- /* @__PURE__ */ jsx56(RuntimeCapabilityIcon, { option, variant: "chip" }),
16992
- /* @__PURE__ */ jsx56("span", { className: "max-w-[9rem] truncate", children: option.label })
17233
+ /* @__PURE__ */ jsx57(RuntimeCapabilityIcon, { option, variant: "chip" }),
17234
+ /* @__PURE__ */ jsx57("span", { className: "max-w-[9rem] truncate", children: option.label })
16993
17235
  ]
16994
17236
  },
16995
17237
  `${option.type}:${option.id}`
@@ -17005,19 +17247,19 @@ function DetachedRunRuntimeCapabilities({
17005
17247
  if (options.length === 0) {
17006
17248
  return null;
17007
17249
  }
17008
- return /* @__PURE__ */ jsxs38("div", { className: "mb-2 flex flex-wrap items-center gap-2", children: [
17009
- /* @__PURE__ */ jsx56("span", { className: "text-xs text-muted-foreground", children: runOnlyLabel }),
17250
+ return /* @__PURE__ */ jsxs39("div", { className: "mb-2 flex flex-wrap items-center gap-2", children: [
17251
+ /* @__PURE__ */ jsx57("span", { className: "text-xs text-muted-foreground", children: runOnlyLabel }),
17010
17252
  options.map((option) => {
17011
17253
  const color = getRuntimeCapabilityColor(option);
17012
- return /* @__PURE__ */ jsxs38(
17254
+ return /* @__PURE__ */ jsxs39(
17013
17255
  "span",
17014
17256
  {
17015
17257
  className: "inline-flex max-w-full items-center gap-1 rounded-full bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary",
17016
17258
  style: color ? { color } : void 0,
17017
17259
  children: [
17018
- /* @__PURE__ */ jsx56(RuntimeCapabilityIcon, { option, variant: "chip" }),
17019
- /* @__PURE__ */ jsx56("span", { className: "max-w-40 truncate", children: option.label }),
17020
- /* @__PURE__ */ jsx56(
17260
+ /* @__PURE__ */ jsx57(RuntimeCapabilityIcon, { option, variant: "chip" }),
17261
+ /* @__PURE__ */ jsx57("span", { className: "max-w-40 truncate", children: option.label }),
17262
+ /* @__PURE__ */ jsx57(
17021
17263
  "button",
17022
17264
  {
17023
17265
  type: "button",
@@ -17025,7 +17267,7 @@ function DetachedRunRuntimeCapabilities({
17025
17267
  className: "rounded-full p-0.5 hover:bg-primary/15",
17026
17268
  title: removeLabel,
17027
17269
  "aria-label": removeLabel,
17028
- children: /* @__PURE__ */ jsx56(X6, { size: 11 })
17270
+ children: /* @__PURE__ */ jsx57(X8, { size: 11 })
17029
17271
  }
17030
17272
  )
17031
17273
  ]
@@ -17039,7 +17281,7 @@ function ComposerCapabilityToken({
17039
17281
  part
17040
17282
  }) {
17041
17283
  const color = getRuntimeCapabilityColor(part.capability);
17042
- return /* @__PURE__ */ jsxs38(
17284
+ return /* @__PURE__ */ jsxs39(
17043
17285
  "span",
17044
17286
  {
17045
17287
  "data-composer-capability-key": part.key,
@@ -17049,8 +17291,8 @@ function ComposerCapabilityToken({
17049
17291
  className: "mx-0.5 inline-flex max-w-[14rem] select-none items-center gap-1 text-sm font-semibold text-primary align-baseline",
17050
17292
  style: color ? { color } : void 0,
17051
17293
  children: [
17052
- /* @__PURE__ */ jsx56(RuntimeCapabilityIcon, { option: part.capability, variant: "chip" }),
17053
- /* @__PURE__ */ jsx56("span", { className: "truncate", children: part.capability.label })
17294
+ /* @__PURE__ */ jsx57(RuntimeCapabilityIcon, { option: part.capability, variant: "chip" }),
17295
+ /* @__PURE__ */ jsx57("span", { className: "truncate", children: part.capability.label })
17054
17296
  ]
17055
17297
  },
17056
17298
  part.key
@@ -17310,30 +17552,30 @@ function buildMessageNavigationItems(messages, options) {
17310
17552
  }
17311
17553
 
17312
17554
  // src/hooks/useTaskSummary.ts
17313
- import * as React52 from "react";
17555
+ import * as React53 from "react";
17314
17556
  function useTaskSummary({
17315
17557
  enabled,
17316
17558
  conversationId,
17317
17559
  client,
17318
17560
  live
17319
17561
  }) {
17320
- const [loaded, setLoaded] = React52.useState(null);
17321
- const [historySections, setHistorySections] = React52.useState({});
17322
- const [historySectionsConversationId, setHistorySectionsConversationId] = React52.useState(null);
17323
- const [loadingSections, setLoadingSections] = React52.useState({});
17324
- const [error, setError] = React52.useState(null);
17325
- const [retryVersion, setRetryVersion] = React52.useState(0);
17326
- const requestVersionRef = React52.useRef(0);
17327
- const conversationIdRef = React52.useRef(conversationId);
17328
- const sectionControllersRef = React52.useRef(
17562
+ const [loaded, setLoaded] = React53.useState(null);
17563
+ const [historySections, setHistorySections] = React53.useState({});
17564
+ const [historySectionsConversationId, setHistorySectionsConversationId] = React53.useState(null);
17565
+ const [loadingSections, setLoadingSections] = React53.useState({});
17566
+ const [error, setError] = React53.useState(null);
17567
+ const [retryVersion, setRetryVersion] = React53.useState(0);
17568
+ const requestVersionRef = React53.useRef(0);
17569
+ const conversationIdRef = React53.useRef(conversationId);
17570
+ const sectionControllersRef = React53.useRef(
17329
17571
  /* @__PURE__ */ new Map()
17330
17572
  );
17331
17573
  conversationIdRef.current = conversationId;
17332
- const abortSectionRequests = React52.useCallback(() => {
17574
+ const abortSectionRequests = React53.useCallback(() => {
17333
17575
  sectionControllersRef.current.forEach((controller) => controller.abort());
17334
17576
  sectionControllersRef.current.clear();
17335
17577
  }, []);
17336
- React52.useEffect(() => {
17578
+ React53.useEffect(() => {
17337
17579
  abortSectionRequests();
17338
17580
  setHistorySections({});
17339
17581
  setHistorySectionsConversationId(conversationId);
@@ -17362,11 +17604,11 @@ function useTaskSummary({
17362
17604
  };
17363
17605
  }, [abortSectionRequests, client, conversationId, enabled, retryVersion]);
17364
17606
  const snapshot = loaded?.conversationId === conversationId ? loaded.snapshot : null;
17365
- const activeHistorySections = React52.useMemo(
17607
+ const activeHistorySections = React53.useMemo(
17366
17608
  () => historySectionsConversationId === conversationId ? historySections : {},
17367
17609
  [conversationId, historySections, historySectionsConversationId]
17368
17610
  );
17369
- const loadSection = React52.useCallback(
17611
+ const loadSection = React53.useCallback(
17370
17612
  async (section) => {
17371
17613
  if (!enabled || !conversationId || loadingSections[section]) {
17372
17614
  return;
@@ -17426,7 +17668,7 @@ function useTaskSummary({
17426
17668
  }
17427
17669
 
17428
17670
  // src/components/task-summary/TaskSummary.tsx
17429
- import * as React53 from "react";
17671
+ import * as React54 from "react";
17430
17672
  import {
17431
17673
  Bot as Bot4,
17432
17674
  BookOpen as BookOpen3,
@@ -17435,12 +17677,12 @@ import {
17435
17677
  ExternalLink,
17436
17678
  FileOutput,
17437
17679
  ListChecks as ListChecks3,
17438
- Loader2 as Loader29,
17680
+ Loader2 as Loader210,
17439
17681
  PlayCircle,
17440
- RotateCcw,
17682
+ RotateCcw as RotateCcw2,
17441
17683
  Target as Target2
17442
17684
  } from "lucide-react";
17443
- import { jsx as jsx57, jsxs as jsxs39 } from "react/jsx-runtime";
17685
+ import { jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
17444
17686
  var PREVIEW_SIZE = 3;
17445
17687
  function TaskSummaryTrigger({
17446
17688
  displayMode = "popover",
@@ -17449,9 +17691,9 @@ function TaskSummaryTrigger({
17449
17691
  ...props
17450
17692
  }) {
17451
17693
  const { t } = useChatkitTranslation();
17452
- const [uncontrolledOpen, setUncontrolledOpen] = React53.useState(false);
17694
+ const [uncontrolledOpen, setUncontrolledOpen] = React54.useState(false);
17453
17695
  const open = controlledOpen ?? uncontrolledOpen;
17454
- const setOpen = React53.useCallback(
17696
+ const setOpen = React54.useCallback(
17455
17697
  (nextOpen) => {
17456
17698
  if (controlledOpen === void 0) {
17457
17699
  setUncontrolledOpen(nextOpen);
@@ -17460,7 +17702,7 @@ function TaskSummaryTrigger({
17460
17702
  },
17461
17703
  [controlledOpen, onOpenChange]
17462
17704
  );
17463
- const triggerButton = /* @__PURE__ */ jsx57(
17705
+ const triggerButton = /* @__PURE__ */ jsx58(
17464
17706
  "button",
17465
17707
  {
17466
17708
  type: "button",
@@ -17468,28 +17710,28 @@ function TaskSummaryTrigger({
17468
17710
  "aria-label": t("taskSummary.open"),
17469
17711
  "aria-expanded": open,
17470
17712
  onClick: displayMode === "docked" ? () => setOpen(!open) : void 0,
17471
- children: /* @__PURE__ */ jsx57(ListChecks3, { size: 16 })
17713
+ children: /* @__PURE__ */ jsx58(ListChecks3, { size: 16 })
17472
17714
  }
17473
17715
  );
17474
17716
  if (displayMode === "docked") {
17475
- return /* @__PURE__ */ jsxs39(Tooltip, { children: [
17476
- /* @__PURE__ */ jsx57(TooltipTrigger, { asChild: true, children: triggerButton }),
17477
- /* @__PURE__ */ jsx57(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
17717
+ return /* @__PURE__ */ jsxs40(Tooltip, { children: [
17718
+ /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: triggerButton }),
17719
+ /* @__PURE__ */ jsx58(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
17478
17720
  ] });
17479
17721
  }
17480
- return /* @__PURE__ */ jsxs39(Popover, { open, onOpenChange: setOpen, children: [
17481
- /* @__PURE__ */ jsxs39(Tooltip, { children: [
17482
- /* @__PURE__ */ jsx57(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx57(PopoverTrigger, { asChild: true, children: triggerButton }) }),
17483
- /* @__PURE__ */ jsx57(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
17722
+ return /* @__PURE__ */ jsxs40(Popover, { open, onOpenChange: setOpen, children: [
17723
+ /* @__PURE__ */ jsxs40(Tooltip, { children: [
17724
+ /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58(PopoverTrigger, { asChild: true, children: triggerButton }) }),
17725
+ /* @__PURE__ */ jsx58(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
17484
17726
  ] }),
17485
- /* @__PURE__ */ jsx57(
17727
+ /* @__PURE__ */ jsx58(
17486
17728
  PopoverContent,
17487
17729
  {
17488
17730
  align: "end",
17489
17731
  sideOffset: 8,
17490
17732
  className: "w-[min(20rem,calc(100vw-2rem))] max-h-[min(44rem,calc(100vh-5rem))] overflow-y-auto rounded-2xl border-border/70 bg-popover p-0 shadow-lg",
17491
17733
  "aria-label": t("taskSummary.title"),
17492
- children: /* @__PURE__ */ jsx57(TaskSummaryContent, { ...props })
17734
+ children: /* @__PURE__ */ jsx58(TaskSummaryContent, { ...props })
17493
17735
  }
17494
17736
  )
17495
17737
  ] });
@@ -17499,7 +17741,7 @@ function TaskSummaryPanel({
17499
17741
  ...props
17500
17742
  }) {
17501
17743
  const { t } = useChatkitTranslation();
17502
- return /* @__PURE__ */ jsx57(
17744
+ return /* @__PURE__ */ jsx58(
17503
17745
  "aside",
17504
17746
  {
17505
17747
  "data-slot": "task-summary-panel",
@@ -17508,7 +17750,7 @@ function TaskSummaryPanel({
17508
17750
  "h-fit max-h-full overflow-y-auto rounded-2xl border border-border/70 bg-popover text-popover-foreground shadow-lg",
17509
17751
  className
17510
17752
  ),
17511
- children: /* @__PURE__ */ jsx57(TaskSummaryContent, { ...props })
17753
+ children: /* @__PURE__ */ jsx58(TaskSummaryContent, { ...props })
17512
17754
  }
17513
17755
  );
17514
17756
  }
@@ -17524,7 +17766,7 @@ function TaskSummaryContent({
17524
17766
  onOpenResource
17525
17767
  }) {
17526
17768
  const { t } = useChatkitTranslation();
17527
- const [expanded, setExpanded] = React53.useState({});
17769
+ const [expanded, setExpanded] = React54.useState({});
17528
17770
  const hasTask = Boolean(
17529
17771
  summary.goal || summary.plan || summary.todos?.items.length
17530
17772
  );
@@ -17556,7 +17798,7 @@ function TaskSummaryContent({
17556
17798
  if (total2 <= PREVIEW_SIZE && !expanded[section]) return null;
17557
17799
  const loading = loadingSections[section];
17558
17800
  const canLoadMore = Boolean(expanded[section]) && loadedSectionCounts[section] < total2;
17559
- return /* @__PURE__ */ jsxs39(
17801
+ return /* @__PURE__ */ jsxs40(
17560
17802
  "button",
17561
17803
  {
17562
17804
  type: "button",
@@ -17564,41 +17806,41 @@ function TaskSummaryContent({
17564
17806
  disabled: loading,
17565
17807
  onClick: () => canLoadMore ? void onLoadSection(section) : toggleSection(section),
17566
17808
  children: [
17567
- loading && /* @__PURE__ */ jsx57(Loader29, { className: "size-3 animate-spin" }),
17568
- !loading && /* @__PURE__ */ jsx57(ListChecks3, { className: "size-3.5" }),
17809
+ loading && /* @__PURE__ */ jsx58(Loader210, { className: "size-3 animate-spin" }),
17810
+ !loading && /* @__PURE__ */ jsx58(ListChecks3, { className: "size-3.5" }),
17569
17811
  canLoadMore ? t("taskSummary.loadMore") : expanded[section] ? t("taskSummary.collapse") : t("taskSummary.viewAll", { count: total2 })
17570
17812
  ]
17571
17813
  }
17572
17814
  );
17573
17815
  };
17574
- return /* @__PURE__ */ jsxs39("div", { className: "divide-y divide-border/70", children: [
17575
- Boolean(historyError) && /* @__PURE__ */ jsxs39("div", { className: "m-3 flex items-start justify-between gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs text-destructive", children: [
17576
- /* @__PURE__ */ jsx57("span", { children: t("taskSummary.historyError") }),
17577
- /* @__PURE__ */ jsxs39(
17816
+ return /* @__PURE__ */ jsxs40("div", { className: "divide-y divide-border/70", children: [
17817
+ Boolean(historyError) && /* @__PURE__ */ jsxs40("div", { className: "m-3 flex items-start justify-between gap-3 rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs text-destructive", children: [
17818
+ /* @__PURE__ */ jsx58("span", { children: t("taskSummary.historyError") }),
17819
+ /* @__PURE__ */ jsxs40(
17578
17820
  "button",
17579
17821
  {
17580
17822
  type: "button",
17581
17823
  className: "inline-flex shrink-0 items-center gap-1 font-medium hover:underline",
17582
17824
  onClick: onRetryHistory,
17583
17825
  children: [
17584
- /* @__PURE__ */ jsx57(RotateCcw, { className: "size-3" }),
17826
+ /* @__PURE__ */ jsx58(RotateCcw2, { className: "size-3" }),
17585
17827
  t("taskSummary.retry")
17586
17828
  ]
17587
17829
  }
17588
17830
  )
17589
17831
  ] }),
17590
- /* @__PURE__ */ jsxs39(
17832
+ /* @__PURE__ */ jsxs40(
17591
17833
  SummarySection,
17592
17834
  {
17593
17835
  title: t("taskSummary.sections.outputs"),
17594
17836
  children: [
17595
- summary.outputs.length === 0 ? /* @__PURE__ */ jsx57(SummaryPrompt, { onClick: onFocusComposer, children: t("taskSummary.createOutput") }) : sectionItems("outputs", summary.outputs).map((item) => /* @__PURE__ */ jsx57(
17837
+ summary.outputs.length === 0 ? /* @__PURE__ */ jsx58(SummaryPrompt, { onClick: onFocusComposer, children: t("taskSummary.createOutput") }) : sectionItems("outputs", summary.outputs).map((item) => /* @__PURE__ */ jsx58(
17596
17838
  SummaryButton,
17597
17839
  {
17598
17840
  title: item.title,
17599
17841
  description: item.description ?? item.status,
17600
- leading: /* @__PURE__ */ jsx57(FileOutput, { className: "size-4" }),
17601
- trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx57(ExternalLink, { className: "size-3.5" }) : void 0,
17842
+ leading: /* @__PURE__ */ jsx58(FileOutput, { className: "size-4" }),
17843
+ trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx58(ExternalLink, { className: "size-3.5" }) : void 0,
17602
17844
  onClick: () => openSummaryItem(item.resource, item.messageId, item.title)
17603
17845
  },
17604
17846
  item.id
@@ -17607,18 +17849,18 @@ function TaskSummaryContent({
17607
17849
  ]
17608
17850
  }
17609
17851
  ),
17610
- /* @__PURE__ */ jsxs39(
17852
+ /* @__PURE__ */ jsxs40(
17611
17853
  SummarySection,
17612
17854
  {
17613
17855
  title: t("taskSummary.sections.sources"),
17614
17856
  children: [
17615
- sectionItems("sources", summary.sources).map((item) => /* @__PURE__ */ jsx57(
17857
+ sectionItems("sources", summary.sources).map((item) => /* @__PURE__ */ jsx58(
17616
17858
  SummaryButton,
17617
17859
  {
17618
17860
  title: item.title,
17619
17861
  description: item.description,
17620
- leading: /* @__PURE__ */ jsx57(BookOpen3, { className: "size-4" }),
17621
- trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx57(ExternalLink, { className: "size-3.5" }) : void 0,
17862
+ leading: /* @__PURE__ */ jsx58(BookOpen3, { className: "size-4" }),
17863
+ trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx58(ExternalLink, { className: "size-3.5" }) : void 0,
17622
17864
  onClick: () => openSummaryItem(item.resource, item.messageId, item.title)
17623
17865
  },
17624
17866
  item.id
@@ -17627,67 +17869,67 @@ function TaskSummaryContent({
17627
17869
  ]
17628
17870
  }
17629
17871
  ),
17630
- hasTask && /* @__PURE__ */ jsxs39(SummarySection, { title: t("taskSummary.sections.task"), children: [
17631
- summary.goal && /* @__PURE__ */ jsx57(
17872
+ hasTask && /* @__PURE__ */ jsxs40(SummarySection, { title: t("taskSummary.sections.task"), children: [
17873
+ summary.goal && /* @__PURE__ */ jsx58(
17632
17874
  SummaryButton,
17633
17875
  {
17634
17876
  title: summary.goal.objective,
17635
17877
  description: summary.goal.status,
17636
- leading: /* @__PURE__ */ jsx57(Target2, { className: "size-4" }),
17878
+ leading: /* @__PURE__ */ jsx58(Target2, { className: "size-4" }),
17637
17879
  onClick: onFocusComposer
17638
17880
  }
17639
17881
  ),
17640
- summary.plan && /* @__PURE__ */ jsx57(
17882
+ summary.plan && /* @__PURE__ */ jsx58(
17641
17883
  SummaryButton,
17642
17884
  {
17643
17885
  title: summary.plan.title,
17644
17886
  description: summary.plan.excerpt,
17645
- leading: /* @__PURE__ */ jsx57(ListChecks3, { className: "size-4" }),
17887
+ leading: /* @__PURE__ */ jsx58(ListChecks3, { className: "size-4" }),
17646
17888
  onClick: () => summary.plan?.messageId ? onNavigateMessage(summary.plan.messageId) : onFocusComposer()
17647
17889
  }
17648
17890
  ),
17649
- (summary.todos?.items ?? []).slice(0, PREVIEW_SIZE).map((todo) => /* @__PURE__ */ jsx57(
17891
+ (summary.todos?.items ?? []).slice(0, PREVIEW_SIZE).map((todo) => /* @__PURE__ */ jsx58(
17650
17892
  SummaryButton,
17651
17893
  {
17652
17894
  title: todo.content,
17653
17895
  description: t(`taskSummary.status.${todo.status}`),
17654
- leading: todo.status === "completed" ? /* @__PURE__ */ jsx57(CheckCircle25, { className: "size-4 text-muted-foreground" }) : /* @__PURE__ */ jsx57(CircleEllipsis, { className: "size-4 text-muted-foreground" }),
17896
+ leading: todo.status === "completed" ? /* @__PURE__ */ jsx58(CheckCircle25, { className: "size-4 text-muted-foreground" }) : /* @__PURE__ */ jsx58(CircleEllipsis, { className: "size-4 text-muted-foreground" }),
17655
17897
  onClick: () => summary.todos?.messageId ? onNavigateMessage(summary.todos.messageId) : onFocusComposer()
17656
17898
  },
17657
17899
  todo.id
17658
17900
  ))
17659
17901
  ] }),
17660
- summary.running.length > 0 && /* @__PURE__ */ jsx57(SummarySection, { title: t("taskSummary.sections.running"), children: summary.running.slice(0, PREVIEW_SIZE).map((item) => /* @__PURE__ */ jsx57(
17902
+ summary.running.length > 0 && /* @__PURE__ */ jsx58(SummarySection, { title: t("taskSummary.sections.running"), children: summary.running.slice(0, PREVIEW_SIZE).map((item) => /* @__PURE__ */ jsx58(
17661
17903
  SummaryButton,
17662
17904
  {
17663
17905
  title: item.title,
17664
17906
  description: item.description ?? item.status,
17665
- leading: /* @__PURE__ */ jsx57(PlayCircle, { className: "size-4" }),
17666
- trailing: item.resource ? /* @__PURE__ */ jsx57(ExternalLink, { className: "size-3.5" }) : void 0,
17907
+ leading: /* @__PURE__ */ jsx58(PlayCircle, { className: "size-4" }),
17908
+ trailing: item.resource ? /* @__PURE__ */ jsx58(ExternalLink, { className: "size-3.5" }) : void 0,
17667
17909
  onClick: () => item.resource && onOpenResource(item.resource, void 0, item.title)
17668
17910
  },
17669
17911
  item.id
17670
17912
  )) }),
17671
- summary.agents.length > 0 && /* @__PURE__ */ jsxs39(SummarySection, { title: t("taskSummary.sections.agents"), children: [
17672
- sectionItems("agents", summary.agents).map((item) => /* @__PURE__ */ jsx57(
17913
+ summary.agents.length > 0 && /* @__PURE__ */ jsxs40(SummarySection, { title: t("taskSummary.sections.agents"), children: [
17914
+ sectionItems("agents", summary.agents).map((item) => /* @__PURE__ */ jsx58(
17673
17915
  SummaryButton,
17674
17916
  {
17675
17917
  title: item.title,
17676
17918
  description: [item.status, formatElapsed(item.elapsedTime)].filter(Boolean).join(" \xB7 "),
17677
- leading: /* @__PURE__ */ jsx57(Bot4, { className: "size-4" }),
17919
+ leading: /* @__PURE__ */ jsx58(Bot4, { className: "size-4" }),
17678
17920
  onClick: () => item.messageId ? onNavigateMessage(item.messageId) : onFocusComposer()
17679
17921
  },
17680
17922
  item.id
17681
17923
  )),
17682
17924
  sectionAction("agents", summary.totals.agents)
17683
17925
  ] }),
17684
- summary.pending.length > 0 && /* @__PURE__ */ jsxs39(SummarySection, { title: t("taskSummary.sections.pending"), children: [
17685
- sectionItems("pending", summary.pending).map((item) => /* @__PURE__ */ jsx57(
17926
+ summary.pending.length > 0 && /* @__PURE__ */ jsxs40(SummarySection, { title: t("taskSummary.sections.pending"), children: [
17927
+ sectionItems("pending", summary.pending).map((item) => /* @__PURE__ */ jsx58(
17686
17928
  SummaryButton,
17687
17929
  {
17688
17930
  title: item.title,
17689
17931
  description: item.description,
17690
- leading: /* @__PURE__ */ jsx57(CircleEllipsis, { className: "size-4" }),
17932
+ leading: /* @__PURE__ */ jsx58(CircleEllipsis, { className: "size-4" }),
17691
17933
  onClick: () => item.messageId ? onNavigateMessage(item.messageId) : onFocusComposer()
17692
17934
  },
17693
17935
  item.id
@@ -17700,16 +17942,16 @@ function SummarySection({
17700
17942
  title,
17701
17943
  children
17702
17944
  }) {
17703
- return /* @__PURE__ */ jsxs39("section", { "aria-label": title, className: "px-4 py-3", children: [
17704
- /* @__PURE__ */ jsx57("div", { className: "flex min-h-7 items-center justify-between gap-3", children: /* @__PURE__ */ jsx57("h3", { className: "text-sm font-medium text-muted-foreground", children: title }) }),
17705
- /* @__PURE__ */ jsx57("div", { className: "mt-1 space-y-0.5", children })
17945
+ return /* @__PURE__ */ jsxs40("section", { "aria-label": title, className: "px-4 py-3", children: [
17946
+ /* @__PURE__ */ jsx58("div", { className: "flex min-h-7 items-center justify-between gap-3", children: /* @__PURE__ */ jsx58("h3", { className: "text-sm font-medium text-muted-foreground", children: title }) }),
17947
+ /* @__PURE__ */ jsx58("div", { className: "mt-1 space-y-0.5", children })
17706
17948
  ] });
17707
17949
  }
17708
17950
  function SummaryPrompt({
17709
17951
  children,
17710
17952
  onClick
17711
17953
  }) {
17712
- return /* @__PURE__ */ jsx57(
17954
+ return /* @__PURE__ */ jsx58(
17713
17955
  "button",
17714
17956
  {
17715
17957
  type: "button",
@@ -17726,7 +17968,7 @@ function SummaryButton({
17726
17968
  trailing,
17727
17969
  onClick
17728
17970
  }) {
17729
- return /* @__PURE__ */ jsxs39(
17971
+ return /* @__PURE__ */ jsxs40(
17730
17972
  "button",
17731
17973
  {
17732
17974
  type: "button",
@@ -17738,12 +17980,12 @@ function SummaryButton({
17738
17980
  !onClick && "cursor-default"
17739
17981
  ),
17740
17982
  children: [
17741
- leading && /* @__PURE__ */ jsx57("span", { className: "mt-0.5 shrink-0 text-muted-foreground", children: leading }),
17742
- /* @__PURE__ */ jsxs39("span", { className: "min-w-0 flex-1", children: [
17743
- /* @__PURE__ */ jsx57("span", { className: "block truncate text-sm font-medium leading-5 text-foreground", children: title }),
17744
- description && /* @__PURE__ */ jsx57("span", { className: "mt-0.5 block line-clamp-2 text-xs text-muted-foreground", children: description })
17983
+ leading && /* @__PURE__ */ jsx58("span", { className: "mt-0.5 shrink-0 text-muted-foreground", children: leading }),
17984
+ /* @__PURE__ */ jsxs40("span", { className: "min-w-0 flex-1", children: [
17985
+ /* @__PURE__ */ jsx58("span", { className: "block truncate text-sm font-medium leading-5 text-foreground", children: title }),
17986
+ description && /* @__PURE__ */ jsx58("span", { className: "mt-0.5 block line-clamp-2 text-xs text-muted-foreground", children: description })
17745
17987
  ] }),
17746
- trailing && /* @__PURE__ */ jsx57("span", { className: "mt-0.5 text-muted-foreground", children: trailing })
17988
+ trailing && /* @__PURE__ */ jsx58("span", { className: "mt-0.5 text-muted-foreground", children: trailing })
17747
17989
  ]
17748
17990
  }
17749
17991
  );
@@ -17755,7 +17997,7 @@ function formatElapsed(value) {
17755
17997
  }
17756
17998
 
17757
17999
  // src/components/chat.tsx
17758
- import { Fragment as Fragment9, jsx as jsx58, jsxs as jsxs40 } from "react/jsx-runtime";
18000
+ import { Fragment as Fragment10, jsx as jsx59, jsxs as jsxs41 } from "react/jsx-runtime";
17759
18001
  var defaultApiUrl2 = import.meta.env.VITE_XPERTAI_API_URL;
17760
18002
  var COMPOSER_INPUT_MAX_HEIGHT = 128;
17761
18003
  var LONG_TEXT_REFERENCE_THRESHOLD = 5e3;
@@ -17862,7 +18104,7 @@ function ReferenceChip({
17862
18104
  const metaLine = getReferenceMetaLine(reference);
17863
18105
  const isComposer = variant === "composer";
17864
18106
  const Icon = reference.type === "quote" ? Quote : reference.type === "image" ? ImageIcon : FileText5;
17865
- return /* @__PURE__ */ jsxs40(
18107
+ return /* @__PURE__ */ jsxs41(
17866
18108
  "div",
17867
18109
  {
17868
18110
  className: cn(
@@ -17871,7 +18113,7 @@ function ReferenceChip({
17871
18113
  ),
17872
18114
  title: getReferenceTitle(reference),
17873
18115
  children: [
17874
- /* @__PURE__ */ jsx58(
18116
+ /* @__PURE__ */ jsx59(
17875
18117
  Icon,
17876
18118
  {
17877
18119
  size: isComposer ? 14 : 12,
@@ -17881,8 +18123,8 @@ function ReferenceChip({
17881
18123
  )
17882
18124
  }
17883
18125
  ),
17884
- /* @__PURE__ */ jsxs40("div", { className: "min-w-0 flex-1", children: [
17885
- /* @__PURE__ */ jsx58(
18126
+ /* @__PURE__ */ jsxs41("div", { className: "min-w-0 flex-1", children: [
18127
+ /* @__PURE__ */ jsx59(
17886
18128
  "div",
17887
18129
  {
17888
18130
  className: cn(
@@ -17892,7 +18134,7 @@ function ReferenceChip({
17892
18134
  children: getReferenceLabel(reference)
17893
18135
  }
17894
18136
  ),
17895
- metaLine && /* @__PURE__ */ jsx58(
18137
+ metaLine && /* @__PURE__ */ jsx59(
17896
18138
  "div",
17897
18139
  {
17898
18140
  className: cn(
@@ -17903,7 +18145,7 @@ function ReferenceChip({
17903
18145
  }
17904
18146
  )
17905
18147
  ] }),
17906
- onRemove && removeLabel && /* @__PURE__ */ jsx58(
18148
+ onRemove && removeLabel && /* @__PURE__ */ jsx59(
17907
18149
  "button",
17908
18150
  {
17909
18151
  type: "button",
@@ -17914,7 +18156,7 @@ function ReferenceChip({
17914
18156
  ),
17915
18157
  title: removeLabel,
17916
18158
  "aria-label": removeLabel,
17917
- children: /* @__PURE__ */ jsx58(X7, { size: 12 })
18159
+ children: /* @__PURE__ */ jsx59(X9, { size: 12 })
17918
18160
  }
17919
18161
  )
17920
18162
  ]
@@ -17945,7 +18187,7 @@ function Chat({
17945
18187
  clientSecret: effectiveClientSecret
17946
18188
  });
17947
18189
  const missingConfig = Boolean(missingConfigKind);
17948
- const missingConfigShortMessage = React54.useMemo(() => {
18190
+ const missingConfigShortMessage = React55.useMemo(() => {
17949
18191
  switch (missingConfigKind) {
17950
18192
  case "apiUrl":
17951
18193
  return t("chat.missingApiUrlShort");
@@ -17957,7 +18199,7 @@ function Chat({
17957
18199
  return t("chat.missingConfigShort");
17958
18200
  }
17959
18201
  }, [missingConfigKind, t]);
17960
- const missingConfigDetailMessage = React54.useMemo(() => {
18202
+ const missingConfigDetailMessage = React55.useMemo(() => {
17961
18203
  switch (missingConfigKind) {
17962
18204
  case "apiUrl":
17963
18205
  return t("chat.missingApiUrlDetail");
@@ -17969,26 +18211,26 @@ function Chat({
17969
18211
  return t("chat.missingConfigDetail");
17970
18212
  }
17971
18213
  }, [missingConfigKind, t]);
17972
- const [isHistoryLoading, setIsHistoryLoading] = React54.useState(false);
17973
- const [historyError, setHistoryError] = React54.useState(null);
17974
- const [assistantName, setAssistantName] = React54.useState(null);
17975
- const [assistantAvatar, setAssistantAvatar] = React54.useState(null);
17976
- const [threadGoal, setThreadGoal] = React54.useState(null);
17977
- const [goalError, setGoalError] = React54.useState(null);
17978
- const [isGoalLoading, setIsGoalLoading] = React54.useState(false);
17979
- const [isGoalPanelOpen, setIsGoalPanelOpen] = React54.useState(false);
17980
- const [isGoalObjectiveExpanded, setIsGoalObjectiveExpanded] = React54.useState(false);
17981
- const [goalElapsedStartedAt, setGoalElapsedStartedAt] = React54.useState(null);
18214
+ const [isHistoryLoading, setIsHistoryLoading] = React55.useState(false);
18215
+ const [historyError, setHistoryError] = React55.useState(null);
18216
+ const [assistantName, setAssistantName] = React55.useState(null);
18217
+ const [assistantAvatar, setAssistantAvatar] = React55.useState(null);
18218
+ const [threadGoal, setThreadGoal] = React55.useState(null);
18219
+ const [goalError, setGoalError] = React55.useState(null);
18220
+ const [isGoalLoading, setIsGoalLoading] = React55.useState(false);
18221
+ const [isGoalPanelOpen, setIsGoalPanelOpen] = React55.useState(false);
18222
+ const [isGoalObjectiveExpanded, setIsGoalObjectiveExpanded] = React55.useState(false);
18223
+ const [goalElapsedStartedAt, setGoalElapsedStartedAt] = React55.useState(null);
17982
18224
  const LOADING_DOTS_MIN_DURATION = 800;
17983
18225
  const STREAMING_STATUS_REFRESH_MS = 250;
17984
- const [showLoadingDots, setShowLoadingDots] = React54.useState(false);
17985
- const [streamingNow, setStreamingNow] = React54.useState(() => Date.now());
17986
- const loadingStartTimeRef = React54.useRef(null);
17987
- const lastStreamOutputAtRef = React54.useRef(null);
17988
- React54.useEffect(() => {
18226
+ const [showLoadingDots, setShowLoadingDots] = React55.useState(false);
18227
+ const [streamingNow, setStreamingNow] = React55.useState(() => Date.now());
18228
+ const loadingStartTimeRef = React55.useRef(null);
18229
+ const lastStreamOutputAtRef = React55.useRef(null);
18230
+ React55.useEffect(() => {
17989
18231
  setStream(stream);
17990
18232
  }, [setStream, stream]);
17991
- React54.useEffect(() => {
18233
+ React55.useEffect(() => {
17992
18234
  if (stream.isLoading) {
17993
18235
  if (!loadingStartTimeRef.current) {
17994
18236
  loadingStartTimeRef.current = Date.now();
@@ -18011,7 +18253,7 @@ function Chat({
18011
18253
  }
18012
18254
  }
18013
18255
  }, [stream.isLoading]);
18014
- React54.useEffect(() => {
18256
+ React55.useEffect(() => {
18015
18257
  if (!stream.isLoading) {
18016
18258
  lastStreamOutputAtRef.current = null;
18017
18259
  setStreamingNow(Date.now());
@@ -18021,7 +18263,7 @@ function Chat({
18021
18263
  lastStreamOutputAtRef.current = now;
18022
18264
  setStreamingNow(now);
18023
18265
  }, [stream.messages, stream.isLoading]);
18024
- React54.useEffect(() => {
18266
+ React55.useEffect(() => {
18025
18267
  if (!stream.isLoading) {
18026
18268
  return;
18027
18269
  }
@@ -18030,7 +18272,7 @@ function Chat({
18030
18272
  }, STREAMING_STATUS_REFRESH_MS);
18031
18273
  return () => window.clearInterval(timer);
18032
18274
  }, [stream.isLoading]);
18033
- React54.useEffect(() => {
18275
+ React55.useEffect(() => {
18034
18276
  if (threadGoal?.status === "active" && stream.isLoading) {
18035
18277
  setGoalElapsedStartedAt(Date.now());
18036
18278
  return;
@@ -18042,55 +18284,55 @@ function Chat({
18042
18284
  threadGoal?.id,
18043
18285
  threadGoal?.status
18044
18286
  ]);
18045
- React54.useEffect(() => {
18287
+ React55.useEffect(() => {
18046
18288
  setIsGoalObjectiveExpanded(false);
18047
18289
  }, [threadGoal?.id]);
18048
- const [composerParts, setComposerParts] = React54.useState([]);
18049
- const [renderedComposerParts, setRenderedComposerParts] = React54.useState([]);
18050
- const [composerDomVersion, setComposerDomVersion] = React54.useState(0);
18051
- const [selectedTool, setSelectedTool] = React54.useState(
18290
+ const [composerParts, setComposerParts] = React55.useState([]);
18291
+ const [renderedComposerParts, setRenderedComposerParts] = React55.useState([]);
18292
+ const [composerDomVersion, setComposerDomVersion] = React55.useState(0);
18293
+ const [selectedTool, setSelectedTool] = React55.useState(
18052
18294
  null
18053
18295
  );
18054
- const [planModeEnabled, setPlanModeEnabled] = React54.useState(false);
18055
- const [petSettingsOpen, setPetSettingsOpen] = React54.useState(false);
18056
- const [petLocalSettings, setPetLocalSettings] = React54.useState(() => readPetLocalSettings());
18057
- const [attachmentState, setAttachmentState] = React54.useState({
18296
+ const [planModeEnabled, setPlanModeEnabled] = React55.useState(false);
18297
+ const [petSettingsOpen, setPetSettingsOpen] = React55.useState(false);
18298
+ const [petLocalSettings, setPetLocalSettings] = React55.useState(() => readPetLocalSettings());
18299
+ const [attachmentState, setAttachmentState] = React55.useState({
18058
18300
  uploadedFiles: [],
18059
18301
  hasUploadingFiles: false,
18060
18302
  hasParsingFiles: false
18061
18303
  });
18062
- const [references, setReferences] = React54.useState([]);
18063
- const [isUploadingReferenceImages, setIsUploadingReferenceImages] = React54.useState(false);
18064
- const [quoteSelection, setQuoteSelection] = React54.useState(null);
18065
- const [isAtBottom, setIsAtBottom] = React54.useState(true);
18066
- const [hasUpdatesBelow, setHasUpdatesBelow] = React54.useState(false);
18304
+ const [references, setReferences] = React55.useState([]);
18305
+ const [isUploadingReferenceImages, setIsUploadingReferenceImages] = React55.useState(false);
18306
+ const [quoteSelection, setQuoteSelection] = React55.useState(null);
18307
+ const [isAtBottom, setIsAtBottom] = React55.useState(true);
18308
+ const [hasUpdatesBelow, setHasUpdatesBelow] = React55.useState(false);
18067
18309
  const {
18068
18310
  threads,
18069
18311
  deleteThread,
18070
18312
  refreshThreads,
18071
18313
  isLoading: isThreadsLoading
18072
18314
  } = useThreads();
18073
- const viewportRef = React54.useRef(null);
18074
- const chatColumnRef = React54.useRef(null);
18075
- const messageNavigationAnchorsRef = React54.useRef(
18315
+ const viewportRef = React55.useRef(null);
18316
+ const chatColumnRef = React55.useRef(null);
18317
+ const messageNavigationAnchorsRef = React55.useRef(
18076
18318
  /* @__PURE__ */ new Map()
18077
18319
  );
18078
- const attachmentsRef = React54.useRef(null);
18079
- const composerInputRef = React54.useRef(null);
18080
- const slashPaletteRef = React54.useRef(null);
18081
- const slashPaletteOptionRefs = React54.useRef(
18320
+ const attachmentsRef = React55.useRef(null);
18321
+ const composerInputRef = React55.useRef(null);
18322
+ const slashPaletteRef = React55.useRef(null);
18323
+ const slashPaletteOptionRefs = React55.useRef(
18082
18324
  []
18083
18325
  );
18084
- const composerPartsRef = React54.useRef([]);
18085
- const pendingComposerCaretOffsetRef = React54.useRef(null);
18086
- const shouldAutoScrollRef = React54.useRef(true);
18087
- const forceFollowRef = React54.useRef(false);
18088
- const previousMessageCountRef = React54.useRef(0);
18089
- const previousScrollTopRef = React54.useRef(0);
18090
- const isPrependingHistoryMessagesRef = React54.useRef(false);
18091
- const autoScrollFrameRef = React54.useRef(null);
18092
- const isPointerDownRef = React54.useRef(false);
18093
- const lastTouchYRef = React54.useRef(null);
18326
+ const composerPartsRef = React55.useRef([]);
18327
+ const pendingComposerCaretOffsetRef = React55.useRef(null);
18328
+ const shouldAutoScrollRef = React55.useRef(true);
18329
+ const forceFollowRef = React55.useRef(false);
18330
+ const previousMessageCountRef = React55.useRef(0);
18331
+ const previousScrollTopRef = React55.useRef(0);
18332
+ const isPrependingHistoryMessagesRef = React55.useRef(false);
18333
+ const autoScrollFrameRef = React55.useRef(null);
18334
+ const isPointerDownRef = React55.useRef(false);
18335
+ const lastTouchYRef = React55.useRef(null);
18094
18336
  const {
18095
18337
  runtimeCapabilities,
18096
18338
  runtimeCapabilitiesReady,
@@ -18119,24 +18361,24 @@ function Chat({
18119
18361
  const resolvedPlaceholder = placeholder ?? t("chat.placeholder");
18120
18362
  const assistantTitle = assistantName || resolvedTitle;
18121
18363
  const petRequired = options?.displayMode === "pet";
18122
- const basePetSettings = React54.useMemo(
18364
+ const basePetSettings = React55.useMemo(
18123
18365
  () => derivePetLocalSettings(options?.pet),
18124
18366
  [options?.pet]
18125
18367
  );
18126
- const displayedPetSettings = React54.useMemo(
18368
+ const displayedPetSettings = React55.useMemo(
18127
18369
  () => ({
18128
18370
  ...petLocalSettings ?? basePetSettings,
18129
18371
  ...petRequired ? { enabled: true } : {}
18130
18372
  }),
18131
18373
  [basePetSettings, petLocalSettings, petRequired]
18132
18374
  );
18133
- const effectivePet = React54.useMemo(() => {
18375
+ const effectivePet = React55.useMemo(() => {
18134
18376
  if (petRequired || petLocalSettings) {
18135
18377
  return buildPetOptionsFromLocalSettings(displayedPetSettings);
18136
18378
  }
18137
18379
  return options?.pet ?? null;
18138
18380
  }, [displayedPetSettings, options?.pet, petLocalSettings, petRequired]);
18139
- const savePetLocalSettings = React54.useCallback(
18381
+ const savePetLocalSettings = React55.useCallback(
18140
18382
  (settings) => {
18141
18383
  const nextSettings = petRequired ? { ...settings, enabled: true } : settings;
18142
18384
  setPetLocalSettings(nextSettings);
@@ -18144,7 +18386,7 @@ function Chat({
18144
18386
  },
18145
18387
  [petRequired]
18146
18388
  );
18147
- const handlePetCommand = React54.useCallback(
18389
+ const handlePetCommand = React55.useCallback(
18148
18390
  (mode) => {
18149
18391
  if (mode === "settings") {
18150
18392
  setPetSettingsOpen(true);
@@ -18166,11 +18408,11 @@ function Chat({
18166
18408
  [displayedPetSettings, effectivePet, petRequired, savePetLocalSettings]
18167
18409
  );
18168
18410
  const inputPlaceholder = selectedTool?.placeholderOverride ?? composer?.placeholder ?? resolvedPlaceholder;
18169
- const messages = React54.useMemo(
18411
+ const messages = React55.useMemo(
18170
18412
  () => stream.messages ?? [],
18171
18413
  [stream.messages]
18172
18414
  );
18173
- const messageNavigationLabels = React54.useMemo(
18415
+ const messageNavigationLabels = React55.useMemo(
18174
18416
  () => ({
18175
18417
  user: t("chat.youLabel"),
18176
18418
  assistant: assistantTitle,
@@ -18189,7 +18431,7 @@ function Chat({
18189
18431
  }),
18190
18432
  [assistantTitle, t]
18191
18433
  );
18192
- const messageNavigationItems = React54.useMemo(
18434
+ const messageNavigationItems = React55.useMemo(
18193
18435
  () => messageNavigationEnabled ? buildMessageNavigationItems(
18194
18436
  messages,
18195
18437
  {
@@ -18212,7 +18454,7 @@ function Chat({
18212
18454
  historyMessagePagination?.isLoadingMore
18213
18455
  );
18214
18456
  const canLoadMoreMessages = Boolean(historyMessagePagination?.hasMore);
18215
- const draft = React54.useMemo(
18457
+ const draft = React55.useMemo(
18216
18458
  () => getComposerPlainText(composerParts),
18217
18459
  [composerParts]
18218
18460
  );
@@ -18226,7 +18468,7 @@ function Chat({
18226
18468
  isEmpty: isComposerInputEmpty,
18227
18469
  isStacked: isComposerStacked
18228
18470
  });
18229
- const pendingFollowUps = React54.useMemo(
18471
+ const pendingFollowUps = React55.useMemo(
18230
18472
  () => sortVisiblePendingFollowUps(stream.pendingFollowUps ?? []),
18231
18473
  [stream.pendingFollowUps]
18232
18474
  );
@@ -18235,7 +18477,7 @@ function Chat({
18235
18477
  const hasPendingHITLRequest = Boolean(stream.pendingHITLRequest);
18236
18478
  const hasPendingInteractiveRequest = hasPendingRequestUserInput || hasPendingHITLRequest;
18237
18479
  const hasPendingTodos = Boolean(stream.todos?.items.length);
18238
- const goalAdapter = React54.useMemo(() => {
18480
+ const goalAdapter = React55.useMemo(() => {
18239
18481
  if (isGoalAdapter(options?.goal)) {
18240
18482
  return options.goal;
18241
18483
  }
@@ -18248,10 +18490,10 @@ function Chat({
18248
18490
  "goal"
18249
18491
  );
18250
18492
  const showGoalStatus = goalCommandAvailable && !hasCompletedGoal && (Boolean(goalError) || threadGoal?.status === "active" && stream.isLoading);
18251
- const clearQuoteSelection = React54.useCallback(() => {
18493
+ const clearQuoteSelection = React55.useCallback(() => {
18252
18494
  setQuoteSelection(null);
18253
18495
  }, []);
18254
- const commitComposerParts = React54.useCallback(
18496
+ const commitComposerParts = React55.useCallback(
18255
18497
  (nextParts, options2) => {
18256
18498
  const normalized = normalizeComposerParts(nextParts);
18257
18499
  const previous = composerPartsRef.current;
@@ -18281,7 +18523,7 @@ function Chat({
18281
18523
  },
18282
18524
  [setRunRuntimeCapabilities]
18283
18525
  );
18284
- const setComposerText = React54.useCallback(
18526
+ const setComposerText = React55.useCallback(
18285
18527
  (text, caretOffset = text.length) => {
18286
18528
  commitComposerParts(createComposerTextParts(text), {
18287
18529
  caretOffset,
@@ -18291,7 +18533,7 @@ function Chat({
18291
18533
  },
18292
18534
  [commitComposerParts]
18293
18535
  );
18294
- const focusComposerAt = React54.useCallback((position) => {
18536
+ const focusComposerAt = React55.useCallback((position) => {
18295
18537
  const nextPosition = position ?? getComposerEditingLength(composerPartsRef.current);
18296
18538
  pendingComposerCaretOffsetRef.current = nextPosition;
18297
18539
  requestAnimationFrame(() => {
@@ -18320,7 +18562,7 @@ function Chat({
18320
18562
  focusComposerAt
18321
18563
  });
18322
18564
  const parentMessenger = useParentMessenger({
18323
- onSetComposerValue: React54.useCallback(
18565
+ onSetComposerValue: React55.useCallback(
18324
18566
  (payload) => {
18325
18567
  if (!payload) {
18326
18568
  return;
@@ -18348,16 +18590,16 @@ function Chat({
18348
18590
  },
18349
18591
  [applyComposerValueRuntimeCapabilities, composer?.tools, setComposerText]
18350
18592
  ),
18351
- onSetRuntimeCapabilities: React54.useCallback(
18593
+ onSetRuntimeCapabilities: React55.useCallback(
18352
18594
  (selection) => {
18353
18595
  applyExternalRuntimeCapabilities(selection);
18354
18596
  },
18355
18597
  [applyExternalRuntimeCapabilities]
18356
18598
  ),
18357
- onFocusComposer: React54.useCallback(() => {
18599
+ onFocusComposer: React55.useCallback(() => {
18358
18600
  composerInputRef.current?.focus();
18359
18601
  }, []),
18360
- onSetPetEnabled: React54.useCallback(
18602
+ onSetPetEnabled: React55.useCallback(
18361
18603
  (enabled) => {
18362
18604
  if (petRequired) {
18363
18605
  return;
@@ -18371,10 +18613,10 @@ function Chat({
18371
18613
  )
18372
18614
  });
18373
18615
  const canMinimizeToPet = parentMessenger?.isParentAvailable === true && isPetEnabled(effectivePet);
18374
- const handleMinimizeToPet = React54.useCallback(() => {
18616
+ const handleMinimizeToPet = React55.useCallback(() => {
18375
18617
  parentMessenger?.sendEvent("chat_minimize_change", { minimized: true });
18376
18618
  }, [parentMessenger]);
18377
- const syncQuoteSelection = React54.useCallback(() => {
18619
+ const syncQuoteSelection = React55.useCallback(() => {
18378
18620
  if (typeof window === "undefined") {
18379
18621
  clearQuoteSelection();
18380
18622
  return;
@@ -18419,23 +18661,23 @@ function Chat({
18419
18661
  left
18420
18662
  });
18421
18663
  }, [clearQuoteSelection]);
18422
- const cancelPendingAutoScroll = React54.useCallback(() => {
18664
+ const cancelPendingAutoScroll = React55.useCallback(() => {
18423
18665
  if (autoScrollFrameRef.current !== null) {
18424
18666
  cancelAnimationFrame(autoScrollFrameRef.current);
18425
18667
  autoScrollFrameRef.current = null;
18426
18668
  }
18427
18669
  }, []);
18428
- const disableAutoFollow = React54.useCallback(() => {
18670
+ const disableAutoFollow = React55.useCallback(() => {
18429
18671
  forceFollowRef.current = false;
18430
18672
  shouldAutoScrollRef.current = false;
18431
18673
  cancelPendingAutoScroll();
18432
18674
  }, [cancelPendingAutoScroll]);
18433
- const enableAutoFollow = React54.useCallback(() => {
18675
+ const enableAutoFollow = React55.useCallback(() => {
18434
18676
  forceFollowRef.current = true;
18435
18677
  shouldAutoScrollRef.current = true;
18436
18678
  setHasUpdatesBelow(false);
18437
18679
  }, []);
18438
- const scrollToBottom = React54.useCallback(
18680
+ const scrollToBottom = React55.useCallback(
18439
18681
  (smooth = false, force = false) => {
18440
18682
  if (force) {
18441
18683
  enableAutoFollow();
@@ -18462,7 +18704,7 @@ function Chat({
18462
18704
  },
18463
18705
  [cancelPendingAutoScroll, enableAutoFollow]
18464
18706
  );
18465
- const setMessageNavigationAnchor = React54.useCallback(
18707
+ const setMessageNavigationAnchor = React55.useCallback(
18466
18708
  (id, node) => {
18467
18709
  if (node) {
18468
18710
  messageNavigationAnchorsRef.current.set(id, node);
@@ -18472,22 +18714,22 @@ function Chat({
18472
18714
  },
18473
18715
  []
18474
18716
  );
18475
- const getMessageNavigationAnchor = React54.useCallback(
18717
+ const getMessageNavigationAnchor = React55.useCallback(
18476
18718
  (item) => messageNavigationAnchorsRef.current.get(item.id) ?? null,
18477
18719
  []
18478
18720
  );
18479
- const handleMessageNavigationNavigate = React54.useCallback(() => {
18721
+ const handleMessageNavigationNavigate = React55.useCallback(() => {
18480
18722
  disableAutoFollow();
18481
18723
  clearQuoteSelection();
18482
18724
  }, [clearQuoteSelection, disableAutoFollow]);
18483
18725
  const taskSummaryEnabled = options?.taskSummary?.enabled === true;
18484
18726
  const taskSummaryConversationId = stream.conversationId ?? null;
18485
- const [taskSummaryDocked, setTaskSummaryDocked] = React54.useState(false);
18486
- const [taskSummaryOpen, setTaskSummaryOpen] = React54.useState(false);
18487
- const manuallyClosedTaskSummaryConversationIdsRef = React54.useRef(
18727
+ const [taskSummaryDocked, setTaskSummaryDocked] = React55.useState(false);
18728
+ const [taskSummaryOpen, setTaskSummaryOpen] = React55.useState(false);
18729
+ const manuallyClosedTaskSummaryConversationIdsRef = React55.useRef(
18488
18730
  /* @__PURE__ */ new Set()
18489
18731
  );
18490
- const liveTaskSummaryPending = React54.useMemo(() => {
18732
+ const liveTaskSummaryPending = React55.useMemo(() => {
18491
18733
  const followUps = pendingFollowUps.map((item) => ({
18492
18734
  id: `follow-up:${item.id}`,
18493
18735
  kind: "follow_up",
@@ -18522,7 +18764,7 @@ function Chat({
18522
18764
  stream.pendingRequestUserInput,
18523
18765
  t
18524
18766
  ]);
18525
- const liveTaskSummaryRunning = React54.useMemo(
18767
+ const liveTaskSummaryRunning = React55.useMemo(
18526
18768
  () => stream.runtimeActivities.sandboxServices.services.filter(
18527
18769
  (service) => service.status === "starting" || service.status === "running" || service.status === "stopping"
18528
18770
  ).map((service) => ({
@@ -18539,7 +18781,7 @@ function Chat({
18539
18781
  })),
18540
18782
  [stream.runtimeActivities.sandboxServices.services]
18541
18783
  );
18542
- const taskSummaryAgentNames = React54.useMemo(() => {
18784
+ const taskSummaryAgentNames = React55.useMemo(() => {
18543
18785
  const names = /* @__PURE__ */ new Map();
18544
18786
  runtimeCapabilityOptions.forEach((option) => {
18545
18787
  if (option.type !== "subAgent") return;
@@ -18551,7 +18793,7 @@ function Chat({
18551
18793
  });
18552
18794
  return names;
18553
18795
  }, [runtimeCapabilityOptions]);
18554
- const liveTaskSummary = React54.useMemo(
18796
+ const liveTaskSummary = React55.useMemo(
18555
18797
  () => collectLiveTaskSummary({
18556
18798
  messages: messages.map(
18557
18799
  (message) => ({
@@ -18588,7 +18830,7 @@ function Chat({
18588
18830
  client: stream.client,
18589
18831
  live: liveTaskSummary
18590
18832
  });
18591
- const navigateToTaskSummaryMessage = React54.useCallback(
18833
+ const navigateToTaskSummaryMessage = React55.useCallback(
18592
18834
  async (messageId) => {
18593
18835
  try {
18594
18836
  let anchor = messageNavigationAnchorsRef.current.get(messageId);
@@ -18612,7 +18854,7 @@ function Chat({
18612
18854
  },
18613
18855
  [clearQuoteSelection, disableAutoFollow, stream]
18614
18856
  );
18615
- const openTaskSummaryResource = React54.useCallback(
18857
+ const openTaskSummaryResource = React55.useCallback(
18616
18858
  (resource, messageId, resourceTitle) => {
18617
18859
  const data = {
18618
18860
  resource,
@@ -18630,7 +18872,7 @@ function Chat({
18630
18872
  },
18631
18873
  [parentMessenger, taskSummaryConversationId]
18632
18874
  );
18633
- React54.useEffect(() => {
18875
+ React55.useEffect(() => {
18634
18876
  const viewport = viewportRef.current;
18635
18877
  if (!viewport) return;
18636
18878
  previousScrollTopRef.current = viewport.scrollTop;
@@ -18711,14 +18953,14 @@ function Chat({
18711
18953
  window.removeEventListener("pointercancel", stopPointerTracking);
18712
18954
  };
18713
18955
  }, [cancelPendingAutoScroll, disableAutoFollow]);
18714
- React54.useEffect(() => {
18956
+ React55.useEffect(() => {
18715
18957
  shouldAutoScrollRef.current = true;
18716
18958
  forceFollowRef.current = false;
18717
18959
  previousScrollTopRef.current = 0;
18718
18960
  setIsAtBottom(true);
18719
18961
  setHasUpdatesBelow(false);
18720
18962
  }, [stream.threadId]);
18721
- React54.useEffect(() => {
18963
+ React55.useEffect(() => {
18722
18964
  const messageCountChanged = messages.length !== previousMessageCountRef.current;
18723
18965
  previousMessageCountRef.current = messages.length;
18724
18966
  if (isPrependingHistoryMessagesRef.current) {
@@ -18740,7 +18982,7 @@ function Chat({
18740
18982
  const isSubmissionBlocked = hasPendingInteractiveRequest || missingConfig || isHistoryLoading || hasUploadingFiles || isUploadingReferenceImages;
18741
18983
  const isSendDisabled = !trimmedDraft && !hasReferences || isSubmissionBlocked;
18742
18984
  const isPromptEditDisabled = hasPendingInteractiveRequest || missingConfig || isHistoryLoading;
18743
- const resizeComposerInput = React54.useCallback(() => {
18985
+ const resizeComposerInput = React55.useCallback(() => {
18744
18986
  const input = composerInputRef.current;
18745
18987
  if (!input) {
18746
18988
  return;
@@ -18748,7 +18990,7 @@ function Chat({
18748
18990
  input.style.maxHeight = `${COMPOSER_INPUT_MAX_HEIGHT}px`;
18749
18991
  input.style.overflowY = input.scrollHeight > COMPOSER_INPUT_MAX_HEIGHT ? "auto" : "hidden";
18750
18992
  }, []);
18751
- React54.useLayoutEffect(() => {
18993
+ React55.useLayoutEffect(() => {
18752
18994
  composerPartsRef.current = composerParts;
18753
18995
  resizeComposerInput();
18754
18996
  const caretOffset = pendingComposerCaretOffsetRef.current;
@@ -18760,13 +19002,13 @@ function Chat({
18760
19002
  }
18761
19003
  }
18762
19004
  }, [composerDomVersion, composerParts, resizeComposerInput]);
18763
- React54.useEffect(() => {
19005
+ React55.useEffect(() => {
18764
19006
  document.addEventListener("selectionchange", syncQuoteSelection);
18765
19007
  return () => {
18766
19008
  document.removeEventListener("selectionchange", syncQuoteSelection);
18767
19009
  };
18768
19010
  }, [syncQuoteSelection]);
18769
- React54.useEffect(() => {
19011
+ React55.useEffect(() => {
18770
19012
  const viewport = viewportRef.current;
18771
19013
  if (!viewport) {
18772
19014
  return;
@@ -18783,14 +19025,14 @@ function Chat({
18783
19025
  window.removeEventListener("resize", handleViewportScroll);
18784
19026
  };
18785
19027
  }, [clearQuoteSelection]);
18786
- React54.useEffect(() => {
19028
+ React55.useEffect(() => {
18787
19029
  clearQuoteSelection();
18788
19030
  }, [messages.length, stream.threadId, clearQuoteSelection]);
18789
- React54.useEffect(() => {
19031
+ React55.useEffect(() => {
18790
19032
  if (missingConfig) return;
18791
19033
  void refreshThreads();
18792
19034
  }, [missingConfig, refreshThreads]);
18793
- React54.useEffect(() => {
19035
+ React55.useEffect(() => {
18794
19036
  if (missingConfig || !stream.client || !stream.assistantId) {
18795
19037
  setAssistantName(null);
18796
19038
  setAssistantAvatar(null);
@@ -18813,10 +19055,10 @@ function Chat({
18813
19055
  cancelled = true;
18814
19056
  };
18815
19057
  }, [missingConfig, stream.client, stream.assistantId]);
18816
- React54.useEffect(() => {
19058
+ React55.useEffect(() => {
18817
19059
  setThreadGoal(stream.threadGoal);
18818
19060
  }, [stream.threadGoal]);
18819
- React54.useEffect(() => {
19061
+ React55.useEffect(() => {
18820
19062
  const threadId = stream.threadId?.trim();
18821
19063
  if (!threadId || !goalCommandAvailable) {
18822
19064
  setThreadGoal(null);
@@ -18857,7 +19099,7 @@ function Chat({
18857
19099
  return () => controller.abort();
18858
19100
  }, [goalAdapter, goalCommandAvailable, stream.threadId]);
18859
19101
  const uploadedFiles = attachmentState.uploadedFiles;
18860
- const syncComposerInputFromElement = React54.useCallback(
19102
+ const syncComposerInputFromElement = React55.useCallback(
18861
19103
  (input) => {
18862
19104
  const previousCapabilities = getComposerCapabilityPartMap(
18863
19105
  composerPartsRef.current
@@ -18875,25 +19117,25 @@ function Chat({
18875
19117
  },
18876
19118
  [commitComposerParts, updateRuntimeCapabilityPalette]
18877
19119
  );
18878
- const handleComposerInput = React54.useCallback(
19120
+ const handleComposerInput = React55.useCallback(
18879
19121
  (event) => {
18880
19122
  syncComposerInputFromElement(event.currentTarget);
18881
19123
  },
18882
19124
  [syncComposerInputFromElement]
18883
19125
  );
18884
- const handleComposerCompositionEnd = React54.useCallback(
19126
+ const handleComposerCompositionEnd = React55.useCallback(
18885
19127
  (event) => {
18886
19128
  syncComposerInputFromElement(event.currentTarget);
18887
19129
  },
18888
19130
  [syncComposerInputFromElement]
18889
19131
  );
18890
- const handleComposerSelect = React54.useCallback(() => {
19132
+ const handleComposerSelect = React55.useCallback(() => {
18891
19133
  updateRuntimeCapabilityPalette(
18892
19134
  composerPartsRef.current,
18893
19135
  composerInputRef.current ? getComposerSelectionOffset(composerInputRef.current) : void 0
18894
19136
  );
18895
19137
  }, [updateRuntimeCapabilityPalette]);
18896
- const submitDraft = React54.useCallback(
19138
+ const submitDraft = React55.useCallback(
18897
19139
  (submitOptions = {}) => {
18898
19140
  if (isSubmissionBlocked) return;
18899
19141
  const contentToSubmit = (submitOptions.inputText ?? trimmedDraft).trim();
@@ -18999,7 +19241,7 @@ function Chat({
18999
19241
  t
19000
19242
  ]
19001
19243
  );
19002
- const handleGoalCommand = React54.useCallback(
19244
+ const handleGoalCommand = React55.useCallback(
19003
19245
  async ({
19004
19246
  args,
19005
19247
  commandSource,
@@ -19105,7 +19347,7 @@ function Chat({
19105
19347
  t
19106
19348
  ]
19107
19349
  );
19108
- const handleGoalPanelOpenChange = React54.useCallback((open) => {
19350
+ const handleGoalPanelOpenChange = React55.useCallback((open) => {
19109
19351
  setIsGoalPanelOpen(open);
19110
19352
  }, []);
19111
19353
  const {
@@ -19149,7 +19391,7 @@ function Chat({
19149
19391
  plugin: t("composer.slashCommands.empty.loadingCapabilities"),
19150
19392
  subAgent: t("composer.slashCommands.empty.loadingCapabilities")
19151
19393
  };
19152
- React54.useEffect(() => {
19394
+ React55.useEffect(() => {
19153
19395
  if (!runtimeCapabilityPalette) {
19154
19396
  return;
19155
19397
  }
@@ -19168,7 +19410,7 @@ function Chat({
19168
19410
  );
19169
19411
  }
19170
19412
  }, [slashPaletteOptions.length, runtimeCapabilityPalette]);
19171
- React54.useLayoutEffect(() => {
19413
+ React55.useLayoutEffect(() => {
19172
19414
  if (!runtimeCapabilityPalette) {
19173
19415
  return;
19174
19416
  }
@@ -19185,7 +19427,7 @@ function Chat({
19185
19427
  container.scrollTop += optionRect.bottom - containerRect.bottom;
19186
19428
  }
19187
19429
  }, [runtimeCapabilityPalette, slashPaletteOptions.length]);
19188
- const submitGoalModeDraft = React54.useCallback(() => {
19430
+ const submitGoalModeDraft = React55.useCallback(() => {
19189
19431
  const objective = getComposerPlainText(composerPartsRef.current).trim();
19190
19432
  if (!isGoalModeOpen || !goalCommandAvailable || !objective) {
19191
19433
  return false;
@@ -19223,7 +19465,7 @@ function Chat({
19223
19465
  }
19224
19466
  submitDraft();
19225
19467
  };
19226
- const handleEditPendingFollowUp = React54.useCallback(
19468
+ const handleEditPendingFollowUp = React55.useCallback(
19227
19469
  (id) => {
19228
19470
  const item = pendingFollowUps.find(
19229
19471
  (entry) => entry.id === id && entry.mode === "queue"
@@ -19250,7 +19492,7 @@ function Chat({
19250
19492
  },
19251
19493
  [pendingFollowUps, setComposerText, stream]
19252
19494
  );
19253
- const handleQuoteSelection = React54.useCallback(() => {
19495
+ const handleQuoteSelection = React55.useCallback(() => {
19254
19496
  if (!quoteSelection) {
19255
19497
  return;
19256
19498
  }
@@ -19266,7 +19508,7 @@ function Chat({
19266
19508
  const handleAttachmentClick = () => {
19267
19509
  attachmentsRef.current?.openFilePicker();
19268
19510
  };
19269
- const uploadContextFile = React54.useCallback(
19511
+ const uploadContextFile = React55.useCallback(
19270
19512
  (file) => {
19271
19513
  const formData = new FormData();
19272
19514
  formData.append("file", file, file.name || "upload");
@@ -19285,13 +19527,13 @@ function Chat({
19285
19527
  },
19286
19528
  [stream.assistantId, stream.client, stream.threadId]
19287
19529
  );
19288
- const getContextFileStatus = React54.useCallback(
19530
+ const getContextFileStatus = React55.useCallback(
19289
19531
  (fileId) => stream.client.contexts.fetch(`/files/${fileId}/status`, {
19290
19532
  method: "GET"
19291
19533
  }),
19292
19534
  [stream.client]
19293
19535
  );
19294
- const deleteContextFile = React54.useCallback(
19536
+ const deleteContextFile = React55.useCallback(
19295
19537
  (storageFileId) => stream.client.contexts.deleteFile(storageFileId),
19296
19538
  [stream.client]
19297
19539
  );
@@ -19399,7 +19641,7 @@ function Chat({
19399
19641
  }
19400
19642
  submitDraft();
19401
19643
  };
19402
- const handleComposerPaste = React54.useCallback(
19644
+ const handleComposerPaste = React55.useCallback(
19403
19645
  (event) => {
19404
19646
  const clipboardData = event.clipboardData;
19405
19647
  if (!clipboardData) {
@@ -19501,13 +19743,13 @@ function Chat({
19501
19743
  const handleToolSelect = (tool) => {
19502
19744
  setSelectedTool((prev) => prev?.id === tool.id ? null : tool);
19503
19745
  };
19504
- const handlePromptClick = React54.useCallback(
19746
+ const handlePromptClick = React55.useCallback(
19505
19747
  (prompt) => {
19506
19748
  submitDraft({ inputText: prompt, displayText: prompt });
19507
19749
  },
19508
19750
  [submitDraft]
19509
19751
  );
19510
- const handlePromptEdit = React54.useCallback(
19752
+ const handlePromptEdit = React55.useCallback(
19511
19753
  (prompt) => {
19512
19754
  if (isPromptEditDisabled) return;
19513
19755
  setComposerText(prompt, prompt.length);
@@ -19516,7 +19758,7 @@ function Chat({
19516
19758
  },
19517
19759
  [focusComposerAt, isPromptEditDisabled, setComposerText]
19518
19760
  );
19519
- const loadConversationMessages = React54.useCallback(
19761
+ const loadConversationMessages = React55.useCallback(
19520
19762
  async (recordId) => {
19521
19763
  if (missingConfig) {
19522
19764
  setHistoryError(missingConfigShortMessage);
@@ -19537,7 +19779,7 @@ function Chat({
19537
19779
  },
19538
19780
  [missingConfig, missingConfigShortMessage, stream, t]
19539
19781
  );
19540
- const handleLoadMoreMessages = React54.useCallback(async () => {
19782
+ const handleLoadMoreMessages = React55.useCallback(async () => {
19541
19783
  if (!canLoadMoreMessages || isLoadingMoreMessages) {
19542
19784
  return;
19543
19785
  }
@@ -19646,19 +19888,19 @@ function Chat({
19646
19888
  };
19647
19889
  const acceptMimes = composer?.attachments?.accept ? Object.entries(composer.attachments.accept).map(([mime, exts]) => [mime, ...exts.map((e) => `.${e}`)].join(",")).join(",") : void 0;
19648
19890
  const canUploadDroppedFiles = composer?.attachments?.enabled === true && !missingConfig && !isHistoryLoading && !hasPendingInteractiveRequest;
19649
- const handleDroppedFiles = React54.useCallback((files) => {
19891
+ const handleDroppedFiles = React55.useCallback((files) => {
19650
19892
  return attachmentsRef.current?.queueFiles(files) ?? false;
19651
19893
  }, []);
19652
- const currentThread = React54.useMemo(
19894
+ const currentThread = React55.useMemo(
19653
19895
  () => threads.find((item) => item.id === stream.threadId),
19654
19896
  [threads, stream.threadId]
19655
19897
  );
19656
- const assistantStatusText = React54.useMemo(() => {
19898
+ const assistantStatusText = React55.useMemo(() => {
19657
19899
  if (!stream.threadId) return t("chat.statusOnline");
19658
19900
  return currentThread?.title?.trim() || t("chat.statusOnline");
19659
19901
  }, [currentThread?.title, stream.threadId, t]);
19660
19902
  const streamErrorMessage = stream.error instanceof Error ? stream.error.message : void 0;
19661
- const threadErrorMessage = React54.useMemo(() => {
19903
+ const threadErrorMessage = React55.useMemo(() => {
19662
19904
  if (streamErrorMessage?.trim()) return streamErrorMessage.trim();
19663
19905
  if (currentThread?.status !== "error") return void 0;
19664
19906
  const message = currentThread.error?.trim();
@@ -19689,13 +19931,13 @@ function Chat({
19689
19931
  fallbackTitle: t("history.threadFallback")
19690
19932
  });
19691
19933
  const layoutMaxWidth = options?.layout?.maxWidth;
19692
- const chatColumnStyle = React54.useMemo(() => {
19934
+ const chatColumnStyle = React55.useMemo(() => {
19693
19935
  if (layoutMaxWidth === void 0 || layoutMaxWidth === null || layoutMaxWidth === "") {
19694
19936
  return void 0;
19695
19937
  }
19696
19938
  return { maxWidth: layoutMaxWidth };
19697
19939
  }, [layoutMaxWidth]);
19698
- React54.useLayoutEffect(() => {
19940
+ React55.useLayoutEffect(() => {
19699
19941
  if (!taskSummaryEnabled) {
19700
19942
  setTaskSummaryDocked(false);
19701
19943
  return;
@@ -19730,7 +19972,7 @@ function Chat({
19730
19972
  const taskSummaryAvailable = Boolean(
19731
19973
  taskSummaryEnabled && stream.threadId && taskSummaryConversationId
19732
19974
  );
19733
- const handleTaskSummaryOpenChange = React54.useCallback(
19975
+ const handleTaskSummaryOpenChange = React55.useCallback(
19734
19976
  (open) => {
19735
19977
  setTaskSummaryOpen(open);
19736
19978
  if (!taskSummaryConversationId) return;
@@ -19746,12 +19988,12 @@ function Chat({
19746
19988
  },
19747
19989
  [taskSummaryConversationId]
19748
19990
  );
19749
- React54.useEffect(() => {
19991
+ React55.useEffect(() => {
19750
19992
  if (!taskSummaryDocked) {
19751
19993
  setTaskSummaryOpen(false);
19752
19994
  }
19753
19995
  }, [taskSummaryDocked]);
19754
- React54.useEffect(() => {
19996
+ React55.useEffect(() => {
19755
19997
  if (!taskSummaryDocked || !taskSummaryAvailable || !taskSummaryConversationId || manuallyClosedTaskSummaryConversationIdsRef.current.has(
19756
19998
  taskSummaryConversationId
19757
19999
  )) {
@@ -19772,13 +20014,13 @@ function Chat({
19772
20014
  onFocusComposer: () => focusComposerAt(),
19773
20015
  onOpenResource: openTaskSummaryResource
19774
20016
  };
19775
- return /* @__PURE__ */ jsxs40(
20017
+ return /* @__PURE__ */ jsxs41(
19776
20018
  "div",
19777
20019
  {
19778
20020
  className: "relative flex h-full w-full min-w-0 bg-background",
19779
20021
  "data-task-summary-layout": taskSummaryDocked ? "docked" : "popover",
19780
20022
  children: [
19781
- /* @__PURE__ */ jsxs40(
20023
+ /* @__PURE__ */ jsxs41(
19782
20024
  UploadDroppedFiles,
19783
20025
  {
19784
20026
  ref: viewportRef,
@@ -19793,7 +20035,7 @@ function Chat({
19793
20035
  className
19794
20036
  ),
19795
20037
  children: [
19796
- /* @__PURE__ */ jsxs40(
20038
+ /* @__PURE__ */ jsxs41(
19797
20039
  "div",
19798
20040
  {
19799
20041
  ref: chatColumnRef,
@@ -19801,9 +20043,9 @@ function Chat({
19801
20043
  className: "mx-auto flex w-full items-center justify-between border-b p-2 sticky top-0 z-10 bg-background",
19802
20044
  style: chatColumnStyle,
19803
20045
  children: [
19804
- /* @__PURE__ */ jsxs40("div", { className: "flex min-w-0 items-center gap-3 overflow-hidden", children: [
19805
- /* @__PURE__ */ jsxs40("div", { className: "relative shrink-0", children: [
19806
- /* @__PURE__ */ jsx58(
20046
+ /* @__PURE__ */ jsxs41("div", { className: "flex min-w-0 items-center gap-3 overflow-hidden", children: [
20047
+ /* @__PURE__ */ jsxs41("div", { className: "relative shrink-0", children: [
20048
+ /* @__PURE__ */ jsx59(
19807
20049
  ChatkitAvatar,
19808
20050
  {
19809
20051
  avatar: assistantAvatar,
@@ -19811,10 +20053,10 @@ function Chat({
19811
20053
  label: assistantTitle
19812
20054
  }
19813
20055
  ),
19814
- /* @__PURE__ */ jsx58("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
20056
+ /* @__PURE__ */ jsx59("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
19815
20057
  ] }),
19816
- /* @__PURE__ */ jsxs40("div", { className: "min-w-0", children: [
19817
- /* @__PURE__ */ jsx58(
20058
+ /* @__PURE__ */ jsxs41("div", { className: "min-w-0", children: [
20059
+ /* @__PURE__ */ jsx59(
19818
20060
  "h2",
19819
20061
  {
19820
20062
  className: "text-lg font-semibold truncate",
@@ -19822,7 +20064,7 @@ function Chat({
19822
20064
  children: assistantTitle
19823
20065
  }
19824
20066
  ),
19825
- /* @__PURE__ */ jsx58(
20067
+ /* @__PURE__ */ jsx59(
19826
20068
  "p",
19827
20069
  {
19828
20070
  className: "truncate text-xs text-muted-foreground",
@@ -19832,8 +20074,8 @@ function Chat({
19832
20074
  )
19833
20075
  ] })
19834
20076
  ] }),
19835
- /* @__PURE__ */ jsxs40("div", { className: "flex items-center gap-1", children: [
19836
- taskSummaryAvailable && /* @__PURE__ */ jsx58(
20077
+ /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-1", children: [
20078
+ taskSummaryAvailable && /* @__PURE__ */ jsx59(
19837
20079
  TaskSummaryTrigger,
19838
20080
  {
19839
20081
  ...taskSummaryProps,
@@ -19842,8 +20084,9 @@ function Chat({
19842
20084
  onOpenChange: handleTaskSummaryOpenChange
19843
20085
  }
19844
20086
  ),
19845
- canMinimizeToPet && /* @__PURE__ */ jsxs40(Tooltip, { children: [
19846
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx58(
20087
+ /* @__PURE__ */ jsx59(WorkbenchToggleButton, {}),
20088
+ canMinimizeToPet && /* @__PURE__ */ jsxs41(Tooltip, { children: [
20089
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx59(
19847
20090
  "button",
19848
20091
  {
19849
20092
  type: "button",
@@ -19854,13 +20097,13 @@ function Chat({
19854
20097
  "transition-colors duration-150"
19855
20098
  ),
19856
20099
  "aria-label": t("chat.minimizeToPet"),
19857
- children: /* @__PURE__ */ jsx58(Minus, { size: 16 })
20100
+ children: /* @__PURE__ */ jsx59(Minus, { size: 16 })
19858
20101
  }
19859
20102
  ) }) }),
19860
- /* @__PURE__ */ jsx58(TooltipContent, { side: "bottom", children: t("chat.minimizeToPet") })
20103
+ /* @__PURE__ */ jsx59(TooltipContent, { side: "bottom", children: t("chat.minimizeToPet") })
19861
20104
  ] }),
19862
- /* @__PURE__ */ jsxs40(Tooltip, { children: [
19863
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx58(
20105
+ /* @__PURE__ */ jsxs41(Tooltip, { children: [
20106
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx59(
19864
20107
  "button",
19865
20108
  {
19866
20109
  type: "button",
@@ -19871,14 +20114,14 @@ function Chat({
19871
20114
  "transition-colors duration-150"
19872
20115
  ),
19873
20116
  "aria-label": t("settings.open"),
19874
- children: /* @__PURE__ */ jsx58(Settings2, { size: 16 })
20117
+ children: /* @__PURE__ */ jsx59(Settings2, { size: 16 })
19875
20118
  }
19876
20119
  ) }) }),
19877
- /* @__PURE__ */ jsx58(TooltipContent, { side: "bottom", children: t("settings.open") })
20120
+ /* @__PURE__ */ jsx59(TooltipContent, { side: "bottom", children: t("settings.open") })
19878
20121
  ] }),
19879
- history?.enabled !== false && /* @__PURE__ */ jsxs40(Fragment9, { children: [
19880
- /* @__PURE__ */ jsxs40(Tooltip, { children: [
19881
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx58(
20122
+ history?.enabled !== false && /* @__PURE__ */ jsxs41(Fragment10, { children: [
20123
+ /* @__PURE__ */ jsxs41(Tooltip, { children: [
20124
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx59(
19882
20125
  "button",
19883
20126
  {
19884
20127
  type: "button",
@@ -19891,19 +20134,21 @@ function Chat({
19891
20134
  "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed"
19892
20135
  ),
19893
20136
  "aria-label": t("history.newThread"),
19894
- children: /* @__PURE__ */ jsx58(Pencil4, { size: 16 })
20137
+ children: /* @__PURE__ */ jsx59(Pencil4, { size: 16 })
19895
20138
  }
19896
20139
  ) }) }),
19897
- /* @__PURE__ */ jsx58(TooltipContent, { side: "bottom", children: t("history.newThread") })
20140
+ /* @__PURE__ */ jsx59(TooltipContent, { side: "bottom", children: t("history.newThread") })
19898
20141
  ] }),
19899
- /* @__PURE__ */ jsx58(
20142
+ /* @__PURE__ */ jsx59(
19900
20143
  HistorySidebar,
19901
20144
  {
19902
20145
  threads,
19903
20146
  currentThreadId: stream.threadId ?? void 0,
19904
20147
  onNewThread: handleNewThread,
20148
+ onRefresh: refreshThreads,
19905
20149
  onSelectThread: handleSelectThread,
19906
20150
  onDeleteThread: handleDeleteThread,
20151
+ isRefreshing: isThreadsLoading,
19907
20152
  showDelete: history?.showDelete !== false,
19908
20153
  disabled: missingConfig || isThreadsLoading || isHistoryLoading
19909
20154
  }
@@ -19913,7 +20158,7 @@ function Chat({
19913
20158
  ]
19914
20159
  }
19915
20160
  ),
19916
- showMessageNavigation && /* @__PURE__ */ jsx58(
20161
+ showMessageNavigation && /* @__PURE__ */ jsx59(
19917
20162
  MessageNavigator,
19918
20163
  {
19919
20164
  items: messageNavigationItems,
@@ -19924,18 +20169,18 @@ function Chat({
19924
20169
  tagsOverflowLabel: (count) => t("message.navigation.moreTags", { count })
19925
20170
  }
19926
20171
  ),
19927
- /* @__PURE__ */ jsxs40(
20172
+ /* @__PURE__ */ jsxs41(
19928
20173
  "div",
19929
20174
  {
19930
20175
  "data-slot": "chatkit-chat-content",
19931
20176
  className: "mx-auto w-full flex-1 p-4",
19932
20177
  style: chatColumnStyle,
19933
20178
  children: [
19934
- errorMessage && /* @__PURE__ */ jsx58("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
19935
- historyError && /* @__PURE__ */ jsx58("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
19936
- showMissingConfig && /* @__PURE__ */ jsx58("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: missingConfigDetailMessage }),
19937
- isHistoryLoading && /* @__PURE__ */ jsx58("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
19938
- messages.length === 0 && !canLoadMoreMessages ? /* @__PURE__ */ jsx58(
20179
+ errorMessage && /* @__PURE__ */ jsx59("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
20180
+ historyError && /* @__PURE__ */ jsx59("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
20181
+ showMissingConfig && /* @__PURE__ */ jsx59("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: missingConfigDetailMessage }),
20182
+ isHistoryLoading && /* @__PURE__ */ jsx59("div", { className: "mb-4 rounded-lg border border-muted px-3 py-2 text-sm text-muted-foreground", children: t("chat.loadingThread") }),
20183
+ messages.length === 0 && !canLoadMoreMessages ? /* @__PURE__ */ jsx59(
19939
20184
  StartScreen,
19940
20185
  {
19941
20186
  startScreen,
@@ -19944,10 +20189,10 @@ function Chat({
19944
20189
  promptSendDisabled: isSubmissionBlocked,
19945
20190
  promptEditDisabled: isPromptEditDisabled
19946
20191
  }
19947
- ) : /* @__PURE__ */ jsxs40("div", { className: "space-y-4", children: [
19948
- canLoadMoreMessages && /* @__PURE__ */ jsxs40("div", { className: "flex items-center gap-3 py-1", children: [
19949
- /* @__PURE__ */ jsx58("div", { className: "h-px min-w-8 flex-1 bg-border" }),
19950
- /* @__PURE__ */ jsx58(
20192
+ ) : /* @__PURE__ */ jsxs41("div", { className: "space-y-4", children: [
20193
+ canLoadMoreMessages && /* @__PURE__ */ jsxs41("div", { className: "flex items-center gap-3 py-1", children: [
20194
+ /* @__PURE__ */ jsx59("div", { className: "h-px min-w-8 flex-1 bg-border" }),
20195
+ /* @__PURE__ */ jsx59(
19951
20196
  Button,
19952
20197
  {
19953
20198
  type: "button",
@@ -19959,7 +20204,7 @@ function Chat({
19959
20204
  children: isLoadingMoreMessages ? t("chat.loadingMoreMessages") : t("chat.loadMoreMessages")
19960
20205
  }
19961
20206
  ),
19962
- /* @__PURE__ */ jsx58("div", { className: "h-px min-w-8 flex-1 bg-border" })
20207
+ /* @__PURE__ */ jsx59("div", { className: "h-px min-w-8 flex-1 bg-border" })
19963
20208
  ] }),
19964
20209
  messages.map((message, index) => {
19965
20210
  const messageType = String(message.type);
@@ -20003,7 +20248,7 @@ function Chat({
20003
20248
  if (!isAssistantMessage && !hasPlainRenderableContent && !hasHumanAttachments && humanRuntimeCapabilityOptions.length === 0 && humanReferences.length === 0) {
20004
20249
  return null;
20005
20250
  }
20006
- return /* @__PURE__ */ jsx58(
20251
+ return /* @__PURE__ */ jsx59(
20007
20252
  "div",
20008
20253
  {
20009
20254
  ref: (node) => setMessageNavigationAnchor(messageNavigationId, node),
@@ -20013,7 +20258,7 @@ function Chat({
20013
20258
  message.type === "human" ? "justify-end" : "justify-start -ml-1"
20014
20259
  // AI messages: slightly closer to left
20015
20260
  ),
20016
- children: /* @__PURE__ */ jsxs40(
20261
+ children: /* @__PURE__ */ jsxs41(
20017
20262
  "div",
20018
20263
  {
20019
20264
  className: cn(
@@ -20021,7 +20266,7 @@ function Chat({
20021
20266
  isAssistantMessage && "min-w-0 flex-1"
20022
20267
  ),
20023
20268
  children: [
20024
- /* @__PURE__ */ jsx58(
20269
+ /* @__PURE__ */ jsx59(
20025
20270
  "div",
20026
20271
  {
20027
20272
  ...canQuoteMessage ? {
@@ -20033,7 +20278,7 @@ function Chat({
20033
20278
  message.type === "human" ? "bg-primary text-primary-foreground px-4 py-2.5" : message.type === "system" ? "bg-muted text-muted-foreground text-xs px-4 py-2.5" : "py-1 text-chat-foreground"
20034
20279
  // AI messages: use chat-specific foreground color
20035
20280
  ),
20036
- children: isAssistantMessage ? /* @__PURE__ */ jsx58(
20281
+ children: isAssistantMessage ? /* @__PURE__ */ jsx59(
20037
20282
  AssistantMessage,
20038
20283
  {
20039
20284
  message: {
@@ -20053,14 +20298,14 @@ function Chat({
20053
20298
  apiUrl: stream.apiUrl,
20054
20299
  pet: effectivePet
20055
20300
  }
20056
- ) : /* @__PURE__ */ jsxs40(Fragment9, { children: [
20057
- message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx58(
20301
+ ) : /* @__PURE__ */ jsxs41(Fragment10, { children: [
20302
+ message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx59(
20058
20303
  HumanRuntimeCapabilityChips,
20059
20304
  {
20060
20305
  options: humanRuntimeCapabilityOptions
20061
20306
  }
20062
20307
  ),
20063
- message.type === "human" && humanReferences.length > 0 && /* @__PURE__ */ jsx58("div", { className: "mb-2 flex flex-wrap gap-1.5", children: humanReferences.map((reference) => /* @__PURE__ */ jsx58(
20308
+ message.type === "human" && humanReferences.length > 0 && /* @__PURE__ */ jsx59("div", { className: "mb-2 flex flex-wrap gap-1.5", children: humanReferences.map((reference) => /* @__PURE__ */ jsx59(
20064
20309
  ReferenceChip,
20065
20310
  {
20066
20311
  reference,
@@ -20068,29 +20313,29 @@ function Chat({
20068
20313
  },
20069
20314
  getReferenceKey(reference)
20070
20315
  )) }),
20071
- message.type === "human" && humanAttachments.length > 0 && /* @__PURE__ */ jsx58("div", { className: "flex flex-wrap gap-1.5 mb-2", children: humanAttachments.map((file, fileIndex) => /* @__PURE__ */ jsxs40(
20316
+ message.type === "human" && humanAttachments.length > 0 && /* @__PURE__ */ jsx59("div", { className: "flex flex-wrap gap-1.5 mb-2", children: humanAttachments.map((file, fileIndex) => /* @__PURE__ */ jsxs41(
20072
20317
  "div",
20073
20318
  {
20074
20319
  className: "flex items-center gap-1.5 rounded-md bg-primary-foreground/20 px-2 py-1 text-xs",
20075
20320
  children: [
20076
- /* @__PURE__ */ jsx58(FileText5, { size: 12 }),
20077
- /* @__PURE__ */ jsx58("span", { className: "max-w-[100px] truncate", children: file.originalName ?? file.id })
20321
+ /* @__PURE__ */ jsx59(FileText5, { size: 12 }),
20322
+ /* @__PURE__ */ jsx59("span", { className: "max-w-[100px] truncate", children: file.originalName ?? file.id })
20078
20323
  ]
20079
20324
  },
20080
20325
  fileIndex
20081
20326
  )) }),
20082
- Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx58(
20327
+ Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx59(
20083
20328
  "p",
20084
20329
  {
20085
20330
  className: "wrap-break-word text-sm leading-relaxed",
20086
20331
  children: formatMessageContent(part)
20087
20332
  },
20088
20333
  `${part.type}-${partIndex}`
20089
- )) : /* @__PURE__ */ jsx58("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
20334
+ )) : /* @__PURE__ */ jsx59("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
20090
20335
  ] })
20091
20336
  }
20092
20337
  ),
20093
- /* @__PURE__ */ jsx58(
20338
+ /* @__PURE__ */ jsx59(
20094
20339
  MessageActions,
20095
20340
  {
20096
20341
  content: messageContent,
@@ -20128,7 +20373,7 @@ function Chat({
20128
20373
  stream.isLoading,
20129
20374
  { now: streamingNow }
20130
20375
  );
20131
- return /* @__PURE__ */ jsx58("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx58("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsx58(
20376
+ return /* @__PURE__ */ jsx59("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx59("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsx59(
20132
20377
  AssistantStreamingIndicator,
20133
20378
  {
20134
20379
  status: fallbackStreamingStatus ?? "loading"
@@ -20139,7 +20384,7 @@ function Chat({
20139
20384
  ]
20140
20385
  }
20141
20386
  ),
20142
- !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx58("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ jsx58(
20387
+ !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx59("div", { className: "sticky bottom-20 z-20 flex justify-center px-4 pointer-events-none", children: /* @__PURE__ */ jsx59(
20143
20388
  Button,
20144
20389
  {
20145
20390
  type: "button",
@@ -20152,10 +20397,10 @@ function Chat({
20152
20397
  onClick: () => scrollToBottom(true, true),
20153
20398
  "aria-label": t("chat.scrollToBottom"),
20154
20399
  title: t("chat.scrollToBottom"),
20155
- children: /* @__PURE__ */ jsx58(ArrowDown2, { size: 16 })
20400
+ children: /* @__PURE__ */ jsx59(ArrowDown2, { size: 16 })
20156
20401
  }
20157
20402
  ) }),
20158
- quoteSelection && /* @__PURE__ */ jsx58(
20403
+ quoteSelection && /* @__PURE__ */ jsx59(
20159
20404
  "div",
20160
20405
  {
20161
20406
  className: "pointer-events-none fixed z-50",
@@ -20164,7 +20409,7 @@ function Chat({
20164
20409
  left: `${quoteSelection.left}px`,
20165
20410
  transform: "translateX(-50%)"
20166
20411
  },
20167
- children: /* @__PURE__ */ jsxs40(
20412
+ children: /* @__PURE__ */ jsxs41(
20168
20413
  Button,
20169
20414
  {
20170
20415
  type: "button",
@@ -20176,22 +20421,22 @@ function Chat({
20176
20421
  "aria-label": t("composer.quoteSelection"),
20177
20422
  title: t("composer.quoteSelection"),
20178
20423
  children: [
20179
- /* @__PURE__ */ jsx58(Quote, { size: 14 }),
20424
+ /* @__PURE__ */ jsx59(Quote, { size: 14 }),
20180
20425
  t("composer.quoteSelection")
20181
20426
  ]
20182
20427
  }
20183
20428
  )
20184
20429
  }
20185
20430
  ),
20186
- /* @__PURE__ */ jsxs40(
20431
+ /* @__PURE__ */ jsxs41(
20187
20432
  "div",
20188
20433
  {
20189
20434
  "data-slot": "chatkit-chat-composer",
20190
20435
  className: "mx-auto w-full p-2 sticky bottom-0 z-10 bg-background",
20191
20436
  style: chatColumnStyle,
20192
20437
  children: [
20193
- threadErrorMessage && /* @__PURE__ */ jsx58("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive overflow-auto", children: threadErrorMessage }),
20194
- /* @__PURE__ */ jsx58(
20438
+ threadErrorMessage && /* @__PURE__ */ jsx59("div", { className: "mb-3 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive overflow-auto", children: threadErrorMessage }),
20439
+ /* @__PURE__ */ jsx59(
20195
20440
  ChatAttachments,
20196
20441
  {
20197
20442
  ref: attachmentsRef,
@@ -20205,7 +20450,7 @@ function Chat({
20205
20450
  onStateChange: setAttachmentState
20206
20451
  }
20207
20452
  ),
20208
- references.length > 0 && /* @__PURE__ */ jsx58("div", { className: "mb-3 flex flex-wrap gap-2", children: references.map((reference) => /* @__PURE__ */ jsx58(
20453
+ references.length > 0 && /* @__PURE__ */ jsx59("div", { className: "mb-3 flex flex-wrap gap-2", children: references.map((reference) => /* @__PURE__ */ jsx59(
20209
20454
  ReferenceChip,
20210
20455
  {
20211
20456
  reference,
@@ -20219,7 +20464,7 @@ function Chat({
20219
20464
  },
20220
20465
  getReferenceKey(reference)
20221
20466
  )) }),
20222
- /* @__PURE__ */ jsx58(
20467
+ /* @__PURE__ */ jsx59(
20223
20468
  DetachedRunRuntimeCapabilities,
20224
20469
  {
20225
20470
  options: detachedRunRuntimeCapabilityOptions,
@@ -20228,7 +20473,7 @@ function Chat({
20228
20473
  onRemove: removeRunRuntimeCapability
20229
20474
  }
20230
20475
  ),
20231
- showGoalStatus && /* @__PURE__ */ jsxs40(
20476
+ showGoalStatus && /* @__PURE__ */ jsxs41(
20232
20477
  "div",
20233
20478
  {
20234
20479
  className: cn(
@@ -20236,7 +20481,7 @@ function Chat({
20236
20481
  isGoalObjectiveExpanded ? "items-start" : "items-center"
20237
20482
  ),
20238
20483
  children: [
20239
- /* @__PURE__ */ jsx58(
20484
+ /* @__PURE__ */ jsx59(
20240
20485
  Target3,
20241
20486
  {
20242
20487
  className: cn(
@@ -20245,13 +20490,13 @@ function Chat({
20245
20490
  )
20246
20491
  }
20247
20492
  ),
20248
- /* @__PURE__ */ jsxs40("div", { className: "min-w-0 flex-1", children: [
20249
- /* @__PURE__ */ jsxs40("div", { className: "flex min-w-0 items-center gap-2", children: [
20250
- /* @__PURE__ */ jsx58("span", { className: "font-medium", children: t("chat.goal.label") }),
20251
- threadGoal && /* @__PURE__ */ jsx58("span", { className: "shrink-0 rounded-md bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground", children: t(`chat.goal.status.${threadGoal.status}`) }),
20252
- isGoalLoading && /* @__PURE__ */ jsx58(Loader210, { className: "size-3 animate-spin text-muted-foreground" })
20493
+ /* @__PURE__ */ jsxs41("div", { className: "min-w-0 flex-1", children: [
20494
+ /* @__PURE__ */ jsxs41("div", { className: "flex min-w-0 items-center gap-2", children: [
20495
+ /* @__PURE__ */ jsx59("span", { className: "font-medium", children: t("chat.goal.label") }),
20496
+ threadGoal && /* @__PURE__ */ jsx59("span", { className: "shrink-0 rounded-md bg-muted px-1.5 py-0.5 text-[11px] text-muted-foreground", children: t(`chat.goal.status.${threadGoal.status}`) }),
20497
+ isGoalLoading && /* @__PURE__ */ jsx59(Loader211, { className: "size-3 animate-spin text-muted-foreground" })
20253
20498
  ] }),
20254
- /* @__PURE__ */ jsx58(
20499
+ /* @__PURE__ */ jsx59(
20255
20500
  "div",
20256
20501
  {
20257
20502
  className: cn(
@@ -20261,13 +20506,13 @@ function Chat({
20261
20506
  children: goalError || threadGoal?.objective
20262
20507
  }
20263
20508
  ),
20264
- threadGoal && /* @__PURE__ */ jsx58("div", { className: "mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx58("span", { children: t("chat.goal.elapsed", {
20509
+ threadGoal && /* @__PURE__ */ jsx59("div", { className: "mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx59("span", { children: t("chat.goal.elapsed", {
20265
20510
  elapsed: formatGoalElapsed(displayedGoalElapsedSeconds)
20266
20511
  }) }) })
20267
20512
  ] }),
20268
- threadGoal && /* @__PURE__ */ jsxs40("div", { className: "flex shrink-0 items-center gap-1", children: [
20269
- /* @__PURE__ */ jsxs40(Tooltip, { children: [
20270
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58(
20513
+ threadGoal && /* @__PURE__ */ jsxs41("div", { className: "flex shrink-0 items-center gap-1", children: [
20514
+ /* @__PURE__ */ jsxs41(Tooltip, { children: [
20515
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59(
20271
20516
  Button,
20272
20517
  {
20273
20518
  type: "button",
@@ -20278,13 +20523,13 @@ function Chat({
20278
20523
  const prefix = "/goal edit ";
20279
20524
  setComposerText(`${prefix}${threadGoal.objective}`);
20280
20525
  },
20281
- children: /* @__PURE__ */ jsx58(Pencil4, { className: "size-3" })
20526
+ children: /* @__PURE__ */ jsx59(Pencil4, { className: "size-3" })
20282
20527
  }
20283
20528
  ) }),
20284
- /* @__PURE__ */ jsx58(TooltipContent, { children: t("chat.goal.edit") })
20529
+ /* @__PURE__ */ jsx59(TooltipContent, { children: t("chat.goal.edit") })
20285
20530
  ] }),
20286
- /* @__PURE__ */ jsxs40(Tooltip, { children: [
20287
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58(
20531
+ /* @__PURE__ */ jsxs41(Tooltip, { children: [
20532
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59(
20288
20533
  Button,
20289
20534
  {
20290
20535
  type: "button",
@@ -20300,13 +20545,13 @@ function Chat({
20300
20545
  executionType: "insert_invocation"
20301
20546
  }
20302
20547
  }),
20303
- children: threadGoal.status === "paused" ? /* @__PURE__ */ jsx58(Play, { className: "size-3" }) : /* @__PURE__ */ jsx58(Pause, { className: "size-3" })
20548
+ children: threadGoal.status === "paused" ? /* @__PURE__ */ jsx59(Play, { className: "size-3" }) : /* @__PURE__ */ jsx59(Pause, { className: "size-3" })
20304
20549
  }
20305
20550
  ) }),
20306
- /* @__PURE__ */ jsx58(TooltipContent, { children: threadGoal.status === "paused" ? t("chat.goal.resume") : t("chat.goal.pause") })
20551
+ /* @__PURE__ */ jsx59(TooltipContent, { children: threadGoal.status === "paused" ? t("chat.goal.resume") : t("chat.goal.pause") })
20307
20552
  ] }),
20308
- /* @__PURE__ */ jsxs40(Tooltip, { children: [
20309
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58(
20553
+ /* @__PURE__ */ jsxs41(Tooltip, { children: [
20554
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59(
20310
20555
  Button,
20311
20556
  {
20312
20557
  type: "button",
@@ -20322,13 +20567,13 @@ function Chat({
20322
20567
  executionType: "insert_invocation"
20323
20568
  }
20324
20569
  }),
20325
- children: /* @__PURE__ */ jsx58(Trash23, { className: "size-3" })
20570
+ children: /* @__PURE__ */ jsx59(Trash23, { className: "size-3" })
20326
20571
  }
20327
20572
  ) }),
20328
- /* @__PURE__ */ jsx58(TooltipContent, { children: t("chat.goal.clear") })
20573
+ /* @__PURE__ */ jsx59(TooltipContent, { children: t("chat.goal.clear") })
20329
20574
  ] }),
20330
- threadGoal.objective && !goalError && /* @__PURE__ */ jsxs40(Tooltip, { children: [
20331
- /* @__PURE__ */ jsx58(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx58(
20575
+ threadGoal.objective && !goalError && /* @__PURE__ */ jsxs41(Tooltip, { children: [
20576
+ /* @__PURE__ */ jsx59(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx59(
20332
20577
  Button,
20333
20578
  {
20334
20579
  type: "button",
@@ -20337,7 +20582,7 @@ function Chat({
20337
20582
  "aria-expanded": isGoalObjectiveExpanded,
20338
20583
  "aria-label": isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective"),
20339
20584
  onClick: () => setIsGoalObjectiveExpanded((expanded) => !expanded),
20340
- children: /* @__PURE__ */ jsx58(
20585
+ children: /* @__PURE__ */ jsx59(
20341
20586
  ChevronDown5,
20342
20587
  {
20343
20588
  className: cn(
@@ -20348,13 +20593,13 @@ function Chat({
20348
20593
  )
20349
20594
  }
20350
20595
  ) }),
20351
- /* @__PURE__ */ jsx58(TooltipContent, { children: isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective") })
20596
+ /* @__PURE__ */ jsx59(TooltipContent, { children: isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective") })
20352
20597
  ] })
20353
20598
  ] })
20354
20599
  ]
20355
20600
  }
20356
20601
  ),
20357
- /* @__PURE__ */ jsx58(
20602
+ /* @__PURE__ */ jsx59(
20358
20603
  PendingRuntimeServices,
20359
20604
  {
20360
20605
  state: stream.runtimeActivities.sandboxServices,
@@ -20363,7 +20608,7 @@ function Chat({
20363
20608
  className: hasPendingTodos || hasPendingFollowUps ? "mb-2" : void 0
20364
20609
  }
20365
20610
  ),
20366
- /* @__PURE__ */ jsx58(
20611
+ /* @__PURE__ */ jsx59(
20367
20612
  PendingTodos,
20368
20613
  {
20369
20614
  snapshot: stream.todos,
@@ -20371,7 +20616,7 @@ function Chat({
20371
20616
  className: hasPendingFollowUps ? "mb-2" : void 0
20372
20617
  }
20373
20618
  ),
20374
- /* @__PURE__ */ jsx58(
20619
+ /* @__PURE__ */ jsx59(
20375
20620
  PendingFollowUps,
20376
20621
  {
20377
20622
  items: pendingFollowUps,
@@ -20384,7 +20629,7 @@ function Chat({
20384
20629
  attachToComposer: true
20385
20630
  }
20386
20631
  ),
20387
- /* @__PURE__ */ jsx58(
20632
+ /* @__PURE__ */ jsx59(
20388
20633
  RequestUserInputPanel,
20389
20634
  {
20390
20635
  request: stream.pendingRequestUserInput,
@@ -20393,7 +20638,7 @@ function Chat({
20393
20638
  attachToComposer: true
20394
20639
  }
20395
20640
  ),
20396
- /* @__PURE__ */ jsx58(
20641
+ /* @__PURE__ */ jsx59(
20397
20642
  HITLApprovalPanel,
20398
20643
  {
20399
20644
  request: stream.pendingHITLRequest,
@@ -20402,7 +20647,7 @@ function Chat({
20402
20647
  attachToComposer: true
20403
20648
  }
20404
20649
  ),
20405
- runtimeCapabilityPalette && /* @__PURE__ */ jsx58(
20650
+ runtimeCapabilityPalette && /* @__PURE__ */ jsx59(
20406
20651
  SlashPalette,
20407
20652
  {
20408
20653
  palette: runtimeCapabilityPalette,
@@ -20416,7 +20661,7 @@ function Chat({
20416
20661
  onSelect: selectSlashPaletteOption
20417
20662
  }
20418
20663
  ),
20419
- /* @__PURE__ */ jsx58("form", { className: "flex items-end", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs40(
20664
+ /* @__PURE__ */ jsx59("form", { className: "flex items-end", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs41(
20420
20665
  "div",
20421
20666
  {
20422
20667
  "data-slot": "composer-input-shell",
@@ -20430,7 +20675,7 @@ function Chat({
20430
20675
  composerInputRoundedClass
20431
20676
  ),
20432
20677
  children: [
20433
- /* @__PURE__ */ jsx58(
20678
+ /* @__PURE__ */ jsx59(
20434
20679
  "div",
20435
20680
  {
20436
20681
  ref: composerInputRef,
@@ -20452,19 +20697,19 @@ function Chat({
20452
20697
  (missingConfig || isHistoryLoading || hasPendingInteractiveRequest) && "cursor-not-allowed opacity-50"
20453
20698
  ),
20454
20699
  children: renderedComposerParts.map(
20455
- (part, index) => part.type === "text" ? /* @__PURE__ */ jsx58(React54.Fragment, { children: part.text }, `text-${index}`) : /* @__PURE__ */ jsx58(ComposerCapabilityToken, { part }, part.key)
20700
+ (part, index) => part.type === "text" ? /* @__PURE__ */ jsx59(React55.Fragment, { children: part.text }, `text-${index}`) : /* @__PURE__ */ jsx59(ComposerCapabilityToken, { part }, part.key)
20456
20701
  )
20457
20702
  },
20458
20703
  composerDomVersion
20459
20704
  ),
20460
- /* @__PURE__ */ jsxs40(
20705
+ /* @__PURE__ */ jsxs41(
20461
20706
  "div",
20462
20707
  {
20463
20708
  "data-slot": "composer-action-bar",
20464
20709
  className: "pointer-events-none absolute inset-x-1.5 bottom-1 flex min-h-10 items-center justify-between gap-2",
20465
20710
  children: [
20466
- /* @__PURE__ */ jsxs40("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center gap-1.5", children: [
20467
- /* @__PURE__ */ jsx58("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1.5", children: /* @__PURE__ */ jsx58(
20711
+ /* @__PURE__ */ jsxs41("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center gap-1.5", children: [
20712
+ /* @__PURE__ */ jsx59("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1.5", children: /* @__PURE__ */ jsx59(
20468
20713
  ComposerMenu,
20469
20714
  {
20470
20715
  composer,
@@ -20482,20 +20727,20 @@ function Chat({
20482
20727
  disabled: missingConfig || isHistoryLoading || hasPendingInteractiveRequest
20483
20728
  }
20484
20729
  ) }),
20485
- selectedTool && /* @__PURE__ */ jsxs40("span", { className: "pointer-events-auto inline-flex h-8 min-w-0 max-w-[14rem] shrink items-center gap-1.5 rounded-full bg-primary/10 px-2 text-xs font-medium text-primary transition-all duration-200", children: [
20486
- /* @__PURE__ */ jsx58("span", { className: "truncate", children: selectedTool.shortLabel ?? selectedTool.label }),
20487
- /* @__PURE__ */ jsx58(
20730
+ selectedTool && /* @__PURE__ */ jsxs41("span", { className: "pointer-events-auto inline-flex h-8 min-w-0 max-w-[14rem] shrink items-center gap-1.5 rounded-full bg-primary/10 px-2 text-xs font-medium text-primary transition-all duration-200", children: [
20731
+ /* @__PURE__ */ jsx59("span", { className: "truncate", children: selectedTool.shortLabel ?? selectedTool.label }),
20732
+ /* @__PURE__ */ jsx59(
20488
20733
  "button",
20489
20734
  {
20490
20735
  type: "button",
20491
20736
  onClick: () => setSelectedTool(null),
20492
20737
  className: "shrink-0 rounded-full p-0.5 text-primary/70 hover:bg-primary/10 hover:text-primary",
20493
- children: /* @__PURE__ */ jsx58(X7, { size: 12 })
20738
+ children: /* @__PURE__ */ jsx59(X9, { size: 12 })
20494
20739
  }
20495
20740
  )
20496
20741
  ] })
20497
20742
  ] }),
20498
- /* @__PURE__ */ jsx58("div", { className: "pointer-events-auto shrink-0", children: /* @__PURE__ */ jsx58(
20743
+ /* @__PURE__ */ jsx59("div", { className: "pointer-events-auto shrink-0", children: /* @__PURE__ */ jsx59(
20499
20744
  SendButton,
20500
20745
  {
20501
20746
  disabled: isSendDisabled,
@@ -20518,7 +20763,7 @@ function Chat({
20518
20763
  ]
20519
20764
  }
20520
20765
  ) }),
20521
- disclaimer?.text && /* @__PURE__ */ jsx58(
20766
+ disclaimer?.text && /* @__PURE__ */ jsx59(
20522
20767
  "p",
20523
20768
  {
20524
20769
  className: cn(
@@ -20528,14 +20773,14 @@ function Chat({
20528
20773
  children: disclaimer.text
20529
20774
  }
20530
20775
  ),
20531
- /* @__PURE__ */ jsxs40("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
20532
- /* @__PURE__ */ jsx58("span", { children: t("chat.poweredBy") }),
20533
- /* @__PURE__ */ jsx58(ContextUsageIndicator, { className: "absolute right-4" })
20776
+ /* @__PURE__ */ jsxs41("div", { className: "mt-2 flex items-center justify-center gap-2 text-xs text-muted-foreground", children: [
20777
+ /* @__PURE__ */ jsx59("span", { children: t("chat.poweredBy") }),
20778
+ /* @__PURE__ */ jsx59(ContextUsageIndicator, { className: "absolute right-4" })
20534
20779
  ] })
20535
20780
  ]
20536
20781
  }
20537
20782
  ),
20538
- /* @__PURE__ */ jsx58(
20783
+ /* @__PURE__ */ jsx59(
20539
20784
  SettingsSheet,
20540
20785
  {
20541
20786
  open: petSettingsOpen,
@@ -20545,11 +20790,11 @@ function Chat({
20545
20790
  onSave: savePetLocalSettings
20546
20791
  }
20547
20792
  ),
20548
- /* @__PURE__ */ jsx58(PetBridge, { pet: effectivePet, state: petAutoState })
20793
+ /* @__PURE__ */ jsx59(PetBridge, { pet: effectivePet, state: petAutoState })
20549
20794
  ]
20550
20795
  }
20551
20796
  ),
20552
- taskSummaryAvailable && taskSummaryDocked && taskSummaryOpen && /* @__PURE__ */ jsx58("div", { className: "pointer-events-none absolute right-5 top-3 z-20 max-h-[calc(100%-1.5rem)] w-80", children: /* @__PURE__ */ jsx58(
20797
+ taskSummaryAvailable && taskSummaryDocked && taskSummaryOpen && /* @__PURE__ */ jsx59("div", { className: "pointer-events-none absolute right-5 top-3 z-20 max-h-[calc(100%-1.5rem)] w-80", children: /* @__PURE__ */ jsx59(
20553
20798
  TaskSummaryPanel,
20554
20799
  {
20555
20800
  ...taskSummaryProps,
@@ -20562,10 +20807,10 @@ function Chat({
20562
20807
  }
20563
20808
 
20564
20809
  // src/components/ui/separator.tsx
20565
- import * as React55 from "react";
20566
- import { jsx as jsx59 } from "react/jsx-runtime";
20567
- var Separator = React55.forwardRef(
20568
- ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx59(
20810
+ import * as React56 from "react";
20811
+ import { jsx as jsx60 } from "react/jsx-runtime";
20812
+ var Separator = React56.forwardRef(
20813
+ ({ className, orientation = "horizontal", ...props }, ref) => /* @__PURE__ */ jsx60(
20569
20814
  "div",
20570
20815
  {
20571
20816
  ref,