@kingsoftcloud/ksadk-web 0.2.7
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/CHANGELOG.md +14 -0
- package/LICENSE +202 -0
- package/README.md +72 -0
- package/dist-ksadk/assets/ArtifactsPanel-CMS54WAp.js +1 -0
- package/dist-ksadk/assets/CodeBlock-CHZaDmho.js +9 -0
- package/dist-ksadk/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist-ksadk/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist-ksadk/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist-ksadk/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist-ksadk/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist-ksadk/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist-ksadk/assets/MathMessageMarkdown-Cx9VSNQ8.js +8 -0
- package/dist-ksadk/assets/MathMessageMarkdown-DeYh8QPr.css +1 -0
- package/dist-ksadk/assets/MermaidBlock-CV56XpfU.js +303 -0
- package/dist-ksadk/assets/NativeTerminalPanel-BrbZygfC.js +1 -0
- package/dist-ksadk/assets/NativeTerminalPanel-CHOd7Rch.css +1 -0
- package/dist-ksadk/assets/addon-fit-DthTIhi3.js +1 -0
- package/dist-ksadk/assets/apl-CnwPGSsG.js +1 -0
- package/dist-ksadk/assets/arc-D3eSpKQi.js +1 -0
- package/dist-ksadk/assets/architecture-7EHR7CIX-aKvaoHF-.js +1 -0
- package/dist-ksadk/assets/architectureDiagram-3BPJPVTR-DLe5RfvU.js +36 -0
- package/dist-ksadk/assets/asciiarmor-qTkVPQu6.js +1 -0
- package/dist-ksadk/assets/asn1-Dr8qZg38.js +1 -0
- package/dist-ksadk/assets/asterisk-Bja0s6e1.js +1 -0
- package/dist-ksadk/assets/blockDiagram-GPEHLZMM-jrFAO8Bq.js +132 -0
- package/dist-ksadk/assets/brainfuck-D5EjA2JK.js +1 -0
- package/dist-ksadk/assets/c4Diagram-AAUBKEIU-BFwiG9fe.js +10 -0
- package/dist-ksadk/assets/channel-BNEchGhD.js +1 -0
- package/dist-ksadk/assets/chunk-2J33WTMH-5Qlobtnj.js +1 -0
- package/dist-ksadk/assets/chunk-4BX2VUAB-ou66Tq9f.js +1 -0
- package/dist-ksadk/assets/chunk-55IACEB6-CDvMSeFu.js +1 -0
- package/dist-ksadk/assets/chunk-727SXJPM-t3ZfYPXH.js +206 -0
- package/dist-ksadk/assets/chunk-AQP2D5EJ-CqPYcHtF.js +231 -0
- package/dist-ksadk/assets/chunk-FMBD7UC4-C79rRamw.js +15 -0
- package/dist-ksadk/assets/chunk-ND2GUHAM-EqP27pbM.js +1 -0
- package/dist-ksadk/assets/chunk-QZHKN3VN-DVqYdfgL.js +1 -0
- package/dist-ksadk/assets/classDiagram-4FO5ZUOK-DoFK3UDf.js +1 -0
- package/dist-ksadk/assets/classDiagram-v2-Q7XG4LA2-DoFK3UDf.js +1 -0
- package/dist-ksadk/assets/clike-DHH8Ad3s.js +1 -0
- package/dist-ksadk/assets/clojure-BflJGmDX.js +1 -0
- package/dist-ksadk/assets/cmake-CyVbuzPu.js +1 -0
- package/dist-ksadk/assets/cobol-B_OZ4V-R.js +1 -0
- package/dist-ksadk/assets/coffeescript-B2pKbFk8.js +1 -0
- package/dist-ksadk/assets/commonlisp-CcllspGY.js +1 -0
- package/dist-ksadk/assets/cose-bilkent-S5V4N54A-QMqM6zta.js +1 -0
- package/dist-ksadk/assets/crystal-M5-qzICs.js +1 -0
- package/dist-ksadk/assets/css-CYpP4FRV.js +1 -0
- package/dist-ksadk/assets/cypher-p9eYesGn.js +1 -0
- package/dist-ksadk/assets/cytoscape.esm-DelgaX4f.js +321 -0
- package/dist-ksadk/assets/d-BhMjBjQP.js +1 -0
- package/dist-ksadk/assets/dagre-BM42HDAG-CEakrtKq.js +4 -0
- package/dist-ksadk/assets/dagre-Bx709z4p.js +1 -0
- package/dist-ksadk/assets/defaultLocale-C8Fc0cco.js +1 -0
- package/dist-ksadk/assets/diagram-2AECGRRQ-BxdbhhCX.js +43 -0
- package/dist-ksadk/assets/diagram-5GNKFQAL-DBpIlxtZ.js +10 -0
- package/dist-ksadk/assets/diagram-KO2AKTUF-D4COO3HT.js +3 -0
- package/dist-ksadk/assets/diagram-LMA3HP47-DBSZ6aUz.js +24 -0
- package/dist-ksadk/assets/diagram-OG6HWLK6-CxLsy00E.js +24 -0
- package/dist-ksadk/assets/diff-ChtP43wD.js +1 -0
- package/dist-ksadk/assets/dist-6WsdpRSO.js +1 -0
- package/dist-ksadk/assets/dist-BEmeO2N2.js +1 -0
- package/dist-ksadk/assets/dist-BOHSAqwD.js +6 -0
- package/dist-ksadk/assets/dist-BWf6mC8G.js +1 -0
- package/dist-ksadk/assets/dist-BeLlHcxS.js +1 -0
- package/dist-ksadk/assets/dist-C4IRfjf3.js +1 -0
- package/dist-ksadk/assets/dist-CJmvMGxs.js +1 -0
- package/dist-ksadk/assets/dist-CTCQXcX7.js +1 -0
- package/dist-ksadk/assets/dist-CXnbkk51.js +2 -0
- package/dist-ksadk/assets/dist-Cpz8Cm0v.js +1 -0
- package/dist-ksadk/assets/dist-CqCrM4le.js +1 -0
- package/dist-ksadk/assets/dist-Cqzpy7oO.js +1 -0
- package/dist-ksadk/assets/dist-Cxij5I4C.js +23 -0
- package/dist-ksadk/assets/dist-DGm-pByN.js +1 -0
- package/dist-ksadk/assets/dist-D_gCRUxt.js +1 -0
- package/dist-ksadk/assets/dist-DelwQd2b.js +1 -0
- package/dist-ksadk/assets/dist-DqLb8QP7.js +1 -0
- package/dist-ksadk/assets/dist-DxJZpRF1.js +1 -0
- package/dist-ksadk/assets/dist-JOlStfdO.js +11 -0
- package/dist-ksadk/assets/dist-O8eCswTX.js +9 -0
- package/dist-ksadk/assets/dist-aq2knWnw.js +1 -0
- package/dist-ksadk/assets/dist-z5-DHNYg.js +1 -0
- package/dist-ksadk/assets/dockerfile-BLkNEvjs.js +1 -0
- package/dist-ksadk/assets/dtd-DTF72YNO.js +1 -0
- package/dist-ksadk/assets/dylan-C6jEEEk-.js +1 -0
- package/dist-ksadk/assets/ebnf-D4c0_ac3.js +1 -0
- package/dist-ksadk/assets/ecl-BSZaIHnp.js +1 -0
- package/dist-ksadk/assets/eiffel-BEjRio4Q.js +1 -0
- package/dist-ksadk/assets/elm-Cshzl8qu.js +1 -0
- package/dist-ksadk/assets/erDiagram-TEJ5UH35-CsjpG1Xb.js +85 -0
- package/dist-ksadk/assets/erlang-DaB2Rkuy.js +1 -0
- package/dist-ksadk/assets/eventmodeling-FCH6USID-CnNj0sZg.js +1 -0
- package/dist-ksadk/assets/factor-D7LVTn2l.js +1 -0
- package/dist-ksadk/assets/fcl-ClOhbFR7.js +1 -0
- package/dist-ksadk/assets/flowDiagram-I6XJVG4X-DZo3QdjC.js +162 -0
- package/dist-ksadk/assets/forth-Cezjo90N.js +1 -0
- package/dist-ksadk/assets/fortran-Bt6PBEDR.js +1 -0
- package/dist-ksadk/assets/ganttDiagram-6RSMTGT7-BGeXMpCW.js +292 -0
- package/dist-ksadk/assets/gas-BHEdbvp9.js +1 -0
- package/dist-ksadk/assets/gherkin-oBAE_ms0.js +1 -0
- package/dist-ksadk/assets/gitGraph-WXDBUCRP-CYAnXGvP.js +1 -0
- package/dist-ksadk/assets/gitGraphDiagram-PVQCEYII-CEgx70IJ.js +106 -0
- package/dist-ksadk/assets/graphlib-B8gBHxth.js +1 -0
- package/dist-ksadk/assets/groovy-BC3IOsC8.js +1 -0
- package/dist-ksadk/assets/haskell-BRsoo5mP.js +1 -0
- package/dist-ksadk/assets/haxe-DIz0ZZqd.js +1 -0
- package/dist-ksadk/assets/http-CLVgA2GD.js +1 -0
- package/dist-ksadk/assets/idl-BUZw3wgd.js +1 -0
- package/dist-ksadk/assets/index-CAl5bzeo.css +1 -0
- package/dist-ksadk/assets/index-DiS5sSwc.js +165 -0
- package/dist-ksadk/assets/info-J43DQDTF-CqhaeVQF.js +1 -0
- package/dist-ksadk/assets/infoDiagram-5YYISTIA-D7Mjh6YU.js +2 -0
- package/dist-ksadk/assets/init-D6jRqBbL.js +1 -0
- package/dist-ksadk/assets/ishikawaDiagram-YF4QCWOH-Dd4tDuCg.js +70 -0
- package/dist-ksadk/assets/javascript-9Tg8ixDm.js +1 -0
- package/dist-ksadk/assets/journeyDiagram-JHISSGLW-D8l_bo2Y.js +139 -0
- package/dist-ksadk/assets/julia-CQfgDRfP.js +1 -0
- package/dist-ksadk/assets/kanban-definition-UN3LZRKU-CPTqBqad.js +89 -0
- package/dist-ksadk/assets/katex-Cj6SHGk0.js +265 -0
- package/dist-ksadk/assets/linear-CtOo2EUV.js +1 -0
- package/dist-ksadk/assets/livescript-BXxG0Yva.js +1 -0
- package/dist-ksadk/assets/lua-CiA1ziua.js +1 -0
- package/dist-ksadk/assets/mathematica-u8YMmbU0.js +1 -0
- package/dist-ksadk/assets/mbox-BEMVcqjs.js +1 -0
- package/dist-ksadk/assets/mermaid-parser.core-BeKhTKTv.js +161 -0
- package/dist-ksadk/assets/mindmap-definition-RKZ34NQL-Cyeeb4Uv.js +96 -0
- package/dist-ksadk/assets/mirc-C9zpzAZU.js +1 -0
- package/dist-ksadk/assets/mllike-B45xgp2S.js +1 -0
- package/dist-ksadk/assets/modelica-CqHI_q-D.js +1 -0
- package/dist-ksadk/assets/mscgen-qgSLujhx.js +1 -0
- package/dist-ksadk/assets/mumps-CW_TBmxz.js +1 -0
- package/dist-ksadk/assets/nginx-BMaDbqW3.js +1 -0
- package/dist-ksadk/assets/nsis-AQ_alPln.js +1 -0
- package/dist-ksadk/assets/ntriples-d28e9m0E.js +1 -0
- package/dist-ksadk/assets/octave-D2Q8cUp1.js +1 -0
- package/dist-ksadk/assets/ordinal-hYBb2elL.js +1 -0
- package/dist-ksadk/assets/oz-BwTct_5T.js +1 -0
- package/dist-ksadk/assets/packet-YPE3B663-D42EsLYz.js +1 -0
- package/dist-ksadk/assets/pascal-Dp_KdFgX.js +1 -0
- package/dist-ksadk/assets/perl-CdEHsPfU.js +1 -0
- package/dist-ksadk/assets/pie-LRSECV5Y-Cgre-V_q.js +1 -0
- package/dist-ksadk/assets/pieDiagram-4H26LBE5-CYoruq9a.js +30 -0
- package/dist-ksadk/assets/pig-AF4Hwhju.js +1 -0
- package/dist-ksadk/assets/powershell-CzG71I4L.js +1 -0
- package/dist-ksadk/assets/properties-C357ku5U.js +1 -0
- package/dist-ksadk/assets/protobuf-D1ij_kNL.js +1 -0
- package/dist-ksadk/assets/pug-Bugr-47h.js +1 -0
- package/dist-ksadk/assets/puppet-B4hC2X4m.js +1 -0
- package/dist-ksadk/assets/python-BqYw9LYJ.js +1 -0
- package/dist-ksadk/assets/q-B9NhS7L_.js +1 -0
- package/dist-ksadk/assets/quadrantDiagram-W4KKPZXB-9Iyq0jYH.js +7 -0
- package/dist-ksadk/assets/r-DADKenSm.js +1 -0
- package/dist-ksadk/assets/radar-GUYGQ44K-_FsLsLP1.js +1 -0
- package/dist-ksadk/assets/requirementDiagram-4Y6WPE33-Dm-mLxH0.js +84 -0
- package/dist-ksadk/assets/rpm-gpDK5sbt.js +1 -0
- package/dist-ksadk/assets/ruby-DsYpTuWg.js +1 -0
- package/dist-ksadk/assets/sankeyDiagram-5OEKKPKP-BhpH0-7G.js +40 -0
- package/dist-ksadk/assets/sas-C2OyD2Y6.js +1 -0
- package/dist-ksadk/assets/scheme-CyDdOh7e.js +1 -0
- package/dist-ksadk/assets/sequenceDiagram-3UESZ5HK-DUPsgMMP.js +162 -0
- package/dist-ksadk/assets/shell-Du5Qg9im.js +1 -0
- package/dist-ksadk/assets/sieve-BAxa3IjF.js +1 -0
- package/dist-ksadk/assets/simple-mode-DRpGK0lJ.js +1 -0
- package/dist-ksadk/assets/smalltalk-BLp5-jwC.js +1 -0
- package/dist-ksadk/assets/solr-BBopId9w.js +1 -0
- package/dist-ksadk/assets/sparql-Dz-mlCAC.js +1 -0
- package/dist-ksadk/assets/spreadsheet-CTIncYxj.js +1 -0
- package/dist-ksadk/assets/sql-DcCJ9jop.js +1 -0
- package/dist-ksadk/assets/stateDiagram-AJRCARHV-XbM4cbgm.js +1 -0
- package/dist-ksadk/assets/stateDiagram-v2-BHNVJYJU-C1h6ve7b.js +1 -0
- package/dist-ksadk/assets/stex-sDrdk2BW.js +1 -0
- package/dist-ksadk/assets/stylus-DLLZ8dgm.js +1 -0
- package/dist-ksadk/assets/swift-DKB6_1j6.js +1 -0
- package/dist-ksadk/assets/tcl-BGfruO1u.js +1 -0
- package/dist-ksadk/assets/textile-DWBqthVk.js +1 -0
- package/dist-ksadk/assets/tiddlywiki-VlUiK86J.js +1 -0
- package/dist-ksadk/assets/tiki-CxVlf5KZ.js +1 -0
- package/dist-ksadk/assets/timeline-definition-PNZ67QCA-Tday4gED.js +120 -0
- package/dist-ksadk/assets/toml-LvoKBwCs.js +1 -0
- package/dist-ksadk/assets/treeView-BLDUP644-5bkV6oHA.js +1 -0
- package/dist-ksadk/assets/treemap-LRROVOQU-Ck8wquEY.js +1 -0
- package/dist-ksadk/assets/troff-C2dAgh7P.js +1 -0
- package/dist-ksadk/assets/ttcn-BePYh-hG.js +1 -0
- package/dist-ksadk/assets/ttcn-cfg-CY0aot7Q.js +1 -0
- package/dist-ksadk/assets/turtle-BDLWE2cD.js +1 -0
- package/dist-ksadk/assets/vb-BthdM_4N.js +1 -0
- package/dist-ksadk/assets/vbscript-D9f6rSsU.js +1 -0
- package/dist-ksadk/assets/velocity-CqftRsjg.js +1 -0
- package/dist-ksadk/assets/vennDiagram-CIIHVFJN-BOg1GA8S.js +34 -0
- package/dist-ksadk/assets/verilog-D-x6ne0Z.js +1 -0
- package/dist-ksadk/assets/vhdl-CMrOq2q1.js +1 -0
- package/dist-ksadk/assets/wardley-L42UT6IY-DPQZ7fpa.js +1 -0
- package/dist-ksadk/assets/wardleyDiagram-YWT4CUSO-Cy5RnJwi.js +78 -0
- package/dist-ksadk/assets/webidl-D5jiJvOU.js +1 -0
- package/dist-ksadk/assets/xquery-fj_R-kMw.js +1 -0
- package/dist-ksadk/assets/xterm-DooSxjI5.js +36 -0
- package/dist-ksadk/assets/xychartDiagram-2RQKCTM6-DHamdSL0.js +7 -0
- package/dist-ksadk/assets/yacas-CXXgtw0p.js +1 -0
- package/dist-ksadk/assets/z80-CL1naaMV.js +1 -0
- package/dist-ksadk/favicon.svg +1 -0
- package/dist-ksadk/icons.svg +24 -0
- package/dist-ksadk/index.html +14 -0
- package/dist-lib/App.d.ts +12 -0
- package/dist-lib/App.d.ts.map +1 -0
- package/dist-lib/ArtifactsPanel-DFx9Y2xE.js +57 -0
- package/dist-lib/CodeBlock-liGJ8t29.js +94 -0
- package/dist-lib/MathMessageMarkdown-hWMdpCVN.js +73 -0
- package/dist-lib/MermaidBlock-BFNE1NN8.js +33 -0
- package/dist-lib/NativeTerminalPanel-q4ECX8EX.js +391 -0
- package/dist-lib/WorkspacePanelContainer-26j9UzyY.js +2813 -0
- package/dist-lib/api/bootstrap.d.ts +2 -0
- package/dist-lib/api/bootstrap.d.ts.map +1 -0
- package/dist-lib/api/checkpoints.d.ts +38 -0
- package/dist-lib/api/checkpoints.d.ts.map +1 -0
- package/dist-lib/api/client.d.ts +35 -0
- package/dist-lib/api/client.d.ts.map +1 -0
- package/dist-lib/api/events.d.ts +2 -0
- package/dist-lib/api/events.d.ts.map +1 -0
- package/dist-lib/api/model.d.ts +2 -0
- package/dist-lib/api/model.d.ts.map +1 -0
- package/dist-lib/api/run.d.ts +4 -0
- package/dist-lib/api/run.d.ts.map +1 -0
- package/dist-lib/api/session.d.ts +23 -0
- package/dist-lib/api/session.d.ts.map +1 -0
- package/dist-lib/api/upload.d.ts +12 -0
- package/dist-lib/api/upload.d.ts.map +1 -0
- package/dist-lib/api/workspace.d.ts +8 -0
- package/dist-lib/api/workspace.d.ts.map +1 -0
- package/dist-lib/artifact-BfFsPe5A.js +19 -0
- package/dist-lib/capabilities-CiyyeRQ9.js +78 -0
- package/dist-lib/capabilities.js +16 -0
- package/dist-lib/components/ErrorBoundary.d.ts +17 -0
- package/dist-lib/components/ErrorBoundary.d.ts.map +1 -0
- package/dist-lib/components/MessageMarkdown.d.ts +5 -0
- package/dist-lib/components/MessageMarkdown.d.ts.map +1 -0
- package/dist-lib/components/ToastContainer.d.ts +2 -0
- package/dist-lib/components/ToastContainer.d.ts.map +1 -0
- package/dist-lib/components/artifacts/ArtifactsPanel.d.ts +2 -0
- package/dist-lib/components/artifacts/ArtifactsPanel.d.ts.map +1 -0
- package/dist-lib/components/chat/AttachmentPreview.d.ts +11 -0
- package/dist-lib/components/chat/AttachmentPreview.d.ts.map +1 -0
- package/dist-lib/components/chat/ChatComposer.d.ts +26 -0
- package/dist-lib/components/chat/ChatComposer.d.ts.map +1 -0
- package/dist-lib/components/chat/ChatHeader.d.ts +41 -0
- package/dist-lib/components/chat/ChatHeader.d.ts.map +1 -0
- package/dist-lib/components/chat/ChatMessageList.d.ts +36 -0
- package/dist-lib/components/chat/ChatMessageList.d.ts.map +1 -0
- package/dist-lib/components/chat/ChatSidebar.d.ts +14 -0
- package/dist-lib/components/chat/ChatSidebar.d.ts.map +1 -0
- package/dist-lib/components/chat/ConnectedComposer.d.ts +10 -0
- package/dist-lib/components/chat/ConnectedComposer.d.ts.map +1 -0
- package/dist-lib/components/chat/ConnectedMessageList.d.ts +27 -0
- package/dist-lib/components/chat/ConnectedMessageList.d.ts.map +1 -0
- package/dist-lib/components/chat/ConnectedSidebar.d.ts +10 -0
- package/dist-lib/components/chat/ConnectedSidebar.d.ts.map +1 -0
- package/dist-lib/components/chat/types.d.ts +126 -0
- package/dist-lib/components/chat/types.d.ts.map +1 -0
- package/dist-lib/components/markdown/CodeBlock.d.ts +8 -0
- package/dist-lib/components/markdown/CodeBlock.d.ts.map +1 -0
- package/dist-lib/components/markdown/MathMessageMarkdown.d.ts +8 -0
- package/dist-lib/components/markdown/MathMessageMarkdown.d.ts.map +1 -0
- package/dist-lib/components/markdown/MermaidBlock.d.ts +7 -0
- package/dist-lib/components/markdown/MermaidBlock.d.ts.map +1 -0
- package/dist-lib/components/native/NativeRuntimeLauncher.d.ts +20 -0
- package/dist-lib/components/native/NativeRuntimeLauncher.d.ts.map +1 -0
- package/dist-lib/components/native/NativeTerminalPanel.d.ts +15 -0
- package/dist-lib/components/native/NativeTerminalPanel.d.ts.map +1 -0
- package/dist-lib/components/ui/dialog.d.ts +20 -0
- package/dist-lib/components/ui/dialog.d.ts.map +1 -0
- package/dist-lib/components/ui/sheet.d.ts +28 -0
- package/dist-lib/components/ui/sheet.d.ts.map +1 -0
- package/dist-lib/components/workspace/FileEditor.d.ts +12 -0
- package/dist-lib/components/workspace/FileEditor.d.ts.map +1 -0
- package/dist-lib/components/workspace/FilePreview.d.ts +11 -0
- package/dist-lib/components/workspace/FilePreview.d.ts.map +1 -0
- package/dist-lib/components/workspace/HtmlPreview.d.ts +13 -0
- package/dist-lib/components/workspace/HtmlPreview.d.ts.map +1 -0
- package/dist-lib/components/workspace/MarkdownPreview.d.ts +11 -0
- package/dist-lib/components/workspace/MarkdownPreview.d.ts.map +1 -0
- package/dist-lib/components/workspace/WorkspacePanel.d.ts +15 -0
- package/dist-lib/components/workspace/WorkspacePanel.d.ts.map +1 -0
- package/dist-lib/components/workspace/WorkspacePanelContainer.d.ts +27 -0
- package/dist-lib/components/workspace/WorkspacePanelContainer.d.ts.map +1 -0
- package/dist-lib/components.js +99 -0
- package/dist-lib/core/api/facade.d.ts +96 -0
- package/dist-lib/core/api/facade.d.ts.map +1 -0
- package/dist-lib/core/api/types.d.ts +108 -0
- package/dist-lib/core/api/types.d.ts.map +1 -0
- package/dist-lib/core/capability/registry.d.ts +9 -0
- package/dist-lib/core/capability/registry.d.ts.map +1 -0
- package/dist-lib/core/capability/types.d.ts +13 -0
- package/dist-lib/core/capability/types.d.ts.map +1 -0
- package/dist-lib/core/run/dispatcher.d.ts +4 -0
- package/dist-lib/core/run/dispatcher.d.ts.map +1 -0
- package/dist-lib/core/run/engine.d.ts +53 -0
- package/dist-lib/core/run/engine.d.ts.map +1 -0
- package/dist-lib/core/run/index.d.ts +4 -0
- package/dist-lib/core/run/index.d.ts.map +1 -0
- package/dist-lib/core/run/types.d.ts +117 -0
- package/dist-lib/core/run/types.d.ts.map +1 -0
- package/dist-lib/core/stream/chat-completions-protocol.d.ts +8 -0
- package/dist-lib/core/stream/chat-completions-protocol.d.ts.map +1 -0
- package/dist-lib/core/stream/index.d.ts +4 -0
- package/dist-lib/core/stream/index.d.ts.map +1 -0
- package/dist-lib/core/stream/responses-protocol.d.ts +8 -0
- package/dist-lib/core/stream/responses-protocol.d.ts.map +1 -0
- package/dist-lib/core/stream/types.d.ts +43 -0
- package/dist-lib/core/stream/types.d.ts.map +1 -0
- package/dist-lib/core/transport/sse-parser.d.ts +7 -0
- package/dist-lib/core/transport/sse-parser.d.ts.map +1 -0
- package/dist-lib/core/transport/sse-transport.d.ts +22 -0
- package/dist-lib/core/transport/sse-transport.d.ts.map +1 -0
- package/dist-lib/core/transport/types.d.ts +20 -0
- package/dist-lib/core/transport/types.d.ts.map +1 -0
- package/dist-lib/favicon.svg +1 -0
- package/dist-lib/hooks/useBootstrap.d.ts +6 -0
- package/dist-lib/hooks/useBootstrap.d.ts.map +1 -0
- package/dist-lib/hooks/useFeedback.d.ts +24 -0
- package/dist-lib/hooks/useFeedback.d.ts.map +1 -0
- package/dist-lib/hooks/useResponsiveViewport.d.ts +7 -0
- package/dist-lib/hooks/useResponsiveViewport.d.ts.map +1 -0
- package/dist-lib/hooks/useRunAgent.d.ts +34 -0
- package/dist-lib/hooks/useRunAgent.d.ts.map +1 -0
- package/dist-lib/hooks/useSessionLifecycle.d.ts +22 -0
- package/dist-lib/hooks/useSessionLifecycle.d.ts.map +1 -0
- package/dist-lib/icons.svg +24 -0
- package/dist-lib/lib/utils.d.ts +3 -0
- package/dist-lib/lib/utils.d.ts.map +1 -0
- package/dist-lib/public/capabilities.d.ts +5 -0
- package/dist-lib/public/capabilities.d.ts.map +1 -0
- package/dist-lib/public/components.d.ts +12 -0
- package/dist-lib/public/components.d.ts.map +1 -0
- package/dist-lib/public/runtime.d.ts +11 -0
- package/dist-lib/public/runtime.d.ts.map +1 -0
- package/dist-lib/public/styles.d.ts +2 -0
- package/dist-lib/public/styles.d.ts.map +1 -0
- package/dist-lib/public/types.d.ts +6 -0
- package/dist-lib/public/types.d.ts.map +1 -0
- package/dist-lib/runtime.js +3464 -0
- package/dist-lib/stores/artifact.d.ts +13 -0
- package/dist-lib/stores/artifact.d.ts.map +1 -0
- package/dist-lib/stores/bootstrap.d.ts +23 -0
- package/dist-lib/stores/bootstrap.d.ts.map +1 -0
- package/dist-lib/stores/checkpoint.d.ts +48 -0
- package/dist-lib/stores/checkpoint.d.ts.map +1 -0
- package/dist-lib/stores/message.d.ts +11 -0
- package/dist-lib/stores/message.d.ts.map +1 -0
- package/dist-lib/stores/model.d.ts +19 -0
- package/dist-lib/stores/model.d.ts.map +1 -0
- package/dist-lib/stores/session.d.ts +14 -0
- package/dist-lib/stores/session.d.ts.map +1 -0
- package/dist-lib/stores/streaming.d.ts +49 -0
- package/dist-lib/stores/streaming.d.ts.map +1 -0
- package/dist-lib/stores/ui.d.ts +55 -0
- package/dist-lib/stores/ui.d.ts.map +1 -0
- package/dist-lib/styles.css +2 -0
- package/dist-lib/styles.js +0 -0
- package/dist-lib/types/api.d.ts +2 -0
- package/dist-lib/types/api.d.ts.map +1 -0
- package/dist-lib/types/bootstrap.d.ts +7 -0
- package/dist-lib/types/bootstrap.d.ts.map +1 -0
- package/dist-lib/types/capabilities.d.ts +47 -0
- package/dist-lib/types/capabilities.d.ts.map +1 -0
- package/dist-lib/types/input.d.ts +12 -0
- package/dist-lib/types/input.d.ts.map +1 -0
- package/dist-lib/types/session-events.d.ts +51 -0
- package/dist-lib/types/session-events.d.ts.map +1 -0
- package/dist-lib/types.js +0 -0
- package/dist-lib/utils/attachment.d.ts +4 -0
- package/dist-lib/utils/attachment.d.ts.map +1 -0
- package/dist-lib/utils/capabilities.d.ts +5 -0
- package/dist-lib/utils/capabilities.d.ts.map +1 -0
- package/dist-lib/utils/chunk-load-error.d.ts +2 -0
- package/dist-lib/utils/chunk-load-error.d.ts.map +1 -0
- package/dist-lib/utils/clipboard.d.ts +9 -0
- package/dist-lib/utils/clipboard.d.ts.map +1 -0
- package/dist-lib/utils/context.d.ts +23 -0
- package/dist-lib/utils/context.d.ts.map +1 -0
- package/dist-lib/utils/error.d.ts +2 -0
- package/dist-lib/utils/error.d.ts.map +1 -0
- package/dist-lib/utils/feedback.d.ts +90 -0
- package/dist-lib/utils/feedback.d.ts.map +1 -0
- package/dist-lib/utils/layout-constants.d.ts +13 -0
- package/dist-lib/utils/layout-constants.d.ts.map +1 -0
- package/dist-lib/utils/markdown.d.ts +2 -0
- package/dist-lib/utils/markdown.d.ts.map +1 -0
- package/dist-lib/utils/mobile-layout.d.ts +19 -0
- package/dist-lib/utils/mobile-layout.d.ts.map +1 -0
- package/dist-lib/utils/model-options.d.ts +15 -0
- package/dist-lib/utils/model-options.d.ts.map +1 -0
- package/dist-lib/utils/native-platform.d.ts +20 -0
- package/dist-lib/utils/native-platform.d.ts.map +1 -0
- package/dist-lib/utils/responses-stream.d.ts +13 -0
- package/dist-lib/utils/responses-stream.d.ts.map +1 -0
- package/dist-lib/utils/run-state.d.ts +3 -0
- package/dist-lib/utils/run-state.d.ts.map +1 -0
- package/dist-lib/utils/sandbox.d.ts +19 -0
- package/dist-lib/utils/sandbox.d.ts.map +1 -0
- package/dist-lib/utils/session-events.d.ts +40 -0
- package/dist-lib/utils/session-events.d.ts.map +1 -0
- package/dist-lib/utils/session-helpers.d.ts +6 -0
- package/dist-lib/utils/session-helpers.d.ts.map +1 -0
- package/dist-lib/utils/session-list.d.ts +9 -0
- package/dist-lib/utils/session-list.d.ts.map +1 -0
- package/dist-lib/utils/session.d.ts +5 -0
- package/dist-lib/utils/session.d.ts.map +1 -0
- package/dist-lib/utils/stream-control.d.ts +2 -0
- package/dist-lib/utils/stream-control.d.ts.map +1 -0
- package/dist-lib/utils/stream-parsing.d.ts +8 -0
- package/dist-lib/utils/stream-parsing.d.ts.map +1 -0
- package/dist-lib/utils/terminal-session.d.ts +10 -0
- package/dist-lib/utils/terminal-session.d.ts.map +1 -0
- package/dist-lib/utils/tool-display.d.ts +3 -0
- package/dist-lib/utils/tool-display.d.ts.map +1 -0
- package/dist-lib/utils/workspace.d.ts +52 -0
- package/dist-lib/utils/workspace.d.ts.map +1 -0
- package/package.json +131 -0
|
@@ -0,0 +1,2813 @@
|
|
|
1
|
+
import { ArrowUp as e, Bot as t, Check as n, ChevronDown as r, Code as i, Copy as a, Download as o, ExternalLink as s, Eye as c, FileCode2 as l, FileText as u, FolderOpen as d, Image as f, Loader2 as p, LoaderCircle as m, Maximize2 as h, MessageSquareText as g, Minimize2 as ee, MoreHorizontal as _, Package as v, PanelLeft as y, PanelLeftClose as te, Paperclip as b, Plus as ne, RefreshCcw as x, RefreshCw as re, Save as S, Search as ie, Send as C, ShieldCheck as w, StopCircle as T, TerminalSquare as E, ThumbsDown as ae, ThumbsUp as oe, Trash2 as se, Upload as ce, X as le, XCircle as ue } from "lucide-react";
|
|
2
|
+
import { clsx as D } from "clsx";
|
|
3
|
+
import { twMerge as O } from "tailwind-merge";
|
|
4
|
+
import { Fragment as k, jsx as A, jsxs as j } from "react/jsx-runtime";
|
|
5
|
+
import * as M from "react";
|
|
6
|
+
import N, { Suspense as P, lazy as F, useCallback as I, useEffect as L, useId as de, useMemo as fe, useRef as R, useState as z } from "react";
|
|
7
|
+
import * as B from "@radix-ui/react-dialog";
|
|
8
|
+
import { cva as pe } from "class-variance-authority";
|
|
9
|
+
import V from "react-markdown";
|
|
10
|
+
import H from "remark-gfm";
|
|
11
|
+
import { create as U } from "zustand";
|
|
12
|
+
import { EditorView as W, crosshairCursor as G, drawSelection as me, dropCursor as he, highlightActiveLine as ge, highlightActiveLineGutter as _e, keymap as ve, lineNumbers as K, rectangularSelection as q } from "@codemirror/view";
|
|
13
|
+
import { Compartment as ye, EditorState as be } from "@codemirror/state";
|
|
14
|
+
import { defaultKeymap as xe, history as Se, historyKeymap as Ce, indentWithTab as we } from "@codemirror/commands";
|
|
15
|
+
import { LanguageDescription as Te, bracketMatching as Ee, defaultHighlightStyle as De, foldGutter as Oe, foldKeymap as ke, indentOnInput as Ae, syntaxHighlighting as je } from "@codemirror/language";
|
|
16
|
+
import { oneDark as Me } from "@codemirror/theme-one-dark";
|
|
17
|
+
import { highlightSelectionMatches as Ne, searchKeymap as Pe } from "@codemirror/search";
|
|
18
|
+
import { autocompletion as Fe, closeBrackets as Ie, closeBracketsKeymap as Le, completionKeymap as Re } from "@codemirror/autocomplete";
|
|
19
|
+
import { languages as ze } from "@codemirror/language-data";
|
|
20
|
+
//#region src/lib/utils.ts
|
|
21
|
+
function J(...e) {
|
|
22
|
+
return O(D(e));
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region src/components/chat/ChatComposer.tsx
|
|
26
|
+
function Be({ attachments: e, composerContextIndicator: t, composerMaxHeight: n, fileInputRef: r, input: i, isMobile: a, isStreaming: o, queuedDrafts: s, onAppendAttachments: c, onInputChange: l, onPaste: u, onRemoveAttachment: d, onStopGeneration: f, onCancelRemote: p, onSubmit: m, textareaRef: h }) {
|
|
27
|
+
let g = a ? "发送消息..." : "发送消息... (Shift + Enter 换行)", ee = p ? "保留恢复点并结束本次执行" : "停止生成";
|
|
28
|
+
return /* @__PURE__ */ A("div", {
|
|
29
|
+
className: "relative z-10 flex-shrink-0 bg-white/95 px-3 py-3 backdrop-blur dark:bg-slate-900/95 sm:px-4 sm:py-3",
|
|
30
|
+
children: /* @__PURE__ */ j("div", {
|
|
31
|
+
className: "mx-auto w-full max-w-[64rem]",
|
|
32
|
+
children: [s.length > 0 ? /* @__PURE__ */ j("div", {
|
|
33
|
+
className: "mb-2 rounded-2xl border border-amber-200/80 bg-amber-50/80 px-3 py-2 text-xs text-amber-900 shadow-sm dark:border-amber-900/60 dark:bg-amber-950/30 dark:text-amber-100",
|
|
34
|
+
children: [/* @__PURE__ */ j("div", {
|
|
35
|
+
className: "mb-1.5 flex items-center justify-between gap-2",
|
|
36
|
+
children: [/* @__PURE__ */ j("span", {
|
|
37
|
+
className: "font-semibold",
|
|
38
|
+
children: ["发送队列 · ", s.length]
|
|
39
|
+
}), /* @__PURE__ */ A("span", {
|
|
40
|
+
className: "text-amber-700/75 dark:text-amber-200/75",
|
|
41
|
+
children: "当前回复完成后依次发送"
|
|
42
|
+
})]
|
|
43
|
+
}), /* @__PURE__ */ j("div", {
|
|
44
|
+
className: "flex flex-col gap-1",
|
|
45
|
+
children: [s.slice(0, 3).map((e, t) => {
|
|
46
|
+
let n = e.text.trim() || (e.attachments.length > 0 ? "仅附件消息" : "空消息");
|
|
47
|
+
return /* @__PURE__ */ j("div", {
|
|
48
|
+
className: "flex items-center gap-2 rounded-xl bg-white/70 px-2 py-1.5 dark:bg-slate-950/35",
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ A("span", {
|
|
51
|
+
className: "flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-full bg-amber-100 font-mono text-[10px] text-amber-700 dark:bg-amber-900/50 dark:text-amber-100",
|
|
52
|
+
children: t + 1
|
|
53
|
+
}),
|
|
54
|
+
/* @__PURE__ */ A("span", {
|
|
55
|
+
className: "min-w-0 flex-1 truncate text-slate-700 dark:text-slate-200",
|
|
56
|
+
children: n
|
|
57
|
+
}),
|
|
58
|
+
e.attachments.length > 0 ? /* @__PURE__ */ j("span", {
|
|
59
|
+
className: "flex-shrink-0 rounded-full bg-amber-100 px-2 py-0.5 text-[10px] text-amber-700 dark:bg-amber-900/50 dark:text-amber-100",
|
|
60
|
+
children: [e.attachments.length, " 附件"]
|
|
61
|
+
}) : null
|
|
62
|
+
]
|
|
63
|
+
}, `${t}-${n}-${e.attachments.length}`);
|
|
64
|
+
}), s.length > 3 ? /* @__PURE__ */ j("div", {
|
|
65
|
+
className: "px-2 pt-0.5 text-[11px] text-amber-700/80 dark:text-amber-200/80",
|
|
66
|
+
children: [
|
|
67
|
+
"还有 ",
|
|
68
|
+
s.length - 3,
|
|
69
|
+
" 条等待发送"
|
|
70
|
+
]
|
|
71
|
+
}) : null]
|
|
72
|
+
})]
|
|
73
|
+
}) : null, /* @__PURE__ */ j("div", {
|
|
74
|
+
className: "flex items-center gap-3",
|
|
75
|
+
children: [/* @__PURE__ */ j("form", {
|
|
76
|
+
onSubmit: (t) => {
|
|
77
|
+
if (t.preventDefault(), o) {
|
|
78
|
+
p ? p() : f();
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
let n = i.trim();
|
|
82
|
+
!n && e.length === 0 || m(n, e);
|
|
83
|
+
},
|
|
84
|
+
onDragOver: (e) => {
|
|
85
|
+
e.preventDefault(), e.stopPropagation();
|
|
86
|
+
},
|
|
87
|
+
onDrop: (e) => {
|
|
88
|
+
e.preventDefault(), e.stopPropagation(), e.dataTransfer.files && e.dataTransfer.files.length > 0 && c(Array.from(e.dataTransfer.files));
|
|
89
|
+
},
|
|
90
|
+
className: "relative flex min-w-0 flex-1 flex-col rounded-[1.25rem] border border-slate-200 bg-white p-1.5 shadow-[0_8px_22px_rgba(15,23,42,0.07)] transition-all focus-within:border-slate-300 focus-within:ring-1 focus-within:ring-slate-300 dark:border-slate-700 dark:bg-slate-900 dark:focus-within:border-slate-600 dark:focus-within:ring-slate-600",
|
|
91
|
+
children: [e.length > 0 ? /* @__PURE__ */ A("div", {
|
|
92
|
+
className: "mb-1.5 flex flex-wrap gap-2 px-1.5 pt-1.5",
|
|
93
|
+
children: e.map((e, t) => /* @__PURE__ */ j("div", {
|
|
94
|
+
className: J("flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-100 px-3 py-1.5 text-xs text-slate-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300", a ? "max-w-full" : ""),
|
|
95
|
+
children: [/* @__PURE__ */ A("span", {
|
|
96
|
+
className: "max-w-[10rem] truncate font-medium sm:max-w-[12rem]",
|
|
97
|
+
children: e.name
|
|
98
|
+
}), /* @__PURE__ */ A("button", {
|
|
99
|
+
type: "button",
|
|
100
|
+
onClick: () => d(t),
|
|
101
|
+
className: "text-slate-400 transition hover:text-red-500",
|
|
102
|
+
"aria-label": `移除附件 ${e.name}`,
|
|
103
|
+
children: "×"
|
|
104
|
+
})]
|
|
105
|
+
}, `${e.name}-${e.size}-${t}`))
|
|
106
|
+
}) : null, /* @__PURE__ */ j("div", {
|
|
107
|
+
className: "flex w-full items-end gap-2",
|
|
108
|
+
children: [
|
|
109
|
+
/* @__PURE__ */ j("label", {
|
|
110
|
+
className: "relative flex h-9 w-9 flex-shrink-0 items-center justify-center overflow-hidden rounded-xl text-slate-400 transition hover:bg-slate-100 hover:text-slate-600 dark:hover:bg-slate-800 dark:hover:text-slate-200",
|
|
111
|
+
title: "上传附件",
|
|
112
|
+
children: [/* @__PURE__ */ A("input", {
|
|
113
|
+
ref: r,
|
|
114
|
+
type: "file",
|
|
115
|
+
multiple: !0,
|
|
116
|
+
className: "hidden",
|
|
117
|
+
onChange: (e) => {
|
|
118
|
+
e.target.files && e.target.files.length > 0 && (c(Array.from(e.target.files)), e.target.value = "");
|
|
119
|
+
}
|
|
120
|
+
}), /* @__PURE__ */ A(b, { className: "h-5 w-5" })]
|
|
121
|
+
}),
|
|
122
|
+
/* @__PURE__ */ A("textarea", {
|
|
123
|
+
ref: h,
|
|
124
|
+
rows: 1,
|
|
125
|
+
value: i,
|
|
126
|
+
onChange: l,
|
|
127
|
+
onKeyDown: (e) => {
|
|
128
|
+
e.key === "Enter" && !e.shiftKey && (e.preventDefault(), e.currentTarget.form?.requestSubmit());
|
|
129
|
+
},
|
|
130
|
+
onPaste: u,
|
|
131
|
+
placeholder: g,
|
|
132
|
+
className: J("custom-scrollbar min-h-[38px] w-full resize-none border-0 bg-transparent px-2 py-1.5 text-[15px] leading-6 outline-none placeholder:text-slate-400 dark:text-slate-100 dark:placeholder:text-slate-500", a ? "text-[16px]" : "text-[15px]"),
|
|
133
|
+
style: {
|
|
134
|
+
maxHeight: `${n}px`,
|
|
135
|
+
overflowY: "auto"
|
|
136
|
+
}
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ A("button", {
|
|
139
|
+
type: "submit",
|
|
140
|
+
disabled: !o && !i.trim() && e.length === 0,
|
|
141
|
+
className: J("flex h-9 w-9 flex-shrink-0 items-center justify-center rounded-xl transition-all", o || i.trim() || e.length > 0 ? "bg-slate-900 text-white hover:bg-slate-800 dark:bg-slate-100 dark:text-slate-900 dark:hover:bg-white" : "bg-slate-100 text-slate-400 dark:bg-slate-800 dark:text-slate-600"),
|
|
142
|
+
title: o ? ee : "发送消息",
|
|
143
|
+
children: o ? /* @__PURE__ */ A(T, { className: "h-4 w-4" }) : /* @__PURE__ */ A(C, { className: "ml-0.5 h-4 w-4" })
|
|
144
|
+
})
|
|
145
|
+
]
|
|
146
|
+
})]
|
|
147
|
+
}), t ? /* @__PURE__ */ j("div", {
|
|
148
|
+
className: J("hidden flex-shrink-0 items-center gap-1.5 rounded-full px-2.5 py-1 text-right text-[11px] leading-5 transition-colors sm:inline-flex", t.phase === "compressing" ? "bg-amber-50 text-amber-600 dark:bg-amber-950/30 dark:text-amber-300" : t.phase === "warning" ? "bg-rose-50 text-rose-600 dark:bg-rose-950/30 dark:text-rose-300" : "bg-slate-50 text-slate-400 dark:bg-slate-800/50 dark:text-slate-500"),
|
|
149
|
+
children: [/* @__PURE__ */ A(w, { className: "h-3 w-3" }), t.label]
|
|
150
|
+
}) : null]
|
|
151
|
+
})]
|
|
152
|
+
})
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
//#region src/components/ui/sheet.tsx
|
|
157
|
+
var Ve = B.Root, He = B.Portal, Ue = M.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ A(B.Overlay, {
|
|
158
|
+
className: J("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0", e),
|
|
159
|
+
...t,
|
|
160
|
+
ref: n
|
|
161
|
+
}));
|
|
162
|
+
Ue.displayName = B.Overlay.displayName;
|
|
163
|
+
var We = pe("fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500", {
|
|
164
|
+
variants: { side: {
|
|
165
|
+
top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
166
|
+
bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
167
|
+
left: "inset-y-0 left-0 h-full border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left",
|
|
168
|
+
right: "inset-y-0 right-0 h-full border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right"
|
|
169
|
+
} },
|
|
170
|
+
defaultVariants: { side: "right" }
|
|
171
|
+
}), Ge = M.forwardRef(({ side: e = "right", className: t, children: n, showOverlay: r = !0, showCloseButton: i = !0, ...a }, o) => /* @__PURE__ */ j(He, { children: [r ? /* @__PURE__ */ A(Ue, {}) : null, /* @__PURE__ */ j(B.Content, {
|
|
172
|
+
ref: o,
|
|
173
|
+
className: J(We({ side: e }), t),
|
|
174
|
+
...a,
|
|
175
|
+
children: [n, i ? /* @__PURE__ */ j(B.Close, {
|
|
176
|
+
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",
|
|
177
|
+
children: [/* @__PURE__ */ A(le, { className: "h-4 w-4" }), /* @__PURE__ */ A("span", {
|
|
178
|
+
className: "sr-only",
|
|
179
|
+
children: "Close"
|
|
180
|
+
})]
|
|
181
|
+
}) : null]
|
|
182
|
+
})] }));
|
|
183
|
+
Ge.displayName = B.Content.displayName;
|
|
184
|
+
var Ke = ({ className: e, ...t }) => /* @__PURE__ */ A("div", {
|
|
185
|
+
className: J("flex flex-col space-y-2 text-center sm:text-left", e),
|
|
186
|
+
...t
|
|
187
|
+
});
|
|
188
|
+
Ke.displayName = "SheetHeader";
|
|
189
|
+
var qe = ({ className: e, ...t }) => /* @__PURE__ */ A("div", {
|
|
190
|
+
className: J("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", e),
|
|
191
|
+
...t
|
|
192
|
+
});
|
|
193
|
+
qe.displayName = "SheetFooter";
|
|
194
|
+
var Je = M.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ A(B.Title, {
|
|
195
|
+
ref: n,
|
|
196
|
+
className: J("text-lg font-semibold text-foreground", e),
|
|
197
|
+
...t
|
|
198
|
+
}));
|
|
199
|
+
Je.displayName = B.Title.displayName;
|
|
200
|
+
var Ye = M.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ A(B.Description, {
|
|
201
|
+
ref: n,
|
|
202
|
+
className: J("text-sm text-muted-foreground", e),
|
|
203
|
+
...t
|
|
204
|
+
}));
|
|
205
|
+
Ye.displayName = B.Description.displayName;
|
|
206
|
+
//#endregion
|
|
207
|
+
//#region src/components/chat/ChatHeader.tsx
|
|
208
|
+
var Xe = F(() => import("./NativeTerminalPanel-q4ECX8EX.js").then((e) => e.n).then((e) => ({ default: e.NativeTerminalPanel })));
|
|
209
|
+
function Ze({ availableModels: e, selectedModel: t, onSelectModel: n, selectedModelLabel: r, modelCatalogLoaded: i, modelSource: a, thinkingEnabled: o, thinkingMode: s, onSelectThinkingMode: c, compact: l = !1 }) {
|
|
210
|
+
let u = J("rounded-full border border-slate-200 bg-white px-3 py-2 text-sm text-slate-700 outline-none transition-colors focus:ring-1 focus:ring-blue-500 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300", l ? "w-full" : "max-w-[13rem]"), d = e.length > 1 ? /* @__PURE__ */ A("select", {
|
|
211
|
+
value: t,
|
|
212
|
+
onChange: (e) => n(e.target.value),
|
|
213
|
+
className: u,
|
|
214
|
+
children: e.map((e) => /* @__PURE__ */ A("option", {
|
|
215
|
+
value: e.id,
|
|
216
|
+
children: e.display_name || e.id
|
|
217
|
+
}, e.id))
|
|
218
|
+
}) : r ? /* @__PURE__ */ A("span", {
|
|
219
|
+
className: J(u, "inline-flex max-w-full items-center", l ? "justify-start" : ""),
|
|
220
|
+
title: a || r,
|
|
221
|
+
children: /* @__PURE__ */ A("span", {
|
|
222
|
+
className: "truncate",
|
|
223
|
+
children: r
|
|
224
|
+
})
|
|
225
|
+
}) : /* @__PURE__ */ A("span", {
|
|
226
|
+
className: "text-sm text-slate-400",
|
|
227
|
+
children: i ? "未配置模型" : "Loading models..."
|
|
228
|
+
}), f = o ? /* @__PURE__ */ j("select", {
|
|
229
|
+
value: s,
|
|
230
|
+
onChange: (e) => c(e.target.value),
|
|
231
|
+
className: J(u, l ? "" : "max-w-[9rem]"),
|
|
232
|
+
title: "控制模型 thinking/reasoning 参数",
|
|
233
|
+
children: [
|
|
234
|
+
/* @__PURE__ */ A("option", {
|
|
235
|
+
value: "auto",
|
|
236
|
+
children: "思考自动"
|
|
237
|
+
}),
|
|
238
|
+
/* @__PURE__ */ A("option", {
|
|
239
|
+
value: "enabled",
|
|
240
|
+
children: "开启思考"
|
|
241
|
+
}),
|
|
242
|
+
/* @__PURE__ */ A("option", {
|
|
243
|
+
value: "disabled",
|
|
244
|
+
children: "关闭思考"
|
|
245
|
+
})
|
|
246
|
+
]
|
|
247
|
+
}) : null;
|
|
248
|
+
return /* @__PURE__ */ j("div", {
|
|
249
|
+
className: J("flex min-w-0 gap-2", l ? "w-full flex-col" : "items-center"),
|
|
250
|
+
children: [d, f]
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
function Qe({ agentName: e, currentSessionId: t, isMobile: n, sidebarOpen: r, mobileSidebarOpen: i, onToggleSidebar: a, availableModels: o, selectedModel: c, onSelectModel: l, selectedModelLabel: u, modelCatalogLoaded: f, modelSource: p, thinkingEnabled: m, thinkingMode: h, onSelectThinkingMode: g, mobileActionsOpen: ee, onMobileActionsOpenChange: v, workspaceEnabled: b, onOpenWorkspace: ne, nativeManagementLink: x, nativeTerminal: re, nativeLauncherMode: S = !1 }) {
|
|
254
|
+
let [ie, C] = z(!1), w = !!re?.Enabled, T = A(n ? i ? te : y : r ? te : y, { className: "h-5 w-5" });
|
|
255
|
+
return /* @__PURE__ */ j(k, { children: [
|
|
256
|
+
/* @__PURE__ */ j("header", {
|
|
257
|
+
className: J("flex flex-shrink-0 items-center justify-between border-b border-slate-200/30 bg-white/95 px-3 py-2 backdrop-blur dark:border-slate-800 dark:bg-slate-900/95 sm:px-4", n ? "pt-[calc(var(--safe-area-top)+0.5rem)]" : "h-14"),
|
|
258
|
+
children: [/* @__PURE__ */ j("div", {
|
|
259
|
+
className: "flex min-w-0 items-center gap-2",
|
|
260
|
+
children: [S ? null : /* @__PURE__ */ A("button", {
|
|
261
|
+
type: "button",
|
|
262
|
+
onClick: a,
|
|
263
|
+
className: "rounded-lg p-2 text-slate-500 transition-colors hover:bg-slate-100 dark:hover:bg-slate-800",
|
|
264
|
+
"aria-label": n ? "打开历史记录" : "切换侧边栏",
|
|
265
|
+
children: T
|
|
266
|
+
}), /* @__PURE__ */ j("div", {
|
|
267
|
+
className: "min-w-0",
|
|
268
|
+
children: [/* @__PURE__ */ A("div", {
|
|
269
|
+
className: "truncate text-sm font-semibold text-slate-900 dark:text-slate-100 sm:text-base",
|
|
270
|
+
children: e
|
|
271
|
+
}), /* @__PURE__ */ A("div", {
|
|
272
|
+
className: "text-[11px] text-slate-400 dark:text-slate-500",
|
|
273
|
+
children: S ? "原生运行时入口" : "智能体"
|
|
274
|
+
})]
|
|
275
|
+
})]
|
|
276
|
+
}), n ? /* @__PURE__ */ A("button", {
|
|
277
|
+
type: "button",
|
|
278
|
+
onClick: () => v(!0),
|
|
279
|
+
className: "rounded-lg p-2 text-slate-500 transition-colors hover:bg-slate-100 dark:hover:bg-slate-800",
|
|
280
|
+
"aria-label": "打开会话操作",
|
|
281
|
+
children: /* @__PURE__ */ A(_, { className: "h-5 w-5" })
|
|
282
|
+
}) : /* @__PURE__ */ j("div", {
|
|
283
|
+
className: "flex min-w-0 items-center gap-2",
|
|
284
|
+
children: [
|
|
285
|
+
x ? /* @__PURE__ */ j("a", {
|
|
286
|
+
href: x.href,
|
|
287
|
+
target: "_blank",
|
|
288
|
+
rel: "noreferrer",
|
|
289
|
+
title: x.title,
|
|
290
|
+
className: "inline-flex flex-shrink-0 items-center gap-1.5 whitespace-nowrap rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm font-medium leading-none text-slate-700 transition hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
291
|
+
children: [/* @__PURE__ */ A(s, { className: "h-4 w-4" }), /* @__PURE__ */ A("span", { children: x.label })]
|
|
292
|
+
}) : null,
|
|
293
|
+
b ? /* @__PURE__ */ j("button", {
|
|
294
|
+
type: "button",
|
|
295
|
+
onClick: ne,
|
|
296
|
+
className: "inline-flex flex-shrink-0 items-center gap-1.5 whitespace-nowrap rounded-xl border border-slate-200 bg-slate-50 px-3 py-2 text-sm font-medium leading-none text-slate-700 transition hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
297
|
+
children: [/* @__PURE__ */ A(d, { className: "h-4 w-4" }), /* @__PURE__ */ A("span", { children: "Workspace" })]
|
|
298
|
+
}) : null,
|
|
299
|
+
w ? /* @__PURE__ */ j("button", {
|
|
300
|
+
type: "button",
|
|
301
|
+
onClick: () => C(!0),
|
|
302
|
+
className: "inline-flex flex-shrink-0 items-center gap-1.5 whitespace-nowrap rounded-xl border border-emerald-200 bg-emerald-50 px-3 py-2 text-sm font-medium leading-none text-emerald-800 transition hover:bg-emerald-100 dark:border-emerald-900/70 dark:bg-emerald-950/40 dark:text-emerald-200",
|
|
303
|
+
children: [/* @__PURE__ */ A(E, { className: "h-4 w-4" }), /* @__PURE__ */ A("span", { children: "TUI" })]
|
|
304
|
+
}) : null,
|
|
305
|
+
S ? null : /* @__PURE__ */ A(Ze, {
|
|
306
|
+
availableModels: o,
|
|
307
|
+
selectedModel: c,
|
|
308
|
+
onSelectModel: l,
|
|
309
|
+
selectedModelLabel: u,
|
|
310
|
+
modelCatalogLoaded: f,
|
|
311
|
+
modelSource: p,
|
|
312
|
+
thinkingEnabled: m,
|
|
313
|
+
thinkingMode: h,
|
|
314
|
+
onSelectThinkingMode: g
|
|
315
|
+
}),
|
|
316
|
+
!S && t ? /* @__PURE__ */ j("span", {
|
|
317
|
+
className: "rounded bg-slate-50 px-2 py-1 text-xs font-mono text-slate-400 dark:bg-slate-800",
|
|
318
|
+
children: ["ID: ", t.slice(0, 8)]
|
|
319
|
+
}) : null
|
|
320
|
+
]
|
|
321
|
+
})]
|
|
322
|
+
}),
|
|
323
|
+
n ? /* @__PURE__ */ A(Ve, {
|
|
324
|
+
open: ee,
|
|
325
|
+
onOpenChange: v,
|
|
326
|
+
children: /* @__PURE__ */ j(Ge, {
|
|
327
|
+
side: "bottom",
|
|
328
|
+
className: "rounded-t-[1.75rem] border-slate-200 bg-white px-4 pb-[calc(var(--safe-area-bottom)+1rem)] pt-6 dark:border-slate-800 dark:bg-slate-900",
|
|
329
|
+
children: [/* @__PURE__ */ j(Ke, {
|
|
330
|
+
className: "text-left",
|
|
331
|
+
children: [/* @__PURE__ */ A(Je, { children: "会话设置" }), /* @__PURE__ */ A(Ye, {
|
|
332
|
+
className: "sr-only",
|
|
333
|
+
children: "调整当前会话的模型和 Workspace 操作。"
|
|
334
|
+
})]
|
|
335
|
+
}), /* @__PURE__ */ j("div", {
|
|
336
|
+
className: "mt-6 flex flex-col gap-4",
|
|
337
|
+
children: [
|
|
338
|
+
b ? /* @__PURE__ */ j("button", {
|
|
339
|
+
type: "button",
|
|
340
|
+
onClick: () => {
|
|
341
|
+
v(!1), ne();
|
|
342
|
+
},
|
|
343
|
+
className: "inline-flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm font-medium text-slate-700 transition hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
344
|
+
children: [/* @__PURE__ */ A(d, { className: "h-4 w-4" }), "工作区文件"]
|
|
345
|
+
}) : null,
|
|
346
|
+
w ? /* @__PURE__ */ j("button", {
|
|
347
|
+
type: "button",
|
|
348
|
+
onClick: () => {
|
|
349
|
+
v(!1), C(!0);
|
|
350
|
+
},
|
|
351
|
+
className: "inline-flex items-center gap-2 rounded-xl border border-emerald-200 bg-emerald-50 px-3 py-3 text-sm font-medium text-emerald-800 transition hover:bg-emerald-100 dark:border-emerald-900/70 dark:bg-emerald-950/40 dark:text-emerald-200",
|
|
352
|
+
children: [/* @__PURE__ */ A(E, { className: "h-4 w-4" }), "原生 TUI"]
|
|
353
|
+
}) : null,
|
|
354
|
+
x ? /* @__PURE__ */ j("a", {
|
|
355
|
+
href: x.href,
|
|
356
|
+
target: "_blank",
|
|
357
|
+
rel: "noreferrer",
|
|
358
|
+
title: x.title,
|
|
359
|
+
onClick: () => v(!1),
|
|
360
|
+
className: "inline-flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm font-medium text-slate-700 transition hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
361
|
+
children: [/* @__PURE__ */ A(s, { className: "h-4 w-4" }), x.label]
|
|
362
|
+
}) : null,
|
|
363
|
+
S ? /* @__PURE__ */ A("div", {
|
|
364
|
+
className: "rounded-2xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm leading-6 text-slate-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",
|
|
365
|
+
children: "当前运行时对话在原生管理台中进行;这里保留管理入口和 Workspace 文件操作。"
|
|
366
|
+
}) : /* @__PURE__ */ j(k, { children: [/* @__PURE__ */ j("div", {
|
|
367
|
+
className: "space-y-2",
|
|
368
|
+
children: [/* @__PURE__ */ A("div", {
|
|
369
|
+
className: "text-xs font-medium uppercase tracking-[0.12em] text-slate-400 dark:text-slate-500",
|
|
370
|
+
children: "模型"
|
|
371
|
+
}), /* @__PURE__ */ A(Ze, {
|
|
372
|
+
availableModels: o,
|
|
373
|
+
selectedModel: c,
|
|
374
|
+
onSelectModel: l,
|
|
375
|
+
selectedModelLabel: u,
|
|
376
|
+
modelCatalogLoaded: f,
|
|
377
|
+
modelSource: p,
|
|
378
|
+
thinkingEnabled: m,
|
|
379
|
+
thinkingMode: h,
|
|
380
|
+
onSelectThinkingMode: g,
|
|
381
|
+
compact: !0
|
|
382
|
+
})]
|
|
383
|
+
}), /* @__PURE__ */ j("div", {
|
|
384
|
+
className: "space-y-2",
|
|
385
|
+
children: [/* @__PURE__ */ A("div", {
|
|
386
|
+
className: "text-xs font-medium uppercase tracking-[0.12em] text-slate-400 dark:text-slate-500",
|
|
387
|
+
children: "当前会话"
|
|
388
|
+
}), /* @__PURE__ */ A("div", {
|
|
389
|
+
className: "rounded-2xl border border-slate-200 bg-slate-50 px-3 py-3 text-sm text-slate-600 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-300",
|
|
390
|
+
children: t ? /* @__PURE__ */ A("span", {
|
|
391
|
+
className: "break-all font-mono",
|
|
392
|
+
children: t
|
|
393
|
+
}) : "新对话尚未创建会话 ID"
|
|
394
|
+
})]
|
|
395
|
+
})] })
|
|
396
|
+
]
|
|
397
|
+
})]
|
|
398
|
+
})
|
|
399
|
+
}) : null,
|
|
400
|
+
re && ie ? /* @__PURE__ */ A(P, {
|
|
401
|
+
fallback: null,
|
|
402
|
+
children: /* @__PURE__ */ A(Xe, {
|
|
403
|
+
capability: re,
|
|
404
|
+
open: ie,
|
|
405
|
+
onClose: () => C(!1)
|
|
406
|
+
})
|
|
407
|
+
}) : null
|
|
408
|
+
] });
|
|
409
|
+
}
|
|
410
|
+
//#endregion
|
|
411
|
+
//#region src/utils/markdown.js
|
|
412
|
+
function $e(e) {
|
|
413
|
+
return e.replace(/<think>([\s\S]*?)(?:<\/think>|$)/gi, (e, t) => `\n> 💭 **思考过程**\n>\n${String(t || "").trim().split("\n").filter(Boolean).map((e) => `> ${e}`).join("\n")}\n\n`);
|
|
414
|
+
}
|
|
415
|
+
function et(e) {
|
|
416
|
+
return /^\s*\|(?:\s*[:\-]+\s*\|){2,}\s*$/.test(e);
|
|
417
|
+
}
|
|
418
|
+
function Y(e) {
|
|
419
|
+
let t = e.trim();
|
|
420
|
+
return t.startsWith("|") ? t.split("|").length >= 4 : !1;
|
|
421
|
+
}
|
|
422
|
+
function tt(e) {
|
|
423
|
+
return et(e) || /\|\|/.test(e) || /\|(?:\s*[:\-]+\s*\|){2,}/.test(e) && /\|(?:[^|\n]*\|){2,}/.test(e);
|
|
424
|
+
}
|
|
425
|
+
function nt(e) {
|
|
426
|
+
return tt(e) ? e.replace(/\|\s*\|/g, "|\n|").split("\n").map((e) => e.trimEnd()).filter((e) => e.trim().length > 0) : [e];
|
|
427
|
+
}
|
|
428
|
+
function rt(e) {
|
|
429
|
+
return Y(e) ? e.replace(/\|\s*(?:\*{1,2}|_{1,2})\s*$/u, "|") : e;
|
|
430
|
+
}
|
|
431
|
+
function it(e) {
|
|
432
|
+
let t = e.trim();
|
|
433
|
+
return Y(t) ? t.split("|").slice(1, -1).length : 0;
|
|
434
|
+
}
|
|
435
|
+
function at(e) {
|
|
436
|
+
let t = e.match(/^(\s*)/)?.[1] || "", n = it(e);
|
|
437
|
+
return n < 2 ? "" : `${t}| ${Array.from({ length: n }, () => "---").join(" | ")} |`;
|
|
438
|
+
}
|
|
439
|
+
function ot(e) {
|
|
440
|
+
let t = [];
|
|
441
|
+
for (let n of e.split("\n")) {
|
|
442
|
+
if (/^\s*\|\s*$/.test(n)) continue;
|
|
443
|
+
let e = n.match(/^(\s*)\|\s*([^|]+)$/);
|
|
444
|
+
if (e) {
|
|
445
|
+
t.push(`${e[1]}${e[2].trim()}`);
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
t.push(...nt(n).map(rt));
|
|
449
|
+
}
|
|
450
|
+
let n = [];
|
|
451
|
+
for (let e = 0; e < t.length; e += 1) {
|
|
452
|
+
let r = t[e], i = t[e + 1] || "";
|
|
453
|
+
if (n.push(r), Y(r) && Y(i) && !et(i) && it(r) === it(i)) {
|
|
454
|
+
let i = Y(t[e - 1] || ""), a = r.match(/^(\s*)/)?.[1] || "";
|
|
455
|
+
if (!i && a.length === 0) {
|
|
456
|
+
let e = at(r);
|
|
457
|
+
e && n.push(e);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
let r = [];
|
|
462
|
+
for (let e = 0; e < n.length; e += 1) {
|
|
463
|
+
let t = n[e], i = n[e + 1] || "", a = r[r.length - 1] || "", o = Y(t) && (a.trim().length === 0 || !Y(a)), s = Y(t) && (i.trim().length === 0 || !Y(i)), c = t.match(/^(\s*)/)?.[1] || "";
|
|
464
|
+
o && c.length === 0 && a.trim().length > 0 && r.push(""), r.push(t), s && c.length === 0 && i.trim().length > 0 && r.push("");
|
|
465
|
+
}
|
|
466
|
+
return r.join("\n");
|
|
467
|
+
}
|
|
468
|
+
function st(e) {
|
|
469
|
+
let t = e.replace(/^[\u200B-\u200D\uFEFF]+/u, ""), n = t.match(/^([ \t\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]*)([##]{1,6})([ \t\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]*)(\S.*)?$/u);
|
|
470
|
+
if (!n) return t;
|
|
471
|
+
let [, r, i, , a = ""] = n, o = r.replace(/[^\t ]/gu, " "), s = i.replace(/#/gu, "#");
|
|
472
|
+
return a ? `${o}${s} ${a}` : `${o}${s}`;
|
|
473
|
+
}
|
|
474
|
+
function ct(e) {
|
|
475
|
+
let t = e;
|
|
476
|
+
return t = t.split("\n").map((e) => st(e)).join("\n"), t = t.replace(/^[ \t]+(#{1,6}\s*)/gm, "$1"), t = t.replace(/([^\n#])\s*(#{1,6}\s*\S)/g, "$1\n\n$2"), t = t.replace(/^(#{1,6}\s*[^\n]+)\n(?!\n)/gm, "$1\n\n"), t = t.replace(/^(#{1,6}[^\n|]+?)\s*(\|)/gm, "$1\n$2"), t = t.replace(/([。;;::])\s*(\d+\.\s*)/g, "$1\n$2"), t = t.replace(/([^\n\s])(\d+\.\s+)/g, "$1\n$2"), t = t.replace(/([。;;::\.])\s*-(?!-)\s*/g, "$1\n- "), t = t.replace(/([^\n\s-])-\s+/g, "$1\n- "), t = t.replace(/^-(?!-)(\S)/gm, "- $1"), t = ot(t), t = t.replace(/\n{3,}/g, "\n\n"), t.trim();
|
|
477
|
+
}
|
|
478
|
+
function lt(e) {
|
|
479
|
+
return e.map((t, n) => {
|
|
480
|
+
if (n % 2 == 1) return t;
|
|
481
|
+
let r = ct(t), i = n > 0, a = n < e.length - 1;
|
|
482
|
+
return r ? (i && !r.startsWith("\n") && (r = `\n${r}`), a && !r.endsWith("\n") && (r = `${r}\n`), r) : i && a ? "\n\n" : i || a ? "\n" : r;
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
function ut(e) {
|
|
486
|
+
if (!e) return e;
|
|
487
|
+
let t = String(e).replace(/\r\n/g, "\n").replace(/\r/g, "\n").trim();
|
|
488
|
+
return t = $e(t), (t.match(/```/g) || []).length % 2 == 1 && (t = `${t}\n\`\`\``), lt(t.split("```")).join("```").trim();
|
|
489
|
+
}
|
|
490
|
+
//#endregion
|
|
491
|
+
//#region src/components/MessageMarkdown.tsx
|
|
492
|
+
var dt = N.lazy(() => import("./CodeBlock-liGJ8t29.js").then((e) => ({ default: e.CodeBlock }))), ft = N.lazy(() => import("./MermaidBlock-BFNE1NN8.js").then((e) => ({ default: e.MermaidBlock }))), pt = N.lazy(() => import("./MathMessageMarkdown-hWMdpCVN.js").then((e) => ({ default: e.MathMessageMarkdown })));
|
|
493
|
+
function mt(e) {
|
|
494
|
+
return /\$[^$]+\$|\$\$[^$]+\$\$/.test(e);
|
|
495
|
+
}
|
|
496
|
+
var ht = {
|
|
497
|
+
code({ className: e, children: t, ...n }) {
|
|
498
|
+
let r = /language-(\w+)/.exec(e || ""), i = String(t ?? "");
|
|
499
|
+
if (!r && !i.includes("\n")) return /* @__PURE__ */ A("code", {
|
|
500
|
+
className: "bg-slate-100 dark:bg-slate-800 px-1.5 py-0.5 rounded-md text-[13.5px] font-mono text-slate-800 dark:text-slate-200 before:content-none after:content-none border border-slate-200 dark:border-slate-700",
|
|
501
|
+
...n,
|
|
502
|
+
children: t
|
|
503
|
+
});
|
|
504
|
+
let a = r ? r[1] : "";
|
|
505
|
+
return a === "mermaid" ? /* @__PURE__ */ A(P, {
|
|
506
|
+
fallback: /* @__PURE__ */ A("div", { className: "h-32 animate-pulse bg-slate-100 dark:bg-slate-800 rounded" }),
|
|
507
|
+
children: /* @__PURE__ */ A(ft, { chart: i })
|
|
508
|
+
}) : /* @__PURE__ */ A(P, {
|
|
509
|
+
fallback: /* @__PURE__ */ A("pre", {
|
|
510
|
+
className: "p-4 text-sm",
|
|
511
|
+
children: i
|
|
512
|
+
}),
|
|
513
|
+
children: /* @__PURE__ */ A(dt, {
|
|
514
|
+
language: a,
|
|
515
|
+
value: i
|
|
516
|
+
})
|
|
517
|
+
});
|
|
518
|
+
},
|
|
519
|
+
table({ children: e, ...t }) {
|
|
520
|
+
return /* @__PURE__ */ A("div", {
|
|
521
|
+
className: "overflow-x-auto my-4 border border-slate-200 dark:border-slate-700 rounded-lg",
|
|
522
|
+
children: /* @__PURE__ */ A("table", {
|
|
523
|
+
className: "w-full text-sm text-left my-0",
|
|
524
|
+
...t,
|
|
525
|
+
children: e
|
|
526
|
+
})
|
|
527
|
+
});
|
|
528
|
+
},
|
|
529
|
+
th({ children: e, ...t }) {
|
|
530
|
+
return /* @__PURE__ */ A("th", {
|
|
531
|
+
className: "bg-slate-50 dark:bg-slate-800/50 px-4 py-2 font-semibold border-b border-slate-200 dark:border-slate-700",
|
|
532
|
+
...t,
|
|
533
|
+
children: e
|
|
534
|
+
});
|
|
535
|
+
},
|
|
536
|
+
td({ children: e, ...t }) {
|
|
537
|
+
return /* @__PURE__ */ A("td", {
|
|
538
|
+
className: "px-4 py-2 border-b border-slate-100 dark:border-slate-800 last:border-0",
|
|
539
|
+
...t,
|
|
540
|
+
children: e
|
|
541
|
+
});
|
|
542
|
+
},
|
|
543
|
+
a({ children: e, href: t, ...n }) {
|
|
544
|
+
return /* @__PURE__ */ A("a", {
|
|
545
|
+
href: t,
|
|
546
|
+
className: "text-blue-600 dark:text-blue-400 hover:underline",
|
|
547
|
+
target: "_blank",
|
|
548
|
+
rel: "noopener noreferrer",
|
|
549
|
+
...n,
|
|
550
|
+
children: e
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}, gt = N.memo(({ content: e }) => {
|
|
554
|
+
let t = ut(e);
|
|
555
|
+
return /* @__PURE__ */ A("div", {
|
|
556
|
+
className: "prose prose-slate dark:prose-invert max-w-none break-words text-[15px] leading-7 prose-headings:mb-3 prose-headings:mt-6 prose-headings:font-semibold prose-headings:text-slate-900 dark:prose-headings:text-slate-50 prose-h1:text-[1.95rem] prose-h1:leading-tight prose-h1:tracking-[-0.02em] prose-h2:text-[1.55rem] prose-h2:leading-tight prose-h2:tracking-[-0.015em] prose-h3:text-[1.2rem] prose-h3:leading-snug prose-p:my-3 prose-p:leading-7 prose-strong:text-slate-900 dark:prose-strong:text-slate-100 prose-ol:my-3 prose-ul:my-3 prose-li:my-1.5 prose-li:leading-7 prose-hr:my-5 prose-hr:border-slate-200 dark:prose-hr:border-slate-700 prose-pre:m-0 prose-pre:bg-transparent prose-pre:p-0 [&>*:first-child]:mt-0 [&>*:last-child]:mb-0",
|
|
557
|
+
children: /* @__PURE__ */ A(V, {
|
|
558
|
+
remarkPlugins: [H],
|
|
559
|
+
components: ht,
|
|
560
|
+
children: t
|
|
561
|
+
})
|
|
562
|
+
});
|
|
563
|
+
}), X = N.memo(({ content: e }) => mt(e) ? /* @__PURE__ */ A(P, {
|
|
564
|
+
fallback: /* @__PURE__ */ A(gt, { content: e }),
|
|
565
|
+
children: /* @__PURE__ */ A(pt, { content: e })
|
|
566
|
+
}) : /* @__PURE__ */ A(gt, { content: e }));
|
|
567
|
+
//#endregion
|
|
568
|
+
//#region src/utils/feedback.js
|
|
569
|
+
function Z(e) {
|
|
570
|
+
return String(e || "").trim();
|
|
571
|
+
}
|
|
572
|
+
function _t(e) {
|
|
573
|
+
let t = Z(e).toLowerCase();
|
|
574
|
+
return t === "up" || t === "down" ? t : "";
|
|
575
|
+
}
|
|
576
|
+
function vt(e) {
|
|
577
|
+
if (!e || typeof e != "object") return null;
|
|
578
|
+
let t = _t(e.Rating || e.rating);
|
|
579
|
+
return t ? {
|
|
580
|
+
agentId: Z(e.AgentId || e.agentId),
|
|
581
|
+
sessionId: Z(e.SessionId || e.sessionId),
|
|
582
|
+
responseId: Z(e.ResponseId || e.responseId),
|
|
583
|
+
eventId: Z(e.EventId || e.eventId),
|
|
584
|
+
rating: t,
|
|
585
|
+
comment: String(e.Comment ?? e.comment ?? ""),
|
|
586
|
+
traceId: Z(e.TraceId || e.traceId),
|
|
587
|
+
rootSpanId: Z(e.RootSpanId || e.rootSpanId),
|
|
588
|
+
updatedAt: Z(e.UpdatedAt || e.updatedAt)
|
|
589
|
+
} : null;
|
|
590
|
+
}
|
|
591
|
+
function yt(e, t, n) {
|
|
592
|
+
return !!(e?.role === "model" && Z(e.responseId) && Z(e.eventId) && !(t && n));
|
|
593
|
+
}
|
|
594
|
+
function bt({ agentId: e, sessionId: t, message: n }) {
|
|
595
|
+
let r = Z(n?.responseId);
|
|
596
|
+
if (!r) throw Error("Message missing response id");
|
|
597
|
+
return {
|
|
598
|
+
AgentId: Z(e),
|
|
599
|
+
SessionId: Z(t),
|
|
600
|
+
ResponseId: r
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
function xt({ agentId: e, sessionId: t, message: n, rating: r, comment: i = "" }) {
|
|
604
|
+
let a = _t(r);
|
|
605
|
+
if (!a) throw Error("Feedback rating must be up or down");
|
|
606
|
+
let o = {
|
|
607
|
+
...bt({
|
|
608
|
+
agentId: e,
|
|
609
|
+
sessionId: t,
|
|
610
|
+
message: n
|
|
611
|
+
}),
|
|
612
|
+
EventId: Z(n?.eventId),
|
|
613
|
+
Rating: a,
|
|
614
|
+
Comment: String(i || ""),
|
|
615
|
+
TraceId: Z(n?.traceId),
|
|
616
|
+
RootSpanId: Z(n?.rootSpanId)
|
|
617
|
+
};
|
|
618
|
+
if (!o.EventId) throw Error("Message missing event id");
|
|
619
|
+
return o;
|
|
620
|
+
}
|
|
621
|
+
function St(e, { messageId: t, rating: n, comment: r = "" }) {
|
|
622
|
+
let i = e.find((e) => e.id === t), a = i?.feedback ? { ...i.feedback } : null, o = _t(n);
|
|
623
|
+
return {
|
|
624
|
+
nextMessages: e.map((e) => e.id === t ? {
|
|
625
|
+
...e,
|
|
626
|
+
feedback: {
|
|
627
|
+
...e.feedback || {},
|
|
628
|
+
responseId: Z(e.responseId),
|
|
629
|
+
eventId: Z(e.eventId),
|
|
630
|
+
rating: o,
|
|
631
|
+
comment: String(r || ""),
|
|
632
|
+
pending: !0,
|
|
633
|
+
error: ""
|
|
634
|
+
}
|
|
635
|
+
} : e),
|
|
636
|
+
previousFeedback: a
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
function Ct(e, { messageId: t, feedback: n }) {
|
|
640
|
+
let r = vt(n) || n;
|
|
641
|
+
return e.map((e) => e.id === t ? {
|
|
642
|
+
...e,
|
|
643
|
+
feedback: r ? {
|
|
644
|
+
...r,
|
|
645
|
+
pending: !1,
|
|
646
|
+
error: ""
|
|
647
|
+
} : void 0
|
|
648
|
+
} : e);
|
|
649
|
+
}
|
|
650
|
+
function wt(e, { messageId: t, previousFeedback: n }) {
|
|
651
|
+
return e.map((e) => {
|
|
652
|
+
if (e.id !== t) return e;
|
|
653
|
+
if (!n) {
|
|
654
|
+
let { feedback: t, ...n } = e;
|
|
655
|
+
return n;
|
|
656
|
+
}
|
|
657
|
+
return {
|
|
658
|
+
...e,
|
|
659
|
+
feedback: n
|
|
660
|
+
};
|
|
661
|
+
});
|
|
662
|
+
}
|
|
663
|
+
function Tt(e, { messageId: t }) {
|
|
664
|
+
return e.map((e) => {
|
|
665
|
+
if (e.id !== t) return e;
|
|
666
|
+
let { feedback: n, ...r } = e;
|
|
667
|
+
return r;
|
|
668
|
+
});
|
|
669
|
+
}
|
|
670
|
+
//#endregion
|
|
671
|
+
//#region src/utils/tool-display.js
|
|
672
|
+
function Et(e) {
|
|
673
|
+
return String(e || "").replace(/\\u([0-9a-fA-F]{4})/g, (e, t) => String.fromCharCode(Number.parseInt(t, 16)));
|
|
674
|
+
}
|
|
675
|
+
function Dt(e) {
|
|
676
|
+
let t = String(e || "").trim();
|
|
677
|
+
for (let e = 0; e < 3; e += 1) {
|
|
678
|
+
if (!t) return t;
|
|
679
|
+
let e = t[0], n = t[t.length - 1];
|
|
680
|
+
if (!(e === "{" && n === "}" || e === "[" && n === "]" || e === "\"" && n === "\"")) return t.replace(/\\n/g, "\n").replace(/\\"/g, "\"");
|
|
681
|
+
try {
|
|
682
|
+
let e = JSON.parse(t);
|
|
683
|
+
if (typeof e != "string") return Ot(e);
|
|
684
|
+
t = e.trim();
|
|
685
|
+
} catch {
|
|
686
|
+
return Et(t).replace(/\\n/g, "\n").replace(/\\"/g, "\"");
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
return t;
|
|
690
|
+
}
|
|
691
|
+
function Ot(e) {
|
|
692
|
+
return typeof e == "string" ? Dt(e) : Array.isArray(e) ? e.map((e) => Ot(e)) : !e || typeof e != "object" ? e : Object.fromEntries(Object.entries(e).map(([e, t]) => [e, Ot(t)]));
|
|
693
|
+
}
|
|
694
|
+
function kt(e) {
|
|
695
|
+
return typeof e == "string" ? Dt(e) : Ot(e);
|
|
696
|
+
}
|
|
697
|
+
function At(e) {
|
|
698
|
+
return e === !1 ? !0 : typeof e == "string" ? e.trim().toLowerCase() === "false" : !1;
|
|
699
|
+
}
|
|
700
|
+
function jt(e) {
|
|
701
|
+
return e === !0 ? !0 : typeof e == "string" ? e.trim().toLowerCase() === "true" : !1;
|
|
702
|
+
}
|
|
703
|
+
function Mt(e) {
|
|
704
|
+
return e == null || e === !1 ? !1 : typeof e == "string" ? e.trim().length > 0 : typeof e == "object" ? Object.keys(e).length > 0 : !0;
|
|
705
|
+
}
|
|
706
|
+
function Nt(e, t = 0) {
|
|
707
|
+
if (!e || t > 4) return !1;
|
|
708
|
+
if (typeof e == "string") {
|
|
709
|
+
let n = Dt(e);
|
|
710
|
+
return n !== e && Nt(n, t + 1);
|
|
711
|
+
}
|
|
712
|
+
if (Array.isArray(e)) return e.some((e) => Nt(e, t + 1));
|
|
713
|
+
if (typeof e != "object") return !1;
|
|
714
|
+
if (At(e.ok) || At(e.success)) return !0;
|
|
715
|
+
let n = jt(e.ok) || jt(e.success), r = String(e.status || "").trim().toLowerCase();
|
|
716
|
+
return !n && [
|
|
717
|
+
"error",
|
|
718
|
+
"failed",
|
|
719
|
+
"failure"
|
|
720
|
+
].includes(r) || !n && (Mt(e.error_type) || Mt(e.error_message) || Mt(e.error)) ? !0 : Object.values(e).some((e) => Nt(e, t + 1));
|
|
721
|
+
}
|
|
722
|
+
function Pt(e) {
|
|
723
|
+
return e == null || e === "" ? !1 : Nt(kt(e));
|
|
724
|
+
}
|
|
725
|
+
function Ft(e) {
|
|
726
|
+
if (e == null || e === "") return "";
|
|
727
|
+
let t = kt(e);
|
|
728
|
+
return typeof t == "string" ? t : JSON.stringify(t, null, 2);
|
|
729
|
+
}
|
|
730
|
+
//#endregion
|
|
731
|
+
//#region src/utils/clipboard.js
|
|
732
|
+
async function It(e, t = globalThis) {
|
|
733
|
+
let n = String(e ?? ""), r = t?.navigator;
|
|
734
|
+
if (r?.clipboard?.writeText) try {
|
|
735
|
+
return await r.clipboard.writeText(n), !0;
|
|
736
|
+
} catch {}
|
|
737
|
+
let i = t?.document, a = i?.body;
|
|
738
|
+
if (!i?.createElement || !a?.appendChild || !a?.removeChild) return !1;
|
|
739
|
+
let o = i.createElement("textarea");
|
|
740
|
+
o.value = n, o.setAttribute?.("readonly", ""), o.style && (o.style.position = "fixed", o.style.top = "0", o.style.left = "-9999px", o.style.opacity = "0", o.style.pointerEvents = "none");
|
|
741
|
+
let s = i.activeElement;
|
|
742
|
+
a.appendChild(o), o.focus?.(), o.select?.(), o.setSelectionRange?.(0, n.length);
|
|
743
|
+
try {
|
|
744
|
+
return typeof i.execCommand == "function" ? !!i.execCommand("copy") : !1;
|
|
745
|
+
} finally {
|
|
746
|
+
a.removeChild(o), s?.focus?.();
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
//#endregion
|
|
750
|
+
//#region src/utils/session-helpers.ts
|
|
751
|
+
function Lt(e) {
|
|
752
|
+
let t = e.UpdatedAt;
|
|
753
|
+
if (typeof t == "string") {
|
|
754
|
+
let e = Date.parse(t);
|
|
755
|
+
return Number.isNaN(e) ? 0 : e;
|
|
756
|
+
}
|
|
757
|
+
return typeof t == "number" ? t : 0;
|
|
758
|
+
}
|
|
759
|
+
function Rt(e, t) {
|
|
760
|
+
let n = /* @__PURE__ */ new Map();
|
|
761
|
+
for (let t of e) t?.SessionId && n.set(t.SessionId, t);
|
|
762
|
+
for (let e of t) e?.SessionId && n.set(e.SessionId, {
|
|
763
|
+
...n.get(e.SessionId) || {},
|
|
764
|
+
...e
|
|
765
|
+
});
|
|
766
|
+
return Array.from(n.values()).sort((e, t) => Lt(t) - Lt(e));
|
|
767
|
+
}
|
|
768
|
+
function zt(e) {
|
|
769
|
+
return String(e.Title || "").trim() || String(e.FirstPrompt || "").trim() || "新对话";
|
|
770
|
+
}
|
|
771
|
+
function Bt(e) {
|
|
772
|
+
if (!e) return "";
|
|
773
|
+
if (typeof e == "string") {
|
|
774
|
+
let t = Date.parse(e);
|
|
775
|
+
return Number.isNaN(t) ? "" : new Date(t).toLocaleString("zh-CN", {
|
|
776
|
+
month: "short",
|
|
777
|
+
day: "numeric",
|
|
778
|
+
hour: "2-digit",
|
|
779
|
+
minute: "2-digit"
|
|
780
|
+
});
|
|
781
|
+
}
|
|
782
|
+
return new Date(e > 1e11 ? e : e * 1e3).toLocaleString("zh-CN", {
|
|
783
|
+
month: "short",
|
|
784
|
+
day: "numeric",
|
|
785
|
+
hour: "2-digit",
|
|
786
|
+
minute: "2-digit"
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
//#endregion
|
|
790
|
+
//#region src/components/chat/ChatMessageList.tsx
|
|
791
|
+
function Vt(e) {
|
|
792
|
+
let t = Math.max(0, Math.floor(e / 1e3)), n = Math.floor(t / 60), r = t % 60;
|
|
793
|
+
return n <= 0 ? `${r}s` : `${n}m ${String(r).padStart(2, "0")}s`;
|
|
794
|
+
}
|
|
795
|
+
function Ht(e) {
|
|
796
|
+
return e < 1e3 ? "刚刚" : e < 6e4 ? `${Math.floor(e / 1e3)} 秒前` : `${Math.floor(e / 6e4)} 分钟前`;
|
|
797
|
+
}
|
|
798
|
+
function Ut(e) {
|
|
799
|
+
let t = Number(e);
|
|
800
|
+
return !Number.isFinite(t) || t <= 0 ? "0" : t < 1e3 ? String(Math.round(t)) : t < 1e6 ? `${Math.round(t / 100) / 10}k` : `${Math.round(t / 1e5) / 10}m`;
|
|
801
|
+
}
|
|
802
|
+
function Wt({ contextIndicator: e }) {
|
|
803
|
+
let t = e?.usedTokens, n = e?.contextWindowTokens;
|
|
804
|
+
return !t || !n ? null : /* @__PURE__ */ j("span", {
|
|
805
|
+
className: "token-count-pulse hidden font-mono text-slate-400 dark:text-slate-500 sm:inline",
|
|
806
|
+
title: `估算 token:${Math.round(t)} / ${Math.round(n)}`,
|
|
807
|
+
children: [
|
|
808
|
+
"估算 token ",
|
|
809
|
+
Ut(t),
|
|
810
|
+
" / ",
|
|
811
|
+
Ut(n)
|
|
812
|
+
]
|
|
813
|
+
}, Math.round(t));
|
|
814
|
+
}
|
|
815
|
+
function Gt({ activity: e, contextIndicator: t, onStopGeneration: r, onCancelRemote: i }) {
|
|
816
|
+
let [a, o] = z(() => Date.now());
|
|
817
|
+
L(() => {
|
|
818
|
+
let e = window.setInterval(() => o(Date.now()), 1e3);
|
|
819
|
+
return () => window.clearInterval(e);
|
|
820
|
+
}, []);
|
|
821
|
+
let s = e.status === "connecting" || e.status === "running" || e.status === "waiting", c = a - e.lastEventAt < 2e4;
|
|
822
|
+
return /* @__PURE__ */ j("div", {
|
|
823
|
+
className: "inline-flex max-w-full items-center gap-2 rounded-full border border-slate-200/70 bg-white/90 px-2.5 py-1 text-[11px] leading-4 text-slate-500 shadow-sm shadow-slate-900/5 backdrop-blur dark:border-slate-700/60 dark:bg-slate-900/90 dark:text-slate-400",
|
|
824
|
+
children: [
|
|
825
|
+
e.status === "failed" ? /* @__PURE__ */ A(T, { className: "h-3 w-3 text-rose-500" }) : e.status === "completed" ? /* @__PURE__ */ A(n, { className: "h-3 w-3 text-emerald-500" }) : e.status === "stopped" ? /* @__PURE__ */ A(w, { className: "h-3 w-3 text-amber-500" }) : /* @__PURE__ */ A(x, { className: "h-3 w-3 animate-spin text-slate-400" }),
|
|
826
|
+
/* @__PURE__ */ A("span", {
|
|
827
|
+
className: "max-w-[16rem] truncate text-slate-600 dark:text-slate-300",
|
|
828
|
+
title: e.detail || e.phase,
|
|
829
|
+
children: e.phase
|
|
830
|
+
}),
|
|
831
|
+
/* @__PURE__ */ j("span", { children: [
|
|
832
|
+
e.source === "restore" ? "恢复" : "运行",
|
|
833
|
+
" ",
|
|
834
|
+
Vt(a - e.startedAt)
|
|
835
|
+
] }),
|
|
836
|
+
s ? /* @__PURE__ */ A("span", {
|
|
837
|
+
className: J("inline-block h-1.5 w-1.5 flex-shrink-0 rounded-full", c ? "bg-emerald-400" : "bg-slate-300 dark:bg-slate-600"),
|
|
838
|
+
title: c ? "连接存活" : "连接超时"
|
|
839
|
+
}) : null,
|
|
840
|
+
/* @__PURE__ */ j("span", {
|
|
841
|
+
className: "text-slate-400 dark:text-slate-500",
|
|
842
|
+
children: [e.eventCount, " ev"]
|
|
843
|
+
}),
|
|
844
|
+
/* @__PURE__ */ A(Wt, { contextIndicator: t }),
|
|
845
|
+
/* @__PURE__ */ A("span", {
|
|
846
|
+
className: "hidden text-slate-400 dark:text-slate-500 sm:inline",
|
|
847
|
+
children: Ht(a - e.lastEventAt)
|
|
848
|
+
}),
|
|
849
|
+
s && (r || i) ? /* @__PURE__ */ j("div", {
|
|
850
|
+
className: "flex flex-shrink-0 gap-1",
|
|
851
|
+
children: [r ? /* @__PURE__ */ j("button", {
|
|
852
|
+
type: "button",
|
|
853
|
+
onClick: r,
|
|
854
|
+
className: "flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[11px] text-slate-400 transition hover:bg-slate-100 hover:text-slate-700 dark:text-slate-500 dark:hover:bg-slate-800 dark:hover:text-slate-200",
|
|
855
|
+
children: [/* @__PURE__ */ A(T, { className: "h-3 w-3" }), "停止"]
|
|
856
|
+
}) : null, i ? /* @__PURE__ */ j("button", {
|
|
857
|
+
type: "button",
|
|
858
|
+
"aria-label": "取消运行并保留恢复点",
|
|
859
|
+
title: "取消运行并保留最近 checkpoint",
|
|
860
|
+
onClick: i,
|
|
861
|
+
className: "flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[11px] text-slate-400 transition hover:bg-rose-50 hover:text-rose-600 dark:text-slate-500 dark:hover:bg-rose-950/30 dark:hover:text-rose-300",
|
|
862
|
+
children: [/* @__PURE__ */ A(ue, { className: "h-3 w-3" }), "取消"]
|
|
863
|
+
}) : null]
|
|
864
|
+
}) : null
|
|
865
|
+
]
|
|
866
|
+
});
|
|
867
|
+
}
|
|
868
|
+
function Kt({ agentName: e }) {
|
|
869
|
+
return /* @__PURE__ */ j("div", {
|
|
870
|
+
className: "flex flex-col items-center justify-center min-h-[50vh] px-4",
|
|
871
|
+
children: [
|
|
872
|
+
/* @__PURE__ */ A("div", {
|
|
873
|
+
className: "mb-6 h-16 w-16 rounded-2xl bg-gradient-to-br from-blue-500 to-indigo-600\n flex items-center justify-center shadow-lg shadow-blue-500/20",
|
|
874
|
+
children: /* @__PURE__ */ A(t, { className: "h-8 w-8 text-white" })
|
|
875
|
+
}),
|
|
876
|
+
/* @__PURE__ */ A("h2", {
|
|
877
|
+
className: "text-xl font-semibold text-slate-900 dark:text-slate-50",
|
|
878
|
+
children: "有什么我可以帮您的吗?"
|
|
879
|
+
}),
|
|
880
|
+
/* @__PURE__ */ j("p", {
|
|
881
|
+
className: "mt-2 text-sm text-slate-500",
|
|
882
|
+
children: [
|
|
883
|
+
"我是 ",
|
|
884
|
+
e,
|
|
885
|
+
",由 Ksyun AgentEngine 驱动"
|
|
886
|
+
]
|
|
887
|
+
})
|
|
888
|
+
]
|
|
889
|
+
});
|
|
890
|
+
}
|
|
891
|
+
function qt(e) {
|
|
892
|
+
let t = String(e || "").trim();
|
|
893
|
+
return t ? {
|
|
894
|
+
stream: "流式执行中",
|
|
895
|
+
running: "运行中",
|
|
896
|
+
interrupted: "已中断",
|
|
897
|
+
cancelled: "已取消",
|
|
898
|
+
completed: "已完成",
|
|
899
|
+
before_tool: "工具执行前",
|
|
900
|
+
after_tool: "工具执行后"
|
|
901
|
+
}[t] || t : "保存运行状态";
|
|
902
|
+
}
|
|
903
|
+
function Jt(e) {
|
|
904
|
+
return {
|
|
905
|
+
completed: "已完成",
|
|
906
|
+
checkpointed: "已保存",
|
|
907
|
+
running: "执行中",
|
|
908
|
+
ready_to_resume: "可恢复",
|
|
909
|
+
cancelled: "已取消",
|
|
910
|
+
canceled: "已取消",
|
|
911
|
+
failed: "失败",
|
|
912
|
+
pending: "等待中"
|
|
913
|
+
}[String(e || "").trim().toLowerCase()] || "";
|
|
914
|
+
}
|
|
915
|
+
function Yt(e, t) {
|
|
916
|
+
return t.stage ? t.stage : t.phase && ![
|
|
917
|
+
"stream",
|
|
918
|
+
"running",
|
|
919
|
+
"interrupted",
|
|
920
|
+
"cancelled",
|
|
921
|
+
"completed",
|
|
922
|
+
"before_tool",
|
|
923
|
+
"after_tool"
|
|
924
|
+
].includes(t.phase) ? t.phase : e === 0 ? "最新状态快照" : `状态快照 #${e + 1}`;
|
|
925
|
+
}
|
|
926
|
+
function Xt(e, t) {
|
|
927
|
+
return `第 ${Math.max(1, t - e)}/${Math.max(1, t)} 阶段`;
|
|
928
|
+
}
|
|
929
|
+
function Zt(e, t = 8, n = 4) {
|
|
930
|
+
let r = String(e || "").trim();
|
|
931
|
+
return r ? r.length <= t + n + 1 ? r : `${r.slice(0, t)}...${r.slice(-n)}` : "";
|
|
932
|
+
}
|
|
933
|
+
function Qt({ checkpoints: e, isStreaming: t, onResumeCheckpoint: r }) {
|
|
934
|
+
if (!e.length || !r) return null;
|
|
935
|
+
let i = e.filter((e) => {
|
|
936
|
+
let t = String(e.status || "").trim().toLowerCase();
|
|
937
|
+
return t === "completed" || t === "checkpointed" || t === "ready_to_resume";
|
|
938
|
+
}).length;
|
|
939
|
+
return /* @__PURE__ */ j("div", {
|
|
940
|
+
className: "mb-4 rounded-lg border border-slate-200 bg-white px-3 py-3 text-xs text-slate-600 shadow-sm shadow-slate-900/[0.04] dark:border-slate-700 dark:bg-slate-900/70 dark:text-slate-300",
|
|
941
|
+
children: [/* @__PURE__ */ j("div", {
|
|
942
|
+
className: "mb-2 flex flex-wrap items-center justify-between gap-2",
|
|
943
|
+
children: [/* @__PURE__ */ j("div", {
|
|
944
|
+
className: "min-w-0",
|
|
945
|
+
children: [/* @__PURE__ */ A("div", {
|
|
946
|
+
className: "font-medium text-slate-800 dark:text-slate-100",
|
|
947
|
+
children: "会话恢复区"
|
|
948
|
+
}), /* @__PURE__ */ A("div", {
|
|
949
|
+
className: "mt-0.5 text-[11px] text-slate-400",
|
|
950
|
+
children: "选择 LangGraph 状态快照,从对应图状态继续"
|
|
951
|
+
})]
|
|
952
|
+
}), /* @__PURE__ */ j("div", {
|
|
953
|
+
className: "flex flex-shrink-0 items-center gap-1.5",
|
|
954
|
+
children: [i > 0 ? /* @__PURE__ */ j("span", {
|
|
955
|
+
className: "rounded-full bg-emerald-50 px-2 py-1 text-[11px] font-medium text-emerald-700 ring-1 ring-emerald-100 dark:bg-emerald-950/25 dark:text-emerald-300 dark:ring-emerald-900/50",
|
|
956
|
+
children: [
|
|
957
|
+
"已捕获 ",
|
|
958
|
+
i,
|
|
959
|
+
" 个快照"
|
|
960
|
+
]
|
|
961
|
+
}) : null, /* @__PURE__ */ j("span", {
|
|
962
|
+
className: "rounded-full bg-white px-2 py-1 text-[11px] font-medium text-slate-500 ring-1 ring-slate-200 dark:bg-slate-950/40 dark:text-slate-300 dark:ring-slate-700",
|
|
963
|
+
children: [
|
|
964
|
+
"共 ",
|
|
965
|
+
e.length,
|
|
966
|
+
" 个"
|
|
967
|
+
]
|
|
968
|
+
})]
|
|
969
|
+
})]
|
|
970
|
+
}), /* @__PURE__ */ A("div", {
|
|
971
|
+
className: "custom-scrollbar flex max-h-[24rem] flex-col gap-1.5 overflow-y-auto pr-1",
|
|
972
|
+
children: e.map((i, a) => {
|
|
973
|
+
let o = t || !i.sessionId, s = Xt(a, e.length), c = Yt(a, i), l = qt(i.phase), u = Jt(i.status) || (a === 0 ? "推荐" : ""), d = Zt(i.checkpointId), f = Zt(i.runId, 10, 4);
|
|
974
|
+
return /* @__PURE__ */ j("div", {
|
|
975
|
+
className: "grid min-h-[4.35rem] grid-cols-[1.75rem_minmax(0,1fr)_auto] items-center gap-2 rounded-md border border-slate-200/70 bg-slate-50/70 px-2.5 py-2 transition hover:border-blue-200 hover:bg-blue-50/40 dark:border-slate-700/70 dark:bg-slate-950/30 dark:hover:border-blue-800 dark:hover:bg-blue-950/20",
|
|
976
|
+
title: [
|
|
977
|
+
i.timestamp ? `时间:${Bt(i.timestamp)}` : "",
|
|
978
|
+
d ? `checkpoint:${i.checkpointId}` : "",
|
|
979
|
+
f ? `run:${i.runId}` : ""
|
|
980
|
+
].filter(Boolean).join("\n") || void 0,
|
|
981
|
+
children: [
|
|
982
|
+
/* @__PURE__ */ A("div", {
|
|
983
|
+
className: "flex h-7 w-7 items-center justify-center rounded-full bg-white text-emerald-600 ring-1 ring-slate-200 dark:bg-slate-900 dark:text-emerald-300 dark:ring-slate-700",
|
|
984
|
+
children: /* @__PURE__ */ A(n, { className: "h-3.5 w-3.5" })
|
|
985
|
+
}),
|
|
986
|
+
/* @__PURE__ */ j("div", {
|
|
987
|
+
className: "min-w-0",
|
|
988
|
+
children: [
|
|
989
|
+
/* @__PURE__ */ j("div", {
|
|
990
|
+
className: "flex min-w-0 items-center gap-2",
|
|
991
|
+
children: [
|
|
992
|
+
/* @__PURE__ */ A("span", {
|
|
993
|
+
className: "flex-shrink-0 rounded-full bg-blue-50 px-2 py-0.5 text-[11px] font-medium text-blue-600 dark:bg-blue-950/40 dark:text-blue-300",
|
|
994
|
+
children: s
|
|
995
|
+
}),
|
|
996
|
+
a === 0 ? /* @__PURE__ */ A("span", {
|
|
997
|
+
className: "flex-shrink-0 rounded-full bg-white px-2 py-0.5 text-[11px] font-medium text-blue-600 ring-1 ring-blue-100 dark:bg-slate-950/40 dark:text-blue-300 dark:ring-blue-900/50",
|
|
998
|
+
children: "最新"
|
|
999
|
+
}) : null,
|
|
1000
|
+
u ? /* @__PURE__ */ A("span", {
|
|
1001
|
+
className: "flex-shrink-0 rounded-full bg-emerald-50 px-2 py-0.5 text-[11px] font-medium text-emerald-600 dark:bg-emerald-950/30 dark:text-emerald-300",
|
|
1002
|
+
children: u
|
|
1003
|
+
}) : null,
|
|
1004
|
+
/* @__PURE__ */ A("span", {
|
|
1005
|
+
className: "truncate font-medium text-slate-800 dark:text-slate-100",
|
|
1006
|
+
children: c
|
|
1007
|
+
})
|
|
1008
|
+
]
|
|
1009
|
+
}),
|
|
1010
|
+
i.summary ? /* @__PURE__ */ A("div", {
|
|
1011
|
+
className: "mt-1 truncate text-[12px] leading-5 text-slate-600 dark:text-slate-300",
|
|
1012
|
+
children: i.summary
|
|
1013
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1014
|
+
className: "mt-1 text-[12px] leading-5 text-slate-500 dark:text-slate-400",
|
|
1015
|
+
children: l
|
|
1016
|
+
}),
|
|
1017
|
+
/* @__PURE__ */ j("div", {
|
|
1018
|
+
className: "mt-1 flex min-w-0 items-center gap-1.5 text-[11px] leading-4 text-slate-400",
|
|
1019
|
+
children: [i.nextAction ? /* @__PURE__ */ j("span", {
|
|
1020
|
+
className: "truncate text-blue-600 dark:text-blue-300",
|
|
1021
|
+
children: ["恢复后阶段:", i.nextAction]
|
|
1022
|
+
}) : /* @__PURE__ */ A("span", {
|
|
1023
|
+
className: "truncate",
|
|
1024
|
+
children: l
|
|
1025
|
+
}), i.timestamp ? /* @__PURE__ */ A("span", {
|
|
1026
|
+
className: "hidden flex-shrink-0 sm:inline",
|
|
1027
|
+
children: Bt(i.timestamp)
|
|
1028
|
+
}) : null]
|
|
1029
|
+
})
|
|
1030
|
+
]
|
|
1031
|
+
}),
|
|
1032
|
+
/* @__PURE__ */ j("button", {
|
|
1033
|
+
type: "button",
|
|
1034
|
+
"aria-label": `恢复到${s}`,
|
|
1035
|
+
disabled: o,
|
|
1036
|
+
title: o ? "当前会话正在运行,暂不能恢复" : "从该 LangGraph checkpoint 恢复",
|
|
1037
|
+
onClick: () => {
|
|
1038
|
+
i.sessionId && r({
|
|
1039
|
+
sessionId: i.sessionId,
|
|
1040
|
+
runId: i.runId,
|
|
1041
|
+
checkpointId: i.checkpointId
|
|
1042
|
+
});
|
|
1043
|
+
},
|
|
1044
|
+
className: "inline-flex h-8 flex-shrink-0 items-center gap-1 rounded-md border border-slate-200 bg-white px-2.5 text-[11px] font-medium text-slate-600 transition hover:border-blue-300 hover:text-blue-600 disabled:cursor-not-allowed disabled:opacity-50 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-300 dark:hover:border-blue-500 dark:hover:text-blue-300",
|
|
1045
|
+
children: [/* @__PURE__ */ A(x, { className: "h-3 w-3" }), "恢复"]
|
|
1046
|
+
})
|
|
1047
|
+
]
|
|
1048
|
+
}, i.checkpointId);
|
|
1049
|
+
})
|
|
1050
|
+
})]
|
|
1051
|
+
});
|
|
1052
|
+
}
|
|
1053
|
+
function $t({ attachments: e, isMobile: t, onOpenAttachmentPreview: n }) {
|
|
1054
|
+
return /* @__PURE__ */ A("div", {
|
|
1055
|
+
className: "mb-3 flex flex-wrap gap-3",
|
|
1056
|
+
children: e.map((e, r) => e.type.startsWith("image/") ? e.url ? /* @__PURE__ */ A("button", {
|
|
1057
|
+
type: "button",
|
|
1058
|
+
onClick: () => n(e),
|
|
1059
|
+
className: J("group relative overflow-hidden rounded-xl border border-slate-200 shadow-sm dark:border-slate-700", t ? "w-full max-w-full" : "max-w-[200px]"),
|
|
1060
|
+
children: /* @__PURE__ */ A("img", {
|
|
1061
|
+
src: e.url,
|
|
1062
|
+
alt: e.name,
|
|
1063
|
+
className: J("object-cover transition group-hover:scale-[1.02]", t ? "max-h-[16rem] w-full max-w-full" : "max-h-[200px] max-w-[200px]")
|
|
1064
|
+
})
|
|
1065
|
+
}, `${e.name}-${r}`) : /* @__PURE__ */ A("div", {
|
|
1066
|
+
className: J("flex items-center justify-center rounded-xl border border-dashed border-slate-300 bg-slate-50 px-4 text-sm text-slate-500 dark:border-slate-700 dark:bg-slate-900/40 dark:text-slate-400", t ? "h-28 w-full" : "h-[120px] w-[200px]"),
|
|
1067
|
+
children: e.name
|
|
1068
|
+
}, `${e.name}-${r}`) : /* @__PURE__ */ j("div", {
|
|
1069
|
+
className: J("flex items-center gap-2 rounded-xl border border-slate-200 bg-slate-100 px-3 py-2 shadow-sm dark:border-slate-700 dark:bg-slate-800", t ? "w-full max-w-full" : "w-max max-w-full"),
|
|
1070
|
+
children: [/* @__PURE__ */ A(b, { className: "h-4 w-4 flex-shrink-0 text-blue-500" }), e.url ? /* @__PURE__ */ A("a", {
|
|
1071
|
+
href: e.url,
|
|
1072
|
+
target: "_blank",
|
|
1073
|
+
rel: "noreferrer",
|
|
1074
|
+
className: "truncate text-sm text-slate-700 hover:underline dark:text-slate-300",
|
|
1075
|
+
title: e.name,
|
|
1076
|
+
children: e.name
|
|
1077
|
+
}) : /* @__PURE__ */ A("span", {
|
|
1078
|
+
className: "truncate text-sm text-slate-700 dark:text-slate-300",
|
|
1079
|
+
title: e.name,
|
|
1080
|
+
children: e.name
|
|
1081
|
+
})]
|
|
1082
|
+
}, `${e.name}-${r}`))
|
|
1083
|
+
});
|
|
1084
|
+
}
|
|
1085
|
+
function en({ message: e }) {
|
|
1086
|
+
return /* @__PURE__ */ A("div", {
|
|
1087
|
+
className: "w-full px-0 py-2 sm:px-4",
|
|
1088
|
+
children: /* @__PURE__ */ j("div", {
|
|
1089
|
+
className: "mx-auto max-w-3xl rounded-2xl border border-amber-200/80 bg-amber-50/80 px-4 py-3 text-sm text-amber-900 shadow-sm dark:border-amber-900/60 dark:bg-amber-950/30 dark:text-amber-100",
|
|
1090
|
+
children: [
|
|
1091
|
+
/* @__PURE__ */ j("div", {
|
|
1092
|
+
className: "flex items-center gap-2 font-medium",
|
|
1093
|
+
children: [e.status === "running" ? /* @__PURE__ */ A(x, { className: "h-4 w-4 animate-spin text-amber-600 dark:text-amber-300" }) : e.status === "failed" ? /* @__PURE__ */ A(T, { className: "h-4 w-4 text-rose-600 dark:text-rose-400" }) : /* @__PURE__ */ A(n, { className: "h-4 w-4 text-emerald-600 dark:text-emerald-400" }), /* @__PURE__ */ A("span", { children: e.content })]
|
|
1094
|
+
}),
|
|
1095
|
+
e.compactedUntilSeqId ? /* @__PURE__ */ j("div", {
|
|
1096
|
+
className: "mt-1 text-xs text-amber-700/80 dark:text-amber-200/80",
|
|
1097
|
+
children: ["已折叠到会话事件 #", e.compactedUntilSeqId]
|
|
1098
|
+
}) : null,
|
|
1099
|
+
e.summary ? /* @__PURE__ */ j("details", {
|
|
1100
|
+
className: "mt-3 rounded-xl border border-amber-200/80 bg-white/70 px-3 py-2 dark:border-amber-900/60 dark:bg-slate-950/40",
|
|
1101
|
+
children: [/* @__PURE__ */ A("summary", {
|
|
1102
|
+
className: "cursor-pointer select-none text-xs font-medium text-amber-800 dark:text-amber-200",
|
|
1103
|
+
children: "查看压缩摘要"
|
|
1104
|
+
}), /* @__PURE__ */ A("div", {
|
|
1105
|
+
className: "mt-2 text-[13px] leading-relaxed text-slate-700 dark:text-slate-200",
|
|
1106
|
+
children: /* @__PURE__ */ A(X, { content: e.summary })
|
|
1107
|
+
})]
|
|
1108
|
+
}) : null
|
|
1109
|
+
]
|
|
1110
|
+
})
|
|
1111
|
+
});
|
|
1112
|
+
}
|
|
1113
|
+
function tn({ label: e, tone: t, value: r }) {
|
|
1114
|
+
let [i, o] = z("idle"), s = Ft(r);
|
|
1115
|
+
L(() => {
|
|
1116
|
+
if (i === "idle") return;
|
|
1117
|
+
let e = window.setTimeout(() => o("idle"), 1600);
|
|
1118
|
+
return () => window.clearTimeout(e);
|
|
1119
|
+
}, [i]);
|
|
1120
|
+
let c = async () => {
|
|
1121
|
+
o(await It(s) ? "copied" : "failed");
|
|
1122
|
+
};
|
|
1123
|
+
return /* @__PURE__ */ j("div", { children: [/* @__PURE__ */ j("div", {
|
|
1124
|
+
className: "mb-1 flex items-center justify-between gap-2",
|
|
1125
|
+
children: [/* @__PURE__ */ A("div", {
|
|
1126
|
+
className: J("text-xs font-semibold uppercase", t === "input" ? "text-blue-500" : t === "error" ? "text-rose-500" : "text-emerald-500"),
|
|
1127
|
+
children: e
|
|
1128
|
+
}), /* @__PURE__ */ j("button", {
|
|
1129
|
+
type: "button",
|
|
1130
|
+
onClick: () => {
|
|
1131
|
+
c();
|
|
1132
|
+
},
|
|
1133
|
+
className: "inline-flex items-center gap-1 rounded-lg px-2 py-1 text-[11px] font-medium text-slate-500 transition hover:bg-white hover:text-slate-900 dark:text-slate-400 dark:hover:bg-slate-900 dark:hover:text-slate-100",
|
|
1134
|
+
children: [i === "copied" ? /* @__PURE__ */ A(n, { className: "h-3.5 w-3.5 text-emerald-500" }) : /* @__PURE__ */ A(a, { className: "h-3.5 w-3.5" }), i === "copied" ? "已复制" : i === "failed" ? "复制失败" : "复制"]
|
|
1135
|
+
})]
|
|
1136
|
+
}), /* @__PURE__ */ A("div", {
|
|
1137
|
+
className: "custom-scrollbar max-h-[220px] overflow-y-auto whitespace-pre-wrap break-words rounded-xl border border-slate-200/30 bg-white/70 p-3 text-slate-600 shadow-sm dark:border-slate-800 dark:bg-slate-950/40 dark:text-slate-300 sm:max-h-[300px]",
|
|
1138
|
+
children: s
|
|
1139
|
+
})] });
|
|
1140
|
+
}
|
|
1141
|
+
function nn({ isLastMessage: e, isStreaming: t, message: n, onDeleteFeedback: r, onSubmitFeedback: i }) {
|
|
1142
|
+
let [a, o] = z(!1), [s, c] = z(n.feedback?.comment || ""), l = yt(n, t, e), u = !!n.feedback?.pending, d = n.feedback?.rating;
|
|
1143
|
+
return l ? /* @__PURE__ */ j("div", {
|
|
1144
|
+
className: "mt-3 flex flex-col gap-2",
|
|
1145
|
+
children: [
|
|
1146
|
+
/* @__PURE__ */ j("div", {
|
|
1147
|
+
className: "flex flex-wrap items-center gap-2 text-xs text-slate-500 dark:text-slate-400",
|
|
1148
|
+
children: [
|
|
1149
|
+
/* @__PURE__ */ A("span", {
|
|
1150
|
+
className: "font-medium",
|
|
1151
|
+
children: "本次回复有帮助吗?"
|
|
1152
|
+
}),
|
|
1153
|
+
/* @__PURE__ */ j("button", {
|
|
1154
|
+
type: "button",
|
|
1155
|
+
disabled: u,
|
|
1156
|
+
onClick: () => i({
|
|
1157
|
+
message: n,
|
|
1158
|
+
rating: "up",
|
|
1159
|
+
comment: ""
|
|
1160
|
+
}),
|
|
1161
|
+
className: J("inline-flex items-center gap-1 rounded-full border px-2.5 py-1 font-medium transition disabled:cursor-not-allowed disabled:opacity-60", d === "up" ? "border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900/70 dark:bg-emerald-950/30 dark:text-emerald-200" : "border-slate-200 bg-white text-slate-600 hover:border-emerald-200 hover:text-emerald-700 dark:border-slate-800 dark:bg-slate-950/40 dark:text-slate-300 dark:hover:border-emerald-900/70 dark:hover:text-emerald-200"),
|
|
1162
|
+
children: [/* @__PURE__ */ A(oe, { className: "h-3.5 w-3.5" }), "有帮助"]
|
|
1163
|
+
}),
|
|
1164
|
+
/* @__PURE__ */ j("button", {
|
|
1165
|
+
type: "button",
|
|
1166
|
+
disabled: u,
|
|
1167
|
+
onClick: () => {
|
|
1168
|
+
c(n.feedback?.comment || ""), o((e) => !e);
|
|
1169
|
+
},
|
|
1170
|
+
className: J("inline-flex items-center gap-1 rounded-full border px-2.5 py-1 font-medium transition disabled:cursor-not-allowed disabled:opacity-60", d === "down" ? "border-rose-200 bg-rose-50 text-rose-700 dark:border-rose-900/70 dark:bg-rose-950/30 dark:text-rose-200" : "border-slate-200 bg-white text-slate-600 hover:border-rose-200 hover:text-rose-700 dark:border-slate-800 dark:bg-slate-950/40 dark:text-slate-300 dark:hover:border-rose-900/70 dark:hover:text-rose-200"),
|
|
1171
|
+
children: [/* @__PURE__ */ A(ae, { className: "h-3.5 w-3.5" }), "需改进"]
|
|
1172
|
+
}),
|
|
1173
|
+
n.feedback ? /* @__PURE__ */ j("button", {
|
|
1174
|
+
type: "button",
|
|
1175
|
+
disabled: u,
|
|
1176
|
+
onClick: () => r(n),
|
|
1177
|
+
className: "inline-flex items-center gap-1 rounded-full border border-transparent px-2 py-1 font-medium text-slate-400 transition hover:border-slate-200 hover:text-slate-700 disabled:cursor-not-allowed disabled:opacity-60 dark:hover:border-slate-800 dark:hover:text-slate-200",
|
|
1178
|
+
children: [/* @__PURE__ */ A(se, { className: "h-3.5 w-3.5" }), "删除反馈"]
|
|
1179
|
+
}) : null,
|
|
1180
|
+
u ? /* @__PURE__ */ A("span", {
|
|
1181
|
+
className: "text-slate-400",
|
|
1182
|
+
children: "提交中…"
|
|
1183
|
+
}) : null
|
|
1184
|
+
]
|
|
1185
|
+
}),
|
|
1186
|
+
a ? /* @__PURE__ */ j("div", {
|
|
1187
|
+
className: "max-w-xl rounded-2xl border border-rose-100 bg-rose-50/60 p-3 shadow-sm dark:border-rose-900/60 dark:bg-rose-950/20",
|
|
1188
|
+
children: [/* @__PURE__ */ A("textarea", {
|
|
1189
|
+
value: s,
|
|
1190
|
+
onChange: (e) => c(e.target.value),
|
|
1191
|
+
placeholder: "可以补充哪里不准确、缺失或不符合预期。",
|
|
1192
|
+
className: "min-h-[84px] w-full resize-y rounded-xl border border-rose-100 bg-white px-3 py-2 text-sm text-slate-700 outline-none transition placeholder:text-slate-400 focus:border-rose-300 focus:ring-2 focus:ring-rose-100 dark:border-rose-900/70 dark:bg-slate-950 dark:text-slate-100 dark:focus:border-rose-700 dark:focus:ring-rose-950"
|
|
1193
|
+
}), /* @__PURE__ */ j("div", {
|
|
1194
|
+
className: "mt-2 flex flex-wrap justify-end gap-2",
|
|
1195
|
+
children: [/* @__PURE__ */ A("button", {
|
|
1196
|
+
type: "button",
|
|
1197
|
+
onClick: () => o(!1),
|
|
1198
|
+
className: "rounded-xl px-3 py-1.5 text-xs font-semibold text-slate-500 transition hover:bg-white hover:text-slate-800 dark:text-slate-400 dark:hover:bg-slate-950 dark:hover:text-slate-100",
|
|
1199
|
+
children: "取消"
|
|
1200
|
+
}), /* @__PURE__ */ A("button", {
|
|
1201
|
+
type: "button",
|
|
1202
|
+
disabled: u,
|
|
1203
|
+
onClick: () => {
|
|
1204
|
+
i({
|
|
1205
|
+
message: n,
|
|
1206
|
+
rating: "down",
|
|
1207
|
+
comment: s
|
|
1208
|
+
}), o(!1);
|
|
1209
|
+
},
|
|
1210
|
+
className: "rounded-xl bg-rose-600 px-3 py-1.5 text-xs font-semibold text-white shadow-sm transition hover:bg-rose-500 disabled:cursor-not-allowed disabled:opacity-60",
|
|
1211
|
+
children: "提交点踩"
|
|
1212
|
+
})]
|
|
1213
|
+
})]
|
|
1214
|
+
}) : d === "down" && n.feedback?.comment ? /* @__PURE__ */ j("div", {
|
|
1215
|
+
className: "max-w-xl rounded-xl border border-rose-100 bg-rose-50/50 px-3 py-2 text-xs text-rose-700 dark:border-rose-900/60 dark:bg-rose-950/20 dark:text-rose-200",
|
|
1216
|
+
children: ["反馈:", n.feedback.comment]
|
|
1217
|
+
}) : null,
|
|
1218
|
+
n.feedback?.error ? /* @__PURE__ */ A("div", {
|
|
1219
|
+
className: "text-xs text-rose-600 dark:text-rose-300",
|
|
1220
|
+
children: n.feedback.error
|
|
1221
|
+
}) : null
|
|
1222
|
+
]
|
|
1223
|
+
}) : null;
|
|
1224
|
+
}
|
|
1225
|
+
function rn({ agentName: e, isMobile: i, isStreaming: a, isLastMessage: o, message: s, onDeleteFeedback: c, onOpenAttachmentPreview: l, onRespondToApproval: u, onSubmitFeedback: d }) {
|
|
1226
|
+
return s.role === "user" ? /* @__PURE__ */ A("div", {
|
|
1227
|
+
className: "mb-3 flex justify-end",
|
|
1228
|
+
children: /* @__PURE__ */ j("div", {
|
|
1229
|
+
className: "max-w-[80%] rounded-2xl rounded-br-sm bg-blue-600 px-3.5 py-2.5 text-[14px] leading-relaxed text-white dark:bg-blue-500",
|
|
1230
|
+
children: [s.attachments?.length ? /* @__PURE__ */ A($t, {
|
|
1231
|
+
attachments: s.attachments,
|
|
1232
|
+
isMobile: i,
|
|
1233
|
+
onOpenAttachmentPreview: l
|
|
1234
|
+
}) : null, s.content]
|
|
1235
|
+
})
|
|
1236
|
+
}) : /* @__PURE__ */ j("div", {
|
|
1237
|
+
className: "mb-3 max-w-none",
|
|
1238
|
+
children: [
|
|
1239
|
+
/* @__PURE__ */ j("div", {
|
|
1240
|
+
className: "mb-1.5 flex items-center gap-2 text-xs text-slate-400",
|
|
1241
|
+
children: [/* @__PURE__ */ A(t, { className: "w-3.5 h-3.5" }), /* @__PURE__ */ A("span", { children: e })]
|
|
1242
|
+
}),
|
|
1243
|
+
s.attachments?.length ? /* @__PURE__ */ A($t, {
|
|
1244
|
+
attachments: s.attachments,
|
|
1245
|
+
isMobile: i,
|
|
1246
|
+
onOpenAttachmentPreview: l
|
|
1247
|
+
}) : null,
|
|
1248
|
+
s.reasoning ? /* @__PURE__ */ j("details", {
|
|
1249
|
+
className: "group/details mb-3 overflow-hidden rounded-lg border border-emerald-200/70 bg-emerald-50/40 text-sm text-slate-600 transition-colors open:bg-white dark:border-emerald-900/50 dark:bg-emerald-950/10 dark:text-slate-300 dark:open:bg-slate-950/30",
|
|
1250
|
+
children: [/* @__PURE__ */ j("summary", {
|
|
1251
|
+
className: "flex cursor-pointer list-none items-center justify-between gap-3 border-l-2 border-emerald-400 px-3 py-2 font-medium outline-none marker:hidden dark:border-emerald-500",
|
|
1252
|
+
children: [/* @__PURE__ */ j("div", {
|
|
1253
|
+
className: "flex min-w-0 items-center gap-2",
|
|
1254
|
+
children: [
|
|
1255
|
+
a && o && !s.content ? /* @__PURE__ */ A(x, { className: "h-4 w-4 animate-spin text-emerald-500" }) : /* @__PURE__ */ A(n, { className: "h-4 w-4 text-emerald-500" }),
|
|
1256
|
+
/* @__PURE__ */ A("span", {
|
|
1257
|
+
className: "truncate",
|
|
1258
|
+
children: "思考过程"
|
|
1259
|
+
}),
|
|
1260
|
+
/* @__PURE__ */ A("span", {
|
|
1261
|
+
className: "rounded-full bg-emerald-100 px-2 py-0.5 text-[11px] font-medium text-emerald-700 dark:bg-emerald-950 dark:text-emerald-300",
|
|
1262
|
+
children: a && o && !s.content ? "生成中" : "已完成"
|
|
1263
|
+
})
|
|
1264
|
+
]
|
|
1265
|
+
}), /* @__PURE__ */ A(r, { className: "h-4 w-4 flex-shrink-0 text-slate-400 transition-transform group-open/details:rotate-180" })]
|
|
1266
|
+
}), /* @__PURE__ */ A("div", {
|
|
1267
|
+
className: "border-t border-emerald-100/80 bg-white/70 dark:border-emerald-950 dark:bg-slate-950/20",
|
|
1268
|
+
children: /* @__PURE__ */ A("div", {
|
|
1269
|
+
className: "custom-scrollbar max-h-[min(46vh,28rem)] overflow-y-auto px-4 py-3 text-[14px] leading-7 text-slate-600 dark:text-slate-300 [&_p]:my-2 [&_pre]:my-2",
|
|
1270
|
+
children: /* @__PURE__ */ A(X, { content: s.reasoning })
|
|
1271
|
+
})
|
|
1272
|
+
})]
|
|
1273
|
+
}) : null,
|
|
1274
|
+
s.tools ? Object.values(s.tools).map((e, t) => /* @__PURE__ */ j("details", {
|
|
1275
|
+
open: e.status === "paused" ? !0 : void 0,
|
|
1276
|
+
className: J("group/details mb-3 rounded-xl border px-3 py-2.5 text-sm transition-all", e.status === "paused" ? "border-amber-200 bg-amber-50/50 text-amber-800 dark:border-amber-900/60 dark:bg-amber-950/20 dark:text-amber-200" : e.status === "error" ? "border-rose-200 bg-rose-50/40 text-rose-700 dark:border-rose-900/60 dark:bg-rose-950/20 dark:text-rose-200" : "border-blue-200 bg-blue-50/30 text-blue-600 dark:border-blue-900/50 dark:bg-blue-950/20 dark:text-blue-400"),
|
|
1277
|
+
children: [/* @__PURE__ */ A("summary", {
|
|
1278
|
+
className: "flex cursor-pointer list-none items-center justify-between gap-2 font-medium",
|
|
1279
|
+
children: /* @__PURE__ */ j("div", {
|
|
1280
|
+
className: "flex items-center gap-2",
|
|
1281
|
+
children: [e.status === "running" ? /* @__PURE__ */ A(x, { className: "h-4 w-4 animate-spin text-blue-500" }) : e.status === "paused" ? /* @__PURE__ */ A(w, { className: "h-4 w-4 text-amber-500" }) : e.status === "error" ? /* @__PURE__ */ A(ue, { className: "h-4 w-4 text-rose-500" }) : /* @__PURE__ */ A(n, { className: "h-4 w-4 text-emerald-500" }), /* @__PURE__ */ j("span", { children: [e.status === "paused" ? "等待审批:" : e.status === "error" ? "工具调用失败:" : "工具调用:", e.name] })]
|
|
1282
|
+
})
|
|
1283
|
+
}), /* @__PURE__ */ j("div", {
|
|
1284
|
+
className: J("mx-1 mt-3 flex flex-col gap-3 border-l-2 py-1 pl-4 font-mono text-[13px] leading-relaxed opacity-90", e.status === "paused" ? "border-amber-200 dark:border-amber-800" : e.status === "error" ? "border-rose-200 dark:border-rose-800" : "border-blue-200 dark:border-blue-800"),
|
|
1285
|
+
children: [
|
|
1286
|
+
e.status === "paused" && e.approvalRequestId ? /* @__PURE__ */ j("div", {
|
|
1287
|
+
className: "rounded-2xl border border-amber-200 bg-white/75 p-3 font-sans text-sm text-amber-900 shadow-sm dark:border-amber-900/70 dark:bg-slate-950/40 dark:text-amber-100",
|
|
1288
|
+
children: [
|
|
1289
|
+
/* @__PURE__ */ A("div", {
|
|
1290
|
+
className: "font-medium",
|
|
1291
|
+
children: "该工具调用需要人工确认后继续。"
|
|
1292
|
+
}),
|
|
1293
|
+
e.serverLabel ? /* @__PURE__ */ j("div", {
|
|
1294
|
+
className: "mt-1 text-xs text-amber-700/80 dark:text-amber-200/80",
|
|
1295
|
+
children: ["MCP Server: ", e.serverLabel]
|
|
1296
|
+
}) : null,
|
|
1297
|
+
/* @__PURE__ */ j("div", {
|
|
1298
|
+
className: "mt-3 flex flex-wrap gap-2",
|
|
1299
|
+
children: [/* @__PURE__ */ j("button", {
|
|
1300
|
+
type: "button",
|
|
1301
|
+
disabled: e.approvalStatus === "approved" || e.approvalStatus === "rejected",
|
|
1302
|
+
onClick: () => u({
|
|
1303
|
+
approvalRequestId: e.approvalRequestId || "",
|
|
1304
|
+
approve: !0,
|
|
1305
|
+
previousResponseId: e.previousResponseId
|
|
1306
|
+
}),
|
|
1307
|
+
className: "inline-flex items-center gap-1.5 rounded-xl bg-emerald-600 px-3 py-1.5 text-xs font-semibold text-white shadow-sm transition hover:bg-emerald-500 disabled:cursor-not-allowed disabled:opacity-55",
|
|
1308
|
+
children: [/* @__PURE__ */ A(n, { className: "h-3.5 w-3.5" }), "批准并继续"]
|
|
1309
|
+
}), /* @__PURE__ */ j("button", {
|
|
1310
|
+
type: "button",
|
|
1311
|
+
disabled: e.approvalStatus === "approved" || e.approvalStatus === "rejected",
|
|
1312
|
+
onClick: () => u({
|
|
1313
|
+
approvalRequestId: e.approvalRequestId || "",
|
|
1314
|
+
approve: !1,
|
|
1315
|
+
previousResponseId: e.previousResponseId
|
|
1316
|
+
}),
|
|
1317
|
+
className: "inline-flex items-center gap-1.5 rounded-xl border border-rose-200 bg-white px-3 py-1.5 text-xs font-semibold text-rose-600 shadow-sm transition hover:bg-rose-50 disabled:cursor-not-allowed disabled:opacity-55 dark:border-rose-900/70 dark:bg-slate-950 dark:text-rose-300 dark:hover:bg-rose-950/30",
|
|
1318
|
+
children: [/* @__PURE__ */ A(ue, { className: "h-3.5 w-3.5" }), "拒绝"]
|
|
1319
|
+
})]
|
|
1320
|
+
})
|
|
1321
|
+
]
|
|
1322
|
+
}) : null,
|
|
1323
|
+
e.args ? /* @__PURE__ */ A(tn, {
|
|
1324
|
+
label: "入参 (Args)",
|
|
1325
|
+
tone: "input",
|
|
1326
|
+
value: e.args
|
|
1327
|
+
}) : null,
|
|
1328
|
+
e.output ? /* @__PURE__ */ A(tn, {
|
|
1329
|
+
label: "输出 (Output)",
|
|
1330
|
+
tone: e.status === "error" ? "error" : "output",
|
|
1331
|
+
value: e.output
|
|
1332
|
+
}) : null
|
|
1333
|
+
]
|
|
1334
|
+
})]
|
|
1335
|
+
}, `${e.name}-${t}`)) : null,
|
|
1336
|
+
/* @__PURE__ */ A("div", {
|
|
1337
|
+
className: "w-full break-words",
|
|
1338
|
+
children: s.content ? /* @__PURE__ */ A(X, { content: s.content }) : a && o && !s.reasoning && !s.tools ? /* @__PURE__ */ A("span", { className: "ml-1 mt-2 inline-block h-4 w-2 animate-pulse rounded-sm bg-emerald-500 align-middle opacity-80 shadow-sm" }) : null
|
|
1339
|
+
}),
|
|
1340
|
+
/* @__PURE__ */ A(nn, {
|
|
1341
|
+
isLastMessage: o,
|
|
1342
|
+
isStreaming: a,
|
|
1343
|
+
message: s,
|
|
1344
|
+
onDeleteFeedback: c,
|
|
1345
|
+
onSubmitFeedback: d
|
|
1346
|
+
})
|
|
1347
|
+
]
|
|
1348
|
+
});
|
|
1349
|
+
}
|
|
1350
|
+
function an({ agentName: e, isMobile: t, isStreaming: n, activity: r, contextIndicator: i, messages: a, onDeleteFeedback: o, onOpenAttachmentPreview: s, onRespondToApproval: c, onSubmitFeedback: l, onStopGeneration: u, onCancelRemote: d, checkpoints: f = [], onResumeCheckpoint: p, scrollRef: m }) {
|
|
1351
|
+
return /* @__PURE__ */ j("div", {
|
|
1352
|
+
ref: m,
|
|
1353
|
+
className: J("custom-scrollbar relative min-h-0 flex-1 overflow-y-auto scroll-smooth", t ? "px-3 py-3" : "px-4 py-5"),
|
|
1354
|
+
children: [/* @__PURE__ */ j("div", {
|
|
1355
|
+
className: J("mx-auto flex w-full max-w-[64rem] flex-col", r ? "pb-10 sm:pb-10" : "pb-6 sm:pb-8"),
|
|
1356
|
+
children: [/* @__PURE__ */ A(Qt, {
|
|
1357
|
+
checkpoints: f,
|
|
1358
|
+
isStreaming: n,
|
|
1359
|
+
onResumeCheckpoint: p
|
|
1360
|
+
}), a.length === 0 ? /* @__PURE__ */ A(Kt, { agentName: e }) : a.map((r, i) => r.role === "system" ? /* @__PURE__ */ A(en, { message: r }, r.id || i) : /* @__PURE__ */ A(rn, {
|
|
1361
|
+
agentName: e,
|
|
1362
|
+
isMobile: t,
|
|
1363
|
+
isStreaming: n,
|
|
1364
|
+
isLastMessage: i === a.length - 1,
|
|
1365
|
+
message: r,
|
|
1366
|
+
onDeleteFeedback: o,
|
|
1367
|
+
onOpenAttachmentPreview: s,
|
|
1368
|
+
onRespondToApproval: c,
|
|
1369
|
+
onSubmitFeedback: l
|
|
1370
|
+
}, r.id || i))]
|
|
1371
|
+
}), r ? /* @__PURE__ */ A("div", {
|
|
1372
|
+
className: "sticky bottom-1 z-20 mx-auto flex w-full max-w-[64rem] justify-end",
|
|
1373
|
+
children: /* @__PURE__ */ A(Gt, {
|
|
1374
|
+
activity: r,
|
|
1375
|
+
contextIndicator: i,
|
|
1376
|
+
onStopGeneration: u,
|
|
1377
|
+
onCancelRemote: d
|
|
1378
|
+
})
|
|
1379
|
+
}) : null]
|
|
1380
|
+
});
|
|
1381
|
+
}
|
|
1382
|
+
//#endregion
|
|
1383
|
+
//#region src/utils/session-list.js
|
|
1384
|
+
var on = new Set([
|
|
1385
|
+
"in_progress",
|
|
1386
|
+
"running",
|
|
1387
|
+
"queued",
|
|
1388
|
+
"pending"
|
|
1389
|
+
]), sn = 300 * 1e3;
|
|
1390
|
+
function cn(e) {
|
|
1391
|
+
let t = e?.UpdatedAt ?? e?.updated_at;
|
|
1392
|
+
if (typeof t == "string") {
|
|
1393
|
+
let e = Date.parse(t);
|
|
1394
|
+
return Number.isNaN(e) ? 0 : e;
|
|
1395
|
+
}
|
|
1396
|
+
return typeof t == "number" && Number.isFinite(t) ? t : 0;
|
|
1397
|
+
}
|
|
1398
|
+
function ln(e) {
|
|
1399
|
+
return String(e || "").trim().toLowerCase();
|
|
1400
|
+
}
|
|
1401
|
+
function un(e) {
|
|
1402
|
+
if (!e) return "";
|
|
1403
|
+
let t = typeof e == "number" ? new Date(e > 1e11 ? e : e * 1e3) : new Date(e);
|
|
1404
|
+
return Number.isNaN(t.getTime()) ? "" : t.toLocaleString("zh-CN", {
|
|
1405
|
+
timeZone: "Asia/Shanghai",
|
|
1406
|
+
month: "short",
|
|
1407
|
+
day: "numeric",
|
|
1408
|
+
hour: "2-digit",
|
|
1409
|
+
minute: "2-digit",
|
|
1410
|
+
hour12: !1
|
|
1411
|
+
});
|
|
1412
|
+
}
|
|
1413
|
+
function dn(e) {
|
|
1414
|
+
return [
|
|
1415
|
+
e?.Title,
|
|
1416
|
+
e?.Summary,
|
|
1417
|
+
e?.FirstPrompt,
|
|
1418
|
+
e?.LastPrompt,
|
|
1419
|
+
e?.SessionId,
|
|
1420
|
+
e?.Model?.display_name,
|
|
1421
|
+
e?.Model?.id
|
|
1422
|
+
].map(ln).join(" ");
|
|
1423
|
+
}
|
|
1424
|
+
function fn(e, t = {}) {
|
|
1425
|
+
if (!on.has(ln(e?.ActiveRunStatus))) return !1;
|
|
1426
|
+
let n = cn(e);
|
|
1427
|
+
if (!n) return !0;
|
|
1428
|
+
let r = Number.isFinite(Number(t.now)) ? Number(t.now) : Date.now(), i = Number.isFinite(Number(t.activeStaleAfterMs)) ? Number(t.activeStaleAfterMs) : sn;
|
|
1429
|
+
return r - n <= i;
|
|
1430
|
+
}
|
|
1431
|
+
function pn(e = [], t = "", n = {}) {
|
|
1432
|
+
let r = ln(t);
|
|
1433
|
+
return (Array.isArray(e) ? e : []).filter((e) => e?.SessionId).filter((e) => !r || dn(e).includes(r)).slice().sort((e, t) => {
|
|
1434
|
+
let r = +!!fn(e, n), i = +!!fn(t, n);
|
|
1435
|
+
return r === i ? cn(t) - cn(e) : i - r;
|
|
1436
|
+
});
|
|
1437
|
+
}
|
|
1438
|
+
function mn(e, t = {}) {
|
|
1439
|
+
let n = fn(e, t);
|
|
1440
|
+
return {
|
|
1441
|
+
running: n,
|
|
1442
|
+
label: n ? "" : un(e?.UpdatedAt ?? e?.updated_at)
|
|
1443
|
+
};
|
|
1444
|
+
}
|
|
1445
|
+
//#endregion
|
|
1446
|
+
//#region src/components/chat/ChatSidebar.tsx
|
|
1447
|
+
function hn({ sessions: e, currentSessionId: t, onCreateNewSession: n, onSelectSession: r, onDeleteSession: i, sessionTitle: a, className: o }) {
|
|
1448
|
+
let [s, c] = z(""), l = fe(() => pn(e, s), [e, s]);
|
|
1449
|
+
return /* @__PURE__ */ j("div", {
|
|
1450
|
+
className: J("flex h-full min-h-0 flex-col bg-slate-50 dark:bg-slate-950/80", o),
|
|
1451
|
+
children: [
|
|
1452
|
+
/* @__PURE__ */ j("div", {
|
|
1453
|
+
className: "flex flex-shrink-0 flex-col gap-2 border-b border-slate-200/30 px-3 py-3 dark:border-slate-800",
|
|
1454
|
+
children: [/* @__PURE__ */ j("button", {
|
|
1455
|
+
type: "button",
|
|
1456
|
+
onClick: n,
|
|
1457
|
+
className: "flex w-full items-center justify-between rounded-2xl px-3 py-2 text-sm font-medium transition-colors hover:bg-slate-200/60 dark:hover:bg-slate-800",
|
|
1458
|
+
children: [/* @__PURE__ */ j("span", {
|
|
1459
|
+
className: "flex items-center gap-2",
|
|
1460
|
+
children: [/* @__PURE__ */ A(ne, { className: "h-4 w-4" }), /* @__PURE__ */ A("span", { children: "新对话" })]
|
|
1461
|
+
}), /* @__PURE__ */ A("span", {
|
|
1462
|
+
className: "rounded border border-slate-200 bg-white px-1.5 py-0.5 text-[11px] text-slate-500 shadow-sm dark:border-slate-700 dark:bg-slate-900",
|
|
1463
|
+
children: "⌘ N"
|
|
1464
|
+
})]
|
|
1465
|
+
}), /* @__PURE__ */ j("label", {
|
|
1466
|
+
className: "flex items-center gap-2 rounded-2xl border border-slate-200 bg-white px-3 py-2 text-xs text-slate-500 shadow-sm focus-within:border-blue-300 focus-within:ring-2 focus-within:ring-blue-100 dark:border-slate-800 dark:bg-slate-900 dark:text-slate-400 dark:focus-within:border-blue-800 dark:focus-within:ring-blue-950/60",
|
|
1467
|
+
children: [/* @__PURE__ */ A(ie, { className: "h-3.5 w-3.5 flex-shrink-0" }), /* @__PURE__ */ A("input", {
|
|
1468
|
+
value: s,
|
|
1469
|
+
onChange: (e) => c(e.target.value),
|
|
1470
|
+
className: "min-w-0 flex-1 bg-transparent text-sm text-slate-700 outline-none placeholder:text-slate-400 dark:text-slate-200",
|
|
1471
|
+
placeholder: "搜索会话、模型或摘要"
|
|
1472
|
+
})]
|
|
1473
|
+
})]
|
|
1474
|
+
}),
|
|
1475
|
+
/* @__PURE__ */ j("div", {
|
|
1476
|
+
className: "min-h-0 flex-1 overflow-y-auto px-2 pb-4 pt-2 custom-scrollbar",
|
|
1477
|
+
children: [/* @__PURE__ */ j("div", {
|
|
1478
|
+
className: "px-2 py-2 text-xs font-semibold text-slate-400 dark:text-slate-500",
|
|
1479
|
+
children: ["历史记录", s.trim() ? ` · ${l.length}` : ""]
|
|
1480
|
+
}), /* @__PURE__ */ A("div", {
|
|
1481
|
+
className: "flex flex-col gap-1.5",
|
|
1482
|
+
children: l.length > 0 ? l.map((e) => {
|
|
1483
|
+
let n = mn(e);
|
|
1484
|
+
return /* @__PURE__ */ j("div", {
|
|
1485
|
+
role: "button",
|
|
1486
|
+
tabIndex: 0,
|
|
1487
|
+
onClick: () => r(e.SessionId),
|
|
1488
|
+
onKeyDown: (t) => {
|
|
1489
|
+
(t.key === "Enter" || t.key === " ") && (t.preventDefault(), r(e.SessionId));
|
|
1490
|
+
},
|
|
1491
|
+
className: J("group flex items-center justify-between gap-3 rounded-2xl px-3 py-3 text-sm transition-colors", t === e.SessionId ? "bg-slate-200/90 font-medium text-slate-950 dark:bg-slate-800 dark:text-slate-50" : "cursor-pointer text-slate-700 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800/60"),
|
|
1492
|
+
children: [
|
|
1493
|
+
/* @__PURE__ */ A("div", {
|
|
1494
|
+
className: "min-w-0 flex-1 truncate text-[15px] leading-6",
|
|
1495
|
+
children: a(e)
|
|
1496
|
+
}),
|
|
1497
|
+
n.running ? /* @__PURE__ */ A(m, { className: "h-4 w-4 flex-shrink-0 animate-spin text-slate-400 dark:text-slate-500" }) : n.label ? /* @__PURE__ */ A("span", {
|
|
1498
|
+
className: "flex-shrink-0 text-[11px] leading-none text-slate-400 dark:text-slate-500",
|
|
1499
|
+
children: n.label
|
|
1500
|
+
}) : null,
|
|
1501
|
+
/* @__PURE__ */ A("button", {
|
|
1502
|
+
type: "button",
|
|
1503
|
+
onClick: (t) => i(e.SessionId, t),
|
|
1504
|
+
className: "hidden rounded-lg p-1.5 text-slate-400 transition hover:bg-white hover:text-rose-500 md:group-hover:block dark:hover:bg-slate-900",
|
|
1505
|
+
title: "Delete chat",
|
|
1506
|
+
children: /* @__PURE__ */ A(se, { className: "h-3.5 w-3.5" })
|
|
1507
|
+
})
|
|
1508
|
+
]
|
|
1509
|
+
}, e.SessionId);
|
|
1510
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1511
|
+
className: "rounded-xl border border-dashed border-slate-200 px-3 py-8 text-center text-xs text-slate-400 dark:border-slate-800 dark:text-slate-500",
|
|
1512
|
+
children: "没有匹配的会话"
|
|
1513
|
+
})
|
|
1514
|
+
})]
|
|
1515
|
+
}),
|
|
1516
|
+
/* @__PURE__ */ j("div", {
|
|
1517
|
+
className: "border-t border-slate-200/30 px-4 py-3 text-center dark:border-slate-800",
|
|
1518
|
+
children: [
|
|
1519
|
+
/* @__PURE__ */ A("div", {
|
|
1520
|
+
className: "text-[10px] font-medium tracking-[0.14em] text-slate-400 dark:text-slate-500",
|
|
1521
|
+
children: "POWERED BY"
|
|
1522
|
+
}),
|
|
1523
|
+
/* @__PURE__ */ A("div", {
|
|
1524
|
+
className: "mt-1 bg-gradient-to-r from-blue-600 to-indigo-500 bg-clip-text text-xs font-bold text-transparent dark:from-blue-400 dark:to-indigo-300",
|
|
1525
|
+
children: "Ksyun AgentEngine"
|
|
1526
|
+
}),
|
|
1527
|
+
/* @__PURE__ */ A("div", {
|
|
1528
|
+
className: "mx-auto mt-2 max-w-[13rem] text-[10px] leading-4 text-slate-400 dark:text-slate-500",
|
|
1529
|
+
children: "Agent 可能产生不准确的信息,请独立验证。"
|
|
1530
|
+
})
|
|
1531
|
+
]
|
|
1532
|
+
})
|
|
1533
|
+
]
|
|
1534
|
+
});
|
|
1535
|
+
}
|
|
1536
|
+
//#endregion
|
|
1537
|
+
//#region src/components/native/NativeRuntimeLauncher.tsx
|
|
1538
|
+
var gn = F(() => import("./NativeTerminalPanel-q4ECX8EX.js").then((e) => e.n).then((e) => ({ default: e.NativeTerminalPanel })));
|
|
1539
|
+
function _n({ productLabel: e = "原生运行时", nativeManagementLink: t, nativeTerminal: n, workspaceEnabled: r, onOpenWorkspace: i }) {
|
|
1540
|
+
let a = !!n?.Enabled, [o, c] = z(!1);
|
|
1541
|
+
return /* @__PURE__ */ j("section", {
|
|
1542
|
+
className: "flex min-h-0 flex-1 overflow-y-auto bg-[radial-gradient(circle_at_top_left,rgba(14,165,233,0.12),transparent_34%),linear-gradient(135deg,#f8fafc_0%,#ffffff_48%,#f1f5f9_100%)] px-4 py-8 dark:bg-[radial-gradient(circle_at_top_left,rgba(14,165,233,0.16),transparent_34%),linear-gradient(135deg,#020617_0%,#0f172a_52%,#111827_100%)] sm:px-8",
|
|
1543
|
+
children: [/* @__PURE__ */ A("div", {
|
|
1544
|
+
className: "mx-auto flex w-full max-w-5xl flex-col justify-center",
|
|
1545
|
+
children: /* @__PURE__ */ j("div", {
|
|
1546
|
+
className: "overflow-hidden rounded-[2rem] border border-slate-200/80 bg-white/90 shadow-xl shadow-slate-200/60 backdrop-blur dark:border-slate-800 dark:bg-slate-900/85 dark:shadow-black/30",
|
|
1547
|
+
children: [/* @__PURE__ */ j("div", {
|
|
1548
|
+
className: "border-b border-slate-200/80 bg-slate-50/80 px-6 py-5 dark:border-slate-800 dark:bg-slate-950/40 sm:px-8",
|
|
1549
|
+
children: [
|
|
1550
|
+
/* @__PURE__ */ j("div", {
|
|
1551
|
+
className: "inline-flex items-center gap-2 rounded-full border border-sky-200 bg-sky-50 px-3 py-1 text-xs font-medium text-sky-700 dark:border-sky-900/60 dark:bg-sky-950/50 dark:text-sky-300",
|
|
1552
|
+
children: [
|
|
1553
|
+
/* @__PURE__ */ A(w, { className: "h-3.5 w-3.5" }),
|
|
1554
|
+
e,
|
|
1555
|
+
" native runtime"
|
|
1556
|
+
]
|
|
1557
|
+
}),
|
|
1558
|
+
/* @__PURE__ */ A("h1", {
|
|
1559
|
+
className: "mt-5 text-2xl font-semibold tracking-tight text-slate-950 dark:text-slate-50 sm:text-3xl",
|
|
1560
|
+
children: "对话请使用原生管理台"
|
|
1561
|
+
}),
|
|
1562
|
+
/* @__PURE__ */ A("p", {
|
|
1563
|
+
className: "mt-3 max-w-2xl text-sm leading-6 text-slate-600 dark:text-slate-300 sm:text-base",
|
|
1564
|
+
children: "当前运行时的对话状态由原生管理台承载。AgentEngine Hosted UI 在这里保留统一入口和 Workspace 文件管理,不重复实现运行时内部已有的复杂对话状态机。"
|
|
1565
|
+
})
|
|
1566
|
+
]
|
|
1567
|
+
}), /* @__PURE__ */ j("div", {
|
|
1568
|
+
className: "grid gap-4 p-6 md:grid-cols-3 sm:p-8",
|
|
1569
|
+
children: [
|
|
1570
|
+
/* @__PURE__ */ j("div", {
|
|
1571
|
+
className: "rounded-3xl border border-slate-200 bg-white p-5 dark:border-slate-800 dark:bg-slate-900",
|
|
1572
|
+
children: [
|
|
1573
|
+
/* @__PURE__ */ A("div", {
|
|
1574
|
+
className: "flex h-11 w-11 items-center justify-center rounded-2xl bg-slate-950 text-white dark:bg-slate-100 dark:text-slate-950",
|
|
1575
|
+
children: /* @__PURE__ */ A(g, { className: "h-5 w-5" })
|
|
1576
|
+
}),
|
|
1577
|
+
/* @__PURE__ */ A("h2", {
|
|
1578
|
+
className: "mt-4 text-base font-semibold text-slate-950 dark:text-slate-50",
|
|
1579
|
+
children: "原生管理台"
|
|
1580
|
+
}),
|
|
1581
|
+
/* @__PURE__ */ A("p", {
|
|
1582
|
+
className: "mt-2 text-sm leading-6 text-slate-600 dark:text-slate-300",
|
|
1583
|
+
children: "使用原生管理台处理对话、工具卡片、思考流、审批、中断和运行时历史,避免跨状态机不一致。"
|
|
1584
|
+
}),
|
|
1585
|
+
t ? /* @__PURE__ */ j("a", {
|
|
1586
|
+
href: t.href,
|
|
1587
|
+
target: "_blank",
|
|
1588
|
+
rel: "noreferrer",
|
|
1589
|
+
title: t.title,
|
|
1590
|
+
className: "mt-5 inline-flex items-center gap-2 rounded-2xl bg-slate-950 px-4 py-2.5 text-sm font-medium text-white transition hover:bg-slate-800 dark:bg-slate-100 dark:text-slate-950 dark:hover:bg-white",
|
|
1591
|
+
children: [
|
|
1592
|
+
/* @__PURE__ */ A(s, { className: "h-4 w-4" }),
|
|
1593
|
+
"打开",
|
|
1594
|
+
t.label
|
|
1595
|
+
]
|
|
1596
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1597
|
+
className: "mt-5 rounded-2xl border border-amber-200 bg-amber-50 px-4 py-3 text-sm leading-6 text-amber-800 dark:border-amber-900/60 dark:bg-amber-950/30 dark:text-amber-200",
|
|
1598
|
+
children: "当前访问模式不开放原生管理入口。需要完整对话体验时,请使用 owner/private 链接或 CLI。"
|
|
1599
|
+
})
|
|
1600
|
+
]
|
|
1601
|
+
}),
|
|
1602
|
+
/* @__PURE__ */ j("div", {
|
|
1603
|
+
className: "rounded-3xl border border-slate-200 bg-white p-5 dark:border-slate-800 dark:bg-slate-900",
|
|
1604
|
+
children: [
|
|
1605
|
+
/* @__PURE__ */ A("div", {
|
|
1606
|
+
className: "flex h-11 w-11 items-center justify-center rounded-2xl bg-sky-100 text-sky-700 dark:bg-sky-950 dark:text-sky-300",
|
|
1607
|
+
children: /* @__PURE__ */ A(d, { className: "h-5 w-5" })
|
|
1608
|
+
}),
|
|
1609
|
+
/* @__PURE__ */ A("h2", {
|
|
1610
|
+
className: "mt-4 text-base font-semibold text-slate-950 dark:text-slate-50",
|
|
1611
|
+
children: "Workspace 文件管理"
|
|
1612
|
+
}),
|
|
1613
|
+
/* @__PURE__ */ A("p", {
|
|
1614
|
+
className: "mt-2 text-sm leading-6 text-slate-600 dark:text-slate-300",
|
|
1615
|
+
children: "文件浏览、上传、预览仍由 Hosted UI 提供,和原生管理台组合使用覆盖对话与工作区。"
|
|
1616
|
+
}),
|
|
1617
|
+
r ? /* @__PURE__ */ j("button", {
|
|
1618
|
+
type: "button",
|
|
1619
|
+
onClick: i,
|
|
1620
|
+
className: "mt-5 inline-flex items-center gap-2 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-2.5 text-sm font-medium text-slate-800 transition hover:bg-slate-100 dark:border-slate-700 dark:bg-slate-800 dark:text-slate-100 dark:hover:bg-slate-700",
|
|
1621
|
+
children: [/* @__PURE__ */ A(d, { className: "h-4 w-4" }), "打开 Workspace"]
|
|
1622
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1623
|
+
className: "mt-5 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm leading-6 text-slate-500 dark:border-slate-800 dark:bg-slate-950/40 dark:text-slate-400",
|
|
1624
|
+
children: "当前链接未开放 Workspace 文件管理。Owner 或 private 链接可使用该能力。"
|
|
1625
|
+
})
|
|
1626
|
+
]
|
|
1627
|
+
}),
|
|
1628
|
+
/* @__PURE__ */ j("div", {
|
|
1629
|
+
className: "rounded-3xl border border-slate-200 bg-white p-5 dark:border-slate-800 dark:bg-slate-900",
|
|
1630
|
+
children: [
|
|
1631
|
+
/* @__PURE__ */ A("div", {
|
|
1632
|
+
className: "flex h-11 w-11 items-center justify-center rounded-2xl bg-emerald-100 text-emerald-700 dark:bg-emerald-950 dark:text-emerald-300",
|
|
1633
|
+
children: /* @__PURE__ */ A(E, { className: "h-5 w-5" })
|
|
1634
|
+
}),
|
|
1635
|
+
/* @__PURE__ */ A("h2", {
|
|
1636
|
+
className: "mt-4 text-base font-semibold text-slate-950 dark:text-slate-50",
|
|
1637
|
+
children: "原生 TUI"
|
|
1638
|
+
}),
|
|
1639
|
+
/* @__PURE__ */ A("p", {
|
|
1640
|
+
className: "mt-2 text-sm leading-6 text-slate-600 dark:text-slate-300",
|
|
1641
|
+
children: "如果运行时暴露安全的 ks-terminal.v1 通道,可以在这里进入原生终端 UI;share 链接不会开放该入口。"
|
|
1642
|
+
}),
|
|
1643
|
+
a ? /* @__PURE__ */ j("button", {
|
|
1644
|
+
type: "button",
|
|
1645
|
+
onClick: () => c(!0),
|
|
1646
|
+
className: "mt-5 inline-flex items-center gap-2 rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-2.5 text-sm font-medium text-emerald-800 transition hover:bg-emerald-100 dark:border-emerald-900/70 dark:bg-emerald-950/40 dark:text-emerald-200",
|
|
1647
|
+
children: [/* @__PURE__ */ A(E, { className: "h-4 w-4" }), "打开 TUI"]
|
|
1648
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1649
|
+
className: "mt-5 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm leading-6 text-slate-500 dark:border-slate-800 dark:bg-slate-950/40 dark:text-slate-400",
|
|
1650
|
+
children: "当前运行时未声明可用的浏览器 TUI 能力。"
|
|
1651
|
+
})
|
|
1652
|
+
]
|
|
1653
|
+
})
|
|
1654
|
+
]
|
|
1655
|
+
})]
|
|
1656
|
+
})
|
|
1657
|
+
}), n && o ? /* @__PURE__ */ A(P, {
|
|
1658
|
+
fallback: null,
|
|
1659
|
+
children: /* @__PURE__ */ A(gn, {
|
|
1660
|
+
capability: n,
|
|
1661
|
+
open: o,
|
|
1662
|
+
onClose: () => c(!1)
|
|
1663
|
+
})
|
|
1664
|
+
}) : null]
|
|
1665
|
+
});
|
|
1666
|
+
}
|
|
1667
|
+
//#endregion
|
|
1668
|
+
//#region src/stores/ui.ts
|
|
1669
|
+
function vn(e, t) {
|
|
1670
|
+
return typeof t == "function" ? t(e) : t;
|
|
1671
|
+
}
|
|
1672
|
+
var yn = U()((e) => ({
|
|
1673
|
+
sidebarOpen: !0,
|
|
1674
|
+
mobileSidebarOpen: !1,
|
|
1675
|
+
mobileActionsOpen: !1,
|
|
1676
|
+
workspacePanelOpen: !1,
|
|
1677
|
+
workspacePanelWidth: 820,
|
|
1678
|
+
workspacePanelFullscreen: !1,
|
|
1679
|
+
input: "",
|
|
1680
|
+
attachments: [],
|
|
1681
|
+
previewAttachment: null,
|
|
1682
|
+
previewImageSize: null,
|
|
1683
|
+
queuedDrafts: [],
|
|
1684
|
+
toasts: [],
|
|
1685
|
+
toggleSidebar: () => e((e) => ({ sidebarOpen: !e.sidebarOpen })),
|
|
1686
|
+
setSidebarOpen: (t) => e({ sidebarOpen: t }),
|
|
1687
|
+
toggleMobileSidebar: () => e((e) => ({ mobileSidebarOpen: !e.mobileSidebarOpen })),
|
|
1688
|
+
setMobileSidebarOpen: (t) => e({ mobileSidebarOpen: t }),
|
|
1689
|
+
toggleMobileActions: () => e((e) => ({ mobileActionsOpen: !e.mobileActionsOpen })),
|
|
1690
|
+
setMobileActionsOpen: (t) => e({ mobileActionsOpen: t }),
|
|
1691
|
+
setWorkspacePanelOpen: (t) => e({ workspacePanelOpen: t }),
|
|
1692
|
+
setWorkspacePanelWidth: (t) => e({ workspacePanelWidth: t }),
|
|
1693
|
+
setWorkspacePanelFullscreen: (t) => e({ workspacePanelFullscreen: t }),
|
|
1694
|
+
setInput: (t) => e({ input: t }),
|
|
1695
|
+
setAttachments: (t) => e((e) => ({ attachments: vn(e.attachments, t) })),
|
|
1696
|
+
setPreviewAttachment: (t) => e({ previewAttachment: t }),
|
|
1697
|
+
setPreviewImageSize: (t) => e({ previewImageSize: t }),
|
|
1698
|
+
setQueuedDrafts: (t) => e((e) => ({ queuedDrafts: vn(e.queuedDrafts, t) })),
|
|
1699
|
+
pushToast: (t, n = "info") => e((e) => ({ toasts: [...e.toasts, {
|
|
1700
|
+
id: String(Date.now() + Math.random()),
|
|
1701
|
+
message: t,
|
|
1702
|
+
variant: n,
|
|
1703
|
+
createdAt: Date.now()
|
|
1704
|
+
}] })),
|
|
1705
|
+
dismissToast: (t) => e((e) => ({ toasts: e.toasts.filter((e) => e.id !== t) }))
|
|
1706
|
+
}));
|
|
1707
|
+
//#endregion
|
|
1708
|
+
//#region src/components/workspace/FileEditor.tsx
|
|
1709
|
+
function bn(e) {
|
|
1710
|
+
let t = String(e || "").split("/").pop() || "", n = t.lastIndexOf(".");
|
|
1711
|
+
return n >= 0 ? t.slice(n) : "";
|
|
1712
|
+
}
|
|
1713
|
+
function xn(e) {
|
|
1714
|
+
return Te.matchFilename(ze, `file${e}`);
|
|
1715
|
+
}
|
|
1716
|
+
function Q({ content: e, path: t, readOnly: n = !1, onSave: r, onDirtyChange: i, onContentChange: a, getContentRef: o }) {
|
|
1717
|
+
let s = R(null), c = R(null), l = R(new ye()), u = R(new ye()), d = R(new ye()), f = R(!1), p = R(r), m = R(i), h = R(a);
|
|
1718
|
+
L(() => {
|
|
1719
|
+
p.current = r, m.current = i, h.current = a;
|
|
1720
|
+
}, [
|
|
1721
|
+
r,
|
|
1722
|
+
i,
|
|
1723
|
+
a
|
|
1724
|
+
]);
|
|
1725
|
+
let g = I((e) => {
|
|
1726
|
+
f.current !== e && (f.current = e, m.current?.(e));
|
|
1727
|
+
}, []);
|
|
1728
|
+
return L(() => {
|
|
1729
|
+
if (!s.current) return;
|
|
1730
|
+
let r = document.documentElement.classList.contains("dark"), i = ve.of([{
|
|
1731
|
+
key: "Mod-s",
|
|
1732
|
+
run: (e) => {
|
|
1733
|
+
let t = e.state.doc.toString();
|
|
1734
|
+
return p.current?.(t), g(!1), !0;
|
|
1735
|
+
},
|
|
1736
|
+
preventDefault: !0
|
|
1737
|
+
}]), a = new W({
|
|
1738
|
+
state: be.create({
|
|
1739
|
+
doc: e,
|
|
1740
|
+
extensions: [
|
|
1741
|
+
K(),
|
|
1742
|
+
_e(),
|
|
1743
|
+
Se(),
|
|
1744
|
+
Oe(),
|
|
1745
|
+
me(),
|
|
1746
|
+
he(),
|
|
1747
|
+
be.allowMultipleSelections.of(!0),
|
|
1748
|
+
Ae(),
|
|
1749
|
+
je(De, { fallback: !0 }),
|
|
1750
|
+
Ee(),
|
|
1751
|
+
Ie(),
|
|
1752
|
+
Fe(),
|
|
1753
|
+
q(),
|
|
1754
|
+
G(),
|
|
1755
|
+
ge(),
|
|
1756
|
+
Ne(),
|
|
1757
|
+
ve.of([
|
|
1758
|
+
...Le,
|
|
1759
|
+
...xe,
|
|
1760
|
+
...Pe,
|
|
1761
|
+
...Ce,
|
|
1762
|
+
...ke,
|
|
1763
|
+
...Re,
|
|
1764
|
+
we
|
|
1765
|
+
]),
|
|
1766
|
+
i,
|
|
1767
|
+
W.updateListener.of((e) => {
|
|
1768
|
+
e.docChanged && (g(!0), h.current?.(e.state.doc.toString()));
|
|
1769
|
+
}),
|
|
1770
|
+
d.current.of(be.readOnly.of(n)),
|
|
1771
|
+
l.current.of([]),
|
|
1772
|
+
u.current.of(r ? Me : []),
|
|
1773
|
+
W.theme({
|
|
1774
|
+
"&": { height: "100%" },
|
|
1775
|
+
".cm-scroller": { overflow: "auto" }
|
|
1776
|
+
})
|
|
1777
|
+
]
|
|
1778
|
+
}),
|
|
1779
|
+
parent: s.current
|
|
1780
|
+
});
|
|
1781
|
+
c.current = a, o && (o.current = () => a.state.doc.toString());
|
|
1782
|
+
let f = xn(bn(t));
|
|
1783
|
+
return f && f.load().then((e) => {
|
|
1784
|
+
c.current && c.current.dispatch({ effects: l.current.reconfigure(e) });
|
|
1785
|
+
}).catch(() => {}), () => {
|
|
1786
|
+
a.destroy(), c.current = null, o && (o.current = null);
|
|
1787
|
+
};
|
|
1788
|
+
}, []), L(() => {
|
|
1789
|
+
let t = c.current;
|
|
1790
|
+
if (!t) return;
|
|
1791
|
+
let n = t.state.doc.toString();
|
|
1792
|
+
n !== e && (t.dispatch({ changes: {
|
|
1793
|
+
from: 0,
|
|
1794
|
+
to: n.length,
|
|
1795
|
+
insert: e
|
|
1796
|
+
} }), g(!1));
|
|
1797
|
+
}, [e, g]), L(() => {
|
|
1798
|
+
let e = c.current;
|
|
1799
|
+
if (!e) return;
|
|
1800
|
+
let n = xn(bn(t));
|
|
1801
|
+
n ? n.load().then((e) => {
|
|
1802
|
+
c.current && c.current.dispatch({ effects: l.current.reconfigure(e) });
|
|
1803
|
+
}).catch(() => {}) : e.dispatch({ effects: l.current.reconfigure([]) });
|
|
1804
|
+
}, [t]), L(() => {
|
|
1805
|
+
let e = c.current;
|
|
1806
|
+
e && e.dispatch({ effects: d.current.reconfigure(be.readOnly.of(n)) });
|
|
1807
|
+
}, [n]), L(() => {
|
|
1808
|
+
let e = new MutationObserver(() => {
|
|
1809
|
+
let e = c.current;
|
|
1810
|
+
if (!e) return;
|
|
1811
|
+
let t = document.documentElement.classList.contains("dark");
|
|
1812
|
+
e.dispatch({ effects: u.current.reconfigure(t ? Me : []) });
|
|
1813
|
+
});
|
|
1814
|
+
return e.observe(document.documentElement, {
|
|
1815
|
+
attributes: !0,
|
|
1816
|
+
attributeFilter: ["class"]
|
|
1817
|
+
}), () => e.disconnect();
|
|
1818
|
+
}, []), /* @__PURE__ */ A("div", {
|
|
1819
|
+
ref: s,
|
|
1820
|
+
className: "h-full w-full overflow-hidden [&_.cm-editor]:h-full [&_.cm-scroller]:auto"
|
|
1821
|
+
});
|
|
1822
|
+
}
|
|
1823
|
+
//#endregion
|
|
1824
|
+
//#region src/components/workspace/FilePreview.tsx
|
|
1825
|
+
function Sn({ content: e, objectUrl: t, kind: n, filename: r, path: i }) {
|
|
1826
|
+
return n === "markdown" ? /* @__PURE__ */ A(X, { content: e || "" }) : n === "image" && t ? /* @__PURE__ */ A("div", {
|
|
1827
|
+
className: "flex items-center justify-center p-4",
|
|
1828
|
+
children: /* @__PURE__ */ A("img", {
|
|
1829
|
+
src: t,
|
|
1830
|
+
alt: r,
|
|
1831
|
+
className: "max-h-[70vh] max-w-full rounded object-contain"
|
|
1832
|
+
})
|
|
1833
|
+
}) : n === "pdf" && t ? /* @__PURE__ */ A("iframe", {
|
|
1834
|
+
src: t,
|
|
1835
|
+
title: r,
|
|
1836
|
+
className: "h-full w-full border-0"
|
|
1837
|
+
}) : (n === "text" || n === "code") && e !== null ? /* @__PURE__ */ A(Q, {
|
|
1838
|
+
content: e,
|
|
1839
|
+
path: i || r,
|
|
1840
|
+
readOnly: !0,
|
|
1841
|
+
onSave: () => {},
|
|
1842
|
+
onDirtyChange: () => {},
|
|
1843
|
+
getContentRef: { current: () => e || "" }
|
|
1844
|
+
}) : /* @__PURE__ */ A("div", {
|
|
1845
|
+
className: "flex h-full items-center justify-center px-6 text-center",
|
|
1846
|
+
children: /* @__PURE__ */ A("div", {
|
|
1847
|
+
className: "w-full max-w-md rounded-2xl border border-dashed border-slate-300 bg-slate-50 px-5 py-5 text-slate-500 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-400",
|
|
1848
|
+
children: "该文件类型暂不支持在线预览,请直接下载查看。"
|
|
1849
|
+
})
|
|
1850
|
+
});
|
|
1851
|
+
}
|
|
1852
|
+
//#endregion
|
|
1853
|
+
//#region src/utils/sandbox.ts
|
|
1854
|
+
function Cn(e) {
|
|
1855
|
+
return e.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
1856
|
+
}
|
|
1857
|
+
function wn(e) {
|
|
1858
|
+
let t = e.endsWith("/") ? e : `${e}/`;
|
|
1859
|
+
if (typeof window > "u") return "'self'";
|
|
1860
|
+
try {
|
|
1861
|
+
return new URL(t, window.location.origin).toString();
|
|
1862
|
+
} catch {
|
|
1863
|
+
return "'self'";
|
|
1864
|
+
}
|
|
1865
|
+
}
|
|
1866
|
+
function Tn(...e) {
|
|
1867
|
+
return Array.from(new Set(e.filter((e) => !!e))).join(" ");
|
|
1868
|
+
}
|
|
1869
|
+
function En(e) {
|
|
1870
|
+
let t = e ? wn(e) : void 0, n = Tn("'unsafe-inline'", "'unsafe-eval'", "'self'", "https:", t), r = Tn("'self'", "https:", t);
|
|
1871
|
+
return [
|
|
1872
|
+
"default-src 'none'",
|
|
1873
|
+
`script-src ${n}`,
|
|
1874
|
+
`style-src 'unsafe-inline' data: ${r}`,
|
|
1875
|
+
`img-src data: blob: ${r}`,
|
|
1876
|
+
`font-src data: ${r}`,
|
|
1877
|
+
`media-src data: blob: ${r}`,
|
|
1878
|
+
"worker-src blob:",
|
|
1879
|
+
"connect-src 'none'",
|
|
1880
|
+
"form-action 'none'",
|
|
1881
|
+
"base-uri 'self'"
|
|
1882
|
+
].join("; ");
|
|
1883
|
+
}
|
|
1884
|
+
function Dn(e) {
|
|
1885
|
+
try {
|
|
1886
|
+
let t = new URL(e, window.location.href);
|
|
1887
|
+
return [
|
|
1888
|
+
"http:",
|
|
1889
|
+
"https:",
|
|
1890
|
+
"mailto:"
|
|
1891
|
+
].includes(t.protocol);
|
|
1892
|
+
} catch {
|
|
1893
|
+
return !1;
|
|
1894
|
+
}
|
|
1895
|
+
}
|
|
1896
|
+
function On(e, t = {}) {
|
|
1897
|
+
let { channelId: n, basePath: r } = typeof t == "string" ? { channelId: t } : t, i = En(r), a = `<script>
|
|
1898
|
+
function ksadkScrollToHash(rawHref) {
|
|
1899
|
+
if (!rawHref || rawHref === '#') return;
|
|
1900
|
+
var rawId = rawHref.slice(1);
|
|
1901
|
+
var id = rawId;
|
|
1902
|
+
try {
|
|
1903
|
+
id = decodeURIComponent(rawId);
|
|
1904
|
+
} catch (_) {}
|
|
1905
|
+
var target = document.getElementById(id) || document.getElementsByName(id)[0];
|
|
1906
|
+
if (target) {
|
|
1907
|
+
target.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
document.addEventListener('click', function(event) {
|
|
1911
|
+
var target = event.target && event.target.closest ? event.target.closest('a') : null;
|
|
1912
|
+
if (!target) return;
|
|
1913
|
+
var rawHref = target.getAttribute('href') || '';
|
|
1914
|
+
if (rawHref.charAt(0) === '#') {
|
|
1915
|
+
event.preventDefault();
|
|
1916
|
+
ksadkScrollToHash(rawHref);
|
|
1917
|
+
return;
|
|
1918
|
+
}
|
|
1919
|
+
if (target.href) {
|
|
1920
|
+
event.preventDefault();
|
|
1921
|
+
window.parent.postMessage({
|
|
1922
|
+
type: 'ksadk:linkClick',
|
|
1923
|
+
channelId: ${JSON.stringify(n || "")},
|
|
1924
|
+
href: target.href,
|
|
1925
|
+
target: target.target || '_self'
|
|
1926
|
+
}, '*');
|
|
1927
|
+
}
|
|
1928
|
+
}, true);
|
|
1929
|
+
<\/script>`, o = `${`<meta http-equiv="Content-Security-Policy" content="${Cn(i)}">`}${r ? `<base href="${Cn(r)}">` : ""}${a}`;
|
|
1930
|
+
return /<head[^>]*>/i.test(e) ? e.replace(/<head[^>]*>/i, `$&${o}`) : `${o}${e}`;
|
|
1931
|
+
}
|
|
1932
|
+
function kn(e, t) {
|
|
1933
|
+
let n = R(null);
|
|
1934
|
+
L(() => (n.current = (n) => {
|
|
1935
|
+
if (n.source !== e.current?.contentWindow || n.data?.type !== "ksadk:linkClick" || t && n.data?.channelId !== t) return;
|
|
1936
|
+
let r = n.data?.href;
|
|
1937
|
+
typeof r == "string" && r && Dn(r) && window.open(r, "_blank", "noopener,noreferrer");
|
|
1938
|
+
}, window.addEventListener("message", n.current), () => {
|
|
1939
|
+
n.current && window.removeEventListener("message", n.current);
|
|
1940
|
+
}), [e, t]);
|
|
1941
|
+
}
|
|
1942
|
+
var An = "/_ksadk/workspace/v1/files", jn = new Set([
|
|
1943
|
+
".md",
|
|
1944
|
+
".markdown",
|
|
1945
|
+
".mdx"
|
|
1946
|
+
]), Mn = new Set([".pdf"]), Nn = new Set([
|
|
1947
|
+
".png",
|
|
1948
|
+
".jpg",
|
|
1949
|
+
".jpeg",
|
|
1950
|
+
".gif",
|
|
1951
|
+
".webp",
|
|
1952
|
+
".svg",
|
|
1953
|
+
".bmp",
|
|
1954
|
+
".ico"
|
|
1955
|
+
]), Pn = new Set(/* @__PURE__ */ ".txt,.log,.json,.yaml,.yml,.xml,.html,.css,.js,.jsx,.ts,.tsx,.py,.sh,.sql,.csv,.tsv,.toml,.ini,.env,.lock,.conf,.c,.cc,.cpp,.go,.java,.rs".split(",")), Fn = new Set([
|
|
1956
|
+
"application/json",
|
|
1957
|
+
"application/ld+json",
|
|
1958
|
+
"application/xml",
|
|
1959
|
+
"application/javascript",
|
|
1960
|
+
"application/x-javascript",
|
|
1961
|
+
"application/typescript",
|
|
1962
|
+
"application/x-sh",
|
|
1963
|
+
"application/x-yaml",
|
|
1964
|
+
"application/yaml",
|
|
1965
|
+
"text/csv",
|
|
1966
|
+
"text/tab-separated-values"
|
|
1967
|
+
]);
|
|
1968
|
+
function $(e) {
|
|
1969
|
+
let t = String(e || "").trim().replace(/\\/g, "/");
|
|
1970
|
+
if (!t || t === "/") return ".";
|
|
1971
|
+
let n = [];
|
|
1972
|
+
for (let e of t.split("/")) {
|
|
1973
|
+
let t = e.trim();
|
|
1974
|
+
if (!(!t || t === ".")) {
|
|
1975
|
+
if (t === "..") {
|
|
1976
|
+
n.length > 0 && n.pop();
|
|
1977
|
+
continue;
|
|
1978
|
+
}
|
|
1979
|
+
n.push(t);
|
|
1980
|
+
}
|
|
1981
|
+
}
|
|
1982
|
+
return n.length > 0 ? n.join("/") : ".";
|
|
1983
|
+
}
|
|
1984
|
+
function In(e) {
|
|
1985
|
+
let t = $(e);
|
|
1986
|
+
return t === "." ? "" : t.split("/").filter(Boolean).map((e) => encodeURIComponent(e)).join("/");
|
|
1987
|
+
}
|
|
1988
|
+
function Ln(e) {
|
|
1989
|
+
let t = In(e);
|
|
1990
|
+
return t ? `${An}/${t}` : An;
|
|
1991
|
+
}
|
|
1992
|
+
function Rn(e) {
|
|
1993
|
+
let t = $(e);
|
|
1994
|
+
if (t === "." || !t.includes("/")) return `${An}/`;
|
|
1995
|
+
let n = In(t.substring(0, t.lastIndexOf("/")));
|
|
1996
|
+
return n ? `${An}/${n}/` : `${An}/`;
|
|
1997
|
+
}
|
|
1998
|
+
function zn(e) {
|
|
1999
|
+
return $(e) === ".";
|
|
2000
|
+
}
|
|
2001
|
+
function Bn(e) {
|
|
2002
|
+
let t = $(e);
|
|
2003
|
+
return t === "." ? "/" : `/${t}`;
|
|
2004
|
+
}
|
|
2005
|
+
function Vn(e) {
|
|
2006
|
+
let t = String(e || "").split("/").pop() || "", n = t.lastIndexOf(".");
|
|
2007
|
+
return n >= 0 ? t.slice(n).toLowerCase() : "";
|
|
2008
|
+
}
|
|
2009
|
+
function Hn(e) {
|
|
2010
|
+
return String(e || "").split(";")[0].trim().toLowerCase();
|
|
2011
|
+
}
|
|
2012
|
+
var Un = new Set([".html", ".htm"]);
|
|
2013
|
+
function Wn({ path: e, mimeType: t }) {
|
|
2014
|
+
let n = Vn(e), r = Hn(t);
|
|
2015
|
+
return r === "text/html" || Un.has(n) ? "html" : r === "text/markdown" || jn.has(n) ? "markdown" : r === "application/pdf" || Mn.has(n) ? "pdf" : r.startsWith("image/") || Nn.has(n) ? "image" : r.startsWith("text/") || Fn.has(r) || Pn.has(n) ? "text" : "unsupported";
|
|
2016
|
+
}
|
|
2017
|
+
var Gn = new Set([
|
|
2018
|
+
".txt",
|
|
2019
|
+
".log",
|
|
2020
|
+
".csv",
|
|
2021
|
+
".tsv",
|
|
2022
|
+
".env",
|
|
2023
|
+
".ini",
|
|
2024
|
+
".conf",
|
|
2025
|
+
".lock"
|
|
2026
|
+
]);
|
|
2027
|
+
function Kn({ path: e, mimeType: t }) {
|
|
2028
|
+
let n = Vn(e), r = Hn(t);
|
|
2029
|
+
return Un.has(n) || r === "text/html" ? "html" : r === "text/markdown" || jn.has(n) ? "markdown" : r === "application/pdf" || Mn.has(n) || r.startsWith("image/") || Nn.has(n) ? null : Gn.has(n) || r === "text/plain" ? "text" : r.startsWith("text/") || Fn.has(r) || Pn.has(n) ? "code" : null;
|
|
2030
|
+
}
|
|
2031
|
+
function qn({ isMobile: e }) {
|
|
2032
|
+
return e ? {
|
|
2033
|
+
renderMode: "sheet",
|
|
2034
|
+
modal: !0,
|
|
2035
|
+
showOverlay: !0,
|
|
2036
|
+
preventOutsideClose: !1,
|
|
2037
|
+
side: "bottom"
|
|
2038
|
+
} : {
|
|
2039
|
+
renderMode: "inline",
|
|
2040
|
+
modal: !1,
|
|
2041
|
+
showOverlay: !1,
|
|
2042
|
+
preventOutsideClose: !0,
|
|
2043
|
+
side: "right"
|
|
2044
|
+
};
|
|
2045
|
+
}
|
|
2046
|
+
function Jn() {
|
|
2047
|
+
let e = 0;
|
|
2048
|
+
return {
|
|
2049
|
+
next(t) {
|
|
2050
|
+
return e += 1, {
|
|
2051
|
+
path: t,
|
|
2052
|
+
version: e
|
|
2053
|
+
};
|
|
2054
|
+
},
|
|
2055
|
+
invalidate() {
|
|
2056
|
+
e += 1;
|
|
2057
|
+
},
|
|
2058
|
+
isCurrent(t) {
|
|
2059
|
+
return !!t && t.version === e;
|
|
2060
|
+
}
|
|
2061
|
+
};
|
|
2062
|
+
}
|
|
2063
|
+
function Yn({ workspaceFiles: e, accessMode: t }) {
|
|
2064
|
+
if (!e?.Enabled) return !1;
|
|
2065
|
+
let n = String(t || "").trim().toLowerCase();
|
|
2066
|
+
return n === "owner" || n === "private";
|
|
2067
|
+
}
|
|
2068
|
+
//#endregion
|
|
2069
|
+
//#region src/components/workspace/HtmlPreview.tsx
|
|
2070
|
+
function Xn({ content: e, path: t, onSave: n, onDirtyChange: r, getContentRef: a, isMobile: o }) {
|
|
2071
|
+
let l = R(null), u = de(), [d, f] = z("preview"), p = Rn(t), m = Ln(t), h = I(() => On(e, {
|
|
2072
|
+
basePath: p,
|
|
2073
|
+
channelId: u
|
|
2074
|
+
}), [
|
|
2075
|
+
e,
|
|
2076
|
+
p,
|
|
2077
|
+
u
|
|
2078
|
+
]), [g, ee] = z(h());
|
|
2079
|
+
L(() => {
|
|
2080
|
+
let e = setTimeout(() => {
|
|
2081
|
+
ee(h());
|
|
2082
|
+
}, 300);
|
|
2083
|
+
return () => clearTimeout(e);
|
|
2084
|
+
}, [h]), kn(l, u);
|
|
2085
|
+
let _ = I(() => {
|
|
2086
|
+
let e = new Blob([g], { type: "text/html;charset=utf-8" }), t = URL.createObjectURL(e), n = window.open(t, "_blank", "noopener,noreferrer");
|
|
2087
|
+
window.setTimeout(() => URL.revokeObjectURL(t), 3e4), n || window.open(m, "_blank", "noopener,noreferrer");
|
|
2088
|
+
}, [m, g]);
|
|
2089
|
+
return o ? /* @__PURE__ */ j("div", {
|
|
2090
|
+
className: "flex h-full flex-col",
|
|
2091
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2092
|
+
className: "flex items-center gap-1 border-b border-slate-200 px-2 py-1.5 dark:border-slate-700",
|
|
2093
|
+
children: [/* @__PURE__ */ j("button", {
|
|
2094
|
+
onClick: () => f("editor"),
|
|
2095
|
+
className: J("flex items-center gap-1.5 rounded-md px-3 py-1 text-xs font-medium transition-colors", d === "editor" ? "bg-slate-100 text-slate-900 dark:bg-slate-700 dark:text-slate-100" : "text-slate-500 hover:bg-slate-50 dark:text-slate-400 dark:hover:bg-slate-800"),
|
|
2096
|
+
children: [/* @__PURE__ */ A(i, { className: "h-3.5 w-3.5" }), "编辑"]
|
|
2097
|
+
}), /* @__PURE__ */ j("button", {
|
|
2098
|
+
onClick: () => f("preview"),
|
|
2099
|
+
className: J("flex items-center gap-1.5 rounded-md px-3 py-1 text-xs font-medium transition-colors", d === "preview" ? "bg-slate-100 text-slate-900 dark:bg-slate-700 dark:text-slate-100" : "text-slate-500 hover:bg-slate-50 dark:text-slate-400 dark:hover:bg-slate-800"),
|
|
2100
|
+
children: [/* @__PURE__ */ A(c, { className: "h-3.5 w-3.5" }), "预览"]
|
|
2101
|
+
})]
|
|
2102
|
+
}), d === "editor" ? /* @__PURE__ */ A(Q, {
|
|
2103
|
+
content: e,
|
|
2104
|
+
path: t,
|
|
2105
|
+
onSave: n,
|
|
2106
|
+
onDirtyChange: r,
|
|
2107
|
+
getContentRef: a
|
|
2108
|
+
}) : /* @__PURE__ */ A("iframe", {
|
|
2109
|
+
ref: l,
|
|
2110
|
+
srcDoc: g,
|
|
2111
|
+
sandbox: "allow-scripts allow-downloads allow-same-origin",
|
|
2112
|
+
title: "HTML 预览",
|
|
2113
|
+
className: "h-full w-full border-0 bg-white"
|
|
2114
|
+
})]
|
|
2115
|
+
}) : d === "editor" ? /* @__PURE__ */ j("div", {
|
|
2116
|
+
className: "relative flex h-full flex-col",
|
|
2117
|
+
children: [/* @__PURE__ */ A(Q, {
|
|
2118
|
+
content: e,
|
|
2119
|
+
path: t,
|
|
2120
|
+
onSave: n,
|
|
2121
|
+
onDirtyChange: r,
|
|
2122
|
+
getContentRef: a
|
|
2123
|
+
}), /* @__PURE__ */ j("button", {
|
|
2124
|
+
onClick: () => f("preview"),
|
|
2125
|
+
className: "absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white/90 px-2.5 py-1.5 text-xs font-medium text-slate-600 shadow-sm backdrop-blur-sm transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800/90 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
2126
|
+
children: [/* @__PURE__ */ A(c, { className: "h-3.5 w-3.5" }), "预览"]
|
|
2127
|
+
})]
|
|
2128
|
+
}) : /* @__PURE__ */ j("div", {
|
|
2129
|
+
className: "relative flex h-full flex-col",
|
|
2130
|
+
children: [/* @__PURE__ */ A("iframe", {
|
|
2131
|
+
ref: l,
|
|
2132
|
+
srcDoc: g,
|
|
2133
|
+
sandbox: "allow-scripts allow-downloads allow-same-origin",
|
|
2134
|
+
title: "HTML 预览",
|
|
2135
|
+
className: "h-full w-full border-0 bg-white"
|
|
2136
|
+
}), /* @__PURE__ */ j("div", {
|
|
2137
|
+
className: "absolute right-3 top-3 z-10 flex gap-1.5",
|
|
2138
|
+
children: [/* @__PURE__ */ j("button", {
|
|
2139
|
+
onClick: _,
|
|
2140
|
+
className: "inline-flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white/90 px-2.5 py-1.5 text-xs font-medium text-slate-600 shadow-sm backdrop-blur-sm transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800/90 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
2141
|
+
title: "在新窗口中打开当前预览",
|
|
2142
|
+
children: [/* @__PURE__ */ A(s, { className: "h-3.5 w-3.5" }), "新窗口"]
|
|
2143
|
+
}), /* @__PURE__ */ j("button", {
|
|
2144
|
+
onClick: () => f("editor"),
|
|
2145
|
+
className: "inline-flex items-center gap-1.5 rounded-lg border border-slate-200 bg-white/90 px-2.5 py-1.5 text-xs font-medium text-slate-600 shadow-sm backdrop-blur-sm transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800/90 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
2146
|
+
children: [/* @__PURE__ */ A(i, { className: "h-3.5 w-3.5" }), "编辑"]
|
|
2147
|
+
})]
|
|
2148
|
+
})]
|
|
2149
|
+
});
|
|
2150
|
+
}
|
|
2151
|
+
//#endregion
|
|
2152
|
+
//#region src/components/workspace/MarkdownPreview.tsx
|
|
2153
|
+
function Zn(e) {
|
|
2154
|
+
e.current && clearTimeout(e.current);
|
|
2155
|
+
}
|
|
2156
|
+
function Qn({ content: e, path: t, onSave: n, onDirtyChange: r, getContentRef: a, isMobile: o }) {
|
|
2157
|
+
let [s, l] = z("editor"), [u, d] = z(e), f = R(null);
|
|
2158
|
+
return L(() => (Zn(f), f.current = setTimeout(() => d(e), 300), () => Zn(f)), [e]), o ? /* @__PURE__ */ j("div", {
|
|
2159
|
+
className: "flex h-full flex-col",
|
|
2160
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2161
|
+
className: "flex items-center gap-1 border-b border-slate-200/30 px-2 py-1.5 dark:border-slate-700/30",
|
|
2162
|
+
children: [/* @__PURE__ */ j("button", {
|
|
2163
|
+
onClick: () => l("editor"),
|
|
2164
|
+
className: J("flex items-center gap-1.5 rounded-md px-3 py-1 text-xs font-medium transition-colors", s === "editor" ? "bg-slate-100 text-slate-900 dark:bg-slate-700 dark:text-slate-100" : "text-slate-500 hover:bg-slate-50 dark:text-slate-400 dark:hover:bg-slate-800"),
|
|
2165
|
+
children: [/* @__PURE__ */ A(i, { className: "h-3.5 w-3.5" }), "编辑"]
|
|
2166
|
+
}), /* @__PURE__ */ j("button", {
|
|
2167
|
+
onClick: () => l("preview"),
|
|
2168
|
+
className: J("flex items-center gap-1.5 rounded-md px-3 py-1 text-xs font-medium transition-colors", s === "preview" ? "bg-slate-100 text-slate-900 dark:bg-slate-700 dark:text-slate-100" : "text-slate-500 hover:bg-slate-50 dark:text-slate-400 dark:hover:bg-slate-800"),
|
|
2169
|
+
children: [/* @__PURE__ */ A(c, { className: "h-3.5 w-3.5" }), "预览"]
|
|
2170
|
+
})]
|
|
2171
|
+
}), s === "editor" ? /* @__PURE__ */ A(Q, {
|
|
2172
|
+
content: e,
|
|
2173
|
+
path: t,
|
|
2174
|
+
onSave: n,
|
|
2175
|
+
onDirtyChange: r,
|
|
2176
|
+
getContentRef: a
|
|
2177
|
+
}) : /* @__PURE__ */ A("div", {
|
|
2178
|
+
className: "flex-1 overflow-auto p-4",
|
|
2179
|
+
children: /* @__PURE__ */ A(X, { content: u })
|
|
2180
|
+
})]
|
|
2181
|
+
}) : s === "editor" ? /* @__PURE__ */ j("div", {
|
|
2182
|
+
className: "relative flex h-full flex-col",
|
|
2183
|
+
children: [/* @__PURE__ */ A(Q, {
|
|
2184
|
+
content: e,
|
|
2185
|
+
path: t,
|
|
2186
|
+
onSave: n,
|
|
2187
|
+
onDirtyChange: r,
|
|
2188
|
+
getContentRef: a
|
|
2189
|
+
}), /* @__PURE__ */ j("button", {
|
|
2190
|
+
onClick: () => l("preview"),
|
|
2191
|
+
className: "absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 rounded-lg border border-slate-200/30 bg-white/90 px-2.5 py-1.5 text-xs font-medium text-slate-600 shadow-sm backdrop-blur-sm transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800/90 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
2192
|
+
children: [/* @__PURE__ */ A(c, { className: "h-3.5 w-3.5" }), "预览"]
|
|
2193
|
+
})]
|
|
2194
|
+
}) : /* @__PURE__ */ j("div", {
|
|
2195
|
+
className: "relative flex h-full flex-col",
|
|
2196
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2197
|
+
className: "flex-1 overflow-auto p-4",
|
|
2198
|
+
children: /* @__PURE__ */ A(X, { content: u })
|
|
2199
|
+
}), /* @__PURE__ */ j("button", {
|
|
2200
|
+
onClick: () => l("editor"),
|
|
2201
|
+
className: "absolute right-3 top-3 z-10 inline-flex items-center gap-1.5 rounded-lg border border-slate-200/30 bg-white/90 px-2.5 py-1.5 text-xs font-medium text-slate-600 shadow-sm backdrop-blur-sm transition hover:bg-slate-50 dark:border-slate-700 dark:bg-slate-800/90 dark:text-slate-300 dark:hover:bg-slate-700",
|
|
2202
|
+
children: [/* @__PURE__ */ A(i, { className: "h-3.5 w-3.5" }), "编辑"]
|
|
2203
|
+
})]
|
|
2204
|
+
});
|
|
2205
|
+
}
|
|
2206
|
+
//#endregion
|
|
2207
|
+
//#region src/components/workspace/WorkspacePanel.tsx
|
|
2208
|
+
var $n = "/agentengine/api/v1/GetWorkspaceFileContent", er = 4e3;
|
|
2209
|
+
function tr(e) {
|
|
2210
|
+
let t = $(e);
|
|
2211
|
+
if (!t || t === ".") return ".";
|
|
2212
|
+
let n = t.split("/").filter(Boolean);
|
|
2213
|
+
return n.length <= 1 ? "." : n.slice(0, -1).join("/");
|
|
2214
|
+
}
|
|
2215
|
+
function nr(e) {
|
|
2216
|
+
if (!e) return "";
|
|
2217
|
+
let t = Date.parse(e);
|
|
2218
|
+
return Number.isNaN(t) ? e : new Date(t).toLocaleString();
|
|
2219
|
+
}
|
|
2220
|
+
function rr(e) {
|
|
2221
|
+
let t = Number(e);
|
|
2222
|
+
return !Number.isFinite(t) || t <= 0 ? "0 B" : t < 1024 ? `${t} B` : t < 1024 * 1024 ? `${(t / 1024).toFixed(1)} KB` : t < 1024 * 1024 * 1024 ? `${(t / (1024 * 1024)).toFixed(1)} MB` : `${(t / (1024 * 1024 * 1024)).toFixed(1)} GB`;
|
|
2223
|
+
}
|
|
2224
|
+
var ir = [
|
|
2225
|
+
{
|
|
2226
|
+
label: "Markdown",
|
|
2227
|
+
detail: ".md .markdown .mdx"
|
|
2228
|
+
},
|
|
2229
|
+
{
|
|
2230
|
+
label: "代码/文本",
|
|
2231
|
+
detail: ".py .js .ts .tsx .json .yaml .log .txt"
|
|
2232
|
+
},
|
|
2233
|
+
{
|
|
2234
|
+
label: "图片",
|
|
2235
|
+
detail: "PNG JPG GIF WebP SVG"
|
|
2236
|
+
},
|
|
2237
|
+
{
|
|
2238
|
+
label: "PDF",
|
|
2239
|
+
detail: ".pdf"
|
|
2240
|
+
},
|
|
2241
|
+
{
|
|
2242
|
+
label: "表格文本",
|
|
2243
|
+
detail: "CSV TSV"
|
|
2244
|
+
}
|
|
2245
|
+
];
|
|
2246
|
+
function ar(e) {
|
|
2247
|
+
return Ln(e);
|
|
2248
|
+
}
|
|
2249
|
+
function or({ label: e, showSupportedTypes: t = !1 }) {
|
|
2250
|
+
return /* @__PURE__ */ A("div", {
|
|
2251
|
+
className: "flex h-full min-h-[16rem] flex-col items-center justify-center px-6 text-center",
|
|
2252
|
+
children: /* @__PURE__ */ j("div", {
|
|
2253
|
+
className: "w-full max-w-md rounded-2xl border border-dashed border-slate-300 bg-slate-50 px-5 py-5 text-slate-500 dark:border-slate-700 dark:bg-slate-900 dark:text-slate-400",
|
|
2254
|
+
children: [/* @__PURE__ */ A("div", { children: e }), t ? /* @__PURE__ */ j("div", {
|
|
2255
|
+
className: "mt-4 text-left",
|
|
2256
|
+
children: [
|
|
2257
|
+
/* @__PURE__ */ A("div", {
|
|
2258
|
+
className: "text-xs font-semibold uppercase tracking-[0.12em] text-slate-400",
|
|
2259
|
+
children: "支持在线预览"
|
|
2260
|
+
}),
|
|
2261
|
+
/* @__PURE__ */ A("div", {
|
|
2262
|
+
className: "mt-2 grid gap-2",
|
|
2263
|
+
children: ir.map((e) => /* @__PURE__ */ j("div", {
|
|
2264
|
+
className: "rounded-xl border border-slate-200 bg-white px-3 py-2 dark:border-slate-800 dark:bg-slate-950",
|
|
2265
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2266
|
+
className: "text-sm font-medium text-slate-700 dark:text-slate-200",
|
|
2267
|
+
children: e.label
|
|
2268
|
+
}), /* @__PURE__ */ A("div", {
|
|
2269
|
+
className: "mt-0.5 font-mono text-[11px] text-slate-400",
|
|
2270
|
+
children: e.detail
|
|
2271
|
+
})]
|
|
2272
|
+
}, e.label))
|
|
2273
|
+
}),
|
|
2274
|
+
/* @__PURE__ */ A("div", {
|
|
2275
|
+
className: "mt-3 text-xs leading-5 text-slate-400",
|
|
2276
|
+
children: "Word、Excel、PPT 当前不支持在线预览,可下载后查看。"
|
|
2277
|
+
})
|
|
2278
|
+
]
|
|
2279
|
+
}) : null]
|
|
2280
|
+
})
|
|
2281
|
+
});
|
|
2282
|
+
}
|
|
2283
|
+
function sr({ agentId: t, capability: n, open: r, onClose: i, isFullscreen: a = !1, onToggleFullscreen: s, isMobile: c = !1, api: m }) {
|
|
2284
|
+
let g = R(null), _ = R(null), [y, te] = z(!1), [b, ne] = z("."), [x, ie] = z([]), [C, w] = z(!1), [T, E] = z(!1), [ae, oe] = z(!1), [ue, D] = z(""), [O, k] = z(null), [M, N] = z(null), [P, F] = z(!1), [de, B] = z(!1), pe = R(null), V = R(null), H = R("selection"), U = R(Jn()), W = fe(() => x.find((e) => e.Path === O) ?? null, [x, O]), G = fe(() => W ? Kn({
|
|
2285
|
+
path: W.Path,
|
|
2286
|
+
mimeType: W.MimeType
|
|
2287
|
+
}) : null, [W]), me = I(() => P ? window.confirm("当前文件有未保存的更改,确定要离开吗?") : !0, [P]), he = n.ContentPath || $n, ge = n.RootLabel || "Workspace", _e = ge ? `${ge.charAt(0).toUpperCase()}${ge.slice(1)}` : "Workspace", ve = Bn(b), K = I(() => {
|
|
2288
|
+
_.current &&= (URL.revokeObjectURL(_.current), null);
|
|
2289
|
+
}, []);
|
|
2290
|
+
L(() => () => K(), [K]);
|
|
2291
|
+
let q = I(async (e, n = {}) => {
|
|
2292
|
+
let r = !!n.background;
|
|
2293
|
+
r ? E(!0) : w(!0), r || D("");
|
|
2294
|
+
try {
|
|
2295
|
+
let n = await m.listWorkspaceFiles(t, e, !1), i = $(String(n?.Path || e || ".")), a = Array.isArray(n?.Entries) ? n.Entries : [];
|
|
2296
|
+
ne(i), ie(a), H.current = r ? "background-refresh" : "selection", k((e) => {
|
|
2297
|
+
if (e) {
|
|
2298
|
+
let t = a.find((t) => t.Path === e);
|
|
2299
|
+
if (t && t.Type === "file") return e;
|
|
2300
|
+
}
|
|
2301
|
+
return a.find((e) => e.Type === "file")?.Path ?? null;
|
|
2302
|
+
});
|
|
2303
|
+
} catch (e) {
|
|
2304
|
+
console.error("Failed to load workspace entries:", e), r || D(e instanceof Error ? e.message : String(e));
|
|
2305
|
+
} finally {
|
|
2306
|
+
r ? E(!1) : w(!1);
|
|
2307
|
+
}
|
|
2308
|
+
}, [t, m]);
|
|
2309
|
+
L(() => {
|
|
2310
|
+
!r || y || (te(!0), q("."));
|
|
2311
|
+
}, [
|
|
2312
|
+
y,
|
|
2313
|
+
q,
|
|
2314
|
+
r
|
|
2315
|
+
]), L(() => {
|
|
2316
|
+
if (!r || P || !y) return;
|
|
2317
|
+
let e = window.setInterval(() => {
|
|
2318
|
+
q(b, { background: !0 });
|
|
2319
|
+
}, er);
|
|
2320
|
+
return () => window.clearInterval(e);
|
|
2321
|
+
}, [
|
|
2322
|
+
b,
|
|
2323
|
+
P,
|
|
2324
|
+
y,
|
|
2325
|
+
q,
|
|
2326
|
+
r
|
|
2327
|
+
]);
|
|
2328
|
+
let ye = I(async (e) => {
|
|
2329
|
+
let n = U.current.next(e.Path), r = Wn({
|
|
2330
|
+
path: e.Path,
|
|
2331
|
+
mimeType: e.MimeType
|
|
2332
|
+
});
|
|
2333
|
+
if (V.current = e.Path, r === "unsupported") {
|
|
2334
|
+
K(), N({
|
|
2335
|
+
path: e.Path,
|
|
2336
|
+
kind: r,
|
|
2337
|
+
status: "ready",
|
|
2338
|
+
mimeType: e.MimeType ?? void 0
|
|
2339
|
+
});
|
|
2340
|
+
return;
|
|
2341
|
+
}
|
|
2342
|
+
K(), N({
|
|
2343
|
+
path: e.Path,
|
|
2344
|
+
kind: r,
|
|
2345
|
+
status: "loading",
|
|
2346
|
+
mimeType: e.MimeType ?? void 0
|
|
2347
|
+
});
|
|
2348
|
+
try {
|
|
2349
|
+
let r = await m.getWorkspaceFileContent(t, e.Path, { asText: !1 });
|
|
2350
|
+
if (!U.current.isCurrent(n)) return;
|
|
2351
|
+
if (r instanceof Blob) {
|
|
2352
|
+
let t = e.MimeType || "", i = Wn({
|
|
2353
|
+
path: e.Path,
|
|
2354
|
+
mimeType: t
|
|
2355
|
+
});
|
|
2356
|
+
if (i === "image" || i === "pdf") {
|
|
2357
|
+
let n = URL.createObjectURL(r);
|
|
2358
|
+
_.current = n, N({
|
|
2359
|
+
path: e.Path,
|
|
2360
|
+
kind: i,
|
|
2361
|
+
status: "ready",
|
|
2362
|
+
mimeType: t,
|
|
2363
|
+
objectUrl: n
|
|
2364
|
+
});
|
|
2365
|
+
return;
|
|
2366
|
+
}
|
|
2367
|
+
let a = await r.text();
|
|
2368
|
+
if (!U.current.isCurrent(n)) return;
|
|
2369
|
+
let o = Wn({
|
|
2370
|
+
path: e.Path,
|
|
2371
|
+
mimeType: t
|
|
2372
|
+
});
|
|
2373
|
+
N({
|
|
2374
|
+
path: e.Path,
|
|
2375
|
+
kind: o,
|
|
2376
|
+
status: "ready",
|
|
2377
|
+
mimeType: t,
|
|
2378
|
+
content: a
|
|
2379
|
+
});
|
|
2380
|
+
} else {
|
|
2381
|
+
let t = e.MimeType || "", n = Wn({
|
|
2382
|
+
path: e.Path,
|
|
2383
|
+
mimeType: t
|
|
2384
|
+
});
|
|
2385
|
+
N({
|
|
2386
|
+
path: e.Path,
|
|
2387
|
+
kind: n,
|
|
2388
|
+
status: "ready",
|
|
2389
|
+
mimeType: t,
|
|
2390
|
+
content: r
|
|
2391
|
+
});
|
|
2392
|
+
}
|
|
2393
|
+
} catch (t) {
|
|
2394
|
+
if (!U.current.isCurrent(n)) return;
|
|
2395
|
+
console.error("Failed to preview workspace file:", t), N({
|
|
2396
|
+
path: e.Path,
|
|
2397
|
+
kind: r,
|
|
2398
|
+
status: "error",
|
|
2399
|
+
mimeType: e.MimeType ?? void 0,
|
|
2400
|
+
error: t instanceof Error ? t.message : String(t)
|
|
2401
|
+
});
|
|
2402
|
+
}
|
|
2403
|
+
}, [
|
|
2404
|
+
t,
|
|
2405
|
+
m,
|
|
2406
|
+
K
|
|
2407
|
+
]);
|
|
2408
|
+
L(() => {
|
|
2409
|
+
if (!W || W.Type !== "file") {
|
|
2410
|
+
K(), N(null), F(!1), V.current = null;
|
|
2411
|
+
return;
|
|
2412
|
+
}
|
|
2413
|
+
if (H.current === "background-refresh" && V.current === W.Path) {
|
|
2414
|
+
H.current = "selection";
|
|
2415
|
+
return;
|
|
2416
|
+
}
|
|
2417
|
+
H.current = "selection", ye(W);
|
|
2418
|
+
}, [
|
|
2419
|
+
K,
|
|
2420
|
+
ye,
|
|
2421
|
+
W
|
|
2422
|
+
]);
|
|
2423
|
+
let be = async (e) => {
|
|
2424
|
+
if (!(!e || e.length === 0)) {
|
|
2425
|
+
oe(!0), D("");
|
|
2426
|
+
try {
|
|
2427
|
+
for (let r of Array.from(e)) {
|
|
2428
|
+
if (r.size > n.MaxUploadBytes) throw Error(`文件 ${r.name} 超过上传上限`);
|
|
2429
|
+
let e = zn(b) ? r.name : `${b}/${r.name}`, i = new FormData();
|
|
2430
|
+
i.append("file", r), i.append("AgentId", t), i.append("Path", e), await m.addWorkspaceFile(i);
|
|
2431
|
+
}
|
|
2432
|
+
await q(b);
|
|
2433
|
+
} catch (e) {
|
|
2434
|
+
console.error("Failed to upload workspace files:", e), D(e instanceof Error ? e.message : String(e));
|
|
2435
|
+
} finally {
|
|
2436
|
+
g.current && (g.current.value = ""), oe(!1);
|
|
2437
|
+
}
|
|
2438
|
+
}
|
|
2439
|
+
}, xe = async (e) => {
|
|
2440
|
+
if (!n.SupportsDelete) return;
|
|
2441
|
+
let r = $(e.Path);
|
|
2442
|
+
if (window.confirm(`删除 ${r} ?`)) {
|
|
2443
|
+
D("");
|
|
2444
|
+
try {
|
|
2445
|
+
await m.deleteWorkspaceFile(t, r), O && $(O) === r && (k(null), F(!1)), await q(e.Type === "directory" && ($(b) === r || $(b).startsWith(`${r}/`)) ? tr(r) : b);
|
|
2446
|
+
} catch (e) {
|
|
2447
|
+
console.error("Failed to delete workspace file:", e), D(e instanceof Error ? e.message : String(e));
|
|
2448
|
+
}
|
|
2449
|
+
}
|
|
2450
|
+
}, Se = () => !W || W.Type !== "file" ? /* @__PURE__ */ A(or, {
|
|
2451
|
+
label: "从左侧选择文件后在这里查看内容预览。",
|
|
2452
|
+
showSupportedTypes: !0
|
|
2453
|
+
}) : !M || M.path !== W.Path || M.status === "loading" ? /* @__PURE__ */ A("div", {
|
|
2454
|
+
className: "flex h-full min-h-[16rem] items-center justify-center",
|
|
2455
|
+
children: /* @__PURE__ */ j("div", {
|
|
2456
|
+
className: "inline-flex items-center gap-2 rounded-full border border-slate-200 bg-white px-4 py-2 text-sm text-slate-500 shadow-sm dark:border-slate-800 dark:bg-slate-900 dark:text-slate-400",
|
|
2457
|
+
children: [/* @__PURE__ */ A(p, { className: "h-4 w-4 animate-spin" }), "正在加载预览..."]
|
|
2458
|
+
})
|
|
2459
|
+
}) : M.status === "error" ? /* @__PURE__ */ A(or, { label: M.error || "文件预览加载失败。" }) : M.kind === "markdown" ? /* @__PURE__ */ A(Qn, {
|
|
2460
|
+
content: M.content || "",
|
|
2461
|
+
path: W.Path,
|
|
2462
|
+
onSave: Ce,
|
|
2463
|
+
onDirtyChange: F,
|
|
2464
|
+
getContentRef: pe,
|
|
2465
|
+
isMobile: c
|
|
2466
|
+
}) : M.kind === "image" && M.objectUrl ? /* @__PURE__ */ A(Sn, {
|
|
2467
|
+
content: null,
|
|
2468
|
+
objectUrl: M.objectUrl,
|
|
2469
|
+
kind: "image",
|
|
2470
|
+
filename: W.Name,
|
|
2471
|
+
mimeType: M.mimeType || ""
|
|
2472
|
+
}) : M.kind === "pdf" && M.objectUrl ? /* @__PURE__ */ A(Sn, {
|
|
2473
|
+
content: null,
|
|
2474
|
+
objectUrl: M.objectUrl,
|
|
2475
|
+
kind: "pdf",
|
|
2476
|
+
filename: W.Name,
|
|
2477
|
+
mimeType: M.mimeType || ""
|
|
2478
|
+
}) : M.kind === "html" ? /* @__PURE__ */ A(Xn, {
|
|
2479
|
+
content: M.content || "",
|
|
2480
|
+
path: W.Path,
|
|
2481
|
+
onSave: Ce,
|
|
2482
|
+
onDirtyChange: F,
|
|
2483
|
+
getContentRef: pe,
|
|
2484
|
+
isMobile: c,
|
|
2485
|
+
agentId: t,
|
|
2486
|
+
contentPath: he
|
|
2487
|
+
}) : M.kind === "text" || M.kind === "code" ? /* @__PURE__ */ A(Q, {
|
|
2488
|
+
content: M.content || "",
|
|
2489
|
+
path: W.Path,
|
|
2490
|
+
onSave: Ce,
|
|
2491
|
+
onDirtyChange: F,
|
|
2492
|
+
getContentRef: pe
|
|
2493
|
+
}) : /* @__PURE__ */ A(Sn, {
|
|
2494
|
+
content: null,
|
|
2495
|
+
kind: "unsupported",
|
|
2496
|
+
filename: W.Name,
|
|
2497
|
+
mimeType: M.mimeType || ""
|
|
2498
|
+
}), Ce = async (e) => {
|
|
2499
|
+
if (W) {
|
|
2500
|
+
B(!0), D("");
|
|
2501
|
+
try {
|
|
2502
|
+
let n = new Blob([e], { type: W.MimeType || "text/plain" }), r = new FormData();
|
|
2503
|
+
r.append("file", n, W.Name), r.append("AgentId", t), r.append("Path", W.Path), await m.addWorkspaceFile(r), U.current.invalidate(), F(!1), N((t) => t && t.path === W.Path ? {
|
|
2504
|
+
...t,
|
|
2505
|
+
content: e
|
|
2506
|
+
} : t), V.current = W.Path, await q(b, { background: !0 });
|
|
2507
|
+
} catch (e) {
|
|
2508
|
+
console.error("Failed to save workspace file:", e), D(e instanceof Error ? e.message : String(e));
|
|
2509
|
+
} finally {
|
|
2510
|
+
B(!1);
|
|
2511
|
+
}
|
|
2512
|
+
}
|
|
2513
|
+
}, we = W?.Type === "file" && M?.path === W.Path && M.status === "ready" && (M.kind === "text" || M.kind === "code" || M.kind === "html" || M.kind === "markdown"), Te = W?.Type === "file" && M?.path === W.Path && M.status === "ready" && M.kind === "pdf";
|
|
2514
|
+
return /* @__PURE__ */ j("div", {
|
|
2515
|
+
className: "flex h-full min-h-[22rem] w-full min-w-0 flex-col bg-white text-slate-800 dark:bg-slate-950 dark:text-slate-200",
|
|
2516
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2517
|
+
className: "flex h-14 flex-shrink-0 items-center gap-3 border-b border-slate-200/30 px-4 dark:border-slate-800/40",
|
|
2518
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2519
|
+
className: "flex min-w-0 flex-1 items-center gap-3",
|
|
2520
|
+
children: [
|
|
2521
|
+
/* @__PURE__ */ A("div", {
|
|
2522
|
+
className: "truncate text-sm font-semibold text-slate-900 dark:text-slate-100",
|
|
2523
|
+
children: _e
|
|
2524
|
+
}),
|
|
2525
|
+
/* @__PURE__ */ A("div", { className: "hidden h-4 w-px bg-slate-200/70 dark:bg-slate-800 sm:block" }),
|
|
2526
|
+
/* @__PURE__ */ j("div", {
|
|
2527
|
+
className: "flex min-w-0 items-center gap-2",
|
|
2528
|
+
children: [/* @__PURE__ */ A("span", {
|
|
2529
|
+
className: "flex-shrink-0 text-xs text-slate-400",
|
|
2530
|
+
children: "当前目录"
|
|
2531
|
+
}), /* @__PURE__ */ A("div", {
|
|
2532
|
+
className: "custom-scrollbar max-w-[min(42vw,34rem)] overflow-x-auto whitespace-nowrap rounded-md bg-slate-50 px-2 py-1 font-mono text-[11px] text-slate-600 dark:bg-slate-900 dark:text-slate-300",
|
|
2533
|
+
title: `${ve},来自 ListWorkspaceFiles 返回的 Data.Path 字段`,
|
|
2534
|
+
children: ve
|
|
2535
|
+
})]
|
|
2536
|
+
}),
|
|
2537
|
+
/* @__PURE__ */ A("div", {
|
|
2538
|
+
className: "hidden truncate text-[11px] text-slate-400 xl:block",
|
|
2539
|
+
children: "工作区内相对路径,不是宿主机绝对路径。"
|
|
2540
|
+
})
|
|
2541
|
+
]
|
|
2542
|
+
}), /* @__PURE__ */ j("div", {
|
|
2543
|
+
className: "flex flex-shrink-0 items-center gap-1.5",
|
|
2544
|
+
children: [
|
|
2545
|
+
/* @__PURE__ */ A("input", {
|
|
2546
|
+
ref: g,
|
|
2547
|
+
type: "file",
|
|
2548
|
+
multiple: !0,
|
|
2549
|
+
className: "hidden",
|
|
2550
|
+
onChange: (e) => void be(e.target.files)
|
|
2551
|
+
}),
|
|
2552
|
+
/* @__PURE__ */ j("button", {
|
|
2553
|
+
type: "button",
|
|
2554
|
+
onClick: () => g.current?.click(),
|
|
2555
|
+
disabled: ae,
|
|
2556
|
+
className: "inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-medium text-slate-600 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-50 dark:text-slate-300 dark:hover:bg-slate-900",
|
|
2557
|
+
title: `上传文件,上限 ${Math.floor(n.MaxUploadBytes / (1024 * 1024))}MB`,
|
|
2558
|
+
children: [/* @__PURE__ */ A(ce, { className: "h-3.5 w-3.5" }), ae ? "上传中" : "上传"]
|
|
2559
|
+
}),
|
|
2560
|
+
/* @__PURE__ */ j("button", {
|
|
2561
|
+
type: "button",
|
|
2562
|
+
onClick: () => {
|
|
2563
|
+
let e = new URLSearchParams({ Path: b }).toString();
|
|
2564
|
+
window.open(`/agentengine/api/v1/ExportWorkspaceZip?${e}`, "_blank", "noopener,noreferrer");
|
|
2565
|
+
},
|
|
2566
|
+
className: "inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-medium text-slate-600 transition hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-900",
|
|
2567
|
+
title: "导出当前目录为 ZIP",
|
|
2568
|
+
children: [/* @__PURE__ */ A(v, { className: "h-3.5 w-3.5" }), "导出"]
|
|
2569
|
+
}),
|
|
2570
|
+
s ? /* @__PURE__ */ A("button", {
|
|
2571
|
+
type: "button",
|
|
2572
|
+
onClick: s,
|
|
2573
|
+
className: "rounded-lg p-1.5 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900 dark:text-slate-400 dark:hover:bg-slate-900 dark:hover:text-slate-100",
|
|
2574
|
+
"aria-label": a ? "退出全屏" : "全屏查看 Workspace",
|
|
2575
|
+
title: a ? "退出全屏" : "全屏查看",
|
|
2576
|
+
children: A(a ? ee : h, { className: "h-4 w-4" })
|
|
2577
|
+
}) : null,
|
|
2578
|
+
i ? /* @__PURE__ */ A("button", {
|
|
2579
|
+
type: "button",
|
|
2580
|
+
onClick: () => {
|
|
2581
|
+
me() && i?.();
|
|
2582
|
+
},
|
|
2583
|
+
className: "rounded-lg p-1.5 text-slate-500 transition hover:bg-slate-100 hover:text-slate-900 dark:text-slate-400 dark:hover:bg-slate-900 dark:hover:text-slate-100",
|
|
2584
|
+
"aria-label": "关闭 Workspace",
|
|
2585
|
+
title: "关闭",
|
|
2586
|
+
children: /* @__PURE__ */ A(le, { className: "h-4 w-4" })
|
|
2587
|
+
}) : null
|
|
2588
|
+
]
|
|
2589
|
+
})]
|
|
2590
|
+
}), /* @__PURE__ */ j("div", {
|
|
2591
|
+
className: "flex min-h-0 flex-1 flex-col md:flex-row",
|
|
2592
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2593
|
+
className: "flex w-full flex-col border-b border-slate-200/30 dark:border-slate-800/40 md:w-[13.5rem] md:border-b-0 md:border-r",
|
|
2594
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2595
|
+
className: "flex h-14 flex-shrink-0 items-center border-b border-slate-200/30 px-3 dark:border-slate-800/40",
|
|
2596
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2597
|
+
className: "flex items-center justify-between gap-2",
|
|
2598
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2599
|
+
className: "min-w-0",
|
|
2600
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2601
|
+
className: "text-xs font-medium text-slate-900 dark:text-slate-100",
|
|
2602
|
+
children: "文件"
|
|
2603
|
+
}), /* @__PURE__ */ j("div", {
|
|
2604
|
+
className: "flex items-center gap-1 text-[11px] text-slate-400",
|
|
2605
|
+
children: [/* @__PURE__ */ j("span", { children: [x.length, " 项"] }), T ? /* @__PURE__ */ A(re, {
|
|
2606
|
+
className: "h-3 w-3 animate-spin",
|
|
2607
|
+
"aria-label": "正在同步 Workspace 目录"
|
|
2608
|
+
}) : null]
|
|
2609
|
+
})]
|
|
2610
|
+
}), /* @__PURE__ */ j("div", {
|
|
2611
|
+
className: "flex items-center gap-1",
|
|
2612
|
+
children: [/* @__PURE__ */ A("button", {
|
|
2613
|
+
type: "button",
|
|
2614
|
+
onClick: () => {
|
|
2615
|
+
me() && q(tr(b));
|
|
2616
|
+
},
|
|
2617
|
+
disabled: C || zn(b),
|
|
2618
|
+
className: "rounded-md p-1.5 text-slate-500 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-40 dark:text-slate-400 dark:hover:bg-slate-900",
|
|
2619
|
+
title: "返回上级目录",
|
|
2620
|
+
children: /* @__PURE__ */ A(e, { className: "h-4 w-4" })
|
|
2621
|
+
}), /* @__PURE__ */ A("button", {
|
|
2622
|
+
type: "button",
|
|
2623
|
+
onClick: () => {
|
|
2624
|
+
me() && q(b);
|
|
2625
|
+
},
|
|
2626
|
+
disabled: C,
|
|
2627
|
+
className: "rounded-md p-1.5 text-slate-500 transition hover:bg-slate-100 disabled:cursor-not-allowed disabled:opacity-40 dark:text-slate-400 dark:hover:bg-slate-900",
|
|
2628
|
+
title: "刷新目录",
|
|
2629
|
+
children: /* @__PURE__ */ A(re, { className: `h-4 w-4 ${C ? "animate-spin" : ""}` })
|
|
2630
|
+
})]
|
|
2631
|
+
})]
|
|
2632
|
+
}), ue ? /* @__PURE__ */ A("div", {
|
|
2633
|
+
className: "mt-3 rounded-xl border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-600 dark:border-red-900/60 dark:bg-red-950/40 dark:text-red-300",
|
|
2634
|
+
children: ue
|
|
2635
|
+
}) : null]
|
|
2636
|
+
}), /* @__PURE__ */ A("div", {
|
|
2637
|
+
className: "custom-scrollbar min-h-0 flex-1 overflow-y-auto px-2 py-2",
|
|
2638
|
+
children: !y && !r ? /* @__PURE__ */ A("div", {
|
|
2639
|
+
className: "px-3 py-4 text-sm text-slate-400",
|
|
2640
|
+
children: "打开面板后加载 workspace 文件。"
|
|
2641
|
+
}) : C ? /* @__PURE__ */ A("div", {
|
|
2642
|
+
className: "px-3 py-4 text-sm text-slate-400",
|
|
2643
|
+
children: "正在加载目录..."
|
|
2644
|
+
}) : x.length === 0 ? /* @__PURE__ */ A("div", {
|
|
2645
|
+
className: "px-3 py-4 text-sm text-slate-400",
|
|
2646
|
+
children: "当前目录为空。"
|
|
2647
|
+
}) : /* @__PURE__ */ A("div", {
|
|
2648
|
+
className: "space-y-0.5",
|
|
2649
|
+
children: x.map((e) => {
|
|
2650
|
+
let t = Wn({
|
|
2651
|
+
path: e.Path,
|
|
2652
|
+
mimeType: e.MimeType
|
|
2653
|
+
}), r = O === e.Path, i = e.Type === "file" ? ar(e.Path) : "";
|
|
2654
|
+
return /* @__PURE__ */ j("div", {
|
|
2655
|
+
title: e.Path,
|
|
2656
|
+
className: J("group flex items-center gap-1 rounded-lg px-1.5 py-1 transition", r ? "bg-slate-100 text-slate-950 dark:bg-slate-800 dark:text-slate-50" : "text-slate-700 hover:bg-slate-50 dark:text-slate-300 dark:hover:bg-slate-900"),
|
|
2657
|
+
children: [/* @__PURE__ */ j("button", {
|
|
2658
|
+
type: "button",
|
|
2659
|
+
onClick: () => {
|
|
2660
|
+
if (e.Type === "directory") {
|
|
2661
|
+
q(e.Path);
|
|
2662
|
+
return;
|
|
2663
|
+
}
|
|
2664
|
+
O !== e.Path && !me() || k(e.Path);
|
|
2665
|
+
},
|
|
2666
|
+
className: "flex min-w-0 flex-1 items-center gap-2 text-left",
|
|
2667
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2668
|
+
className: J("flex h-5 w-5 flex-shrink-0 items-center justify-center rounded-md", r ? "text-slate-900 dark:text-slate-50" : "text-slate-400 dark:text-slate-500"),
|
|
2669
|
+
children: e.Type === "directory" ? /* @__PURE__ */ A(d, { className: "h-3.5 w-3.5" }) : A(t === "image" ? f : t === "markdown" || t === "text" || t === "html" ? l : u, { className: "h-3.5 w-3.5" })
|
|
2670
|
+
}), /* @__PURE__ */ j("div", {
|
|
2671
|
+
className: "min-w-0 flex-1",
|
|
2672
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2673
|
+
className: "truncate text-[13px] leading-5",
|
|
2674
|
+
children: e.Name
|
|
2675
|
+
}), /* @__PURE__ */ A("div", {
|
|
2676
|
+
className: J("truncate text-[11px] leading-4", r ? "text-slate-500 dark:text-slate-400" : "text-slate-400"),
|
|
2677
|
+
children: e.Type === "directory" ? "目录" : rr(e.SizeBytes)
|
|
2678
|
+
})]
|
|
2679
|
+
})]
|
|
2680
|
+
}), /* @__PURE__ */ j("div", {
|
|
2681
|
+
className: "flex flex-shrink-0 items-center gap-0.5 opacity-0 transition group-hover:opacity-100",
|
|
2682
|
+
children: [e.Type === "file" ? /* @__PURE__ */ A("a", {
|
|
2683
|
+
href: i,
|
|
2684
|
+
download: e.Name,
|
|
2685
|
+
className: J("rounded-md p-1.5 transition", r ? "hover:bg-white dark:hover:bg-slate-700" : "hover:bg-slate-100 dark:hover:bg-slate-800"),
|
|
2686
|
+
title: "下载",
|
|
2687
|
+
children: /* @__PURE__ */ A(o, { className: "h-3.5 w-3.5" })
|
|
2688
|
+
}) : null, n.SupportsDelete ? /* @__PURE__ */ A("button", {
|
|
2689
|
+
type: "button",
|
|
2690
|
+
onClick: () => void xe(e),
|
|
2691
|
+
className: J("rounded-md p-1.5 transition", r ? "hover:bg-white dark:hover:bg-slate-700" : "hover:bg-slate-100 dark:hover:bg-slate-800"),
|
|
2692
|
+
title: "删除",
|
|
2693
|
+
children: /* @__PURE__ */ A(se, { className: "h-3.5 w-3.5" })
|
|
2694
|
+
}) : null]
|
|
2695
|
+
})]
|
|
2696
|
+
}, e.Path);
|
|
2697
|
+
})
|
|
2698
|
+
})
|
|
2699
|
+
})]
|
|
2700
|
+
}), /* @__PURE__ */ j("div", {
|
|
2701
|
+
className: "flex min-h-0 min-w-0 flex-1 flex-col",
|
|
2702
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2703
|
+
className: "flex h-14 flex-shrink-0 items-center border-b border-slate-200/30 px-4 dark:border-slate-800/40",
|
|
2704
|
+
children: W ? /* @__PURE__ */ j("div", {
|
|
2705
|
+
className: "flex w-full items-start justify-between gap-3",
|
|
2706
|
+
children: [/* @__PURE__ */ j("div", {
|
|
2707
|
+
className: "min-w-0",
|
|
2708
|
+
children: [
|
|
2709
|
+
/* @__PURE__ */ A("div", {
|
|
2710
|
+
className: "truncate text-sm font-semibold text-slate-900 dark:text-slate-100",
|
|
2711
|
+
children: W.Name
|
|
2712
|
+
}),
|
|
2713
|
+
/* @__PURE__ */ A("div", {
|
|
2714
|
+
className: "mt-0.5 break-all font-mono text-[11px] text-slate-400",
|
|
2715
|
+
children: W.Path
|
|
2716
|
+
}),
|
|
2717
|
+
/* @__PURE__ */ j("div", {
|
|
2718
|
+
className: "mt-1 text-[11px] text-slate-400",
|
|
2719
|
+
children: [
|
|
2720
|
+
rr(W.SizeBytes),
|
|
2721
|
+
W.MimeType ? ` · ${W.MimeType}` : "",
|
|
2722
|
+
W.ModifiedAt ? ` · ${nr(W.ModifiedAt)}` : ""
|
|
2723
|
+
]
|
|
2724
|
+
})
|
|
2725
|
+
]
|
|
2726
|
+
}), G === "text" || G === "code" || G === "html" || G === "markdown" ? /* @__PURE__ */ j("button", {
|
|
2727
|
+
type: "button",
|
|
2728
|
+
onClick: () => {
|
|
2729
|
+
let e = pe.current;
|
|
2730
|
+
e && Ce(e());
|
|
2731
|
+
},
|
|
2732
|
+
disabled: !P || de,
|
|
2733
|
+
className: J("inline-flex items-center gap-1.5 rounded-lg px-2.5 py-1.5 text-xs font-medium transition", P && !de ? "bg-blue-600 text-white hover:bg-blue-700" : "text-slate-400 dark:text-slate-500 cursor-not-allowed"),
|
|
2734
|
+
children: [/* @__PURE__ */ A(S, { className: "h-3.5 w-3.5" }), de ? "保存中" : P ? "保存" : "已保存"]
|
|
2735
|
+
}) : null]
|
|
2736
|
+
}) : /* @__PURE__ */ j("div", {
|
|
2737
|
+
className: "w-full",
|
|
2738
|
+
children: [/* @__PURE__ */ A("div", {
|
|
2739
|
+
className: "text-sm font-semibold text-slate-900 dark:text-slate-100",
|
|
2740
|
+
children: "文件预览"
|
|
2741
|
+
}), /* @__PURE__ */ A("div", {
|
|
2742
|
+
className: "mt-0.5 text-xs text-slate-500 dark:text-slate-400",
|
|
2743
|
+
children: "选择左侧文件后可在此查看内容。"
|
|
2744
|
+
})]
|
|
2745
|
+
})
|
|
2746
|
+
}), /* @__PURE__ */ A("div", {
|
|
2747
|
+
className: J("custom-scrollbar min-h-0 flex-1", Te || we ? "overflow-hidden p-0" : "overflow-y-auto px-4 py-4"),
|
|
2748
|
+
children: Se()
|
|
2749
|
+
})]
|
|
2750
|
+
})]
|
|
2751
|
+
})]
|
|
2752
|
+
});
|
|
2753
|
+
}
|
|
2754
|
+
//#endregion
|
|
2755
|
+
//#region src/components/workspace/WorkspacePanelContainer.tsx
|
|
2756
|
+
function cr({ agentId: e, capability: t, workspacePanelOpen: n, workspacePanelWidth: r, workspacePanelFullscreen: i, isMobile: a, workspaceEnabled: o, workspaceFiles: s, workspacePanelPresentation: c, closeWorkspacePanel: l, handleWorkspacePanelResizeStart: u, api: d }) {
|
|
2757
|
+
let f = c.renderMode === "inline", p = c.renderMode === "sheet";
|
|
2758
|
+
return !o || !s ? null : /* @__PURE__ */ j(k, { children: [f ? /* @__PURE__ */ j(k, { children: [n && !i ? /* @__PURE__ */ A("div", {
|
|
2759
|
+
role: "separator",
|
|
2760
|
+
"aria-label": "调整 Workspace 宽度",
|
|
2761
|
+
"aria-orientation": "vertical",
|
|
2762
|
+
onPointerDown: u,
|
|
2763
|
+
className: "hidden h-full w-1 cursor-col-resize bg-transparent transition-colors hover:bg-blue-200/60 dark:hover:bg-blue-900/50 md:block"
|
|
2764
|
+
}) : null, /* @__PURE__ */ A("aside", {
|
|
2765
|
+
style: n && !i ? { width: `${r}px` } : void 0,
|
|
2766
|
+
className: J(i ? "fixed inset-0 z-40 flex h-[var(--app-height)] w-screen overflow-hidden bg-white dark:bg-slate-950" : "hidden h-full flex-shrink-0 overflow-hidden bg-white transition-[width] duration-200 ease-out dark:bg-slate-950 md:flex", n ? "border-l border-slate-200/30 dark:border-slate-800/40" : "w-0 border-l border-transparent"),
|
|
2767
|
+
children: n ? /* @__PURE__ */ A(sr, {
|
|
2768
|
+
agentId: e,
|
|
2769
|
+
capability: t,
|
|
2770
|
+
open: n,
|
|
2771
|
+
onClose: l,
|
|
2772
|
+
isFullscreen: i,
|
|
2773
|
+
onToggleFullscreen: () => yn.getState().setWorkspacePanelFullscreen(!i),
|
|
2774
|
+
isMobile: a,
|
|
2775
|
+
api: d
|
|
2776
|
+
}) : null
|
|
2777
|
+
})] }) : null, p ? /* @__PURE__ */ A(Ve, {
|
|
2778
|
+
open: n,
|
|
2779
|
+
onOpenChange: (e) => {
|
|
2780
|
+
e || yn.getState().setWorkspacePanelFullscreen(!1), yn.getState().setWorkspacePanelOpen(e);
|
|
2781
|
+
},
|
|
2782
|
+
modal: c.modal,
|
|
2783
|
+
children: /* @__PURE__ */ j(Ge, {
|
|
2784
|
+
side: c.side,
|
|
2785
|
+
showOverlay: c.showOverlay,
|
|
2786
|
+
onInteractOutside: (e) => {
|
|
2787
|
+
c.preventOutsideClose && e.preventDefault();
|
|
2788
|
+
},
|
|
2789
|
+
showCloseButton: !1,
|
|
2790
|
+
className: J("border-slate-200 bg-white p-0 dark:border-slate-800 dark:bg-slate-950", a ? "h-[70vh] rounded-t-[1.75rem]" : "h-[calc(100vh-1.5rem)] w-[min(72rem,calc(100vw-1.5rem))] max-w-[calc(100vw-1.5rem)] rounded-l-[1.5rem] border-l shadow-2xl"),
|
|
2791
|
+
children: [
|
|
2792
|
+
/* @__PURE__ */ A(Je, {
|
|
2793
|
+
className: "sr-only",
|
|
2794
|
+
children: "Workspace 文件"
|
|
2795
|
+
}),
|
|
2796
|
+
/* @__PURE__ */ A(Ye, {
|
|
2797
|
+
className: "sr-only",
|
|
2798
|
+
children: "浏览、上传和预览 Workspace 文件。"
|
|
2799
|
+
}),
|
|
2800
|
+
/* @__PURE__ */ A(sr, {
|
|
2801
|
+
agentId: e,
|
|
2802
|
+
capability: t,
|
|
2803
|
+
open: n,
|
|
2804
|
+
onClose: l,
|
|
2805
|
+
isMobile: a,
|
|
2806
|
+
api: d
|
|
2807
|
+
})
|
|
2808
|
+
]
|
|
2809
|
+
})
|
|
2810
|
+
}) : null] });
|
|
2811
|
+
}
|
|
2812
|
+
//#endregion
|
|
2813
|
+
export { J as A, ut as C, Ye as D, Ge as E, Je as O, X as S, Ve as T, Tt as _, kn as a, wt as b, hn as c, Rt as d, It as f, xt as g, bt as h, On as i, Be as k, an as l, St as m, Yn as n, yn as o, Pt as p, qn as r, _n as s, cr as t, zt as u, Ct as v, Qe as w, yt as x, vt as y };
|