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