@xpert-ai/chatkit-ui 0.5.15 → 0.5.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/dist/app/assets/{_baseUniq-9hdyHfR5.js → _baseUniq-CdqWVyDi.js} +1 -1
  2. package/dist/app/assets/{abap-y4N5ojeB.js → abap-DG6Ek7_c.js} +1 -1
  3. package/dist/app/assets/{abnf-CGxt_pi7.js → abnf-D4aLD9mZ.js} +1 -1
  4. package/dist/app/assets/{actionscript-DHtBtT7W.js → actionscript-B4H2PXyd.js} +1 -1
  5. package/dist/app/assets/{ada-CzTrTrOe.js → ada-DtM3Nnaa.js} +1 -1
  6. package/dist/app/assets/{agda-CV42rDct.js → agda-BDfZBc9b.js} +1 -1
  7. package/dist/app/assets/{al-B19rWg_7.js → al-CuMmj85N.js} +1 -1
  8. package/dist/app/assets/{antlr4-6j7higho.js → antlr4-CvOASiHP.js} +1 -1
  9. package/dist/app/assets/{apacheconf-BnTQXe7c.js → apacheconf-egtcsmgP.js} +1 -1
  10. package/dist/app/assets/{apex-CrGUf4vy.js → apex-aL2bFEJp.js} +1 -1
  11. package/dist/app/assets/{apl-CFYPxCJn.js → apl-CC_GmUZr.js} +1 -1
  12. package/dist/app/assets/{applescript-BZWvUcGU.js → applescript-DAxdm_ZL.js} +1 -1
  13. package/dist/app/assets/{aql-A5X6ON50.js → aql-CWpqz7Xs.js} +1 -1
  14. package/dist/app/assets/{arc-DfRbHjtJ.js → arc-BDGkEfCH.js} +1 -1
  15. package/dist/app/assets/{architectureDiagram-Q4EWVU46-bDnvhCp9.js → architectureDiagram-Q4EWVU46-CxmmRQKb.js} +1 -1
  16. package/dist/app/assets/{arduino-D-E6g3Ne.js → arduino-DeA-rcpQ.js} +1 -1
  17. package/dist/app/assets/{arff-CLPWjOWo.js → arff-DmVG-Rqm.js} +1 -1
  18. package/dist/app/assets/{asciidoc-unvw7QPv.js → asciidoc-TLFkcHSh.js} +1 -1
  19. package/dist/app/assets/{asm6502-D41umBFW.js → asm6502-C4Ip0b9p.js} +1 -1
  20. package/dist/app/assets/{asmatmel-alNRd3F9.js → asmatmel-thy6vzGi.js} +1 -1
  21. package/dist/app/assets/{aspnet-_0zU96S5.js → aspnet-DzllYmrW.js} +1 -1
  22. package/dist/app/assets/{autohotkey-BpMLT2LK.js → autohotkey-B8zy-gEV.js} +1 -1
  23. package/dist/app/assets/{autoit-mO3ghUI7.js → autoit-CkiepIGR.js} +1 -1
  24. package/dist/app/assets/{avisynth-DWLO42Rj.js → avisynth-_4CaW1AA.js} +1 -1
  25. package/dist/app/assets/{avro-idl-BBQRzylG.js → avro-idl-B5uauj2Y.js} +1 -1
  26. package/dist/app/assets/{bash-QIqJHBX-.js → bash-435vmYqx.js} +1 -1
  27. package/dist/app/assets/{basic-Bc5kyCr2.js → basic-CaYQWOe4.js} +1 -1
  28. package/dist/app/assets/{batch-4zRdbOHs.js → batch-BnbU0dwA.js} +1 -1
  29. package/dist/app/assets/{bbcode-Ketn398N.js → bbcode-ClK0qvV6.js} +1 -1
  30. package/dist/app/assets/{bicep-D2LZklJx.js → bicep-BNwB5eFu.js} +1 -1
  31. package/dist/app/assets/{birb-C5z-Tz7A.js → birb-pP0ceH0d.js} +1 -1
  32. package/dist/app/assets/{bison-BSdtws5Z.js → bison-kM83HWDk.js} +1 -1
  33. package/dist/app/assets/{blockDiagram-DXYQGD6D-C7-lDa8H.js → blockDiagram-DXYQGD6D-D_Y5pJpD.js} +1 -1
  34. package/dist/app/assets/{bnf-CzUBVS5p.js → bnf-XqmAKNgb.js} +1 -1
  35. package/dist/app/assets/{brainfuck-VF_hPzCx.js → brainfuck-DtES44L3.js} +1 -1
  36. package/dist/app/assets/{brightscript-DyjAyHnm.js → brightscript-CvjC2vRm.js} +1 -1
  37. package/dist/app/assets/{bro-DXD2kNH0.js → bro-BOO3M_vG.js} +1 -1
  38. package/dist/app/assets/{bsl-Dgcej-Ho.js → bsl-BnT3JyMb.js} +1 -1
  39. package/dist/app/assets/{c-B2MQTpqm.js → c-HSm0GKGX.js} +1 -1
  40. package/dist/app/assets/{c4Diagram-AHTNJAMY-B2bMwEb4.js → c4Diagram-AHTNJAMY-DWDSfX-E.js} +1 -1
  41. package/dist/app/assets/{cfscript-DATPhxH0.js → cfscript-BqD0iZt0.js} +1 -1
  42. package/dist/app/assets/{chaiscript-O52uWiyy.js → chaiscript-CBUa9IVb.js} +1 -1
  43. package/dist/app/assets/channel-BsvzoHJ-.js +1 -0
  44. package/dist/app/assets/{chunk-4BX2VUAB-Dr7WgjiQ.js → chunk-4BX2VUAB-G68_yQYv.js} +1 -1
  45. package/dist/app/assets/{chunk-4TB4RGXK-BG3Kd_Oz.js → chunk-4TB4RGXK-C8qWZWuz.js} +1 -1
  46. package/dist/app/assets/{chunk-55IACEB6-DyX9k3Y1.js → chunk-55IACEB6-D7_j-pa1.js} +1 -1
  47. package/dist/app/assets/{chunk-EDXVE4YY-pchaRAmm.js → chunk-EDXVE4YY-CIVEVHGi.js} +1 -1
  48. package/dist/app/assets/{chunk-FMBD7UC4-2yygKKXG.js → chunk-FMBD7UC4-BGwcTuE9.js} +1 -1
  49. package/dist/app/assets/{chunk-OYMX7WX6-2WusKNDh.js → chunk-OYMX7WX6-DiWZxi_A.js} +1 -1
  50. package/dist/app/assets/{chunk-QZHKN3VN-BZ5_Y8Zt.js → chunk-QZHKN3VN-C-YpJxwp.js} +1 -1
  51. package/dist/app/assets/{chunk-YZCP3GAM-_aa6WpMv.js → chunk-YZCP3GAM-QlE1i3zF.js} +1 -1
  52. package/dist/app/assets/{cil-KLF5l8H1.js → cil-KBR34Gqp.js} +1 -1
  53. package/dist/app/assets/classDiagram-6PBFFD2Q-CYjgx8Fr.js +1 -0
  54. package/dist/app/assets/classDiagram-v2-HSJHXN6E-CYjgx8Fr.js +1 -0
  55. package/dist/app/assets/{clike-D8oWEn5X.js → clike-Du4bbm-V.js} +1 -1
  56. package/dist/app/assets/{clojure-CT0PdwAd.js → clojure-BVHe2fH_.js} +1 -1
  57. package/dist/app/assets/clone-DbsXYxks.js +1 -0
  58. package/dist/app/assets/{cmake-Bo-pQuoI.js → cmake-LfltEGpZ.js} +1 -1
  59. package/dist/app/assets/{cobol-TNUQ4Zvz.js → cobol-CkSeF0to.js} +1 -1
  60. package/dist/app/assets/{coffeescript-COZuXnnc.js → coffeescript-CA0rPswf.js} +1 -1
  61. package/dist/app/assets/{concurnas-CndbEVcp.js → concurnas-PXz5fvZw.js} +1 -1
  62. package/dist/app/assets/{coq-CQF7xkg5.js → coq-IrOjIGL7.js} +1 -1
  63. package/dist/app/assets/{core-Ct-8nj69.js → core-DmoYxwYZ.js} +1 -1
  64. package/dist/app/assets/{cose-bilkent-S5V4N54A-COkBhJ5e.js → cose-bilkent-S5V4N54A-BOmveU-f.js} +1 -1
  65. package/dist/app/assets/{cpp-Cpt2kIfc.js → cpp-D1GZveGW.js} +1 -1
  66. package/dist/app/assets/{crystal-CC4A43sf.js → crystal-D8_W3h6-.js} +1 -1
  67. package/dist/app/assets/{csharp-DVX8Ptxd.js → csharp-DMr0pSHg.js} +1 -1
  68. package/dist/app/assets/{cshtml-DV8hsAFT.js → cshtml-DWsc6tEe.js} +1 -1
  69. package/dist/app/assets/{csp-BXIU2vr9.js → csp-BsffHyBO.js} +1 -1
  70. package/dist/app/assets/{css-hPXFq369.js → css-DftqNva8.js} +1 -1
  71. package/dist/app/assets/{css-extras-CRzZv0wt.js → css-extras-V_jK59dK.js} +1 -1
  72. package/dist/app/assets/{csv-DGM23MqA.js → csv-CAt3fUf2.js} +1 -1
  73. package/dist/app/assets/{cypher-CvafnXIa.js → cypher-DGhvVc6x.js} +1 -1
  74. package/dist/app/assets/{d-Bgz2Icvc.js → d-pY7u0cyQ.js} +1 -1
  75. package/dist/app/assets/{dagre-KV5264BT-COvMEU_C.js → dagre-KV5264BT-BCWr5q-a.js} +1 -1
  76. package/dist/app/assets/{dart-CsQMX65p.js → dart-BoHXdRLm.js} +1 -1
  77. package/dist/app/assets/{dataweave-7NSMtIoz.js → dataweave-T2yhDDoP.js} +1 -1
  78. package/dist/app/assets/{dax-DBH5GX3s.js → dax-9LuefO8-.js} +1 -1
  79. package/dist/app/assets/{dhall-Brj0ymLX.js → dhall-DPTyQCFs.js} +1 -1
  80. package/dist/app/assets/{diagram-5BDNPKRD-B62KSyFy.js → diagram-5BDNPKRD-DCpIhLj-.js} +1 -1
  81. package/dist/app/assets/{diagram-G4DWMVQ6-Bx19LSIi.js → diagram-G4DWMVQ6-CPbvjoKj.js} +1 -1
  82. package/dist/app/assets/{diagram-MMDJMWI5-BsD6FzFH.js → diagram-MMDJMWI5-C5KCxH6X.js} +1 -1
  83. package/dist/app/assets/{diagram-TYMM5635-W0Jp79ck.js → diagram-TYMM5635-BoWRoWWL.js} +1 -1
  84. package/dist/app/assets/{diff-CG5RwsI8.js → diff-CPrqhMrr.js} +1 -1
  85. package/dist/app/assets/{django-u_MMtcCx.js → django-Bmr0AE9I.js} +1 -1
  86. package/dist/app/assets/{dns-zone-file-B3Qz4Cjh.js → dns-zone-file-CVNIWnt5.js} +1 -1
  87. package/dist/app/assets/{docker-DoSgwNxw.js → docker-C_nohD9R.js} +1 -1
  88. package/dist/app/assets/{dot-Di4txxnz.js → dot-VJy9IudS.js} +1 -1
  89. package/dist/app/assets/{ebnf-E6Wus_Cg.js → ebnf-DRJfZtWN.js} +1 -1
  90. package/dist/app/assets/{editorconfig-Lhlz74Ag.js → editorconfig-CI0yOvrp.js} +1 -1
  91. package/dist/app/assets/{eiffel-UWWTQlxS.js → eiffel-BjzQ0RYg.js} +1 -1
  92. package/dist/app/assets/{ejs-ClYOd_ZG.js → ejs-CNG21MEH.js} +1 -1
  93. package/dist/app/assets/{elixir-CM0riPTA.js → elixir-C5gCfRcW.js} +1 -1
  94. package/dist/app/assets/{elm-CAE87IuH.js → elm-DfTUm9_v.js} +1 -1
  95. package/dist/app/assets/{erDiagram-SMLLAGMA-BBsk0oXF.js → erDiagram-SMLLAGMA-BN6ZY4jl.js} +1 -1
  96. package/dist/app/assets/{erb-zLjY2fAl.js → erb-Cpvn4OXN.js} +1 -1
  97. package/dist/app/assets/{erlang-CrvXKUc7.js → erlang-D7Wv7F6m.js} +1 -1
  98. package/dist/app/assets/{etlua-DxWXCLko.js → etlua-N2-g8XE3.js} +1 -1
  99. package/dist/app/assets/{excel-formula-CiH5d6mo.js → excel-formula-Cw4Ab24c.js} +1 -1
  100. package/dist/app/assets/{factor-CnItKGC9.js → factor-BStQHdsr.js} +1 -1
  101. package/dist/app/assets/{false-DLECb57n.js → false-BlEwh5Vd.js} +1 -1
  102. package/dist/app/assets/{firestore-security-rules-D8JjUoJD.js → firestore-security-rules-BoAPZA3m.js} +1 -1
  103. package/dist/app/assets/{flow-DT0Fnhbu.js → flow-CUBvjiZo.js} +1 -1
  104. package/dist/app/assets/{flowDiagram-DWJPFMVM-DVfHA-q_.js → flowDiagram-DWJPFMVM-D2Bjlr_z.js} +1 -1
  105. package/dist/app/assets/{fortran-DFlxq4UW.js → fortran-B1Sxq__Q.js} +1 -1
  106. package/dist/app/assets/{fsharp-DDme86W7.js → fsharp-BSMB546x.js} +1 -1
  107. package/dist/app/assets/{ftl-BwMSYXiB.js → ftl-BuKOtUHg.js} +1 -1
  108. package/dist/app/assets/{ganttDiagram-T4ZO3ILL-BX62svu-.js → ganttDiagram-T4ZO3ILL-CKhlQBbj.js} +1 -1
  109. package/dist/app/assets/{gap-BNsR5yzD.js → gap-C7esBRUR.js} +1 -1
  110. package/dist/app/assets/{gcode-CQfdO1HP.js → gcode-CSOoiF0K.js} +1 -1
  111. package/dist/app/assets/{gdscript-gl_2iPqv.js → gdscript-D8g2Ew_b.js} +1 -1
  112. package/dist/app/assets/{gedcom-C6dWfgdF.js → gedcom-Y6NV1dOA.js} +1 -1
  113. package/dist/app/assets/{gherkin-BV8Q-Ik0.js → gherkin-Ael2lJbZ.js} +1 -1
  114. package/dist/app/assets/{git-DHK1vesx.js → git-BrnMxv7k.js} +1 -1
  115. package/dist/app/assets/{gitGraphDiagram-UUTBAWPF-BGdDTywt.js → gitGraphDiagram-UUTBAWPF-LfGc0_4G.js} +1 -1
  116. package/dist/app/assets/{glsl-Cttd0JqG.js → glsl-eyBBuWEz.js} +1 -1
  117. package/dist/app/assets/{gml-B1A7NVBI.js → gml-CIyVuxTV.js} +1 -1
  118. package/dist/app/assets/{gn-JTqPhQly.js → gn-BoEixtoM.js} +1 -1
  119. package/dist/app/assets/{go-DPP_uL2Z.js → go-PMtEnveV.js} +1 -1
  120. package/dist/app/assets/{go-module-DbFHis62.js → go-module-BITIjqE7.js} +1 -1
  121. package/dist/app/assets/{graph-Bvte0M4G.js → graph-Db4YdjHy.js} +1 -1
  122. package/dist/app/assets/{graphql-DmdIpbmB.js → graphql-BNykKyYV.js} +1 -1
  123. package/dist/app/assets/{groovy-DsONrbhy.js → groovy-UP4lI3F2.js} +1 -1
  124. package/dist/app/assets/{haml-Dt5fqj4m.js → haml-D5-Oeil3.js} +1 -1
  125. package/dist/app/assets/{handlebars-IWm0Rjeo.js → handlebars-rC5O1fKQ.js} +1 -1
  126. package/dist/app/assets/{haskell-CYqvIKUh.js → haskell-1MPzDJll.js} +1 -1
  127. package/dist/app/assets/{haxe-DNZaWUA6.js → haxe-CDQ14Qm9.js} +1 -1
  128. package/dist/app/assets/{hcl-BrFfKrsI.js → hcl-BrHSHT7r.js} +1 -1
  129. package/dist/app/assets/{hlsl-k83DlHUe.js → hlsl-ByJ0YyD8.js} +1 -1
  130. package/dist/app/assets/{hoon-BwGmnLFf.js → hoon-B4OItWIT.js} +1 -1
  131. package/dist/app/assets/{hpkp-DeruzFiI.js → hpkp-B-M7o-IY.js} +1 -1
  132. package/dist/app/assets/{hsts-9-LLFYdA.js → hsts-DPJNnaCG.js} +1 -1
  133. package/dist/app/assets/{http-C4MBAsdX.js → http-DoBNMUNG.js} +1 -1
  134. package/dist/app/assets/{ichigojam-BjuaS71I.js → ichigojam-CtW5s9_-.js} +1 -1
  135. package/dist/app/assets/{icon-B0i-wwut.js → icon-D-JQphN5.js} +1 -1
  136. package/dist/app/assets/{icu-message-format-eJ5-Ohmi.js → icu-message-format-ruU-kH-n.js} +1 -1
  137. package/dist/app/assets/{idris-DUmAppb-.js → idris-DnWSKw0X.js} +1 -1
  138. package/dist/app/assets/{iecst-AnSdtdbJ.js → iecst-Ci5w8cVm.js} +1 -1
  139. package/dist/app/assets/{ignore-BpkyQBzh.js → ignore-CXu1LoH2.js} +1 -1
  140. package/dist/app/assets/index-BYs7roX8.css +1 -0
  141. package/dist/app/assets/{index-BXQx0D-G.js → index-CEJlS2dp.js} +231 -231
  142. package/dist/app/assets/{infoDiagram-42DDH7IO-VnCCz30W.js → infoDiagram-42DDH7IO-CfplsLD4.js} +1 -1
  143. package/dist/app/assets/{inform7-BeHOP5Zh.js → inform7-CDxUTy2E.js} +1 -1
  144. package/dist/app/assets/{ini-CbPPFcs4.js → ini-DtN8RKTs.js} +1 -1
  145. package/dist/app/assets/{io-B8BGFXpt.js → io-COm0s1hx.js} +1 -1
  146. package/dist/app/assets/{ishikawaDiagram-UXIWVN3A-pUpo21Dr.js → ishikawaDiagram-UXIWVN3A-kVT7MqRm.js} +1 -1
  147. package/dist/app/assets/{j-CL5Cqy2S.js → j-D0zs7nnU.js} +1 -1
  148. package/dist/app/assets/{java-CRSZ4_i0.js → java-DX0EZWJL.js} +1 -1
  149. package/dist/app/assets/{javadoc-laXgJpIa.js → javadoc-Ct0le1Z6.js} +1 -1
  150. package/dist/app/assets/{javadoclike-BP-snd7e.js → javadoclike-DdyCh3Ml.js} +1 -1
  151. package/dist/app/assets/{javascript-j_7E8SeD.js → javascript-CqMb2XU5.js} +1 -1
  152. package/dist/app/assets/{javastacktrace-CD4IrClv.js → javastacktrace-gPffXgcv.js} +1 -1
  153. package/dist/app/assets/{jexl-Dp1-qlX6.js → jexl-xIqbcJ4L.js} +1 -1
  154. package/dist/app/assets/{jolie-DZ_hHQV4.js → jolie-UZATV5_w.js} +1 -1
  155. package/dist/app/assets/{journeyDiagram-VCZTEJTY-CzMRf4DY.js → journeyDiagram-VCZTEJTY-CcqrW3YN.js} +1 -1
  156. package/dist/app/assets/{jq-DkwgKP8o.js → jq-7K9kiw1a.js} +1 -1
  157. package/dist/app/assets/{js-extras-BjnvxeRw.js → js-extras-0lF_oqDI.js} +1 -1
  158. package/dist/app/assets/{js-templates-DZiqSSas.js → js-templates-Db6UNOsA.js} +1 -1
  159. package/dist/app/assets/{jsdoc-DIxcnHGw.js → jsdoc-DCS6XG5S.js} +1 -1
  160. package/dist/app/assets/{json-JqASQvqr.js → json-RXFeoV2Y.js} +1 -1
  161. package/dist/app/assets/{json5-DI2p3cKU.js → json5-RlAi90PW.js} +1 -1
  162. package/dist/app/assets/{jsonp-CP7LCInQ.js → jsonp-DOSjGjiK.js} +1 -1
  163. package/dist/app/assets/{jsstacktrace-BXNcxOuD.js → jsstacktrace-CXGC4Q7U.js} +1 -1
  164. package/dist/app/assets/{jsx-BOQSBv-m.js → jsx-ChPmvVoO.js} +1 -1
  165. package/dist/app/assets/{julia-CbvO5E_j.js → julia-CpFEfIO7.js} +1 -1
  166. package/dist/app/assets/{kanban-definition-6JOO6SKY-mcpkFjYC.js → kanban-definition-6JOO6SKY-CXaOHoj7.js} +1 -1
  167. package/dist/app/assets/{keepalived-Brl1UwyB.js → keepalived-BfciQnnM.js} +1 -1
  168. package/dist/app/assets/{keyman-Diwjm1-r.js → keyman-Ca5SVuI1.js} +1 -1
  169. package/dist/app/assets/{kotlin-BKZDWgsH.js → kotlin-S88hlBjn.js} +1 -1
  170. package/dist/app/assets/{kumir-BDMBH7lL.js → kumir-DG6o3rhN.js} +1 -1
  171. package/dist/app/assets/{kusto-DW7-bPDb.js → kusto-BQLO52bI.js} +1 -1
  172. package/dist/app/assets/{latex-BJdSHYdZ.js → latex-CfcJ3nQF.js} +1 -1
  173. package/dist/app/assets/{latte-BZ1XIgcZ.js → latte-BJxUJ_gi.js} +1 -1
  174. package/dist/app/assets/{layout-TszSIt1Y.js → layout-DUQlwvoW.js} +1 -1
  175. package/dist/app/assets/{less-hJWBNocb.js → less-IeSPRI_D.js} +1 -1
  176. package/dist/app/assets/{lilypond-CbQ9DblC.js → lilypond-CKi0LlX4.js} +1 -1
  177. package/dist/app/assets/{linear-BpYMP2cC.js → linear-BRaSI2Us.js} +1 -1
  178. package/dist/app/assets/{liquid-CdUQHvBV.js → liquid-CWLL6Srj.js} +1 -1
  179. package/dist/app/assets/{lisp-BxbBtxPt.js → lisp-cwdEE2gO.js} +1 -1
  180. package/dist/app/assets/{livescript-C5gTgPtX.js → livescript-BnHbVQm9.js} +1 -1
  181. package/dist/app/assets/{llvm-Bm7Rf7dU.js → llvm-IOZ65oFi.js} +1 -1
  182. package/dist/app/assets/{log-Dzfp6rwH.js → log-iR5kcnKw.js} +1 -1
  183. package/dist/app/assets/{lolcode-DBCWtmwh.js → lolcode-B2Je5E97.js} +1 -1
  184. package/dist/app/assets/{lua-DSwn1ZWT.js → lua-CxR4UFVY.js} +1 -1
  185. package/dist/app/assets/{magma-rFMMJRhy.js → magma-D8yVNW7j.js} +1 -1
  186. package/dist/app/assets/{makefile-BV53Gfpx.js → makefile-BwsVphsP.js} +1 -1
  187. package/dist/app/assets/{markdown-C1EQVW4O.js → markdown-DoIUfG6n.js} +1 -1
  188. package/dist/app/assets/{markup-iv8ZNCgp.js → markup-lSNw5NdD.js} +1 -1
  189. package/dist/app/assets/{markup-templating-DJDij_Hc.js → markup-templating-Dqecsm_5.js} +1 -1
  190. package/dist/app/assets/{matlab-B0c4hfFK.js → matlab-CYZZYmT0.js} +1 -1
  191. package/dist/app/assets/{maxscript-Dlhq7LWv.js → maxscript-CoVwzSKG.js} +1 -1
  192. package/dist/app/assets/{mel-BeVlAXHA.js → mel-CwGYOeaV.js} +1 -1
  193. package/dist/app/assets/{mermaid-eqTFwloS.js → mermaid-BbSlv0xT.js} +1 -1
  194. package/dist/app/assets/{min-CGAWvuO0.js → min-DcInW5uf.js} +1 -1
  195. package/dist/app/assets/{mindmap-definition-QFDTVHPH-CAH7tpSK.js → mindmap-definition-QFDTVHPH-B2tkKckz.js} +1 -1
  196. package/dist/app/assets/{mizar-DgcUJzeP.js → mizar-BAhpXtjk.js} +1 -1
  197. package/dist/app/assets/{mongodb-DEUSb5Ms.js → mongodb-Cx_vk1-h.js} +1 -1
  198. package/dist/app/assets/{monkey-CZ9HWoOK.js → monkey-Cp8-Sq3C.js} +1 -1
  199. package/dist/app/assets/{moonscript-Dvb9TLm6.js → moonscript-CT9x7rB1.js} +1 -1
  200. package/dist/app/assets/{n1ql-CyMHvsrH.js → n1ql-BxsKejG5.js} +1 -1
  201. package/dist/app/assets/{n4js-B_97r3VW.js → n4js-Cb2xMLYB.js} +1 -1
  202. package/dist/app/assets/{nand2tetris-hdl-pF2SYN8Z.js → nand2tetris-hdl-BCp78K37.js} +1 -1
  203. package/dist/app/assets/{naniscript-puXUSTvu.js → naniscript-DbYn6KX-.js} +1 -1
  204. package/dist/app/assets/{nasm-DH6-TBi3.js → nasm-8NRS9VNe.js} +1 -1
  205. package/dist/app/assets/{neon-Ce8N5E3x.js → neon-BmveA7rn.js} +1 -1
  206. package/dist/app/assets/{nevod-DjZ-qNQ5.js → nevod-C-o0U806.js} +1 -1
  207. package/dist/app/assets/{nginx-ClqxqDpv.js → nginx-CsPRsHth.js} +1 -1
  208. package/dist/app/assets/{nim-CLOp7ISH.js → nim-DjBoBJrI.js} +1 -1
  209. package/dist/app/assets/{nix-BUI1HHhR.js → nix-CfkFK_4X.js} +1 -1
  210. package/dist/app/assets/{nsis-CoZWs28s.js → nsis-oX0BO1CF.js} +1 -1
  211. package/dist/app/assets/{objectivec-D7oxiJtv.js → objectivec-DTrD7w8V.js} +1 -1
  212. package/dist/app/assets/{ocaml-BZADKYY4.js → ocaml-CvB-CUyk.js} +1 -1
  213. package/dist/app/assets/{opencl-D_x8M_l6.js → opencl-BBJBsX4d.js} +1 -1
  214. package/dist/app/assets/{openqasm-DUe_Xd8r.js → openqasm-DB7mfscI.js} +1 -1
  215. package/dist/app/assets/{oz-C0f0E8I7.js → oz-BvTx7AIJ.js} +1 -1
  216. package/dist/app/assets/{parigp-DXzTc1rx.js → parigp-C9t14Vny.js} +1 -1
  217. package/dist/app/assets/{parser-C_eB_SAO.js → parser-DGgh-9XZ.js} +1 -1
  218. package/dist/app/assets/{pascal-BuDaRABN.js → pascal-CBrywbV2.js} +1 -1
  219. package/dist/app/assets/{pascaligo-DsQ5vX0o.js → pascaligo-DlaweMAR.js} +1 -1
  220. package/dist/app/assets/{pcaxis-Dp8ons9r.js → pcaxis-BP161RoS.js} +1 -1
  221. package/dist/app/assets/{peoplecode-D9Dy5D6r.js → peoplecode-ClPNXeMD.js} +1 -1
  222. package/dist/app/assets/{perl-IW2mnDG4.js → perl-B82k98ZA.js} +1 -1
  223. package/dist/app/assets/{php-C9wJbpXc.js → php-O_5ku-VG.js} +1 -1
  224. package/dist/app/assets/{php-extras-Dd0NGkAH.js → php-extras-DWUC7Ivz.js} +1 -1
  225. package/dist/app/assets/{phpdoc-DcttAIG_.js → phpdoc-Bek4yNUS.js} +1 -1
  226. package/dist/app/assets/{pieDiagram-DEJITSTG-D4cgvpRm.js → pieDiagram-DEJITSTG-CYEVSkhe.js} +1 -1
  227. package/dist/app/assets/{plsql-CvlRFEAJ.js → plsql-BlaQ9IoK.js} +1 -1
  228. package/dist/app/assets/{powerquery-BMKyritt.js → powerquery-Cx3Q-AYE.js} +1 -1
  229. package/dist/app/assets/{powershell-CAfpBbTC.js → powershell-3RLc3t0u.js} +1 -1
  230. package/dist/app/assets/{processing-DjYuzcaq.js → processing-AnTfwD0V.js} +1 -1
  231. package/dist/app/assets/{prolog-Ce-zjLfE.js → prolog-OvZLjDSo.js} +1 -1
  232. package/dist/app/assets/{promql-B5pdwV0L.js → promql-CuPGcqxq.js} +1 -1
  233. package/dist/app/assets/{properties-BizCduLB.js → properties-CKY9tON-.js} +1 -1
  234. package/dist/app/assets/{protobuf-BeXj0NkT.js → protobuf-CSGANi1A.js} +1 -1
  235. package/dist/app/assets/{psl-CCOrF3fG.js → psl-sDRzvTjB.js} +1 -1
  236. package/dist/app/assets/{pug-DBfhqVrT.js → pug-DI3BTEgs.js} +1 -1
  237. package/dist/app/assets/{puppet-cskfrihC.js → puppet-Dt9puHvs.js} +1 -1
  238. package/dist/app/assets/{pure-uP7Go2xi.js → pure-BibINdVm.js} +1 -1
  239. package/dist/app/assets/{purebasic-BzxFuhCY.js → purebasic-lfEZm_bJ.js} +1 -1
  240. package/dist/app/assets/{purescript-DAclKDFj.js → purescript-CjgjVGu8.js} +1 -1
  241. package/dist/app/assets/{q-Dj4c9jzw.js → q-CKYhNuGi.js} +1 -1
  242. package/dist/app/assets/{qml-C_WQAySg.js → qml-D5Il6_Lm.js} +1 -1
  243. package/dist/app/assets/{qore-C-UzVsUa.js → qore-C1uyIaih.js} +1 -1
  244. package/dist/app/assets/{qsharp-DhHVFASC.js → qsharp-Cde7m626.js} +1 -1
  245. package/dist/app/assets/{quadrantDiagram-34T5L4WZ-D76oNip7.js → quadrantDiagram-34T5L4WZ-CunYrfOP.js} +1 -1
  246. package/dist/app/assets/{r-CBOEAXGr.js → r-DTIfuxk3.js} +1 -1
  247. package/dist/app/assets/{racket-DVu6Dqdf.js → racket-CdH21hBI.js} +1 -1
  248. package/dist/app/assets/{reason-ETO6PU0a.js → reason-CoSJZFLF.js} +1 -1
  249. package/dist/app/assets/{regex-B_1z9nrW.js → regex-DLD55Glh.js} +1 -1
  250. package/dist/app/assets/{rego-CMx1q3ma.js → rego-BT2cOd8A.js} +1 -1
  251. package/dist/app/assets/{renpy-BNXwhZ6y.js → renpy-CuruShcb.js} +1 -1
  252. package/dist/app/assets/{requirementDiagram-MS252O5E-Cub81lLN.js → requirementDiagram-MS252O5E-2bmxoCD4.js} +1 -1
  253. package/dist/app/assets/{rest-C7Ju3aO_.js → rest-WCDfoasX.js} +1 -1
  254. package/dist/app/assets/{rip-BezD6ReZ.js → rip-DGv3__zG.js} +1 -1
  255. package/dist/app/assets/{roboconf-BCYNMrkD.js → roboconf-Bas02wjc.js} +1 -1
  256. package/dist/app/assets/{robotframework-DBnHxJ-E.js → robotframework-tGFzRD3G.js} +1 -1
  257. package/dist/app/assets/{ruby-DEY5WIqS.js → ruby-D8vE-7go.js} +1 -1
  258. package/dist/app/assets/{rust-DUoyQ2zP.js → rust-D9nPw-HY.js} +1 -1
  259. package/dist/app/assets/{sankeyDiagram-XADWPNL6-PiusOvgK.js → sankeyDiagram-XADWPNL6-DDJJQgu9.js} +1 -1
  260. package/dist/app/assets/{sas-4TFbJJbx.js → sas-CNQe8fmQ.js} +1 -1
  261. package/dist/app/assets/{sass-dE1FNaVr.js → sass-WIrPITxq.js} +1 -1
  262. package/dist/app/assets/{scala-Zhswyjm9.js → scala-BRyS8fHn.js} +1 -1
  263. package/dist/app/assets/{scheme-BTDb7rYq.js → scheme-sMkeVGM2.js} +1 -1
  264. package/dist/app/assets/{scss-5ZfA9WbF.js → scss-DScK7EFk.js} +1 -1
  265. package/dist/app/assets/{sequenceDiagram-FGHM5R23-B_xi91rE.js → sequenceDiagram-FGHM5R23--RbLQXIN.js} +1 -1
  266. package/dist/app/assets/{shell-session-Hwk6YMvp.js → shell-session-B7NWU4lC.js} +1 -1
  267. package/dist/app/assets/{smali-BvKNDUVq.js → smali-BHax8EIi.js} +1 -1
  268. package/dist/app/assets/{smalltalk-Cuj_IZOI.js → smalltalk-BT1-CEp0.js} +1 -1
  269. package/dist/app/assets/{smarty-YDqi5bLB.js → smarty-C8hT76Fl.js} +1 -1
  270. package/dist/app/assets/{sml-Cj6DYVC8.js → sml-CxB1b1Av.js} +1 -1
  271. package/dist/app/assets/{solidity-a7YwsEGV.js → solidity-CMhwxrSt.js} +1 -1
  272. package/dist/app/assets/{solution-file-D9JBb3wE.js → solution-file-DF2RWpk2.js} +1 -1
  273. package/dist/app/assets/{soy-CaAOEVjI.js → soy-BquGnVo6.js} +1 -1
  274. package/dist/app/assets/{sparql-DyXPgrW0.js → sparql-DsXRgXrC.js} +1 -1
  275. package/dist/app/assets/{splunk-spl-BIkU0fAL.js → splunk-spl-DU6lZWvQ.js} +1 -1
  276. package/dist/app/assets/{sqf-D57PcZVb.js → sqf-DuBryCfn.js} +1 -1
  277. package/dist/app/assets/{sql-MukaihY4.js → sql-DKbJMmuW.js} +1 -1
  278. package/dist/app/assets/{squirrel-CzYXWy6S.js → squirrel-CU-sQYjH.js} +1 -1
  279. package/dist/app/assets/{stan-FpLekD3U.js → stan-DorDVDUl.js} +1 -1
  280. package/dist/app/assets/{stateDiagram-FHFEXIEX-CpS745KL.js → stateDiagram-FHFEXIEX-B2u0vNWm.js} +1 -1
  281. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-BSCHSkf5.js +1 -0
  282. package/dist/app/assets/{stylus-CLeCT1Qf.js → stylus-DtDJOQrY.js} +1 -1
  283. package/dist/app/assets/{swift-CpMxUQeA.js → swift-1SZPUwjy.js} +1 -1
  284. package/dist/app/assets/{systemd-CGjsVDc1.js → systemd-B5Z6ff1T.js} +1 -1
  285. package/dist/app/assets/{t4-cs-ChnaFLT7.js → t4-cs-CTScVUI-.js} +1 -1
  286. package/dist/app/assets/{t4-templating-B5pWafb8.js → t4-templating-CnFzEH8T.js} +1 -1
  287. package/dist/app/assets/{t4-vb-DK65bsRV.js → t4-vb-BU2-1O3l.js} +1 -1
  288. package/dist/app/assets/{tap-BjFFJfCu.js → tap-9vuRf2zf.js} +1 -1
  289. package/dist/app/assets/{tcl-6ZH-Ye76.js → tcl-4WzMBc3u.js} +1 -1
  290. package/dist/app/assets/{textile-Biidr0CK.js → textile-BJ9xWM53.js} +1 -1
  291. package/dist/app/assets/{timeline-definition-GMOUNBTQ-B71aIAPy.js → timeline-definition-GMOUNBTQ-C7wox-Nh.js} +1 -1
  292. package/dist/app/assets/{toml-CbA-hSQN.js → toml-CIfJtDJm.js} +1 -1
  293. package/dist/app/assets/{tremor-XnVSNc97.js → tremor-BCPKs7zG.js} +1 -1
  294. package/dist/app/assets/{tt2-Db0GSjWI.js → tt2-8cKWRoIL.js} +1 -1
  295. package/dist/app/assets/{turtle-bkAg37hd.js → turtle-BOX54zyV.js} +1 -1
  296. package/dist/app/assets/{twig-WKrEkAVe.js → twig-C8LLL6cb.js} +1 -1
  297. package/dist/app/assets/{typescript-CbA_8yl0.js → typescript-X2aSEXrA.js} +1 -1
  298. package/dist/app/assets/{typoscript-CNl71QFr.js → typoscript-D5ZXmrkV.js} +1 -1
  299. package/dist/app/assets/{unrealscript-Rq94tMZ9.js → unrealscript-D9UBRGN5.js} +1 -1
  300. package/dist/app/assets/{uorazor-5bxvkQjZ.js → uorazor-CTTqi2r1.js} +1 -1
  301. package/dist/app/assets/{uri-XOJXvqEY.js → uri-BFLn9hb5.js} +1 -1
  302. package/dist/app/assets/{v-DB2Yd9Sg.js → v-nb9ocvxh.js} +1 -1
  303. package/dist/app/assets/{vala-DZyPUHGF.js → vala-nEOqY-nY.js} +1 -1
  304. package/dist/app/assets/{vbnet-PpzMKvFE.js → vbnet-xRfCkZLw.js} +1 -1
  305. package/dist/app/assets/{velocity-qwehq1WR.js → velocity-DMb5Eobp.js} +1 -1
  306. package/dist/app/assets/{vennDiagram-DHZGUBPP-w6jfcHyz.js → vennDiagram-DHZGUBPP-BE_sjtU1.js} +1 -1
  307. package/dist/app/assets/{verilog-BaX6ehBO.js → verilog-MF3DQwrp.js} +1 -1
  308. package/dist/app/assets/{vhdl-CJ4oaOIm.js → vhdl-CaG_lZvs.js} +1 -1
  309. package/dist/app/assets/{vim-DsX1ZLAr.js → vim-DWEsvdkG.js} +1 -1
  310. package/dist/app/assets/{visual-basic-DcOgtvaV.js → visual-basic-BtAZxtsd.js} +1 -1
  311. package/dist/app/assets/{wardley-RL74JXVD-C6_5QD5-.js → wardley-RL74JXVD-BFsqjqU9.js} +1 -1
  312. package/dist/app/assets/{wardleyDiagram-NUSXRM2D-OBOS76Xf.js → wardleyDiagram-NUSXRM2D-BRCBl_Bo.js} +1 -1
  313. package/dist/app/assets/{warpscript-CsjaYEbC.js → warpscript-DaB6pxgc.js} +1 -1
  314. package/dist/app/assets/{wasm-C4s0Rskl.js → wasm-CYNiAZ8m.js} +1 -1
  315. package/dist/app/assets/{web-idl-CSSCDVy0.js → web-idl-BShUjsSx.js} +1 -1
  316. package/dist/app/assets/{wiki-B3uxFlGO.js → wiki-C92dpb1x.js} +1 -1
  317. package/dist/app/assets/{wolfram-BwGO75HU.js → wolfram-DpSRxPHz.js} +1 -1
  318. package/dist/app/assets/{wren-C57hzETc.js → wren-D33pCTT5.js} +1 -1
  319. package/dist/app/assets/{xeora-DrSuSyRC.js → xeora-Db0qw0Q1.js} +1 -1
  320. package/dist/app/assets/{xml-doc-CaRS8bMN.js → xml-doc-BlQp7vTd.js} +1 -1
  321. package/dist/app/assets/{xojo-C5eIw0DD.js → xojo-4-mS_JMd.js} +1 -1
  322. package/dist/app/assets/{xquery-BxZFMYbk.js → xquery-CHe6I6si.js} +1 -1
  323. package/dist/app/assets/{xychartDiagram-5P7HB3ND-zh-yE8PC.js → xychartDiagram-5P7HB3ND-k81eXzby.js} +1 -1
  324. package/dist/app/assets/{yaml-CwtSqOBb.js → yaml-CKVNhYrk.js} +1 -1
  325. package/dist/app/assets/{yang-DeNE_vI5.js → yang-CBuNW7y-.js} +1 -1
  326. package/dist/app/assets/{zig-AMjIOt6c.js → zig-rCC2YzXf.js} +1 -1
  327. package/dist/app/index.html +2 -2
  328. package/dist/index.cjs +788 -400
  329. package/dist/index.js +812 -424
  330. package/package.json +4 -4
  331. package/dist/app/assets/channel-Cuf4hwrt.js +0 -1
  332. package/dist/app/assets/classDiagram-6PBFFD2Q-y-yLSjJ4.js +0 -1
  333. package/dist/app/assets/classDiagram-v2-HSJHXN6E-y-yLSjJ4.js +0 -1
  334. package/dist/app/assets/clone-DHJkspmJ.js +0 -1
  335. package/dist/app/assets/index-BUlNsn5y.css +0 -1
  336. package/dist/app/assets/stateDiagram-v2-QKLJ7IA2-49AEvAwI.js +0 -1
