@openbuddy/cli 1.0.40 → 1.0.41
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/README.md +621 -38
- package/bin/stt/requirements.txt +7 -19
- package/bin/stt/stt_server.py +18 -93
- package/install.cjs +156 -2
- package/llms.txt +34 -7
- package/package.json +9 -9
- package/web/dist/assets/AssistantsView-dhdYVIy0.js +1 -0
- package/web/dist/assets/AutomationView-D1dU5ZV7.js +1 -0
- package/web/dist/assets/ChannelConfigView-CEPVZntU.js +8 -0
- package/web/dist/assets/ChartsView-DdN-beHW.js +1 -0
- package/web/dist/assets/ConnectorsView-CseCss9C.js +1 -0
- package/web/dist/assets/FileTreeView-Dnc3-gRF.js +1 -0
- package/web/dist/assets/HookConfigView-DA2h4HdJ.js +1 -0
- package/web/dist/assets/InputArea-DAgOOjOc.js +14 -0
- package/web/dist/assets/MemoryView-D6OUBi4-.js +1 -0
- package/web/dist/assets/MessageBubble-CCTRbIMZ.css +1 -0
- package/web/dist/assets/MessageBubble-CV16DZMG.js +453 -0
- package/web/dist/assets/ModelsView-BuqD9vWl.js +1 -0
- package/web/dist/assets/PluginsView-CIziDHFJ.js +2 -0
- package/web/dist/assets/ProjectsView-c6faWy32.js +1 -0
- package/web/dist/assets/SessionGrid-BZJHcklh.js +4 -0
- package/web/dist/assets/SessionGrid-Bk5CAXEn.css +1 -0
- package/web/dist/assets/SettingsModal-BqdGEGW-.js +4 -0
- package/web/dist/assets/SkillsView-CB6CKkmb.js +1 -0
- package/web/dist/assets/TemplatesTab-B8efVwVZ.js +1 -0
- package/web/dist/assets/ThreadsView-CDoM0aNb.js +2 -0
- package/web/dist/assets/ToolsView-BG-xsWsO.js +1 -0
- package/web/dist/assets/abnfDiagram-WEYOIA3C-DGUPHfRO.js +1 -0
- package/web/dist/assets/agentIconSet-Btsb_SC4.js +1 -0
- package/web/dist/assets/api-CCt9DRQm.js +1 -0
- package/web/dist/assets/arc-Y1ARJVZ4.js +1 -0
- package/web/dist/assets/architecture-WOLXFQ4H-BUERx_-B.js +1 -0
- package/web/dist/assets/architectureDiagram-ZHVYKT53-BPsQL7O5.js +36 -0
- package/web/dist/assets/array-BifhSqXX.js +1 -0
- package/web/dist/assets/blockDiagram-RJAE7QA3-pB7EXp6p.js +140 -0
- package/web/dist/assets/c4Diagram-XDPPPE54-BnPeCq_L.js +38 -0
- package/web/dist/assets/channel-CSrLW66f.js +1 -0
- package/web/dist/assets/channelMeta-BGQXQxgj.js +1 -0
- package/web/dist/assets/chunk-2E7WHVMD-xX282MrC.js +88 -0
- package/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/web/dist/assets/chunk-4EMNKR2T-BAQDLVqt.js +1 -0
- package/web/dist/assets/chunk-55XCU76K-BwAE3Eqq.js +1 -0
- package/web/dist/assets/{chunk-5VM5RSS4-CYl9mwa-.js → chunk-5VM5RSS4-ZNzvKenW.js} +2 -2
- package/web/dist/assets/chunk-7S6XSTFO-DwwaClMo.js +2 -0
- package/web/dist/assets/chunk-AQDTSKZB-DHG5Km_p.js +72 -0
- package/web/dist/assets/chunk-DSNLSHJZ-a6-B52h-.js +129 -0
- package/web/dist/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
- package/web/dist/assets/chunk-HAGFOTED-DZMcAj3o.js +62 -0
- package/web/dist/assets/chunk-HNE4Q36P-gl_4xI6B.js +1 -0
- package/web/dist/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
- package/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/web/dist/assets/chunk-NGNAAXSQ-Bw6tHVuc.js +136 -0
- package/web/dist/assets/chunk-NQOKRVIF-B8Q-YmhL.js +213 -0
- package/web/dist/assets/chunk-UHW7PFBP-isP5lYMB.js +1 -0
- package/web/dist/assets/chunk-VQ5W62QI-Bn68syIc.js +1 -0
- package/web/dist/assets/chunk-WQQL4CDK-CdZpmEYA.js +10 -0
- package/web/dist/assets/chunk-XXDRQBXY-CnbRkih_.js +1 -0
- package/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/web/dist/assets/chunk-YZO67HFG-DX9GhJkR.js +1 -0
- package/web/dist/assets/chunk-ZAUX2LTX-Ki22UlYp.js +1 -0
- package/web/dist/assets/chunk-ZCHMQSOR-BVj0Zx6L.js +2 -0
- package/web/dist/assets/classDiagram-v2-4MYWR3UA-C7PV1veb.js +217 -0
- package/web/dist/assets/cn-rx4uumOJ.js +1 -0
- package/web/dist/assets/common-BHXgEvgk.js +192 -0
- package/web/dist/assets/cose-bilkent-JH36ORCC-DHFtpmij.js +1 -0
- package/web/dist/assets/cynefin-EF2NZ3EQ-1rI2T0cc.js +1 -0
- package/web/dist/assets/cynefinDiagram-WF24UDRP-C8O_v8xU.js +62 -0
- package/web/dist/assets/cytoscape.esm-BY277UBX.js +321 -0
- package/web/dist/assets/dagre-NK4GIZVX-BWGoHIUd.js +4 -0
- package/web/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/web/dist/assets/diagram-CBK3MWTC-kf9v35RN.js +24 -0
- package/web/dist/assets/diagram-I5XIIV2D-Ro-ig56_.js +24 -0
- package/web/dist/assets/diagram-ODIL2UCW-CtGga01G.js +30 -0
- package/web/dist/assets/diagram-PFBEJUXE-C14lcR-6.js +3 -0
- package/web/dist/assets/diagram-RJA3I4VV-BBbqaSKU.js +41 -0
- package/web/dist/assets/diagram-TYUNFSNR-BynvjQsr.js +200 -0
- package/web/dist/assets/dist-CumnGVmJ.js +1 -0
- package/web/dist/assets/ebnfDiagram-V4P3TTPT-BdqUCZnk.js +1 -0
- package/web/dist/assets/elk-QONTBCTQ-CYCP_9Jy.js +27 -0
- package/web/dist/assets/erDiagram-KYQIGQAA-C3L55l_F.js +99 -0
- package/web/dist/assets/eventmodeling-K75KTNOO-CTQdA_1v.js +1 -0
- package/web/dist/assets/flowDiagram-IUGLLWBU-COLKOzBg.js +1 -0
- package/web/dist/assets/ganttDiagram-R7GPNTJY-Be4Qk8Hx.js +292 -0
- package/web/dist/assets/gitGraph-VSP46ZUC-B59HXvj1.js +1 -0
- package/web/dist/assets/gitGraphDiagram-PDYL7XHY-C2A0VA6q.js +106 -0
- package/web/dist/assets/graphlib-DS17s2tU.js +1 -0
- package/web/dist/assets/icons-BvYhTENi.js +1 -0
- package/web/dist/assets/index-BNI6CNsY.css +1 -0
- package/web/dist/assets/index-BX-d2OBW.js +130 -0
- package/web/dist/assets/info-OHQRW6UA-DWlkKvmi.js +1 -0
- package/web/dist/assets/infoDiagram-MVDRKAX5-B8e6dTjN.js +2 -0
- package/web/dist/assets/init-C-OQMol4.js +1 -0
- package/web/dist/assets/ishikawaDiagram-HPEHV2GE-udXPYi9H.js +70 -0
- package/web/dist/assets/journeyDiagram-BOSHW7O7-DTyDkf5d.js +139 -0
- package/web/dist/assets/kanban-definition-FNSA4HC5-BXgV20qe.js +89 -0
- package/web/dist/assets/katex-B940_AAO.js +257 -0
- package/web/dist/assets/line-DVabuQAu.js +1 -0
- package/web/dist/assets/linear-gLkGxN9m.js +1 -0
- package/web/dist/assets/markdown-DAQZeY5V.js +14 -0
- package/web/dist/assets/mermaid-parser.core-BrXnuEs7.js +7 -0
- package/web/dist/assets/mermaid.core-BGbz3k1k.js +44 -0
- package/web/dist/assets/mindmap-definition-6OY57UG3-DbtP-bmk.js +98 -0
- package/web/dist/assets/ordinal-BDEzSJ7C.js +1 -0
- package/web/dist/assets/packet-JDAUHWVQ-iW8w3JF5.js +1 -0
- package/web/dist/assets/panels-DYiQiVWh.js +1 -0
- package/web/dist/assets/path-fybaL0A-.js +1 -0
- package/web/dist/assets/pegDiagram-ECIUJNBX-rBWJbaq4.js +1 -0
- package/web/dist/assets/pie-XZMESJXO-KHXEq-Yx.js +1 -0
- package/web/dist/assets/pieDiagram-GNMPY74T-DsW7yHm0.js +39 -0
- package/web/dist/assets/preload-helper-BLdHbfdN.js +1 -0
- package/web/dist/assets/profileChange-xrd7jkii.js +1 -0
- package/web/dist/assets/quadrantDiagram-D57K4MC3-DF_pwNhM.js +7 -0
- package/web/dist/assets/radar-ABXABTNO-BkAUJ_Zd.js +1 -0
- package/web/dist/assets/railroad-I3PHUGI6-BdnWRdGt.js +1 -0
- package/web/dist/assets/railroad-abnf-LNEFI6M7-C8K36-8b.js +1 -0
- package/web/dist/assets/railroad-ebnf-DWYD2UWJ-BlS25T3f.js +1 -0
- package/web/dist/assets/railroad-peg-JR7BVNR7-CBKGDi75.js +1 -0
- package/web/dist/assets/railroadDiagram-Y72NRBL7-DmrlMIvv.js +1 -0
- package/web/dist/assets/react-vendor-BlngCquv.js +19 -0
- package/web/dist/assets/requirementDiagram-EQYSW5RA-cvUq9H3I.js +84 -0
- package/web/dist/assets/rolldown-runtime-COiEfhsA.js +1 -0
- package/web/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/web/dist/assets/sankeyDiagram-SY24JHO5-BdxXAbER.js +40 -0
- package/web/dist/assets/sequenceDiagram-BLEHNHQU-Druumi0k.js +169 -0
- package/web/dist/assets/settingsStore-RLUAWgIk.js +1 -0
- package/web/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/web/dist/assets/src-49LUQhkG.js +1 -0
- package/web/dist/assets/src-BWF7jMDv.js +1 -0
- package/web/dist/assets/state-_ZfNVAsd.js +1 -0
- package/web/dist/assets/stateDiagram-v2-A6IESKWZ-Jgh6qlrr.js +291 -0
- package/web/dist/assets/sttLanguages-aqoVC79g.js +2 -0
- package/web/dist/assets/swimlanes-B3ENRKFQ-4xKumvXQ.js +1 -0
- package/web/dist/assets/swimlanesDiagram-AYQRV4AK-bHcLKL3d.js +8 -0
- package/web/dist/assets/timeline-definition-JXYKGLGB-BYKhga9x.js +120 -0
- package/web/dist/assets/treeView-D4JQ5SDB-6-eTVUuH.js +1 -0
- package/web/dist/assets/treemap-SAJKECNS-Dxl8yCLE.js +1 -0
- package/web/dist/assets/ttsSettings-DHo3OsOq.js +15 -0
- package/web/dist/assets/types-JssxRFJn.js +1 -0
- package/web/dist/assets/useTranslation-BGmCDuQI.js +1 -0
- package/web/dist/assets/usecaseDiagram-WPOLBNNX-BaQ8nAv9.js +328 -0
- package/web/dist/assets/vennDiagram-Q3Y3IDCW-DkPvfmfT.js +34 -0
- package/web/dist/assets/wardley-7MLQ67FV-CZtI22aa.js +1 -0
- package/web/dist/assets/wardleyDiagram-IVAIDKWA-Dgi2OWQ4.js +78 -0
- package/web/dist/assets/websocket-C9e3h7VU.js +1 -0
- package/web/dist/assets/whatsNewStore-Bf_7lW8o.js +1 -0
- package/web/dist/assets/workspaceSemantics-RaIRer76.js +3 -0
- package/web/dist/assets/xychartDiagram-4URNHDU4-Ch96dep-.js +7 -0
- package/web/dist/favicon.svg +18 -39
- package/web/dist/icons/icon-1024.png +0 -0
- package/web/dist/icons/icon-180.png +0 -0
- package/web/dist/icons/icon-192.png +0 -0
- package/web/dist/icons/icon-512.png +0 -0
- package/web/dist/icons/icon-maskable-512.png +0 -0
- package/web/dist/index.html +46 -12
- package/web/dist/logo.svg +25 -39
- package/web/dist/manifest.webmanifest +2 -2
- package/web/dist/assets/AssistantsView-BiUiWjhF.js +0 -1
- package/web/dist/assets/AutomationView-Dcf_yNaI.js +0 -1
- package/web/dist/assets/ChannelConfigView-BLnxsMGm.js +0 -8
- package/web/dist/assets/ConnectorsView-CX3E6X6c.js +0 -1
- package/web/dist/assets/DesignSystemView--x-P-lpD.js +0 -1
- package/web/dist/assets/Drawer-CjAgqH3B.js +0 -1
- package/web/dist/assets/FileTreeView-Chb_fzTK.js +0 -11
- package/web/dist/assets/HookConfigView-EafYlWdN.js +0 -1
- package/web/dist/assets/InputArea-BbHslX7b.js +0 -50
- package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/web/dist/assets/ModelsView-CGN5Nljr.js +0 -1
- package/web/dist/assets/PluginsView-CDiJgvI8.js +0 -2
- package/web/dist/assets/ProjectsView-C5Usmwqy.js +0 -1
- package/web/dist/assets/SessionGrid-BGpz0-op.css +0 -1
- package/web/dist/assets/SessionGrid-Drxg0r_u.js +0 -4
- package/web/dist/assets/SettingsModal-Cmts6aBG.js +0 -10
- package/web/dist/assets/Skeleton-Dsk6B0U3.js +0 -1
- package/web/dist/assets/SkillsView-TEDR_3XX.js +0 -1
- package/web/dist/assets/TemplatesTab-DtN5Kdgh.js +0 -1
- package/web/dist/assets/ToolsView-VukZnIt1.js +0 -1
- package/web/dist/assets/VizCardsSkeleton-C_GaEfXd.js +0 -1
- package/web/dist/assets/abap-BdImnpbu.js +0 -1
- package/web/dist/assets/abnfDiagram-YUKMZFIV-BIFw6B_N.js +0 -1
- package/web/dist/assets/actionscript-3-B3316cI-.js +0 -1
- package/web/dist/assets/ada-bCR0ucgS.js +0 -1
- package/web/dist/assets/ahk-CsyLZFj1.js +0 -1
- package/web/dist/assets/ahk2-8Zs4aa1G.js +0 -1
- package/web/dist/assets/andromeeda-C4gqWexZ.js +0 -1
- package/web/dist/assets/angular-html-DA-rfuFy.js +0 -1
- package/web/dist/assets/angular-ts-BrjP3tb8.js +0 -1
- package/web/dist/assets/apache-Pmp26Uib.js +0 -1
- package/web/dist/assets/apex-DhZFqWV2.js +0 -1
- package/web/dist/assets/apl-CORt7UWP.js +0 -1
- package/web/dist/assets/applescript-Co6uUVPk.js +0 -1
- package/web/dist/assets/ara-BRHolxvo.js +0 -1
- package/web/dist/assets/arc-BZQ951h9.js +0 -1
- package/web/dist/assets/architectureDiagram-47P4ROYG-BP5qiXzf.js +0 -36
- package/web/dist/assets/asciidoc-CSVQ5wI8.js +0 -1
- package/web/dist/assets/asm-D_Q5rh1f.js +0 -1
- package/web/dist/assets/astro-HNnZUWAn.js +0 -1
- package/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
- package/web/dist/assets/awk-DMzUqQB5.js +0 -1
- package/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -1
- package/web/dist/assets/ayu-light-BA47KaF1.js +0 -1
- package/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -1
- package/web/dist/assets/ballerina-BFfxhgS-.js +0 -1
- package/web/dist/assets/bat-CickPsom.js +0 -1
- package/web/dist/assets/beancount-k_qm7-4y.js +0 -1
- package/web/dist/assets/berry-uYugtg8r.js +0 -1
- package/web/dist/assets/bibtex-CHM0blh-.js +0 -1
- package/web/dist/assets/bicep-Bmn6On1c.js +0 -1
- package/web/dist/assets/bird2-Bx8U0n9b.js +0 -1
- package/web/dist/assets/blade-2xfisSek.js +0 -1
- package/web/dist/assets/blockDiagram-E7TT5TSB-DtRpcE7F.js +0 -140
- package/web/dist/assets/bsl-DlhNcFeZ.js +0 -1
- package/web/dist/assets/c-BIGW1oBm.js +0 -1
- package/web/dist/assets/c3-Dp5svz6Z.js +0 -1
- package/web/dist/assets/c4Diagram-CRA5TL53-Gdzn8UBh.js +0 -38
- package/web/dist/assets/cadence-Bv_4Rxtq.js +0 -1
- package/web/dist/assets/cairo-KRGpt6FW.js +0 -1
- package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +0 -1
- package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +0 -1
- package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +0 -1
- package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +0 -1
- package/web/dist/assets/channel-BND6_KSH.js +0 -1
- package/web/dist/assets/chapel-DTp_pixX.js +0 -1
- package/web/dist/assets/chunk-2Q5K7J3B-3U6HMlsm.js +0 -1
- package/web/dist/assets/chunk-7TKQ45FW-Dn6ktcY5.js +0 -1
- package/web/dist/assets/chunk-AW2ZBBNX-De0QX6p1.js +0 -88
- package/web/dist/assets/chunk-FVRAUYC3-CpXDfvz4.js +0 -2
- package/web/dist/assets/chunk-HTAEGDNF-D1KDvcDd.js +0 -1
- package/web/dist/assets/chunk-JWPE2WC7-umm4A-fq.js +0 -1
- package/web/dist/assets/chunk-KQW6MTUR-JYH94hpE.js +0 -1
- package/web/dist/assets/chunk-XXDRQBXY-CSlCFByc.js +0 -1
- package/web/dist/assets/clarity-Dn5IMItf.js +0 -1
- package/web/dist/assets/classDiagram-v2-K4WV4PDN-DnFwS0qN.js +0 -217
- package/web/dist/assets/clojure-P80f7IUj.js +0 -1
- package/web/dist/assets/cmake-D1j8_8rp.js +0 -1
- package/web/dist/assets/cobol-nBiQ_Alo.js +0 -1
- package/web/dist/assets/codeowners-Bp6g37R7.js +0 -1
- package/web/dist/assets/codeql-DsOJ9woJ.js +0 -1
- package/web/dist/assets/coffee-Ch7k5sss.js +0 -1
- package/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -1
- package/web/dist/assets/coq-C7JzOVbR.js +0 -1
- package/web/dist/assets/cose-bilkent-JH36ORCC-BxUTUyep.js +0 -1
- package/web/dist/assets/cpp-BMRokrvK.js +0 -1
- package/web/dist/assets/crystal-DGywbUpC.js +0 -1
- package/web/dist/assets/csharp-DSvCPggb.js +0 -1
- package/web/dist/assets/css-CLj8gQPS.js +0 -1
- package/web/dist/assets/csv-fuZLfV_i.js +0 -1
- package/web/dist/assets/cue-D82EKSYY.js +0 -1
- package/web/dist/assets/cynefin-EF2NZ3EQ-CiMvulJr.js +0 -141
- package/web/dist/assets/cynefinDiagram-3GCD6N5R-DuXFORdW.js +0 -62
- package/web/dist/assets/cypher-COkxafJQ.js +0 -1
- package/web/dist/assets/cytoscape.esm-Ix0LnXOy.js +0 -331
- package/web/dist/assets/d-85-TOEBH.js +0 -1
- package/web/dist/assets/dagre-W4DXFKR2-DzMZHXci.js +0 -4
- package/web/dist/assets/dark-plus-C3mMm8J8.js +0 -1
- package/web/dist/assets/dart-bE4Kk8sk.js +0 -1
- package/web/dist/assets/dax-CEL-wOlO.js +0 -1
- package/web/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
- package/web/dist/assets/desktop-BmXAJ9_W.js +0 -1
- package/web/dist/assets/diagram-2UJZ2QOL-B6tO5G1v.js +0 -200
- package/web/dist/assets/diagram-OVF4WLC6-DRZt8tGc.js +0 -24
- package/web/dist/assets/diagram-PFPMY2P6-DGh6IecR.js +0 -30
- package/web/dist/assets/diagram-UMYRVEAY-BLbnt0yT.js +0 -24
- package/web/dist/assets/diagram-YEKJPTXX-C-S5DVhj.js +0 -41
- package/web/dist/assets/diagram-ZIFT7M5P-JrGHTWbo.js +0 -3
- package/web/dist/assets/diff-D97Zzqfu.js +0 -1
- package/web/dist/assets/docker-BcOcwvcX.js +0 -1
- package/web/dist/assets/dotenv-Da5cRb03.js +0 -1
- package/web/dist/assets/dracula-BzJJZx-M.js +0 -1
- package/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
- package/web/dist/assets/dream-maker-BtqSS_iP.js +0 -1
- package/web/dist/assets/ebnfDiagram-VR2GEFS7-DPXA-YOi.js +0 -1
- package/web/dist/assets/edge-FbVlp4U3.js +0 -1
- package/web/dist/assets/elixir-CkH2-t6x.js +0 -1
- package/web/dist/assets/elk-IJKZMXRS-CINeWt2W.js +0 -27
- package/web/dist/assets/elm-DbKCFpqz.js +0 -1
- package/web/dist/assets/emacs-lisp-C_m_b--Z.js +0 -1
- package/web/dist/assets/erDiagram-O2IAPWRE-PPaHmqA1.js +0 -99
- package/web/dist/assets/erb-DXfck5VN.js +0 -1
- package/web/dist/assets/erlang-DsQrWhSR.js +0 -1
- package/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
- package/web/dist/assets/everforest-light-C8M2exoo.js +0 -1
- package/web/dist/assets/fennel-BYunw83y.js +0 -1
- package/web/dist/assets/fish-BvzEVeQv.js +0 -1
- package/web/dist/assets/flowDiagram-OXPTDLAJ-t-u0QXEA.js +0 -213
- package/web/dist/assets/fluent-C4IJs8-o.js +0 -1
- package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
- package/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
- package/web/dist/assets/fsharp-CXgrBDvD.js +0 -1
- package/web/dist/assets/ganttDiagram-R7TSEDQI-Bw49ZD_b.js +0 -292
- package/web/dist/assets/gdresource-TyuKm33G.js +0 -1
- package/web/dist/assets/gdscript-DqcFQ5yU.js +0 -1
- package/web/dist/assets/gdshader-DkwncUOv.js +0 -1
- package/web/dist/assets/genie-D0YGMca9.js +0 -1
- package/web/dist/assets/gherkin-DyxjwDmM.js +0 -1
- package/web/dist/assets/git-commit-F4YmCXRG.js +0 -1
- package/web/dist/assets/git-rebase-r7XF79zn.js +0 -1
- package/web/dist/assets/gitGraphDiagram-XJZIOB7I-BAfOqeeg.js +0 -106
- package/web/dist/assets/github-dark-DHJKELXO.js +0 -1
- package/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
- package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
- package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
- package/web/dist/assets/github-light-DAi9KRSo.js +0 -1
- package/web/dist/assets/github-light-default-D7oLnXFd.js +0 -1
- package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
- package/web/dist/assets/gleam-BspZqrRM.js +0 -1
- package/web/dist/assets/glimmer-js-ByusRIyA.js +0 -1
- package/web/dist/assets/glimmer-ts-BfAWNZQY.js +0 -1
- package/web/dist/assets/glsl-DplSGwfg.js +0 -1
- package/web/dist/assets/gn-n2N0HUVH.js +0 -1
- package/web/dist/assets/gnuplot-DdkO51Og.js +0 -1
- package/web/dist/assets/go-C27-OAKa.js +0 -1
- package/web/dist/assets/graph-Bn3Yngep.js +0 -1
- package/web/dist/assets/graphql-ChdNCCLP.js +0 -1
- package/web/dist/assets/groovy-gcz8RCvz.js +0 -1
- package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
- package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
- package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
- package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
- package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
- package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
- package/web/dist/assets/hack-BWmVpMyf.js +0 -1
- package/web/dist/assets/haml-D5jkg6IW.js +0 -1
- package/web/dist/assets/handlebars-BpdQsYii.js +0 -1
- package/web/dist/assets/haskell-Df6bDoY_.js +0 -1
- package/web/dist/assets/haxe-CfZj7gIn.js +0 -1
- package/web/dist/assets/hcl-BWvSN4gD.js +0 -1
- package/web/dist/assets/hjson-D5-asLiD.js +0 -1
- package/web/dist/assets/hlsl-D3lLCCz7.js +0 -1
- package/web/dist/assets/horizon-BUw7H-hv.js +0 -1
- package/web/dist/assets/horizon-bright-CUuTKBJd.js +0 -1
- package/web/dist/assets/houston-DnULxvSX.js +0 -1
- package/web/dist/assets/html-derivative-DlHx6ybY.js +0 -1
- package/web/dist/assets/html-pp8916En.js +0 -1
- package/web/dist/assets/http-jrhK8wxY.js +0 -1
- package/web/dist/assets/hurl-irOxFIW8.js +0 -1
- package/web/dist/assets/hxml-2-FPmUDs.js +0 -1
- package/web/dist/assets/hy-DFXneXwc.js +0 -1
- package/web/dist/assets/icons-Bm_ZzSAy.js +0 -964
- package/web/dist/assets/imba-DGztddWO.js +0 -1
- package/web/dist/assets/index-CeeLdENM.js +0 -677
- package/web/dist/assets/index-Ceez9lYk.css +0 -1
- package/web/dist/assets/infoDiagram-5W2HQ5XZ-Bv4RBxYW.js +0 -2
- package/web/dist/assets/ini-BEwlwnbL.js +0 -1
- package/web/dist/assets/init-Gi6I4Gst.js +0 -1
- package/web/dist/assets/ishikawaDiagram-K3B6WC7H-DEpj0bRp.js +0 -70
- package/web/dist/assets/java-CylS5w8V.js +0 -1
- package/web/dist/assets/javascript-wDzz0qaB.js +0 -1
- package/web/dist/assets/jinja-f2NsQr07.js +0 -1
- package/web/dist/assets/jison-wvAkD_A8.js +0 -1
- package/web/dist/assets/journeyDiagram-COXZFDF6-MJu84Iiz.js +0 -139
- package/web/dist/assets/json-Cp-IABpG.js +0 -1
- package/web/dist/assets/json5-C9tS-k6U.js +0 -1
- package/web/dist/assets/jsonc-Des-eS-w.js +0 -1
- package/web/dist/assets/jsonl-DcaNXYhu.js +0 -1
- package/web/dist/assets/jsonnet-DFQXde-d.js +0 -1
- package/web/dist/assets/jssm-C2t-YnRu.js +0 -1
- package/web/dist/assets/jsx-g9-lgVsj.js +0 -1
- package/web/dist/assets/julia-5Bft2YPA.js +0 -1
- package/web/dist/assets/just-Cwhn7H3k.js +0 -1
- package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +0 -1
- package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +0 -1
- package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +0 -1
- package/web/dist/assets/kanban-definition-P3RFRI5V-mlYSRALK.js +0 -89
- package/web/dist/assets/kdl-DV7GczEv.js +0 -1
- package/web/dist/assets/kotlin-BdnUsdx6.js +0 -1
- package/web/dist/assets/kusto-wEQ09or8.js +0 -1
- package/web/dist/assets/laserwave-DUszq2jm.js +0 -1
- package/web/dist/assets/latex-D5pSuvFb.js +0 -1
- package/web/dist/assets/lean-BZvkOJ9d.js +0 -1
- package/web/dist/assets/less-B1dDrJ26.js +0 -1
- package/web/dist/assets/light-plus-B7mTdjB0.js +0 -1
- package/web/dist/assets/linear-5j9gt8MV.js +0 -1
- package/web/dist/assets/liquid-C0sCDyMI.js +0 -1
- package/web/dist/assets/llvm-BZoOZj88.js +0 -1
- package/web/dist/assets/log-2UxHyX5q.js +0 -1
- package/web/dist/assets/logo-BtOb2qkB.js +0 -1
- package/web/dist/assets/lua-BaeVxFsk.js +0 -1
- package/web/dist/assets/luau-BnpPk5vE.js +0 -1
- package/web/dist/assets/make-CHLpvVh8.js +0 -1
- package/web/dist/assets/markdown-BWXjRrSw.js +0 -30
- package/web/dist/assets/markdown-Cvjx9yec.js +0 -1
- package/web/dist/assets/marko-DjSrsDqO.js +0 -1
- package/web/dist/assets/material-theme-D5KoaKCx.js +0 -1
- package/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
- package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
- package/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
- package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
- package/web/dist/assets/matlab-D7o27uSR.js +0 -1
- package/web/dist/assets/mdc-D1_yUvq7.js +0 -1
- package/web/dist/assets/mdx-Cmh6b_Ma.js +0 -1
- package/web/dist/assets/mermaid-CQcHuHx7.js +0 -1
- package/web/dist/assets/mermaid.core-DLb6eAON.js +0 -314
- package/web/dist/assets/min-dark-CafNBF8u.js +0 -1
- package/web/dist/assets/min-light-CTRr51gU.js +0 -1
- package/web/dist/assets/mindmap-definition-LZFPQGKD-C9v_57Ex.js +0 -96
- package/web/dist/assets/mipsasm-CKIfxQSi.js +0 -1
- package/web/dist/assets/mojo-DJz3ZmWd.js +0 -1
- package/web/dist/assets/monokai-BRVnQi9A.js +0 -1
- package/web/dist/assets/moonbit-CHtswR0a.js +0 -1
- package/web/dist/assets/move-el3G9tDJ.js +0 -1
- package/web/dist/assets/narrat-DRg8JJMk.js +0 -1
- package/web/dist/assets/nextflow-C-mBbutL.js +0 -1
- package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +0 -1
- package/web/dist/assets/nginx-BpAMiNFr.js +0 -1
- package/web/dist/assets/night-owl-C39BiMTA.js +0 -1
- package/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -1
- package/web/dist/assets/nim-BIad80T-.js +0 -1
- package/web/dist/assets/nix-CwoSXNpI.js +0 -1
- package/web/dist/assets/nord-Ddv68eIx.js +0 -1
- package/web/dist/assets/nsis-BlV79W_Q.js +0 -1
- package/web/dist/assets/nushell-D3jzshHO.js +0 -1
- package/web/dist/assets/objective-c-DXmwc3jG.js +0 -1
- package/web/dist/assets/objective-cpp-CLxacb5B.js +0 -1
- package/web/dist/assets/ocaml-C0hk2d4L.js +0 -1
- package/web/dist/assets/odin-BBf5iR-q.js +0 -1
- package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
- package/web/dist/assets/one-light-C3Wv6jpd.js +0 -1
- package/web/dist/assets/openscad-C4EeE6gA.js +0 -1
- package/web/dist/assets/ordinal-Cboi1Yqb.js +0 -1
- package/web/dist/assets/org-DM6o9KBp.js +0 -1
- package/web/dist/assets/panels-BQOvnbWH.js +0 -1
- package/web/dist/assets/pascal-D93ZcfNL.js +0 -1
- package/web/dist/assets/pegDiagram-BGZESJAR-KQP26s3-.js +0 -1
- package/web/dist/assets/perl-B9cMNwum.js +0 -1
- package/web/dist/assets/php-Csjmro_R.js +0 -1
- package/web/dist/assets/pieDiagram-CAPJLFHJ-DN3RQ_ih.js +0 -39
- package/web/dist/assets/pkl-u5AG7uiY.js +0 -1
- package/web/dist/assets/plastic-3e1v2bzS.js +0 -1
- package/web/dist/assets/plsql-ChMvpjG-.js +0 -1
- package/web/dist/assets/po-BTJTHyun.js +0 -1
- package/web/dist/assets/poimandres-CS3Unz2-.js +0 -1
- package/web/dist/assets/polar-C0HS_06l.js +0 -1
- package/web/dist/assets/postcss-CXtECtnM.js +0 -1
- package/web/dist/assets/powerquery-CEu0bR-o.js +0 -1
- package/web/dist/assets/powershell-BmBUJMz7.js +0 -1
- package/web/dist/assets/prisma-Vru482bI.js +0 -1
- package/web/dist/assets/profileChange-B7TaQ18u.js +0 -1
- package/web/dist/assets/prolog-CbFg5uaA.js +0 -1
- package/web/dist/assets/proto-C7zT0LnQ.js +0 -1
- package/web/dist/assets/pug-DKIMFp6K.js +0 -1
- package/web/dist/assets/puppet-BMWR74SV.js +0 -1
- package/web/dist/assets/purescript-CklMAg4u.js +0 -1
- package/web/dist/assets/python-B6aJPvgy.js +0 -1
- package/web/dist/assets/qml-3beO22l8.js +0 -1
- package/web/dist/assets/qmldir-C8lEn-DE.js +0 -1
- package/web/dist/assets/qss-IeuSbFQv.js +0 -1
- package/web/dist/assets/quadrantDiagram-GDMTTRAM-BpL_ZL76.js +0 -7
- package/web/dist/assets/r-Cf5RLm7j.js +0 -1
- package/web/dist/assets/racket-BqYA7rlc.js +0 -1
- package/web/dist/assets/railroadDiagram-SM67HX2B-DZ-fPU85.js +0 -1
- package/web/dist/assets/raku-DXvB9xmW.js +0 -1
- package/web/dist/assets/razor-BjBPvh-w.js +0 -1
- package/web/dist/assets/rbs-CpoqiR4B.js +0 -1
- package/web/dist/assets/react-vendor-C0HIWSpf.js +0 -9
- package/web/dist/assets/red-hvxz__6c.js +0 -1
- package/web/dist/assets/reg-C-SQnVFl.js +0 -1
- package/web/dist/assets/regexp-CDVJQ6XC.js +0 -1
- package/web/dist/assets/rel-C3B-1QV4.js +0 -1
- package/web/dist/assets/requirementDiagram-X7JNWC4A-mKPGj64L.js +0 -84
- package/web/dist/assets/riscv-BM1_JUlF.js +0 -1
- package/web/dist/assets/ron-D8l8udqQ.js +0 -1
- package/web/dist/assets/rose-pine-5qJOZa0Y.js +0 -1
- package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +0 -1
- package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +0 -1
- package/web/dist/assets/rosmsg-BJDFO7_C.js +0 -1
- package/web/dist/assets/rst-bs7f0vWN.js +0 -1
- package/web/dist/assets/ruby-C0TQ7zu5.js +0 -1
- package/web/dist/assets/rust-B1yitclQ.js +0 -1
- package/web/dist/assets/sankeyDiagram-UM26HJRW-Bs4xfjQP.js +0 -40
- package/web/dist/assets/sas-DEy46yEz.js +0 -1
- package/web/dist/assets/sass-Cj5Yp3dK.js +0 -1
- package/web/dist/assets/scala-CqE71os6.js +0 -1
- package/web/dist/assets/scheme-C98Dy4si.js +0 -1
- package/web/dist/assets/scss-D5BDwBP9.js +0 -1
- package/web/dist/assets/sdbl-DVxCFoDh.js +0 -1
- package/web/dist/assets/sequenceDiagram-ZO4K6R2Y-BjUmzZaO.js +0 -169
- package/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
- package/web/dist/assets/shellscript-Yzrsuije.js +0 -1
- package/web/dist/assets/shellsession-BADoaaVG.js +0 -1
- package/web/dist/assets/sizeCapture-INFHLROL-BXBM3j_Q.js +0 -1
- package/web/dist/assets/slack-dark-BthQWCQV.js +0 -1
- package/web/dist/assets/slack-ochin-DqwNpetd.js +0 -1
- package/web/dist/assets/smalltalk-BOQMe2GC.js +0 -1
- package/web/dist/assets/smithy-cds9vsN8.js +0 -1
- package/web/dist/assets/snazzy-light-Bw305WKR.js +0 -1
- package/web/dist/assets/solarized-dark-CpvCGNkr.js +0 -1
- package/web/dist/assets/solarized-light-Dlz6yCKv.js +0 -1
- package/web/dist/assets/solidity-DijEV5ha.js +0 -1
- package/web/dist/assets/soy-8wufbnw4.js +0 -1
- package/web/dist/assets/sparql-rVzFXLq3.js +0 -1
- package/web/dist/assets/splunk-BtCnVYZw.js +0 -1
- package/web/dist/assets/sql-CRqJ_cUM.js +0 -1
- package/web/dist/assets/ssh-config-_ykCGR6B.js +0 -1
- package/web/dist/assets/stata-DI20mbqo.js +0 -1
- package/web/dist/assets/state-Kfon1nTr.js +0 -17
- package/web/dist/assets/stateDiagram-v2-TBUQTH76-FGgFDGUU.js +0 -291
- package/web/dist/assets/sttLanguages-C7kVulzY.js +0 -1
- package/web/dist/assets/stylus-BEDo0Tqx.js +0 -1
- package/web/dist/assets/surrealql-Cjom0U5J.js +0 -1
- package/web/dist/assets/svelte-Cy7k_4gC.js +0 -1
- package/web/dist/assets/swift-C2oV4EkX.js +0 -1
- package/web/dist/assets/swimlanes-N4OXWK64-wkd_n4HU.js +0 -1
- package/web/dist/assets/swimlanesDiagram-K3J5GTZL-CKnwEuq_.js +0 -8
- package/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
- package/web/dist/assets/system-verilog-0hqHdDBg.js +0 -1
- package/web/dist/assets/systemd-4A_iFExJ.js +0 -1
- package/web/dist/assets/talonscript-CkByrt1z.js +0 -1
- package/web/dist/assets/tasl-QIJgUcNo.js +0 -1
- package/web/dist/assets/tcl-dwOrl1Do.js +0 -1
- package/web/dist/assets/templ-DhtptRzy.js +0 -1
- package/web/dist/assets/terraform-BETggiCN.js +0 -1
- package/web/dist/assets/tex-D96PA37w.js +0 -1
- package/web/dist/assets/timeline-definition-YOQAKGHF-DyBln1jw.js +0 -120
- package/web/dist/assets/tokyo-night-hegEt444.js +0 -1
- package/web/dist/assets/toml-vGWfd6FD.js +0 -1
- package/web/dist/assets/ts-tags-D351s5mN.js +0 -1
- package/web/dist/assets/tsv-B_m7g4N7.js +0 -1
- package/web/dist/assets/tsx-COt5Ahok.js +0 -1
- package/web/dist/assets/turtle-BsS91CYL.js +0 -1
- package/web/dist/assets/twig-27uCiNez.js +0 -1
- package/web/dist/assets/typescript-BPQ3VLAy.js +0 -1
- package/web/dist/assets/typespec-CAFt9gP4.js +0 -1
- package/web/dist/assets/typst-BUadGCkm.js +0 -1
- package/web/dist/assets/usecaseDiagram-VIAY4XPW-Cqis3XHX.js +0 -370
- package/web/dist/assets/v-BGw2Nkan.js +0 -1
- package/web/dist/assets/vala-CsfeWuGM.js +0 -1
- package/web/dist/assets/vb-Cu-pLBUe.js +0 -1
- package/web/dist/assets/vennDiagram-BLWOH2XV-BaiFLOVS.js +0 -34
- package/web/dist/assets/verilog-nZwndyjY.js +0 -1
- package/web/dist/assets/vesper-DRje8inN.js +0 -1
- package/web/dist/assets/vhdl-CeAyd5Ju.js +0 -1
- package/web/dist/assets/viml-CJc9bBzg.js +0 -1
- package/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
- package/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
- package/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
- package/web/dist/assets/vue-BqiEGhQt.js +0 -1
- package/web/dist/assets/vue-html-AaS7Mt5G.js +0 -1
- package/web/dist/assets/vue-vine-BoDAl6tE.js +0 -1
- package/web/dist/assets/vyper-CDx5xZoG.js +0 -1
- package/web/dist/assets/wardleyDiagram-YMQ3BMBF-C4CzpJto.js +0 -78
- package/web/dist/assets/wasm-CG6Dc4jp.js +0 -1
- package/web/dist/assets/wasm-MzD3tlZU.js +0 -1
- package/web/dist/assets/wenyan-BV7otONQ.js +0 -1
- package/web/dist/assets/wgsl-Dx-B1_4e.js +0 -1
- package/web/dist/assets/wikitext-BhOHFoWU.js +0 -1
- package/web/dist/assets/wit-5i3qLPDT.js +0 -1
- package/web/dist/assets/wolfram-lXgVvXCa.js +0 -1
- package/web/dist/assets/xml-sdJ4AIDG.js +0 -1
- package/web/dist/assets/xsl-CtQFsRM5.js +0 -1
- package/web/dist/assets/xychartDiagram-TAQBALBS-Dp1hfe3-.js +0 -7
- package/web/dist/assets/yaml-Buea-lGh.js +0 -1
- package/web/dist/assets/zenscript-DVFEvuxE.js +0 -1
- package/web/dist/assets/zig-VOosw3JB.js +0 -1
- package/web/dist/figma-demo/product-1.jpg +0 -0
- package/web/dist/figma-demo/product-2.jpg +0 -0
- package/web/dist/figma-demo/trail-1.jpg +0 -0
- package/web/dist/figma-demo/trail-2.jpg +0 -0
- package/web/dist/figma-demo/trail-3.jpg +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Ln as n,O as r,Or as i,Qt as a,Ur as o,Vn as s,W as c,_r as l,a as u,dr as d,g as f,i as p,m as ee,mt as te,n as ne,ot as re,st as ie}from"./icons-BvYhTENi.js";import{t as m}from"./useTranslation-BGmCDuQI.js";import{n as h,t as g}from"./cn-rx4uumOJ.js";import{t as _}from"./src-49LUQhkG.js";import{l as ae}from"./workspaceSemantics-RaIRer76.js";import{t as v}from"./api-CCt9DRQm.js";import{I as y}from"./markdown-DAQZeY5V.js";import{A as oe,c as b,d as se,f as ce,h as le}from"./common-BHXgEvgk.js";import{d as x,f as S,u as ue}from"./index-BX-d2OBW.js";var C=e(o(),1),w=y();function T(e){return e==null?``:String(e)}function de({provider:e,modelId:t,current:n,catalog:r,onSaved:i,className:a}){let{t:o}=m(),[s,c]=(0,C.useState)(!1),[l,u]=(0,C.useState)({input:T(n?.input),output:T(n?.output),cacheRead:T(n?.cacheRead),cacheWrite:T(n?.cacheWrite)}),d=(0,C.useRef)(!1),f=`${n?.input??``}|${n?.output??``}|${n?.cacheRead??``}|${n?.cacheWrite??``}`;(0,C.useEffect)(()=>{d.current||u({input:T(n?.input),output:T(n?.output),cacheRead:T(n?.cacheRead),cacheWrite:T(n?.cacheWrite)})},[f]);let p=(0,C.useMemo)(()=>(r.input??0)>0||(r.output??0)>0?{input:String(r.input),output:String(r.output),cacheRead:String(r.cacheRead||r.input),cacheWrite:String(r.cacheWrite||r.input)}:{input:`—`,output:`—`,cacheRead:`—`,cacheWrite:`—`},[r.input,r.output,r.cacheRead,r.cacheWrite]),ee=async()=>{let r={};for(let e of[`input`,`output`,`cacheRead`,`cacheWrite`]){let t=l[e].trim();if(t===``)continue;let n=Number(t);if(!Number.isFinite(n)||n<0){h.error(o(`models.priceInvalid`,{field:o(`models.price_${e}`)}));return}r[e]=n}let a=Object.keys(r).length===0;if((n?.input??void 0)!==r.input||(n?.output??void 0)!==r.output||(n?.cacheRead??void 0)!==r.cacheRead||(n?.cacheWrite??void 0)!==r.cacheWrite){c(!0),d.current=!0;try{await v.models.update(e,t,{model:{pricing:a?null:r}}),h.success(o(`models.priceSaved`,{model:t})),i?.()}catch(e){h.error(e instanceof Error?e.message:o(`models.priceSaveFailed`))}finally{c(!1),window.setTimeout(()=>{d.current=!1},0)}}};return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-2 text-xs`,a),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:o(`models.priceHint`),children:o(`models.priceOverride`)}),[`input`,`output`,`cacheRead`,`cacheWrite`].map(e=>(0,w.jsxs)(`label`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`text-dark-tertiary whitespace-nowrap`,children:o(`models.price_${e}`)}),(0,w.jsx)(`input`,{type:`number`,min:0,step:`0.001`,inputMode:`decimal`,value:l[e],placeholder:p[e],disabled:s,onChange:t=>u(n=>({...n,[e]:t.target.value})),onBlur:()=>void ee(),onKeyDown:e=>{e.key===`Enter`&&ee()},className:g(`w-20 rounded border bg-dark-bg px-1.5 py-0.5 text-xs text-dark-text disabled:opacity-50`,l[e].trim()===``?`border-dark-border`:`border-accent-yellow`),title:`${o(`models.price_${e}`)} · ${o(`models.pricePerMillion`)}`})]},e)),(0,w.jsx)(`span`,{className:`text-badge text-dark-tertiary`,children:o(`models.pricePerMillion`)})]})}function fe({modelId:e,className:t}){let{t:n}=m(),r=b(e=>e.kinds),i=b(e=>e.entries),a=b(e=>e.saving),o=b(e=>e.saveEntry),s=b(e=>e.load);if((0,C.useEffect)(()=>{s()},[s]),r.length===0)return null;let c=e=>{let t=r.find(t=>t.id===e);return t?.labelKey?n(t.labelKey):e},l=async t=>{let r=i[t],a=r?.model===e,s=r?.model,l={...r??{}};a?(delete l.model,delete l.provider):l.model=e;let u=Object.values(l).some(e=>e!==void 0);await o(t,u?l:null)&&(a?h.success(n(`models.kindUnboundToast`,{kind:c(t),model:e})):s&&s!==e?h.success(n(`models.kindRebindToast`,{kind:c(t),from:s,to:e})):h.success(n(`models.kindBoundToast`,{kind:c(t),model:e})))};return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-1.5 text-xs`,t),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:n(`models.kindTagsHint`),children:n(`models.kindTags`)}),r.map(t=>{let r=i[t.id]?.model,o=r===e,s=!o&&r?r:null;return(0,w.jsx)(`button`,{type:`button`,disabled:a,onClick:()=>void l(t.id),title:s?n(`models.kindTakenHint`,{kind:c(t.id),model:s}):n(`models.kindTagsHint`),className:g(`px-1.5 py-0.5 rounded border transition-colors disabled:opacity-50`,o?`bg-accent-blue/20 border-accent-blue text-accent-blue font-medium`:s?`bg-dark-bg border-dark-border text-dark-tertiary`:`bg-dark-bg border-dark-border text-dark-muted hover:border-accent-blue/60 hover:text-dark-text`),children:c(t.id)},t.id)})]})}function pe({className:e}){let{t}=m(),n=b(e=>e.kinds),r=b(e=>e.entries);if(n.length===0)return null;let i=e=>{let r=n.find(t=>t.id===e);return r?.labelKey?t(r.labelKey):e},a=n.filter(e=>r[e.id]?.model).length;return(0,w.jsxs)(`div`,{className:g(`flex flex-wrap items-center gap-1.5 text-xs`,e),children:[(0,w.jsx)(`span`,{className:`text-dark-muted whitespace-nowrap`,title:t(`models.kindOverviewHint`),children:t(`models.kindOverview`)}),n.map(e=>{let n=r[e.id]?.model;return(0,w.jsxs)(`span`,{className:g(`inline-flex items-center gap-1 rounded border px-1.5 py-0.5`,n?`border-accent-blue/50 bg-accent-blue/10 text-accent-blue`:`border-dark-border bg-dark-bg text-dark-tertiary`),title:n?t(`models.kindOverviewBound`,{kind:i(e.id),model:n}):t(`models.kindOverviewInherit`,{kind:i(e.id)}),children:[(0,w.jsx)(`span`,{children:i(e.id)}),(0,w.jsx)(`span`,{className:`opacity-80`,children:`·`}),(0,w.jsx)(`span`,{className:`max-w-[12rem] truncate`,children:n||t(`models.kindInheritShort`)})]},e.id)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-tertiary tabular-nums`,children:t(`models.kindOverviewCount`,{bound:a,total:n.length})})]})}var E=46,D=132;function me({points:e,showValueLabels:t=!1}){let{t:n}=m();if(e.length===0)return(0,w.jsx)(`div`,{className:`flex h-32 items-center justify-center text-xs text-dark-muted`,children:n(`insights.noUsageData`)});let r=Math.max(...e.map(e=>e.totalTokens),1),i=Math.max(...e.filter(e=>e.priced).map(e=>e.costDollars),0),a=e.length*E,o=e=>e<=0?0:Math.max(2,e/r*94),s=e=>i<=0?110:110-e/i*94,c=[],l=!1;return e.forEach((e,t)=>{let n=t*E+E/2;if(!e.priced){l=!1;return}let r=s(e.costDollars);c.push(`${l?`L`:`M`} ${n.toFixed(1)} ${r.toFixed(1)}`),l=!0}),(0,w.jsxs)(`div`,{className:`overflow-x-auto`,children:[(0,w.jsxs)(`svg`,{width:a,height:D,className:`min-w-full`,role:`img`,"aria-label":n(`insights.usageTrend`),children:[e.map((e,r)=>{let i=r*E+E/2,a=o(e.totalTokens);return(0,w.jsxs)(`g`,{children:[(0,w.jsx)(`rect`,{x:i-11,y:110,width:22,height:1,className:`fill-dark-border`}),a>0&&(0,w.jsx)(`rect`,{"data-testid":`daily-bar`,"data-day":e.day,x:i-11,y:110-a,width:22,height:a,rx:2,className:`fill-accent-blue/70`,children:(0,w.jsx)(`title`,{children:`${e.day} · ${x(e.totalTokens)} token · ${e.priced?S(e.costDollars):n(`insights.costUnknown`)}`})}),t&&e.totalTokens>0&&(0,w.jsx)(`text`,{"data-testid":`daily-value`,x:i,y:110-a-4,textAnchor:`middle`,className:e.priced?`fill-dark-text`:`fill-dark-muted`,style:{fontSize:9},children:e.priced?S(e.costDollars):`—`}),(0,w.jsx)(`text`,{x:i,y:123,textAnchor:`middle`,className:`fill-dark-muted`,style:{fontSize:9},children:e.day.slice(5)})]},e.day)}),c.length>0&&(0,w.jsx)(`path`,{d:c.join(` `),fill:`none`,className:`stroke-accent-green`,strokeWidth:1.6,strokeLinejoin:`round`,strokeLinecap:`round`})]}),(0,w.jsxs)(`div`,{className:`mt-1 flex items-center gap-3 text-badge text-dark-muted`,children:[(0,w.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`inline-block h-2 w-2 rounded-sm bg-accent-blue/70`}),n(`insights.legendTokens`)]}),(0,w.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`span`,{className:`inline-block h-0.5 w-3 bg-accent-green`}),n(`insights.legendCost`)]})]})]})}var he=14;function O(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)}`}function ge(e){if(!e||typeof e!=`object`)return null;let t=e,n=typeof t.day==`string`?t.day:typeof t.date==`string`?t.date:void 0;if(!n)return null;let r=e=>typeof e==`number`&&Number.isFinite(e)?e:0;return{day:n,costDollars:r(t.costDollars),requests:r(t.requests),inputTokens:r(t.inputTokens),outputTokens:r(t.outputTokens),totalTokens:r(t.totalTokens),cacheReadTokens:r(t.cacheReadTokens),cacheWriteTokens:r(t.cacheWriteTokens),priced:t.priced===!0}}function _e({className:e}){let{t:n}=m(),[r,i]=(0,C.useState)(null),[a,o]=(0,C.useState)(!1),[s,c]=(0,C.useState)(null),[l,u]=(0,C.useState)(0);(0,C.useEffect)(()=>{let e=()=>u(e=>e+1);return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[]),(0,C.useEffect)(()=>{let e=!1;return o(!0),c(null),(async()=>{try{let t=await v.observability.costs();if(e)return;t.success&&t.data?i(t.data):c(t.error||n(`models.usageLoadFailed`))}catch(t){e||c(t instanceof Error?t.message:n(`models.usageLoadFailed`))}finally{e||o(!1)}})(),()=>{e=!0}},[l]);let d=(0,C.useMemo)(()=>{let e=new Map;for(let t of r?.daily??[]){let n=ge(t);n&&e.set(n.day,n)}let t=[],n=new Date;for(let r=13;r>=0;r--){let i=O(new Date(n.getFullYear(),n.getMonth(),n.getDate()-r)),a=e.get(i);t.push(a?{...a,empty:!1}:{day:i,costDollars:0,requests:0,inputTokens:0,outputTokens:0,totalTokens:0,cacheReadTokens:0,cacheWriteTokens:0,priced:!1,empty:!0})}return t},[r]),f=(0,C.useMemo)(()=>{let e=0,t=0,n=0,r=0;for(let i of d)e+=i.totalTokens,t+=i.requests,n+=i.cacheReadTokens,r+=i.inputTokens;return{tokens:e,requests:t,inputTokens:r,cacheReadTokens:n}},[d]),p=(0,C.useMemo)(()=>{let e=[...r?.byModel??[]].sort((e,t)=>t.totalCostDollars-e.totalCostDollars),t=Math.max(1e-9,...e.map(e=>e.totalCostDollars));return{rows:e.slice(0,5),maxCost:t}},[r]),ee=!!(r&&(r.totalCostDollars>0||f.tokens>0||(r.byModel?.length??0)>0));return(0,w.jsxs)(`div`,{className:g(`rounded-lg border border-dark-border bg-dark-surface/40 p-3`,e),children:[(0,w.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,w.jsx)(`h3`,{className:`text-sm font-medium`,children:n(`models.usageTitle`)}),(0,w.jsxs)(`button`,{type:`button`,onClick:()=>u(e=>e+1),disabled:a,className:`inline-flex items-center gap-1 rounded border border-dark-border px-2 py-0.5 text-xs text-dark-muted hover:text-dark-text disabled:opacity-50`,title:n(`models.usageRefresh`),children:[(0,w.jsx)(t,{size:11,className:a?`animate-spin`:void 0}),n(`models.usageRefresh`)]})]}),s&&(0,w.jsx)(`div`,{className:`text-xs text-accent-red`,children:s}),!s&&!ee&&!a&&(0,w.jsx)(`div`,{className:`py-6 text-center text-xs text-dark-muted`,children:n(`models.usageEmpty`)}),ee&&(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`mb-3 grid grid-cols-2 gap-2 sm:grid-cols-4`,children:[(0,w.jsx)(k,{label:n(`models.usageTotalCost`),value:S(r.totalCostDollars),tone:`cost`}),(0,w.jsx)(k,{label:n(`models.usageWindowTokens`,{days:he}),value:x(f.tokens)}),(0,w.jsx)(k,{label:n(`models.usageWindowRequests`,{days:he}),value:String(f.requests)}),(0,w.jsx)(k,{label:n(`models.usageCacheHitRate`),value:ue(f.cacheReadTokens,f.inputTokens,0)})]}),(0,w.jsx)(`div`,{className:`mb-1 flex items-baseline justify-between`,children:(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,children:n(`models.usageDailyTitle`)})}),(0,w.jsx)(me,{points:d,showValueLabels:!0}),p.rows.length>0&&(0,w.jsxs)(`div`,{className:`mt-3 border-t border-dark-border/60 pt-2`,children:[(0,w.jsx)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:n(`models.usageTopModels`)}),(0,w.jsx)(`div`,{className:`space-y-1`,children:p.rows.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,w.jsx)(`span`,{className:`w-40 shrink-0 truncate text-dark-text`,title:e.modelId,children:e.modelId}),(0,w.jsx)(`div`,{className:`h-2 flex-1 overflow-hidden rounded-full bg-dark-border/40`,children:(0,w.jsx)(`div`,{className:`h-full rounded-full bg-accent-purple/70`,style:{width:`${Math.max(1,e.totalCostDollars/p.maxCost*100)}%`}})}),(0,w.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-accent-yellow`,children:S(e.totalCostDollars)}),(0,w.jsx)(`span`,{className:`w-20 shrink-0 text-end tabular-nums text-dark-muted`,children:x(e.totalInputTokens+e.totalOutputTokens)}),(0,w.jsxs)(`span`,{className:`w-16 shrink-0 text-end tabular-nums text-dark-tertiary`,children:[e.requestCount,`×`]})]},e.modelId))})]}),d.some(e=>!e.priced&&!e.empty)&&(0,w.jsx)(`div`,{className:`mt-2 text-badge text-accent-yellow`,children:n(`models.usageCostUnknownHint`)})]})]})}function k({label:e,value:t,tone:n}){return(0,w.jsxs)(`div`,{className:`rounded border border-dark-border/60 bg-dark-bg px-2 py-1.5`,children:[(0,w.jsx)(`div`,{className:`text-badge text-dark-muted truncate`,children:e}),(0,w.jsx)(`div`,{className:g(`text-sm font-semibold tabular-nums`,n===`cost`?`text-accent-yellow`:`text-dark-text`),children:t})]})}function ve(){let[e,t]=(0,C.useState)([]),[n,r]=(0,C.useState)(`1.0`),[i,a]=(0,C.useState)(!0),[o,s]=(0,C.useState)(!0),[c,l]=(0,C.useState)(null),u=(0,C.useCallback)(async()=>{s(!0),l(null);try{let e=await v.providers.presets();e.success&&e.data?(t(Array.isArray(e.data.providers)?e.data.providers:[]),r(e.data.version||`1.0`),a(e.data.customSupported!==!1)):l(e.error||`获取 Provider 列表失败`)}catch(e){l(e instanceof Error?e.message:`未知错误`)}finally{s(!1)}},[]);return(0,C.useEffect)(()=>{u()},[u]),{presets:e,loading:o,error:c,version:n,customSupported:i,reload:u}}var ye=[{key:`global`,labelKey:`chat.globalDefault`,color:`text-accent-red`,bg:`bg-accent-red/20`},{key:`goal`,labelKey:`chat.goalDefault`,color:`text-accent-purple`,bg:`bg-accent-purple/20`}];function be(e){let t=Number((e??``).trim());return Number.isFinite(t)&&t>0?Math.floor(t):null}var xe={providerKey:``,apiKeys:[],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,setDefault:!1,modelOverrides:{}},Se=_,Ce={"openai-chat-completions":`OpenAI Chat`,"openai-completions":`OpenAI Compatible`,"openai-responses":`OpenAI Responses`,"anthropic-messages":`Anthropic Messages`,"codex-responses":`Codex (本机登录)`,"claude-code":`Claude Code (本机登录)`};function A(e){return e.trim().split(`|`)[0].trim()}function we(e){let t=e.toLowerCase();return t.startsWith(`claude-code://`)||t.includes(`/backend-api/codex`)?t.startsWith(`claude-code://`)?`claude-code`:`codex-responses`:t.includes(`/anthropic`)||t.includes(`/coding`)||t.includes(`/claude`)||t.includes(`/messages`)?`anthropic-messages`:t.includes(`/responses`)?`openai-responses`:`openai-completions`}function Te(e){if(!e)return{};let t={};for(let n of e.models){let r={};n.apiType&&n.apiType!==e.apiType&&(r.apiType=n.apiType),n.baseUrl&&(r.baseUrl=n.baseUrl),typeof n.contextWindow==`number`&&n.contextWindow!==e.contextWindow&&(r.maxInput=String(n.contextWindow)),typeof n.maxTokens==`number`&&n.maxTokens!==e.maxTokens&&(r.maxOutput=String(n.maxTokens)),Object.keys(r).length>0&&(t[n.id]=r)}return t}var Ee={"opencode-free":5,"opencode-go":6,commandcode:7,deepseek:10,moonshotai:20,"moonshotai-cn":21,"kimi-for-coding":22,zhipuai:30,zai:31,"alibaba-cn":40,alibaba:41,minimax:50,"minimax-cn":51,moark:60,siliconflow:70,"siliconflow-cn":71,"stepfun-ai":80,stepfun:81,modelscope:90,openai:100,anthropic:110,google:120,"google-vertex":121,meta:130,mistral:140,groq:150,xai:160,cohere:170,openrouter:180,huggingface:190};function De(){let{presets:e,loading:o,reload:g}=ve(),{t:_}=m(),[y,b]=(0,C.useState)([]),[x,S]=(0,C.useState)(null),[ue,T]=(0,C.useState)(!0),[E,D]=(0,C.useState)(null),[me,he]=(0,C.useState)(null),[O,ge]=(0,C.useState)(null),[k,De]=(0,C.useState)([]),[ke,M]=(0,C.useState)(!1),[Ae,N]=(0,C.useState)(`select`),[P,F]=(0,C.useState)(null),[I,L]=(0,C.useState)(xe),[je,R]=(0,C.useState)(``),[Me,Ne]=(0,C.useState)(!1),[Pe,z]=(0,C.useState)(null),[Fe,B]=(0,C.useState)(!1),[Ie,Le]=(0,C.useState)(!1),[V,Re]=(0,C.useState)(``),[ze,Be]=(0,C.useState)(!1),[H,U]=(0,C.useState)([]),[Ve,W]=(0,C.useState)(new Set),[He,G]=(0,C.useState)(null),[Ue,K]=(0,C.useState)(``),[We,Ge]=(0,C.useState)(!1),[Ke,qe]=(0,C.useState)(!1),[q,J]=(0,C.useState)(null),Je=(0,C.useMemo)(()=>{let e=Ue.trim().toLowerCase();return e?H.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)):H},[H,Ue]),Y=(0,C.useCallback)(async()=>{try{let e=await v.config.provider.get();e.success&&e.data&&(ge(e.data),De(Array.isArray(e.data.entries)?e.data.entries:[]))}catch{}},[]),X=(0,C.useCallback)(async()=>{T(!0),D(null);try{let[e,t]=await Promise.all([v.models.list(),v.system.status()]);if(await Y(),e.success&&e.data&&Array.isArray(e.data.models)&&b(e.data.models),t.success&&t.data){let e=t.data.models||{total:0,online:0,offline:0};S({overallStatus:e.offline===0?`healthy`:e.online>0?`degraded`:`unhealthy`,healthRate:e.total>0?e.online/e.total:0,healthyInstances:e.online,totalInstances:e.total,totalRequests:0})}}catch{D(_(`models.loadFailed`))}finally{T(!1)}},[Y,_]);(0,C.useEffect)(()=>{X()},[X]),(0,C.useEffect)(()=>{let e=()=>{X(),Y()};return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[X,Y]);let Ye=(0,C.useCallback)(e=>`${e.provider}:${e.id}`,[]),Z=(0,C.useMemo)(()=>{let t=[...e];return t.find(e=>e.key===`custom`)||t.push({key:`custom`,name:`Custom`,baseUrl:``,apiType:`openai-completions`,defaultModel:``,isCustom:!0}),t},[e]),Xe=(0,C.useMemo)(()=>[...Z].sort((e,t)=>{if(e.isCustom)return-1;if(t.isCustom)return 1;let n=Ee[e.key],r=Ee[t.key];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.name.localeCompare(t.name):1:-1}),[Z]),Ze=(0,C.useMemo)(()=>{let e=V.trim().toLowerCase();return e?Xe.filter(t=>t.name.toLowerCase().includes(e)||t.key.toLowerCase().includes(e)||(t.defaultModel||``).toLowerCase().includes(e)||(t.baseUrl||``).toLowerCase().includes(e)||(t.models||[]).some(t=>String(t).toLowerCase().includes(e))):Xe},[Xe,V]),Q=(0,C.useMemo)(()=>{let e=O?.providers||{},t=new Set(Z.map(e=>e.key)),n=Object.entries(e).filter(([e])=>!t.has(e));if(n.length!==0)return{keys:n.map(([e])=>e),modelCount:n.reduce((e,[,t])=>e+(t.modelCount||0),0),hasApiKey:n.some(([,e])=>e.hasApiKey),baseUrl:n.find(([,e])=>e.baseUrl)?.[1]?.baseUrl||``,apiType:n.find(([,e])=>e.apiType)?.[1]?.apiType||`openai-completions`}},[O,Z]),$=P===`custom`?I.providerKey.trim():P||``,Qe=(0,C.useMemo)(()=>$?y.filter(e=>e.provider===$):[],[y,$]),$e=(0,C.useMemo)(()=>{let e=new Map;for(let t of y)e.has(t.provider)||e.set(t.provider,[]),e.get(t.provider).push(t);for(let t of k)e.has(t.key)||e.set(t.key,[]);let t=[...e.keys()];return t.sort((e,t)=>{let n=Ee[e],r=Ee[t];return n!==void 0&&r!==void 0?n-r:n===void 0?r===void 0?e.localeCompare(t):1:-1}),t.map(t=>({provider:t,models:e.get(t)||[]}))},[y,k]),et=(0,C.useCallback)(e=>{let t=O?.providers?.[e.key],n=k.find(t=>t.key===e.key),r=y.filter(t=>t.provider===e.key).map(e=>e.id),i=e.models?.slice(0,3).join(`, `)||e.defaultModel,a=r.length>0?r.join(`, `):i;F(e.key),R(``),L({providerKey:e.key,apiKeys:[``],modelIds:a,baseUrl:t?.baseUrl||e.baseUrl,apiType:t?.apiType||e.apiType,fullPath:t?.fullPath===!0,setDefault:O?.defaultProvider!==e.key,modelOverrides:Te(n)}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[y,O,k]),tt=(0,C.useCallback)(e=>{let t=O?.providers?.[e],n=k.find(t=>t.key===e),r=y.filter(t=>t.provider===e).map(e=>e.id).join(`, `);F(`custom`),R(e),L({providerKey:e,apiKeys:[``],modelIds:r,baseUrl:t?.baseUrl||``,apiType:t?.apiType||``,fullPath:t?.fullPath===!0,setDefault:O?.defaultProvider!==e,modelOverrides:Te(n)}),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[O,y,k]),nt=(0,C.useCallback)(()=>{F(`custom`),R(``),L({providerKey:``,apiKeys:[``],modelIds:``,baseUrl:``,apiType:``,fullPath:!1,setDefault:!O?.configured,modelOverrides:{}}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[O]),rt=(0,C.useCallback)(async()=>{let e=I.baseUrl;if(!e){G(_(`models.baseUrlRequired`));return}Be(!0),G(null),U([]),W(new Set);let t=Z.find(e=>e.key===P)||null,n=!!t&&!t.isCustom&&(I.baseUrl||``)===t.baseUrl&&I.fullPath!==!0;try{let r=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,i=r.replace(/[^\x00-\xFF]/g,``);i!==r&&h.warning(_(`models.apiKeySanitized`));let a=await v.models.fetch(e,i,I.fullPath===!0,n?t.key:void 0);if(a.success&&a.data?.models){let e=a.data.models;U(e),Ge(!0);let t={};for(let n of e)n.protocol&&n.protocol!==I.apiType&&(t[n.id]={apiType:n.protocol});Object.keys(t).length>0&&L(e=>{let n={...e.modelOverrides};for(let[e,r]of Object.entries(t))n[e]?.apiType||(n[e]={...n[e]||{},...r});return{...e,modelOverrides:n}});let n=new Set(e.map(e=>e.id)),r=I.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),i=r.filter(e=>n.has(e.split(`|`)[0].trim())),o=r.filter(e=>!n.has(e.split(`|`)[0].trim()));if(W(new Set(i.map(e=>e.split(`|`)[0].trim()))),o.length>0){let e=o.map(e=>e.split(`|`)[0].trim());L(e=>({...e,modelIds:i.join(`, `)})),h.warning(_(`models.autoRemovedMissingModels`,{models:e.join(`, `)}))}h.success(_(`models.fetchedCount`,{n:e.length}))}else G(a.error||_(`models.fetchFailed`))}catch(e){G(e instanceof Error?e.message:_(`models.requestFailed`))}finally{Be(!1)}},[I.baseUrl,I.apiKeys,I.modelIds,I.apiType,I.fullPath,P,Z,_]),it=(0,C.useCallback)((e,t,n)=>{if(n!==`supported`&&n!==`unsupported`&&n!==`unknown`)return;let r=n,i=r===`supported`?`Supported`:r===`unsupported`?`Unsupported`:`Unknown`;return{id:e,verdict:r,group:_(`models.${t}Label`),label:_(`models.${t}${i}`),hint:r===`supported`?``:_(`models.${t}Hint${i}`)}},[_]),at=(0,C.useCallback)(async()=>{let e=I.baseUrl;if(!e){J({ok:!1,message:_(`models.baseUrlRequired`)});return}let t=A((I.modelIds||``).split(`,`)[0]||``);qe(!0),J(null);try{let n=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean)[0]||``,r=n.replace(/[^\x00-\xFF]/g,``);r!==n&&h.warning(_(`models.apiKeySanitized`));let i=await v.providers.testConnection(e,r,t);if(i.success&&i.data?.reachable){let e=i.data,t={};e.resolvedBaseUrl&&e.resolvedBaseUrl!==I.baseUrl&&(t.baseUrl=e.resolvedBaseUrl),e.detectedApiType&&I.apiType===``&&(t.apiType=e.detectedApiType),Object.keys(t).length>0&&L(e=>({...e,...t}));let n=[];t.baseUrl&&n.push(_(`models.baseUrlAutoCompleted`,{url:t.baseUrl})),t.apiType&&n.push(_(`models.apiTypeAutoSelected`,{type:Ce[t.apiType]}));let r=e.message||_(`models.connectionSuccess`),a=[it(`tools`,`toolProbe`,e.tools?.verdict),it(`jsonMode`,`jsonProbe`,e.jsonMode?.verdict)].filter(e=>e!==void 0);J({ok:!0,message:n.length>0?_(`models.connectionSuccessWithHints`,{message:r,hints:n.join(_(`models.hintJoiner`))}):r,probes:a})}else J({ok:!1,message:i.data?.message||i.error||_(`models.connectionFailed`)})}catch(e){J({ok:!1,message:e instanceof Error?e.message:_(`models.requestFailed`)})}finally{qe(!1)}},[I.baseUrl,I.apiKeys,I.apiType,I.modelIds,it,_]),ot=(0,C.useCallback)(e=>{let t=new Set(Ve);t.has(e)?t.delete(e):t.add(e),W(t),L(e=>({...e,modelIds:Array.from(t).join(`, `)}))},[Ve]),st=(0,C.useCallback)(e=>{let t=I.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean),n=t.some(t=>A(t)===e.id)?t.filter(t=>A(t)!==e.id):[...t,e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id];L(e=>({...e,modelIds:n.join(`, `)}));let r=new Set(H.map(e=>e.id));W(new Set(n.map(A).filter(e=>r.has(e))))},[I.modelIds,H]),[ct,lt]=(0,C.useState)(!1),[ut,dt]=(0,C.useState)(``),[ft,pt]=(0,C.useState)([]),[mt,ht]=(0,C.useState)(!1),[gt,_t]=(0,C.useState)(null),[vt,yt]=(0,C.useState)(!1),[bt,xt]=(0,C.useState)(!0),St=(0,C.useCallback)(()=>{dt(``),pt([]),_t(null),lt(!0),Ct(``,{reason:!1,tool:!0})},[]),Ct=(0,C.useCallback)(async(e,t)=>{ht(!0),_t(null);try{let n=await v.models.catalogSearch({q:e,reasoning:t?.reason??!1,toolCall:t?.tool??!0,limit:30});n.success&&n.data?pt(n.data.hits||[]):(_t(n.error||_(`models.catalogSearchFailed`)),pt([]))}catch(e){_t(e instanceof Error?e.message:_(`models.requestFailed`)),pt([])}finally{ht(!1)}},[_]),wt=(0,C.useCallback)(e=>{L(t=>{let n=t.modelIds.split(`,`).map(e=>e.trim()).filter(Boolean);if(n.includes(e.model.id))return t;let r=e.model.limit?.context,i=e.model.limit?.output,a={...t.modelOverrides[e.model.id]||{},...typeof r==`number`&&r>0?{maxInput:String(r)}:{},...typeof i==`number`&&i>0?{maxOutput:String(i)}:{}};return{...t,modelIds:[...n,e.model.id].join(`, `),modelOverrides:Object.keys(a).length>0?{...t.modelOverrides,[e.model.id]:a}:t.modelOverrides}}),h.success(_(`models.addedModel`,{id:e.model.id}))},[_]),[Tt,Et]=(0,C.useState)(null),Dt=(0,C.useCallback)(e=>{dt(e),Tt&&clearTimeout(Tt),Et(setTimeout(()=>{Ct(e,{reason:vt,tool:bt})},300))},[Tt,vt,bt,Ct]),Ot=async e=>{let t=e.provider,n=e.id,r=e.enabled!==!1,i=e.name||n,a=e=>r&&/default model/i.test(e);try{let e=await v.models.toggle(t,n);if(e.success){await X();return}let r=e.error||``;a(r)?h.error(_(`models.defaultModelDisableBlocked`,{name:i})):h.error(r||_(`models.operationFailed`))}catch(e){let t=e instanceof Error?e.message:``;a(t)?h.error(_(`models.defaultModelDisableBlocked`,{name:i})):h.error(t||_(`models.operationFailed`))}},kt=async e=>{let t=Ye(e);he(t);try{await v.models.test(e.id),await X()}finally{he(null)}},At=async(e,t)=>{if(confirm(_(`models.deleteModelConfirm`,{id:t})))try{(await v.models.delete(e,t)).success&&await X()}catch{}},jt=(0,C.useCallback)(e=>{let t=k.find(t=>t.key===e),n=Z.find(t=>t.key===e),r=!n||n.isCustom,i=O?.providers?.[e];F(r?`custom`:e),R(r?e:``),L({providerKey:e,apiKeys:[``],modelIds:t?.models.map(e=>e.name&&e.name!==e.id?`${e.id}|${e.name}`:e.id).join(`, `)||``,baseUrl:t?.baseUrl||i?.baseUrl||n?.baseUrl||``,apiType:t?.apiType||i?.apiType||n?.apiType||``,fullPath:t?.fullPath===!0||i?.fullPath===!0,setDefault:O?.defaultProvider!==e,modelOverrides:Te(t)}),N(`form`),M(!0),z(null),B(!1),U([]),W(new Set),G(null),K(``)},[k,Z,O]),Mt=e=>{jt(e.provider)},Nt=async()=>{let e=Z.find(e=>e.key===P)||null,t=P===`custom`?I.providerKey.trim():e?.key||``;if(!t){z(_(`models.providerNameRequired`));return}let n=(I.apiKeys||[]).map(e=>e.trim()).filter(Boolean),r=!!O?.providers?.[t]?.hasApiKey;if(n.length===0&&!r){z(_(`models.apiKeyRequired`));return}let i=e||{key:t,name:t,baseUrl:``,apiType:`openai-completions`,defaultModel:``},a=n.map(e=>e.replace(/[^\x00-\xFF]/g,``)).filter(Boolean),o=H.length>0?new Set(H.map(e=>e.id)):null,s=(I.modelIds||i.defaultModel||``).split(`,`).map(e=>e.trim()).filter(Boolean),c=o?s.filter(e=>o.has(e.split(`|`)[0].trim())):s,l=o?s.filter(e=>!o.has(e.split(`|`)[0].trim())):[];l.length>0&&h.warning(_(`models.autoSkippedMissingModels`,{models:l.map(e=>e.split(`|`)[0].trim()).join(`, `)}));let u=c.map(A).filter(Boolean),d=new Set;for(let e of y)e.provider!==t||u.includes(e.id)||(e.isGlobalDefault&&d.add(`global`),e.isGoalDefault&&d.add(`goal`));let f={provider:t,name:t,baseUrl:I.baseUrl||i.baseUrl,fullPath:I.fullPath===!0,apiType:I.apiType||we(I.baseUrl||i.baseUrl)||i.apiType,models:c.map((t,n)=>{let r=t.trim().split(`|`).map(e=>e.trim()).filter(Boolean),i=r[0]||``,a=I.modelOverrides[i],o=a?.apiType||e?.modelApiTypes?.[i];return{id:i,name:r[1]||i,aliases:r.length>2?r.slice(2):void 0,enabled:!0,priority:10+n,...o?{apiType:o}:{},...a?.baseUrl?{baseUrl:a.baseUrl}:{},contextWindow:be(a?.maxInput),maxTokens:be(a?.maxOutput)}}).filter(e=>e.id.length>0)};a.length>0&&(f.apiKeys=a),(!O?.configured||I.setDefault)&&(f.setDefault=!0),Ne(!0),z(null);try{let e=await v.config.provider.save(f);if(e.success){if(d.size>0){let e=u[0]||``,n={};if(e){let r=`${t}:${e}`;for(let e of d)n[e]=r}else{let e=y.find(e=>e.provider!==t);for(let t of d)t===`goal`?n[t]=null:e&&(n[t]=`${e.provider}:${e.id}`)}Object.keys(n).length>0&&(await v.models.setDefaults(n)).success&&h.success(_(`models.defaultsAutoUpdated`))}M(!1),N(`select`),F(null),R(``),await Y(),await X()}else z(e.error||_(`models.saveFailed`))}catch(e){z(e instanceof Error?e.message:_(`models.unknownError`))}finally{Ne(!1)}},Pt=async e=>{if(confirm(_(`models.removeConfirm`,{providerKey:e})))try{await v.config.provider.delete(e),await Y(),await X()}catch{}},Ft=e=>{switch(e){case`online`:return`text-accent-green`;case`offline`:return`text-dark-muted`;case`error`:return`text-accent-red`;default:return`text-dark-muted`}},It=e=>{switch(e){case`online`:return(0,w.jsx)(p,{size:14});case`offline`:return(0,w.jsx)(u,{size:14});case`error`:return(0,w.jsx)(ee,{size:14});default:return(0,w.jsx)(u,{size:14})}},Lt=(0,C.useMemo)(()=>Z.find(e=>e.key===P)||null,[P,Z]);return ue?(0,w.jsx)(`div`,{className:`h-64 overflow-y-auto p-4`,role:`status`,"aria-label":_(`models.loading`),children:(0,w.jsx)(ce,{count:4})}):E?(0,w.jsx)(`div`,{className:`flex h-64 items-center justify-center text-accent-red`,children:E}):(0,w.jsx)(`div`,{className:`ui-page flex-1 min-h-0`,children:(0,w.jsxs)(`div`,{className:`ui-page-inner space-y-6`,children:[(0,w.jsx)(`div`,{className:`text-meta text-dark-muted`,children:_(`models.kindBindingHint`)}),(0,w.jsx)(pe,{}),(0,w.jsx)(_e,{}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,w.jsx)(`h2`,{className:`text-base font-semibold`,children:_(`models.providerConfig`)}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsxs)(`button`,{onClick:async()=>{try{await v.providers.refresh(),h.success(_(`models.providerListRefreshed`)),Le(!0),await g(),setTimeout(()=>{g()},3e3)}catch{h.error(_(`models.refreshFailed`))}},className:`btn btn-secondary px-3 py-2 text-xs`,title:_(`models.refreshListTitle`),children:[(0,w.jsx)(t,{size:12}),_(`models.refreshList`)]}),(0,w.jsxs)(`button`,{onClick:()=>{Ie&&Re(``),Le(e=>!e)},className:`btn btn-accent px-3 py-2 text-xs`,children:[Ie?(0,w.jsx)(l,{size:12}):(0,w.jsx)(re,{size:12}),_(Ie?`models.collapse`:`models.addProvider`)]})]})]}),Ie&&(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`relative mb-3 max-w-md`,children:[(0,w.jsx)(c,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:V,onChange:e=>Re(e.target.value),className:`w-full ps-8 pe-8 py-1.5 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:_(`models.providerSearchPlaceholder`)}),V&&(0,w.jsx)(`button`,{onClick:()=>Re(``),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:_(`models.clear`),"aria-label":_(`models.clearSearch`),children:(0,w.jsx)(ne,{size:13})})]}),(0,w.jsx)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-5 gap-3 max-h-[420px] overflow-y-auto custom-scrollbar pe-1`,children:o?Array.from({length:10}).map((e,t)=>(0,w.jsxs)(`div`,{className:`ui-card p-4`,"aria-hidden":`true`,children:[(0,w.jsx)(se,{variant:`text`,width:`45%`,height:16,className:`mb-2`}),(0,w.jsx)(se,{variant:`text`,width:`85%`,height:11,className:`mb-1.5`}),(0,w.jsx)(se,{variant:`text`,width:`70%`,height:11,className:`mb-1.5`}),(0,w.jsx)(se,{variant:`text`,width:`55%`,height:11})]},`preset-skeleton-${t}`)):Ze.length===0?(0,w.jsxs)(`div`,{className:`col-span-full border border-accent-red/30 bg-accent-red/10 rounded-lg p-4 text-center`,children:[(0,w.jsx)(`div`,{className:`text-sm text-accent-red font-medium mb-1`,children:_(`models.noMatchingProviders`)}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted mb-3`,children:_(`models.noMatchingProvidersHint`,{query:V})}),(0,w.jsxs)(`div`,{className:`flex items-center justify-center gap-2`,children:[(0,w.jsxs)(`button`,{onClick:()=>Re(``),className:`inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-dark-border rounded hover:bg-dark-hover`,children:[(0,w.jsx)(ne,{size:12}),_(`models.clearSearch`)]}),(0,w.jsx)(oe,{variant:`accent`,size:`sm`,leftIcon:(0,w.jsx)(re,{size:12}),onClick:nt,children:_(`models.addCustomProvider`)})]})]}):Ze.map(e=>{let t=e.key===`custom`,n=t?Q:O?.providers?.[e.key],r=n?.hasApiKey,i=t?!!O?.defaultProvider&&(Q?.keys||[]).includes(O.defaultProvider):O?.defaultProvider===e.key;return(0,w.jsxs)(`div`,{className:`reveal-on-scroll ui-card-interactive text-start p-4 relative ${r?`border-accent-green/30 bg-dark-surface hover:border-accent-green/50`:`border-dark-border bg-dark-surface hover:border-dark-hover`}`,children:[(0,w.jsxs)(`div`,{onClick:()=>e.key===`custom`?nt():et(e),className:`cursor-pointer`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-1`,children:[(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:e.name}),r&&(0,w.jsx)(d,{size:14,className:`text-accent-green`})]}),(0,w.jsxs)(`div`,{className:`text-badge text-dark-muted space-y-0.5`,children:[(0,w.jsx)(`div`,{className:`truncate`,children:t?n?.baseUrl||_(`models.customBaseUrl`):e.baseUrl||_(`models.customBaseUrl`)}),(0,w.jsx)(`div`,{className:`truncate`,children:t&&Q?`${Q.keys.join(`, `)}`:e.defaultModel||_(`models.noDefaultModel`)}),(0,w.jsxs)(`div`,{children:[n?_(`models.configuredCount`,{n:n.modelCount}):_(`models.availableCount`,{n:e.models?.length||0}),e.models&&e.models.length>0&&!n&&(0,w.jsx)(`span`,{className:`text-accent-blue`,children:` ✓`})]})]}),i&&(0,w.jsx)(`div`,{className:`mt-1 text-badge text-accent-red`,children:_(`models.defaultProviderBadge`)})]}),r&&e.key!==`custom`&&(0,w.jsx)(`button`,{onClick:t=>{t.stopPropagation(),Pt(e.key)},className:`absolute top-1.5 end-1.5 p-1 rounded text-dark-muted hover:bg-accent-red/10 hover:text-accent-red transition-colors`,title:_(`models.deleteProvider`),"aria-label":_(`models.deleteProviderNamed`,{name:e.name}),children:(0,w.jsx)(f,{size:13})})]},e.key)})})]})]}),x&&(0,w.jsxs)(`div`,{className:`grid grid-cols-4 gap-4`,children:[(0,w.jsx)(Oe,{title:_(`models.overallStatus`),value:x.totalInstances===0?_(`models.notConfigured`):x.overallStatus===`healthy`?_(`models.healthy`):x.overallStatus===`degraded`?_(`models.degraded`):_(`models.abnormal`),color:x.totalInstances===0?`blue`:x.overallStatus===`healthy`?`green`:x.overallStatus===`degraded`?`yellow`:`red`}),(0,w.jsx)(Oe,{title:_(`models.healthRate`),value:x.totalInstances===0?`N/A`:`${(x.healthRate*100).toFixed(0)}%`,color:x.totalInstances===0?`blue`:x.healthRate>.8?`green`:x.healthRate>.5?`yellow`:`red`}),(0,w.jsx)(Oe,{title:_(`models.onlineInstances`),value:x.totalInstances===0?_(`models.none`):`${x.healthyInstances}/${x.totalInstances}`,color:x.healthyInstances>0?`green`:`red`}),(0,w.jsx)(Oe,{title:_(`models.totalRequests`),value:x.totalRequests>0?x.totalRequests.toLocaleString():`0`,color:`blue`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,w.jsx)(`h3`,{className:`text-sm font-medium`,children:_(`models.configuredModels`)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,title:_(`models.actIsGlobalHint`),children:_(`models.actIsGlobalHint`)})]}),(0,w.jsxs)(`div`,{className:`space-y-4 max-h-[640px] overflow-y-auto custom-scrollbar pe-1`,children:[$e.map(e=>{let n=k.find(t=>t.key===e.provider),r=O?.providers?.[e.provider];return(0,w.jsxs)(`div`,{className:`rounded-lg border border-dark-border overflow-hidden`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-2 bg-dark-bg border-b border-dark-border`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 min-w-0 flex-wrap`,children:[(0,w.jsx)(`span`,{className:`text-xs font-semibold whitespace-nowrap text-accent-purple`,children:e.provider}),O?.defaultProvider===e.provider&&(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:_(`models.defaultShort`)}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:r?.baseUrl||n?.baseUrl||``}),(0,w.jsx)(`span`,{className:`text-badge text-dark-muted whitespace-nowrap`,children:n?.apiType||r?.apiType||``}),r?.hasApiKey||n?.hasApiKey?(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green whitespace-nowrap`,children:_(`models.hasKey`)}):(0,w.jsx)(`span`,{className:`text-avatar px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap`,children:_(`models.noKey`)})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,w.jsx)(`button`,{onClick:()=>jt(e.provider),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:_(`models.editProviderNamed`,{name:e.provider}),children:(0,w.jsx)(te,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>Pt(e.provider),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:_(`models.deleteProviderNamed`,{name:e.provider}),children:(0,w.jsx)(f,{size:13})})]})]}),(0,w.jsxs)(`div`,{className:`space-y-2 p-2 bg-dark-surface/40`,children:[e.models.map(r=>{let i=n?.models.find(e=>e.id===r.id),a=!!(i?.apiType&&i.apiType!==n?.apiType);return(0,w.jsx)(`div`,{className:`bg-dark-surface border rounded-lg p-3 ${r.status===`online`?`border-accent-green`:`border-dark-border`} ${r.enabled===!1?`opacity-60`:``}`,children:(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1 flex-wrap`,children:[(0,w.jsx)(`span`,{className:Ft(r.status),children:It(r.status)}),(0,w.jsx)(`span`,{className:`font-medium text-sm text-accent-blue`,children:r.name}),(0,w.jsx)(`span`,{className:`text-badge text-accent-purple px-1.5 py-0.5 bg-accent-purple/10 rounded`,children:r.provider}),r.apiType&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded ${r.apiType===`anthropic-messages`||r.apiType===`openai-responses`?`bg-accent-purple/20 text-accent-purple`:`bg-accent-blue/20 text-accent-blue`}`,children:Ce[r.apiType]||r.apiType}),a&&(0,w.jsx)(`span`,{className:`text-avatar px-1 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,title:_(`models.overrideTitle`),children:_(`models.overrideBadge`)}),r.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red font-medium`,title:_(`models.globalDefaultUnsettable`),children:_(`chat.globalDefault`)}),r.isActDefault&&!r.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium`,children:_(`chat.actDefault`)}),r.isGoalDefault&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/20 text-accent-purple font-medium`,children:_(`chat.goalDefault`)})]}),(0,w.jsxs)(`div`,{className:`grid grid-cols-2 sm:grid-cols-3 md:grid-cols-6 gap-3 text-xs`,children:[(0,w.jsx)(j,{label:_(`models.loadLabel`),value:`${r.load}/${r.maxLoad}`}),(0,w.jsx)(j,{label:_(`models.tokenUsageLabel`),value:`${ae(r.tokens)}/${ae(r.maxTokens)}`}),(0,w.jsx)(j,{label:_(`models.inputPrice`),value:r.price.input===void 0?`—`:`$${r.price.input}/M`}),(0,w.jsx)(j,{label:_(`models.outputPrice`),value:r.price.output===void 0?`—`:`$${r.price.output}/M`}),(0,w.jsx)(j,{label:_(`models.cacheReadPrice`),value:r.price.cacheRead===void 0?`—`:`$${r.price.cacheRead}/M`}),(0,w.jsx)(j,{label:_(`models.cacheWritePrice`),value:r.price.cacheWrite===void 0?`—`:`$${r.price.cacheWrite}/M`})]}),(0,w.jsxs)(`div`,{className:`mt-3 grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs`,children:[(0,w.jsx)(j,{label:_(`models.inputTokensLabel`),value:ae(r.usage?.input??0)}),(0,w.jsx)(j,{label:_(`models.outputTokensLabel`),value:ae(r.usage?.output??0)}),(0,w.jsx)(j,{label:_(`models.totalTokensLabel`),value:ae(r.usage?.total??0)}),(0,w.jsx)(j,{label:_(`models.usageRequestsLabel`),value:String(r.usage?.requests??0)})]}),(0,w.jsx)(de,{className:`mt-3 pt-2 border-t border-dark-border/60`,provider:e.provider,modelId:r.id,current:i?.pricing,catalog:{input:r.price.input,output:r.price.output,cacheRead:r.price.cacheRead,cacheWrite:r.price.cacheWrite},onSaved:X}),(0,w.jsx)(fe,{modelId:r.id,className:`mt-2`})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[ye.map(e=>{let t=e.key===`global`?r.isGlobalDefault:r.isGoalDefault,n=e.key===`global`?_(`models.setGlobalDefaultTitle`):_(`models.setGoalDefaultTitle`),i=_(`models.unsetGoalDefaultTitle`),a=_(`models.unsetGoalDefaultFailed`),o=_(`models.setGoalDefaultFailed`);return t?e.key===`global`?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium`,title:_(`chat.globalDefault`),children:[(0,w.jsx)(d,{size:11}),_(e.labelKey)]},e.key):(0,w.jsxs)(`button`,{onClick:async()=>{try{await v.models.setDefaults({[e.key]:null}),await X()}catch(e){D(e instanceof Error?e.message:a)}},className:`inline-flex items-center gap-1 px-2 py-1 rounded text-badge border ${e.bg} ${e.color} font-medium cursor-pointer hover:opacity-80`,title:i,children:[(0,w.jsx)(d,{size:11}),_(e.labelKey)]},e.key):r.enabled===!1?null:(0,w.jsx)(`button`,{onClick:async()=>{try{await v.models.setDefaults({[e.key]:`${r.provider}:${r.id}`}),await X()}catch(e){D(e instanceof Error?e.message:o)}},className:`px-2 py-1 rounded text-badge border border-dark-border text-dark-muted hover:text-dark-text hover:border-dark-hover`,title:n,children:_(e.labelKey)},e.key)}),(0,w.jsx)(`button`,{onClick:()=>Mt(r),className:`p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue`,title:_(`models.editModel`),children:(0,w.jsx)(te,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>At(r.provider,r.id),className:`p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red`,title:_(`models.deleteModel`),children:(0,w.jsx)(f,{size:13})}),(0,w.jsx)(`button`,{onClick:()=>kt(r),disabled:me===Ye(r),className:`p-1.5 rounded hover:bg-dark-hover disabled:opacity-50`,title:_(`models.refresh`),children:(0,w.jsx)(t,{size:13,className:me===Ye(r)?`animate-spin`:``})}),(0,w.jsx)(`button`,{onClick:()=>Ot(r),className:`px-2 py-0.5 rounded text-xs transition-colors ${r.enabled===!1?`bg-accent-green/20 text-accent-green hover:bg-accent-green/30`:`bg-accent-red/20 text-accent-red hover:bg-accent-red/30`}`,children:r.enabled===!1?_(`models.enable`):_(`models.disable`)})]})]})},Ye(r))}),e.models.length===0&&(0,w.jsx)(`div`,{className:`text-center text-meta text-dark-muted py-3`,children:_(`models.noModelsInProvider`)})]})]},e.provider)}),y.length===0&&k.length===0&&(0,w.jsxs)(`div`,{className:`text-center text-dark-muted py-6`,children:[(0,w.jsx)(i,{size:36,className:`mx-auto mb-2 opacity-40`}),(0,w.jsx)(`p`,{className:`text-sm`,children:_(`models.emptyHint`)})]})]})]}),(0,w.jsx)(le,{isOpen:ke,onClose:()=>{M(!1),N(`select`),F(null),R(``)},title:Ae===`select`?_(`chat.selectProvider`):Lt?.name||_(`models.providerConfig`),size:`xl`,children:Ae===`select`?(0,w.jsx)(`div`,{className:`space-y-4`,children:(0,w.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-3`,children:[Xe.filter(e=>e.key!==`custom`).map(e=>(0,w.jsxs)(`button`,{onClick:()=>et(e),className:`text-start p-3 rounded-lg border border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,w.jsx)(d,{size:14,className:`text-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:e.name})]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e.defaultModel})]},e.key)),(0,w.jsxs)(`button`,{onClick:nt,className:`text-start p-3 rounded-lg border border-dashed border-dark-border bg-dark-bg hover:border-accent-blue transition-colors`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,w.jsx)(r,{size:14,className:`text-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm font-medium`,children:_(`models.customProvider`)})]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted`,children:_(`models.customProviderDesc`)})]})]})}):(0,w.jsxs)(`div`,{className:`space-y-3`,children:[P===`custom`&&(0,w.jsxs)(`div`,{className:`space-y-3`,children:[Q&&Q.keys.length>0&&(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.editExistingConfig`)}),(0,w.jsxs)(`select`,{value:je,onChange:e=>{let t=e.target.value;t?tt(t):(R(``),L(e=>({...e,providerKey:``,modelIds:``,baseUrl:``,apiType:``,apiKeys:[``]})))},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.newCustomProviderOption`)}),Q.keys.map(e=>(0,w.jsx)(`option`,{value:e,children:e},e))]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.editExistingConfigHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.providerNameLabel`)}),(0,w.jsx)(`input`,{value:I.providerKey,onChange:e=>L(t=>({...t,providerKey:e.target.value})),className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:_(`models.providerNamePlaceholder`)})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[`API Keys`,O?.providers?.[P===`custom`?I.providerKey.trim():P||``]?.hasApiKey?``:` *`,(0,w.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:O?.providers?.[P===`custom`?I.providerKey.trim():P||``]?.hasApiKey?_(`models.apiKeysHintConfigured`):_(`models.apiKeysHintNew`)})]}),(0,w.jsx)(`div`,{className:`space-y-1.5`,children:(I.apiKeys?.length?I.apiKeys:[``]).map((e,t)=>(0,w.jsxs)(`div`,{className:`flex gap-1.5 items-center`,children:[(0,w.jsxs)(`div`,{className:`relative flex-1`,children:[(0,w.jsx)(`input`,{type:Fe?`text`:`password`,value:e,autoComplete:`off`,spellCheck:!1,onChange:e=>L(n=>({...n,apiKeys:n.apiKeys.map((n,r)=>r===t?e.target.value:n)})),className:`w-full px-3 py-2 pe-9 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:_(`models.apiKeyDefaultPlaceholder`)}),(0,w.jsx)(`button`,{type:`button`,onClick:()=>B(e=>!e),className:`absolute end-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-dark-text`,title:_(Fe?`models.hideKeyTitle`:`models.showKeyTitle`),children:Fe?(0,w.jsx)(n,{size:14}):(0,w.jsx)(a,{size:14})})]}),t===0?(0,w.jsxs)(`button`,{type:`button`,onClick:()=>L(e=>({...e,apiKeys:[...e.apiKeys,``]})),className:`shrink-0 inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-dashed border-dark-border text-dark-muted hover:text-accent-blue hover:border-accent-blue/50 transition-colors`,title:_(`models.addApiKeyTitle`),children:[(0,w.jsx)(re,{size:14}),(0,w.jsx)(`span`,{className:`hidden sm:inline`,children:_(`models.addApiKey`)})]}):(0,w.jsx)(`button`,{type:`button`,onClick:()=>L(e=>({...e,apiKeys:e.apiKeys.filter((e,n)=>n!==t)})),className:`shrink-0 inline-flex items-center px-3 py-2 rounded text-sm text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors`,title:_(`models.removeApiKeyTitle`),children:(0,w.jsx)(ne,{size:14})})]},t))})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.modelIdLabel`)}),(0,w.jsxs)(`div`,{className:`flex gap-2`,children:[(0,w.jsx)(`input`,{value:I.modelIds,onChange:e=>{let t=e.target.value;L(e=>({...e,modelIds:t})),W(()=>{let e=new Set;for(let n of t.split(`,`)){let t=n.trim().split(`|`)[0].trim();t&&H.some(e=>e.id===t)&&e.add(t)}return e})},className:`flex-1 px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:Lt?.defaultModel||_(`models.modelIdPlaceholder`)}),(0,w.jsxs)(`button`,{onClick:rt,disabled:ze||!I.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-blue/30 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 whitespace-nowrap`,title:_(`models.fetchModelsTitle`),children:[ze?(0,w.jsx)(t,{size:13,className:`animate-spin`}):(0,w.jsx)(s,{size:13}),_(ze?`models.fetchingModels`:`models.fetchModels`)]}),(0,w.jsxs)(`button`,{onClick:at,disabled:Ke||!I.baseUrl,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-yellow/30 text-accent-yellow hover:bg-accent-yellow/10 disabled:opacity-50 whitespace-nowrap`,title:_(`models.testConnectionTitle`),children:[Ke?(0,w.jsx)(t,{size:13,className:`animate-spin`}):(0,w.jsx)(ie,{size:13}),_(Ke?`models.testingConnection`:`models.testConnection`)]}),(0,w.jsxs)(`button`,{onClick:St,className:`inline-flex items-center gap-1 px-3 py-2 rounded text-sm border border-accent-green/30 text-accent-green hover:bg-accent-green/10 whitespace-nowrap`,title:_(`models.catalogSearchTitle`),children:[(0,w.jsx)(c,{size:13}),_(`models.catalogSearch`)]})]}),q&&(0,w.jsxs)(`div`,{className:`mt-1 text-xs ${q.ok?`text-accent-green`:`text-accent-red`}`,children:[q.ok?`✓ `:`✗ `,q.message,q.probes?.map(e=>(0,w.jsxs)(`div`,{className:`mt-0.5 ${e.verdict===`supported`?`text-accent-green`:e.verdict===`unsupported`?`text-accent-red`:`text-dark-muted`}`,children:[e.group,`: `,e.label,e.hint&&(0,w.jsxs)(`span`,{className:`opacity-70`,children:[` — `,e.hint]})]},e.id))]}),He&&(0,w.jsx)(`div`,{className:`mt-1 text-xs text-accent-red`,children:He}),H.length===0&&Qe.length>0&&(0,w.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,w.jsx)(`div`,{className:`flex items-center justify-between mb-2`,children:(0,w.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[_(`models.configuredPanelPrefix`),(0,w.jsx)(`strong`,{className:`text-dark-text`,children:Qe.length}),_(`models.configuredPanelSuffix`),(0,w.jsx)(`span`,{className:`text-accent-green/70`,children:_(`models.configuredPanelHint`)})]})}),(0,w.jsx)(`div`,{className:`max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1`,children:Qe.map(e=>{let t=I.modelIds.split(`,`).map(A).filter(Boolean).includes(e.id);return(0,w.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.name||e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>st(e),className:`flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-green/20 text-accent-green border border-accent-green/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,w.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,w.jsx)(d,{size:10}):(0,w.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,w.jsx)(`span`,{className:`min-w-0 flex-1 break-words leading-snug`,children:e.name||e.id}),e.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-red/20 text-accent-red shrink-0`,children:_(`models.globalShort`)}),e.isActDefault&&!e.isGlobalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-yellow/20 shrink-0`,children:`Act`}),e.isGoalDefault&&(0,w.jsx)(`span`,{className:`text-avatar px-1 rounded bg-accent-purple/20 shrink-0`,children:`Goal`})]},e.id)})})]}),H.length>0&&(0,w.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg bg-dark-bg p-2`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,w.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[_(`models.fetchedPanelPrefix`),(0,w.jsx)(`strong`,{className:`text-dark-text`,children:H.length}),_(`models.fetchedPanelMiddle`),(0,w.jsx)(`strong`,{className:`text-accent-blue`,children:Ve.size}),_(`models.fetchedPanelSuffix`),(0,w.jsx)(`span`,{className:`text-accent-blue/70`,children:_(`models.fetchedPanelHint`)})]}),(0,w.jsx)(`button`,{onClick:()=>{U([]),W(new Set)},className:`px-2 py-0.5 text-badge border border-dark-border rounded hover:bg-dark-hover`,children:_(`models.close`)})]}),(0,w.jsxs)(`div`,{className:`relative mb-2`,children:[(0,w.jsx)(c,{size:12,className:`absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:Ue,onChange:e=>{let t=e.target.value;K(t),t.trim()&&Ge(!1)},className:`w-full ps-7 pe-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,placeholder:_(`models.modelSearchPlaceholder`)})]}),Ue.trim()!==``&&(0,w.jsxs)(`div`,{className:`mb-1 text-badge text-dark-muted`,children:[_(`models.searchMatchPrefix`),(0,w.jsx)(`strong`,{className:`text-accent-blue`,children:Je.length}),_(`models.searchMatchSuffix`,{total:H.length})]}),(0,w.jsx)(`div`,{className:`max-h-72 overflow-y-auto custom-scrollbar grid grid-cols-1 sm:grid-cols-2 gap-1`,children:Je.map(e=>{let t=Ve.has(e.id);return(0,w.jsxs)(`div`,{role:`checkbox`,"aria-checked":t,title:e.name&&e.name!==e.id?`${e.id} — ${e.name}`:e.id,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>ot(e.id),className:`${We?`reveal-on-scroll `:``}flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${t?`bg-accent-blue/20 text-accent-blue border border-accent-blue/30`:`hover:bg-dark-hover border border-transparent`}`,children:[(0,w.jsx)(`span`,{className:`shrink-0 mt-[3px]`,children:t?(0,w.jsx)(d,{size:10}):(0,w.jsx)(`div`,{className:`w-2.5 h-2.5 rounded border border-dark-border`})}),(0,w.jsx)(`span`,{className:`min-w-0 flex-1 break-all leading-snug`,children:e.id})]},e.id)})})]})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:`Base URL`}),(0,w.jsx)(`input`,{value:I.baseUrl,onChange:e=>{L(t=>({...t,baseUrl:e.target.value})),J(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,placeholder:`https://api.example.com/v1`}),(0,w.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer select-none mt-2`,children:[(0,w.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":I.fullPath,onClick:()=>{L(e=>({...e,fullPath:!e.fullPath})),J(null)},className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${I.fullPath?`bg-accent-green`:`bg-dark-border`}`,children:(0,w.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${I.fullPath?`translate-x-[18px]`:`translate-x-0.5`}`})}),(0,w.jsx)(`span`,{className:`text-sm text-dark-muted`,children:_(`models.fullPathLabel`)})]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.fullPathHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:_(`models.apiTypeLabel`)}),(0,w.jsxs)(`select`,{value:I.apiType,onChange:e=>{L(t=>({...t,apiType:e.target.value})),J(null)},className:`w-full px-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.apiTypeAutoDetect`)}),Se.map(e=>(0,w.jsx)(`option`,{value:e,children:Ce[e]},e))]}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.apiTypeHint`)})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`label`,{className:`block text-sm text-dark-muted mb-1`,children:[_(`models.modelApiTypeLabel`),(0,w.jsx)(`span`,{className:`text-dark-muted/60 text-xs`,children:_(`models.modelApiTypeHint`)})]}),(0,w.jsx)(`div`,{className:`border border-dark-border rounded-lg divide-y divide-dark-border max-h-64 overflow-y-auto custom-scrollbar`,children:(()=>{let e=I.modelIds.split(`,`).map(A).filter(Boolean);if(e.length===0)return(0,w.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:_(`models.modelApiTypeEmpty`)});let t=k.find(e=>e.key===$),n=t?.contextWindow??2e5,r=t?.maxTokens??8e3,i=(e,t)=>L(n=>({...n,modelOverrides:{...n.modelOverrides,[e]:{...n.modelOverrides[e]||{},...t}}}));return e.map(e=>{let t=I.modelOverrides[e]||{};return(0,w.jsxs)(`div`,{className:`px-3 py-2 space-y-1.5`,children:[(0,w.jsx)(`div`,{className:`text-xs min-w-0 break-all leading-snug text-dark-text`,title:e,children:e}),(0,w.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-3 gap-1.5`,children:[(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.apiTypeLabel`)}),(0,w.jsxs)(`select`,{value:t.apiType||``,onChange:t=>i(e,{apiType:t.target.value}),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`,children:[(0,w.jsx)(`option`,{value:``,children:_(`models.inheritProvider`)}),Se.map(e=>(0,w.jsx)(`option`,{value:e,children:Ce[e]},e))]})]}),(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.maxInputTokensLabel`)}),(0,w.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxInput??``,onChange:t=>i(e,{maxInput:t.target.value}),placeholder:String(n),title:_(`models.maxInputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]}),(0,w.jsxs)(`label`,{className:`block`,children:[(0,w.jsx)(`span`,{className:`block text-badge text-dark-muted/70 mb-0.5`,children:_(`models.maxOutputTokensLabel`)}),(0,w.jsx)(`input`,{type:`number`,min:1,inputMode:`numeric`,value:t.maxOutput??``,onChange:t=>i(e,{maxOutput:t.target.value}),placeholder:String(r),title:_(`models.maxOutputTokensTitle`),className:`w-full px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue`})]})]})]},e)})})()}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60 mt-1`,children:_(`models.contextBudgetHint`)})]}),(0,w.jsxs)(`label`,{className:`flex items-center gap-2 cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:I.setDefault,onChange:e=>L(t=>({...t,setDefault:e.target.checked})),className:`accent-accent-blue`}),(0,w.jsx)(`span`,{className:`text-sm text-dark-muted`,children:_(`models.setDefaultProvider`)})]}),Pe&&(0,w.jsx)(`div`,{className:`text-sm text-accent-red`,children:Pe}),(0,w.jsxs)(`div`,{className:`flex justify-between gap-2 pt-2`,children:[(0,w.jsx)(`div`,{children:$&&O?.providers?.[$]?.hasApiKey&&(0,w.jsx)(`button`,{onClick:async()=>{if(confirm(_(`models.deleteProviderConfirm`,{key:$})))try{await v.config.provider.delete($),M(!1),N(`select`),F(null),R(``),await Y(),await X()}catch{}},className:`px-4 py-2 rounded border border-accent-red/30 text-accent-red hover:bg-accent-red/10 transition-colors text-sm`,children:_(`models.deleteProvider`)})}),(0,w.jsx)(`button`,{onClick:()=>{N(`select`),F(null),R(``),M(!1)},className:`px-4 py-2 rounded border border-dark-border hover:bg-dark-hover transition-colors text-sm`,children:_(`common.cancel`)}),(0,w.jsx)(oe,{variant:`accent`,onClick:Nt,loading:Me,children:_(`common.save`)})]})]})}),(0,w.jsx)(le,{isOpen:ct,onClose:()=>lt(!1),title:(0,w.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(c,{size:15,className:`text-accent-green`}),_(`models.catalogTitle`)]}),size:`2xl`,children:(0,w.jsxs)(`div`,{className:`space-y-3`,children:[(0,w.jsxs)(`div`,{className:`flex gap-2`,children:[(0,w.jsxs)(`div`,{className:`relative flex-1`,children:[(0,w.jsx)(c,{size:14,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{value:ut,onChange:e=>Dt(e.target.value),className:`w-full ps-9 pe-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-green`,placeholder:_(`models.catalogSearchPlaceholder`),autoFocus:!0})]}),(0,w.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:bt,onChange:e=>{let t=e.target.checked;xt(t),Ct(ut,{reason:vt,tool:t})},className:`accent-accent-green`}),_(`models.catalogOnlyToolCall`)]}),(0,w.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer`,children:[(0,w.jsx)(`input`,{type:`checkbox`,checked:vt,onChange:e=>{let t=e.target.checked;yt(t),Ct(ut,{reason:t,tool:bt})},className:`accent-accent-green`}),_(`models.catalogOnlyReasoning`)]})]}),gt&&(0,w.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 p-2 rounded`,children:gt}),mt?(0,w.jsxs)(`div`,{className:`flex items-center justify-center py-10 text-dark-muted`,children:[(0,w.jsx)(t,{size:18,className:`animate-spin me-2`}),` `,_(`models.searching`)]}):(0,w.jsx)(`div`,{className:`max-h-96 overflow-y-auto custom-scrollbar border border-dark-border rounded-lg divide-y divide-dark-border`,children:ft.length===0?(0,w.jsx)(`div`,{className:`py-10 text-center text-dark-muted text-sm`,children:_(`models.catalogNoResults`)}):ft.map(e=>(0,w.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-2 hover:bg-dark-hover`,children:[(0,w.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(`span`,{className:`text-sm font-medium text-dark-text truncate`,children:e.model.name||e.model.id}),(0,w.jsx)(`code`,{className:`text-badge px-1.5 py-0.5 bg-dark-bg border border-dark-border rounded text-dark-muted truncate`,children:e.model.id}),e.model.reasoning&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-yellow/10 text-accent-yellow rounded`,children:_(`models.badgeReasoning`)}),e.model.tool_call&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-blue/10 text-accent-blue rounded`,children:_(`models.badgeToolCall`)}),e.model.attachment&&(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 bg-accent-green/10 text-accent-green rounded`,children:_(`models.badgeMultimodal`)})]}),(0,w.jsxs)(`div`,{className:`text-meta text-dark-muted mt-0.5`,children:[e.providerName,e.model.limit?.context?` · ${_(`models.ctxLimit`,{k:(e.model.limit.context/1e3).toFixed(0)})}`:``,e.model.limit?.output?` · ${_(`models.outLimit`,{k:(e.model.limit.output/1e3).toFixed(0)})}`:``,e.model.cost?.input===void 0?``:` · $${e.model.cost.input}/M in / $${e.model.cost.output}/M out`]})]}),(0,w.jsxs)(`button`,{onClick:()=>wt(e),className:`shrink-0 inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-accent-green/30 text-accent-green rounded hover:bg-accent-green/10 whitespace-nowrap`,title:_(`models.catalogAddTitle`),children:[(0,w.jsx)(re,{size:12}),` `,_(`models.add`)]})]},`${e.providerId}:${e.model.id}`))}),(0,w.jsx)(`div`,{className:`text-meta text-dark-muted/60`,children:_(`models.catalogSourceHint`)})]})})]})})}function Oe({title:e,value:t,color:n}){return(0,w.jsxs)(`div`,{className:`${{green:`bg-accent-green/10 text-accent-green`,yellow:`bg-accent-yellow/10 text-accent-yellow`,red:`bg-accent-red/10 text-accent-red`,blue:`bg-accent-blue/10 text-accent-blue`}[n]} rounded-lg p-3`,children:[(0,w.jsx)(`div`,{className:`text-xs opacity-70`,children:e}),(0,w.jsx)(`div`,{className:`text-xl font-semibold`,children:t})]})}function j({label:e,value:t}){return(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`text-dark-muted`,children:e}),(0,w.jsx)(`div`,{children:t})]})}export{De as ModelsView,De as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Ur as n,Vn as r,W as i,at as a,b as o,g as s,it as c,m as l,n as u,st as d,vr as ee,xr as f,yr as p}from"./icons-BvYhTENi.js";import{t as m}from"./useTranslation-BGmCDuQI.js";import{r as h}from"./api-CCt9DRQm.js";import{I as g}from"./markdown-DAQZeY5V.js";import{A as te,f as ne,m as re}from"./common-BHXgEvgk.js";var _=e(n(),1),v=g();function ie(e){return(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`bundled`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:e===`npm`?`bg-accent-purple/15 text-accent-purple border-accent-purple`:e===`local`?`bg-accent-blue/15 text-accent-blue border-accent-blue`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e})}function y(e){return e?(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border ${e===`builtin`?`bg-dark-hover text-dark-muted border-dark-border`:e===`openclaw`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:e===`deepseek-harness`?`bg-accent-green/15 text-accent-green border-accent-green`:e===`claude-mods`?`bg-accent-purple/15 text-accent-purple border-accent-purple`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:e}):null}var ae={queued:`queued`,resolve:`resolve`,fetch:`fetch`,verify:`verify`,load:`load`,register:`register`,activate:`activate`,done:`done`,error:`error`},b={queued:`Queued`,resolve:`Resolving market entry`,fetch:`Downloading package`,verify:`Verifying manifest`,load:`Loading plugin`,register:`Registering`,activate:`Activating`,done:`Done`,error:`Failed`};function x(e,t){let n=`plugins.installStages.${ae[e]}`,r=t(n);return r===n?b[e]:r}function S({job:e,error:t,onClose:n,onRetry:r}){let{t:i}=m(),a=(0,_.useRef)(null),s=e?.status===`running`,c=e?.status===`error`||!!t,d=Math.max(0,Math.min(100,e?.progress??0)),ee=e?.stage??`error`,p=e?.logs??[];(0,_.useEffect)(()=>{let e=a.current;e&&(e.scrollTop=e.scrollHeight)},[p.length]);let h=c?`bg-accent-red`:e?.status===`done`?`bg-accent-green`:`bg-accent-blue`;return(0,v.jsxs)(`div`,{"data-testid":`plugin-install-console`,className:`mt-2 rounded-md border border-dark-border bg-dark-bg px-2 py-1.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[c?(0,v.jsx)(l,{size:12,className:`shrink-0 text-accent-red`}):e?.status===`done`?(0,v.jsx)(f,{size:12,className:`shrink-0 text-accent-green`}):(0,v.jsx)(`div`,{className:`h-3 w-3 shrink-0 animate-spin rounded-full border-2 border-accent-blue border-t-transparent`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-text truncate`,children:e?.alreadyInstalled&&s?i(`plugins.installAlreadyInstalled`):x(ee,i)}),(0,v.jsx)(`div`,{className:`flex-1`}),e&&(0,v.jsxs)(`span`,{className:`text-meta tabular-nums text-dark-muted shrink-0`,children:[d,`%`]}),r&&c&&(0,v.jsx)(`button`,{type:`button`,onClick:r,className:`px-1.5 py-0.5 rounded border border-dark-border bg-dark-hover text-meta text-dark-muted hover:text-dark-text transition-colors`,children:i(`plugins.installRetry`)}),(0,v.jsx)(`button`,{type:`button`,onClick:n,title:i(`plugins.installClose`),className:`p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors`,children:(0,v.jsx)(u,{size:12})})]}),e&&(0,v.jsx)(`div`,{className:`mt-1 h-1 rounded-full bg-dark-hover overflow-hidden`,children:(0,v.jsx)(`div`,{className:`h-full ${h} transition-[width] duration-300 ease-out`,style:{width:`${d}%`}})}),(e?.error||t)&&(0,v.jsx)(`div`,{className:`mt-1 rounded border border-accent-red bg-accent-red/15 px-1.5 py-1 text-meta text-accent-red break-words`,children:e?.error||t}),e&&(0,v.jsxs)(`details`,{open:!0,className:`mt-1 group`,children:[(0,v.jsxs)(`summary`,{className:`flex items-center gap-1 cursor-pointer select-none text-meta text-dark-muted hover:text-dark-text transition-colors`,children:[(0,v.jsx)(o,{size:11}),i(`plugins.installLogs`,{count:p.length})]}),(0,v.jsx)(`pre`,{ref:a,className:`mt-1 max-h-32 overflow-auto rounded border border-dark-border bg-dark-surface px-1.5 py-1 font-mono text-meta text-dark-muted whitespace-pre-wrap break-all`,children:p.length?p.join(`
|
|
2
|
+
`):i(`plugins.installLogsEmpty`)})]})]})}function oe({plugin:e,job:t,error:n,onInstall:i,onDismiss:a}){let{t:o}=m(),s=t?.status===`running`,c=t&&s?x(t.stage,o):null,l=e.marketId??e.id;return(0,v.jsxs)(`div`,{"data-install-card":l,className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:e.name||e.id}),e.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:e.version}),ie(e.source),y(e.market),e.category&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-dark-hover text-dark-muted border border-dark-border shrink-0`,children:e.category}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0`,children:e.id})]}),e.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:e.description}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:[(0,v.jsxs)(`button`,{onClick:()=>i(l,!0),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/20 border border-accent-blue/40 text-accent-blue text-meta hover:bg-accent-blue/30 disabled:opacity-50 transition-colors`,children:[s?(0,v.jsx)(r,{size:11,className:`animate-pulse`}):(0,v.jsx)(r,{size:11}),c??o(`plugins.installActivate`)]}),(0,v.jsxs)(`button`,{onClick:()=>i(l,!1),disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-dark-text disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(r,{size:11}),` `,o(`plugins.installOnly`)]})]}),(t||n)&&(0,v.jsx)(S,{job:t??null,error:n??null,onClose:a,onRetry:t?.status===`error`||!t&&n?()=>i(l,t?.activate??!0):void 0})]})}function se({jobs:e,onSelect:t}){let{t:n}=m(),i=e.filter(e=>e.status===`running`);return i.length===0?null:(0,v.jsxs)(`div`,{"data-testid":`plugin-install-status-bar`,className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-blue/40 bg-accent-blue/10 px-2 py-1.5`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-1.5 px-0.5 pb-1`,children:[(0,v.jsx)(r,{size:11,className:`shrink-0 text-accent-blue`}),(0,v.jsx)(`span`,{className:`text-meta tabular-nums text-dark-text`,children:i.length})]}),(0,v.jsx)(`ul`,{className:`space-y-0.5`,children:i.map(e=>{let r=Math.max(0,Math.min(100,e.progress));return(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,onClick:()=>t(e.marketId),className:`w-full flex items-center gap-1.5 rounded px-1 py-0.5 text-start hover:bg-dark-hover transition-colors`,children:[(0,v.jsx)(`span`,{className:`h-2.5 w-2.5 shrink-0 animate-spin rounded-full border-2 border-accent-blue border-t-transparent`}),(0,v.jsx)(`span`,{className:`shrink-0 max-w-[10rem] truncate font-mono text-meta text-dark-text`,children:e.marketId}),(0,v.jsx)(`span`,{className:`shrink-0 text-meta text-dark-muted`,children:e.alreadyInstalled?n(`plugins.installAlreadyInstalled`):x(e.stage,n)}),(0,v.jsx)(`span`,{className:`flex-1 h-1 rounded-full bg-dark-hover overflow-hidden`,children:(0,v.jsx)(`span`,{className:`block h-full bg-accent-blue transition-[width] duration-300 ease-out`,style:{width:`${r}%`}})}),(0,v.jsxs)(`span`,{className:`shrink-0 text-meta tabular-nums text-dark-muted`,children:[r,`%`]})]})},e.marketId)})})]})}var C=700;function w(e,t){if(!(t in e))return e;let n={...e};return delete n[t],n}function ce(){let[e,t]=(0,_.useState)({}),[n,r]=(0,_.useState)({}),[i,a]=(0,_.useState)(0),o=(0,_.useRef)(new Map),s=(0,_.useCallback)(e=>{let t=o.current.get(e);t!==void 0&&(window.clearTimeout(t),o.current.delete(e))},[]),c=(0,_.useCallback)((e,n)=>{s(e);let i=async()=>{let c=await h.get(`/api/plugins/install/${encodeURIComponent(n)}`);if(!c.success||!c.data){r(t=>({...t,[e]:c.error??`Lost install job`})),s(e),a(e=>e+1);return}let l=c.data;t(t=>({...t,[e]:l})),l.status===`running`?o.current.set(e,window.setTimeout(()=>void i(),C)):(o.current.delete(e),a(e=>e+1))};i()},[s]),l=(0,_.useCallback)(async(e,n)=>{s(e),r(t=>w(t,e));let i=await h.post(`/api/plugins/install`,{id:e,activate:n});if(!i.success){let t=i.error??`Install request failed`;return r(n=>({...n,[e]:t})),{job:null,error:t}}if(!i.data?.jobId)return{job:null,error:null};let a=i.data;return t(t=>({...t,[e]:a})),c(e,a.jobId),{job:a,error:null}},[c,s]);return(0,_.useEffect)(()=>{let e=o.current;return()=>{for(let t of e.values())window.clearTimeout(t);e.clear()}},[]),{jobs:e,errors:n,settledCount:i,start:l,dismiss:(0,_.useCallback)(n=>{let i=e[n];i&&i.status===`running`||(t(e=>w(e,n)),r(e=>w(e,n)))},[e])}}var T=12,E=`other`,le=[`all`,`builtin`,`openclaw`,`deepseek-harness`,`claude-mods`];function ue(e){return e===`wired`?`bg-accent-green/15 text-accent-green border-accent-green`:e===`pending`||e===`pending_wiring`?`bg-accent-yellow/15 text-accent-yellow border-accent-yellow`:`bg-dark-hover text-dark-muted border-dark-border`}function de(e){return e.category?.trim()||E}function fe(e,t){let n=t.trim().toLowerCase();return!n||[e.id,e.name,e.description,e.category,...e.tags??[]].filter(e=>typeof e==`string`).join(` `).toLowerCase().includes(n)}function D(){let{t:e}=m(),[n,r]=(0,_.useState)(`installed`),[o,g]=(0,_.useState)([]),[y,ae]=(0,_.useState)([]),[b,x]=(0,_.useState)([]),[S,C]=(0,_.useState)(null),[w,E]=(0,_.useState)(!0),[D,pe]=(0,_.useState)(null),[O,me]=(0,_.useState)(null),[he,ge]=(0,_.useState)(null),[k,_e]=(0,_.useState)(null),[A,j]=(0,_.useState)(null),[ve,M]=(0,_.useState)(null),[N,P]=(0,_.useState)(``),[F,I]=(0,_.useState)(null),[L,R]=(0,_.useState)(null),[z,B]=(0,_.useState)(1),V=(0,_.useCallback)((e,t)=>{_e({kind:e,text:t}),window.setTimeout(()=>_e(null),4e3)},[]),H=(0,_.useCallback)(async()=>{E(!0),pe(null);let[e,t]=await Promise.all([h.get(`/api/plugins`),h.get(`/api/plugins/market`)]);e.success&&e.data?(g(e.data.plugins),C(e.data.schemaVersion??null),ae(e.data.issues??[])):pe(e.error??`Failed to load plugins`),t.success&&t.data&&x(t.data.plugins),E(!1)},[]);(0,_.useEffect)(()=>{H()},[H]);let U=(0,_.useMemo)(()=>o.filter(e=>e.installable!==!0),[o]),W=(0,_.useMemo)(()=>[...o.filter(e=>e.installable===!0),...b.filter(e=>!o.some(t=>t.id===e.id||t.marketId===e.id))],[o,b]),G=(0,_.useCallback)(e=>e.filter(e=>F&&de(e)!==F||L&&(e.market??null)!==L?!1:fe(e,N)),[F,N,L]),K=(0,_.useMemo)(()=>G(U),[G,U]),q=(0,_.useMemo)(()=>G(W),[G,W]),ye=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)e.add(de(t));return[`all`,...Array.from(e).sort()]},[W]),J=(0,_.useMemo)(()=>{let e=new Set;for(let t of W)t.market&&e.add(t.market);return le.filter(t=>t===`all`||e.has(t))},[W]),be=e=>Math.max(1,Math.ceil(e/T)),xe=(e,t)=>e.slice((t-1)*T,t*T),Y=be(K.length),X=be(q.length),Se=(0,_.useMemo)(()=>xe(K,Math.min(z,Y)),[K,z,Y]),Ce=(0,_.useMemo)(()=>xe(q,Math.min(z,X)),[q,z,X]);(0,_.useEffect)(()=>{B(1)},[n,N,F,L]),(0,_.useEffect)(()=>{L!==null&&!J.includes(L)&&R(null)},[L,J]);let we=N.trim().length>0||F!==null||L!==null,Z=(0,_.useCallback)(async(e,t,n)=>{me(e),ge(t);try{let r=await n();r&&r.success===!1?V(`err`,String(r.error??`Request failed`)):(V(`ok`,`${t} ${e} ✓`),await H())}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{me(null),ge(null)}},[H,V]),Q=ce(),Te=async(e,t)=>{let{job:n,error:r}=await Q.start(e,t);if(!n){if(r)return V(`err`,r);V(`ok`,`installed ${e} ✓`),await H()}},Ee=Q.settledCount;(0,_.useEffect)(()=>{Ee>0&&H()},[Ee,H]);let De=(0,_.useMemo)(()=>Object.values(Q.jobs),[Q.jobs]),Oe=(0,_.useCallback)(e=>{r(`available`),P(``),I(null),R(null);let t=W.findIndex(t=>((`marketId`in t?t.marketId:void 0)??t.id)===e);t>=0&&B(Math.floor(t/T)+1),requestAnimationFrame(()=>{Array.from(document.querySelectorAll(`[data-install-card]`)).find(t=>t.getAttribute(`data-install-card`)===e)?.scrollIntoView({block:`center`,behavior:`smooth`})})},[W]),ke=e=>Z(e,`activated`,()=>h.post(`/api/plugins/${encodeURIComponent(e)}/activate`)),Ae=e=>Z(e,`deactivated`,()=>h.post(`/api/plugins/${encodeURIComponent(e)}/deactivate`)),je=e=>Z(e,`uninstalled`,()=>h.delete(`/api/plugins/${encodeURIComponent(e)}`)),Me=async e=>{M(e);try{let t=await h.post(`/api/plugins/l2/provider/${encodeURIComponent(e)}`);t.success&&t.data?(V(`ok`,`Provider ${t.data.applied} applied to config ✓`),await H()):V(`err`,t.error??`Apply failed`)}catch(e){V(`err`,e instanceof Error?e.message:String(e))}finally{M(null)}},Ne=(t,n)=>n>1?(0,v.jsxs)(`div`,{className:`flex items-center justify-center gap-3 pt-3 pb-1 select-none`,children:[(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.max(1,e-1)),disabled:z<=1,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[(0,v.jsx)(p,{size:12}),` `,e(`plugins.prevPage`)]}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted`,children:e(`plugins.pageInfo`,{page:Math.min(z,n),pages:n,count:t})}),(0,v.jsxs)(`button`,{onClick:()=>B(e=>Math.min(n,e+1)),disabled:z>=n,className:`flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-meta hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,children:[e(`plugins.nextPage`),` `,(0,v.jsx)(ee,{size:12})]})]}):null,$=t=>(0,v.jsx)(`div`,{className:`mt-8 text-center text-xs text-dark-muted`,children:we?e(`plugins.noMatch`):t});return(0,v.jsxs)(`div`,{className:`h-full flex flex-col min-h-0 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`h-11 flex items-center gap-2 px-3 border-b border-dark-border bg-dark-bg shrink-0 select-none`,children:[(0,v.jsx)(d,{size:15,className:`text-accent-blue`}),(0,v.jsx)(`span`,{className:`truncate text-compact font-medium text-dark-text`,children:e(`nav.plugins`)}),S!==null&&(0,v.jsxs)(`span`,{className:`px-1.5 py-0.5 rounded text-badge bg-dark-hover text-dark-muted border border-dark-border`,children:[`schema v`,S]}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`button`,{onClick:()=>void H(),className:`p-1.5 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text transition-colors`,title:`Refresh`,children:(0,v.jsx)(t,{size:14,className:w?`animate-spin`:``})})]}),y.length>0&&(0,v.jsxs)(`div`,{className:`shrink-0 mx-3 mt-2 rounded-lg border border-accent-yellow/40 bg-accent-yellow/10`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5`,children:[(0,v.jsx)(l,{size:13,className:`shrink-0 text-accent-yellow`}),(0,v.jsx)(`span`,{className:`text-xs text-dark-text`,children:e(`plugins.issues.title`,{count:y.length})}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(te,{variant:`ghost`,size:`sm`,onClick:()=>r(`available`),children:e(`plugins.issues.goMarket`)})]}),(0,v.jsx)(`ul`,{className:`max-h-28 space-y-1 overflow-y-auto px-3 pb-2`,children:y.map(t=>(0,v.jsxs)(`li`,{className:`flex items-baseline gap-1.5 text-meta`,children:[(0,v.jsx)(`span`,{className:`shrink-0 rounded border border-dark-border bg-dark-hover px-1 text-dark-muted`,children:e(`plugins.issues.stage.${t.stage}`)}),(0,v.jsx)(`span`,{className:`shrink-0 font-mono text-dark-text`,children:t.marketId??t.id}),t.channelType&&(0,v.jsx)(`span`,{className:`shrink-0 text-dark-muted`,children:e(`plugins.issues.channelType`,{type:t.channelType})}),t.message&&(0,v.jsx)(`span`,{className:`truncate text-dark-muted`,title:t.message,children:t.message})]},`${t.stage}:${t.id}`))})]}),(0,v.jsx)(`div`,{className:`flex items-center gap-1 px-3 pt-2 shrink-0`,children:[`installed`,`available`].map(t=>(0,v.jsx)(`button`,{onClick:()=>r(t),className:`px-3 py-1.5 rounded-t text-xs transition-colors ${n===t?`bg-dark-surface text-accent-blue border border-b-0 border-dark-border`:`text-dark-muted hover:text-dark-text`}`,children:t===`installed`?e(`plugins.installedTab`,{count:U.length}):e(`plugins.availableTab`,{count:W.length})},t))}),(0,v.jsx)(se,{jobs:De,onSelect:Oe}),(0,v.jsxs)(`div`,{className:`shrink-0 px-3 pt-2 pb-1 space-y-2 bg-dark-bg`,children:[(0,v.jsxs)(`div`,{className:`relative`,children:[(0,v.jsx)(i,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none`}),(0,v.jsx)(`input`,{value:N,onChange:e=>P(e.target.value),placeholder:e(`plugins.searchPlaceholder`),className:`w-full ps-8 pe-8 py-1.5 rounded bg-dark-hover border border-dark-border text-xs text-dark-text placeholder-dark-muted outline-none focus:border-accent-blue/50 transition-colors`}),N&&(0,v.jsx)(`button`,{onClick:()=>P(``),className:`absolute end-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors`,title:e(`plugins.clear`),children:(0,v.jsx)(u,{size:12})})]}),n===`available`&&ye.length>2&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:ye.map(t=>(0,v.jsx)(`button`,{onClick:()=>I(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&F===null||F===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:t===`all`?e(`plugins.allCategories`):t},t))}),n===`available`&&(0,v.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:J.map(t=>{let n=t===`all`?e(`plugins.marketFilterAll`):t===`builtin`?e(`plugins.marketFilterBuiltin`):t;return(0,v.jsx)(`button`,{onClick:()=>R(t===`all`?null:t),className:`px-2 py-0.5 rounded-full text-meta border transition-colors ${t===`all`&&L===null||L===t?`bg-accent-blue/20 text-accent-blue border-accent-blue/40`:`bg-dark-hover text-dark-muted border-dark-border hover:text-dark-text`}`,children:n},t)})})]}),(0,v.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto px-3 pb-4`,children:[D&&(0,v.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 px-3 py-2 rounded bg-accent-red/15 border border-accent-red text-accent-red text-xs`,children:[(0,v.jsx)(l,{size:14}),` `,D]}),w&&!D&&(0,v.jsx)(`div`,{className:`mt-8 px-4`,role:`status`,children:(0,v.jsx)(ne,{count:4})}),!w&&n===`installed`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[K.length===0&&$(e(`plugins.emptyInstalled`)),Se.map(t=>{let n=t.l2??[],r=t.status===`active`;return(0,v.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,v.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,v.jsx)(`span`,{className:`text-compact font-medium text-dark-text truncate`,children:t.name||t.id}),t.version&&(0,v.jsx)(`span`,{className:`text-meta text-dark-muted shrink-0`,children:t.version}),ie(t.source),(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta border shrink-0 ${r?`bg-accent-green/15 text-accent-green border-accent-green`:`bg-dark-hover text-dark-muted border-dark-border`}`,children:r?`active`:`installed`}),t.httpMounted&&(0,v.jsx)(`span`,{className:`px-1.5 py-0.5 rounded text-meta bg-accent-green/15 text-accent-green border border-accent-green shrink-0`,children:`http mounted`}),(0,v.jsx)(`div`,{className:`flex-1`}),(0,v.jsx)(`span`,{className:`text-meta text-dark-muted font-mono shrink-0`,children:t.id})]}),t.description&&(0,v.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:t.description}),n.length>0&&(0,v.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:[n.map(e=>(0,v.jsxs)(`span`,{title:e.note||e.id,className:`px-1.5 py-0.5 rounded text-meta border cursor-help ${ue(e.status)}`,children:[e.kind,` · `,e.status,e.status===`wired`&&(0,v.jsx)(f,{size:10,className:`inline ms-0.5`})]},`${e.kind}-${e.id}`)),n.filter(e=>e.kind===`provider`&&e.status===`wired`).map(t=>(0,v.jsx)(`button`,{disabled:ve===t.id,onClick:()=>void Me(t.id),className:`px-1.5 py-0.5 rounded text-meta border border-accent-blue/40 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 transition-colors`,title:e(`plugins.applyProviderTitle`),children:ve===t.id?`applying…`:`apply provider`},`apply-${t.id}`))]}),(0,v.jsxs)(`div`,{className:`mt-2 flex items-center gap-1.5`,children:[r?(0,v.jsxs)(`button`,{onClick:()=>void Ae(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-yellow/15 border border-accent-yellow text-accent-yellow text-meta hover:bg-accent-yellow/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(a,{size:11}),` `,O===t.id?`${he}…`:e(`plugins.deactivate`)]}):(0,v.jsxs)(`button`,{onClick:()=>void ke(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-accent-green/15 border border-accent-green text-accent-green text-meta hover:bg-accent-green/15 disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(c,{size:11}),` `,O===t.id?`${he}…`:e(`plugins.activate`)]}),(0,v.jsxs)(`button`,{onClick:()=>j(t.id),disabled:O===t.id,className:`flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-meta hover:text-accent-red hover:border-accent-red disabled:opacity-50 transition-colors`,children:[(0,v.jsx)(s,{size:11}),` `,e(`plugins.uninstall`)]})]})]},t.id)}),Ne(K.length,Y)]}),!w&&n===`available`&&(0,v.jsxs)(`div`,{className:`mt-3 space-y-2`,children:[q.length===0&&$(e(`plugins.emptyMarket`)),Ce.map(e=>{let t=(`marketId`in e?e.marketId:void 0)??e.id;return(0,v.jsx)(oe,{plugin:e,job:Q.jobs[t],error:Q.errors[t]??null,onInstall:(e,t)=>void Te(e,t),onDismiss:()=>Q.dismiss(t)},e.id)}),Ne(q.length,X)]})]}),k&&(0,v.jsxs)(`div`,{className:`fixed bottom-4 end-4 z-50 flex items-center gap-2 px-3 py-2 rounded-lg border text-xs shadow-lg ${k.kind===`ok`?`bg-accent-green/15 border-accent-green text-accent-green`:`bg-accent-red/15 border-accent-red text-accent-red`}`,children:[k.kind===`ok`?(0,v.jsx)(f,{size:13}):(0,v.jsx)(u,{size:13}),` `,k.text]}),(0,v.jsx)(re,{isOpen:A!==null,title:e(`plugins.uninstallTitle`),message:e(`plugins.uninstallConfirm`,{id:A??``}),onConfirm:()=>{A&&je(A),j(null)},onClose:()=>j(null)})]})}export{D as PluginsView};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Bn as n,Ht as r,Ln as i,Pn as a,Ur as o,V as s,W as c,Wn as l,Yn as u,_n as d,at as f,br as p,fr as m,ft as h,kr as g,m as _,n as v,ot as y,ur as b,vn as x,vr as S,xr as C,zr as w}from"./icons-BvYhTENi.js";import{r as T}from"./react-vendor-BlngCquv.js";import{t as E}from"./useTranslation-BGmCDuQI.js";import{l as D}from"./ttsSettings-DHo3OsOq.js";import{n as O,t as k}from"./cn-rx4uumOJ.js";import{v as A,x as j,y as M}from"./src-49LUQhkG.js";import{C as N,ht as P}from"./MessageBubble-CV16DZMG.js";import{n as ee,r as F,t as I}from"./InputArea-DAgOOjOc.js";import{t as L}from"./api-CCt9DRQm.js";import{I as R}from"./markdown-DAQZeY5V.js";import{A as z,b as te,g as B,h as V,u as H,v as ne,x as re,y as U}from"./common-BHXgEvgk.js";import{n as W,s as ie,u as ae}from"./ThreadsView-CDoM0aNb.js";import{C as oe,H as G,S as K,V as q,W as se,_ as ce,b as le,g as ue,v as de,w as J,x as fe,y as pe}from"./index-BX-d2OBW.js";var me=T(),Y=e(o(),1);function he(e={}){let t=e.enabled!==!1,n=G(e=>e.projects),r=G(e=>e.total),i=G(e=>e.hidden),a=G(e=>e.detail),o=G(e=>e.detailLoading),s=G(e=>e.detailError),c=G(e=>e.query),l=G(e=>e.sort),u=G(e=>e.stale),d=G(e=>e.loading),f=G(e=>e.lastError),p=G(e=>e.disabled),m=G(e=>e.openProjectId),h=G(e=>e.refresh);(0,Y.useEffect)(()=>{t&&G.getState().refresh()},[t]),(0,Y.useEffect)(()=>{t&&u&&G.getState().scheduleRefresh()},[t,u]),(0,Y.useEffect)(()=>{if(!t||typeof document>`u`)return;let e=()=>{document.visibilityState===`visible`&&G.getState().refresh()};return document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[t]);let g=q(n,l),_=new Set(i),v=g.filter(e=>_.has(e.projectId));return{projects:g.filter(e=>!_.has(e.projectId)).filter(e=>e.rootExists),hiddenProjects:v,hiddenCount:v.length,total:r,detail:a,detailLoading:o,detailError:s,query:c,sort:l,stale:u,loading:d,lastError:f,disabled:p,openProjectId:m,setQuery:e=>G.getState().setQuery(e),setSort:e=>G.getState().setSort(e),openProject:e=>void G.getState().openProject(e),closeDetail:()=>G.getState().closeDetail(),enterProject:(e,t)=>G.getState().enterProject(e,t),backToProjectList:()=>G.getState().backToProjectList(),createProject:(e,t)=>G.getState().createProject(e,t),hideProject:e=>G.getState().hideProject(e),unhideProjects:e=>G.getState().unhideProjects(e),unhideAll:()=>G.getState().unhideAll(),probeEntry:()=>void G.getState().probeEntry(),refresh:()=>void h()}}var X=R();function ge({isOpen:e,onClose:t,projects:n,onRestore:r}){let{t:i}=E(),[a,o]=(0,Y.useState)(()=>new Set),s=(0,Y.useRef)(n);s.current=n,(0,Y.useEffect)(()=>{e&&o(new Set(s.current.map(e=>e.projectId)))},[e]);let c=n.length>0&&a.size===n.length,l=e=>{o(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return(0,X.jsxs)(V,{isOpen:e,onClose:t,title:i(`projects.hiddenModalTitle`),size:`md`,bodyClassName:`p-0`,children:[(0,X.jsxs)(`div`,{"data-testid":`projects-hidden-modal`,children:[(0,X.jsx)(`p`,{className:`border-b border-dark-border px-6 py-3 text-meta leading-relaxed text-dark-muted`,children:i(`projects.hiddenModalHint`)}),(0,X.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-dark-border/60 px-6 py-2`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>{o(c?new Set:new Set(n.map(e=>e.projectId)))},className:`text-meta text-dark-muted underline transition-colors hover:text-dark-text hover:no-underline`,"data-testid":`projects-hidden-toggle-all`,children:i(c?`projects.hiddenClearSelection`:`projects.hiddenSelectAll`)}),(0,X.jsx)(`span`,{className:`ms-auto text-meta tabular-nums text-dark-muted/70`,children:i(`projects.hiddenSelectedCount`,{count:a.size})})]}),(0,X.jsx)(`ul`,{className:`max-h-[50vh] overflow-y-auto custom-scrollbar`,"data-testid":`projects-hidden-list`,children:n.map(e=>{let t=a.has(e.projectId);return(0,X.jsx)(`li`,{children:(0,X.jsxs)(`label`,{className:k(`flex cursor-pointer items-center gap-2.5 border-b border-dark-border/40 px-6 py-2 transition-colors`,t?`bg-dark-hover/60`:`hover:bg-dark-hover/40`),"data-testid":`projects-hidden-row-${e.projectId}`,children:[(0,X.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>l(e.projectId),"data-testid":`projects-hidden-option-${e.projectId}`,className:`h-3.5 w-3.5 shrink-0 cursor-pointer`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`truncate text-compact text-dark-text`,title:e.root,children:e.name}),!e.rootExists&&(0,X.jsx)(`span`,{className:`shrink-0 text-badge text-accent-yellow`,children:i(`projects.rootMissing`)})]}),(0,X.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-meta text-dark-muted/70`,title:e.root,children:e.root})]})]})},e.projectId)})})]}),(0,X.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t border-dark-border px-6 py-3`,children:[(0,X.jsx)(z,{onClick:t,children:i(`common.cancel`)}),(0,X.jsx)(z,{variant:`accent`,disabled:a.size===0,onClick:()=>{let e=n.filter(e=>a.has(e.projectId)).map(e=>e.projectId);e.length!==0&&(r(e),t())},"data-testid":`projects-hidden-confirm`,children:i(`projects.hiddenRestoreSelected`,{count:a.size})})]})]})}var _e={neutral:`border-dark-border bg-dark-hover/40 text-dark-muted`,ok:`border-accent-green/30 bg-accent-green/10 text-accent-green`,warn:`border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow`};function ve(e){return e.threads.waiting>0?{tone:`waiting`,live:!1}:e.threads.review>0?{tone:`review`,live:!1}:e.threads.working>0||e.sessions.running>0?{tone:`working`,live:!0}:{tone:`idle`,live:!1}}function Z({tone:e=`neutral`,testid:t,title:n,children:r}){return(0,X.jsx)(`span`,{"data-testid":t,title:n,className:k(`inline-flex shrink-0 items-center gap-0.5 rounded-full border px-1.5 py-px text-meta leading-4`,_e[e]),children:r})}function ye({icon:e,label:t,hint:n,disabled:r,testid:i,onClick:a}){let o=r?`${t} — ${n??``}`:t;return(0,X.jsx)(`button`,{type:`button`,"aria-label":o,title:o,"data-testid":i,"data-disabled":r?`true`:`false`,disabled:r,onClick:e=>{e.stopPropagation(),a()},className:`inline-flex h-6 w-6 items-center justify-center rounded-md text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent`,children:e})}var be=(0,Y.memo)(function({project:e,onOpen:t,onOpenFolder:n,onCopyRoot:r,onHide:a,now:o}){let{t:s}=E(),c=!e.rootExists,l=Object.values(e.threads).reduce((e,t)=>e+t,0),d=ve(e),f=N(e.lastActivityAt,o,s);return(0,X.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:()=>t(e.projectId),onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&n.target===n.currentTarget&&(n.preventDefault(),t(e.projectId))},className:k(`group relative flex cursor-pointer items-center gap-2.5 rounded-lg border px-3 py-2 text-start transition-colors`,c?`border-dashed border-dark-border/60 opacity-70`:`border-dark-border hover:border-accent-blue/40 hover:bg-dark-hover/40`),"data-testid":`project-row-${e.projectId}`,"data-root-missing":c?`true`:`false`,"data-status":d.tone,children:[(0,X.jsx)(`span`,{"aria-hidden":`true`,className:`status-dot shrink-0`,"data-tone":d.tone,"data-live":d.live?`true`:`false`,"data-testid":`project-status-${e.projectId}`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`truncate text-compact font-semibold text-dark-text`,title:e.root,children:e.name}),(0,X.jsx)(`span`,{className:`shrink-0 rounded border border-dark-border px-1 py-px text-badge leading-4 text-dark-muted`,children:s(`projects.visibility`)}),c&&(0,X.jsx)(`span`,{className:`shrink-0 text-badge text-accent-yellow`,children:s(`projects.rootMissing`)})]}),(0,X.jsx)(`span`,{className:`mt-0.5 flex items-center gap-2 text-meta leading-tight text-dark-muted/70`,children:(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono`,title:e.root,children:e.root})})]}),(0,X.jsxs)(`span`,{className:`hidden shrink-0 items-center gap-1.5 md:flex`,children:[(0,X.jsxs)(Z,{testid:`project-sessions-${e.projectId}`,children:[s(`projects.sessionCount`,{count:e.sessions.total}),e.sessions.running>0&&(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`span`,{className:`text-dark-muted/40`,"aria-hidden":`true`,children:`·`}),(0,X.jsx)(`span`,{className:`inline-flex items-center gap-0.5 text-accent-blue`,"data-testid":`project-running`,children:s(`projects.runningCount`,{count:e.sessions.running})})]})]}),(0,X.jsx)(Z,{testid:`project-threads-${e.projectId}`,children:l>0?s(`projects.threadCount`,{count:l}):s(`projects.noThreads`)}),e.agentMd.present?(0,X.jsx)(Z,{tone:e.agentMd.truncated?`warn`:`ok`,testid:`project-agentmd-${e.projectId}`,title:e.agentMd.truncated?s(`projects.agentMdTruncated`,{bytes:e.agentMd.bytes??0}):s(`projects.agentMdBytes`,{bytes:e.agentMd.bytes??0}),children:e.agentMd.truncated?s(`projects.agentMdTruncatedShort`):s(`projects.agentMdReady`)}):(0,X.jsx)(Z,{testid:`project-agentmd-${e.projectId}`,children:s(`projects.agentMdAbsent`)}),c&&(0,X.jsx)(Z,{tone:`warn`,testid:`project-missing-${e.projectId}`,children:s(`projects.rootMissingChip`)})]}),f&&(0,X.jsx)(`span`,{className:`hidden shrink-0 font-mono text-meta tabular-nums text-dark-muted lg:block`,"data-testid":`project-activity-${e.projectId}`,children:f}),(0,X.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5`,onClick:e=>e.stopPropagation(),children:[(0,X.jsx)(ye,{icon:(0,X.jsx)(x,{size:13,"aria-hidden":`true`}),label:s(`projects.openFolder`),hint:c?s(`projects.openFolderDisabled`):void 0,disabled:c,testid:`project-open-folder-${e.projectId}`,onClick:()=>n(e.root)}),(0,X.jsx)(ye,{icon:(0,X.jsx)(u,{size:13,"aria-hidden":`true`}),label:s(`projects.copyRoot`),testid:`project-copy-root-${e.projectId}`,onClick:()=>r(e.root)}),(0,X.jsx)(ye,{icon:(0,X.jsx)(i,{size:13,"aria-hidden":`true`}),label:s(c?`projects.removeView`:`projects.hide`),hint:s(`projects.hideHint`),testid:`project-hide-${e.projectId}`,onClick:()=>a(e.projectId)})]})]})}),xe=[`answer`,`thread`,`goal`,`handoff`,`approval`,`session`];function Se(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Q(e){return typeof e==`string`&&e.trim()?e:void 0}function Ce(e){let t=Se(e);if(!t)return null;let n=t.kind;if(typeof n!=`string`||!xe.includes(n))return null;let r={kind:n,reason:typeof t.reason==`string`?t.reason:``},i=Se(t.refs);if(i){let e={},t=Q(i.goalId);if(t&&(e.goalId=t),Array.isArray(i.threadIds)){let t=i.threadIds.filter(e=>typeof e==`string`&&!!e);t.length&&(e.threadIds=t)}let n=Q(i.projectKey);n&&(e.projectKey=n),Object.keys(e).length&&(r.refs=e)}let a=Se(t.suggest),o=a?Q(a.title):void 0;if(o){let e=a?Q(a.seed):void 0;r.suggest={title:o,...e?{seed:e}:{}}}return r}function we(e){switch(e){case`thread`:return`green`;case`goal`:return`purple`;case`handoff`:return`brand`;case`approval`:return`yellow`;case`session`:return`brand`;default:return`neutral`}}var Te=(0,Y.memo)(function({route:e,root:t,onOpenThread:n,onOpenSession:r}){let{t:i}=E(),a=P(e=>e.rows),o=P(e=>e.query),[s,c]=(0,Y.useState)(!1),[l,u]=(0,Y.useState)(null),[d,f]=(0,Y.useState)(!1);if(e.kind===`session`&&!e.suggest?.title)return(0,X.jsx)(`span`,{className:`mt-0.5 block text-meta text-dark-text-secondary`,children:e.reason});let p=e.refs?.threadIds?.[0],m=e.refs?.goalId,h=e.refs?.projectKey,g=Object.keys(a).length>0,_=!!p&&o===``&&g&&!a[p],v=!!p&&!!n&&!_,y=async()=>{let n=e.suggest?.title;if(n&&!s){c(!0),f(!1);try{let i=await L.sessions.create(n,t);if(i.success&&i.data){let a=e.suggest?.seed?.trim();a&&D.getState().setSessionInput(i.data.id,a),u(i.data.title||n),r?.(i.data.id,t,i.data.title||n)}else f(!0)}catch{f(!0)}finally{c(!1)}}};return(0,X.jsxs)(`span`,{className:`mt-1 block rounded-md border border-dark-border bg-dark-bg-tertiary/50 p-1.5`,"data-testid":`pm-route-card`,"data-route-kind":e.kind,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`status-pill`,"data-tone":we(e.kind),"data-testid":`pm-route-kind`,children:i(`projects.pmRouteKind.${e.kind}`)}),(0,X.jsx)(`span`,{className:`text-badge text-dark-text-secondary`,children:i(`projects.pmRouteTo`)})]}),e.reason?(0,X.jsx)(`span`,{className:`mt-0.5 block text-meta text-dark-text-secondary`,children:e.reason}):null,v?(0,X.jsxs)(`button`,{type:`button`,onClick:()=>n?.(p),className:`mt-1 inline-flex items-center gap-1 rounded bg-dark-hover/50 px-1.5 py-0.5 text-meta text-dark-text-primary hover:bg-dark-hover`,"data-testid":`pm-route-open-thread`,children:[i(`projects.pmRouteOpenThread`),(0,X.jsx)(`span`,{className:`font-mono text-dark-text-secondary`,children:p})]}):_?null:m?(0,X.jsxs)(`span`,{className:`mt-1 block font-mono text-badge text-dark-text-secondary`,"data-testid":`pm-route-goal-ref`,children:[i(`projects.pmRouteGoalRef`),`: `,m]}):h?(0,X.jsxs)(`span`,{className:`mt-1 block font-mono text-badge text-dark-text-secondary`,"data-testid":`pm-route-project-ref`,children:[i(`projects.pmRouteProjectRef`),`: `,h]}):null,e.kind===`session`?l?(0,X.jsx)(`span`,{className:`mt-1 block text-meta text-accent-green`,"data-testid":`pm-route-session-created`,children:i(`projects.pmRouteSessionCreated`,{title:l})}):(0,X.jsxs)(`span`,{className:`mt-1 block`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:()=>void y(),disabled:s,className:`inline-flex items-center gap-1 rounded bg-accent-green/15 px-2 py-0.5 text-meta text-accent-green hover:bg-accent-green/25 disabled:opacity-50`,"data-testid":`pm-route-create-session`,children:i(s?`projects.pmRouteSessionCreating`:`projects.pmRouteCreateSession`)}),d?(0,X.jsx)(`span`,{className:`ms-1.5 text-badge text-accent-red`,"data-testid":`pm-route-create-failed`,children:i(`projects.pmRouteCreateFailed`)}):null]}):null]})});function Ee(e,t,n){let r=e.fields,i=e=>typeof r[e]==`string`?r[e]:``;switch(e.type){case`pm_started`:return(0,X.jsx)(`span`,{children:t(`projects.pmStarted`)});case`pm_stopped`:return(0,X.jsx)(`span`,{children:t(`projects.pmStopped`)});case`pm_wakeup`:{let e=i(`reason`),n=i(`summary`);return(0,X.jsxs)(`span`,{children:[t(`projects.pmWakeup`),e?(0,X.jsxs)(`span`,{className:`text-dark-text-secondary`,children:[` · `,e]}):null,n?(0,X.jsx)(`span`,{className:`block text-dark-text-secondary`,children:n}):null]})}case`pm_report`:{let e=i(`title`),a=i(`progressSummary`),o=i(`nextAction`),s=typeof r.approvalsPending==`number`?r.approvalsPending:0,c=Ce(r.route);return(0,X.jsxs)(`span`,{children:[e?(0,X.jsx)(`span`,{className:`font-medium`,children:e}):(0,X.jsx)(`span`,{children:t(`projects.pmReport`)}),a?(0,X.jsx)(`span`,{className:`block text-dark-text-secondary`,children:a}):null,o?(0,X.jsxs)(`span`,{className:`block text-dark-text-secondary`,children:[t(`projects.pmNextAction`),`: `,o]}):null,s>0?(0,X.jsxs)(`span`,{className:`mt-0.5 inline-flex items-center gap-1 text-accent-yellow`,children:[(0,X.jsx)(m,{size:12,"aria-hidden":`true`}),` `,s,` `,t(`projects.pmApprovalsPending`)]}):null,c?(0,X.jsx)(Te,{route:c,root:n.root,onOpenThread:n.onOpenThread,onOpenSession:n.onOpenSession}):null]})}case`pm_approval_requested`:return(0,X.jsx)(`span`,{children:t(`projects.pmApprovalRequested`)});case`pm_approval_resolved`:return(0,X.jsxs)(`span`,{children:[t(`projects.pmApprovalResolved`),i(`decision`)?(0,X.jsxs)(`span`,{className:`text-dark-text-secondary`,children:[` · `,i(`decision`)]}):null]});default:return(0,X.jsx)(`span`,{children:e.type})}}var De=(0,Y.memo)(function({root:e,onOpenThread:t,onOpenSession:n,children:r}){let{t:i}=E(),a=(0,Y.useMemo)(()=>j(e)??``,[e]),o=J(e=>e.residentByProject[a]??!1),s=J(e=>e.activityByProject[a]??ce),c=J(e=>e.approvals),l=(0,Y.useMemo)(()=>fe(c,a),[c,a]),u=J(e=>e.resolveApproval),[d,f]=(0,Y.useState)(!1),[h,_]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{a&&le(a)},[a]);let y=async()=>{if(a&&!h){_(!0);try{await oe(a,!o)}finally{_(!1)}}},x=s.slice(-20).reverse(),w=(0,Y.useMemo)(()=>{if(d)return null;let e=s.slice(-20);for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.type!==`pm_report`)continue;let r=Ce(n.fields.route);if(r)return r}return null},[s,d]),T=(0,Y.useMemo)(()=>({root:e,onOpenThread:t,onOpenSession:n}),[e,t,n]);return(0,X.jsxs)(`section`,{"aria-label":i(`projects.pmPanel`),className:`flex min-h-0 min-w-0 flex-1 flex-col border-b border-dark-border`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 overflow-hidden px-3 py-2`,children:[(0,X.jsx)(g,{size:14,"aria-hidden":`true`,className:o?`text-accent-green`:`text-dark-text-secondary`}),(0,X.jsx)(`span`,{className:`min-w-0 shrink truncate text-xs font-medium`,children:i(`projects.pmPanel`)}),(0,X.jsxs)(`span`,{className:k(`inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-badge`,o?`bg-accent-green/15 text-accent-green`:`bg-dark-bg-tertiary text-dark-text-secondary`),children:[(0,X.jsx)(`span`,{className:k(`h-1.5 w-1.5 rounded-full`,o?`bg-accent-green`:`bg-dark-text-secondary`),"aria-hidden":`true`}),i(o?`projects.pmResident`:`projects.pmOff`)]}),(0,X.jsxs)(`div`,{className:`ms-auto flex shrink-0 items-center gap-1`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:y,disabled:h||!a,className:k(`rounded px-2 py-0.5 text-meta transition-colors`,o?`text-dark-text-secondary hover:bg-dark-bg-tertiary hover:text-dark-text-primary`:`bg-accent-green/15 text-accent-green hover:bg-accent-green/25`),children:i(o?`projects.pmStop`:`projects.pmStart`)}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>f(e=>!e),"aria-expanded":d,"aria-label":i(`projects.pmToggleTimeline`),className:`rounded p-1 text-dark-text-secondary hover:bg-dark-bg-tertiary hover:text-dark-text-primary`,children:d?(0,X.jsx)(p,{size:14,"aria-hidden":`true`}):(0,X.jsx)(S,{size:14,"aria-hidden":`true`})})]})]}),l.length>0&&(0,X.jsx)(`ul`,{className:`space-y-1.5 px-3 pb-2`,children:l.map(e=>(0,X.jsx)(`li`,{className:`rounded-md border border-accent-yellow bg-accent-yellow/15 p-2`,children:(0,X.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,X.jsx)(m,{size:13,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-accent-yellow`}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`p`,{className:`truncate text-xs font-medium text-dark-text-primary`,children:e.title||e.requestedAction||i(`projects.pmApprovalCard`)}),e.summary?(0,X.jsx)(`p`,{className:`mt-0.5 line-clamp-3 text-meta text-dark-text-secondary`,children:e.summary}):null,(0,X.jsxs)(`div`,{className:`mt-1.5 flex gap-1.5`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>void u(e.escalationId,`approve`),className:`inline-flex items-center gap-1 rounded bg-accent-green/15 px-2 py-0.5 text-meta text-accent-green hover:bg-accent-green/25`,children:[(0,X.jsx)(C,{size:11,"aria-hidden":`true`}),` `,i(`projects.pmApprove`)]}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>void u(e.escalationId,`reject`),className:`inline-flex items-center gap-1 rounded bg-accent-red/15 px-2 py-0.5 text-meta text-accent-red hover:bg-accent-red/15`,children:[(0,X.jsx)(v,{size:11,"aria-hidden":`true`}),` `,i(`projects.pmReject`)]})]})]})]})},e.escalationId))}),w?(0,X.jsx)(`div`,{className:`px-3 pb-2`,children:(0,X.jsx)(Te,{route:w,root:T.root,onOpenThread:T.onOpenThread,onOpenSession:T.onOpenSession})}):null,r?(0,X.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:r}):null,d&&x.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-2`,children:(0,X.jsx)(`ul`,{className:`max-h-48 space-y-1.5 overflow-y-auto`,children:x.map(e=>(0,X.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs`,children:[e.type===`pm_report`?(0,X.jsx)(b,{size:12,"aria-hidden":`true`,className:`mt-0.5 shrink-0 text-accent-green`}):(0,X.jsx)(`span`,{className:`mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-dark-text-secondary`,"aria-hidden":`true`}),(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`div`,{className:`text-dark-text-primary`,children:Ee(e,i,T)}),(0,X.jsx)(`div`,{className:`text-badge text-dark-text-secondary`,children:N(e.at)})]})]},e.id))})})]})}),Oe=[],ke={setActiveTab:()=>{},createNewSession:()=>{},clearMessages:()=>{},setTheme:()=>{},setLogs:()=>{},setUnreadLogs:()=>{}},Ae=(0,Y.memo)(function({projectId:e,root:t,sessionId:n,onOpenThread:r,onOpenSession:i,onLoadSession:a,slashOptions:o,onStop:s,onPause:c,onResume:l}){let{t:u}=E(),d=J(e=>e.managers),f=J(e=>e.managersLoaded),p=J(e=>e.fetchManagers),m=J(t=>t.residentByProject[e]??!1),h=G(e=>e.setFocusedPmSession),g=G(e=>e.enterPmSession),_=G(e=>e.backToPmSessions);(0,Y.useEffect)(()=>{p()},[p]);let v=(0,Y.useMemo)(()=>d.find(t=>t.projectKey===e)?.managerSessionIds??[],[d,e]),y=v.includes(n)?n:f?v[0]??null:n;(0,Y.useEffect)(()=>{f&&(y?y!==n&&g(y):_())},[f,y,n,g,_]),(0,Y.useEffect)(()=>(h(y),()=>h(null)),[y,h]),(0,Y.useEffect)(()=>{y&&a&&a(y)},[y,a]);let b=D(e=>y?e.messagesBySession[y]??Oe:Oe),x=D(e=>y?e.generatingSessions.includes(y):!1),S=(0,Y.useCallback)(async t=>{let n=t.trim();n&&y&&(await K(e,n,y)?D.getState().addMessage(y,{id:`msg-${Date.now()}`,type:`user`,content:n,timestamp:Date.now()}):O.error(u(`projects.pmSendFailed`)))},[e,y,u]);return(0,X.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col`,"data-testid":`coordinator-pane`,children:(0,X.jsx)(De,{root:t,onOpenThread:r,onOpenSession:i,children:y?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(F,{messages:b,isGenerating:x,isPaused:!1,sessionId:y}),(0,X.jsx)(I,{sessionId:y,onSend:S,onStop:()=>s?.(y),onPause:()=>c?.(y),onResume:()=>l?.(y),slashOptions:o??ke,inputDisabled:!m,inputDisabledHint:u(`projects.pmInputDisabled`)})]}):(0,X.jsx)(`div`,{className:`flex flex-1 items-center justify-center px-6 text-center text-xs text-dark-muted`,children:u(`projects.coordinatorHint`)})})})}),je=(0,Y.memo)(function({projectName:e,projectRoot:t,missing:i,levelLabel:a,onBack:o,onBackToSessions:c,onOpenFolder:l,onNewSessionHere:u,threadsOpen:d,onToggleThreads:f,settingsOpen:p,onToggleSettings:m,onOpenMore:h,moreItemsCount:g}){let{t:_}=E(),v=e=>{let t=e.currentTarget.getBoundingClientRect();h(t.left,t.bottom+4,re(g))};return(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`ui-icon-button`,title:_(`projects.back`),"aria-label":_(`projects.back`),"data-testid":`project-detail-back`,children:(0,X.jsx)(w,{size:15,"aria-hidden":`true`})}),(0,X.jsxs)(`nav`,{className:`min-w-0 flex items-baseline gap-1.5 text-sm`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:o,className:`shrink-0 text-dark-muted transition-colors hover:text-dark-text`,children:_(`projects.title`)}),(0,X.jsx)(`span`,{className:`shrink-0 text-dark-muted/50`,"aria-hidden":`true`,children:`›`}),(0,X.jsx)(`button`,{type:`button`,onClick:c,disabled:!c,className:k(`min-w-0 truncate transition-colors`,c?`text-dark-muted hover:text-dark-text`:`cursor-default text-dark-text`),"data-testid":`project-detail-name`,children:e}),(0,X.jsx)(`span`,{className:`shrink-0 text-dark-muted/50`,"aria-hidden":`true`,children:`›`}),(0,X.jsx)(`button`,{type:`button`,onClick:c,disabled:!c,className:k(`min-w-0 truncate transition-colors`,c?`text-dark-muted hover:text-dark-text`:`cursor-default font-medium text-dark-text`),"data-testid":`project-detail-level`,children:a})]}),(0,X.jsxs)(`div`,{className:`ms-auto flex items-center gap-2`,children:[t&&(0,X.jsx)(`span`,{className:`hidden min-w-0 max-w-[240px] truncate font-mono text-meta text-dark-muted lg:block`,title:t,"data-testid":`project-detail-root`,children:t}),(0,X.jsxs)(`button`,{type:`button`,onClick:l,disabled:i,className:`btn shrink-0 text-meta disabled:cursor-not-allowed disabled:opacity-50`,title:i?_(`projects.openFolderDisabled`):t,"data-testid":`project-detail-open-folder`,children:[(0,X.jsx)(x,{size:12,"aria-hidden":`true`}),_(`projects.openFolder`)]}),(0,X.jsxs)(`button`,{type:`button`,onClick:u,disabled:i,className:`btn shrink-0 text-meta disabled:cursor-not-allowed disabled:opacity-50`,title:_(i?`projects.newSessionDisabled`:`projects.newSessionHere`),"data-testid":`project-detail-new-session-btn`,children:[(0,X.jsx)(y,{size:12,"aria-hidden":`true`}),_(`projects.newSessionHere`)]}),(0,X.jsx)(`button`,{type:`button`,onClick:f,"aria-expanded":d,className:k(`ui-icon-button`,d&&`bg-accent-blue/10 text-accent-blue`),title:_(`projects.railTabs`),"aria-label":_(`projects.railTabs`),"data-testid":`project-detail-threads`,children:(0,X.jsx)(r,{size:14,"aria-hidden":`true`})}),(0,X.jsx)(`button`,{type:`button`,onClick:m,"aria-expanded":p,className:`ui-icon-button`,title:_(`projects.settings`),"aria-label":_(`projects.settings`),"data-testid":`project-detail-settings`,children:(0,X.jsx)(s,{size:14,"aria-hidden":`true`})}),(0,X.jsx)(`button`,{type:`button`,onClick:v,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),v(e))},className:`ui-icon-button`,title:_(`projects.moreActions`),"aria-label":_(`projects.moreActions`),"aria-haspopup":`menu`,"data-testid":`project-detail-more`,children:(0,X.jsx)(n,{size:14,"aria-hidden":`true`})})]})]})}),Me=(0,Y.memo)(function({projectId:e,onOpenSession:t}){let{t:n}=E(),r=J(e=>e.managers),i=J(e=>e.fetchManagers),a=J(t=>t.residentByProject[e]??!1),[o,s]=(0,Y.useState)(!1),[c,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(null);(0,Y.useEffect)(()=>{i()},[i]);let p=(0,Y.useMemo)(()=>r.find(t=>t.projectKey===e)??null,[r,e]),m=J(e=>e.managersLoaded),h=p?.managerSessionIds??[],_=(0,Y.useCallback)(async()=>{if(o)return;s(!0);let r=await pe(e);await i(),s(!1),r?t(r):O.error(n(`projects.pmCreateFailed`),5e3)},[o,e,i,t,n]),b=(0,Y.useCallback)(async()=>{if(c)return;u(!0);let t=await oe(e,!0);await i(),u(!1),t?O.success(n(`projects.pmEnableDone`),3e3):O.error(n(`projects.pmEnableFailed`),5e3)},[c,e,i,n]),x=(0,Y.useCallback)(async t=>{if(d||typeof window<`u`&&!window.confirm(n(`projects.pmCloseSessionConfirm`)))return;f(t);let r=await de(e,t);await i(),f(null),r?O.success(n(`projects.pmCloseSessionDone`),3e3):O.error(n(`projects.pmCloseSessionFailed`),5e3)},[d,e,i,n]);return(0,X.jsxs)(`section`,{className:`flex min-h-0 flex-1 flex-col`,"aria-label":n(`projects.pmSessionList`),"data-testid":`pm-session-list`,children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 px-3 py-2`,children:[(0,X.jsx)(g,{size:14,className:k(`shrink-0`,a?`text-accent-green`:`text-dark-muted`),"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:`text-xs font-medium text-dark-text`,children:n(`projects.pmSessionList`)}),(0,X.jsx)(`span`,{className:`rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-badge leading-4 text-dark-muted`,"data-testid":`pm-session-count-pill`,children:n(`projects.pmSessionCount`,{count:h.length})}),!a&&(0,X.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded-full bg-dark-hover/70 px-1.5 py-px text-badge text-dark-muted`,"data-testid":`pm-session-resident-pill`,children:n(`projects.pmOff`)}),(0,X.jsxs)(`div`,{className:`ms-auto flex items-center gap-1.5`,children:[!a&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>void b(),disabled:c,className:`btn shrink-0 text-meta disabled:opacity-50`,"data-testid":`pm-session-enable`,children:n(`projects.pmEnable`)}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>void _(),disabled:o,className:`btn btn-primary shrink-0 text-meta disabled:opacity-50`,title:n(`projects.pmNewSession`),"data-testid":`pm-new-session`,children:[(0,X.jsx)(y,{size:12,"aria-hidden":`true`}),n(`projects.pmNewSession`)]})]})]}),(0,X.jsx)(`p`,{className:`shrink-0 px-3 pb-2 text-meta leading-relaxed text-dark-muted`,children:n(`projects.pmSessionListHint`)}),(0,X.jsx)(`div`,{className:`board-ground min-h-0 flex-1 overflow-y-auto px-3 pb-3 custom-scrollbar`,children:(0,X.jsxs)(`div`,{className:`mx-auto flex max-w-[980px] flex-col gap-1.5`,children:[m&&h.length===0?(0,X.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface px-3 py-4 text-center`,"data-testid":`pm-session-empty`,children:[(0,X.jsx)(`p`,{className:`text-xs text-dark-text`,children:n(`projects.emptyPmSessions`)}),(0,X.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:n(`projects.emptyPmSessionsHint`)})]}):null,h.map((e,r)=>{let i=r===0,o=!i;return(0,X.jsxs)(`div`,{className:`group relative`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>t(e),className:k(`flex w-full items-center gap-2.5 rounded-lg border border-dark-border bg-dark-surface px-3 py-2 text-start transition-colors hover:border-accent-blue/40 hover:bg-dark-hover/30`,o&&`pe-10`),"data-testid":`pm-session-row`,"data-session-id":e,children:[(0,X.jsx)(g,{size:13,"aria-hidden":`true`,className:k(`shrink-0`,a?`text-accent-green`:`text-dark-muted`)}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,X.jsx)(`span`,{className:`truncate text-xs text-dark-text`,children:ue(h,e,n)}),i&&p?.isDuty&&(0,X.jsx)(`span`,{className:`shrink-0`,title:n(`projects.managerBadgeDuty`),children:(0,X.jsx)(l,{size:11,"aria-hidden":`true`,className:`text-accent-yellow`})})]}),(0,X.jsx)(`span`,{className:`mt-0.5 block truncate font-mono text-meta text-dark-muted/60`,title:e,children:e})]}),!o&&(0,X.jsx)(S,{size:13,"aria-hidden":`true`,className:`shrink-0 text-dark-muted opacity-0 transition-opacity group-hover:opacity-70`})]}),o&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>void x(e),disabled:d===e,"aria-label":n(`projects.pmCloseSession`),title:n(`projects.pmCloseSession`),className:k(`absolute end-2 top-1/2 -translate-y-1/2 rounded p-1 transition-opacity`,`text-dark-muted hover:text-accent-red disabled:opacity-50`,d===e?`opacity-100`:`opacity-0 focus-visible:opacity-100 group-hover:opacity-100`),"data-testid":`pm-close-session`,"data-session-id":e,children:(0,X.jsx)(v,{size:13,"aria-hidden":`true`})})]},e)})]})})]})}),Ne=200;function Pe({isOpen:e,onClose:t,projectId:n,currentName:r}){let{t:i}=E(),a=G(e=>e.renameProject),[o,s]=(0,Y.useState)(r),[c,l]=(0,Y.useState)(!1);(0,Y.useEffect)(()=>{e&&(s(r),l(!1))},[e,r]);let u=async()=>{let e=o.trim();if(e===r.trim()){t();return}l(!0);let s=await a(n,e===``?null:e);l(!1),s.ok?(O.success(i(`projects.renamed`),3e3),t()):O.error(s.error,6e3)};return(0,X.jsxs)(V,{isOpen:e,onClose:t,title:i(`projects.rename`),size:`sm`,children:[(0,X.jsx)(`label`,{className:`mb-1 block text-meta text-dark-text`,htmlFor:`project-rename-input`,children:i(`projects.renameLabel`)}),(0,X.jsx)(`input`,{id:`project-rename-input`,autoFocus:!0,value:o,maxLength:Ne,placeholder:r,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!c&&u()},className:`w-full rounded-lg border border-dark-border bg-dark-bg px-3 py-2 font-mono text-meta text-dark-text outline-none focus:border-accent-blue`,"data-testid":`project-rename-input`}),(0,X.jsx)(`p`,{className:`mt-1.5 text-meta leading-relaxed text-dark-muted`,children:i(`projects.renameHint`)}),(0,X.jsxs)(`div`,{className:`mt-5 flex justify-end gap-3`,children:[(0,X.jsx)(z,{onClick:t,"data-testid":`project-rename-cancel`,children:i(`common.cancel`)}),(0,X.jsx)(z,{variant:`accent`,onClick:()=>void u(),loading:c,"data-testid":`project-rename-submit`,children:i(`common.confirm`)})]})]})}var Fe=(0,Y.memo)(function({projectId:e,onOpenThread:t}){let{t:n}=E(),r=G(e=>e.library),i=G(e=>e.libraryLoading),o=G(e=>e.libraryError),s=G(e=>e.openLibrary);(0,Y.useEffect)(()=>{s(e)},[e,s]);let c=(0,Y.useMemo)(()=>{if(!r)return[];let e=new Map;for(let t of r.items){let n=e.get(t.producerThreadId);n?n.push(t):e.set(t.producerThreadId,[t])}return[...e.entries()].map(([e,t])=>({threadId:e,thread:r.threads.find(t=>t.threadId===e),logicalGroups:M(t).sort((e,t)=>Le(t)-Le(e))}))},[r]),l=r?r.threads.length-c.length:0;return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`project-library`,children:[(0,X.jsxs)(`header`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2`,children:[(0,X.jsx)(a,{size:13,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:`text-meta font-medium text-dark-text`,children:n(`projects.library`)}),r&&(0,X.jsx)(`span`,{className:`ms-auto shrink-0 font-mono text-badge text-dark-muted`,"data-testid":`project-library-counts`,children:n(`projects.libraryCounts`,{items:r.items.length,threads:c.length})})]}),(0,X.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 py-2`,children:[o&&(0,X.jsxs)(`div`,{className:`flex items-start gap-1.5 rounded-lg border border-accent-red/30 bg-accent-red/10 px-2 py-1.5 text-meta text-accent-red`,"data-testid":`project-library-error`,children:[(0,X.jsx)(_,{size:12,className:`mt-[1px] shrink-0`,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1`,children:n(`projects.libraryFailed`,{message:o})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>void s(e),className:`shrink-0 underline-offset-2 hover:underline`,children:n(`projects.libraryRetry`)})]}),!o&&i&&!r&&(0,X.jsx)(`p`,{className:`text-meta text-dark-muted`,"data-testid":`project-library-loading`,children:n(`projects.libraryLoading`)}),!o&&r&&r.items.length===0&&(0,X.jsxs)(`div`,{"data-testid":`project-library-empty`,children:[(0,X.jsx)(`p`,{className:`text-meta font-medium text-dark-text`,children:n(`projects.libraryEmptyTitle`)}),(0,X.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:n(`projects.libraryEmptyBody`)})]}),(0,X.jsx)(`ul`,{className:`space-y-2`,children:c.map(({threadId:e,thread:r,logicalGroups:i})=>(0,X.jsxs)(`li`,{className:`rounded-lg border border-dark-border`,"data-testid":`project-library-group`,children:[(0,X.jsxs)(`button`,{type:`button`,onClick:()=>t(e),className:`flex w-full items-center gap-2 px-2 py-1.5 text-start transition-colors hover:bg-dark-hover`,title:n(`projects.libraryOpenThread`),children:[(0,X.jsx)(`span`,{className:`shrink-0 font-mono text-meta text-accent-blue`,children:r?.alias??e}),r?.title&&(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-meta text-dark-muted`,children:r.title}),r?.delivery&&(0,X.jsx)(`span`,{className:`ms-auto shrink-0 font-mono text-badge text-dark-muted/80`,children:ae(r.delivery).join(` · `)})]}),(0,X.jsx)(`ul`,{className:`space-y-1 border-t border-dark-border px-2 py-1.5`,children:i.map(e=>(0,X.jsx)(Ie,{versions:e},e[0].logicalId))})]},e))}),l>0&&(0,X.jsx)(`p`,{className:`mt-2 text-meta text-dark-muted/70`,"data-testid":`project-library-empty-threads`,children:n(`projects.libraryEmptyThreads`,{count:l})})]})]})});function Ie({versions:e}){let{t}=E(),n=e[0],r=A(n.createdAt);return(0,X.jsxs)(`li`,{className:`text-meta`,"data-testid":`project-library-item`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-dark-text`,title:n.logicalId,children:n.logicalId}),(0,X.jsxs)(`span`,{className:`shrink-0 font-mono text-dark-muted`,children:[`v`,n.version]}),r&&(0,X.jsx)(`span`,{className:`shrink-0 font-mono text-badge text-dark-muted/70`,children:r})]}),(0,X.jsxs)(`div`,{className:`mt-0.5 flex flex-wrap items-center gap-x-2 text-badge text-dark-muted`,children:[(0,X.jsx)(`span`,{children:n.type}),(0,X.jsx)(`span`,{children:n.status}),n.reviewRequired&&(0,X.jsxs)(`span`,{children:[`review: `,n.reviewState]}),e.length>1&&(0,X.jsx)(`span`,{children:t(`threads.artifactVersions`,{count:e.length})})]}),n.path&&(0,X.jsx)(`div`,{className:`mt-0.5 truncate font-mono text-badge text-dark-muted/80`,title:n.path,children:n.path})]})}function Le(e){let t=0;for(let n of e){let e=Date.parse(n.createdAt??``);Number.isFinite(e)&&e>t&&(t=e)}return t}var Re=(0,Y.memo)(function({projectId:e,isOpen:t,onClose:n,selectedThreadId:i,onSelectThread:o,onOpenThreadSession:s}){let{t:c}=E(),[l,u]=(0,Y.useState)(`threads`);(0,Y.useEffect)(()=>{i&&u(`threads`)},[i]);let[d,f]=(0,Y.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 767px)`).matches);(0,Y.useEffect)(()=>{if(typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(max-width: 767px)`),t=()=>f(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),B({isOpen:t&&!d,onClose:n,lockScroll:!1});let p=(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{role:`tablist`,"aria-label":c(`projects.railTabs`),className:`flex shrink-0 items-center gap-1 border-b border-dark-border px-2 py-1.5`,"data-testid":`project-rail-tabs`,children:[(0,X.jsx)(ze,{active:l===`threads`,onClick:()=>u(`threads`),icon:(0,X.jsx)(r,{size:12,"aria-hidden":`true`}),label:c(`threads.title`),testId:`project-rail-tab-threads`}),(0,X.jsx)(ze,{active:l===`library`,onClick:()=>u(`library`),icon:(0,X.jsx)(a,{size:12,"aria-hidden":`true`}),label:c(`projects.library`),testId:`project-rail-tab-library`})]}),(0,X.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:l===`library`?(0,X.jsx)(Fe,{projectId:e,onOpenThread:e=>o(e)}):i?(0,X.jsx)(W,{threadId:i,onBack:()=>o(null),onOpenSession:s}):(0,X.jsx)(ie,{workspaceId:e,onOpenThread:o})})]});return d?(0,X.jsx)(H,{isOpen:t,onClose:n,title:c(`projects.railTabs`),size:`lg`,children:p}):t?(0,X.jsx)(`aside`,{className:`canvas-plane flex min-h-0 w-[360px] shrink-0 flex-col border-s border-dark-border bg-dark-bg lg:w-[440px]`,"data-testid":`project-rail`,"aria-label":c(`projects.railTabs`),children:p}):null});function ze({active:e,onClick:t,icon:n,label:r,testId:i}){return(0,X.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":e,onClick:t,className:k(`flex items-center gap-1.5 rounded px-2 py-1 text-meta transition-colors`,e?`bg-accent-blue/10 text-accent-blue`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`),"data-testid":i,children:[n,(0,X.jsx)(`span`,{children:r})]})}var Be=(0,Y.memo)(function({projectId:e,onBack:t,onOpenFolder:n,onCopyRoot:r,onNewSessionHere:a,onOpenThreadSession:o,onOpenSession:s,onLoadSession:c,pmSlashOptions:l,onStopSession:d,onPauseSession:f,onResumeSession:p,onHide:m}){let{t:g}=E(),[v,b]=(0,Y.useState)(!1),[S,C]=(0,Y.useState)(!1),[w,T]=(0,Y.useState)(null),[D,O]=(0,Y.useState)(!1),{state:k,openAt:A,close:j}=U(),M=G(e=>e.detail),N=G(e=>e.openPmSessionId),P=G(e=>e.enterPmSession),ee=G(e=>e.backToPmSessions),F=J(e=>e.managers);(0,Y.useEffect)(()=>{G.getState().openProject(e)},[e]),(0,Y.useEffect)(()=>{T(null),b(!1),C(!1)},[e]);let I=M?.project??null,L=I?!I.rootExists:!1,R=!I||L,z=(0,Y.useMemo)(()=>{if(!N)return g(`projects.pmSessionList`);let t=F.find(t=>t.projectKey===e)?.managerSessionIds??[];return ue(t,N,g)},[N,F,e,g]),B=(0,Y.useMemo)(()=>{if(!I)return[];let e=[{kind:`item`,id:`copy-root`,label:g(`projects.copyRoot`),icon:u,onSelect:()=>r(I.root)}];return m&&e.push({kind:`item`,id:`hide-view`,label:g(L?`projects.removeView`:`projects.hide`),icon:i,onSelect:()=>m(I.projectId)}),e},[I,L,r,m,g]);return(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`project-detail`,children:[(0,X.jsx)(je,{projectName:I?.name??e,projectRoot:I?.root,missing:R,levelLabel:z,onBack:t,onBackToSessions:N?ee:void 0,onOpenFolder:()=>I&&n(I.root),onNewSessionHere:()=>I&&a(I.root),threadsOpen:D,onToggleThreads:()=>O(e=>!e),settingsOpen:v,onToggleSettings:()=>b(e=>!e),onOpenMore:(e,t,n)=>A(e,t,null,{height:n}),moreItemsCount:B.length}),L&&I&&(0,X.jsxs)(`div`,{className:`flex shrink-0 items-start gap-1.5 border-b border-accent-yellow/30 bg-accent-yellow/10 px-3 py-2 text-meta leading-relaxed text-accent-yellow`,"data-testid":`project-detail-missing`,children:[(0,X.jsx)(_,{size:12,className:`mt-[1px] shrink-0`,"aria-hidden":`true`}),(0,X.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,X.jsx)(`b`,{className:`font-semibold`,children:g(`projects.rootMissingTitle`)}),I&&(0,X.jsx)(`span`,{className:`mx-1 font-mono`,children:I.root}),(0,X.jsx)(`br`,{}),g(`projects.rootMissingBody`)]})]}),v&&I&&(0,X.jsxs)(`div`,{className:`shrink-0 space-y-1 border-b border-dark-border bg-dark-hover/20 px-3 py-2`,"data-testid":`project-settings`,children:[(0,X.jsx)($,{icon:(0,X.jsx)(x,{size:12,"aria-hidden":`true`}),label:g(`projects.openFolder`),hint:I.root,disabled:L,disabledHint:L?g(`projects.openFolderDisabled`):void 0,onClick:()=>n(I.root),testId:`project-settings-open-folder`}),(0,X.jsx)($,{icon:(0,X.jsx)(u,{size:12,"aria-hidden":`true`}),label:g(`projects.copyRoot`),hint:I.root,onClick:()=>r(I.root),testId:`project-settings-copy-root`}),(0,X.jsx)($,{icon:(0,X.jsx)(h,{size:12,"aria-hidden":`true`}),label:g(`projects.rename`),hint:I.name,onClick:()=>C(!0),testId:`project-settings-rename`}),(0,X.jsx)($,{icon:(0,X.jsx)(y,{size:12,"aria-hidden":`true`}),label:g(`projects.newSessionHere`),disabled:L,disabledHint:L?g(`projects.newSessionDisabled`):void 0,onClick:()=>I&&a(I.root),testId:`project-settings-new-session`})]}),(0,X.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1`,children:[(0,X.jsx)(`div`,{className:`mx-auto flex min-h-0 min-w-0 w-full max-w-[1040px] flex-1 flex-col`,"data-testid":`project-session-column`,children:N?(0,X.jsx)(Ae,{projectId:e,root:I?.root??e,sessionId:N,onOpenThread:e=>{O(!0),T(e)},onOpenSession:s,onLoadSession:c,slashOptions:l,onStop:d,onPause:f,onResume:p}):(0,X.jsx)(Me,{projectId:e,onOpenSession:P})}),(0,X.jsx)(Re,{projectId:e,isOpen:D,onClose:()=>O(!1),selectedThreadId:w,onSelectThread:T,onOpenThreadSession:o})]}),(0,X.jsx)(te,{items:B,position:k?{x:k.x,y:k.y}:null,onClose:j,ariaLabel:g(`projects.moreActions`)}),I&&(0,X.jsx)(Pe,{isOpen:S,onClose:()=>C(!1),projectId:I.projectId,currentName:I.name})]})});function $({icon:e,label:t,hint:n,disabled:r,disabledHint:i,onClick:a,testId:o}){return(0,X.jsxs)(`button`,{type:`button`,onClick:a,disabled:r,className:k(`flex w-full items-center gap-2 rounded px-1.5 py-1 text-start text-meta transition-colors`,r?`cursor-not-allowed text-dark-muted/60`:`text-dark-text hover:bg-dark-hover`),"data-testid":o,"data-disabled":r?`true`:`false`,title:r?i:n,children:[(0,X.jsx)(`span`,{className:`shrink-0`,children:e}),(0,X.jsx)(`span`,{className:`shrink-0`,children:t}),(0,X.jsx)(`span`,{className:`ms-auto min-w-0 truncate font-mono text-badge text-dark-muted/70`,children:r?i:n})]})}var Ve=250,He=(0,Y.memo)(function({workspaceDir:e,onNewSessionHere:n,onOpenThreadSession:r,onOpenSession:a,onLoadSession:o,pmSlashOptions:s,onStopSession:l,onPauseSession:u,onResumeSession:p}){let{t:m}=E(),{projects:h,hiddenProjects:g,hiddenCount:y,query:b,sort:x,loading:S,lastError:C,disabled:w,setQuery:T,setSort:D,openProjectId:A,enterProject:j,backToProjectList:M,createProject:N,hideProject:P,unhideProjects:F,refresh:I}=he(),[L,R]=(0,Y.useState)(!1),[z,te]=(0,Y.useState)(!1),[B,V]=(0,Y.useState)(!1),[H,re]=(0,Y.useState)(b),U=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{re(b)},[b]),(0,Y.useEffect)(()=>()=>{U.current&&clearTimeout(U.current)},[]);let W=e=>{re(e),U.current&&clearTimeout(U.current),U.current=setTimeout(()=>T(e),Ve)},[ie,ae]=(0,Y.useState)(()=>Date.now());(0,Y.useEffect)(()=>{let e=setInterval(()=>ae(Date.now()),3e4);return()=>clearInterval(e)},[]);let G=(0,Y.useMemo)(()=>se,[]),K=e=>{ne.openFolder(e).then(e=>{e.ok||O.error(e.error||m(`projects.openFolderFailed`),5e3)})},q=e=>{let t=navigator.clipboard?.writeText(e);t&&t.then(()=>O.success(m(`projects.copied`),2e3),()=>O.error(m(`projects.copyFailed`),4e3))};return w?(0,X.jsx)(`div`,{className:`flex h-full items-center justify-center p-6`,"data-testid":`projects-disabled`,children:(0,X.jsxs)(`div`,{className:`max-w-md rounded-xl border border-dark-border bg-dark-surface p-4 text-center`,children:[(0,X.jsx)(f,{size:18,className:`mx-auto text-dark-muted`,"aria-hidden":`true`}),(0,X.jsx)(`p`,{className:`mt-2 text-xs leading-relaxed text-dark-muted`,children:m(`projects.disabled`)})]})}):(0,X.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,"data-testid":`projects-view`,children:[A?(0,X.jsx)(Be,{projectId:A,onBack:M,onOpenFolder:K,onCopyRoot:q,onNewSessionHere:n,onOpenThreadSession:r,onOpenSession:a,onLoadSession:o,pmSlashOptions:s,onStopSession:l,onPauseSession:u,onResumeSession:p,onHide:e=>{P(e),O.info(m(`projects.hiddenToast`),4e3),M()}}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5`,children:[(0,X.jsx)(`span`,{className:`text-sm font-medium text-dark-text`,children:m(`projects.title`)}),(0,X.jsx)(`span`,{className:`rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-badge leading-4 text-dark-muted`,"data-testid":`projects-count-pill`,children:m(`projects.projectCount`,{count:h.length})}),(0,X.jsx)(`div`,{className:`ms-1 flex items-center rounded-md bg-dark-hover/60 p-0.5`,role:`group`,children:G.map(e=>(0,X.jsx)(`button`,{type:`button`,onClick:()=>D(e),"aria-pressed":x===e,className:k(`shrink-0 rounded px-1.5 py-0.5 text-meta transition-colors`,x===e?`bg-dark-surface text-dark-text`:`text-dark-muted hover:text-dark-text`),"data-testid":`projects-sort-${e}`,children:m(`projects.sort.${e}`)},e))}),(0,X.jsxs)(`div`,{className:`ms-auto flex items-center gap-1`,children:[(0,X.jsx)(`button`,{type:`button`,onClick:I,disabled:S,className:`ui-icon-button disabled:opacity-50`,title:m(`common.refresh`),"aria-label":m(`common.refresh`),"data-testid":`projects-refresh`,children:(0,X.jsx)(t,{size:14,className:k(S&&`animate-spin`),"aria-hidden":`true`})}),(0,X.jsxs)(`button`,{type:`button`,onClick:()=>R(!0),disabled:B,className:`btn btn-primary shrink-0 text-meta disabled:opacity-60`,title:m(`projects.newHint`),"data-testid":`projects-new`,children:[(0,X.jsx)(d,{size:13,"aria-hidden":`true`}),m(`projects.new`)]})]})]}),C&&(0,X.jsx)(`div`,{className:`shrink-0 px-3 pt-2`,"data-testid":`projects-status-banner`,children:(0,X.jsxs)(`div`,{className:`flex items-start gap-1.5 rounded-lg border border-accent-red/40 bg-accent-red/10 px-2 py-1.5 text-meta leading-relaxed text-accent-red`,children:[(0,X.jsx)(_,{size:12,className:`mt-[1px] shrink-0`,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1`,children:m(`projects.loadFailed`,{message:C})}),(0,X.jsx)(`button`,{type:`button`,onClick:I,className:`shrink-0 underline hover:no-underline`,"data-testid":`projects-retry`,children:m(`projects.retry`)})]})}),y>0&&(0,X.jsx)(`div`,{className:`shrink-0 px-3 pt-2`,"data-testid":`projects-hidden-banner`,children:(0,X.jsxs)(`div`,{className:`flex items-center gap-1.5 rounded-lg border border-dark-border bg-dark-hover/40 px-2 py-1.5 text-meta text-dark-muted`,children:[(0,X.jsx)(i,{size:11,className:`shrink-0`,"aria-hidden":`true`}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1`,children:m(`projects.hiddenCount`,{count:y})}),(0,X.jsx)(`button`,{type:`button`,onClick:()=>te(!0),className:`shrink-0 underline hover:no-underline`,"data-testid":`projects-unhide`,children:m(`projects.unhide`)})]})}),(0,X.jsx)(`div`,{className:`board-ground min-h-0 flex-1 overflow-y-auto px-3 py-3 custom-scrollbar`,children:(0,X.jsxs)(`div`,{className:`mx-auto flex max-w-[980px] flex-col`,children:[(0,X.jsx)(`h1`,{className:`text-lg font-semibold text-dark-text`,children:m(`projects.title`)}),(0,X.jsx)(`p`,{className:`mt-0.5 text-xs leading-relaxed text-dark-muted`,children:m(`projects.subtitle`)}),(0,X.jsxs)(`div`,{className:`mt-4 flex items-center gap-2 rounded-lg border border-dark-border bg-dark-surface px-2.5 py-1.5 transition-colors focus-within:border-accent-blue/50`,children:[(0,X.jsx)(c,{size:13,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,X.jsx)(`input`,{type:`text`,value:H,onChange:e=>W(e.target.value),placeholder:m(`projects.searchPlaceholder`),"aria-label":m(`projects.searchPlaceholder`),"data-testid":`projects-search`,className:`min-w-0 flex-1 bg-transparent text-xs text-dark-text placeholder:text-dark-muted focus:outline-none`}),H&&(0,X.jsx)(`button`,{type:`button`,onClick:()=>W(``),className:`shrink-0 rounded p-0.5 text-dark-muted transition-colors hover:text-dark-text`,"aria-label":m(`projects.searchClear`),"data-testid":`projects-search-clear`,children:(0,X.jsx)(v,{size:12,"aria-hidden":`true`})}),(0,X.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted/70`,children:m(`projects.serverFilterHint`)})]}),h.length===0?b.trim()?(0,X.jsxs)(`div`,{className:`mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center`,"data-testid":`projects-search-empty`,children:[(0,X.jsx)(`p`,{className:`text-xs text-dark-text`,children:m(`projects.searchEmpty`)}),(0,X.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:m(`projects.searchEmptyHint`,{q:b.trim()})})]}):(0,X.jsxs)(`div`,{className:`mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center`,"data-testid":`projects-empty`,children:[(0,X.jsx)(`p`,{className:`text-xs text-dark-text`,children:m(`projects.empty`)}),(0,X.jsx)(`p`,{className:`mt-1 text-meta leading-relaxed text-dark-muted`,children:m(`projects.emptyHint`)})]}):(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`mb-2 mt-5 flex items-center gap-2 text-badge font-semibold uppercase tracking-wide text-dark-muted/60`,children:[(0,X.jsx)(`span`,{className:`shrink-0`,children:m(`projects.yourProjects`)}),(0,X.jsx)(`span`,{className:`h-px flex-1 bg-dark-border/60`,"aria-hidden":`true`})]}),(0,X.jsx)(`div`,{className:`flex flex-col gap-1.5`,"data-testid":`projects-list`,children:h.map(e=>(0,X.jsx)(be,{project:e,onOpen:j,onOpenFolder:K,onCopyRoot:q,onHide:e=>{P(e),O.info(m(`projects.hiddenToast`),4e3)},now:ie},e.projectId))})]})]})})]}),(0,me.createPortal)((0,X.jsx)(ge,{isOpen:z,projects:g,onClose:()=>te(!1),onRestore:e=>{F(e),O.success(m(`projects.hiddenRestored`,{count:e.length}),3e3)}}),document.body),(0,me.createPortal)((0,X.jsx)(ee,{isOpen:L,initial:e||``,onClose:()=>R(!1),onConfirm:e=>{R(!1),V(!0),N(e).then(async e=>{if(!e.ok){V(!1),O.error(e.error,6e3);return}e.projectId&&j(e.projectId);let t=e.projectId?await oe(e.projectId,!0):!1;V(!1),t?O.success(m(`projects.created`),3e3):O.error(m(`projects.createdNoPm`),6e3)})}}),document.body)]})});export{He as ProjectsView};
|