package/dist/index.js CHANGED
@@ -3,14 +3,14 @@ import * as React66 from "react";
3
3
  import {
4
4
  ArrowDown as ArrowDown2,
5
5
  ChevronDown as ChevronDown9,
6
- FileText as FileText7,
6
+ FileText as FileText6,
7
7
  ImageIcon as ImageIcon2,
8
- Loader2 as Loader214,
8
+ Loader2 as Loader213,
9
9
  MessageSquarePlus,
10
10
  Minus,
11
11
  Pause,
12
- Pencil as Pencil5,
13
- Play,
12
+ Pencil as Pencil6,
13
+ Play as Play2,
14
14
  Quote,
15
15
  Settings as Settings2,
16
16
  Target as Target3,
@@ -3178,6 +3178,7 @@ var en_US_default = {
3178
3178
  shell: {
3179
3179
  success: "Success",
3180
3180
  running: "Running",
3181
+ paused: "Paused",
3181
3182
  failed: "Failed",
3182
3183
  exitCode: "Exit code {{code}}",
3183
3184
  ranCommand: "Ran {{command}}",
@@ -3214,6 +3215,28 @@ var en_US_default = {
3214
3215
  }
3215
3216
  }
3216
3217
  }
3218
+ },
3219
+ threadControl: {
3220
+ branch: "Conversation branch",
3221
+ branchNumber: "Branch {{number}}",
3222
+ pause: "Pause workflow",
3223
+ resume: "Resume workflow",
3224
+ cancelRun: "Stop task",
3225
+ pausing: "Saving and pausing\u2026",
3226
+ paused: "Workflow paused",
3227
+ editMessage: "Edit message",
3228
+ sourcePauseUnavailable: "The original task cannot be paused yet. Try again after it finishes.",
3229
+ discardEdit: "Cancel",
3230
+ saveBranch: "Send",
3231
+ status: {
3232
+ busy: "Running",
3233
+ pausing: "Pausing",
3234
+ paused: "Paused",
3235
+ idle: "Idle",
3236
+ interrupted: "Waiting",
3237
+ error: "Error",
3238
+ running: "Running"
3239
+ }
3217
3240
  }
3218
3241
  };
3219
3242
 
@@ -3795,6 +3818,7 @@ var zh_CN_default = {
3795
3818
  shell: {
3796
3819
  success: "\u6210\u529F",
3797
3820
  running: "\u8FD0\u884C\u4E2D",
3821
+ paused: "\u5DF2\u6682\u505C",
3798
3822
  failed: "\u5931\u8D25",
3799
3823
  exitCode: "\u9000\u51FA\u7801 {{code}}",
3800
3824
  ranCommand: "\u5DF2\u8FD0\u884C {{command}}",
@@ -3831,6 +3855,28 @@ var zh_CN_default = {
3831
3855
  }
3832
3856
  }
3833
3857
  }
3858
+ },
3859
+ threadControl: {
3860
+ branch: "\u5386\u53F2\u5206\u652F",
3861
+ branchNumber: "\u5206\u652F {{number}}",
3862
+ pause: "\u6682\u505C\u6D41\u7A0B",
3863
+ resume: "\u6062\u590D\u6D41\u7A0B",
3864
+ cancelRun: "\u505C\u6B62\u4EFB\u52A1",
3865
+ pausing: "\u6B63\u5728\u4FDD\u5B58\u5E76\u6682\u505C\u2026",
3866
+ paused: "\u6D41\u7A0B\u5DF2\u6682\u505C",
3867
+ editMessage: "\u7F16\u8F91\u6D88\u606F",
3868
+ sourcePauseUnavailable: "\u539F\u4EFB\u52A1\u6682\u4E0D\u652F\u6301\u6682\u505C\uFF0C\u8BF7\u5728\u4EFB\u52A1\u5B8C\u6210\u540E\u91CD\u8BD5\u3002",
3869
+ discardEdit: "\u53D6\u6D88",
3870
+ saveBranch: "\u53D1\u9001",
3871
+ status: {
3872
+ busy: "\u8FD0\u884C\u4E2D",
3873
+ pausing: "\u6B63\u5728\u6682\u505C",
3874
+ paused: "\u5DF2\u6682\u505C",
3875
+ idle: "\u7A7A\u95F2",
3876
+ interrupted: "\u7B49\u5F85\u5904\u7406",
3877
+ error: "\u51FA\u9519",
3878
+ running: "\u8FD0\u884C\u4E2D"
3879
+ }
3834
3880
  }
3835
3881
  };
3836
3882
 
@@ -8115,32 +8161,42 @@ function ProjectMessage({ children }) {
8115
8161
  }
8116
8162
 
8117
8163
  // src/components/composer/SendButton.tsx
8118
- import { ArrowUp, Square } from "lucide-react";
8164
+ import { ArrowUp, Play, Square } from "lucide-react";
8119
8165
  import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
8120
8166
  function SendButton({
8121
8167
  disabled = false,
8122
8168
  isLoading = false,
8123
8169
  showStop = isLoading,
8170
+ stopDisabled = false,
8124
8171
  onStop,
8125
8172
  stopLabel = "Stop",
8173
+ showResume = false,
8174
+ resumeDisabled = false,
8175
+ onResume,
8176
+ resumeLabel = "Resume",
8126
8177
  sendLabel = "Send",
8127
8178
  shortcuts
8128
8179
  }) {
8129
- if (showStop) {
8180
+ if (showStop || showResume) {
8181
+ const label = showStop ? stopLabel : resumeLabel;
8182
+ const Icon = showStop ? Square : Play;
8130
8183
  return /* @__PURE__ */ jsx24(
8131
8184
  "button",
8132
8185
  {
8133
8186
  type: "button",
8134
- onClick: onStop,
8187
+ onClick: showStop ? onStop : onResume,
8188
+ disabled: showStop ? stopDisabled : resumeDisabled,
8135
8189
  className: cn(
8136
8190
  "flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-full",
8137
8191
  "bg-foreground text-background",
8138
8192
  "transition-transform duration-150 ease-out",
8139
- "hover:scale-105 active:scale-95"
8193
+ "hover:scale-105 active:scale-95",
8194
+ "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:scale-100"
8140
8195
  ),
8141
- "aria-label": stopLabel,
8196
+ "aria-label": label,
8197
+ title: label,
8142
8198
  children: /* @__PURE__ */ jsx24(
8143
- Square,
8199
+ Icon,
8144
8200
  {
8145
8201
  size: 14,
8146
8202
  fill: "currentColor",
@@ -12035,7 +12091,7 @@ import {
12035
12091
  ChevronDown as ChevronDown8,
12036
12092
  ChevronRight as ChevronRight9,
12037
12093
  Clock3 as Clock32,
12038
- Loader2 as Loader211
12094
+ Loader2 as Loader210
12039
12095
  } from "lucide-react";
12040
12096
 
12041
12097
  // src/lib/agent-run-render-tree.ts
@@ -12273,6 +12329,10 @@ function markIncompleteAgentRunStatusSuccess(node) {
12273
12329
  }
12274
12330
  function buildAssistantRenderTree(message) {
12275
12331
  const rootExecutionId = message.executionId;
12332
+ const rootExecutionIds = /* @__PURE__ */ new Set([
12333
+ rootExecutionId,
12334
+ ...message.rootExecutionIds ?? []
12335
+ ]);
12276
12336
  const runs = (message.agentRuns ?? []).filter(
12277
12337
  (run) => !isMiddlewareAgentRunInfo(run)
12278
12338
  );
@@ -12286,7 +12346,7 @@ function buildAssistantRenderTree(message) {
12286
12346
  });
12287
12347
  for (const entry of entries) {
12288
12348
  const target = getEntryRunTarget(entry, runs, rootExecutionId);
12289
- const shouldGroup = Boolean(target?.executionId) && (target?.executionId !== rootExecutionId || Boolean(target?.parentExecutionId));
12349
+ const shouldGroup = Boolean(target?.executionId) && (!rootExecutionIds.has(target?.executionId) || Boolean(target?.parentExecutionId));
12290
12350
  if (!target || !shouldGroup) {
12291
12351
  if (entry.source === "reasoning" && typeof entry.item !== "string") {
12292
12352
  rootReasoning.push(entry.item);
@@ -12305,11 +12365,11 @@ function buildAssistantRenderTree(message) {
12305
12365
  }
12306
12366
  const roots = [];
12307
12367
  for (const node of nodes.values()) {
12308
- if (node.id === rootExecutionId && !node.info.parentId) {
12368
+ if (rootExecutionIds.has(node.id) && !node.info.parentId && !node.info.parentExecutionId) {
12309
12369
  continue;
12310
12370
  }
12311
12371
  const parentId = node.info.parentId ?? node.info.parentExecutionId;
12312
- if (parentId && parentId !== rootExecutionId && parentId !== node.id) {
12372
+ if (parentId && !rootExecutionIds.has(parentId) && parentId !== node.id) {
12313
12373
  const parent = nodes.get(parentId);
12314
12374
  if (parent) {
12315
12375
  parent.children.push(node);
@@ -14077,7 +14137,7 @@ import "react";
14077
14137
  import {
14078
14138
  resolveLocalizedText as resolveLocalizedText2
14079
14139
  } from "@xpert-ai/chatkit-types";
14080
- import { FileText as FileText5, Loader2 as Loader27, XCircle as XCircle2 } from "lucide-react";
14140
+ import { ScrollText, XCircle as XCircle2 } from "lucide-react";
14081
14141
  import { jsx as jsx47, jsxs as jsxs32 } from "react/jsx-runtime";
14082
14142
  var CONTEXT_COMPRESSION_COMPONENT_TYPE = "context-compression";
14083
14143
  function isContextCompressionComponent(content) {
@@ -14109,14 +14169,11 @@ function ContextCompressionIcon({
14109
14169
  }) {
14110
14170
  const status = data.status ?? "running";
14111
14171
  const skipped = isSkipped(status, data.reason);
14112
- if (status === "running") {
14113
- return /* @__PURE__ */ jsx47(Loader27, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 animate-spin" });
14114
- }
14115
14172
  if (status === "fail") {
14116
14173
  return /* @__PURE__ */ jsx47(XCircle2, { "aria-hidden": "true", className: "h-4 w-4 shrink-0" });
14117
14174
  }
14118
14175
  return /* @__PURE__ */ jsx47(
14119
- FileText5,
14176
+ ScrollText,
14120
14177
  {
14121
14178
  "aria-hidden": "true",
14122
14179
  className: cn("h-4 w-4 shrink-0", skipped && "opacity-80")
@@ -14137,13 +14194,13 @@ function ContextCompressionMessage({
14137
14194
  const status = data.status ?? "running";
14138
14195
  const tooltipText = getTooltipText(data, i18n2.language);
14139
14196
  const label = /* @__PURE__ */ jsx47(ContextCompressionLabel, { data });
14140
- const center = /* @__PURE__ */ jsxs32(
14197
+ const row = /* @__PURE__ */ jsxs32(
14141
14198
  "div",
14142
14199
  {
14143
14200
  className: cn(
14144
- "inline-flex max-w-[80%] shrink-0 items-center gap-1.5 rounded-md px-2 py-1 text-sm font-medium text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
14145
- tooltipText && "cursor-help",
14146
- status === "fail" && "text-destructive hover:text-destructive"
14201
+ "inline-flex max-w-full min-w-0 items-center gap-2 text-left text-sm font-medium text-muted-foreground transition-opacity",
14202
+ tooltipText && "cursor-help hover:opacity-100",
14203
+ status === "fail" ? "text-destructive" : "opacity-60"
14147
14204
  ),
14148
14205
  children: [
14149
14206
  /* @__PURE__ */ jsx47(ContextCompressionIcon, { data }),
@@ -14151,7 +14208,7 @@ function ContextCompressionMessage({
14151
14208
  "span",
14152
14209
  {
14153
14210
  className: cn(
14154
- "truncate",
14211
+ "min-w-0 truncate",
14155
14212
  status === "running" && "ck-tool-call-running-text"
14156
14213
  ),
14157
14214
  children: label
@@ -14160,21 +14217,17 @@ function ContextCompressionMessage({
14160
14217
  ]
14161
14218
  }
14162
14219
  );
14163
- return /* @__PURE__ */ jsxs32("div", { className: "flex w-full items-center justify-center gap-3 py-6", children: [
14164
- /* @__PURE__ */ jsx47("div", { className: "h-px min-w-8 flex-1 bg-border" }),
14165
- tooltipText ? /* @__PURE__ */ jsxs32(Tooltip, { children: [
14166
- /* @__PURE__ */ jsx47(TooltipTrigger, { asChild: true, children: center }),
14167
- /* @__PURE__ */ jsx47(
14168
- TooltipContent,
14169
- {
14170
- side: "top",
14171
- className: "max-h-80 max-w-xl overflow-auto whitespace-pre-wrap text-left text-xs leading-5",
14172
- children: tooltipText
14173
- }
14174
- )
14175
- ] }) : center,
14176
- /* @__PURE__ */ jsx47("div", { className: "h-px min-w-8 flex-1 bg-border" })
14177
- ] });
14220
+ return /* @__PURE__ */ jsx47("div", { className: "px-1 py-1", children: tooltipText ? /* @__PURE__ */ jsxs32(Tooltip, { children: [
14221
+ /* @__PURE__ */ jsx47(TooltipTrigger, { asChild: true, children: row }),
14222
+ /* @__PURE__ */ jsx47(
14223
+ TooltipContent,
14224
+ {
14225
+ side: "top",
14226
+ className: "max-h-80 max-w-xl overflow-auto whitespace-pre-wrap text-left text-xs leading-5",
14227
+ children: tooltipText
14228
+ }
14229
+ )
14230
+ ] }) : row });
14178
14231
  }
14179
14232
 
14180
14233
  // src/components/thread/messages/knowledge-retriever-component-renderer.tsx
@@ -14566,9 +14619,9 @@ import {
14566
14619
  ChevronRight as ChevronRight8,
14567
14620
  CircleHelp,
14568
14621
  Copy as Copy2,
14569
- FileText as FileText6,
14622
+ FileText as FileText5,
14570
14623
  Files,
14571
- Loader2 as Loader29,
14624
+ Loader2 as Loader28,
14572
14625
  ListTodo as ListTodo2,
14573
14626
  Network,
14574
14627
  Repeat2,
@@ -14781,12 +14834,16 @@ function ShellCopyButton({
14781
14834
  }
14782
14835
  function SandboxShellStatus({
14783
14836
  data,
14784
- exitCode
14837
+ exitCode,
14838
+ isPaused
14785
14839
  }) {
14786
14840
  const { t } = useChatkitTranslation();
14787
14841
  if (exitCode !== null) {
14788
14842
  return /* @__PURE__ */ jsx50("span", { className: "text-muted-foreground/90", children: t("message.toolGroup.shell.exitCode", { code: exitCode }) });
14789
14843
  }
14844
+ if (isPaused && data.status === "running") {
14845
+ return /* @__PURE__ */ jsx50("span", { className: "text-muted-foreground/90", children: t("message.toolGroup.shell.paused") });
14846
+ }
14790
14847
  if (data.status === "running") {
14791
14848
  return /* @__PURE__ */ jsx50("span", { className: "text-muted-foreground/90", children: t("message.toolGroup.shell.running") });
14792
14849
  }
@@ -14798,7 +14855,10 @@ function SandboxShellStatus({
14798
14855
  t("message.toolGroup.shell.success")
14799
14856
  ] });
14800
14857
  }
14801
- function SandboxShellToolCallCard({ data }) {
14858
+ function SandboxShellToolCallCard({
14859
+ data,
14860
+ isPaused
14861
+ }) {
14802
14862
  const { i18n: i18n2 } = useChatkitTranslation();
14803
14863
  const command = getSandboxShellCommand(data, i18n2.language);
14804
14864
  const formattedCommand = formatShellCommand(command);
@@ -14875,7 +14935,7 @@ function SandboxShellToolCallCard({ data }) {
14875
14935
  "mt-3 flex shrink-0 justify-end in-data-[density=compact]:mt-2 in-data-[density=spacious]:mt-4",
14876
14936
  SANDBOX_SHELL_TEXT_CLASS
14877
14937
  ),
14878
- children: /* @__PURE__ */ jsx50(SandboxShellStatus, { data, exitCode })
14938
+ children: /* @__PURE__ */ jsx50(SandboxShellStatus, { data, exitCode, isPaused })
14879
14939
  }
14880
14940
  )
14881
14941
  ]
@@ -14886,7 +14946,7 @@ function SandboxShellToolCallCard({ data }) {
14886
14946
  // src/components/thread/messages/tool-output-attachments.tsx
14887
14947
  import * as React44 from "react";
14888
14948
  import * as Dialog2 from "@radix-ui/react-dialog";
14889
- import { ImageIcon, Loader2 as Loader28, RefreshCw as RefreshCw3, X as X7 } from "lucide-react";
14949
+ import { ImageIcon, Loader2 as Loader27, RefreshCw as RefreshCw3, X as X7 } from "lucide-react";
14890
14950
  import { jsx as jsx51, jsxs as jsxs36 } from "react/jsx-runtime";
14891
14951
  function useToolOutputAttachmentPreview(request) {
14892
14952
  const parentMessenger = React44.useContext(ParentMessengerContext);
@@ -14973,7 +15033,7 @@ function ToolOutputImageAttachmentCard({
14973
15033
  className: "flex aspect-video min-w-0 items-center justify-center rounded-lg border border-border bg-background",
14974
15034
  "aria-label": t("message.toolGroup.attachments.loading", { title }),
14975
15035
  children: /* @__PURE__ */ jsx51(
14976
- Loader28,
15036
+ Loader27,
14977
15037
  {
14978
15038
  className: "h-5 w-5 animate-spin text-muted-foreground",
14979
15039
  "aria-hidden": "true"
@@ -15109,7 +15169,7 @@ var toolStatusConfig = {
15109
15169
  },
15110
15170
  running: {
15111
15171
  iconClass: "border-blue-500 text-blue-700",
15112
- icon: Loader29
15172
+ icon: Loader28
15113
15173
  }
15114
15174
  };
15115
15175
  var TOOL_GROUP_CATEGORY_ORDER = [
@@ -15178,8 +15238,11 @@ function parseStepDate(value) {
15178
15238
  function isThreadKnownIdle(isThreadRunning) {
15179
15239
  return isThreadRunning === false;
15180
15240
  }
15181
- function getEffectiveToolStepStatus(data, isThreadRunning) {
15182
- if (data.status === "running" && isThreadKnownIdle(isThreadRunning)) {
15241
+ function isPausedToolStep(data, isThreadPaused) {
15242
+ return data.status === "running" && isThreadPaused === true;
15243
+ }
15244
+ function getEffectiveToolStepStatus(data, isThreadRunning, isThreadPaused) {
15245
+ if (data.status === "running" && isThreadKnownIdle(isThreadRunning) && !isPausedToolStep(data, isThreadPaused)) {
15183
15246
  return "fail";
15184
15247
  }
15185
15248
  return data.status;
@@ -15220,9 +15283,10 @@ function useToolStepDurationLabel(data, options) {
15220
15283
  const createdAt = parseStepDate(data.created_date);
15221
15284
  const explicitEndedAt = parseStepDate(data.end_date);
15222
15285
  const status = options?.status ?? data.status;
15223
- const endedAt = explicitEndedAt ?? (status !== "running" ? options?.fallbackEndedAt ?? null : null);
15286
+ const isElapsing = status === "running" && !options?.isPaused;
15287
+ const endedAt = explicitEndedAt ?? (!isElapsing ? options?.fallbackEndedAt ?? null : null);
15224
15288
  React45.useEffect(() => {
15225
- if (status !== "running" || createdAt === null || endedAt !== null) {
15289
+ if (!isElapsing || createdAt === null || endedAt !== null) {
15226
15290
  return;
15227
15291
  }
15228
15292
  setDurationNow(Date.now());
@@ -15232,7 +15296,7 @@ function useToolStepDurationLabel(data, options) {
15232
15296
  return () => {
15233
15297
  window.clearInterval(timer);
15234
15298
  };
15235
- }, [createdAt, endedAt, status]);
15299
+ }, [createdAt, endedAt, isElapsing]);
15236
15300
  if (createdAt === null) return null;
15237
15301
  const durationMs = Math.max(0, (endedAt ?? durationNow) - createdAt);
15238
15302
  return formatStepDuration2(durationMs);
@@ -15511,7 +15575,7 @@ function getStepTypeIcon(type) {
15511
15575
  if (!normalized) return null;
15512
15576
  switch (normalized) {
15513
15577
  case "file":
15514
- return FileText6;
15578
+ return FileText5;
15515
15579
  case "files":
15516
15580
  return Files;
15517
15581
  case "program":
@@ -15719,11 +15783,20 @@ function DefaultToolCallOutput({
15719
15783
  output !== null ? /* @__PURE__ */ jsx52(ToolCallValueBlock, { value: output }) : null
15720
15784
  ] });
15721
15785
  }
15722
- function ToolCallDetails({ content }) {
15786
+ function ToolCallDetails({
15787
+ content,
15788
+ isThreadPaused
15789
+ }) {
15723
15790
  const { i18n: i18n2, t } = useChatkitTranslation();
15724
15791
  const data = getToolStepData(content);
15725
15792
  if (isSandboxShellStep(data)) {
15726
- return /* @__PURE__ */ jsx52("div", { className: "ml-2 mt-1", children: /* @__PURE__ */ jsx52(SandboxShellToolCallCard, { data }) });
15793
+ return /* @__PURE__ */ jsx52("div", { className: "ml-2 mt-1", children: /* @__PURE__ */ jsx52(
15794
+ SandboxShellToolCallCard,
15795
+ {
15796
+ data,
15797
+ isPaused: isPausedToolStep(data, isThreadPaused)
15798
+ }
15799
+ ) });
15727
15800
  }
15728
15801
  const renderer = getComponentMessageRenderer(content, data);
15729
15802
  const hasCustomDetails = data.error === void 0 && hasComponentMessageRendererDetails(renderer, content, data);
@@ -15752,17 +15825,23 @@ function ToolCallDetails({ content }) {
15752
15825
  ] });
15753
15826
  }
15754
15827
  function areToolCallRowPropsEqual(previous, next) {
15755
- return previous.content.id === next.content.id && previous.content.data === next.content.data && previous.isThreadRunning === next.isThreadRunning && previous.organizationId === next.organizationId && previous.apiUrl === next.apiUrl;
15828
+ return previous.content.id === next.content.id && previous.content.data === next.content.data && previous.isThreadRunning === next.isThreadRunning && previous.isThreadPaused === next.isThreadPaused && previous.organizationId === next.organizationId && previous.apiUrl === next.apiUrl;
15756
15829
  }
15757
15830
  function ToolCallRowContent({
15758
15831
  content,
15759
15832
  isThreadRunning,
15833
+ isThreadPaused,
15760
15834
  organizationId,
15761
15835
  apiUrl
15762
15836
  }) {
15763
15837
  const { i18n: i18n2, t } = useChatkitTranslation();
15764
15838
  const data = getToolStepData(content);
15765
- const status = getEffectiveToolStepStatus(data, isThreadRunning);
15839
+ const isPaused = isPausedToolStep(data, isThreadPaused);
15840
+ const status = getEffectiveToolStepStatus(
15841
+ data,
15842
+ isThreadRunning,
15843
+ isThreadPaused
15844
+ );
15766
15845
  const hasError = status === "fail" || Boolean(data.error);
15767
15846
  const isSandboxShell = isSandboxShellStep(data);
15768
15847
  const detailsId = React45.useId();
@@ -15771,11 +15850,12 @@ function ToolCallRowContent({
15771
15850
  const hasCustomDetails = data.error === void 0 && hasComponentMessageRendererDetails(renderer, content, data);
15772
15851
  const hasDetails = isSandboxShell || data.input !== void 0 || data.error !== void 0 || data.output !== void 0 || data.artifact !== void 0 || hasCustomDetails;
15773
15852
  const fallbackEndedAt = useFrozenTimestamp(
15774
- data.status === "running" && status === "fail"
15853
+ data.status === "running" && (status === "fail" || isPaused)
15775
15854
  );
15776
15855
  const durationLabel = useToolStepDurationLabel(data, {
15777
15856
  status,
15778
- fallbackEndedAt
15857
+ fallbackEndedAt,
15858
+ isPaused
15779
15859
  });
15780
15860
  const [isExpanded, setIsExpanded] = React45.useState(false);
15781
15861
  React45.useEffect(() => {
@@ -15818,7 +15898,7 @@ function ToolCallRowContent({
15818
15898
  {
15819
15899
  className: cn(
15820
15900
  "min-w-0 truncate",
15821
- status === "running" && "ck-tool-call-running-text"
15901
+ status === "running" && !isPaused && "ck-tool-call-running-text"
15822
15902
  ),
15823
15903
  title: label,
15824
15904
  children: label
@@ -15838,7 +15918,7 @@ function ToolCallRowContent({
15838
15918
  ]
15839
15919
  }
15840
15920
  ),
15841
- hasDetails && isExpanded ? /* @__PURE__ */ jsx52("div", { id: detailsId, children: /* @__PURE__ */ jsx52(ToolCallDetails, { content }) }) : null
15921
+ hasDetails && isExpanded ? /* @__PURE__ */ jsx52("div", { id: detailsId, children: /* @__PURE__ */ jsx52(ToolCallDetails, { content, isThreadPaused }) }) : null
15842
15922
  ] });
15843
15923
  }
15844
15924
  var ToolCallRow = React45.memo(ToolCallRowContent, areToolCallRowPropsEqual);
@@ -15847,6 +15927,7 @@ function ToolComponentGroup({
15847
15927
  items,
15848
15928
  hasFollowingItem,
15849
15929
  isThreadRunning,
15930
+ isThreadPaused,
15850
15931
  organizationId,
15851
15932
  apiUrl
15852
15933
  }) {
@@ -15902,6 +15983,7 @@ function ToolComponentGroup({
15902
15983
  {
15903
15984
  content: item,
15904
15985
  isThreadRunning,
15986
+ isThreadPaused,
15905
15987
  organizationId,
15906
15988
  apiUrl
15907
15989
  },
@@ -16412,7 +16494,7 @@ import {
16412
16494
  } from "@xpert-ai/chatkit-types";
16413
16495
  import {
16414
16496
  AlertCircle as AlertCircle2,
16415
- Loader2 as Loader210,
16497
+ Loader2 as Loader29,
16416
16498
  Maximize2,
16417
16499
  Minimize2,
16418
16500
  PictureInPicture2,
@@ -18132,7 +18214,7 @@ function McpAppMessage({
18132
18214
  disabled: approvalAction !== null,
18133
18215
  onClick: () => void resolvePendingApproval("reject"),
18134
18216
  children: [
18135
- approvalAction === "reject" ? /* @__PURE__ */ jsx55(Loader210, { className: "animate-spin" }) : null,
18217
+ approvalAction === "reject" ? /* @__PURE__ */ jsx55(Loader29, { className: "animate-spin" }) : null,
18136
18218
  i18n2.t("message.mcpApp.reject")
18137
18219
  ]
18138
18220
  }
@@ -18145,7 +18227,7 @@ function McpAppMessage({
18145
18227
  disabled: approvalAction !== null,
18146
18228
  onClick: () => void resolvePendingApproval("approve"),
18147
18229
  children: [
18148
- approvalAction === "approve" ? /* @__PURE__ */ jsx55(Loader210, { className: "animate-spin" }) : null,
18230
+ approvalAction === "approve" ? /* @__PURE__ */ jsx55(Loader29, { className: "animate-spin" }) : null,
18149
18231
  i18n2.t("message.mcpApp.approve")
18150
18232
  ]
18151
18233
  }
@@ -18162,7 +18244,7 @@ function McpAppMessage({
18162
18244
  elevatedDisplayMode && "min-h-0 flex-1"
18163
18245
  ),
18164
18246
  children: [
18165
- /* @__PURE__ */ jsx55(Loader210, { className: "h-4 w-4 animate-spin" }),
18247
+ /* @__PURE__ */ jsx55(Loader29, { className: "h-4 w-4 animate-spin" }),
18166
18248
  /* @__PURE__ */ jsx55("span", { children: i18n2.t("message.mcpApp.loading") })
18167
18249
  ]
18168
18250
  }
@@ -18549,6 +18631,7 @@ function renderContentItem(content, index, message, lookupMessages, options) {
18549
18631
  items: [content],
18550
18632
  hasFollowingItem: false,
18551
18633
  isThreadRunning: options?.isThreadRunning,
18634
+ isThreadPaused: options?.isThreadPaused,
18552
18635
  organizationId: options?.organizationId,
18553
18636
  apiUrl: options?.apiUrl
18554
18637
  }
@@ -18599,6 +18682,7 @@ function renderContentUnit(unit, message, lookupMessages, hasFollowingItem, opti
18599
18682
  return renderContentItem(unit.item, unit.index, message, lookupMessages, {
18600
18683
  isReasoning: options?.isReasoning && !hasFollowingItem && !options?.isAgentOutput,
18601
18684
  isThreadRunning: options?.isThreadRunning,
18685
+ isThreadPaused: options?.isThreadPaused,
18602
18686
  organizationId: options?.organizationId,
18603
18687
  apiUrl: options?.apiUrl,
18604
18688
  isAgentOutput: options?.isAgentOutput,
@@ -18611,6 +18695,7 @@ function renderContentUnit(unit, message, lookupMessages, hasFollowingItem, opti
18611
18695
  items: unit.items,
18612
18696
  hasFollowingItem,
18613
18697
  isThreadRunning: options?.isThreadRunning,
18698
+ isThreadPaused: options?.isThreadPaused,
18614
18699
  organizationId: options?.organizationId,
18615
18700
  apiUrl: options?.apiUrl
18616
18701
  }
@@ -18732,7 +18817,7 @@ function AssistantStreamingIndicator({
18732
18817
  className
18733
18818
  ),
18734
18819
  children: [
18735
- status === "loading" && /* @__PURE__ */ jsx56(Loader211, { className: "h-3.5 w-3.5 animate-spin" }),
18820
+ status === "loading" && /* @__PURE__ */ jsx56(Loader210, { className: "h-3.5 w-3.5 animate-spin" }),
18736
18821
  status === "thinking" && /* @__PURE__ */ jsxs40("div", { className: "flex items-end gap-1", "aria-hidden": "true", children: [
18737
18822
  /* @__PURE__ */ jsx56("span", { className: "h-1.5 w-1.5 rounded-full bg-current animate-bounce [animation-delay:-0.3s]" }),
18738
18823
  /* @__PURE__ */ jsx56("span", { className: "h-1.5 w-1.5 rounded-full bg-current animate-bounce [animation-delay:-0.15s]" }),
@@ -18755,6 +18840,7 @@ function AssistantMessage({
18755
18840
  isStreaming = false,
18756
18841
  streamingStatus,
18757
18842
  isThreadRunning,
18843
+ isThreadPaused,
18758
18844
  organizationId,
18759
18845
  apiUrl,
18760
18846
  pet,
@@ -18774,6 +18860,7 @@ function AssistantMessage({
18774
18860
  const answerNode = renderContent(message, lookupMessages, {
18775
18861
  isReasoning,
18776
18862
  isThreadRunning,
18863
+ isThreadPaused,
18777
18864
  organizationId,
18778
18865
  apiUrl,
18779
18866
  mcpApps
@@ -18966,13 +19053,14 @@ function MessageNavigator({
18966
19053
 
18967
19054
  // src/components/thread/MessageActions.tsx
18968
19055
  import * as React50 from "react";
18969
- import { Check as Check7, Copy as Copy3, RefreshCw as RefreshCw4 } from "lucide-react";
19056
+ import { Check as Check7, Copy as Copy3, Pencil as Pencil3, RefreshCw as RefreshCw4 } from "lucide-react";
18970
19057
  import { jsx as jsx58, jsxs as jsxs42 } from "react/jsx-runtime";
18971
19058
  function MessageActions({
18972
19059
  content,
18973
19060
  isAssistant = false,
18974
19061
  isStreaming = false,
18975
19062
  onRetry,
19063
+ onEdit,
18976
19064
  className
18977
19065
  }) {
18978
19066
  const { t } = useChatkitTranslation();
@@ -19010,6 +19098,17 @@ function MessageActions({
19010
19098
  children: copied ? /* @__PURE__ */ jsx58(Check7, { size: 14 }) : /* @__PURE__ */ jsx58(Copy3, { size: 14 })
19011
19099
  }
19012
19100
  ),
19101
+ !isAssistant && onEdit && /* @__PURE__ */ jsx58(
19102
+ "button",
19103
+ {
19104
+ type: "button",
19105
+ onClick: onEdit,
19106
+ className: "rounded-md p-1.5 text-muted-foreground transition-colors hover:bg-muted hover:text-foreground",
19107
+ title: t("threadControl.editMessage"),
19108
+ "aria-label": t("threadControl.editMessage"),
19109
+ children: /* @__PURE__ */ jsx58(Pencil3, { size: 14 })
19110
+ }
19111
+ ),
19013
19112
  isAssistant && onRetry && /* @__PURE__ */ jsx58(
19014
19113
  "button",
19015
19114
  {
@@ -19025,6 +19124,107 @@ function MessageActions({
19025
19124
  );
19026
19125
  }
19027
19126
 
19127
+ // src/components/thread/MessageEditor.tsx
19128
+ import { useState as useState33 } from "react";
19129
+ import { jsx as jsx59, jsxs as jsxs43 } from "react/jsx-runtime";
19130
+ function MessageEditor({
19131
+ initialText,
19132
+ onSave,
19133
+ onCancel
19134
+ }) {
19135
+ const { t } = useChatkitTranslation();
19136
+ const [text, setText] = useState33(initialText);
19137
+ const [busy, setBusy] = useState33(false);
19138
+ const [error, setError] = useState33(null);
19139
+ async function save() {
19140
+ setBusy(true);
19141
+ setError(null);
19142
+ try {
19143
+ await onSave(text);
19144
+ } catch (error2) {
19145
+ setError(error2 instanceof Error ? error2.message : String(error2));
19146
+ } finally {
19147
+ setBusy(false);
19148
+ }
19149
+ }
19150
+ return /* @__PURE__ */ jsxs43("div", { className: "w-full space-y-2 rounded-2xl border border-input bg-background p-3", children: [
19151
+ /* @__PURE__ */ jsx59(
19152
+ "textarea",
19153
+ {
19154
+ "aria-label": t("threadControl.editMessage"),
19155
+ value: text,
19156
+ onChange: (event) => setText(event.target.value),
19157
+ disabled: busy,
19158
+ rows: 4,
19159
+ autoFocus: true,
19160
+ className: "w-full resize-y bg-transparent text-sm leading-relaxed text-foreground outline-none"
19161
+ }
19162
+ ),
19163
+ error && /* @__PURE__ */ jsx59("p", { role: "alert", className: "text-xs text-destructive", children: error }),
19164
+ /* @__PURE__ */ jsxs43("div", { className: "flex justify-end gap-2", children: [
19165
+ /* @__PURE__ */ jsx59(
19166
+ Button,
19167
+ {
19168
+ type: "button",
19169
+ size: "sm",
19170
+ variant: "ghost",
19171
+ disabled: busy,
19172
+ onClick: onCancel,
19173
+ children: t("threadControl.discardEdit")
19174
+ }
19175
+ ),
19176
+ /* @__PURE__ */ jsx59(
19177
+ Button,
19178
+ {
19179
+ type: "button",
19180
+ size: "sm",
19181
+ disabled: busy || !text.trim(),
19182
+ onClick: () => void save(),
19183
+ children: t("threadControl.saveBranch")
19184
+ }
19185
+ )
19186
+ ] })
19187
+ ] });
19188
+ }
19189
+
19190
+ // src/hooks/useThreadBranches.ts
19191
+ import { useCallback as useCallback16, useEffect as useEffect27, useRef as useRef19, useState as useState34 } from "react";
19192
+ function useThreadBranches(client, conversationId, threadId, enabled, isLoading) {
19193
+ const scope = useRef19(threadId);
19194
+ scope.current = threadId;
19195
+ const [snapshot, setSnapshot] = useState34(null);
19196
+ const [error, setError] = useState34(null);
19197
+ const generation = useRef19(0);
19198
+ const refresh = useCallback16(async () => {
19199
+ if (!threadId || !conversationId || !enabled) return;
19200
+ const request = ++generation.current;
19201
+ try {
19202
+ const branches2 = await client.conversations.listThreads(conversationId);
19203
+ if (scope.current !== threadId || generation.current !== request) return;
19204
+ setSnapshot({ threadId, branches: branches2 });
19205
+ setError(null);
19206
+ } catch (error2) {
19207
+ if (scope.current !== threadId || generation.current !== request) return;
19208
+ if (error2 && typeof error2 === "object" && "status" in error2 && error2.status === 404) {
19209
+ setSnapshot(null);
19210
+ setError(null);
19211
+ return;
19212
+ }
19213
+ setError(error2 instanceof Error ? error2.message : String(error2));
19214
+ }
19215
+ }, [client, conversationId, enabled, threadId]);
19216
+ const branches = enabled && snapshot?.threadId === threadId ? snapshot.branches : [];
19217
+ const current = branches.find((branch) => branch.thread_id === threadId);
19218
+ useEffect27(() => {
19219
+ setError(null);
19220
+ void refresh();
19221
+ return () => {
19222
+ generation.current += 1;
19223
+ };
19224
+ }, [refresh, isLoading]);
19225
+ return { branches, current, error, refresh };
19226
+ }
19227
+
19028
19228
  // src/components/thread/StartScreen.tsx
19029
19229
  import "react";
19030
19230
  import {
@@ -19033,23 +19233,23 @@ import {
19033
19233
  Globe as Globe2,
19034
19234
  HelpCircle,
19035
19235
  Lightbulb as Lightbulb2,
19036
- Pencil as Pencil3,
19236
+ Pencil as Pencil4,
19037
19237
  Search as Search6,
19038
19238
  Sparkles as Sparkles3,
19039
19239
  Zap
19040
19240
  } from "lucide-react";
19041
- import { jsx as jsx59, jsxs as jsxs43 } from "react/jsx-runtime";
19241
+ import { jsx as jsx60, jsxs as jsxs44 } from "react/jsx-runtime";
19042
19242
  function getIconComponent2(icon) {
19043
19243
  const iconMap = {
19044
- "circle-question": /* @__PURE__ */ jsx59(HelpCircle, { size: 20 }),
19045
- lightbulb: /* @__PURE__ */ jsx59(Lightbulb2, { size: 20 }),
19046
- sparkle: /* @__PURE__ */ jsx59(Sparkles3, { size: 20 }),
19047
- write: /* @__PURE__ */ jsx59(Pencil3, { size: 20 }),
19048
- search: /* @__PURE__ */ jsx59(Search6, { size: 20 }),
19049
- globe: /* @__PURE__ */ jsx59(Globe2, { size: 20 }),
19050
- "book-open": /* @__PURE__ */ jsx59(BookOpen2, { size: 20 }),
19051
- compass: /* @__PURE__ */ jsx59(Compass, { size: 20 }),
19052
- bolt: /* @__PURE__ */ jsx59(Zap, { size: 20 })
19244
+ "circle-question": /* @__PURE__ */ jsx60(HelpCircle, { size: 20 }),
19245
+ lightbulb: /* @__PURE__ */ jsx60(Lightbulb2, { size: 20 }),
19246
+ sparkle: /* @__PURE__ */ jsx60(Sparkles3, { size: 20 }),
19247
+ write: /* @__PURE__ */ jsx60(Pencil4, { size: 20 }),
19248
+ search: /* @__PURE__ */ jsx60(Search6, { size: 20 }),
19249
+ globe: /* @__PURE__ */ jsx60(Globe2, { size: 20 }),
19250
+ "book-open": /* @__PURE__ */ jsx60(BookOpen2, { size: 20 }),
19251
+ compass: /* @__PURE__ */ jsx60(Compass, { size: 20 }),
19252
+ bolt: /* @__PURE__ */ jsx60(Zap, { size: 20 })
19053
19253
  };
19054
19254
  return icon ? iconMap[icon] || iconMap["sparkle"] : iconMap["sparkle"];
19055
19255
  }
@@ -19066,7 +19266,7 @@ function StartScreen({
19066
19266
  const prompts = startScreen?.prompts ?? [];
19067
19267
  const hasPrompts = startScreen?.promptsLayout !== "list" && prompts.length > 0;
19068
19268
  const editPromptLabel = t("startScreen.editPrompt");
19069
- return /* @__PURE__ */ jsxs43(
19269
+ return /* @__PURE__ */ jsxs44(
19070
19270
  "div",
19071
19271
  {
19072
19272
  className: cn(
@@ -19074,8 +19274,8 @@ function StartScreen({
19074
19274
  className
19075
19275
  ),
19076
19276
  children: [
19077
- /* @__PURE__ */ jsx59("div", { className: cn("mb-4 text-center", hasPrompts && "mb-10"), children: /* @__PURE__ */ jsx59("h2", { className: "mb-4 text-4xl font-semibold text-foreground", children: greeting }) }),
19078
- hasPrompts && /* @__PURE__ */ jsx59("div", { className: "w-full max-w-2xl", children: /* @__PURE__ */ jsx59("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-3", children: prompts.map((item, index) => /* @__PURE__ */ jsxs43(
19277
+ /* @__PURE__ */ jsx60("div", { className: cn("mb-4 text-center", hasPrompts && "mb-10"), children: /* @__PURE__ */ jsx60("h2", { className: "mb-4 text-4xl font-semibold text-foreground", children: greeting }) }),
19278
+ hasPrompts && /* @__PURE__ */ jsx60("div", { className: "w-full max-w-2xl", children: /* @__PURE__ */ jsx60("div", { className: "grid grid-cols-1 sm:grid-cols-2 gap-3", children: prompts.map((item, index) => /* @__PURE__ */ jsxs44(
19079
19279
  "div",
19080
19280
  {
19081
19281
  className: cn(
@@ -19084,7 +19284,7 @@ function StartScreen({
19084
19284
  "focus-within:ring-2 focus-within:ring-primary/20"
19085
19285
  ),
19086
19286
  children: [
19087
- /* @__PURE__ */ jsxs43(
19287
+ /* @__PURE__ */ jsxs44(
19088
19288
  "button",
19089
19289
  {
19090
19290
  type: "button",
@@ -19095,8 +19295,8 @@ function StartScreen({
19095
19295
  "focus:outline-none disabled:cursor-not-allowed disabled:opacity-50"
19096
19296
  ),
19097
19297
  children: [
19098
- /* @__PURE__ */ jsx59("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary", children: getIconComponent2(item.icon) }),
19099
- /* @__PURE__ */ jsx59(
19298
+ /* @__PURE__ */ jsx60("span", { className: "flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary", children: getIconComponent2(item.icon) }),
19299
+ /* @__PURE__ */ jsx60(
19100
19300
  "div",
19101
19301
  {
19102
19302
  className: "text-sm font-medium text-foreground line-clamp-3 overflow-hidden",
@@ -19107,7 +19307,7 @@ function StartScreen({
19107
19307
  ]
19108
19308
  }
19109
19309
  ),
19110
- /* @__PURE__ */ jsx59(
19310
+ /* @__PURE__ */ jsx60(
19111
19311
  "button",
19112
19312
  {
19113
19313
  type: "button",
@@ -19120,7 +19320,7 @@ function StartScreen({
19120
19320
  "rounded-r-xl transition-colors hover:bg-muted hover:text-foreground",
19121
19321
  "focus:outline-none disabled:cursor-not-allowed disabled:opacity-50"
19122
19322
  ),
19123
- children: /* @__PURE__ */ jsx59(Pencil3, { size: 16 })
19323
+ children: /* @__PURE__ */ jsx60(Pencil4, { size: 16 })
19124
19324
  }
19125
19325
  )
19126
19326
  ]
@@ -19133,8 +19333,8 @@ function StartScreen({
19133
19333
  }
19134
19334
 
19135
19335
  // src/components/composer/StarterPromptSuggestions.tsx
19136
- import { MessagesSquare, Pencil as Pencil4 } from "lucide-react";
19137
- import { jsx as jsx60, jsxs as jsxs44 } from "react/jsx-runtime";
19336
+ import { MessagesSquare, Pencil as Pencil5 } from "lucide-react";
19337
+ import { jsx as jsx61, jsxs as jsxs45 } from "react/jsx-runtime";
19138
19338
  function StarterPromptSuggestions({
19139
19339
  prompts,
19140
19340
  onPromptClick,
@@ -19144,13 +19344,13 @@ function StarterPromptSuggestions({
19144
19344
  }) {
19145
19345
  const { t } = useChatkitTranslation();
19146
19346
  if (!prompts.length) return null;
19147
- return /* @__PURE__ */ jsx60(
19347
+ return /* @__PURE__ */ jsx61(
19148
19348
  "div",
19149
19349
  {
19150
19350
  "data-slot": "starter-prompt-suggestions",
19151
19351
  className: "mt-2 min-w-0 space-y-0.5 px-2",
19152
- children: prompts.map((item, index) => /* @__PURE__ */ jsxs44("div", { className: "group flex min-w-0 items-center gap-1", children: [
19153
- /* @__PURE__ */ jsxs44(
19352
+ children: prompts.map((item, index) => /* @__PURE__ */ jsxs45("div", { className: "group flex min-w-0 items-center gap-1", children: [
19353
+ /* @__PURE__ */ jsxs45(
19154
19354
  Button,
19155
19355
  {
19156
19356
  type: "button",
@@ -19161,12 +19361,12 @@ function StarterPromptSuggestions({
19161
19361
  title: item.label,
19162
19362
  onClick: () => onPromptClick(item.prompt),
19163
19363
  children: [
19164
- /* @__PURE__ */ jsx60(MessagesSquare, { className: "size-4 shrink-0", "aria-hidden": "true" }),
19165
- /* @__PURE__ */ jsx60("span", { className: "truncate", children: item.label })
19364
+ /* @__PURE__ */ jsx61(MessagesSquare, { className: "size-4 shrink-0", "aria-hidden": "true" }),
19365
+ /* @__PURE__ */ jsx61("span", { className: "truncate", children: item.label })
19166
19366
  ]
19167
19367
  }
19168
19368
  ),
19169
- /* @__PURE__ */ jsx60(
19369
+ /* @__PURE__ */ jsx61(
19170
19370
  Button,
19171
19371
  {
19172
19372
  type: "button",
@@ -19177,7 +19377,7 @@ function StarterPromptSuggestions({
19177
19377
  "aria-label": t("startScreen.editPrompt"),
19178
19378
  title: t("startScreen.editPrompt"),
19179
19379
  onClick: () => onPromptEdit(item.prompt),
19180
- children: /* @__PURE__ */ jsx60(Pencil4, { className: "size-3.5", "aria-hidden": "true" })
19380
+ children: /* @__PURE__ */ jsx61(Pencil5, { className: "size-3.5", "aria-hidden": "true" })
19181
19381
  }
19182
19382
  )
19183
19383
  ] }, `prompt-${index}`))
@@ -19396,7 +19596,7 @@ import * as React53 from "react";
19396
19596
  import { CircleHelp as CircleHelp2 } from "lucide-react";
19397
19597
 
19398
19598
  // src/components/ui/progress-circle.tsx
19399
- import { jsx as jsx61, jsxs as jsxs45 } from "react/jsx-runtime";
19599
+ import { jsx as jsx62, jsxs as jsxs46 } from "react/jsx-runtime";
19400
19600
  function clamp2(input, a, b) {
19401
19601
  return Math.max(Math.min(input, Math.max(a, b)), Math.min(a, b));
19402
19602
  }
@@ -19419,7 +19619,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
19419
19619
  return (
19420
19620
  // biome-ignore lint/a11y/useFocusableInteractive: false positive (progress + progressbar are not focusable interactives)
19421
19621
  // biome-ignore lint/nursery/useAriaPropsSupportedByRole: biome rule at odds with mdn docs (presumed nursary bug with rule)
19422
- /* @__PURE__ */ jsxs45(
19622
+ /* @__PURE__ */ jsxs46(
19423
19623
  "svg",
19424
19624
  {
19425
19625
  role: "progressbar",
@@ -19430,8 +19630,8 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
19430
19630
  "aria-valuemax": 100,
19431
19631
  ...restSvgProps,
19432
19632
  children: [
19433
- /* @__PURE__ */ jsx61("circle", { ...commonParams, className: "stroke-current/25" }),
19434
- /* @__PURE__ */ jsx61(
19633
+ /* @__PURE__ */ jsx62("circle", { ...commonParams, className: "stroke-current/25" }),
19634
+ /* @__PURE__ */ jsx62(
19435
19635
  "circle",
19436
19636
  {
19437
19637
  ...commonParams,
@@ -19450,7 +19650,7 @@ var ProgressCircle = ({ value, className, ...restSvgProps }) => {
19450
19650
  };
19451
19651
 
19452
19652
  // src/components/thread/context-usage-indicator.tsx
19453
- import { Fragment as Fragment11, jsx as jsx62, jsxs as jsxs46 } from "react/jsx-runtime";
19653
+ import { Fragment as Fragment11, jsx as jsx63, jsxs as jsxs47 } from "react/jsx-runtime";
19454
19654
  var kNumberFormatter = new Intl.NumberFormat("en-US", {
19455
19655
  minimumFractionDigits: 0,
19456
19656
  maximumFractionDigits: 1
@@ -19620,8 +19820,8 @@ function ContextUsageIndicator({
19620
19820
  const usageLabelWithSuffix = usageLabel.endsWith(":") ? usageLabel : `${usageLabel}:`;
19621
19821
  const statusLabel = usageStatus === "stale" ? t("chat.contextUsage.stale") : !hasMeasurement ? t("chat.contextUsage.unavailable") : null;
19622
19822
  const progressClassName = percent >= 90 ? "text-destructive" : percent >= 75 ? "text-amber-500" : "text-primary dark:text-zinc-300";
19623
- return /* @__PURE__ */ jsxs46(Tooltip, { children: [
19624
- /* @__PURE__ */ jsx62(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx62(
19823
+ return /* @__PURE__ */ jsxs47(Tooltip, { children: [
19824
+ /* @__PURE__ */ jsx63(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx63(
19625
19825
  "button",
19626
19826
  {
19627
19827
  type: "button",
@@ -19630,13 +19830,13 @@ function ContextUsageIndicator({
19630
19830
  className
19631
19831
  ),
19632
19832
  "aria-label": `${usageLabelWithSuffix} ${hasMeasurement ? `${usageFullLabel}. ${usageTokensLabel}` : ""}${statusLabel ? ` ${statusLabel}` : ""}`,
19633
- children: hasMeasurement ? /* @__PURE__ */ jsx62(
19833
+ children: hasMeasurement ? /* @__PURE__ */ jsx63(
19634
19834
  ProgressCircle,
19635
19835
  {
19636
19836
  value: percent,
19637
19837
  className: cn("size-5", progressClassName)
19638
19838
  }
19639
- ) : /* @__PURE__ */ jsx62(
19839
+ ) : /* @__PURE__ */ jsx63(
19640
19840
  CircleHelp2,
19641
19841
  {
19642
19842
  className: "size-5 text-muted-foreground",
@@ -19645,19 +19845,19 @@ function ContextUsageIndicator({
19645
19845
  )
19646
19846
  }
19647
19847
  ) }),
19648
- /* @__PURE__ */ jsxs46(
19848
+ /* @__PURE__ */ jsxs47(
19649
19849
  TooltipContent,
19650
19850
  {
19651
19851
  side: "top",
19652
19852
  sideOffset: 6,
19653
19853
  className: "space-y-0.5 px-3 py-2 text-center",
19654
19854
  children: [
19655
- /* @__PURE__ */ jsx62("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
19656
- hasMeasurement && /* @__PURE__ */ jsxs46(Fragment11, { children: [
19657
- /* @__PURE__ */ jsx62("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
19658
- /* @__PURE__ */ jsx62("div", { className: "text-sm font-semibold", children: usageTokensLabel })
19855
+ /* @__PURE__ */ jsx63("div", { className: "text-primary-foreground/70", children: usageLabelWithSuffix }),
19856
+ hasMeasurement && /* @__PURE__ */ jsxs47(Fragment11, { children: [
19857
+ /* @__PURE__ */ jsx63("div", { className: "font-medium text-primary-foreground/80", children: usageFullLabel }),
19858
+ /* @__PURE__ */ jsx63("div", { className: "text-sm font-semibold", children: usageTokensLabel })
19659
19859
  ] }),
19660
- !hasMeasurement && statusLabel && /* @__PURE__ */ jsx62("div", { className: "text-sm", children: statusLabel })
19860
+ !hasMeasurement && statusLabel && /* @__PURE__ */ jsx63("div", { className: "text-sm", children: statusLabel })
19661
19861
  ]
19662
19862
  }
19663
19863
  )
@@ -19694,7 +19894,7 @@ function normalizeModelOptions(models) {
19694
19894
 
19695
19895
  // src/components/composer/ComposerCapabilityChip.tsx
19696
19896
  import { X as X8 } from "lucide-react";
19697
- import { jsx as jsx63, jsxs as jsxs47 } from "react/jsx-runtime";
19897
+ import { jsx as jsx64, jsxs as jsxs48 } from "react/jsx-runtime";
19698
19898
  function ComposerCapabilityChip({
19699
19899
  option,
19700
19900
  onRemove,
@@ -19702,7 +19902,7 @@ function ComposerCapabilityChip({
19702
19902
  }) {
19703
19903
  const { t } = useChatkitTranslation();
19704
19904
  const color = getRuntimeCapabilityColor(option);
19705
- return /* @__PURE__ */ jsxs47(
19905
+ return /* @__PURE__ */ jsxs48(
19706
19906
  "span",
19707
19907
  {
19708
19908
  "data-slot": "composer-capability-chip",
@@ -19717,9 +19917,9 @@ function ComposerCapabilityChip({
19717
19917
  ${option.description}` : option.label,
19718
19918
  contentEditable: false,
19719
19919
  children: [
19720
- /* @__PURE__ */ jsx63(RuntimeCapabilityIcon, { option, variant: "chip" }),
19721
- /* @__PURE__ */ jsx63("span", { className: "min-w-0 truncate", children: option.label }),
19722
- /* @__PURE__ */ jsx63(
19920
+ /* @__PURE__ */ jsx64(RuntimeCapabilityIcon, { option, variant: "chip" }),
19921
+ /* @__PURE__ */ jsx64("span", { className: "min-w-0 truncate", children: option.label }),
19922
+ /* @__PURE__ */ jsx64(
19723
19923
  "button",
19724
19924
  {
19725
19925
  type: "button",
@@ -19731,7 +19931,7 @@ ${option.description}` : option.label,
19731
19931
  name: option.label
19732
19932
  }),
19733
19933
  className: "flex size-5 shrink-0 items-center justify-center rounded-full hover:bg-primary/15 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring disabled:opacity-50",
19734
- children: /* @__PURE__ */ jsx63(X8, { className: "size-3" })
19934
+ children: /* @__PURE__ */ jsx64(X8, { className: "size-3" })
19735
19935
  }
19736
19936
  )
19737
19937
  ]
@@ -20158,17 +20358,17 @@ import { PawPrint, Settings } from "lucide-react";
20158
20358
  import "react";
20159
20359
  import { Select as SelectPrimitive } from "radix-ui";
20160
20360
  import { ChevronDownIcon as ChevronDownIcon2, CheckIcon as CheckIcon4, ChevronUpIcon } from "lucide-react";
20161
- import { jsx as jsx64, jsxs as jsxs48 } from "react/jsx-runtime";
20361
+ import { jsx as jsx65, jsxs as jsxs49 } from "react/jsx-runtime";
20162
20362
  function Select({
20163
20363
  ...props
20164
20364
  }) {
20165
- return /* @__PURE__ */ jsx64(SelectPrimitive.Root, { "data-slot": "select", ...props });
20365
+ return /* @__PURE__ */ jsx65(SelectPrimitive.Root, { "data-slot": "select", ...props });
20166
20366
  }
20167
20367
  function SelectGroup({
20168
20368
  className,
20169
20369
  ...props
20170
20370
  }) {
20171
- return /* @__PURE__ */ jsx64(
20371
+ return /* @__PURE__ */ jsx65(
20172
20372
  SelectPrimitive.Group,
20173
20373
  {
20174
20374
  "data-slot": "select-group",
@@ -20180,7 +20380,7 @@ function SelectGroup({
20180
20380
  function SelectValue({
20181
20381
  ...props
20182
20382
  }) {
20183
- return /* @__PURE__ */ jsx64(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
20383
+ return /* @__PURE__ */ jsx65(SelectPrimitive.Value, { "data-slot": "select-value", ...props });
20184
20384
  }
20185
20385
  function SelectTrigger({
20186
20386
  className,
@@ -20188,7 +20388,7 @@ function SelectTrigger({
20188
20388
  children,
20189
20389
  ...props
20190
20390
  }) {
20191
- return /* @__PURE__ */ jsxs48(
20391
+ return /* @__PURE__ */ jsxs49(
20192
20392
  SelectPrimitive.Trigger,
20193
20393
  {
20194
20394
  "data-slot": "select-trigger",
@@ -20200,7 +20400,7 @@ function SelectTrigger({
20200
20400
  ...props,
20201
20401
  children: [
20202
20402
  children,
20203
- /* @__PURE__ */ jsx64(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx64(ChevronDownIcon2, { className: "pointer-events-none size-4 text-muted-foreground" }) })
20403
+ /* @__PURE__ */ jsx65(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ jsx65(ChevronDownIcon2, { className: "pointer-events-none size-4 text-muted-foreground" }) })
20204
20404
  ]
20205
20405
  }
20206
20406
  );
@@ -20212,7 +20412,7 @@ function SelectContent({
20212
20412
  align = "center",
20213
20413
  ...props
20214
20414
  }) {
20215
- return /* @__PURE__ */ jsx64(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs48(
20415
+ return /* @__PURE__ */ jsx65(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs49(
20216
20416
  SelectPrimitive.Content,
20217
20417
  {
20218
20418
  "data-slot": "select-content",
@@ -20222,8 +20422,8 @@ function SelectContent({
20222
20422
  align,
20223
20423
  ...props,
20224
20424
  children: [
20225
- /* @__PURE__ */ jsx64(SelectScrollUpButton, {}),
20226
- /* @__PURE__ */ jsx64(
20425
+ /* @__PURE__ */ jsx65(SelectScrollUpButton, {}),
20426
+ /* @__PURE__ */ jsx65(
20227
20427
  SelectPrimitive.Viewport,
20228
20428
  {
20229
20429
  "data-position": position,
@@ -20234,7 +20434,7 @@ function SelectContent({
20234
20434
  children
20235
20435
  }
20236
20436
  ),
20237
- /* @__PURE__ */ jsx64(SelectScrollDownButton, {})
20437
+ /* @__PURE__ */ jsx65(SelectScrollDownButton, {})
20238
20438
  ]
20239
20439
  }
20240
20440
  ) });
@@ -20244,7 +20444,7 @@ function SelectItem({
20244
20444
  children,
20245
20445
  ...props
20246
20446
  }) {
20247
- return /* @__PURE__ */ jsxs48(
20447
+ return /* @__PURE__ */ jsxs49(
20248
20448
  SelectPrimitive.Item,
20249
20449
  {
20250
20450
  "data-slot": "select-item",
@@ -20254,8 +20454,8 @@ function SelectItem({
20254
20454
  ),
20255
20455
  ...props,
20256
20456
  children: [
20257
- /* @__PURE__ */ jsx64("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx64(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx64(CheckIcon4, { className: "pointer-events-none" }) }) }),
20258
- /* @__PURE__ */ jsx64(SelectPrimitive.ItemText, { children })
20457
+ /* @__PURE__ */ jsx65("span", { className: "pointer-events-none absolute right-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ jsx65(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ jsx65(CheckIcon4, { className: "pointer-events-none" }) }) }),
20458
+ /* @__PURE__ */ jsx65(SelectPrimitive.ItemText, { children })
20259
20459
  ]
20260
20460
  }
20261
20461
  );
@@ -20264,7 +20464,7 @@ function SelectScrollUpButton({
20264
20464
  className,
20265
20465
  ...props
20266
20466
  }) {
20267
- return /* @__PURE__ */ jsx64(
20467
+ return /* @__PURE__ */ jsx65(
20268
20468
  SelectPrimitive.ScrollUpButton,
20269
20469
  {
20270
20470
  "data-slot": "select-scroll-up-button",
@@ -20273,7 +20473,7 @@ function SelectScrollUpButton({
20273
20473
  className
20274
20474
  ),
20275
20475
  ...props,
20276
- children: /* @__PURE__ */ jsx64(
20476
+ children: /* @__PURE__ */ jsx65(
20277
20477
  ChevronUpIcon,
20278
20478
  {}
20279
20479
  )
@@ -20284,7 +20484,7 @@ function SelectScrollDownButton({
20284
20484
  className,
20285
20485
  ...props
20286
20486
  }) {
20287
- return /* @__PURE__ */ jsx64(
20487
+ return /* @__PURE__ */ jsx65(
20288
20488
  SelectPrimitive.ScrollDownButton,
20289
20489
  {
20290
20490
  "data-slot": "select-scroll-down-button",
@@ -20293,7 +20493,7 @@ function SelectScrollDownButton({
20293
20493
  className
20294
20494
  ),
20295
20495
  ...props,
20296
- children: /* @__PURE__ */ jsx64(
20496
+ children: /* @__PURE__ */ jsx65(
20297
20497
  ChevronDownIcon2,
20298
20498
  {}
20299
20499
  )
@@ -20304,7 +20504,7 @@ function SelectScrollDownButton({
20304
20504
  // src/components/ui/slider.tsx
20305
20505
  import * as React57 from "react";
20306
20506
  import { Slider as SliderPrimitive } from "radix-ui";
20307
- import { jsx as jsx65, jsxs as jsxs49 } from "react/jsx-runtime";
20507
+ import { jsx as jsx66, jsxs as jsxs50 } from "react/jsx-runtime";
20308
20508
  function Slider({
20309
20509
  className,
20310
20510
  defaultValue,
@@ -20317,7 +20517,7 @@ function Slider({
20317
20517
  () => Array.isArray(value) ? value : Array.isArray(defaultValue) ? defaultValue : [min, max],
20318
20518
  [value, defaultValue, min, max]
20319
20519
  );
20320
- return /* @__PURE__ */ jsxs49(
20520
+ return /* @__PURE__ */ jsxs50(
20321
20521
  SliderPrimitive.Root,
20322
20522
  {
20323
20523
  "data-slot": "slider",
@@ -20331,12 +20531,12 @@ function Slider({
20331
20531
  ),
20332
20532
  ...props,
20333
20533
  children: [
20334
- /* @__PURE__ */ jsx65(
20534
+ /* @__PURE__ */ jsx66(
20335
20535
  SliderPrimitive.Track,
20336
20536
  {
20337
20537
  "data-slot": "slider-track",
20338
20538
  className: "relative grow overflow-hidden rounded-full bg-muted data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1",
20339
- children: /* @__PURE__ */ jsx65(
20539
+ children: /* @__PURE__ */ jsx66(
20340
20540
  SliderPrimitive.Range,
20341
20541
  {
20342
20542
  "data-slot": "slider-range",
@@ -20345,7 +20545,7 @@ function Slider({
20345
20545
  )
20346
20546
  }
20347
20547
  ),
20348
- Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx65(
20548
+ Array.from({ length: _values.length }, (_, index) => /* @__PURE__ */ jsx66(
20349
20549
  SliderPrimitive.Thumb,
20350
20550
  {
20351
20551
  "data-slot": "slider-thumb",
@@ -20367,7 +20567,7 @@ import { ToggleGroup as ToggleGroupPrimitive } from "radix-ui";
20367
20567
  import "react";
20368
20568
  import { cva as cva2 } from "class-variance-authority";
20369
20569
  import { Toggle as TogglePrimitive } from "radix-ui";
20370
- import { jsx as jsx66 } from "react/jsx-runtime";
20570
+ import { jsx as jsx67 } from "react/jsx-runtime";
20371
20571
  var toggleVariants = cva2(
20372
20572
  "group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
20373
20573
  {
@@ -20390,7 +20590,7 @@ var toggleVariants = cva2(
20390
20590
  );
20391
20591
 
20392
20592
  // src/components/ui/toggle-group.tsx
20393
- import { jsx as jsx67 } from "react/jsx-runtime";
20593
+ import { jsx as jsx68 } from "react/jsx-runtime";
20394
20594
  var ToggleGroupContext = React59.createContext({
20395
20595
  size: "default",
20396
20596
  variant: "default",
@@ -20406,7 +20606,7 @@ function ToggleGroup({
20406
20606
  children,
20407
20607
  ...props
20408
20608
  }) {
20409
- return /* @__PURE__ */ jsx67(
20609
+ return /* @__PURE__ */ jsx68(
20410
20610
  ToggleGroupPrimitive.Root,
20411
20611
  {
20412
20612
  "data-slot": "toggle-group",
@@ -20420,7 +20620,7 @@ function ToggleGroup({
20420
20620
  className
20421
20621
  ),
20422
20622
  ...props,
20423
- children: /* @__PURE__ */ jsx67(
20623
+ children: /* @__PURE__ */ jsx68(
20424
20624
  ToggleGroupContext.Provider,
20425
20625
  {
20426
20626
  value: { variant, size: size2, spacing, orientation },
@@ -20438,7 +20638,7 @@ function ToggleGroupItem({
20438
20638
  ...props
20439
20639
  }) {
20440
20640
  const context = React59.useContext(ToggleGroupContext);
20441
- return /* @__PURE__ */ jsx67(
20641
+ return /* @__PURE__ */ jsx68(
20442
20642
  ToggleGroupPrimitive.Item,
20443
20643
  {
20444
20644
  "data-slot": "toggle-group-item",
@@ -20678,7 +20878,7 @@ import {
20678
20878
  } from "@xpert-ai/chatkit-types";
20679
20879
 
20680
20880
  // src/components/pet/PetPreview.tsx
20681
- import { jsx as jsx68 } from "react/jsx-runtime";
20881
+ import { jsx as jsx69 } from "react/jsx-runtime";
20682
20882
  function escapeCssUrl2(value) {
20683
20883
  return value.replace(/["\\]/g, "\\$&");
20684
20884
  }
@@ -20686,7 +20886,7 @@ function PetPreview({ src, label, className }) {
20686
20886
  const scale = 0.13;
20687
20887
  const width = petSpriteAtlas.cellWidth;
20688
20888
  const height = petSpriteAtlas.cellHeight;
20689
- return /* @__PURE__ */ jsx68(
20889
+ return /* @__PURE__ */ jsx69(
20690
20890
  "span",
20691
20891
  {
20692
20892
  className: cn(
@@ -20695,7 +20895,7 @@ function PetPreview({ src, label, className }) {
20695
20895
  ),
20696
20896
  "aria-hidden": "true",
20697
20897
  title: label,
20698
- children: /* @__PURE__ */ jsx68(
20898
+ children: /* @__PURE__ */ jsx69(
20699
20899
  "span",
20700
20900
  {
20701
20901
  className: "absolute left-1/2 top-1/2 block",
@@ -20717,7 +20917,7 @@ function PetPreview({ src, label, className }) {
20717
20917
  }
20718
20918
 
20719
20919
  // src/components/settings/SettingsSheet.tsx
20720
- import { jsx as jsx69, jsxs as jsxs50 } from "react/jsx-runtime";
20920
+ import { jsx as jsx70, jsxs as jsxs51 } from "react/jsx-runtime";
20721
20921
  var CHARACTER_TYPES2 = [
20722
20922
  "builtin",
20723
20923
  "atlas"
@@ -20757,23 +20957,23 @@ function SettingsSheet({
20757
20957
  defaultValue: selectedBuiltinPet.label
20758
20958
  }
20759
20959
  );
20760
- return /* @__PURE__ */ jsx69(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs50(SheetContent, { side: "right", className: "w-[min(92vw,26rem)] overflow-y-auto", children: [
20761
- /* @__PURE__ */ jsx69(SheetHeader, { children: /* @__PURE__ */ jsxs50("div", { className: "flex items-center gap-2", children: [
20762
- /* @__PURE__ */ jsx69("span", { className: "flex h-8 w-8 items-center justify-center rounded-md bg-primary/10 text-primary", children: /* @__PURE__ */ jsx69(Settings, { size: 16 }) }),
20763
- /* @__PURE__ */ jsx69(SheetTitle, { children: t("settings.title") })
20960
+ return /* @__PURE__ */ jsx70(Sheet, { open, onOpenChange, children: /* @__PURE__ */ jsxs51(SheetContent, { side: "right", className: "w-[min(92vw,26rem)] overflow-y-auto", children: [
20961
+ /* @__PURE__ */ jsx70(SheetHeader, { children: /* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-2", children: [
20962
+ /* @__PURE__ */ jsx70("span", { className: "flex h-8 w-8 items-center justify-center rounded-md bg-primary/10 text-primary", children: /* @__PURE__ */ jsx70(Settings, { size: 16 }) }),
20963
+ /* @__PURE__ */ jsx70(SheetTitle, { children: t("settings.title") })
20764
20964
  ] }) }),
20765
- /* @__PURE__ */ jsxs50("form", { className: "mt-6 space-y-5", onSubmit: handleSubmit, children: [
20766
- /* @__PURE__ */ jsxs50("section", { className: "space-y-5", children: [
20767
- /* @__PURE__ */ jsxs50("div", { className: "flex items-center gap-2", children: [
20768
- /* @__PURE__ */ jsx69("span", { className: "flex h-7 w-7 items-center justify-center rounded-md bg-muted text-muted-foreground", children: /* @__PURE__ */ jsx69(PawPrint, { size: 15 }) }),
20769
- /* @__PURE__ */ jsx69("h3", { className: "text-sm font-semibold", children: t("pet.settings.title") })
20965
+ /* @__PURE__ */ jsxs51("form", { className: "mt-6 space-y-5", onSubmit: handleSubmit, children: [
20966
+ /* @__PURE__ */ jsxs51("section", { className: "space-y-5", children: [
20967
+ /* @__PURE__ */ jsxs51("div", { className: "flex items-center gap-2", children: [
20968
+ /* @__PURE__ */ jsx70("span", { className: "flex h-7 w-7 items-center justify-center rounded-md bg-muted text-muted-foreground", children: /* @__PURE__ */ jsx70(PawPrint, { size: 15 }) }),
20969
+ /* @__PURE__ */ jsx70("h3", { className: "text-sm font-semibold", children: t("pet.settings.title") })
20770
20970
  ] }),
20771
- /* @__PURE__ */ jsxs50("label", { className: "flex items-center justify-between gap-4 rounded-md border border-border px-3 py-2", children: [
20772
- /* @__PURE__ */ jsxs50("span", { className: "min-w-0", children: [
20773
- /* @__PURE__ */ jsx69("span", { className: "block text-sm font-medium", children: t("pet.settings.enabled") }),
20774
- petRequired && /* @__PURE__ */ jsx69("span", { className: "mt-0.5 block text-xs text-muted-foreground", children: t("pet.settings.requiredHint") })
20971
+ /* @__PURE__ */ jsxs51("label", { className: "flex items-center justify-between gap-4 rounded-md border border-border px-3 py-2", children: [
20972
+ /* @__PURE__ */ jsxs51("span", { className: "min-w-0", children: [
20973
+ /* @__PURE__ */ jsx70("span", { className: "block text-sm font-medium", children: t("pet.settings.enabled") }),
20974
+ petRequired && /* @__PURE__ */ jsx70("span", { className: "mt-0.5 block text-xs text-muted-foreground", children: t("pet.settings.requiredHint") })
20775
20975
  ] }),
20776
- /* @__PURE__ */ jsx69(
20976
+ /* @__PURE__ */ jsx70(
20777
20977
  "button",
20778
20978
  {
20779
20979
  type: "button",
@@ -20786,7 +20986,7 @@ function SettingsSheet({
20786
20986
  draft.enabled ? "bg-primary" : "bg-muted-foreground/20",
20787
20987
  petRequired ? "cursor-not-allowed opacity-70" : ""
20788
20988
  ].join(" "),
20789
- children: /* @__PURE__ */ jsx69(
20989
+ children: /* @__PURE__ */ jsx70(
20790
20990
  "span",
20791
20991
  {
20792
20992
  className: [
@@ -20799,9 +20999,9 @@ function SettingsSheet({
20799
20999
  )
20800
21000
  ] })
20801
21001
  ] }),
20802
- /* @__PURE__ */ jsxs50("div", { className: "space-y-2", children: [
20803
- /* @__PURE__ */ jsx69("span", { id: "chatkit-pet-type-label", className: "text-sm font-medium", children: t("pet.settings.characterType") }),
20804
- /* @__PURE__ */ jsx69(
21002
+ /* @__PURE__ */ jsxs51("div", { className: "space-y-2", children: [
21003
+ /* @__PURE__ */ jsx70("span", { id: "chatkit-pet-type-label", className: "text-sm font-medium", children: t("pet.settings.characterType") }),
21004
+ /* @__PURE__ */ jsx70(
20805
21005
  ToggleGroup,
20806
21006
  {
20807
21007
  id: "chatkit-pet-type",
@@ -20816,7 +21016,7 @@ function SettingsSheet({
20816
21016
  variant: "outline",
20817
21017
  spacing: 2,
20818
21018
  className: "!w-full",
20819
- children: CHARACTER_TYPES2.map((type) => /* @__PURE__ */ jsx69(
21019
+ children: CHARACTER_TYPES2.map((type) => /* @__PURE__ */ jsx70(
20820
21020
  ToggleGroupItem,
20821
21021
  {
20822
21022
  value: type,
@@ -20828,8 +21028,8 @@ function SettingsSheet({
20828
21028
  }
20829
21029
  )
20830
21030
  ] }),
20831
- draft.characterType === "builtin" && /* @__PURE__ */ jsxs50("div", { className: "space-y-2", children: [
20832
- /* @__PURE__ */ jsx69(
21031
+ draft.characterType === "builtin" && /* @__PURE__ */ jsxs51("div", { className: "space-y-2", children: [
21032
+ /* @__PURE__ */ jsx70(
20833
21033
  "label",
20834
21034
  {
20835
21035
  htmlFor: "chatkit-pet-builtin",
@@ -20837,7 +21037,7 @@ function SettingsSheet({
20837
21037
  children: t("pet.settings.builtin")
20838
21038
  }
20839
21039
  ),
20840
- /* @__PURE__ */ jsxs50(
21040
+ /* @__PURE__ */ jsxs51(
20841
21041
  Select,
20842
21042
  {
20843
21043
  value: selectedBuiltinPet.id,
@@ -20848,26 +21048,26 @@ function SettingsSheet({
20848
21048
  }
20849
21049
  },
20850
21050
  children: [
20851
- /* @__PURE__ */ jsx69(
21051
+ /* @__PURE__ */ jsx70(
20852
21052
  SelectTrigger,
20853
21053
  {
20854
21054
  id: "chatkit-pet-builtin",
20855
21055
  className: "min-h-12 w-full px-3 py-2",
20856
- children: /* @__PURE__ */ jsx69(SelectValue, { placeholder: selectedBuiltinPetLabel })
21056
+ children: /* @__PURE__ */ jsx70(SelectValue, { placeholder: selectedBuiltinPetLabel })
20857
21057
  }
20858
21058
  ),
20859
- /* @__PURE__ */ jsx69(SelectContent, { className: "w-[var(--radix-select-trigger-width)]", children: /* @__PURE__ */ jsx69(SelectGroup, { children: INCLUDED_PET_OPTIONS.map((pet) => {
21059
+ /* @__PURE__ */ jsx70(SelectContent, { className: "w-[var(--radix-select-trigger-width)]", children: /* @__PURE__ */ jsx70(SelectGroup, { children: INCLUDED_PET_OPTIONS.map((pet) => {
20860
21060
  const label = t(`pet.settings.builtins.${pet.id}`, {
20861
21061
  defaultValue: pet.label
20862
21062
  });
20863
- return /* @__PURE__ */ jsx69(
21063
+ return /* @__PURE__ */ jsx70(
20864
21064
  SelectItem,
20865
21065
  {
20866
21066
  value: pet.id,
20867
21067
  className: "min-h-10 py-1.5 pl-2 pr-8",
20868
- children: /* @__PURE__ */ jsxs50("span", { className: "flex min-w-0 items-center gap-2", children: [
20869
- /* @__PURE__ */ jsx69(PetPreview, { src: pet.previewSrc, label }),
20870
- /* @__PURE__ */ jsx69("span", { className: "min-w-0 truncate", children: label })
21068
+ children: /* @__PURE__ */ jsxs51("span", { className: "flex min-w-0 items-center gap-2", children: [
21069
+ /* @__PURE__ */ jsx70(PetPreview, { src: pet.previewSrc, label }),
21070
+ /* @__PURE__ */ jsx70("span", { className: "min-w-0 truncate", children: label })
20871
21071
  ] })
20872
21072
  },
20873
21073
  pet.id
@@ -20877,8 +21077,8 @@ function SettingsSheet({
20877
21077
  }
20878
21078
  )
20879
21079
  ] }),
20880
- draft.characterType === "atlas" && /* @__PURE__ */ jsxs50("div", { className: "space-y-2", children: [
20881
- /* @__PURE__ */ jsx69(
21080
+ draft.characterType === "atlas" && /* @__PURE__ */ jsxs51("div", { className: "space-y-2", children: [
21081
+ /* @__PURE__ */ jsx70(
20882
21082
  "label",
20883
21083
  {
20884
21084
  className: "text-sm font-medium",
@@ -20886,7 +21086,7 @@ function SettingsSheet({
20886
21086
  children: t("pet.settings.atlasUrl")
20887
21087
  }
20888
21088
  ),
20889
- /* @__PURE__ */ jsx69(
21089
+ /* @__PURE__ */ jsx70(
20890
21090
  Input,
20891
21091
  {
20892
21092
  id: "chatkit-pet-atlas",
@@ -20896,15 +21096,15 @@ function SettingsSheet({
20896
21096
  }
20897
21097
  )
20898
21098
  ] }),
20899
- /* @__PURE__ */ jsxs50("div", { className: "space-y-2", children: [
20900
- /* @__PURE__ */ jsxs50("div", { className: "flex items-center justify-between gap-4", children: [
20901
- /* @__PURE__ */ jsx69("label", { className: "text-sm font-medium", htmlFor: "chatkit-pet-scale", children: t("pet.settings.scale") }),
20902
- /* @__PURE__ */ jsxs50("span", { className: "text-xs tabular-nums text-muted-foreground", children: [
21099
+ /* @__PURE__ */ jsxs51("div", { className: "space-y-2", children: [
21100
+ /* @__PURE__ */ jsxs51("div", { className: "flex items-center justify-between gap-4", children: [
21101
+ /* @__PURE__ */ jsx70("label", { className: "text-sm font-medium", htmlFor: "chatkit-pet-scale", children: t("pet.settings.scale") }),
21102
+ /* @__PURE__ */ jsxs51("span", { className: "text-xs tabular-nums text-muted-foreground", children: [
20903
21103
  draft.scale.toFixed(2),
20904
21104
  "x"
20905
21105
  ] })
20906
21106
  ] }),
20907
- /* @__PURE__ */ jsx69(
21107
+ /* @__PURE__ */ jsx70(
20908
21108
  Slider,
20909
21109
  {
20910
21110
  id: "chatkit-pet-scale",
@@ -20918,8 +21118,8 @@ function SettingsSheet({
20918
21118
  }
20919
21119
  )
20920
21120
  ] }),
20921
- /* @__PURE__ */ jsxs50("label", { className: "flex items-center gap-2 text-sm", children: [
20922
- /* @__PURE__ */ jsx69(
21121
+ /* @__PURE__ */ jsxs51("label", { className: "flex items-center gap-2 text-sm", children: [
21122
+ /* @__PURE__ */ jsx70(
20923
21123
  "input",
20924
21124
  {
20925
21125
  type: "checkbox",
@@ -20930,8 +21130,8 @@ function SettingsSheet({
20930
21130
  ),
20931
21131
  t("pet.settings.draggable")
20932
21132
  ] }),
20933
- /* @__PURE__ */ jsxs50("label", { className: "flex items-center gap-2 text-sm", children: [
20934
- /* @__PURE__ */ jsx69(
21133
+ /* @__PURE__ */ jsxs51("label", { className: "flex items-center gap-2 text-sm", children: [
21134
+ /* @__PURE__ */ jsx70(
20935
21135
  "input",
20936
21136
  {
20937
21137
  type: "checkbox",
@@ -20942,8 +21142,8 @@ function SettingsSheet({
20942
21142
  ),
20943
21143
  t("pet.settings.persistPosition")
20944
21144
  ] }),
20945
- /* @__PURE__ */ jsxs50("div", { className: "flex justify-end gap-2 pt-2", children: [
20946
- /* @__PURE__ */ jsx69(
21145
+ /* @__PURE__ */ jsxs51("div", { className: "flex justify-end gap-2 pt-2", children: [
21146
+ /* @__PURE__ */ jsx70(
20947
21147
  Button,
20948
21148
  {
20949
21149
  type: "button",
@@ -20952,7 +21152,7 @@ function SettingsSheet({
20952
21152
  children: t("pet.settings.cancel")
20953
21153
  }
20954
21154
  ),
20955
- /* @__PURE__ */ jsx69(Button, { type: "submit", children: t("pet.settings.save") })
21155
+ /* @__PURE__ */ jsx70(Button, { type: "submit", children: t("pet.settings.save") })
20956
21156
  ] })
20957
21157
  ] })
20958
21158
  ] }) });
@@ -21127,8 +21327,8 @@ function createXpertThreadGoalAdapter(client, scope) {
21127
21327
 
21128
21328
  // src/workbench/context.tsx
21129
21329
  import * as React62 from "react";
21130
- import { Loader2 as Loader212, PanelRight } from "lucide-react";
21131
- import { jsx as jsx70, jsxs as jsxs51 } from "react/jsx-runtime";
21330
+ import { Loader2 as Loader211, PanelRight } from "lucide-react";
21331
+ import { jsx as jsx71, jsxs as jsxs52 } from "react/jsx-runtime";
21132
21332
  var WorkbenchContext = React62.createContext({
21133
21333
  enabled: false,
21134
21334
  open: false,
@@ -21147,8 +21347,8 @@ function WorkbenchToggleButton() {
21147
21347
  if (!workbench.enabled || workbench.open) return null;
21148
21348
  const label = t("workbench.open");
21149
21349
  const tooltip = workbench.disabledReason ?? label;
21150
- return /* @__PURE__ */ jsxs51(Tooltip, { children: [
21151
- /* @__PURE__ */ jsx70(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx70("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx70(
21350
+ return /* @__PURE__ */ jsxs52(Tooltip, { children: [
21351
+ /* @__PURE__ */ jsx71(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx71("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx71(
21152
21352
  "button",
21153
21353
  {
21154
21354
  type: "button",
@@ -21161,16 +21361,16 @@ function WorkbenchToggleButton() {
21161
21361
  ),
21162
21362
  "aria-label": label,
21163
21363
  "aria-expanded": false,
21164
- children: workbench.loading ? /* @__PURE__ */ jsx70(Loader212, { size: 16, className: "animate-spin" }) : /* @__PURE__ */ jsx70(PanelRight, { size: 16 })
21364
+ children: workbench.loading ? /* @__PURE__ */ jsx71(Loader211, { size: 16, className: "animate-spin" }) : /* @__PURE__ */ jsx71(PanelRight, { size: 16 })
21165
21365
  }
21166
21366
  ) }) }),
21167
- /* @__PURE__ */ jsx70(TooltipContent, { side: "bottom", children: tooltip })
21367
+ /* @__PURE__ */ jsx71(TooltipContent, { side: "bottom", children: tooltip })
21168
21368
  ] });
21169
21369
  }
21170
21370
 
21171
21371
  // src/components/chat/runtime-capabilities.tsx
21172
21372
  import * as React63 from "react";
21173
- import { jsx as jsx71, jsxs as jsxs52 } from "react/jsx-runtime";
21373
+ import { jsx as jsx72, jsxs as jsxs53 } from "react/jsx-runtime";
21174
21374
  function createComposerCapabilityInsertionParts(options) {
21175
21375
  return options.filter((option) => option.type !== "subAgent").flatMap((option) => [
21176
21376
  createComposerCapabilityPart(option, createMessageId()),
@@ -21729,16 +21929,16 @@ function HumanRuntimeCapabilityChips({
21729
21929
  if (options.length === 0) {
21730
21930
  return null;
21731
21931
  }
21732
- return /* @__PURE__ */ jsx71("div", { className: "mb-2 flex flex-wrap gap-1.5", children: options.map((option) => {
21932
+ return /* @__PURE__ */ jsx72("div", { className: "mb-2 flex flex-wrap gap-1.5", children: options.map((option) => {
21733
21933
  const color = option.type === "skill" ? void 0 : getRuntimeCapabilityColor(option);
21734
- return /* @__PURE__ */ jsxs52(
21934
+ return /* @__PURE__ */ jsxs53(
21735
21935
  "span",
21736
21936
  {
21737
21937
  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",
21738
21938
  style: color ? { color } : void 0,
21739
21939
  children: [
21740
- /* @__PURE__ */ jsx71(RuntimeCapabilityIcon, { option, variant: "chip" }),
21741
- /* @__PURE__ */ jsx71("span", { className: "max-w-[9rem] truncate", children: option.label })
21940
+ /* @__PURE__ */ jsx72(RuntimeCapabilityIcon, { option, variant: "chip" }),
21941
+ /* @__PURE__ */ jsx72("span", { className: "max-w-[9rem] truncate", children: option.label })
21742
21942
  ]
21743
21943
  },
21744
21944
  `${option.type}:${option.id}`
@@ -21751,7 +21951,7 @@ function ComposerCapabilityToken({
21751
21951
  disabled
21752
21952
  }) {
21753
21953
  const color = getRuntimeCapabilityColor(part.capability);
21754
- return /* @__PURE__ */ jsx71(
21954
+ return /* @__PURE__ */ jsx72(
21755
21955
  "span",
21756
21956
  {
21757
21957
  "data-composer-capability-key": part.key,
@@ -21759,7 +21959,7 @@ function ComposerCapabilityToken({
21759
21959
  "data-capability-id": part.capability.id,
21760
21960
  contentEditable: false,
21761
21961
  style: color ? { color } : void 0,
21762
- children: /* @__PURE__ */ jsx71(
21962
+ children: /* @__PURE__ */ jsx72(
21763
21963
  ComposerCapabilityChip,
21764
21964
  {
21765
21965
  option: part.capability,
@@ -22151,12 +22351,12 @@ import {
22151
22351
  ExternalLink,
22152
22352
  FileOutput,
22153
22353
  ListChecks as ListChecks3,
22154
- Loader2 as Loader213,
22354
+ Loader2 as Loader212,
22155
22355
  PlayCircle,
22156
22356
  RotateCcw,
22157
22357
  Target as Target2
22158
22358
  } from "lucide-react";
22159
- import { jsx as jsx72, jsxs as jsxs53 } from "react/jsx-runtime";
22359
+ import { jsx as jsx73, jsxs as jsxs54 } from "react/jsx-runtime";
22160
22360
  var PREVIEW_SIZE = 3;
22161
22361
  function TaskSummaryTrigger({
22162
22362
  displayMode = "popover",
@@ -22176,7 +22376,7 @@ function TaskSummaryTrigger({
22176
22376
  },
22177
22377
  [controlledOpen, onOpenChange]
22178
22378
  );
22179
- const triggerButton = /* @__PURE__ */ jsx72(
22379
+ const triggerButton = /* @__PURE__ */ jsx73(
22180
22380
  "button",
22181
22381
  {
22182
22382
  type: "button",
@@ -22184,28 +22384,28 @@ function TaskSummaryTrigger({
22184
22384
  "aria-label": t("taskSummary.open"),
22185
22385
  "aria-expanded": open,
22186
22386
  onClick: displayMode === "docked" ? () => setOpen(!open) : void 0,
22187
- children: /* @__PURE__ */ jsx72(ListChecks3, { size: 16 })
22387
+ children: /* @__PURE__ */ jsx73(ListChecks3, { size: 16 })
22188
22388
  }
22189
22389
  );
22190
22390
  if (displayMode === "docked") {
22191
- return /* @__PURE__ */ jsxs53(Tooltip, { children: [
22192
- /* @__PURE__ */ jsx72(TooltipTrigger, { asChild: true, children: triggerButton }),
22193
- /* @__PURE__ */ jsx72(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
22391
+ return /* @__PURE__ */ jsxs54(Tooltip, { children: [
22392
+ /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: triggerButton }),
22393
+ /* @__PURE__ */ jsx73(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
22194
22394
  ] });
22195
22395
  }
22196
- return /* @__PURE__ */ jsxs53(Popover, { open, onOpenChange: setOpen, children: [
22197
- /* @__PURE__ */ jsxs53(Tooltip, { children: [
22198
- /* @__PURE__ */ jsx72(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx72(PopoverTrigger, { asChild: true, children: triggerButton }) }),
22199
- /* @__PURE__ */ jsx72(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
22396
+ return /* @__PURE__ */ jsxs54(Popover, { open, onOpenChange: setOpen, children: [
22397
+ /* @__PURE__ */ jsxs54(Tooltip, { children: [
22398
+ /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73(PopoverTrigger, { asChild: true, children: triggerButton }) }),
22399
+ /* @__PURE__ */ jsx73(TooltipContent, { side: "bottom", children: t("taskSummary.open") })
22200
22400
  ] }),
22201
- /* @__PURE__ */ jsx72(
22401
+ /* @__PURE__ */ jsx73(
22202
22402
  PopoverContent,
22203
22403
  {
22204
22404
  align: "end",
22205
22405
  sideOffset: 8,
22206
22406
  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",
22207
22407
  "aria-label": t("taskSummary.title"),
22208
- children: /* @__PURE__ */ jsx72(TaskSummaryContent, { ...props })
22408
+ children: /* @__PURE__ */ jsx73(TaskSummaryContent, { ...props })
22209
22409
  }
22210
22410
  )
22211
22411
  ] });
@@ -22215,7 +22415,7 @@ function TaskSummaryPanel({
22215
22415
  ...props
22216
22416
  }) {
22217
22417
  const { t } = useChatkitTranslation();
22218
- return /* @__PURE__ */ jsx72(
22418
+ return /* @__PURE__ */ jsx73(
22219
22419
  "aside",
22220
22420
  {
22221
22421
  "data-slot": "task-summary-panel",
@@ -22224,7 +22424,7 @@ function TaskSummaryPanel({
22224
22424
  "h-fit max-h-full overflow-y-auto rounded-2xl border border-border/70 bg-popover text-popover-foreground shadow-lg",
22225
22425
  className
22226
22426
  ),
22227
- children: /* @__PURE__ */ jsx72(TaskSummaryContent, { ...props })
22427
+ children: /* @__PURE__ */ jsx73(TaskSummaryContent, { ...props })
22228
22428
  }
22229
22429
  );
22230
22430
  }
@@ -22279,7 +22479,7 @@ function TaskSummaryContent({
22279
22479
  if (total2 <= PREVIEW_SIZE && !expanded[section]) return null;
22280
22480
  const loading = loadingSections[section];
22281
22481
  const canLoadMore = Boolean(expanded[section]) && loadedSectionCounts[section] < total2;
22282
- return /* @__PURE__ */ jsxs53(
22482
+ return /* @__PURE__ */ jsxs54(
22283
22483
  "button",
22284
22484
  {
22285
22485
  type: "button",
@@ -22287,8 +22487,8 @@ function TaskSummaryContent({
22287
22487
  disabled: loading,
22288
22488
  onClick: () => canLoadMore ? void onLoadSection(section) : toggleSection(section),
22289
22489
  children: [
22290
- loading && /* @__PURE__ */ jsx72(Loader213, { className: "size-3 animate-spin" }),
22291
- !loading && /* @__PURE__ */ jsx72(ListChecks3, { className: "size-3.5" }),
22490
+ loading && /* @__PURE__ */ jsx73(Loader212, { className: "size-3 animate-spin" }),
22491
+ !loading && /* @__PURE__ */ jsx73(ListChecks3, { className: "size-3.5" }),
22292
22492
  canLoadMore ? t("taskSummary.loadMore") : expanded[section] ? t("taskSummary.collapse") : t("taskSummary.viewAll", { count: total2 })
22293
22493
  ]
22294
22494
  }
@@ -22297,7 +22497,7 @@ function TaskSummaryContent({
22297
22497
  const localSectionAction = (section, total2) => {
22298
22498
  if (total2 <= PREVIEW_SIZE) return null;
22299
22499
  const isExpanded = Boolean(expandedLocal[section]);
22300
- return /* @__PURE__ */ jsxs53(
22500
+ return /* @__PURE__ */ jsxs54(
22301
22501
  "button",
22302
22502
  {
22303
22503
  type: "button",
@@ -22307,83 +22507,83 @@ function TaskSummaryContent({
22307
22507
  [section]: !isExpanded
22308
22508
  })),
22309
22509
  children: [
22310
- /* @__PURE__ */ jsx72(ListChecks3, { className: "size-3.5" }),
22510
+ /* @__PURE__ */ jsx73(ListChecks3, { className: "size-3.5" }),
22311
22511
  isExpanded ? t("taskSummary.collapse") : t("taskSummary.viewAll", { count: total2 })
22312
22512
  ]
22313
22513
  }
22314
22514
  );
22315
22515
  };
22316
- return /* @__PURE__ */ jsxs53("div", { className: "divide-y divide-border/70", children: [
22317
- Boolean(historyError) && /* @__PURE__ */ jsxs53("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: [
22318
- /* @__PURE__ */ jsx72("span", { children: t("taskSummary.historyError") }),
22319
- /* @__PURE__ */ jsxs53(
22516
+ return /* @__PURE__ */ jsxs54("div", { className: "divide-y divide-border/70", children: [
22517
+ Boolean(historyError) && /* @__PURE__ */ jsxs54("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: [
22518
+ /* @__PURE__ */ jsx73("span", { children: t("taskSummary.historyError") }),
22519
+ /* @__PURE__ */ jsxs54(
22320
22520
  "button",
22321
22521
  {
22322
22522
  type: "button",
22323
22523
  className: "inline-flex shrink-0 items-center gap-1 font-medium hover:underline",
22324
22524
  onClick: onRetryHistory,
22325
22525
  children: [
22326
- /* @__PURE__ */ jsx72(RotateCcw, { className: "size-3" }),
22526
+ /* @__PURE__ */ jsx73(RotateCcw, { className: "size-3" }),
22327
22527
  t("taskSummary.retry")
22328
22528
  ]
22329
22529
  }
22330
22530
  )
22331
22531
  ] }),
22332
- /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.outputs"), children: [
22333
- summary.outputs.length === 0 ? /* @__PURE__ */ jsx72(SummaryPrompt, { onClick: onFocusComposer, children: t("taskSummary.createOutput") }) : sectionItems("outputs", summary.outputs).map((item) => /* @__PURE__ */ jsx72(
22532
+ /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.outputs"), children: [
22533
+ summary.outputs.length === 0 ? /* @__PURE__ */ jsx73(SummaryPrompt, { onClick: onFocusComposer, children: t("taskSummary.createOutput") }) : sectionItems("outputs", summary.outputs).map((item) => /* @__PURE__ */ jsx73(
22334
22534
  SummaryButton,
22335
22535
  {
22336
22536
  title: item.title,
22337
22537
  metadata: localizedStatus(item.status),
22338
22538
  description: item.description,
22339
- leading: /* @__PURE__ */ jsx72(FileOutput, { className: "size-4" }),
22340
- trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx72(ExternalLink, { className: "size-3.5" }) : void 0,
22539
+ leading: /* @__PURE__ */ jsx73(FileOutput, { className: "size-4" }),
22540
+ trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx73(ExternalLink, { className: "size-3.5" }) : void 0,
22341
22541
  onClick: () => openSummaryItem(item.resource, item.messageId, item.title)
22342
22542
  },
22343
22543
  item.id
22344
22544
  )),
22345
22545
  sectionAction("outputs", summary.totals.outputs)
22346
22546
  ] }),
22347
- /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.sources"), children: [
22348
- sectionItems("sources", summary.sources).map((item) => /* @__PURE__ */ jsx72(
22547
+ /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.sources"), children: [
22548
+ sectionItems("sources", summary.sources).map((item) => /* @__PURE__ */ jsx73(
22349
22549
  SummaryButton,
22350
22550
  {
22351
22551
  title: item.title,
22352
22552
  description: item.description,
22353
- leading: /* @__PURE__ */ jsx72(BookOpen3, { className: "size-4" }),
22354
- trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx72(ExternalLink, { className: "size-3.5" }) : void 0,
22553
+ leading: /* @__PURE__ */ jsx73(BookOpen3, { className: "size-4" }),
22554
+ trailing: item.resource && item.resource.type !== "message" ? /* @__PURE__ */ jsx73(ExternalLink, { className: "size-3.5" }) : void 0,
22355
22555
  onClick: () => openSummaryItem(item.resource, item.messageId, item.title)
22356
22556
  },
22357
22557
  item.id
22358
22558
  )),
22359
22559
  sectionAction("sources", summary.totals.sources)
22360
22560
  ] }),
22361
- hasTask && /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.task"), children: [
22362
- summary.goal && /* @__PURE__ */ jsx72(
22561
+ hasTask && /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.task"), children: [
22562
+ summary.goal && /* @__PURE__ */ jsx73(
22363
22563
  SummaryButton,
22364
22564
  {
22365
22565
  title: summary.goal.objective,
22366
22566
  metadata: localizedStatus(summary.goal.status),
22367
- leading: /* @__PURE__ */ jsx72(Target2, { className: "size-4" }),
22567
+ leading: /* @__PURE__ */ jsx73(Target2, { className: "size-4" }),
22368
22568
  onClick: onFocusComposer
22369
22569
  }
22370
22570
  ),
22371
- summary.plan && /* @__PURE__ */ jsx72(
22571
+ summary.plan && /* @__PURE__ */ jsx73(
22372
22572
  SummaryButton,
22373
22573
  {
22374
22574
  title: summary.plan.title,
22375
22575
  description: summary.plan.excerpt,
22376
- leading: /* @__PURE__ */ jsx72(ListChecks3, { className: "size-4" }),
22576
+ leading: /* @__PURE__ */ jsx73(ListChecks3, { className: "size-4" }),
22377
22577
  onClick: () => summary.plan?.messageId ? onNavigateMessage(summary.plan.messageId) : onFocusComposer()
22378
22578
  }
22379
22579
  ),
22380
22580
  localSectionItems("todos", summary.todos?.items ?? []).map(
22381
- (todo) => /* @__PURE__ */ jsx72(
22581
+ (todo) => /* @__PURE__ */ jsx73(
22382
22582
  SummaryButton,
22383
22583
  {
22384
22584
  title: todo.content,
22385
22585
  metadata: localizedStatus(todo.status),
22386
- leading: todo.status === "completed" ? /* @__PURE__ */ jsx72(CheckCircle25, { className: "size-4 text-muted-foreground" }) : /* @__PURE__ */ jsx72(CircleEllipsis, { className: "size-4 text-muted-foreground" }),
22586
+ leading: todo.status === "completed" ? /* @__PURE__ */ jsx73(CheckCircle25, { className: "size-4 text-muted-foreground" }) : /* @__PURE__ */ jsx73(CircleEllipsis, { className: "size-4 text-muted-foreground" }),
22387
22587
  onClick: () => summary.todos?.messageId ? onNavigateMessage(summary.todos.messageId) : onFocusComposer()
22388
22588
  },
22389
22589
  todo.id
@@ -22391,23 +22591,23 @@ function TaskSummaryContent({
22391
22591
  ),
22392
22592
  localSectionAction("todos", summary.todos?.items.length ?? 0)
22393
22593
  ] }),
22394
- summary.running.length > 0 && /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.running"), children: [
22395
- localSectionItems("running", summary.running).map((item) => /* @__PURE__ */ jsx72(
22594
+ summary.running.length > 0 && /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.running"), children: [
22595
+ localSectionItems("running", summary.running).map((item) => /* @__PURE__ */ jsx73(
22396
22596
  SummaryButton,
22397
22597
  {
22398
22598
  title: item.title,
22399
22599
  metadata: localizedStatus(item.status),
22400
22600
  description: item.description,
22401
- leading: /* @__PURE__ */ jsx72(PlayCircle, { className: "size-4" }),
22402
- trailing: item.resource ? /* @__PURE__ */ jsx72(ExternalLink, { className: "size-3.5" }) : void 0,
22601
+ leading: /* @__PURE__ */ jsx73(PlayCircle, { className: "size-4" }),
22602
+ trailing: item.resource ? /* @__PURE__ */ jsx73(ExternalLink, { className: "size-3.5" }) : void 0,
22403
22603
  onClick: () => item.resource && onOpenResource(item.resource, void 0, item.title)
22404
22604
  },
22405
22605
  item.id
22406
22606
  )),
22407
22607
  localSectionAction("running", summary.running.length)
22408
22608
  ] }),
22409
- summary.agents.length > 0 && /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.agents"), children: [
22410
- sectionItems("agents", summary.agents).map((item) => /* @__PURE__ */ jsx72(
22609
+ summary.agents.length > 0 && /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.agents"), children: [
22610
+ sectionItems("agents", summary.agents).map((item) => /* @__PURE__ */ jsx73(
22411
22611
  SummaryButton,
22412
22612
  {
22413
22613
  title: item.title,
@@ -22416,20 +22616,20 @@ function TaskSummaryContent({
22416
22616
  formatElapsed(item.elapsedTime)
22417
22617
  ].filter(Boolean).join(" \xB7 "),
22418
22618
  description: item.error,
22419
- leading: /* @__PURE__ */ jsx72(Bot5, { className: "size-4" }),
22619
+ leading: /* @__PURE__ */ jsx73(Bot5, { className: "size-4" }),
22420
22620
  onClick: () => item.messageId ? onNavigateMessage(item.messageId) : onFocusComposer()
22421
22621
  },
22422
22622
  item.id
22423
22623
  )),
22424
22624
  sectionAction("agents", summary.totals.agents)
22425
22625
  ] }),
22426
- summary.pending.length > 0 && /* @__PURE__ */ jsxs53(SummarySection, { title: t("taskSummary.sections.pending"), children: [
22427
- sectionItems("pending", summary.pending).map((item) => /* @__PURE__ */ jsx72(
22626
+ summary.pending.length > 0 && /* @__PURE__ */ jsxs54(SummarySection, { title: t("taskSummary.sections.pending"), children: [
22627
+ sectionItems("pending", summary.pending).map((item) => /* @__PURE__ */ jsx73(
22428
22628
  SummaryButton,
22429
22629
  {
22430
22630
  title: item.title,
22431
22631
  description: item.description,
22432
- leading: /* @__PURE__ */ jsx72(CircleEllipsis, { className: "size-4" }),
22632
+ leading: /* @__PURE__ */ jsx73(CircleEllipsis, { className: "size-4" }),
22433
22633
  onClick: () => item.messageId ? onNavigateMessage(item.messageId) : onFocusComposer()
22434
22634
  },
22435
22635
  item.id
@@ -22442,16 +22642,16 @@ function SummarySection({
22442
22642
  title,
22443
22643
  children
22444
22644
  }) {
22445
- return /* @__PURE__ */ jsxs53("section", { "aria-label": title, className: "px-4 py-3", children: [
22446
- /* @__PURE__ */ jsx72("div", { className: "flex min-h-7 items-center justify-between gap-3", children: /* @__PURE__ */ jsx72("h3", { className: "text-sm font-medium text-muted-foreground", children: title }) }),
22447
- /* @__PURE__ */ jsx72("div", { className: "mt-1 space-y-0.5", children })
22645
+ return /* @__PURE__ */ jsxs54("section", { "aria-label": title, className: "px-4 py-3", children: [
22646
+ /* @__PURE__ */ jsx73("div", { className: "flex min-h-7 items-center justify-between gap-3", children: /* @__PURE__ */ jsx73("h3", { className: "text-sm font-medium text-muted-foreground", children: title }) }),
22647
+ /* @__PURE__ */ jsx73("div", { className: "mt-1 space-y-0.5", children })
22448
22648
  ] });
22449
22649
  }
22450
22650
  function SummaryPrompt({
22451
22651
  children,
22452
22652
  onClick
22453
22653
  }) {
22454
- return /* @__PURE__ */ jsx72(
22654
+ return /* @__PURE__ */ jsx73(
22455
22655
  "button",
22456
22656
  {
22457
22657
  type: "button",
@@ -22470,7 +22670,7 @@ function SummaryButton({
22470
22670
  onClick
22471
22671
  }) {
22472
22672
  const tooltipText = [title, metadata, description].filter(Boolean);
22473
- return /* @__PURE__ */ jsxs53(
22673
+ return /* @__PURE__ */ jsxs54(
22474
22674
  "button",
22475
22675
  {
22476
22676
  type: "button",
@@ -22484,13 +22684,13 @@ function SummaryButton({
22484
22684
  !onClick && "cursor-default"
22485
22685
  ),
22486
22686
  children: [
22487
- leading && /* @__PURE__ */ jsx72("span", { className: "mt-0.5 shrink-0 text-muted-foreground", children: leading }),
22488
- /* @__PURE__ */ jsxs53("span", { className: "min-w-0 flex-1", children: [
22489
- /* @__PURE__ */ jsx72("span", { className: "block truncate text-sm font-medium leading-5 text-foreground", children: title }),
22490
- metadata && /* @__PURE__ */ jsx72("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: metadata }),
22491
- description && /* @__PURE__ */ jsx72("span", { className: "mt-0.5 block line-clamp-2 text-xs text-muted-foreground", children: description })
22687
+ leading && /* @__PURE__ */ jsx73("span", { className: "mt-0.5 shrink-0 text-muted-foreground", children: leading }),
22688
+ /* @__PURE__ */ jsxs54("span", { className: "min-w-0 flex-1", children: [
22689
+ /* @__PURE__ */ jsx73("span", { className: "block truncate text-sm font-medium leading-5 text-foreground", children: title }),
22690
+ metadata && /* @__PURE__ */ jsx73("span", { className: "mt-0.5 block truncate text-xs text-muted-foreground", children: metadata }),
22691
+ description && /* @__PURE__ */ jsx73("span", { className: "mt-0.5 block line-clamp-2 text-xs text-muted-foreground", children: description })
22492
22692
  ] }),
22493
- trailing && /* @__PURE__ */ jsx72("span", { className: "mt-0.5 text-muted-foreground", children: trailing })
22693
+ trailing && /* @__PURE__ */ jsx73("span", { className: "mt-0.5 text-muted-foreground", children: trailing })
22494
22694
  ]
22495
22695
  }
22496
22696
  );
@@ -22502,7 +22702,7 @@ function formatElapsed(value) {
22502
22702
  }
22503
22703
 
22504
22704
  // src/components/chat.tsx
22505
- import { Fragment as Fragment13, jsx as jsx73, jsxs as jsxs54 } from "react/jsx-runtime";
22705
+ import { Fragment as Fragment13, jsx as jsx74, jsxs as jsxs55 } from "react/jsx-runtime";
22506
22706
  var defaultApiUrl2 = import.meta.env.VITE_XPERTAI_API_URL;
22507
22707
  var LONG_TEXT_REFERENCE_THRESHOLD = 5e3;
22508
22708
  var GOAL_RUN_INPUT = "Continue working toward the active goal.";
@@ -22639,8 +22839,8 @@ function ReferenceChip({
22639
22839
  }) {
22640
22840
  const metaLine = getReferenceMetaLine(reference);
22641
22841
  const isComposer = variant === "composer";
22642
- const Icon = reference.type === "quote" ? Quote : reference.type === "image" ? ImageIcon2 : FileText7;
22643
- return /* @__PURE__ */ jsxs54(
22842
+ const Icon = reference.type === "quote" ? Quote : reference.type === "image" ? ImageIcon2 : FileText6;
22843
+ return /* @__PURE__ */ jsxs55(
22644
22844
  "div",
22645
22845
  {
22646
22846
  className: cn(
@@ -22649,7 +22849,7 @@ function ReferenceChip({
22649
22849
  ),
22650
22850
  title: getReferenceTitle(reference),
22651
22851
  children: [
22652
- /* @__PURE__ */ jsx73(
22852
+ /* @__PURE__ */ jsx74(
22653
22853
  Icon,
22654
22854
  {
22655
22855
  size: isComposer ? 14 : 12,
@@ -22659,8 +22859,8 @@ function ReferenceChip({
22659
22859
  )
22660
22860
  }
22661
22861
  ),
22662
- /* @__PURE__ */ jsxs54("div", { className: "min-w-0 flex-1", children: [
22663
- /* @__PURE__ */ jsx73(
22862
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0 flex-1", children: [
22863
+ /* @__PURE__ */ jsx74(
22664
22864
  "div",
22665
22865
  {
22666
22866
  className: cn(
@@ -22670,7 +22870,7 @@ function ReferenceChip({
22670
22870
  children: getReferenceLabel(reference)
22671
22871
  }
22672
22872
  ),
22673
- metaLine && /* @__PURE__ */ jsx73(
22873
+ metaLine && /* @__PURE__ */ jsx74(
22674
22874
  "div",
22675
22875
  {
22676
22876
  className: cn(
@@ -22681,7 +22881,7 @@ function ReferenceChip({
22681
22881
  }
22682
22882
  )
22683
22883
  ] }),
22684
- onRemove && removeLabel && /* @__PURE__ */ jsx73(
22884
+ onRemove && removeLabel && /* @__PURE__ */ jsx74(
22685
22885
  "button",
22686
22886
  {
22687
22887
  type: "button",
@@ -22692,7 +22892,7 @@ function ReferenceChip({
22692
22892
  ),
22693
22893
  title: removeLabel,
22694
22894
  "aria-label": removeLabel,
22695
- children: /* @__PURE__ */ jsx73(X9, { size: 12 })
22895
+ children: /* @__PURE__ */ jsx74(X9, { size: 12 })
22696
22896
  }
22697
22897
  )
22698
22898
  ]
@@ -22706,19 +22906,19 @@ function WorkspaceFileChip({
22706
22906
  }) {
22707
22907
  const label = file.originalName ?? file.workspacePath ?? file.id ?? file.fileAssetId ?? "File";
22708
22908
  const meta = file.workspacePath ?? file.mimeType;
22709
- return /* @__PURE__ */ jsxs54(
22909
+ return /* @__PURE__ */ jsxs55(
22710
22910
  "div",
22711
22911
  {
22712
22912
  "data-slot": "workspace-file-reference",
22713
22913
  className: "flex min-w-0 items-start gap-2 rounded-md bg-muted px-2 py-1 text-foreground",
22714
22914
  title: label,
22715
22915
  children: [
22716
- /* @__PURE__ */ jsx73(FileText7, { className: "mt-0.5 size-3.5 shrink-0 text-muted-foreground" }),
22717
- /* @__PURE__ */ jsxs54("div", { className: "min-w-0 flex-1", children: [
22718
- /* @__PURE__ */ jsx73("div", { className: "truncate text-sm", children: label }),
22719
- meta ? /* @__PURE__ */ jsx73("div", { className: "truncate text-xs text-muted-foreground", children: meta }) : null
22916
+ /* @__PURE__ */ jsx74(FileText6, { className: "mt-0.5 size-3.5 shrink-0 text-muted-foreground" }),
22917
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0 flex-1", children: [
22918
+ /* @__PURE__ */ jsx74("div", { className: "truncate text-sm", children: label }),
22919
+ meta ? /* @__PURE__ */ jsx74("div", { className: "truncate text-xs text-muted-foreground", children: meta }) : null
22720
22920
  ] }),
22721
- /* @__PURE__ */ jsx73(
22921
+ /* @__PURE__ */ jsx74(
22722
22922
  "button",
22723
22923
  {
22724
22924
  type: "button",
@@ -22726,7 +22926,7 @@ function WorkspaceFileChip({
22726
22926
  className: "ml-1 rounded-full p-0.5 hover:bg-muted-foreground/20",
22727
22927
  title: removeLabel,
22728
22928
  "aria-label": removeLabel,
22729
- children: /* @__PURE__ */ jsx73(X9, { size: 12 })
22929
+ children: /* @__PURE__ */ jsx74(X9, { size: 12 })
22730
22930
  }
22731
22931
  )
22732
22932
  ]
@@ -22759,6 +22959,38 @@ function Chat({
22759
22959
  const messageNavigationEnabled = options?.messageNavigation?.enabled !== false;
22760
22960
  const { setStream } = useStreamManager();
22761
22961
  const stream = useStreamContext();
22962
+ const branchState = useThreadBranches(
22963
+ stream.client,
22964
+ stream.conversationId,
22965
+ stream.threadId,
22966
+ Boolean(stream.isReady && stream.client?.conversations?.listThreads),
22967
+ stream.isLoading
22968
+ );
22969
+ const [editingMessageId, setEditingMessageId] = React66.useState(
22970
+ null
22971
+ );
22972
+ const editRequestRef = React66.useRef(null);
22973
+ const [isChangingBranch, setIsChangingBranch] = React66.useState(false);
22974
+ const [runControlRequest, setRunControlRequest] = React66.useState(null);
22975
+ const runControlRequestRef = React66.useRef(null);
22976
+ const [runControlError, setRunControlError] = React66.useState(null);
22977
+ const currentRunControl = branchState.current?.runControl;
22978
+ const pauseRunId = stream.activeRunId ?? currentRunControl?.executionId ?? stream.displayPause?.executionId ?? null;
22979
+ const canPauseRun = Boolean(
22980
+ stream.threadId && pauseRunId && (stream.isLoading || currentRunControl?.state === "running")
22981
+ );
22982
+ const isRunPausing = runControlRequest?.threadId === stream.threadId && runControlRequest.action === "pause" || branchState.current?.status === "pausing";
22983
+ const isRunPaused = branchState.current?.status === "paused";
22984
+ const canRevealPausedDisplay = Boolean(stream.displayPause) && ["idle", "error", "interrupted"].includes(branchState.current?.status ?? "");
22985
+ const isPauseActive = isRunPausing || isRunPaused || stream.isDisplayPaused;
22986
+ const isResumingRun = runControlRequest?.threadId === stream.threadId && runControlRequest.action === "resume";
22987
+ const isVisibleStreaming = stream.isLoading && !stream.isDisplayPaused;
22988
+ const activeBranchRef = React66.useRef(stream.threadId);
22989
+ activeBranchRef.current = stream.threadId;
22990
+ React66.useEffect(() => {
22991
+ setEditingMessageId(null);
22992
+ editRequestRef.current = null;
22993
+ }, [stream.threadId]);
22762
22994
  const workbench = useWorkbench();
22763
22995
  const xpertPlatformClient = stream.client;
22764
22996
  const { theme } = useTheme();
@@ -23739,8 +23971,11 @@ function Chat({
23739
23971
  }, [stream.isLoading, messages, scrollToBottom]);
23740
23972
  const showMissingConfig = !isClientSecretInitializing && missingConfig;
23741
23973
  const hasUploadingFiles = attachmentState.hasUploadingFiles;
23742
- const isSubmissionBlocked = hasPendingInteractiveRequest || missingConfig || isHistoryUnavailable || hasUploadingFiles || isUploadingReferenceImages;
23743
- const isSendDisabled = !trimmedDraft && !hasReferences || isSubmissionBlocked;
23974
+ const isSubmissionBlocked = isChangingBranch || isResumingRun || isRunPausing || hasPendingInteractiveRequest || missingConfig || isHistoryUnavailable || hasUploadingFiles || isUploadingReferenceImages;
23975
+ const hasComposerInput = Boolean(
23976
+ trimmedDraft || hasReferences || attachmentState.uploadedFiles.length
23977
+ );
23978
+ const isSendDisabled = !hasComposerInput || isSubmissionBlocked;
23744
23979
  const isPromptEditDisabled = hasPendingInteractiveRequest || missingConfig || isHistoryLoading;
23745
23980
  const canUploadAttachments = composer?.attachments?.enabled === true && !isPromptEditDisabled;
23746
23981
  const queueAttachmentFiles = React66.useCallback((files) => {
@@ -23960,7 +24195,7 @@ function Chat({
23960
24195
  );
23961
24196
  const filesToSend = mergedFiles.length > 0 ? mergedFiles : void 0;
23962
24197
  const referencesToSend = references.length > 0 ? [...references] : void 0;
23963
- const nextFollowUpMode = stream.isLoading ? "queue" : void 0;
24198
+ const nextFollowUpMode = stream.isLoading && !stream.isDisplayPaused && !isRunPaused ? "queue" : void 0;
23964
24199
  const effectivePlanMode = submitOptions.planMode ?? planModeEnabled;
23965
24200
  const humanInput = buildHumanMessageInputPayload({
23966
24201
  content: contentToSubmit,
@@ -24057,6 +24292,7 @@ function Chat({
24057
24292
  };
24058
24293
  const submission = stream.submit(
24059
24294
  {
24295
+ id: newMessage.id,
24060
24296
  input: inputPayload,
24061
24297
  ...requestOptions.state ? { state: requestOptions.state } : {}
24062
24298
  },
@@ -24089,6 +24325,7 @@ function Chat({
24089
24325
  getRuntimeCapabilitiesForSubmit,
24090
24326
  promptWorkflow,
24091
24327
  isSubmissionBlocked,
24328
+ isRunPaused,
24092
24329
  options?.request,
24093
24330
  persistSessionRuntimeCapabilities,
24094
24331
  references,
@@ -24842,6 +25079,136 @@ function Chat({
24842
25079
  );
24843
25080
  });
24844
25081
  };
25082
+ const handleComposerRunControl = async (action) => {
25083
+ const sourceThreadId = stream.threadId;
25084
+ if (isChangingBranch || isRunPausing || isResumingRun) return;
25085
+ if (action === "resume") {
25086
+ if (!sourceThreadId || !canRevealPausedDisplay && (!isRunPaused || !currentRunControl?.pauseId)) return;
25087
+ } else {
25088
+ if (isRunPaused) return;
25089
+ if (!sourceThreadId || !pauseRunId) return;
25090
+ }
25091
+ if (!sourceThreadId) return;
25092
+ if (runControlRequestRef.current?.threadId === sourceThreadId) return;
25093
+ const runId = pauseRunId;
25094
+ if (!runId) return;
25095
+ const request = {
25096
+ action,
25097
+ threadId: sourceThreadId,
25098
+ runId
25099
+ };
25100
+ runControlRequestRef.current = request;
25101
+ setRunControlRequest(request);
25102
+ setRunControlError(null);
25103
+ try {
25104
+ if (action === "resume" && canRevealPausedDisplay) {
25105
+ await stream.resumeDisplay();
25106
+ } else if (action === "resume" && currentRunControl?.pauseId) {
25107
+ await stream.resumeRun(request.runId, currentRunControl.pauseId);
25108
+ } else {
25109
+ await stream.pauseRun(request.runId);
25110
+ }
25111
+ if (activeBranchRef.current === sourceThreadId) {
25112
+ await branchState.refresh();
25113
+ }
25114
+ } catch (error) {
25115
+ if (activeBranchRef.current === sourceThreadId && runControlRequestRef.current === request) {
25116
+ setRunControlError({
25117
+ threadId: sourceThreadId,
25118
+ message: error instanceof Error ? error.message : String(error)
25119
+ });
25120
+ }
25121
+ } finally {
25122
+ if (runControlRequestRef.current === request) {
25123
+ runControlRequestRef.current = null;
25124
+ setRunControlRequest(null);
25125
+ }
25126
+ }
25127
+ };
25128
+ const saveEditedMessage = async (message, text) => {
25129
+ const sourceThreadId = stream.threadId;
25130
+ if (!sourceThreadId || !message.id) return;
25131
+ const request = editRequestRef.current?.messageId === message.id ? editRequestRef.current : { messageId: message.id, requestId: createMessageId() };
25132
+ editRequestRef.current = request;
25133
+ setIsChangingBranch(true);
25134
+ try {
25135
+ const branch = await stream.client.threads.copy(sourceThreadId, {
25136
+ beforeMessageId: message.id,
25137
+ requestId: request.requestId
25138
+ });
25139
+ if (activeBranchRef.current !== sourceThreadId) return;
25140
+ const source = await stream.client.threads.get(sourceThreadId);
25141
+ if (activeBranchRef.current !== sourceThreadId) return;
25142
+ if (source.status === "busy") {
25143
+ if (!source.runControl?.executionId) {
25144
+ throw new Error(t("threadControl.sourcePauseUnavailable"));
25145
+ }
25146
+ try {
25147
+ await stream.pauseRun(source.runControl.executionId);
25148
+ } catch (error) {
25149
+ const latest = await stream.client.threads.get(sourceThreadId).catch(() => null);
25150
+ if (!latest || latest.status === "busy") throw error;
25151
+ }
25152
+ }
25153
+ if (activeBranchRef.current !== sourceThreadId) return;
25154
+ activeBranchRef.current = branch.thread_id;
25155
+ stream.reset(branch.thread_id, []);
25156
+ await stream.loadThread(branch.thread_id);
25157
+ if (activeBranchRef.current !== branch.thread_id) return;
25158
+ const humanInput = buildHumanMessageInputPayload({
25159
+ content: text,
25160
+ references: message.references,
25161
+ referenceComposition: "compose"
25162
+ });
25163
+ if (!humanInput) return;
25164
+ const files = mergeSubmittedFiles(
25165
+ message.fileAssets ?? [],
25166
+ message.attachments ?? []
25167
+ );
25168
+ const edited = {
25169
+ ...message,
25170
+ type: "human",
25171
+ id: createMessageId(),
25172
+ content: text,
25173
+ submittedInput: humanInput.input,
25174
+ referenceComposition: humanInput.referenceComposition
25175
+ };
25176
+ const input = {
25177
+ ...humanInput,
25178
+ ...files.length ? { files } : {},
25179
+ ...message.runtimeCapabilities ? { runtimeCapabilities: message.runtimeCapabilities } : {},
25180
+ ...message.model ? { model: message.model } : {}
25181
+ };
25182
+ const requestOptions = buildInjectedRequestOptions({
25183
+ defaults: options?.request,
25184
+ humanInput: input
25185
+ });
25186
+ setEditingMessageId(null);
25187
+ setIsChangingBranch(false);
25188
+ const submission = stream.submit(
25189
+ {
25190
+ id: edited.id,
25191
+ input,
25192
+ ...requestOptions.state ? { state: requestOptions.state } : {}
25193
+ },
25194
+ {
25195
+ threadId: branch.thread_id,
25196
+ joinExistingThread: true,
25197
+ ...requestOptions.context ? { context: requestOptions.context } : {},
25198
+ ...requestOptions.config ? { config: requestOptions.config } : {},
25199
+ optimisticValues: (previous) => ({
25200
+ ...previous,
25201
+ messages: [...previous.messages ?? [], edited]
25202
+ })
25203
+ }
25204
+ );
25205
+ void submission.catch((error) => {
25206
+ setHistoryError(error instanceof Error ? error.message : String(error));
25207
+ });
25208
+ } finally {
25209
+ setIsChangingBranch(false);
25210
+ }
25211
+ };
24845
25212
  const handleRetry = (messageIndex) => {
24846
25213
  const messagesUpToIndex = messages.slice(0, messageIndex);
24847
25214
  const lastHumanMessage = [...messagesUpToIndex].reverse().find((m) => String(m.type) === "human");
@@ -25007,13 +25374,13 @@ function Chat({
25007
25374
  onFocusComposer: () => focusComposerAt(),
25008
25375
  onOpenResource: openTaskSummaryResource
25009
25376
  };
25010
- return /* @__PURE__ */ jsxs54(
25377
+ return /* @__PURE__ */ jsxs55(
25011
25378
  "div",
25012
25379
  {
25013
25380
  className: "relative flex h-full w-full min-w-0 bg-background",
25014
25381
  "data-task-summary-layout": taskSummaryDocked ? "docked" : "popover",
25015
25382
  children: [
25016
- /* @__PURE__ */ jsxs54(
25383
+ /* @__PURE__ */ jsxs55(
25017
25384
  UploadDroppedFiles,
25018
25385
  {
25019
25386
  ref: viewportRef,
@@ -25028,7 +25395,7 @@ function Chat({
25028
25395
  className
25029
25396
  ),
25030
25397
  children: [
25031
- surface === "main" && options?.header?.enabled !== false && /* @__PURE__ */ jsxs54(
25398
+ surface === "main" && options?.header?.enabled !== false && /* @__PURE__ */ jsxs55(
25032
25399
  "div",
25033
25400
  {
25034
25401
  ref: chatColumnRef,
@@ -25036,9 +25403,9 @@ function Chat({
25036
25403
  className: "mx-auto flex w-full items-center justify-between border-b p-2 sticky top-0 z-10 bg-background",
25037
25404
  style: chatColumnStyle,
25038
25405
  children: [
25039
- /* @__PURE__ */ jsxs54("div", { className: "flex min-w-0 items-center gap-3 overflow-hidden", children: [
25040
- /* @__PURE__ */ jsxs54("div", { className: "relative shrink-0", children: [
25041
- /* @__PURE__ */ jsx73(
25406
+ /* @__PURE__ */ jsxs55("div", { className: "flex min-w-0 items-center gap-3 overflow-hidden", children: [
25407
+ /* @__PURE__ */ jsxs55("div", { className: "relative shrink-0", children: [
25408
+ /* @__PURE__ */ jsx74(
25042
25409
  ChatkitAvatar,
25043
25410
  {
25044
25411
  avatar: assistantAvatar,
@@ -25046,10 +25413,10 @@ function Chat({
25046
25413
  label: assistantTitle
25047
25414
  }
25048
25415
  ),
25049
- /* @__PURE__ */ jsx73("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
25416
+ /* @__PURE__ */ jsx74("span", { className: "absolute bottom-0 right-0 h-2.5 w-2.5 rounded-full border-2 border-background bg-green-500" })
25050
25417
  ] }),
25051
- /* @__PURE__ */ jsxs54("div", { className: "min-w-0", children: [
25052
- /* @__PURE__ */ jsx73(
25418
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0", children: [
25419
+ /* @__PURE__ */ jsx74(
25053
25420
  "h2",
25054
25421
  {
25055
25422
  className: "text-lg font-semibold truncate",
@@ -25057,7 +25424,7 @@ function Chat({
25057
25424
  children: assistantTitle
25058
25425
  }
25059
25426
  ),
25060
- /* @__PURE__ */ jsx73(
25427
+ /* @__PURE__ */ jsx74(
25061
25428
  "p",
25062
25429
  {
25063
25430
  className: "truncate text-xs text-muted-foreground",
@@ -25067,8 +25434,8 @@ function Chat({
25067
25434
  )
25068
25435
  ] })
25069
25436
  ] }),
25070
- /* @__PURE__ */ jsxs54("div", { className: "flex items-center gap-1", children: [
25071
- taskSummaryAvailable && /* @__PURE__ */ jsx73(
25437
+ /* @__PURE__ */ jsxs55("div", { className: "flex items-center gap-1", children: [
25438
+ taskSummaryAvailable && /* @__PURE__ */ jsx74(
25072
25439
  TaskSummaryTrigger,
25073
25440
  {
25074
25441
  ...taskSummaryProps,
@@ -25077,9 +25444,9 @@ function Chat({
25077
25444
  onOpenChange: handleTaskSummaryOpenChange
25078
25445
  }
25079
25446
  ),
25080
- /* @__PURE__ */ jsx73(WorkbenchToggleButton, {}),
25081
- canMinimizeToPet && /* @__PURE__ */ jsxs54(Tooltip, { children: [
25082
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx73(
25447
+ /* @__PURE__ */ jsx74(WorkbenchToggleButton, {}),
25448
+ canMinimizeToPet && /* @__PURE__ */ jsxs55(Tooltip, { children: [
25449
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx74(
25083
25450
  "button",
25084
25451
  {
25085
25452
  type: "button",
@@ -25090,13 +25457,13 @@ function Chat({
25090
25457
  "transition-colors duration-150"
25091
25458
  ),
25092
25459
  "aria-label": t("chat.minimizeToPet"),
25093
- children: /* @__PURE__ */ jsx73(Minus, { size: 16 })
25460
+ children: /* @__PURE__ */ jsx74(Minus, { size: 16 })
25094
25461
  }
25095
25462
  ) }) }),
25096
- /* @__PURE__ */ jsx73(TooltipContent, { side: "bottom", children: t("chat.minimizeToPet") })
25463
+ /* @__PURE__ */ jsx74(TooltipContent, { side: "bottom", children: t("chat.minimizeToPet") })
25097
25464
  ] }),
25098
- /* @__PURE__ */ jsxs54(Tooltip, { children: [
25099
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx73(
25465
+ /* @__PURE__ */ jsxs55(Tooltip, { children: [
25466
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx74(
25100
25467
  "button",
25101
25468
  {
25102
25469
  type: "button",
@@ -25107,14 +25474,14 @@ function Chat({
25107
25474
  "transition-colors duration-150"
25108
25475
  ),
25109
25476
  "aria-label": t("settings.open"),
25110
- children: /* @__PURE__ */ jsx73(Settings2, { size: 16 })
25477
+ children: /* @__PURE__ */ jsx74(Settings2, { size: 16 })
25111
25478
  }
25112
25479
  ) }) }),
25113
- /* @__PURE__ */ jsx73(TooltipContent, { side: "bottom", children: t("settings.open") })
25480
+ /* @__PURE__ */ jsx74(TooltipContent, { side: "bottom", children: t("settings.open") })
25114
25481
  ] }),
25115
- history?.enabled !== false && /* @__PURE__ */ jsxs54(Fragment13, { children: [
25116
- /* @__PURE__ */ jsxs54(Tooltip, { children: [
25117
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx73(
25482
+ history?.enabled !== false && /* @__PURE__ */ jsxs55(Fragment13, { children: [
25483
+ /* @__PURE__ */ jsxs55(Tooltip, { children: [
25484
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74("span", { className: "inline-flex h-8 w-8", children: /* @__PURE__ */ jsx74(
25118
25485
  "button",
25119
25486
  {
25120
25487
  type: "button",
@@ -25127,12 +25494,12 @@ function Chat({
25127
25494
  "disabled:pointer-events-none disabled:opacity-50 disabled:cursor-not-allowed"
25128
25495
  ),
25129
25496
  "aria-label": t("history.newThread"),
25130
- children: /* @__PURE__ */ jsx73(Pencil5, { size: 16 })
25497
+ children: /* @__PURE__ */ jsx74(Pencil6, { size: 16 })
25131
25498
  }
25132
25499
  ) }) }),
25133
- /* @__PURE__ */ jsx73(TooltipContent, { side: "bottom", children: t("history.newThread") })
25500
+ /* @__PURE__ */ jsx74(TooltipContent, { side: "bottom", children: t("history.newThread") })
25134
25501
  ] }),
25135
- /* @__PURE__ */ jsx73(
25502
+ /* @__PURE__ */ jsx74(
25136
25503
  HistorySidebar,
25137
25504
  {
25138
25505
  threads,
@@ -25151,7 +25518,7 @@ function Chat({
25151
25518
  ]
25152
25519
  }
25153
25520
  ),
25154
- showMessageNavigation && /* @__PURE__ */ jsx73(
25521
+ showMessageNavigation && /* @__PURE__ */ jsx74(
25155
25522
  MessageNavigator,
25156
25523
  {
25157
25524
  items: messageNavigationItems,
@@ -25162,7 +25529,7 @@ function Chat({
25162
25529
  tagsOverflowLabel: (count) => t("message.navigation.moreTags", { count })
25163
25530
  }
25164
25531
  ),
25165
- /* @__PURE__ */ jsxs54(
25532
+ /* @__PURE__ */ jsxs55(
25166
25533
  "div",
25167
25534
  {
25168
25535
  "data-slot": "chatkit-chat-content",
@@ -25172,10 +25539,10 @@ function Chat({
25172
25539
  ),
25173
25540
  style: chatColumnStyle,
25174
25541
  children: [
25175
- errorMessage && /* @__PURE__ */ jsx73("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
25176
- historyError && /* @__PURE__ */ jsx73("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
25177
- showMissingConfig && /* @__PURE__ */ jsx73("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: missingConfigDetailMessage }),
25178
- /* @__PURE__ */ jsx73(
25542
+ errorMessage && /* @__PURE__ */ jsx74("div", { className: "mb-4 rounded-lg border border-destructive/30 bg-destructive/10 px-3 py-2 text-sm text-destructive", children: errorMessage }),
25543
+ historyError && /* @__PURE__ */ jsx74("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: historyError }),
25544
+ showMissingConfig && /* @__PURE__ */ jsx74("div", { className: "mb-4 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900", children: missingConfigDetailMessage }),
25545
+ /* @__PURE__ */ jsx74(
25179
25546
  ThreadHistoryStatus,
25180
25547
  {
25181
25548
  state: stream.historyLoad,
@@ -25185,7 +25552,7 @@ function Chat({
25185
25552
  }
25186
25553
  }
25187
25554
  ),
25188
- !stream.threadId && messages.length === 0 && !canLoadMoreMessages ? /* @__PURE__ */ jsx73(
25555
+ !stream.threadId && messages.length === 0 && !canLoadMoreMessages ? /* @__PURE__ */ jsx74(
25189
25556
  StartScreen,
25190
25557
  {
25191
25558
  startScreen,
@@ -25195,10 +25562,10 @@ function Chat({
25195
25562
  promptEditDisabled: isPromptEditDisabled,
25196
25563
  className: "px-4 pb-4 pt-2"
25197
25564
  }
25198
- ) : /* @__PURE__ */ jsxs54("div", { className: "space-y-4", children: [
25199
- canLoadMoreMessages && /* @__PURE__ */ jsxs54("div", { className: "flex items-center gap-3 py-1", children: [
25200
- /* @__PURE__ */ jsx73("div", { className: "h-px min-w-8 flex-1 bg-border" }),
25201
- /* @__PURE__ */ jsx73(
25565
+ ) : /* @__PURE__ */ jsxs55("div", { className: "space-y-4", children: [
25566
+ canLoadMoreMessages && /* @__PURE__ */ jsxs55("div", { className: "flex items-center gap-3 py-1", children: [
25567
+ /* @__PURE__ */ jsx74("div", { className: "h-px min-w-8 flex-1 bg-border" }),
25568
+ /* @__PURE__ */ jsx74(
25202
25569
  Button,
25203
25570
  {
25204
25571
  type: "button",
@@ -25210,12 +25577,12 @@ function Chat({
25210
25577
  children: isLoadingMoreMessages ? t("chat.loadingMoreMessages") : t("chat.loadMoreMessages")
25211
25578
  }
25212
25579
  ),
25213
- /* @__PURE__ */ jsx73("div", { className: "h-px min-w-8 flex-1 bg-border" })
25580
+ /* @__PURE__ */ jsx74("div", { className: "h-px min-w-8 flex-1 bg-border" })
25214
25581
  ] }),
25215
25582
  messages.map((message, index) => {
25216
25583
  const messageType = String(message.type);
25217
25584
  const isAssistantMessage = messageType === "assistant" || messageType === "ai";
25218
- const isStreamingMessage = stream.isLoading && index === messages.length - 1;
25585
+ const isStreamingMessage = isVisibleStreaming && index === messages.length - 1;
25219
25586
  const streamingStatus = isAssistantMessage ? getAssistantStreamingStatus(
25220
25587
  {
25221
25588
  ...message,
@@ -25246,6 +25613,8 @@ function Chat({
25246
25613
  ) : [];
25247
25614
  const hasHumanAttachments = message.type === "human" && humanAttachments.length > 0;
25248
25615
  const canQuoteMessage = message.type === "human" || isAssistantMessage;
25616
+ const isEditingMessage = Boolean(message.id) && editingMessageId === message.id;
25617
+ const canEditMessage = message.type === "human" && Boolean(branchState.current) && Boolean(message.id) && humanMessage.inputCheckpoint !== null && !humanMessage.followUpMode && !isChangingBranch;
25249
25618
  const quoteSource = message.type === "human" ? t("chat.youLabel") : assistantTitle;
25250
25619
  const messageNavigationId = getMessageNavigationItemId(
25251
25620
  message,
@@ -25254,7 +25623,7 @@ function Chat({
25254
25623
  if (!isAssistantMessage && !hasPlainRenderableContent && !hasHumanAttachments && humanRuntimeCapabilityOptions.length === 0 && humanReferences.length === 0) {
25255
25624
  return null;
25256
25625
  }
25257
- return /* @__PURE__ */ jsx73(
25626
+ return /* @__PURE__ */ jsx74(
25258
25627
  "div",
25259
25628
  {
25260
25629
  ref: (node) => setMessageNavigationAnchor(messageNavigationId, node),
@@ -25264,15 +25633,23 @@ function Chat({
25264
25633
  message.type === "human" ? "justify-end" : "justify-start -ml-1"
25265
25634
  // AI messages: slightly closer to left
25266
25635
  ),
25267
- children: /* @__PURE__ */ jsxs54(
25636
+ children: /* @__PURE__ */ jsx74(
25268
25637
  "div",
25269
25638
  {
25270
25639
  className: cn(
25271
25640
  "flex flex-col px-3 overflow-hidden",
25272
- isAssistantMessage && "min-w-0 flex-1"
25641
+ (isAssistantMessage || isEditingMessage) && "min-w-0 flex-1"
25273
25642
  ),
25274
- children: [
25275
- /* @__PURE__ */ jsx73(
25643
+ children: isEditingMessage ? /* @__PURE__ */ jsx74(
25644
+ MessageEditor,
25645
+ {
25646
+ initialText: typeof message.content === "string" ? message.content : messageContent,
25647
+ onCancel: () => setEditingMessageId(null),
25648
+ onSave: (text) => saveEditedMessage(message, text)
25649
+ },
25650
+ message.id
25651
+ ) : /* @__PURE__ */ jsxs55(Fragment13, { children: [
25652
+ /* @__PURE__ */ jsx74(
25276
25653
  "div",
25277
25654
  {
25278
25655
  ...canQuoteMessage ? {
@@ -25284,7 +25661,7 @@ function Chat({
25284
25661
  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"
25285
25662
  // AI messages: use chat-specific foreground color
25286
25663
  ),
25287
- children: isAssistantMessage ? /* @__PURE__ */ jsx73(
25664
+ children: isAssistantMessage ? /* @__PURE__ */ jsx74(
25288
25665
  AssistantMessage,
25289
25666
  {
25290
25667
  message: {
@@ -25300,19 +25677,20 @@ function Chat({
25300
25677
  isStreaming: isStreamingMessage,
25301
25678
  streamingStatus,
25302
25679
  isThreadRunning: currentThreadIsRunning,
25680
+ isThreadPaused: isPauseActive,
25303
25681
  organizationId: stream.organizationId,
25304
25682
  apiUrl: stream.apiUrl,
25305
25683
  pet: effectivePet,
25306
25684
  mcpApps: options?.mcpApps
25307
25685
  }
25308
- ) : /* @__PURE__ */ jsxs54(Fragment13, { children: [
25309
- message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx73(
25686
+ ) : /* @__PURE__ */ jsxs55(Fragment13, { children: [
25687
+ message.type === "human" && humanRuntimeCapabilityOptions.length > 0 && /* @__PURE__ */ jsx74(
25310
25688
  HumanRuntimeCapabilityChips,
25311
25689
  {
25312
25690
  options: humanRuntimeCapabilityOptions
25313
25691
  }
25314
25692
  ),
25315
- message.type === "human" && humanReferences.length > 0 && /* @__PURE__ */ jsx73("div", { className: "mb-2 flex flex-wrap gap-1.5", children: humanReferences.map((reference) => /* @__PURE__ */ jsx73(
25693
+ message.type === "human" && humanReferences.length > 0 && /* @__PURE__ */ jsx74("div", { className: "mb-2 flex flex-wrap gap-1.5", children: humanReferences.map((reference) => /* @__PURE__ */ jsx74(
25316
25694
  ReferenceChip,
25317
25695
  {
25318
25696
  reference,
@@ -25320,45 +25698,49 @@ function Chat({
25320
25698
  },
25321
25699
  getReferenceKey(reference)
25322
25700
  )) }),
25323
- message.type === "human" && humanAttachments.length > 0 && /* @__PURE__ */ jsx73("div", { className: "flex flex-wrap gap-1.5 mb-2", children: humanAttachments.map((file, fileIndex) => /* @__PURE__ */ jsxs54(
25701
+ message.type === "human" && humanAttachments.length > 0 && /* @__PURE__ */ jsx74("div", { className: "flex flex-wrap gap-1.5 mb-2", children: humanAttachments.map((file, fileIndex) => /* @__PURE__ */ jsxs55(
25324
25702
  "div",
25325
25703
  {
25326
25704
  className: "flex items-center gap-1.5 rounded-md bg-primary-foreground/20 px-2 py-1 text-xs",
25327
25705
  children: [
25328
- /* @__PURE__ */ jsx73(FileText7, { size: 12 }),
25329
- /* @__PURE__ */ jsx73("span", { className: "max-w-[100px] truncate", children: file.originalName ?? file.id })
25706
+ /* @__PURE__ */ jsx74(FileText6, { size: 12 }),
25707
+ /* @__PURE__ */ jsx74("span", { className: "max-w-[100px] truncate", children: file.originalName ?? file.id })
25330
25708
  ]
25331
25709
  },
25332
25710
  fileIndex
25333
25711
  )) }),
25334
- Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx73(
25712
+ Array.isArray(message.content) ? message.content.map((part, partIndex) => /* @__PURE__ */ jsx74(
25335
25713
  "p",
25336
25714
  {
25337
25715
  className: "wrap-break-word text-sm leading-relaxed",
25338
25716
  children: formatMessageContent(part)
25339
25717
  },
25340
25718
  `${part.type}-${partIndex}`
25341
- )) : /* @__PURE__ */ jsx73("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
25719
+ )) : /* @__PURE__ */ jsx74("span", { className: "wrap-break-word text-sm leading-relaxed", children: formatMessageContent(message.content) })
25342
25720
  ] })
25343
25721
  }
25344
25722
  ),
25345
- /* @__PURE__ */ jsx73(
25723
+ /* @__PURE__ */ jsx74(
25346
25724
  MessageActions,
25347
25725
  {
25348
25726
  content: messageContent,
25349
25727
  isAssistant: isAssistantMessage,
25350
25728
  isStreaming: isStreamingMessage,
25351
- onRetry: isAssistantMessage && !stream.isLoading && index === messages.length - 1 ? () => handleRetry(index) : void 0
25729
+ onEdit: canEditMessage ? () => {
25730
+ editRequestRef.current = null;
25731
+ setEditingMessageId(message.id ?? null);
25732
+ } : void 0,
25733
+ onRetry: isAssistantMessage && branchState.current?.status !== "paused" && branchState.current?.status !== "pausing" && !stream.isLoading && index === messages.length - 1 ? () => handleRetry(index) : void 0
25352
25734
  }
25353
25735
  )
25354
- ]
25736
+ ] })
25355
25737
  }
25356
25738
  )
25357
25739
  },
25358
25740
  message.id ?? `${message.type}-${index}`
25359
25741
  );
25360
25742
  }),
25361
- showLoadingDots && (() => {
25743
+ showLoadingDots && !stream.isDisplayPaused && (() => {
25362
25744
  const lastMessage = messages[messages.length - 1];
25363
25745
  const lastMessageType = lastMessage ? String(lastMessage.type) : "";
25364
25746
  const isLastMessageFromAI = lastMessageType === "ai" || lastMessageType === "assistant";
@@ -25380,7 +25762,7 @@ function Chat({
25380
25762
  stream.isLoading,
25381
25763
  { now: streamingNow }
25382
25764
  );
25383
- return /* @__PURE__ */ jsx73("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx73("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsx73(
25765
+ return /* @__PURE__ */ jsx74("div", { className: "flex justify-start gap-3 -ml-2", children: /* @__PURE__ */ jsx74("div", { className: "max-w-full rounded-2xl py-2.5", children: /* @__PURE__ */ jsx74(
25384
25766
  AssistantStreamingIndicator,
25385
25767
  {
25386
25768
  status: fallbackStreamingStatus ?? "loading"
@@ -25391,7 +25773,7 @@ function Chat({
25391
25773
  ]
25392
25774
  }
25393
25775
  ),
25394
- quoteSelection && /* @__PURE__ */ jsxs54(
25776
+ quoteSelection && /* @__PURE__ */ jsxs55(
25395
25777
  "div",
25396
25778
  {
25397
25779
  className: "pointer-events-none fixed z-50 flex flex-col items-center gap-1",
@@ -25401,8 +25783,8 @@ function Chat({
25401
25783
  transform: "translateX(-50%)"
25402
25784
  },
25403
25785
  children: [
25404
- /* @__PURE__ */ jsxs54("div", { className: "pointer-events-auto flex overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg", children: [
25405
- /* @__PURE__ */ jsxs54(
25786
+ /* @__PURE__ */ jsxs55("div", { className: "pointer-events-auto flex overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-lg", children: [
25787
+ /* @__PURE__ */ jsxs55(
25406
25788
  Button,
25407
25789
  {
25408
25790
  type: "button",
@@ -25414,12 +25796,12 @@ function Chat({
25414
25796
  "aria-label": t("composer.quoteSelection"),
25415
25797
  title: t("composer.quoteSelection"),
25416
25798
  children: [
25417
- /* @__PURE__ */ jsx73(Quote, { size: 14 }),
25799
+ /* @__PURE__ */ jsx74(Quote, { size: 14 }),
25418
25800
  t("composer.quoteSelection")
25419
25801
  ]
25420
25802
  }
25421
25803
  ),
25422
- workbench.sideChatEnabled && /* @__PURE__ */ jsxs54(
25804
+ workbench.sideChatEnabled && /* @__PURE__ */ jsxs55(
25423
25805
  Button,
25424
25806
  {
25425
25807
  type: "button",
@@ -25432,17 +25814,17 @@ function Chat({
25432
25814
  "aria-label": t("composer.askInSideChat"),
25433
25815
  title: t("composer.askInSideChat"),
25434
25816
  children: [
25435
- isOpeningSideChat ? /* @__PURE__ */ jsx73(Loader214, { size: 14, className: "animate-spin" }) : /* @__PURE__ */ jsx73(MessageSquarePlus, { size: 14 }),
25817
+ isOpeningSideChat ? /* @__PURE__ */ jsx74(Loader213, { size: 14, className: "animate-spin" }) : /* @__PURE__ */ jsx74(MessageSquarePlus, { size: 14 }),
25436
25818
  t("composer.askInSideChat")
25437
25819
  ]
25438
25820
  }
25439
25821
  )
25440
25822
  ] }),
25441
- sideChatError && /* @__PURE__ */ jsx73("div", { className: "pointer-events-auto max-w-72 rounded-md bg-destructive px-2 py-1 text-xs text-destructive-foreground shadow", children: sideChatError })
25823
+ sideChatError && /* @__PURE__ */ jsx74("div", { className: "pointer-events-auto max-w-72 rounded-md bg-destructive px-2 py-1 text-xs text-destructive-foreground shadow", children: sideChatError })
25442
25824
  ]
25443
25825
  }
25444
25826
  ),
25445
- /* @__PURE__ */ jsxs54(
25827
+ /* @__PURE__ */ jsxs55(
25446
25828
  "div",
25447
25829
  {
25448
25830
  "data-slot": "chatkit-chat-composer",
@@ -25453,12 +25835,13 @@ function Chat({
25453
25835
  ),
25454
25836
  style: chatColumnStyle,
25455
25837
  children: [
25456
- !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx73(
25838
+ runControlError?.threadId === stream.threadId && /* @__PURE__ */ jsx74("p", { role: "alert", className: "text-xs text-destructive", children: runControlError.message }),
25839
+ !isAtBottom && messages.length > 0 && /* @__PURE__ */ jsx74(
25457
25840
  "div",
25458
25841
  {
25459
25842
  "data-slot": "scroll-to-bottom",
25460
25843
  className: "pointer-events-none absolute left-1/2 top-0 z-20 flex -translate-x-1/2 -translate-y-full justify-center",
25461
- children: /* @__PURE__ */ jsx73(
25844
+ children: /* @__PURE__ */ jsx74(
25462
25845
  Button,
25463
25846
  {
25464
25847
  type: "button",
@@ -25471,13 +25854,13 @@ function Chat({
25471
25854
  onClick: () => scrollToBottom(true, true),
25472
25855
  "aria-label": t("chat.scrollToBottom"),
25473
25856
  title: t("chat.scrollToBottom"),
25474
- children: /* @__PURE__ */ jsx73(ArrowDown2, { size: 16 })
25857
+ children: /* @__PURE__ */ jsx74(ArrowDown2, { size: 16 })
25475
25858
  }
25476
25859
  )
25477
25860
  }
25478
25861
  ),
25479
- threadErrorMessage && /* @__PURE__ */ jsx73("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 }),
25480
- showGoalStatus && /* @__PURE__ */ jsxs54(
25862
+ threadErrorMessage && /* @__PURE__ */ jsx74("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 }),
25863
+ showGoalStatus && /* @__PURE__ */ jsxs55(
25481
25864
  "div",
25482
25865
  {
25483
25866
  className: cn(
@@ -25485,7 +25868,7 @@ function Chat({
25485
25868
  isGoalObjectiveExpanded ? "items-start" : "items-center"
25486
25869
  ),
25487
25870
  children: [
25488
- /* @__PURE__ */ jsx73(
25871
+ /* @__PURE__ */ jsx74(
25489
25872
  Target3,
25490
25873
  {
25491
25874
  className: cn(
@@ -25494,13 +25877,13 @@ function Chat({
25494
25877
  )
25495
25878
  }
25496
25879
  ),
25497
- /* @__PURE__ */ jsxs54("div", { className: "min-w-0 flex-1", children: [
25498
- /* @__PURE__ */ jsxs54("div", { className: "flex min-w-0 items-center gap-2", children: [
25499
- /* @__PURE__ */ jsx73("span", { className: "font-medium", children: t("chat.goal.label") }),
25500
- threadGoal && /* @__PURE__ */ jsx73("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}`) }),
25501
- isGoalLoading && /* @__PURE__ */ jsx73(Loader214, { className: "size-3 animate-spin text-muted-foreground" })
25880
+ /* @__PURE__ */ jsxs55("div", { className: "min-w-0 flex-1", children: [
25881
+ /* @__PURE__ */ jsxs55("div", { className: "flex min-w-0 items-center gap-2", children: [
25882
+ /* @__PURE__ */ jsx74("span", { className: "font-medium", children: t("chat.goal.label") }),
25883
+ threadGoal && /* @__PURE__ */ jsx74("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}`) }),
25884
+ isGoalLoading && /* @__PURE__ */ jsx74(Loader213, { className: "size-3 animate-spin text-muted-foreground" })
25502
25885
  ] }),
25503
- /* @__PURE__ */ jsx73(
25886
+ /* @__PURE__ */ jsx74(
25504
25887
  "div",
25505
25888
  {
25506
25889
  className: cn(
@@ -25510,13 +25893,13 @@ function Chat({
25510
25893
  children: goalError || threadGoal?.objective
25511
25894
  }
25512
25895
  ),
25513
- threadGoal && /* @__PURE__ */ jsx73("div", { className: "mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx73("span", { children: t("chat.goal.elapsed", {
25896
+ threadGoal && /* @__PURE__ */ jsx74("div", { className: "mt-1 flex flex-wrap gap-x-3 gap-y-1 text-[11px] text-muted-foreground", children: /* @__PURE__ */ jsx74("span", { children: t("chat.goal.elapsed", {
25514
25897
  elapsed: formatGoalElapsed(displayedGoalElapsedSeconds)
25515
25898
  }) }) })
25516
25899
  ] }),
25517
- threadGoal && /* @__PURE__ */ jsxs54("div", { className: "flex shrink-0 items-center gap-1", children: [
25518
- /* @__PURE__ */ jsxs54(Tooltip, { children: [
25519
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73(
25900
+ threadGoal && /* @__PURE__ */ jsxs55("div", { className: "flex shrink-0 items-center gap-1", children: [
25901
+ /* @__PURE__ */ jsxs55(Tooltip, { children: [
25902
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74(
25520
25903
  Button,
25521
25904
  {
25522
25905
  type: "button",
@@ -25527,13 +25910,13 @@ function Chat({
25527
25910
  const prefix = "/goal edit ";
25528
25911
  setComposerText(`${prefix}${threadGoal.objective}`);
25529
25912
  },
25530
- children: /* @__PURE__ */ jsx73(Pencil5, { className: "size-3" })
25913
+ children: /* @__PURE__ */ jsx74(Pencil6, { className: "size-3" })
25531
25914
  }
25532
25915
  ) }),
25533
- /* @__PURE__ */ jsx73(TooltipContent, { children: t("chat.goal.edit") })
25916
+ /* @__PURE__ */ jsx74(TooltipContent, { children: t("chat.goal.edit") })
25534
25917
  ] }),
25535
- /* @__PURE__ */ jsxs54(Tooltip, { children: [
25536
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73(
25918
+ /* @__PURE__ */ jsxs55(Tooltip, { children: [
25919
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74(
25537
25920
  Button,
25538
25921
  {
25539
25922
  type: "button",
@@ -25549,13 +25932,13 @@ function Chat({
25549
25932
  executionType: "insert_invocation"
25550
25933
  }
25551
25934
  }),
25552
- children: threadGoal.status === "paused" ? /* @__PURE__ */ jsx73(Play, { className: "size-3" }) : /* @__PURE__ */ jsx73(Pause, { className: "size-3" })
25935
+ children: threadGoal.status === "paused" ? /* @__PURE__ */ jsx74(Play2, { className: "size-3" }) : /* @__PURE__ */ jsx74(Pause, { className: "size-3" })
25553
25936
  }
25554
25937
  ) }),
25555
- /* @__PURE__ */ jsx73(TooltipContent, { children: threadGoal.status === "paused" ? t("chat.goal.resume") : t("chat.goal.pause") })
25938
+ /* @__PURE__ */ jsx74(TooltipContent, { children: threadGoal.status === "paused" ? t("chat.goal.resume") : t("chat.goal.pause") })
25556
25939
  ] }),
25557
- /* @__PURE__ */ jsxs54(Tooltip, { children: [
25558
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73(
25940
+ /* @__PURE__ */ jsxs55(Tooltip, { children: [
25941
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74(
25559
25942
  Button,
25560
25943
  {
25561
25944
  type: "button",
@@ -25571,13 +25954,13 @@ function Chat({
25571
25954
  executionType: "insert_invocation"
25572
25955
  }
25573
25956
  }),
25574
- children: /* @__PURE__ */ jsx73(Trash23, { className: "size-3" })
25957
+ children: /* @__PURE__ */ jsx74(Trash23, { className: "size-3" })
25575
25958
  }
25576
25959
  ) }),
25577
- /* @__PURE__ */ jsx73(TooltipContent, { children: t("chat.goal.clear") })
25960
+ /* @__PURE__ */ jsx74(TooltipContent, { children: t("chat.goal.clear") })
25578
25961
  ] }),
25579
- threadGoal.objective && !goalError && /* @__PURE__ */ jsxs54(Tooltip, { children: [
25580
- /* @__PURE__ */ jsx73(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx73(
25962
+ threadGoal.objective && !goalError && /* @__PURE__ */ jsxs55(Tooltip, { children: [
25963
+ /* @__PURE__ */ jsx74(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx74(
25581
25964
  Button,
25582
25965
  {
25583
25966
  type: "button",
@@ -25586,7 +25969,7 @@ function Chat({
25586
25969
  "aria-expanded": isGoalObjectiveExpanded,
25587
25970
  "aria-label": isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective"),
25588
25971
  onClick: () => setIsGoalObjectiveExpanded((expanded) => !expanded),
25589
- children: /* @__PURE__ */ jsx73(
25972
+ children: /* @__PURE__ */ jsx74(
25590
25973
  ChevronDown9,
25591
25974
  {
25592
25975
  className: cn(
@@ -25597,13 +25980,13 @@ function Chat({
25597
25980
  )
25598
25981
  }
25599
25982
  ) }),
25600
- /* @__PURE__ */ jsx73(TooltipContent, { children: isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective") })
25983
+ /* @__PURE__ */ jsx74(TooltipContent, { children: isGoalObjectiveExpanded ? t("chat.goal.collapseObjective") : t("chat.goal.expandObjective") })
25601
25984
  ] })
25602
25985
  ] })
25603
25986
  ]
25604
25987
  }
25605
25988
  ),
25606
- /* @__PURE__ */ jsx73(
25989
+ /* @__PURE__ */ jsx74(
25607
25990
  PendingRuntimeServices,
25608
25991
  {
25609
25992
  state: stream.runtimeActivities.sandboxServices,
@@ -25612,7 +25995,7 @@ function Chat({
25612
25995
  className: hasPendingTodos || hasPendingFollowUps ? "mb-2" : void 0
25613
25996
  }
25614
25997
  ),
25615
- /* @__PURE__ */ jsx73(
25998
+ /* @__PURE__ */ jsx74(
25616
25999
  PendingTodos,
25617
26000
  {
25618
26001
  snapshot: stream.todos,
@@ -25620,7 +26003,7 @@ function Chat({
25620
26003
  className: hasPendingFollowUps ? "mb-2" : void 0
25621
26004
  }
25622
26005
  ),
25623
- /* @__PURE__ */ jsx73(
26006
+ /* @__PURE__ */ jsx74(
25624
26007
  PendingFollowUps,
25625
26008
  {
25626
26009
  items: pendingFollowUps,
@@ -25633,7 +26016,7 @@ function Chat({
25633
26016
  attachToComposer: true
25634
26017
  }
25635
26018
  ),
25636
- /* @__PURE__ */ jsx73(
26019
+ /* @__PURE__ */ jsx74(
25637
26020
  RequestUserInputPanel,
25638
26021
  {
25639
26022
  request: stream.pendingRequestUserInput,
@@ -25642,7 +26025,7 @@ function Chat({
25642
26025
  attachToComposer: true
25643
26026
  }
25644
26027
  ),
25645
- /* @__PURE__ */ jsx73(
26028
+ /* @__PURE__ */ jsx74(
25646
26029
  HITLApprovalPanel,
25647
26030
  {
25648
26031
  request: stream.pendingHITLRequest,
@@ -25651,7 +26034,7 @@ function Chat({
25651
26034
  attachToComposer: true
25652
26035
  }
25653
26036
  ),
25654
- isInitialComposer && /* @__PURE__ */ jsx73(
26037
+ isInitialComposer && /* @__PURE__ */ jsx74(
25655
26038
  PromptWorkflowShortcuts,
25656
26039
  {
25657
26040
  commands: promptWorkflow.commands,
@@ -25665,7 +26048,7 @@ function Chat({
25665
26048
  onBack: promptWorkflow.showPrompts
25666
26049
  }
25667
26050
  ),
25668
- /* @__PURE__ */ jsx73(
26051
+ /* @__PURE__ */ jsx74(
25669
26052
  ChatAttachments,
25670
26053
  {
25671
26054
  ref: attachmentsRef,
@@ -25679,7 +26062,7 @@ function Chat({
25679
26062
  onStateChange: setAttachmentState
25680
26063
  }
25681
26064
  ),
25682
- references.length > 0 && /* @__PURE__ */ jsx73("div", { className: "mb-3 flex flex-wrap gap-2", children: references.map((reference) => /* @__PURE__ */ jsx73(
26065
+ references.length > 0 && /* @__PURE__ */ jsx74("div", { className: "mb-3 flex flex-wrap gap-2", children: references.map((reference) => /* @__PURE__ */ jsx74(
25683
26066
  ReferenceChip,
25684
26067
  {
25685
26068
  reference,
@@ -25693,9 +26076,9 @@ function Chat({
25693
26076
  },
25694
26077
  getReferenceKey(reference)
25695
26078
  )) }),
25696
- referencedWorkspaceFiles.length > 0 && /* @__PURE__ */ jsx73("div", { className: "mb-3 flex flex-wrap gap-2", children: referencedWorkspaceFiles.map((file) => {
26079
+ referencedWorkspaceFiles.length > 0 && /* @__PURE__ */ jsx74("div", { className: "mb-3 flex flex-wrap gap-2", children: referencedWorkspaceFiles.map((file) => {
25697
26080
  const id = file.workspacePath ?? file.filePath ?? file.fileAssetId ?? file.fileId ?? file.id;
25698
- return /* @__PURE__ */ jsx73(
26081
+ return /* @__PURE__ */ jsx74(
25699
26082
  WorkspaceFileChip,
25700
26083
  {
25701
26084
  file,
@@ -25709,7 +26092,7 @@ function Chat({
25709
26092
  id
25710
26093
  );
25711
26094
  }) }),
25712
- workspaceFileMention && /* @__PURE__ */ jsx73(
26095
+ workspaceFileMention && /* @__PURE__ */ jsx74(
25713
26096
  WorkspaceFileMentionPalette,
25714
26097
  {
25715
26098
  ref: workspaceFileMentionPaletteRef,
@@ -25721,7 +26104,7 @@ function Chat({
25721
26104
  onSelect: selectWorkspaceFileMention
25722
26105
  }
25723
26106
  ),
25724
- runtimeCapabilityPalette && !workspaceFileMention && /* @__PURE__ */ jsx73(
26107
+ runtimeCapabilityPalette && !workspaceFileMention && /* @__PURE__ */ jsx74(
25725
26108
  SlashPalette,
25726
26109
  {
25727
26110
  palette: runtimeCapabilityPalette,
@@ -25735,7 +26118,7 @@ function Chat({
25735
26118
  onSelect: selectSlashPaletteOption
25736
26119
  }
25737
26120
  ),
25738
- /* @__PURE__ */ jsx73("form", { className: "flex items-end", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs54(
26121
+ /* @__PURE__ */ jsx74("form", { className: "flex items-end", onSubmit: handleSubmit, children: /* @__PURE__ */ jsxs55(
25739
26122
  "div",
25740
26123
  {
25741
26124
  "data-slot": "composer-input-shell",
@@ -25748,7 +26131,7 @@ function Chat({
25748
26131
  "rounded-composer-shell shadow-composer-shell"
25749
26132
  ),
25750
26133
  children: [
25751
- /* @__PURE__ */ jsxs54(
26134
+ /* @__PURE__ */ jsxs55(
25752
26135
  "div",
25753
26136
  {
25754
26137
  "data-slot": "composer-editor-surface",
@@ -25757,7 +26140,7 @@ function Chat({
25757
26140
  "rounded-composer-editor"
25758
26141
  ),
25759
26142
  children: [
25760
- /* @__PURE__ */ jsxs54(
26143
+ /* @__PURE__ */ jsxs55(
25761
26144
  "div",
25762
26145
  {
25763
26146
  "data-slot": "composer-body",
@@ -25766,7 +26149,7 @@ function Chat({
25766
26149
  if (event.target === event.currentTarget) focusComposerAt();
25767
26150
  },
25768
26151
  children: [
25769
- composerCapabilities.inline.map((option) => /* @__PURE__ */ jsx73(
26152
+ composerCapabilities.inline.map((option) => /* @__PURE__ */ jsx74(
25770
26153
  ComposerCapabilityChip,
25771
26154
  {
25772
26155
  option,
@@ -25775,7 +26158,7 @@ function Chat({
25775
26158
  },
25776
26159
  `${option.type}:${option.id}`
25777
26160
  )),
25778
- /* @__PURE__ */ jsx73(
26161
+ /* @__PURE__ */ jsx74(
25779
26162
  "div",
25780
26163
  {
25781
26164
  ref: composerInputRef,
@@ -25798,7 +26181,7 @@ function Chat({
25798
26181
  (missingConfig || isHistoryLoading || hasPendingInteractiveRequest) && "cursor-not-allowed opacity-50"
25799
26182
  ),
25800
26183
  children: renderedComposerParts.map(
25801
- (part, index) => part.type === "text" ? /* @__PURE__ */ jsx73(React66.Fragment, { children: part.text }, `text-${index}`) : /* @__PURE__ */ jsx73(
26184
+ (part, index) => part.type === "text" ? /* @__PURE__ */ jsx74(React66.Fragment, { children: part.text }, `text-${index}`) : /* @__PURE__ */ jsx74(
25802
26185
  ComposerCapabilityToken,
25803
26186
  {
25804
26187
  part,
@@ -25814,14 +26197,14 @@ function Chat({
25814
26197
  ]
25815
26198
  }
25816
26199
  ),
25817
- /* @__PURE__ */ jsxs54(
26200
+ /* @__PURE__ */ jsxs55(
25818
26201
  "div",
25819
26202
  {
25820
26203
  "data-slot": "composer-action-bar",
25821
26204
  className: "pointer-events-none absolute inset-x-3 bottom-2 flex min-h-10 items-center justify-between gap-2",
25822
26205
  children: [
25823
- /* @__PURE__ */ jsxs54("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center gap-1.5", children: [
25824
- /* @__PURE__ */ jsx73("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1.5", children: /* @__PURE__ */ jsx73(
26206
+ /* @__PURE__ */ jsxs55("div", { className: "pointer-events-none flex min-w-0 flex-1 items-center gap-1.5", children: [
26207
+ /* @__PURE__ */ jsx74("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1.5", children: /* @__PURE__ */ jsx74(
25825
26208
  ComposerMenu,
25826
26209
  {
25827
26210
  composer,
@@ -25853,12 +26236,12 @@ function Chat({
25853
26236
  disabled: missingConfig || isHistoryLoading || hasPendingInteractiveRequest
25854
26237
  }
25855
26238
  ) }),
25856
- composerCapabilities.subAgents.length > 0 && /* @__PURE__ */ jsx73(
26239
+ composerCapabilities.subAgents.length > 0 && /* @__PURE__ */ jsx74(
25857
26240
  "div",
25858
26241
  {
25859
26242
  "data-slot": "composer-selected-sub-agents",
25860
26243
  className: "pointer-events-auto flex min-w-0 items-center gap-1 overflow-x-auto overflow-y-hidden [scrollbar-width:none]! [&::-webkit-scrollbar]:hidden",
25861
- children: composerCapabilities.subAgents.map((option) => /* @__PURE__ */ jsx73(
26244
+ children: composerCapabilities.subAgents.map((option) => /* @__PURE__ */ jsx74(
25862
26245
  ComposerCapabilityChip,
25863
26246
  {
25864
26247
  option,
@@ -25869,14 +26252,14 @@ function Chat({
25869
26252
  ))
25870
26253
  }
25871
26254
  ),
25872
- selectedTool && /* @__PURE__ */ jsxs54(
26255
+ selectedTool && /* @__PURE__ */ jsxs55(
25873
26256
  "span",
25874
26257
  {
25875
26258
  "data-slot": "composer-selected-tool",
25876
26259
  className: "group/tool pointer-events-auto inline-flex h-8 min-w-0 max-w-[14rem] shrink items-center rounded-full bg-primary/10 px-2 text-xs font-medium text-primary transition-all duration-200",
25877
26260
  children: [
25878
- /* @__PURE__ */ jsx73("span", { className: "truncate", children: selectedTool.shortLabel ?? selectedTool.label }),
25879
- /* @__PURE__ */ jsx73(
26261
+ /* @__PURE__ */ jsx74("span", { className: "truncate", children: selectedTool.shortLabel ?? selectedTool.label }),
26262
+ /* @__PURE__ */ jsx74(
25880
26263
  "button",
25881
26264
  {
25882
26265
  "data-slot": "composer-selected-tool-remove",
@@ -25892,16 +26275,16 @@ function Chat({
25892
26275
  "focus-visible:pointer-events-auto focus-visible:ml-1 focus-visible:w-4 focus-visible:opacity-100",
25893
26276
  "hover:bg-primary/10 hover:text-primary focus-visible:bg-primary/10 focus-visible:text-primary"
25894
26277
  ),
25895
- children: /* @__PURE__ */ jsx73(X9, { className: "size-3 shrink-0" })
26278
+ children: /* @__PURE__ */ jsx74(X9, { className: "size-3 shrink-0" })
25896
26279
  }
25897
26280
  )
25898
26281
  ]
25899
26282
  }
25900
26283
  )
25901
26284
  ] }),
25902
- /* @__PURE__ */ jsxs54("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1", children: [
25903
- /* @__PURE__ */ jsx73(ContextUsageIndicator, { className: "size-8" }),
25904
- /* @__PURE__ */ jsx73(
26285
+ /* @__PURE__ */ jsxs55("div", { className: "pointer-events-auto flex shrink-0 items-center gap-1", children: [
26286
+ /* @__PURE__ */ jsx74(ContextUsageIndicator, { className: "size-8" }),
26287
+ /* @__PURE__ */ jsx74(
25905
26288
  ModelPicker,
25906
26289
  {
25907
26290
  models: availableModels,
@@ -25925,16 +26308,21 @@ function Chat({
25925
26308
  }
25926
26309
  }
25927
26310
  ),
25928
- /* @__PURE__ */ jsx73(
26311
+ /* @__PURE__ */ jsx74(
25929
26312
  SendButton,
25930
26313
  {
25931
26314
  disabled: isSendDisabled,
25932
26315
  isLoading: stream.isLoading,
25933
- showStop: stream.isLoading && (!trimmedDraft || hasPendingInteractiveRequest),
25934
- onStop: () => stream.stop(),
25935
- stopLabel: t("chat.stop"),
26316
+ showStop: !isPauseActive && (stream.isLoading || canPauseRun) && (!hasComposerInput || hasPendingInteractiveRequest),
26317
+ stopDisabled: isChangingBranch || !canPauseRun,
26318
+ onStop: () => void handleComposerRunControl("pause"),
26319
+ stopLabel: t("threadControl.pause"),
26320
+ showResume: isPauseActive && !hasComposerInput,
26321
+ resumeDisabled: !isRunPaused && !canRevealPausedDisplay || isRunPausing || isResumingRun || isChangingBranch || !currentRunControl?.pauseId && !canRevealPausedDisplay,
26322
+ onResume: () => void handleComposerRunControl("resume"),
26323
+ resumeLabel: t("threadControl.resume"),
25936
26324
  sendLabel: t("chat.send"),
25937
- shortcuts: stream.isLoading && trimmedDraft ? [
26325
+ shortcuts: isVisibleStreaming && !isRunPaused && trimmedDraft ? [
25938
26326
  {
25939
26327
  label: t("chat.followUps.queue"),
25940
26328
  keys: "Enter"
@@ -25949,8 +26337,8 @@ function Chat({
25949
26337
  ]
25950
26338
  }
25951
26339
  ),
25952
- /* @__PURE__ */ jsxs54("div", { "data-slot": "composer-context-rail", className: "flex min-w-0 flex-wrap items-center", children: [
25953
- /* @__PURE__ */ jsx73("div", { className: "min-w-0 max-w-full", children: projectsEnabled && (isConfiguredProjectLocked || !isProjectSelectionLocked) ? /* @__PURE__ */ jsx73(
26340
+ /* @__PURE__ */ jsxs55("div", { "data-slot": "composer-context-rail", className: "flex min-w-0 flex-wrap items-center", children: [
26341
+ /* @__PURE__ */ jsx74("div", { className: "min-w-0 max-w-full", children: projectsEnabled && (isConfiguredProjectLocked || !isProjectSelectionLocked) ? /* @__PURE__ */ jsx74(
25954
26342
  ProjectSelector,
25955
26343
  {
25956
26344
  client: xpertPlatformClient,
@@ -25965,7 +26353,7 @@ function Chat({
25965
26353
  onProjectTypeCreate
25966
26354
  }
25967
26355
  ) : null }),
25968
- isFileSelectorVisible && /* @__PURE__ */ jsx73(
26356
+ isFileSelectorVisible && /* @__PURE__ */ jsx74(
25969
26357
  WorkspaceFileSelector,
25970
26358
  {
25971
26359
  client: xpertPlatformClient,
@@ -25980,7 +26368,7 @@ function Chat({
25980
26368
  ]
25981
26369
  }
25982
26370
  ) }),
25983
- isInitialComposer && startScreen?.promptsLayout === "list" && /* @__PURE__ */ jsx73(
26371
+ isInitialComposer && startScreen?.promptsLayout === "list" && /* @__PURE__ */ jsx74(
25984
26372
  StarterPromptSuggestions,
25985
26373
  {
25986
26374
  prompts: startScreen.prompts ?? [],
@@ -25990,7 +26378,7 @@ function Chat({
25990
26378
  promptEditDisabled: isPromptEditDisabled
25991
26379
  }
25992
26380
  ),
25993
- disclaimer?.text && /* @__PURE__ */ jsx73(
26381
+ disclaimer?.text && /* @__PURE__ */ jsx74(
25994
26382
  "p",
25995
26383
  {
25996
26384
  className: cn(
@@ -26003,7 +26391,7 @@ function Chat({
26003
26391
  ]
26004
26392
  }
26005
26393
  ),
26006
- /* @__PURE__ */ jsx73(
26394
+ /* @__PURE__ */ jsx74(
26007
26395
  SettingsSheet,
26008
26396
  {
26009
26397
  open: petSettingsOpen,
@@ -26013,11 +26401,11 @@ function Chat({
26013
26401
  onSave: savePetLocalSettings
26014
26402
  }
26015
26403
  ),
26016
- /* @__PURE__ */ jsx73(PetBridge, { pet: effectivePet, state: petAutoState })
26404
+ /* @__PURE__ */ jsx74(PetBridge, { pet: effectivePet, state: petAutoState })
26017
26405
  ]
26018
26406
  }
26019
26407
  ),
26020
- taskSummaryAvailable && taskSummaryDocked && taskSummaryOpen && /* @__PURE__ */ jsx73("div", { className: "pointer-events-none absolute right-5 top-3 z-20 max-h-[calc(100%-1.5rem)] w-80", children: /* @__PURE__ */ jsx73(
26408
+ taskSummaryAvailable && taskSummaryDocked && taskSummaryOpen && /* @__PURE__ */ jsx74("div", { className: "pointer-events-none absolute right-5 top-3 z-20 max-h-[calc(100%-1.5rem)] w-80", children: /* @__PURE__ */ jsx74(
26021
26409
  TaskSummaryPanel,
26022
26410
  {
26023
26411
  ...taskSummaryProps,