@kimicode/cli 1.0.39 → 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.
Files changed (532) hide show
  1. package/LICENSE.md +12 -0
  2. package/README.md +1007 -28
  3. package/bin/stt/requirements.txt +20 -0
  4. package/bin/stt/stt_server.py +544 -0
  5. package/bin/tts/requirements.txt +21 -0
  6. package/bin/tts/tts_server.py +404 -0
  7. package/cli-wrapper.cjs +4 -0
  8. package/install.cjs +156 -2
  9. package/llms.txt +115 -0
  10. package/package.json +30 -11
  11. package/web/dist/assets/AssistantsView-dhdYVIy0.js +1 -0
  12. package/web/dist/assets/AutomationView-D1dU5ZV7.js +1 -0
  13. package/web/dist/assets/ChannelConfigView-CEPVZntU.js +8 -0
  14. package/web/dist/assets/ChartsView-DdN-beHW.js +1 -0
  15. package/web/dist/assets/ConnectorsView-CseCss9C.js +1 -0
  16. package/web/dist/assets/FileTreeView-Dnc3-gRF.js +1 -0
  17. package/web/dist/assets/HookConfigView-DA2h4HdJ.js +1 -0
  18. package/web/dist/assets/InputArea-DAgOOjOc.js +14 -0
  19. package/web/dist/assets/MemoryView-D6OUBi4-.js +1 -0
  20. package/web/dist/assets/MessageBubble-CCTRbIMZ.css +1 -0
  21. package/web/dist/assets/MessageBubble-CV16DZMG.js +453 -0
  22. package/web/dist/assets/ModelsView-BuqD9vWl.js +1 -0
  23. package/web/dist/assets/PluginsView-CIziDHFJ.js +2 -0
  24. package/web/dist/assets/ProjectsView-c6faWy32.js +1 -0
  25. package/web/dist/assets/SessionGrid-BZJHcklh.js +4 -0
  26. package/web/dist/assets/SessionGrid-Bk5CAXEn.css +1 -0
  27. package/web/dist/assets/SettingsModal-BqdGEGW-.js +4 -0
  28. package/web/dist/assets/SkillsView-CB6CKkmb.js +1 -0
  29. package/web/dist/assets/TemplatesTab-B8efVwVZ.js +1 -0
  30. package/web/dist/assets/ThreadsView-CDoM0aNb.js +2 -0
  31. package/web/dist/assets/ToolsView-BG-xsWsO.js +1 -0
  32. package/web/dist/assets/abnfDiagram-WEYOIA3C-DGUPHfRO.js +1 -0
  33. package/web/dist/assets/agentIconSet-Btsb_SC4.js +1 -0
  34. package/web/dist/assets/api-CCt9DRQm.js +1 -0
  35. package/web/dist/assets/arc-Y1ARJVZ4.js +1 -0
  36. package/web/dist/assets/architecture-WOLXFQ4H-BUERx_-B.js +1 -0
  37. package/web/dist/assets/architectureDiagram-ZHVYKT53-BPsQL7O5.js +36 -0
  38. package/web/dist/assets/array-BifhSqXX.js +1 -0
  39. package/web/dist/assets/blockDiagram-RJAE7QA3-pB7EXp6p.js +140 -0
  40. package/web/dist/assets/c4Diagram-XDPPPE54-BnPeCq_L.js +38 -0
  41. package/web/dist/assets/channel-CSrLW66f.js +1 -0
  42. package/web/dist/assets/channelMeta-BGQXQxgj.js +1 -0
  43. package/web/dist/assets/chunk-2E7WHVMD-xX282MrC.js +88 -0
  44. package/web/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  45. package/web/dist/assets/chunk-4EMNKR2T-BAQDLVqt.js +1 -0
  46. package/web/dist/assets/chunk-55XCU76K-BwAE3Eqq.js +1 -0
  47. package/web/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  48. package/web/dist/assets/chunk-7S6XSTFO-DwwaClMo.js +2 -0
  49. package/web/dist/assets/chunk-AQDTSKZB-DHG5Km_p.js +72 -0
  50. package/web/dist/assets/chunk-DSNLSHJZ-a6-B52h-.js +129 -0
  51. package/web/dist/assets/chunk-DUW6YSOI-Dgx8z5s3.js +1 -0
  52. package/web/dist/assets/chunk-HAGFOTED-DZMcAj3o.js +62 -0
  53. package/web/dist/assets/chunk-HNE4Q36P-gl_4xI6B.js +1 -0
  54. package/web/dist/assets/chunk-J5ZVWO5B-oDCd-gWO.js +1 -0
  55. package/web/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  56. package/web/dist/assets/chunk-NGNAAXSQ-Bw6tHVuc.js +136 -0
  57. package/web/dist/assets/chunk-NQOKRVIF-B8Q-YmhL.js +213 -0
  58. package/web/dist/assets/chunk-UHW7PFBP-isP5lYMB.js +1 -0
  59. package/web/dist/assets/chunk-VQ5W62QI-Bn68syIc.js +1 -0
  60. package/web/dist/assets/chunk-WQQL4CDK-CdZpmEYA.js +10 -0
  61. package/web/dist/assets/chunk-XXDRQBXY-CnbRkih_.js +1 -0
  62. package/web/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  63. package/web/dist/assets/chunk-YZO67HFG-DX9GhJkR.js +1 -0
  64. package/web/dist/assets/chunk-ZAUX2LTX-Ki22UlYp.js +1 -0
  65. package/web/dist/assets/chunk-ZCHMQSOR-BVj0Zx6L.js +2 -0
  66. package/web/dist/assets/classDiagram-v2-4MYWR3UA-C7PV1veb.js +217 -0
  67. package/web/dist/assets/cn-rx4uumOJ.js +1 -0
  68. package/web/dist/assets/common-BHXgEvgk.js +192 -0
  69. package/web/dist/assets/cose-bilkent-JH36ORCC-DHFtpmij.js +1 -0
  70. package/web/dist/assets/cynefin-EF2NZ3EQ-1rI2T0cc.js +1 -0
  71. package/web/dist/assets/cynefinDiagram-WF24UDRP-C8O_v8xU.js +62 -0
  72. package/web/dist/assets/cytoscape.esm-BY277UBX.js +321 -0
  73. package/web/dist/assets/dagre-NK4GIZVX-BWGoHIUd.js +4 -0
  74. package/web/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  75. package/web/dist/assets/diagram-CBK3MWTC-kf9v35RN.js +24 -0
  76. package/web/dist/assets/diagram-I5XIIV2D-Ro-ig56_.js +24 -0
  77. package/web/dist/assets/diagram-ODIL2UCW-CtGga01G.js +30 -0
  78. package/web/dist/assets/diagram-PFBEJUXE-C14lcR-6.js +3 -0
  79. package/web/dist/assets/diagram-RJA3I4VV-BBbqaSKU.js +41 -0
  80. package/web/dist/assets/diagram-TYUNFSNR-BynvjQsr.js +200 -0
  81. package/web/dist/assets/dist-CumnGVmJ.js +1 -0
  82. package/web/dist/assets/ebnfDiagram-V4P3TTPT-BdqUCZnk.js +1 -0
  83. package/web/dist/assets/elk-QONTBCTQ-CYCP_9Jy.js +27 -0
  84. package/web/dist/assets/erDiagram-KYQIGQAA-C3L55l_F.js +99 -0
  85. package/web/dist/assets/eventmodeling-K75KTNOO-CTQdA_1v.js +1 -0
  86. package/web/dist/assets/flowDiagram-IUGLLWBU-COLKOzBg.js +1 -0
  87. package/web/dist/assets/ganttDiagram-R7GPNTJY-Be4Qk8Hx.js +292 -0
  88. package/web/dist/assets/gitGraph-VSP46ZUC-B59HXvj1.js +1 -0
  89. package/web/dist/assets/gitGraphDiagram-PDYL7XHY-C2A0VA6q.js +106 -0
  90. package/web/dist/assets/graphlib-DS17s2tU.js +1 -0
  91. package/web/dist/assets/icons-BvYhTENi.js +1 -0
  92. package/web/dist/assets/index-BNI6CNsY.css +1 -0
  93. package/web/dist/assets/index-BX-d2OBW.js +130 -0
  94. package/web/dist/assets/info-OHQRW6UA-DWlkKvmi.js +1 -0
  95. package/web/dist/assets/infoDiagram-MVDRKAX5-B8e6dTjN.js +2 -0
  96. package/web/dist/assets/init-C-OQMol4.js +1 -0
  97. package/web/dist/assets/ishikawaDiagram-HPEHV2GE-udXPYi9H.js +70 -0
  98. package/web/dist/assets/journeyDiagram-BOSHW7O7-DTyDkf5d.js +139 -0
  99. package/web/dist/assets/kanban-definition-FNSA4HC5-BXgV20qe.js +89 -0
  100. package/web/dist/assets/katex-B940_AAO.js +257 -0
  101. package/web/dist/assets/line-DVabuQAu.js +1 -0
  102. package/web/dist/assets/linear-gLkGxN9m.js +1 -0
  103. package/web/dist/assets/markdown-DAQZeY5V.js +14 -0
  104. package/web/dist/assets/mermaid-parser.core-BrXnuEs7.js +7 -0
  105. package/web/dist/assets/mermaid.core-BGbz3k1k.js +44 -0
  106. package/web/dist/assets/mindmap-definition-6OY57UG3-DbtP-bmk.js +98 -0
  107. package/web/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  108. package/web/dist/assets/packet-JDAUHWVQ-iW8w3JF5.js +1 -0
  109. package/web/dist/assets/panels-DYiQiVWh.js +1 -0
  110. package/web/dist/assets/path-fybaL0A-.js +1 -0
  111. package/web/dist/assets/pegDiagram-ECIUJNBX-rBWJbaq4.js +1 -0
  112. package/web/dist/assets/pie-XZMESJXO-KHXEq-Yx.js +1 -0
  113. package/web/dist/assets/pieDiagram-GNMPY74T-DsW7yHm0.js +39 -0
  114. package/web/dist/assets/preload-helper-BLdHbfdN.js +1 -0
  115. package/web/dist/assets/profileChange-xrd7jkii.js +1 -0
  116. package/web/dist/assets/quadrantDiagram-D57K4MC3-DF_pwNhM.js +7 -0
  117. package/web/dist/assets/radar-ABXABTNO-BkAUJ_Zd.js +1 -0
  118. package/web/dist/assets/railroad-I3PHUGI6-BdnWRdGt.js +1 -0
  119. package/web/dist/assets/railroad-abnf-LNEFI6M7-C8K36-8b.js +1 -0
  120. package/web/dist/assets/railroad-ebnf-DWYD2UWJ-BlS25T3f.js +1 -0
  121. package/web/dist/assets/railroad-peg-JR7BVNR7-CBKGDi75.js +1 -0
  122. package/web/dist/assets/railroadDiagram-Y72NRBL7-DmrlMIvv.js +1 -0
  123. package/web/dist/assets/react-vendor-BlngCquv.js +19 -0
  124. package/web/dist/assets/requirementDiagram-EQYSW5RA-cvUq9H3I.js +84 -0
  125. package/web/dist/assets/rolldown-runtime-COiEfhsA.js +1 -0
  126. package/web/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  127. package/web/dist/assets/sankeyDiagram-SY24JHO5-BdxXAbER.js +40 -0
  128. package/web/dist/assets/sequenceDiagram-BLEHNHQU-Druumi0k.js +169 -0
  129. package/web/dist/assets/settingsStore-RLUAWgIk.js +1 -0
  130. package/web/dist/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  131. package/web/dist/assets/src-49LUQhkG.js +1 -0
  132. package/web/dist/assets/src-BWF7jMDv.js +1 -0
  133. package/web/dist/assets/state-_ZfNVAsd.js +1 -0
  134. package/web/dist/assets/stateDiagram-v2-A6IESKWZ-Jgh6qlrr.js +291 -0
  135. package/web/dist/assets/sttLanguages-aqoVC79g.js +2 -0
  136. package/web/dist/assets/swimlanes-B3ENRKFQ-4xKumvXQ.js +1 -0
  137. package/web/dist/assets/swimlanesDiagram-AYQRV4AK-bHcLKL3d.js +8 -0
  138. package/web/dist/assets/timeline-definition-JXYKGLGB-BYKhga9x.js +120 -0
  139. package/web/dist/assets/treeView-D4JQ5SDB-6-eTVUuH.js +1 -0
  140. package/web/dist/assets/treemap-SAJKECNS-Dxl8yCLE.js +1 -0
  141. package/web/dist/assets/ttsSettings-DHo3OsOq.js +15 -0
  142. package/web/dist/assets/types-JssxRFJn.js +1 -0
  143. package/web/dist/assets/useTranslation-BGmCDuQI.js +1 -0
  144. package/web/dist/assets/usecaseDiagram-WPOLBNNX-BaQ8nAv9.js +328 -0
  145. package/web/dist/assets/vennDiagram-Q3Y3IDCW-DkPvfmfT.js +34 -0
  146. package/web/dist/assets/wardley-7MLQ67FV-CZtI22aa.js +1 -0
  147. package/web/dist/assets/wardleyDiagram-IVAIDKWA-Dgi2OWQ4.js +78 -0
  148. package/web/dist/assets/websocket-C9e3h7VU.js +1 -0
  149. package/web/dist/assets/whatsNewStore-Bf_7lW8o.js +1 -0
  150. package/web/dist/assets/workspaceSemantics-RaIRer76.js +3 -0
  151. package/web/dist/assets/xychartDiagram-4URNHDU4-Ch96dep-.js +7 -0
  152. package/web/dist/favicon.svg +18 -39
  153. package/web/dist/icons/icon-1024.png +0 -0
  154. package/web/dist/icons/icon-180.png +0 -0
  155. package/web/dist/icons/icon-192.png +0 -0
  156. package/web/dist/icons/icon-512.png +0 -0
  157. package/web/dist/icons/icon-maskable-512.png +0 -0
  158. package/web/dist/index.html +46 -12
  159. package/web/dist/logo.svg +25 -39
  160. package/web/dist/manifest.webmanifest +2 -2
  161. package/web/dist/assets/AssistantsView-0aLB_cG6.js +0 -1
  162. package/web/dist/assets/AutomationView-CAMjPhJ2.js +0 -1
  163. package/web/dist/assets/ChannelConfigView-FcioeeYb.js +0 -8
  164. package/web/dist/assets/ConnectorsView-DERP7zAW.js +0 -1
  165. package/web/dist/assets/FileTreeView-hBtHBbAV.js +0 -11
  166. package/web/dist/assets/HookConfigView-NModtSB8.js +0 -1
  167. package/web/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  168. package/web/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  169. package/web/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  170. package/web/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  171. package/web/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  172. package/web/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  173. package/web/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  174. package/web/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  175. package/web/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  176. package/web/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  177. package/web/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  178. package/web/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  179. package/web/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  180. package/web/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  181. package/web/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  182. package/web/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  183. package/web/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  184. package/web/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  185. package/web/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  186. package/web/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  187. package/web/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  188. package/web/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  189. package/web/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  190. package/web/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  191. package/web/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  192. package/web/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  193. package/web/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  194. package/web/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  195. package/web/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  196. package/web/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  197. package/web/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  198. package/web/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  199. package/web/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  200. package/web/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  201. package/web/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  202. package/web/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  203. package/web/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  204. package/web/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  205. package/web/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  206. package/web/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  207. package/web/dist/assets/ModelsView-BPpO50C_.js +0 -1
  208. package/web/dist/assets/PluginsView-D0NE7zrt.js +0 -1
  209. package/web/dist/assets/ProjectsView-PIv7Gx4q.js +0 -1
  210. package/web/dist/assets/SessionGrid-BGpz0-op.css +0 -1
  211. package/web/dist/assets/SessionGrid-BsDL3lov.js +0 -47
  212. package/web/dist/assets/SettingsModal-DdebvEmv.js +0 -10
  213. package/web/dist/assets/SkillsView-BNoigImJ.js +0 -1
  214. package/web/dist/assets/TemplatesTab-D8Pa68fj.js +0 -1
  215. package/web/dist/assets/ToolsView-NY-yk5YX.js +0 -1
  216. package/web/dist/assets/WorkspaceDirPicker-C5knnArH.js +0 -6
  217. package/web/dist/assets/abap-BdImnpbu.js +0 -1
  218. package/web/dist/assets/actionscript-3-B3316cI-.js +0 -1
  219. package/web/dist/assets/ada-bCR0ucgS.js +0 -1
  220. package/web/dist/assets/ahk-CsyLZFj1.js +0 -1
  221. package/web/dist/assets/ahk2-8Zs4aa1G.js +0 -1
  222. package/web/dist/assets/andromeeda-C4gqWexZ.js +0 -1
  223. package/web/dist/assets/angular-html-DA-rfuFy.js +0 -1
  224. package/web/dist/assets/angular-ts-BrjP3tb8.js +0 -1
  225. package/web/dist/assets/apache-Pmp26Uib.js +0 -1
  226. package/web/dist/assets/apex-DhZFqWV2.js +0 -1
  227. package/web/dist/assets/apl-CORt7UWP.js +0 -1
  228. package/web/dist/assets/applescript-Co6uUVPk.js +0 -1
  229. package/web/dist/assets/ara-BRHolxvo.js +0 -1
  230. package/web/dist/assets/asciidoc-CSVQ5wI8.js +0 -1
  231. package/web/dist/assets/asm-D_Q5rh1f.js +0 -1
  232. package/web/dist/assets/astro-HNnZUWAn.js +0 -1
  233. package/web/dist/assets/aurora-x-D-2ljcwZ.js +0 -1
  234. package/web/dist/assets/awk-DMzUqQB5.js +0 -1
  235. package/web/dist/assets/ayu-dark-DYE7WIF3.js +0 -1
  236. package/web/dist/assets/ayu-light-BA47KaF1.js +0 -1
  237. package/web/dist/assets/ayu-mirage-32ctXXKs.js +0 -1
  238. package/web/dist/assets/ballerina-BFfxhgS-.js +0 -1
  239. package/web/dist/assets/bat-CickPsom.js +0 -1
  240. package/web/dist/assets/beancount-k_qm7-4y.js +0 -1
  241. package/web/dist/assets/berry-uYugtg8r.js +0 -1
  242. package/web/dist/assets/bibtex-CHM0blh-.js +0 -1
  243. package/web/dist/assets/bicep-Bmn6On1c.js +0 -1
  244. package/web/dist/assets/bird2-Bx8U0n9b.js +0 -1
  245. package/web/dist/assets/blade-2xfisSek.js +0 -1
  246. package/web/dist/assets/bsl-DlhNcFeZ.js +0 -1
  247. package/web/dist/assets/c-BIGW1oBm.js +0 -1
  248. package/web/dist/assets/c3-Dp5svz6Z.js +0 -1
  249. package/web/dist/assets/cadence-Bv_4Rxtq.js +0 -1
  250. package/web/dist/assets/cairo-KRGpt6FW.js +0 -1
  251. package/web/dist/assets/catppuccin-frappe-CZL1YF0i.js +0 -1
  252. package/web/dist/assets/catppuccin-latte-DH-8KZSZ.js +0 -1
  253. package/web/dist/assets/catppuccin-macchiato-B7yYVSCf.js +0 -1
  254. package/web/dist/assets/catppuccin-mocha-Ct7hS0mc.js +0 -1
  255. package/web/dist/assets/chapel-DTp_pixX.js +0 -1
  256. package/web/dist/assets/clarity-Dn5IMItf.js +0 -1
  257. package/web/dist/assets/clojure-P80f7IUj.js +0 -1
  258. package/web/dist/assets/cmake-D1j8_8rp.js +0 -1
  259. package/web/dist/assets/cobol-nBiQ_Alo.js +0 -1
  260. package/web/dist/assets/codeowners-Bp6g37R7.js +0 -1
  261. package/web/dist/assets/codeql-DsOJ9woJ.js +0 -1
  262. package/web/dist/assets/coffee-Ch7k5sss.js +0 -1
  263. package/web/dist/assets/common-lisp-Cg-RD9OK.js +0 -1
  264. package/web/dist/assets/coq-C7JzOVbR.js +0 -1
  265. package/web/dist/assets/cpp-BMRokrvK.js +0 -1
  266. package/web/dist/assets/crystal-DGywbUpC.js +0 -1
  267. package/web/dist/assets/csharp-DSvCPggb.js +0 -1
  268. package/web/dist/assets/css-CLj8gQPS.js +0 -1
  269. package/web/dist/assets/csv-fuZLfV_i.js +0 -1
  270. package/web/dist/assets/cue-D82EKSYY.js +0 -1
  271. package/web/dist/assets/cypher-COkxafJQ.js +0 -1
  272. package/web/dist/assets/d-85-TOEBH.js +0 -1
  273. package/web/dist/assets/dark-plus-C3mMm8J8.js +0 -1
  274. package/web/dist/assets/dart-bE4Kk8sk.js +0 -1
  275. package/web/dist/assets/dax-CEL-wOlO.js +0 -1
  276. package/web/dist/assets/desktop-BmXAJ9_W.js +0 -1
  277. package/web/dist/assets/diff-D97Zzqfu.js +0 -1
  278. package/web/dist/assets/docker-BcOcwvcX.js +0 -1
  279. package/web/dist/assets/dotenv-Da5cRb03.js +0 -1
  280. package/web/dist/assets/dracula-BzJJZx-M.js +0 -1
  281. package/web/dist/assets/dracula-soft-BXkSAIEj.js +0 -1
  282. package/web/dist/assets/dream-maker-BtqSS_iP.js +0 -1
  283. package/web/dist/assets/edge-FbVlp4U3.js +0 -1
  284. package/web/dist/assets/elixir-CkH2-t6x.js +0 -1
  285. package/web/dist/assets/elm-DbKCFpqz.js +0 -1
  286. package/web/dist/assets/emacs-lisp-C_m_b--Z.js +0 -1
  287. package/web/dist/assets/erb-DXfck5VN.js +0 -1
  288. package/web/dist/assets/erlang-DsQrWhSR.js +0 -1
  289. package/web/dist/assets/everforest-dark-BgDCqdQA.js +0 -1
  290. package/web/dist/assets/everforest-light-C8M2exoo.js +0 -1
  291. package/web/dist/assets/fennel-BYunw83y.js +0 -1
  292. package/web/dist/assets/fish-BvzEVeQv.js +0 -1
  293. package/web/dist/assets/fluent-C4IJs8-o.js +0 -1
  294. package/web/dist/assets/fortran-fixed-form-CkoXwp7k.js +0 -1
  295. package/web/dist/assets/fortran-free-form-BxgE0vQu.js +0 -1
  296. package/web/dist/assets/fsharp-CXgrBDvD.js +0 -1
  297. package/web/dist/assets/gdresource-TyuKm33G.js +0 -1
  298. package/web/dist/assets/gdscript-DqcFQ5yU.js +0 -1
  299. package/web/dist/assets/gdshader-DkwncUOv.js +0 -1
  300. package/web/dist/assets/genie-D0YGMca9.js +0 -1
  301. package/web/dist/assets/gherkin-DyxjwDmM.js +0 -1
  302. package/web/dist/assets/git-commit-F4YmCXRG.js +0 -1
  303. package/web/dist/assets/git-rebase-r7XF79zn.js +0 -1
  304. package/web/dist/assets/github-dark-DHJKELXO.js +0 -1
  305. package/web/dist/assets/github-dark-default-Cuk6v7N8.js +0 -1
  306. package/web/dist/assets/github-dark-dimmed-DH5Ifo-i.js +0 -1
  307. package/web/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +0 -1
  308. package/web/dist/assets/github-light-DAi9KRSo.js +0 -1
  309. package/web/dist/assets/github-light-default-D7oLnXFd.js +0 -1
  310. package/web/dist/assets/github-light-high-contrast-BfjtVDDH.js +0 -1
  311. package/web/dist/assets/gleam-BspZqrRM.js +0 -1
  312. package/web/dist/assets/glimmer-js-ByusRIyA.js +0 -1
  313. package/web/dist/assets/glimmer-ts-BfAWNZQY.js +0 -1
  314. package/web/dist/assets/glsl-DplSGwfg.js +0 -1
  315. package/web/dist/assets/gn-n2N0HUVH.js +0 -1
  316. package/web/dist/assets/gnuplot-DdkO51Og.js +0 -1
  317. package/web/dist/assets/go-C27-OAKa.js +0 -1
  318. package/web/dist/assets/graphql-ChdNCCLP.js +0 -1
  319. package/web/dist/assets/groovy-gcz8RCvz.js +0 -1
  320. package/web/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +0 -1
  321. package/web/dist/assets/gruvbox-dark-medium-GsRaNv29.js +0 -1
  322. package/web/dist/assets/gruvbox-dark-soft-CVdnzihN.js +0 -1
  323. package/web/dist/assets/gruvbox-light-hard-CH1njM8p.js +0 -1
  324. package/web/dist/assets/gruvbox-light-medium-DRw_LuNl.js +0 -1
  325. package/web/dist/assets/gruvbox-light-soft-hJgmCMqR.js +0 -1
  326. package/web/dist/assets/hack-BWmVpMyf.js +0 -1
  327. package/web/dist/assets/haml-D5jkg6IW.js +0 -1
  328. package/web/dist/assets/handlebars-BpdQsYii.js +0 -1
  329. package/web/dist/assets/haskell-Df6bDoY_.js +0 -1
  330. package/web/dist/assets/haxe-CfZj7gIn.js +0 -1
  331. package/web/dist/assets/hcl-BWvSN4gD.js +0 -1
  332. package/web/dist/assets/hjson-D5-asLiD.js +0 -1
  333. package/web/dist/assets/hlsl-D3lLCCz7.js +0 -1
  334. package/web/dist/assets/horizon-BUw7H-hv.js +0 -1
  335. package/web/dist/assets/horizon-bright-CUuTKBJd.js +0 -1
  336. package/web/dist/assets/houston-DnULxvSX.js +0 -1
  337. package/web/dist/assets/html-derivative-DlHx6ybY.js +0 -1
  338. package/web/dist/assets/html-pp8916En.js +0 -1
  339. package/web/dist/assets/http-jrhK8wxY.js +0 -1
  340. package/web/dist/assets/hurl-irOxFIW8.js +0 -1
  341. package/web/dist/assets/hxml-2-FPmUDs.js +0 -1
  342. package/web/dist/assets/hy-DFXneXwc.js +0 -1
  343. package/web/dist/assets/icons-BxNxyk-c.js +0 -804
  344. package/web/dist/assets/imba-DGztddWO.js +0 -1
  345. package/web/dist/assets/index-DaiVo1RY.css +0 -1
  346. package/web/dist/assets/index-RB5ffy32.js +0 -620
  347. package/web/dist/assets/ini-BEwlwnbL.js +0 -1
  348. package/web/dist/assets/java-CylS5w8V.js +0 -1
  349. package/web/dist/assets/javascript-wDzz0qaB.js +0 -1
  350. package/web/dist/assets/jinja-f2NsQr07.js +0 -1
  351. package/web/dist/assets/jison-wvAkD_A8.js +0 -1
  352. package/web/dist/assets/json-Cp-IABpG.js +0 -1
  353. package/web/dist/assets/json5-C9tS-k6U.js +0 -1
  354. package/web/dist/assets/jsonc-Des-eS-w.js +0 -1
  355. package/web/dist/assets/jsonl-DcaNXYhu.js +0 -1
  356. package/web/dist/assets/jsonnet-DFQXde-d.js +0 -1
  357. package/web/dist/assets/jssm-C2t-YnRu.js +0 -1
  358. package/web/dist/assets/jsx-g9-lgVsj.js +0 -1
  359. package/web/dist/assets/julia-5Bft2YPA.js +0 -1
  360. package/web/dist/assets/just-Cwhn7H3k.js +0 -1
  361. package/web/dist/assets/kanagawa-dragon-BuwD2xS4.js +0 -1
  362. package/web/dist/assets/kanagawa-lotus-C3DzagqV.js +0 -1
  363. package/web/dist/assets/kanagawa-wave-DFGoQZhC.js +0 -1
  364. package/web/dist/assets/kdl-DV7GczEv.js +0 -1
  365. package/web/dist/assets/kotlin-BdnUsdx6.js +0 -1
  366. package/web/dist/assets/kusto-wEQ09or8.js +0 -1
  367. package/web/dist/assets/laserwave-DUszq2jm.js +0 -1
  368. package/web/dist/assets/latex-D5pSuvFb.js +0 -1
  369. package/web/dist/assets/lean-BZvkOJ9d.js +0 -1
  370. package/web/dist/assets/less-B1dDrJ26.js +0 -1
  371. package/web/dist/assets/light-plus-B7mTdjB0.js +0 -1
  372. package/web/dist/assets/liquid-C0sCDyMI.js +0 -1
  373. package/web/dist/assets/llvm-BZoOZj88.js +0 -1
  374. package/web/dist/assets/log-2UxHyX5q.js +0 -1
  375. package/web/dist/assets/logo-BtOb2qkB.js +0 -1
  376. package/web/dist/assets/lua-BaeVxFsk.js +0 -1
  377. package/web/dist/assets/luau-BnpPk5vE.js +0 -1
  378. package/web/dist/assets/make-CHLpvVh8.js +0 -1
  379. package/web/dist/assets/markdown-B2L4Mq-x.js +0 -30
  380. package/web/dist/assets/markdown-Cvjx9yec.js +0 -1
  381. package/web/dist/assets/marko-DjSrsDqO.js +0 -1
  382. package/web/dist/assets/material-theme-D5KoaKCx.js +0 -1
  383. package/web/dist/assets/material-theme-darker-BfHTSMKl.js +0 -1
  384. package/web/dist/assets/material-theme-lighter-B0m2ddpp.js +0 -1
  385. package/web/dist/assets/material-theme-ocean-CyktbL80.js +0 -1
  386. package/web/dist/assets/material-theme-palenight-Csfq5Kiy.js +0 -1
  387. package/web/dist/assets/matlab-D7o27uSR.js +0 -1
  388. package/web/dist/assets/mdc-D1_yUvq7.js +0 -1
  389. package/web/dist/assets/mdx-Cmh6b_Ma.js +0 -1
  390. package/web/dist/assets/mermaid-CQcHuHx7.js +0 -1
  391. package/web/dist/assets/min-dark-CafNBF8u.js +0 -1
  392. package/web/dist/assets/min-light-CTRr51gU.js +0 -1
  393. package/web/dist/assets/mipsasm-CKIfxQSi.js +0 -1
  394. package/web/dist/assets/mojo-DJz3ZmWd.js +0 -1
  395. package/web/dist/assets/monokai-BRVnQi9A.js +0 -1
  396. package/web/dist/assets/moonbit-CHtswR0a.js +0 -1
  397. package/web/dist/assets/move-el3G9tDJ.js +0 -1
  398. package/web/dist/assets/narrat-DRg8JJMk.js +0 -1
  399. package/web/dist/assets/nextflow-C-mBbutL.js +0 -1
  400. package/web/dist/assets/nextflow-groovy-vE_lwT2v.js +0 -1
  401. package/web/dist/assets/nginx-BpAMiNFr.js +0 -1
  402. package/web/dist/assets/night-owl-C39BiMTA.js +0 -1
  403. package/web/dist/assets/night-owl-light-CMTm3GFP.js +0 -1
  404. package/web/dist/assets/nim-BIad80T-.js +0 -1
  405. package/web/dist/assets/nix-CwoSXNpI.js +0 -1
  406. package/web/dist/assets/nord-Ddv68eIx.js +0 -1
  407. package/web/dist/assets/nsis-BlV79W_Q.js +0 -1
  408. package/web/dist/assets/nushell-D3jzshHO.js +0 -1
  409. package/web/dist/assets/objective-c-DXmwc3jG.js +0 -1
  410. package/web/dist/assets/objective-cpp-CLxacb5B.js +0 -1
  411. package/web/dist/assets/ocaml-C0hk2d4L.js +0 -1
  412. package/web/dist/assets/odin-BBf5iR-q.js +0 -1
  413. package/web/dist/assets/one-dark-pro-DVMEJ2y_.js +0 -1
  414. package/web/dist/assets/one-light-C3Wv6jpd.js +0 -1
  415. package/web/dist/assets/openscad-C4EeE6gA.js +0 -1
  416. package/web/dist/assets/org-DM6o9KBp.js +0 -1
  417. package/web/dist/assets/panels-P_I7Q72_.js +0 -1
  418. package/web/dist/assets/pascal-D93ZcfNL.js +0 -1
  419. package/web/dist/assets/perl-B9cMNwum.js +0 -1
  420. package/web/dist/assets/php-Csjmro_R.js +0 -1
  421. package/web/dist/assets/pkl-u5AG7uiY.js +0 -1
  422. package/web/dist/assets/plastic-3e1v2bzS.js +0 -1
  423. package/web/dist/assets/plsql-ChMvpjG-.js +0 -1
  424. package/web/dist/assets/po-BTJTHyun.js +0 -1
  425. package/web/dist/assets/poimandres-CS3Unz2-.js +0 -1
  426. package/web/dist/assets/polar-C0HS_06l.js +0 -1
  427. package/web/dist/assets/postcss-CXtECtnM.js +0 -1
  428. package/web/dist/assets/powerquery-CEu0bR-o.js +0 -1
  429. package/web/dist/assets/powershell-BmBUJMz7.js +0 -1
  430. package/web/dist/assets/prisma-Vru482bI.js +0 -1
  431. package/web/dist/assets/profileChange-C7Jg9C61.js +0 -1
  432. package/web/dist/assets/prolog-CbFg5uaA.js +0 -1
  433. package/web/dist/assets/proto-C7zT0LnQ.js +0 -1
  434. package/web/dist/assets/pug-DKIMFp6K.js +0 -1
  435. package/web/dist/assets/puppet-BMWR74SV.js +0 -1
  436. package/web/dist/assets/purescript-CklMAg4u.js +0 -1
  437. package/web/dist/assets/python-B6aJPvgy.js +0 -1
  438. package/web/dist/assets/qml-3beO22l8.js +0 -1
  439. package/web/dist/assets/qmldir-C8lEn-DE.js +0 -1
  440. package/web/dist/assets/qss-IeuSbFQv.js +0 -1
  441. package/web/dist/assets/r-Cf5RLm7j.js +0 -1
  442. package/web/dist/assets/racket-BqYA7rlc.js +0 -1
  443. package/web/dist/assets/raku-DXvB9xmW.js +0 -1
  444. package/web/dist/assets/razor-BjBPvh-w.js +0 -1
  445. package/web/dist/assets/rbs-CpoqiR4B.js +0 -1
  446. package/web/dist/assets/react-vendor-B2V_5iSS.js +0 -9
  447. package/web/dist/assets/red-hvxz__6c.js +0 -1
  448. package/web/dist/assets/reg-C-SQnVFl.js +0 -1
  449. package/web/dist/assets/regexp-CDVJQ6XC.js +0 -1
  450. package/web/dist/assets/rel-C3B-1QV4.js +0 -1
  451. package/web/dist/assets/riscv-BM1_JUlF.js +0 -1
  452. package/web/dist/assets/ron-D8l8udqQ.js +0 -1
  453. package/web/dist/assets/rose-pine-5qJOZa0Y.js +0 -1
  454. package/web/dist/assets/rose-pine-dawn-zx0QlTCp.js +0 -1
  455. package/web/dist/assets/rose-pine-moon-C9pEdX9L.js +0 -1
  456. package/web/dist/assets/rosmsg-BJDFO7_C.js +0 -1
  457. package/web/dist/assets/rst-bs7f0vWN.js +0 -1
  458. package/web/dist/assets/ruby-C0TQ7zu5.js +0 -1
  459. package/web/dist/assets/rust-B1yitclQ.js +0 -1
  460. package/web/dist/assets/sas-DEy46yEz.js +0 -1
  461. package/web/dist/assets/sass-Cj5Yp3dK.js +0 -1
  462. package/web/dist/assets/scala-CqE71os6.js +0 -1
  463. package/web/dist/assets/scheme-C98Dy4si.js +0 -1
  464. package/web/dist/assets/scss-D5BDwBP9.js +0 -1
  465. package/web/dist/assets/sdbl-DVxCFoDh.js +0 -1
  466. package/web/dist/assets/shaderlab-Dg9Lc6iA.js +0 -1
  467. package/web/dist/assets/shellscript-Yzrsuije.js +0 -1
  468. package/web/dist/assets/shellsession-BADoaaVG.js +0 -1
  469. package/web/dist/assets/slack-dark-BthQWCQV.js +0 -1
  470. package/web/dist/assets/slack-ochin-DqwNpetd.js +0 -1
  471. package/web/dist/assets/smalltalk-BOQMe2GC.js +0 -1
  472. package/web/dist/assets/smithy-cds9vsN8.js +0 -1
  473. package/web/dist/assets/snazzy-light-Bw305WKR.js +0 -1
  474. package/web/dist/assets/solarized-dark-CpvCGNkr.js +0 -1
  475. package/web/dist/assets/solarized-light-Dlz6yCKv.js +0 -1
  476. package/web/dist/assets/solidity-DijEV5ha.js +0 -1
  477. package/web/dist/assets/soy-8wufbnw4.js +0 -1
  478. package/web/dist/assets/sparql-rVzFXLq3.js +0 -1
  479. package/web/dist/assets/splunk-BtCnVYZw.js +0 -1
  480. package/web/dist/assets/sql-CRqJ_cUM.js +0 -1
  481. package/web/dist/assets/ssh-config-_ykCGR6B.js +0 -1
  482. package/web/dist/assets/stata-DI20mbqo.js +0 -1
  483. package/web/dist/assets/state-0T92JV0u.js +0 -17
  484. package/web/dist/assets/stylus-BEDo0Tqx.js +0 -1
  485. package/web/dist/assets/surrealql-Cjom0U5J.js +0 -1
  486. package/web/dist/assets/svelte-Cy7k_4gC.js +0 -1
  487. package/web/dist/assets/swift-C2oV4EkX.js +0 -1
  488. package/web/dist/assets/synthwave-84-CbfX1IO0.js +0 -1
  489. package/web/dist/assets/system-verilog-0hqHdDBg.js +0 -1
  490. package/web/dist/assets/systemd-4A_iFExJ.js +0 -1
  491. package/web/dist/assets/talonscript-CkByrt1z.js +0 -1
  492. package/web/dist/assets/tasl-QIJgUcNo.js +0 -1
  493. package/web/dist/assets/tcl-dwOrl1Do.js +0 -1
  494. package/web/dist/assets/templ-DhtptRzy.js +0 -1
  495. package/web/dist/assets/terraform-BETggiCN.js +0 -1
  496. package/web/dist/assets/tex-D96PA37w.js +0 -1
  497. package/web/dist/assets/tokyo-night-hegEt444.js +0 -1
  498. package/web/dist/assets/toml-vGWfd6FD.js +0 -1
  499. package/web/dist/assets/ts-tags-D351s5mN.js +0 -1
  500. package/web/dist/assets/tsv-B_m7g4N7.js +0 -1
  501. package/web/dist/assets/tsx-COt5Ahok.js +0 -1
  502. package/web/dist/assets/turtle-BsS91CYL.js +0 -1
  503. package/web/dist/assets/twig-27uCiNez.js +0 -1
  504. package/web/dist/assets/typescript-BPQ3VLAy.js +0 -1
  505. package/web/dist/assets/typespec-CAFt9gP4.js +0 -1
  506. package/web/dist/assets/typst-BUadGCkm.js +0 -1
  507. package/web/dist/assets/v-BGw2Nkan.js +0 -1
  508. package/web/dist/assets/vala-CsfeWuGM.js +0 -1
  509. package/web/dist/assets/vb-Cu-pLBUe.js +0 -1
  510. package/web/dist/assets/verilog-nZwndyjY.js +0 -1
  511. package/web/dist/assets/vesper-DRje8inN.js +0 -1
  512. package/web/dist/assets/vhdl-CeAyd5Ju.js +0 -1
  513. package/web/dist/assets/viml-CJc9bBzg.js +0 -1
  514. package/web/dist/assets/vitesse-black-Bkuqu6BP.js +0 -1
  515. package/web/dist/assets/vitesse-dark-D0r3Knsf.js +0 -1
  516. package/web/dist/assets/vitesse-light-CVO1_9PV.js +0 -1
  517. package/web/dist/assets/vue-BqiEGhQt.js +0 -1
  518. package/web/dist/assets/vue-html-AaS7Mt5G.js +0 -1
  519. package/web/dist/assets/vue-vine-BoDAl6tE.js +0 -1
  520. package/web/dist/assets/vyper-CDx5xZoG.js +0 -1
  521. package/web/dist/assets/wasm-CG6Dc4jp.js +0 -1
  522. package/web/dist/assets/wasm-MzD3tlZU.js +0 -1
  523. package/web/dist/assets/wenyan-BV7otONQ.js +0 -1
  524. package/web/dist/assets/wgsl-Dx-B1_4e.js +0 -1
  525. package/web/dist/assets/wikitext-BhOHFoWU.js +0 -1
  526. package/web/dist/assets/wit-5i3qLPDT.js +0 -1
  527. package/web/dist/assets/wolfram-lXgVvXCa.js +0 -1
  528. package/web/dist/assets/xml-sdJ4AIDG.js +0 -1
  529. package/web/dist/assets/xsl-CtQFsRM5.js +0 -1
  530. package/web/dist/assets/yaml-Buea-lGh.js +0 -1
  531. package/web/dist/assets/zenscript-DVFEvuxE.js +0 -1
  532. package/web/dist/assets/zig-VOosw3JB.js +0 -1
@@ -1 +0,0 @@
1
- import{j as e}from"./markdown-B2L4Mq-x.js";import{a as o,k as ne,aw as Hs,am as ke,a1 as de,X as $e,aO as Gs,e as se,aP as Fe,aQ as ps,aD as qs,m as _s,aR as Vs,aS as Ws,D as Ys,aI as Qs,a2 as xs,A as Js,aT as Xs}from"./icons-BxNxyk-c.js";import{a as j,u as Zs,t as M,f as ce,M as hs,P as et}from"./index-RB5ffy32.js";import"./react-vendor-B2V_5iSS.js";import"./state-0T92JV0u.js";import"./panels-P_I7Q72_.js";function st(){const[k,v]=o.useState([]),[C,t]=o.useState("1.0"),[P,Pe]=o.useState(!0),[g,ie]=o.useState(!0),[Te,X]=o.useState(null),Z=o.useCallback(async()=>{ie(!0),X(null);try{const N=await j.providers.presets();N.success&&N.data?(v(Array.isArray(N.data.providers)?N.data.providers:[]),t(N.data.version||"1.0"),Pe(N.data.customSupported!==!1)):X(N.error||"获取 Provider 列表失败")}catch(N){X(N instanceof Error?N.message:"未知错误")}finally{ie(!1)}},[]);return o.useEffect(()=>{Z()},[Z]),{presets:k,loading:g,error:Te,version:C,customSupported:P,reload:Z}}const tt=[{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"}],at={providerKey:"",apiKeys:[],modelIds:"",baseUrl:"",apiType:"",fullPath:!1,setDefault:!1,modelOverrides:{}},bs=et,Ne={"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 te(k){return k.trim().split("|")[0].trim()}function lt(k){const v=k.toLowerCase();return v.startsWith("claude-code://")||v.includes("/backend-api/codex")?v.startsWith("claude-code://")?"claude-code":"codex-responses":v.includes("/anthropic")||v.includes("/coding")||v.includes("/claude")||v.includes("/messages")?"anthropic-messages":v.includes("/responses")?"openai-responses":"openai-completions"}function ze(k){if(!k)return{};const v={};for(const C of k.models){const t={};C.apiType&&C.apiType!==k.apiType&&(t.apiType=C.apiType),C.baseUrl&&(t.baseUrl=C.baseUrl),Object.keys(t).length>0&&(v[C.id]=t)}return v}const we={"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 ut(){var ls,rs,os,ns,ds,cs,is;const{presets:k,loading:v,reload:C}=st(),{t}=Zs(),[P,Pe]=o.useState([]),[g,ie]=o.useState(null),[Te,X]=o.useState(!0),[Z,N]=o.useState(null),[Ee,Le]=o.useState(null),[n,fs]=o.useState(null),[$,gs]=o.useState([]),[vs,V]=o.useState(!1),[Re,W]=o.useState("select"),[T,B]=o.useState(null),[i,f]=o.useState(at),[ys,L]=o.useState(""),[Oe,Be]=o.useState(!1),[He,R]=o.useState(null),[Se,ae]=o.useState(!1),[ue,Ge]=o.useState(!1),[le,me]=o.useState(""),[Me,qe]=o.useState(!1),[K,Y]=o.useState([]),[pe,F]=o.useState(new Set),[_e,H]=o.useState(null),[xe,re]=o.useState(""),[Ke,Ve]=o.useState(!1),[he,G]=o.useState(null),We=o.useMemo(()=>{const s=xe.trim().toLowerCase();return s?K.filter(a=>a.id.toLowerCase().includes(s)||a.name.toLowerCase().includes(s)):K},[K,xe]),Q=o.useCallback(async()=>{try{const s=await j.config.provider.get();s.success&&s.data&&(fs(s.data),gs(Array.isArray(s.data.entries)?s.data.entries:[]))}catch{}},[]),D=o.useCallback(async()=>{X(!0),N(null);try{const[s,a]=await Promise.all([j.models.list(),j.system.status()]);if(await Q(),s.success&&s.data&&Array.isArray(s.data.models)&&Pe(s.data.models),a.success&&a.data){const l=a.data.models||{total:0,online:0,offline:0};ie({overallStatus:l.offline===0?"healthy":l.online>0?"degraded":"unhealthy",healthRate:l.total>0?l.online/l.total:0,healthyInstances:l.online,totalInstances:l.total,totalRequests:0})}}catch{N(t("models.loadFailed"))}finally{X(!1)}},[Q,t]);o.useEffect(()=>{D()},[D]),o.useEffect(()=>{const s=()=>{D(),Q()};return window.addEventListener("models-updated",s),()=>window.removeEventListener("models-updated",s)},[D,Q]);const be=o.useCallback(s=>`${s.provider}:${s.id}`,[]),U=o.useMemo(()=>{const s=[...k];return s.find(a=>a.key==="custom")||s.push({key:"custom",name:"Custom",baseUrl:"",apiType:"openai-completions",defaultModel:"",isCustom:!0}),s},[k]),fe=o.useMemo(()=>[...U].sort((s,a)=>{if(s.isCustom)return-1;if(a.isCustom)return 1;const l=we[s.key],d=we[a.key];return l!==void 0&&d!==void 0?l-d:l!==void 0?-1:d!==void 0?1:s.name.localeCompare(a.name)}),[U]),Ye=o.useMemo(()=>{const s=le.trim().toLowerCase();return s?fe.filter(a=>a.name.toLowerCase().includes(s)||a.key.toLowerCase().includes(s)||(a.defaultModel||"").toLowerCase().includes(s)||(a.baseUrl||"").toLowerCase().includes(s)||(a.models||[]).some(l=>String(l).toLowerCase().includes(s))):fe},[fe,le]),O=o.useMemo(()=>{var d,r,c,u;const s=(n==null?void 0:n.providers)||{},a=new Set(U.map(m=>m.key)),l=Object.entries(s).filter(([m])=>!a.has(m));if(l.length!==0)return{keys:l.map(([m])=>m),modelCount:l.reduce((m,[,b])=>m+(b.modelCount||0),0),hasApiKey:l.some(([,m])=>m.hasApiKey),baseUrl:((r=(d=l.find(([,m])=>m.baseUrl))==null?void 0:d[1])==null?void 0:r.baseUrl)||"",apiType:((u=(c=l.find(([,m])=>m.apiType))==null?void 0:c[1])==null?void 0:u.apiType)||"openai-completions"}},[n,U]),J=T==="custom"?i.providerKey.trim():T||"",De=o.useMemo(()=>J?P.filter(s=>s.provider===J):[],[P,J]),js=o.useMemo(()=>{const s=new Map;for(const l of P)s.has(l.provider)||s.set(l.provider,[]),s.get(l.provider).push(l);for(const l of $)s.has(l.key)||s.set(l.key,[]);const a=[...s.keys()];return a.sort((l,d)=>{const r=we[l],c=we[d];return r!==void 0&&c!==void 0?r-c:r!==void 0?-1:c!==void 0?1:l.localeCompare(d)}),a.map(l=>({provider:l,models:s.get(l)||[]}))},[P,$]),Qe=o.useCallback(s=>{var u,m;const a=(u=n==null?void 0:n.providers)==null?void 0:u[s.key],l=$.find(b=>b.key===s.key),d=P.filter(b=>b.provider===s.key).map(b=>b.id),r=((m=s.models)==null?void 0:m.slice(0,3).join(", "))||s.defaultModel,c=d.length>0?d.join(", "):r;B(s.key),L(""),f({providerKey:s.key,apiKeys:[""],modelIds:c,baseUrl:(a==null?void 0:a.baseUrl)||s.baseUrl,apiType:(a==null?void 0:a.apiType)||s.apiType,fullPath:(a==null?void 0:a.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s.key,modelOverrides:ze(l)}),W("form"),V(!0),R(null),ae(!1),Y([]),F(new Set),H(null),re("")},[P,n,$]),ks=o.useCallback(s=>{var r;const a=(r=n==null?void 0:n.providers)==null?void 0:r[s],l=$.find(c=>c.key===s),d=P.filter(c=>c.provider===s).map(c=>c.id).join(", ");B("custom"),L(s),f({providerKey:s,apiKeys:[""],modelIds:d,baseUrl:(a==null?void 0:a.baseUrl)||"",apiType:(a==null?void 0:a.apiType)||"",fullPath:(a==null?void 0:a.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s,modelOverrides:ze(l)}),R(null),ae(!1),Y([]),F(new Set),H(null),re("")},[n,P,$]),Ue=o.useCallback(()=>{B("custom"),L(""),f({providerKey:"",apiKeys:[""],modelIds:"",baseUrl:"",apiType:"",fullPath:!1,setDefault:!(n!=null&&n.configured),modelOverrides:{}}),W("form"),V(!0),R(null),ae(!1),Y([]),F(new Set),H(null),re("")},[n]),Ns=o.useCallback(async()=>{var d;const s=i.baseUrl;if(!s){H(t("models.baseUrlRequired"));return}qe(!0),H(null),Y([]),F(new Set);const a=U.find(r=>r.key===T)||null,l=!!a&&!a.isCustom&&(i.baseUrl||"")===a.baseUrl&&i.fullPath!==!0;try{const r=(i.apiKeys||[]).map(m=>m.trim()).filter(Boolean)[0]||"",c=r.replace(/[^\x00-\xFF]/g,"");c!==r&&M.warning(t("models.apiKeySanitized"));const u=await j.models.fetch(s,c,i.fullPath===!0,l?a.key:void 0);if(u.success&&((d=u.data)!=null&&d.models)){const m=u.data.models;Y(m);const b={};for(const h of m)h.protocol&&h.protocol!==i.apiType&&(b[h.id]={apiType:h.protocol});Object.keys(b).length>0&&f(h=>{var p;const S={...h.modelOverrides};for(const[E,y]of Object.entries(b))(p=S[E])!=null&&p.apiType||(S[E]={...S[E]||{},...y});return{...h,modelOverrides:S}});const I=new Set(m.map(h=>h.id)),z=i.modelIds.split(",").map(h=>h.trim()).filter(Boolean),x=z.filter(h=>I.has(h.split("|")[0].trim())),q=z.filter(h=>!I.has(h.split("|")[0].trim()));if(F(new Set(x.map(h=>h.split("|")[0].trim()))),q.length>0){const h=q.map(S=>S.split("|")[0].trim());f(S=>({...S,modelIds:x.join(", ")})),M.warning(t("models.autoRemovedMissingModels",{models:h.join(", ")}))}M.success(t("models.fetchedCount",{n:m.length}))}else H(u.error||t("models.fetchFailed"))}catch(r){H(r instanceof Error?r.message:t("models.requestFailed"))}finally{qe(!1)}},[i.baseUrl,i.apiKeys,i.modelIds,i.apiType,i.fullPath,T,U,t]),ws=o.useCallback(async()=>{var a,l;const s=i.baseUrl;if(!s){G({ok:!1,message:t("models.baseUrlRequired")});return}Ve(!0),G(null);try{const d=(i.apiKeys||[]).map(u=>u.trim()).filter(Boolean)[0]||"",r=d.replace(/[^\x00-\xFF]/g,"");r!==d&&M.warning(t("models.apiKeySanitized"));const c=await j.providers.testConnection(s,r);if(c.success&&((a=c.data)!=null&&a.reachable)){const u=c.data,m={};u.resolvedBaseUrl&&u.resolvedBaseUrl!==i.baseUrl&&(m.baseUrl=u.resolvedBaseUrl),u.detectedApiType&&i.apiType===""&&(m.apiType=u.detectedApiType),Object.keys(m).length>0&&f(z=>({...z,...m}));const b=[];m.baseUrl&&b.push(t("models.baseUrlAutoCompleted",{url:m.baseUrl})),m.apiType&&b.push(t("models.apiTypeAutoSelected",{type:Ne[m.apiType]}));const I=u.message||t("models.connectionSuccess");G({ok:!0,message:b.length>0?t("models.connectionSuccessWithHints",{message:I,hints:b.join(t("models.hintJoiner"))}):I})}else G({ok:!1,message:((l=c.data)==null?void 0:l.message)||c.error||t("models.connectionFailed")})}catch(d){G({ok:!1,message:d instanceof Error?d.message:t("models.requestFailed")})}finally{Ve(!1)}},[i.baseUrl,i.apiKeys,i.apiType,t]),Cs=o.useCallback(s=>{const a=new Set(pe);a.has(s)?a.delete(s):a.add(s),F(a),f(l=>({...l,modelIds:Array.from(a).join(", ")}))},[pe]),Ps=o.useCallback(s=>{const a=i.modelIds.split(",").map(c=>c.trim()).filter(Boolean),d=a.some(c=>te(c)===s.id)?a.filter(c=>te(c)!==s.id):[...a,s.name&&s.name!==s.id?`${s.id}|${s.name}`:s.id];f(c=>({...c,modelIds:d.join(", ")}));const r=new Set(K.map(c=>c.id));F(new Set(d.map(te).filter(c=>r.has(c))))},[i.modelIds,K]),[Ts,Je]=o.useState(!1),[Ie,Xe]=o.useState(""),[Ze,ge]=o.useState([]),[Ss,es]=o.useState(!1),[ss,ve]=o.useState(null),[ye,Ms]=o.useState(!1),[je,Ks]=o.useState(!0),Ds=o.useCallback(()=>{Xe(""),ge([]),ve(null),Je(!0),oe("",{reason:!1,tool:!0})},[]),oe=o.useCallback(async(s,a)=>{es(!0),ve(null);try{const l=await j.models.catalogSearch({q:s,reasoning:(a==null?void 0:a.reason)??!1,toolCall:(a==null?void 0:a.tool)??!0,limit:30});l.success&&l.data?ge(l.data.hits||[]):(ve(l.error||t("models.catalogSearchFailed")),ge([]))}catch(l){ve(l instanceof Error?l.message:t("models.requestFailed")),ge([])}finally{es(!1)}},[t]),Us=o.useCallback(s=>{f(a=>{const l=a.modelIds.split(",").map(d=>d.trim()).filter(Boolean);return l.includes(s.model.id)?a:{...a,modelIds:[...l,s.model.id].join(", ")}}),M.success(t("models.addedModel",{id:s.model.id}))},[t]),[Ae,Is]=o.useState(null),As=o.useCallback(s=>{Xe(s),Ae&&clearTimeout(Ae),Is(setTimeout(()=>{oe(s,{reason:ye,tool:je})},300))},[Ae,ye,je,oe]),$s=async s=>{const a=s.provider,l=s.id,d=s.enabled!==!1,r=s.name||l,c=u=>d&&/default model/i.test(u);try{const u=await j.models.toggle(a,l);if(u.success){await D();return}const m=u.error||"";c(m)?M.error(t("models.defaultModelDisableBlocked",{name:r})):M.error(m||t("models.operationFailed"))}catch(u){const m=u instanceof Error?u.message:"";c(m)?M.error(t("models.defaultModelDisableBlocked",{name:r})):M.error(m||t("models.operationFailed"))}},Fs=async s=>{const a=be(s);Le(a);try{await j.models.test(s.id),await D()}finally{Le(null)}},zs=async(s,a)=>{if(confirm(t("models.deleteModelConfirm",{id:a})))try{(await j.models.delete(s,a)).success&&await D()}catch{}},ts=o.useCallback(s=>{var c;const a=$.find(u=>u.key===s),l=U.find(u=>u.key===s),d=!l||l.isCustom,r=(c=n==null?void 0:n.providers)==null?void 0:c[s];B(d?"custom":s),L(d?s:""),f({providerKey:s,apiKeys:[""],modelIds:(a==null?void 0:a.models.map(u=>u.name&&u.name!==u.id?`${u.id}|${u.name}`:u.id).join(", "))||"",baseUrl:(a==null?void 0:a.baseUrl)||(r==null?void 0:r.baseUrl)||(l==null?void 0:l.baseUrl)||"",apiType:(a==null?void 0:a.apiType)||(r==null?void 0:r.apiType)||(l==null?void 0:l.apiType)||"",fullPath:(a==null?void 0:a.fullPath)===!0||(r==null?void 0:r.fullPath)===!0,setDefault:(n==null?void 0:n.defaultProvider)!==s,modelOverrides:ze(a)}),W("form"),V(!0),R(null),ae(!1),Y([]),F(new Set),H(null),re("")},[$,U,n]),Es=s=>{ts(s.provider)},Ls=async()=>{var h,S;const s=U.find(p=>p.key===T)||null,a=T==="custom"?i.providerKey.trim():(s==null?void 0:s.key)||"";if(!a){R(t("models.providerNameRequired"));return}const l=(i.apiKeys||[]).map(p=>p.trim()).filter(Boolean),d=!!((S=(h=n==null?void 0:n.providers)==null?void 0:h[a])!=null&&S.hasApiKey);if(l.length===0&&!d){R(t("models.apiKeyRequired"));return}const r=s||{baseUrl:"",apiType:"openai-completions",defaultModel:""},c=l.map(p=>p.replace(/[^\x00-\xFF]/g,"")).filter(Boolean),u=K.length>0?new Set(K.map(p=>p.id)):null,m=(i.modelIds||r.defaultModel||"").split(",").map(p=>p.trim()).filter(Boolean),b=u?m.filter(p=>u.has(p.split("|")[0].trim())):m,I=u?m.filter(p=>!u.has(p.split("|")[0].trim())):[];I.length>0&&M.warning(t("models.autoSkippedMissingModels",{models:I.map(p=>p.split("|")[0].trim()).join(", ")}));const z=b.map(te).filter(Boolean),x=new Set;for(const p of P)p.provider!==a||z.includes(p.id)||(p.isGlobalDefault&&x.add("global"),p.isGoalDefault&&x.add("goal"));const q={provider:a,name:a,baseUrl:i.baseUrl||r.baseUrl,fullPath:i.fullPath===!0,apiType:i.apiType||lt(i.baseUrl||r.baseUrl)||r.apiType,models:b.map((p,E)=>{var ms;const y=p.trim().split("|").map(Bs=>Bs.trim()).filter(Boolean),A=y[0]||"",w=i.modelOverrides[A],us=(w==null?void 0:w.apiType)||((ms=s==null?void 0:s.modelApiTypes)==null?void 0:ms[A]);return{id:A,name:y[1]||A,aliases:y.length>2?y.slice(2):void 0,enabled:!0,priority:10+E,...us?{apiType:us}:{},...w!=null&&w.baseUrl?{baseUrl:w.baseUrl}:{}}}).filter(p=>p.id.length>0)};c.length>0&&(q.apiKeys=c),(!(n!=null&&n.configured)||i.setDefault)&&(q.setDefault=!0),Be(!0),R(null);try{const p=await j.config.provider.save(q);if(p.success){if(x.size>0){const E=z[0]||"",y={};if(E){const A=`${a}:${E}`;for(const w of x)y[w]=A}else{const A=P.find(w=>w.provider!==a);for(const w of x)w==="goal"?y[w]=null:A&&(y[w]=`${A.provider}:${A.id}`)}Object.keys(y).length>0&&(await j.models.setDefaults(y)).success&&M.success(t("models.defaultsAutoUpdated"))}V(!1),W("select"),B(null),L(""),await Q(),await D()}else R(p.error||t("models.saveFailed"))}catch(p){R(p instanceof Error?p.message:t("models.unknownError"))}finally{Be(!1)}},as=async s=>{if(confirm(t("models.removeConfirm",{providerKey:s})))try{await j.config.provider.delete(s),await Q(),await D()}catch{}},Rs=s=>{switch(s){case"online":return"text-accent-green";case"offline":return"text-dark-muted";case"error":return"text-accent-red";default:return"text-dark-muted"}},Os=s=>{switch(s){case"online":return e.jsx(Xs,{size:14});case"offline":return e.jsx(xs,{size:14});case"error":return e.jsx(Js,{size:14});default:return e.jsx(xs,{size:14})}},ee=o.useMemo(()=>U.find(s=>s.key===T)||null,[T,U]);return Te?e.jsx("div",{className:"flex h-64 items-center justify-center text-dark-muted",children:t("models.loading")}):Z?e.jsx("div",{className:"flex h-64 items-center justify-center text-accent-red",children:Z}):e.jsx("div",{className:"ui-page flex-1 min-h-0",children:e.jsxs("div",{className:"ui-page-inner space-y-6",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h2",{className:"text-base font-semibold",children:t("models.providerConfig")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs("button",{onClick:async()=>{try{await j.providers.refresh(),M.success(t("models.providerListRefreshed")),Ge(!0),await C(),setTimeout(()=>{C()},3e3)}catch{M.error(t("models.refreshFailed"))}},className:"btn btn-secondary px-3 py-2 text-xs",title:t("models.refreshListTitle"),children:[e.jsx(ne,{size:12}),t("models.refreshList")]}),e.jsxs("button",{onClick:()=>{ue&&me(""),Ge(s=>!s)},className:"btn btn-accent px-3 py-2 text-xs",children:[ue?e.jsx(Hs,{size:12}):e.jsx(ke,{size:12}),t(ue?"models.collapse":"models.addProvider")]})]})]}),ue&&e.jsxs("div",{children:[e.jsxs("div",{className:"relative mb-3 max-w-md",children:[e.jsx(de,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:le,onChange:s=>me(s.target.value),className:"w-full pl-8 pr-8 py-1.5 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",placeholder:t("models.providerSearchPlaceholder")}),le&&e.jsx("button",{onClick:()=>me(""),className:"absolute right-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-white",title:t("models.clear"),"aria-label":t("models.clearSearch"),children:e.jsx($e,{size:13})})]}),e.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 pr-1",children:v?e.jsxs("div",{className:"col-span-full flex items-center justify-center py-4 text-dark-muted text-sm",children:[e.jsx(Gs,{size:14,className:"mr-2 animate-spin"}),t("models.loadingProviders")]}):Ye.length===0?e.jsxs("div",{className:"col-span-full border border-accent-red/30 bg-accent-red/10 rounded-lg p-4 text-center",children:[e.jsx("div",{className:"text-sm text-accent-red font-medium mb-1",children:t("models.noMatchingProviders")}),e.jsx("div",{className:"text-xs text-dark-muted mb-3",children:t("models.noMatchingProvidersHint",{query:le})}),e.jsxs("div",{className:"flex items-center justify-center gap-2",children:[e.jsxs("button",{onClick:()=>me(""),className:"inline-flex items-center gap-1 px-2.5 py-1 text-xs border border-dark-border rounded hover:bg-dark-hover",children:[e.jsx($e,{size:12}),t("models.clearSearch")]}),e.jsxs("button",{onClick:Ue,className:"inline-flex items-center gap-1 px-2.5 py-1 text-xs bg-accent-blue text-white rounded hover:opacity-90",children:[e.jsx(ke,{size:12}),t("models.addCustomProvider")]})]})]}):Ye.map(s=>{var c,u;const a=s.key==="custom",l=a?O:(c=n==null?void 0:n.providers)==null?void 0:c[s.key],d=l==null?void 0:l.hasApiKey,r=a?!!(n!=null&&n.defaultProvider)&&((O==null?void 0:O.keys)||[]).includes(n.defaultProvider):(n==null?void 0:n.defaultProvider)===s.key;return e.jsxs("div",{className:`ui-card-interactive text-left p-4 relative ${d?"border-accent-green/30 bg-dark-surface hover:border-accent-green/50":"border-dark-border bg-dark-surface hover:border-dark-hover"}`,children:[e.jsxs("div",{onClick:()=>s.key==="custom"?Ue():Qe(s),className:"cursor-pointer",children:[e.jsxs("div",{className:"flex items-center justify-between mb-1",children:[e.jsx("span",{className:"text-sm font-medium",children:s.name}),d&&e.jsx(se,{size:14,className:"text-accent-green"})]}),e.jsxs("div",{className:"text-[10px] text-dark-muted space-y-0.5",children:[e.jsx("div",{className:"truncate",children:a?(l==null?void 0:l.baseUrl)||t("models.customBaseUrl"):s.baseUrl||t("models.customBaseUrl")}),e.jsx("div",{className:"truncate",children:a&&O?`${O.keys.join(", ")}`:s.defaultModel||t("models.noDefaultModel")}),e.jsxs("div",{children:[l?t("models.configuredCount",{n:l.modelCount}):t("models.availableCount",{n:((u=s.models)==null?void 0:u.length)||0}),s.models&&s.models.length>0&&!l&&e.jsx("span",{className:"text-accent-blue",children:" ✓"})]})]}),r&&e.jsx("div",{className:"mt-1 text-[10px] text-accent-red",children:t("models.defaultProviderBadge")})]}),d&&s.key!=="custom"&&e.jsx("button",{onClick:m=>{m.stopPropagation(),as(s.key)},className:"absolute top-1.5 right-1.5 p-1 rounded text-dark-muted hover:bg-accent-red/10 hover:text-accent-red transition-colors",title:t("models.deleteProvider"),"aria-label":t("models.deleteProviderNamed",{name:s.name}),children:e.jsx(Fe,{size:13})})]},s.key)})})]})]}),g&&e.jsxs("div",{className:"grid grid-cols-4 gap-4",children:[e.jsx(Ce,{title:t("models.overallStatus"),value:g.totalInstances===0?t("models.notConfigured"):g.overallStatus==="healthy"?t("models.healthy"):g.overallStatus==="degraded"?t("models.degraded"):t("models.abnormal"),color:g.totalInstances===0?"blue":g.overallStatus==="healthy"?"green":g.overallStatus==="degraded"?"yellow":"red"}),e.jsx(Ce,{title:t("models.healthRate"),value:g.totalInstances===0?"N/A":`${(g.healthRate*100).toFixed(0)}%`,color:g.totalInstances===0?"blue":g.healthRate>.8?"green":g.healthRate>.5?"yellow":"red"}),e.jsx(Ce,{title:t("models.onlineInstances"),value:g.totalInstances===0?t("models.none"):`${g.healthyInstances}/${g.totalInstances}`,color:g.healthyInstances>0?"green":"red"}),e.jsx(Ce,{title:t("models.totalRequests"),value:g.totalRequests>0?g.totalRequests.toLocaleString():"0",color:"blue"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-3",children:[e.jsx("h3",{className:"text-sm font-medium",children:t("models.configuredModels")}),e.jsx("span",{className:"text-[10px] text-dark-muted",title:t("models.actIsGlobalHint"),children:t("models.actIsGlobalHint")})]}),e.jsxs("div",{className:"space-y-4 max-h-[640px] overflow-y-auto custom-scrollbar pr-1",children:[js.map(s=>{var d;const a=$.find(r=>r.key===s.provider),l=(d=n==null?void 0:n.providers)==null?void 0:d[s.provider];return e.jsxs("div",{className:"rounded-lg border border-dark-border overflow-hidden",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2 px-3 py-2 bg-dark-bg border-b border-dark-border",children:[e.jsxs("div",{className:"flex items-center gap-2 min-w-0 flex-wrap",children:[e.jsx("span",{className:"text-xs font-semibold whitespace-nowrap text-accent-purple",children:s.provider}),(n==null?void 0:n.defaultProvider)===s.provider&&e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap",children:t("models.defaultShort")}),e.jsx("span",{className:"text-[10px] text-dark-muted truncate",children:(l==null?void 0:l.baseUrl)||(a==null?void 0:a.baseUrl)||""}),e.jsx("span",{className:"text-[10px] text-dark-muted whitespace-nowrap",children:(a==null?void 0:a.apiType)||(l==null?void 0:l.apiType)||""}),l!=null&&l.hasApiKey||a!=null&&a.hasApiKey?e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-green/20 text-accent-green whitespace-nowrap",children:t("models.hasKey")}):e.jsx("span",{className:"text-[9px] px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red whitespace-nowrap",children:t("models.noKey")})]}),e.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[e.jsx("button",{onClick:()=>ts(s.provider),className:"p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue",title:t("models.editProviderNamed",{name:s.provider}),children:e.jsx(ps,{size:13})}),e.jsx("button",{onClick:()=>as(s.provider),className:"p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red",title:t("models.deleteProviderNamed",{name:s.provider}),children:e.jsx(Fe,{size:13})})]})]}),e.jsxs("div",{className:"space-y-2 p-2 bg-dark-surface/40",children:[s.models.map(r=>{var m,b,I,z;const c=a==null?void 0:a.models.find(x=>x.id===r.id),u=!!(c!=null&&c.apiType&&c.apiType!==(a==null?void 0:a.apiType));return e.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:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1 flex-wrap",children:[e.jsx("span",{className:Rs(r.status),children:Os(r.status)}),e.jsx("span",{className:"font-medium text-sm text-accent-blue",children:r.name}),e.jsx("span",{className:"text-[10px] text-accent-purple px-1.5 py-0.5 bg-accent-purple/10 rounded",children:r.provider}),r.apiType&&e.jsx("span",{className:`text-[10px] 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:Ne[r.apiType]||r.apiType}),u&&e.jsx("span",{className:"text-[9px] px-1 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium",title:t("models.overrideTitle"),children:t("models.overrideBadge")}),r.isGlobalDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-red/20 text-accent-red font-medium",title:t("models.globalDefaultUnsettable"),children:t("chat.globalDefault")}),r.isActDefault&&!r.isGlobalDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-yellow/20 text-accent-yellow font-medium",children:t("chat.actDefault")}),r.isGoalDefault&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 rounded bg-accent-purple/20 text-accent-purple font-medium",children:t("chat.goalDefault")})]}),e.jsxs("div",{className:"grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs",children:[e.jsx(_,{label:t("models.loadLabel"),value:`${r.load}/${r.maxLoad}`}),e.jsx(_,{label:t("models.tokenUsageLabel"),value:`${ce(r.tokens)}/${ce(r.maxTokens)}`}),e.jsx(_,{label:t("models.inputPrice"),value:`$${r.price.input}/M`}),e.jsx(_,{label:t("models.outputPrice"),value:`$${r.price.output}/M`})]}),e.jsxs("div",{className:"mt-3 grid grid-cols-2 sm:grid-cols-4 gap-3 text-xs",children:[e.jsx(_,{label:t("models.inputTokensLabel"),value:ce(((m=r.usage)==null?void 0:m.input)??0)}),e.jsx(_,{label:t("models.outputTokensLabel"),value:ce(((b=r.usage)==null?void 0:b.output)??0)}),e.jsx(_,{label:t("models.totalTokensLabel"),value:ce(((I=r.usage)==null?void 0:I.total)??0)}),e.jsx(_,{label:t("models.usageRequestsLabel"),value:String(((z=r.usage)==null?void 0:z.requests)??0)})]})]}),e.jsxs("div",{className:"flex items-center gap-2 shrink-0",children:[tt.map(x=>{const q=x.key==="global"?r.isGlobalDefault:r.isGoalDefault,h=x.key==="global"?t("models.setGlobalDefaultTitle"):t("models.setGoalDefaultTitle"),S=t("models.unsetGoalDefaultTitle"),p=t("models.unsetGoalDefaultFailed"),E=t("models.setGoalDefaultFailed");return q?x.key==="global"?e.jsxs("span",{className:`inline-flex items-center gap-1 px-2 py-1 rounded text-[10px] border ${x.bg} ${x.color} font-medium`,title:t("chat.globalDefault"),children:[e.jsx(se,{size:11}),t(x.labelKey)]},x.key):e.jsxs("button",{onClick:async()=>{try{await j.models.setDefaults({[x.key]:null}),await D()}catch(y){N(y instanceof Error?y.message:p)}},className:`inline-flex items-center gap-1 px-2 py-1 rounded text-[10px] border ${x.bg} ${x.color} font-medium cursor-pointer hover:opacity-80`,title:S,children:[e.jsx(se,{size:11}),t(x.labelKey)]},x.key):r.enabled===!1?null:e.jsx("button",{onClick:async()=>{try{await j.models.setDefaults({[x.key]:`${r.provider}:${r.id}`}),await D()}catch(y){N(y instanceof Error?y.message:E)}},className:"px-2 py-1 rounded text-[10px] border border-dark-border text-dark-muted hover:text-dark-text hover:border-dark-hover",title:h,children:t(x.labelKey)},x.key)}),e.jsx("button",{onClick:()=>Es(r),className:"p-1.5 rounded hover:bg-accent-blue/10 text-dark-muted hover:text-accent-blue",title:t("models.editModel"),children:e.jsx(ps,{size:13})}),e.jsx("button",{onClick:()=>zs(r.provider,r.id),className:"p-1.5 rounded hover:bg-accent-red/10 text-dark-muted hover:text-accent-red",title:t("models.deleteModel"),children:e.jsx(Fe,{size:13})}),e.jsx("button",{onClick:()=>Fs(r),disabled:Ee===be(r),className:"p-1.5 rounded hover:bg-dark-hover disabled:opacity-50",title:t("models.refresh"),children:e.jsx(ne,{size:13,className:Ee===be(r)?"animate-spin":""})}),e.jsx("button",{onClick:()=>$s(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?t("models.enable"):t("models.disable")})]})]})},be(r))}),s.models.length===0&&e.jsx("div",{className:"text-center text-[11px] text-dark-muted py-3",children:t("models.noModelsInProvider")})]})]},s.provider)}),P.length===0&&$.length===0&&e.jsxs("div",{className:"text-center text-dark-muted py-6",children:[e.jsx(qs,{size:36,className:"mx-auto mb-2 opacity-40"}),e.jsx("p",{className:"text-sm",children:t("models.emptyHint")})]})]})]}),e.jsx(hs,{isOpen:vs,onClose:()=>{V(!1),W("select"),B(null),L("")},title:Re==="select"?t("chat.selectProvider"):(ee==null?void 0:ee.name)||t("models.providerConfig"),size:"xl",children:Re==="select"?e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"grid grid-cols-1 sm:grid-cols-2 gap-3",children:[fe.filter(s=>s.key!=="custom").map(s=>e.jsxs("button",{onClick:()=>Qe(s),className:"text-left p-3 rounded-lg border border-dark-border bg-dark-bg hover:border-accent-blue transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(se,{size:14,className:"text-accent-blue"}),e.jsx("span",{className:"text-sm font-medium",children:s.name})]}),e.jsx("div",{className:"text-xs text-dark-muted",children:s.defaultModel})]},s.key)),e.jsxs("button",{onClick:Ue,className:"text-left p-3 rounded-lg border border-dashed border-dark-border bg-dark-bg hover:border-accent-blue transition-colors",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx(_s,{size:14,className:"text-accent-blue"}),e.jsx("span",{className:"text-sm font-medium",children:t("models.customProvider")})]}),e.jsx("div",{className:"text-xs text-dark-muted",children:t("models.customProviderDesc")})]})]})}):e.jsxs("div",{className:"space-y-3",children:[T==="custom"&&e.jsxs("div",{className:"space-y-3",children:[O&&O.keys.length>0&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.editExistingConfig")}),e.jsxs("select",{value:ys,onChange:s=>{const a=s.target.value;a?ks(a):(L(""),f(l=>({...l,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:[e.jsx("option",{value:"",children:t("models.newCustomProviderOption")}),O.keys.map(s=>e.jsx("option",{value:s,children:s},s))]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.editExistingConfigHint")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.providerNameLabel")}),e.jsx("input",{value:i.providerKey,onChange:s=>f(a=>({...a,providerKey:s.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:t("models.providerNamePlaceholder")})]})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm text-dark-muted mb-1",children:["API Keys",(rs=(ls=n==null?void 0:n.providers)==null?void 0:ls[T==="custom"?i.providerKey.trim():T||""])!=null&&rs.hasApiKey?"":" *",e.jsx("span",{className:"text-dark-muted/60 text-xs",children:(ns=(os=n==null?void 0:n.providers)==null?void 0:os[T==="custom"?i.providerKey.trim():T||""])!=null&&ns.hasApiKey?t("models.apiKeysHintConfigured"):t("models.apiKeysHintNew")})]}),e.jsx("div",{className:"space-y-1.5",children:((ds=i.apiKeys)!=null&&ds.length?i.apiKeys:[""]).map((s,a)=>e.jsxs("div",{className:"flex gap-1.5 items-center",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx("input",{type:Se?"text":"password",value:s,autoComplete:"off",spellCheck:!1,onChange:l=>f(d=>({...d,apiKeys:d.apiKeys.map((r,c)=>c===a?l.target.value:r)})),className:"w-full px-3 py-2 pr-9 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-blue",placeholder:t("models.apiKeyDefaultPlaceholder")}),e.jsx("button",{type:"button",onClick:()=>ae(l=>!l),className:"absolute right-2 top-1/2 -translate-y-1/2 text-dark-muted hover:text-white",title:t(Se?"models.hideKeyTitle":"models.showKeyTitle"),children:Se?e.jsx(Vs,{size:14}):e.jsx(Ws,{size:14})})]}),a===0?e.jsxs("button",{type:"button",onClick:()=>f(l=>({...l,apiKeys:[...l.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:t("models.addApiKeyTitle"),children:[e.jsx(ke,{size:14}),e.jsx("span",{className:"hidden sm:inline",children:t("models.addApiKey")})]}):e.jsx("button",{type:"button",onClick:()=>f(l=>({...l,apiKeys:l.apiKeys.filter((d,r)=>r!==a)})),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:t("models.removeApiKeyTitle"),children:e.jsx($e,{size:14})})]},a))})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.modelIdLabel")}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:i.modelIds,onChange:s=>{const a=s.target.value;f(l=>({...l,modelIds:a})),F(()=>{const l=new Set;for(const d of a.split(",")){const r=d.trim().split("|")[0].trim();r&&K.some(c=>c.id===r)&&l.add(r)}return l})},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:(ee==null?void 0:ee.defaultModel)||t("models.modelIdPlaceholder")}),e.jsxs("button",{onClick:Ns,disabled:Me||!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:t("models.fetchModelsTitle"),children:[Me?e.jsx(ne,{size:13,className:"animate-spin"}):e.jsx(Ys,{size:13}),t(Me?"models.fetchingModels":"models.fetchModels")]}),e.jsxs("button",{onClick:ws,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:t("models.testConnectionTitle"),children:[Ke?e.jsx(ne,{size:13,className:"animate-spin"}):e.jsx(Qs,{size:13}),t(Ke?"models.testingConnection":"models.testConnection")]}),e.jsxs("button",{onClick:Ds,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:t("models.catalogSearchTitle"),children:[e.jsx(de,{size:13}),t("models.catalogSearch")]})]}),he&&e.jsxs("div",{className:`mt-1 text-xs ${he.ok?"text-accent-green":"text-accent-red"}`,children:[he.ok?"✓ ":"✗ ",he.message]}),_e&&e.jsx("div",{className:"mt-1 text-xs text-accent-red",children:_e}),K.length===0&&De.length>0&&e.jsxs("div",{className:"mt-2 border border-dark-border rounded-lg bg-dark-bg p-2",children:[e.jsx("div",{className:"flex items-center justify-between mb-2",children:e.jsxs("span",{className:"text-xs text-dark-muted",children:[t("models.configuredPanelPrefix"),e.jsx("strong",{className:"text-dark-text",children:De.length}),t("models.configuredPanelSuffix"),e.jsx("span",{className:"text-accent-green/70",children:t("models.configuredPanelHint")})]})}),e.jsx("div",{className:"max-h-48 overflow-y-auto custom-scrollbar grid grid-cols-2 sm:grid-cols-3 gap-1",children:De.map(s=>{const a=i.modelIds.split(",").map(te).filter(Boolean).includes(s.id);return e.jsxs("div",{role:"checkbox","aria-checked":a,title:s.name&&s.name!==s.id?`${s.id} — ${s.name}`:s.name||s.id,tabIndex:-1,onMouseDown:l=>l.preventDefault(),onClick:()=>Ps(s),className:`flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${a?"bg-accent-green/20 text-accent-green border border-accent-green/30":"hover:bg-dark-hover border border-transparent"}`,children:[e.jsx("span",{className:"shrink-0 mt-[3px]",children:a?e.jsx(se,{size:10}):e.jsx("div",{className:"w-2.5 h-2.5 rounded border border-dark-border"})}),e.jsx("span",{className:"min-w-0 flex-1 break-words leading-snug",children:s.name||s.id}),s.isGlobalDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-red/20 text-accent-red shrink-0",children:t("models.globalShort")}),s.isActDefault&&!s.isGlobalDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-yellow/20 shrink-0",children:"Act"}),s.isGoalDefault&&e.jsx("span",{className:"text-[9px] px-1 rounded bg-accent-purple/20 shrink-0",children:"Goal"})]},s.id)})})]}),K.length>0&&e.jsxs("div",{className:"mt-2 border border-dark-border rounded-lg bg-dark-bg p-2",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsxs("span",{className:"text-xs text-dark-muted",children:[t("models.fetchedPanelPrefix"),e.jsx("strong",{className:"text-dark-text",children:K.length}),t("models.fetchedPanelMiddle"),e.jsx("strong",{className:"text-accent-blue",children:pe.size}),t("models.fetchedPanelSuffix"),e.jsx("span",{className:"text-accent-blue/70",children:t("models.fetchedPanelHint")})]}),e.jsx("button",{onClick:()=>{Y([]),F(new Set)},className:"px-2 py-0.5 text-[10px] border border-dark-border rounded hover:bg-dark-hover",children:t("models.close")})]}),e.jsxs("div",{className:"relative mb-2",children:[e.jsx(de,{size:12,className:"absolute left-2 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:xe,onChange:s=>re(s.target.value),className:"w-full pl-7 pr-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",placeholder:t("models.modelSearchPlaceholder")})]}),xe.trim()!==""&&e.jsxs("div",{className:"mb-1 text-[10px] text-dark-muted",children:[t("models.searchMatchPrefix"),e.jsx("strong",{className:"text-accent-blue",children:We.length}),t("models.searchMatchSuffix",{total:K.length})]}),e.jsx("div",{className:"max-h-72 overflow-y-auto custom-scrollbar grid grid-cols-1 sm:grid-cols-2 gap-1",children:We.map(s=>{const a=pe.has(s.id);return e.jsxs("div",{role:"checkbox","aria-checked":a,title:s.name&&s.name!==s.id?`${s.id} — ${s.name}`:s.id,tabIndex:-1,onMouseDown:l=>l.preventDefault(),onClick:()=>Cs(s.id),className:`flex items-start gap-1.5 px-2 py-1 rounded cursor-pointer text-xs transition-colors select-none ${a?"bg-accent-blue/20 text-accent-blue border border-accent-blue/30":"hover:bg-dark-hover border border-transparent"}`,children:[e.jsx("span",{className:"shrink-0 mt-[3px]",children:a?e.jsx(se,{size:10}):e.jsx("div",{className:"w-2.5 h-2.5 rounded border border-dark-border"})}),e.jsx("span",{className:"min-w-0 flex-1 break-all leading-snug",children:s.id})]},s.id)})})]})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:"Base URL"}),e.jsx("input",{value:i.baseUrl,onChange:s=>{f(a=>({...a,baseUrl:s.target.value})),G(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"}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer select-none mt-2",children:[e.jsx("button",{type:"button",role:"switch","aria-checked":i.fullPath,onClick:()=>{f(s=>({...s,fullPath:!s.fullPath})),G(null)},className:`relative w-9 h-5 rounded-full transition-colors shrink-0 ${i.fullPath?"bg-accent-green":"bg-dark-border"}`,children:e.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"}`})}),e.jsx("span",{className:"text-sm text-dark-muted",children:t("models.fullPathLabel")})]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.fullPathHint")})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm text-dark-muted mb-1",children:t("models.apiTypeLabel")}),e.jsxs("select",{value:i.apiType,onChange:s=>{f(a=>({...a,apiType:s.target.value})),G(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:[e.jsx("option",{value:"",children:t("models.apiTypeAutoDetect")}),bs.map(s=>e.jsx("option",{value:s,children:Ne[s]},s))]}),e.jsx("div",{className:"text-[11px] text-dark-muted/60 mt-1",children:t("models.apiTypeHint")})]}),e.jsxs("div",{children:[e.jsxs("label",{className:"block text-sm text-dark-muted mb-1",children:[t("models.modelApiTypeLabel"),e.jsx("span",{className:"text-dark-muted/60 text-xs",children:t("models.modelApiTypeHint")})]}),e.jsx("div",{className:"border border-dark-border rounded-lg divide-y divide-dark-border max-h-40 overflow-y-auto custom-scrollbar",children:(()=>{const s=i.modelIds.split(",").map(te).filter(Boolean);return s.length===0?e.jsx("div",{className:"px-3 py-2 text-xs text-dark-muted",children:t("models.modelApiTypeEmpty")}):s.map(a=>{var l;return e.jsxs("div",{className:"flex items-start justify-between gap-2 px-3 py-1.5",children:[e.jsx("span",{className:"text-xs min-w-0 flex-1 break-all leading-snug",title:a,children:a}),e.jsxs("select",{value:((l=i.modelOverrides[a])==null?void 0:l.apiType)||"",onChange:d=>f(r=>({...r,modelOverrides:{...r.modelOverrides,[a]:{...r.modelOverrides[a]||{},apiType:d.target.value}}})),className:"w-52 px-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:outline-none focus:border-accent-blue",children:[e.jsx("option",{value:"",children:"继承 Provider(默认)"}),bs.map(d=>e.jsx("option",{value:d,children:Ne[d]},d))]})]},a)})})()})]}),e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:i.setDefault,onChange:s=>f(a=>({...a,setDefault:s.target.checked})),className:"accent-accent-blue"}),e.jsx("span",{className:"text-sm text-dark-muted",children:t("models.setDefaultProvider")})]}),He&&e.jsx("div",{className:"text-sm text-accent-red",children:He}),e.jsxs("div",{className:"flex justify-between gap-2 pt-2",children:[e.jsx("div",{children:J&&((is=(cs=n==null?void 0:n.providers)==null?void 0:cs[J])==null?void 0:is.hasApiKey)&&e.jsx("button",{onClick:async()=>{if(confirm(t("models.deleteProviderConfirm",{key:J})))try{await j.config.provider.delete(J),V(!1),W("select"),B(null),L(""),await Q(),await D()}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:t("models.deleteProvider")})}),e.jsx("button",{onClick:()=>{W("select"),B(null),L(""),V(!1)},className:"px-4 py-2 rounded border border-dark-border hover:bg-dark-hover transition-colors text-sm",children:t("common.cancel")}),e.jsx("button",{onClick:Ls,disabled:Oe,className:"px-4 py-2 bg-accent-blue text-white rounded hover:bg-accent-blue/80 transition-colors text-sm disabled:opacity-50",children:t(Oe?"common.saving":"common.save")})]})]})}),e.jsx(hs,{isOpen:Ts,onClose:()=>Je(!1),title:e.jsxs("span",{className:"flex items-center gap-2",children:[e.jsx(de,{size:15,className:"text-accent-green"}),t("models.catalogTitle")]}),size:"2xl",children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(de,{size:14,className:"absolute left-3 top-1/2 -translate-y-1/2 text-dark-muted"}),e.jsx("input",{value:Ie,onChange:s=>As(s.target.value),className:"w-full pl-9 pr-3 py-2 bg-dark-bg border border-dark-border rounded text-sm focus:outline-none focus:border-accent-green",placeholder:t("models.catalogSearchPlaceholder"),autoFocus:!0})]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:je,onChange:s=>{const a=s.target.checked;Ks(a),oe(Ie,{reason:ye,tool:a})},className:"accent-accent-green"}),t("models.catalogOnlyToolCall")]}),e.jsxs("label",{className:"inline-flex items-center gap-1.5 text-xs text-dark-muted whitespace-nowrap cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:ye,onChange:s=>{const a=s.target.checked;Ms(a),oe(Ie,{reason:a,tool:je})},className:"accent-accent-green"}),t("models.catalogOnlyReasoning")]})]}),ss&&e.jsx("div",{className:"text-xs text-accent-red bg-accent-red/10 p-2 rounded",children:ss}),Ss?e.jsxs("div",{className:"flex items-center justify-center py-10 text-dark-muted",children:[e.jsx(ne,{size:18,className:"animate-spin mr-2"})," ",t("models.searching")]}):e.jsx("div",{className:"max-h-96 overflow-y-auto custom-scrollbar border border-dark-border rounded-lg divide-y divide-dark-border",children:Ze.length===0?e.jsx("div",{className:"py-10 text-center text-dark-muted text-sm",children:t("models.catalogNoResults")}):Ze.map(s=>{var a,l,d;return e.jsxs("div",{className:"flex items-center gap-3 px-3 py-2 hover:bg-dark-hover",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-medium text-dark-text truncate",children:s.model.name||s.model.id}),e.jsx("code",{className:"text-[10px] px-1.5 py-0.5 bg-dark-bg border border-dark-border rounded text-dark-muted truncate",children:s.model.id}),s.model.reasoning&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-yellow/10 text-accent-yellow rounded",children:t("models.badgeReasoning")}),s.model.tool_call&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-blue/10 text-accent-blue rounded",children:t("models.badgeToolCall")}),s.model.attachment&&e.jsx("span",{className:"text-[10px] px-1.5 py-0.5 bg-accent-green/10 text-accent-green rounded",children:t("models.badgeMultimodal")})]}),e.jsxs("div",{className:"text-[11px] text-dark-muted mt-0.5",children:[s.providerName,(a=s.model.limit)!=null&&a.context?` · ${t("models.ctxLimit",{k:(s.model.limit.context/1e3).toFixed(0)})}`:"",(l=s.model.limit)!=null&&l.output?` · ${t("models.outLimit",{k:(s.model.limit.output/1e3).toFixed(0)})}`:"",((d=s.model.cost)==null?void 0:d.input)!==void 0?` · $${s.model.cost.input}/M in / $${s.model.cost.output}/M out`:""]})]}),e.jsxs("button",{onClick:()=>Us(s),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:t("models.catalogAddTitle"),children:[e.jsx(ke,{size:12})," ",t("models.add")]})]},`${s.providerId}:${s.model.id}`)})}),e.jsx("div",{className:"text-[11px] text-dark-muted/60",children:t("models.catalogSourceHint")})]})})]})})}function Ce({title:k,value:v,color:C}){const t={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"};return e.jsxs("div",{className:`${t[C]} rounded-lg p-3`,children:[e.jsx("div",{className:"text-xs opacity-70",children:k}),e.jsx("div",{className:"text-xl font-semibold",children:v})]})}function _({label:k,value:v}){return e.jsxs("div",{children:[e.jsx("div",{className:"text-dark-muted",children:k}),e.jsx("div",{children:v})]})}export{ut as ModelsView,ut as default};
@@ -1 +0,0 @@
1
- import{j as t}from"./markdown-B2L4Mq-x.js";import{a as s,aI as be,k as me,a1 as ge,X as J,A as he,n as W,a0 as ke,bB as ve,aP as fe,D as ee,ah as je,Y as ye}from"./icons-BxNxyk-c.js";import{u as Ne,at as p,C as Ce}from"./index-RB5ffy32.js";import"./react-vendor-B2V_5iSS.js";import"./state-0T92JV0u.js";import"./panels-P_I7Q72_.js";const E=12,we="other",Se=[{value:"all"},{value:"builtin"},{value:"openclaw"},{value:"deepseek-harness"}];function Pe(a){return a==="wired"?"bg-emerald-500/15 text-emerald-400 border-emerald-500/30":a==="pending"||a==="pending_wiring"?"bg-amber-500/15 text-amber-400 border-amber-500/30":"bg-dark-hover text-dark-muted border-dark-border"}function te(a){var n;return((n=a.category)==null?void 0:n.trim())||we}function $e(a,n){const f=n.trim().toLowerCase();return f?[a.id,a.name,a.description,a.category,...a.tags??[]].filter(S=>typeof S=="string").join(" ").toLowerCase().includes(f):!0}function Re(){const{t:a}=Ne(),[n,f]=s.useState("installed"),[b,S]=s.useState([]),[R,re]=s.useState([]),[F,ae]=s.useState(null),[j,B]=s.useState(!0),[P,L]=s.useState(null),[i,O]=s.useState(null),[$,U]=s.useState(null),[y,V]=s.useState(null),[N,M]=s.useState(null),[_,D]=s.useState(null),[m,q]=s.useState(""),[o,se]=s.useState(null),[c,le]=s.useState(null),[u,z]=s.useState(1),x=s.useCallback((e,r)=>{V({kind:e,text:r}),window.setTimeout(()=>V(null),4e3)},[]),g=s.useCallback(async()=>{B(!0),L(null);const[e,r]=await Promise.all([p.get("/api/plugins"),p.get("/api/plugins/market")]);e.success&&e.data?(S(e.data.plugins),ae(e.data.schemaVersion??null)):L(e.error??"Failed to load plugins"),r.success&&r.data&&re(r.data.plugins),B(!1)},[]);s.useEffect(()=>{g()},[g]);const T=s.useMemo(()=>b.filter(e=>e.installable!==!0),[b]),h=s.useMemo(()=>[...b.filter(e=>e.installable===!0),...R.filter(e=>!b.some(r=>r.id===e.id||r.marketId===e.id))],[b,R]),C=s.useCallback(e=>e.filter(r=>o&&te(r)!==o||c&&(r.market??null)!==c?!1:$e(r,m)),[o,m,c]),k=s.useMemo(()=>C(T),[C,T]),v=s.useMemo(()=>C(h),[C,h]),G=s.useMemo(()=>{const e=new Set;for(const r of h)e.add(te(r));return["all",...Array.from(e).sort()]},[h]),Y=e=>Math.max(1,Math.ceil(e/E)),H=(e,r)=>e.slice((r-1)*E,r*E),A=Y(k.length),I=Y(v.length),ne=s.useMemo(()=>H(k,Math.min(u,A)),[k,u,A]),de=s.useMemo(()=>H(v,Math.min(u,I)),[v,u,I]);s.useEffect(()=>{z(1)},[n,m,o,c]);const ie=m.trim().length>0||o!==null||c!==null,w=s.useCallback(async(e,r,d)=>{O(e),U(r);try{const l=await d();l&&l.success===!1?x("err",String(l.error??"Request failed")):(x("ok",`${r} ${e} ✓`),await g())}catch(l){x("err",l instanceof Error?l.message:String(l))}finally{O(null),U(null)}},[g,x]),K=(e,r)=>w(e,r?"installed+activated":"installed",()=>p.post("/api/plugins/install",{id:e,activate:r})),oe=e=>w(e,"activated",()=>p.post(`/api/plugins/${encodeURIComponent(e)}/activate`)),ce=e=>w(e,"deactivated",()=>p.post(`/api/plugins/${encodeURIComponent(e)}/deactivate`)),ue=e=>w(e,"uninstalled",()=>p.delete(`/api/plugins/${encodeURIComponent(e)}`)),xe=async e=>{D(e);try{const r=await p.post(`/api/plugins/l2/provider/${encodeURIComponent(e)}`);r.success&&r.data?(x("ok",`Provider ${r.data.applied} applied to config ✓`),await g()):x("err",r.error??"Apply failed")}catch(r){x("err",r instanceof Error?r.message:String(r))}finally{D(null)}},Q=e=>{const r=e==="bundled"?"bg-blue-500/15 text-blue-400 border-blue-500/30":e==="npm"?"bg-purple-500/15 text-purple-400 border-purple-500/30":e==="local"?"bg-cyan-500/15 text-cyan-400 border-cyan-500/30":"bg-dark-hover text-dark-muted border-dark-border";return t.jsx("span",{className:`px-1.5 py-0.5 rounded text-[11px] border ${r}`,children:e})},pe=e=>{if(!e)return null;const r=e==="builtin"?"bg-dark-hover text-dark-muted border-dark-border":e==="openclaw"?"bg-amber-500/15 text-amber-400 border-amber-500/30":e==="deepseek-harness"?"bg-emerald-500/15 text-emerald-400 border-emerald-500/30":"bg-dark-hover text-dark-muted border-dark-border";return t.jsx("span",{className:`px-1.5 py-0.5 rounded text-[11px] border ${r}`,children:e})},X=(e,r)=>r>1?t.jsxs("div",{className:"flex items-center justify-center gap-3 pt-3 pb-1 select-none",children:[t.jsxs("button",{onClick:()=>z(d=>Math.max(1,d-1)),disabled:u<=1,className:"flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-[11px] hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[t.jsx(je,{size:12})," ",a("plugins.prevPage")]}),t.jsx("span",{className:"text-[11px] text-dark-muted",children:a("plugins.pageInfo",{page:Math.min(u,r),pages:r,count:e})}),t.jsxs("button",{onClick:()=>z(d=>Math.min(r,d+1)),disabled:u>=r,className:"flex items-center gap-1 px-2 py-1 rounded border border-dark-border bg-dark-hover text-dark-muted text-[11px] hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed transition-colors",children:[a("plugins.nextPage")," ",t.jsx(ye,{size:12})]})]}):null,Z=e=>t.jsx("div",{className:"mt-8 text-center text-[12px] text-dark-muted",children:ie?a("plugins.noMatch"):e});return t.jsxs("div",{className:"h-full flex flex-col min-h-0 bg-dark-bg",children:[t.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:[t.jsx(be,{size:15,className:"text-accent-blue"}),t.jsx("span",{className:"truncate text-[13px] font-medium text-dark-text",children:a("nav.plugins")}),F!==null&&t.jsxs("span",{className:"px-1.5 py-0.5 rounded text-[10px] bg-dark-hover text-dark-muted border border-dark-border",children:["schema v",F]}),t.jsx("div",{className:"flex-1"}),t.jsx("button",{onClick:()=>void g(),className:"p-1.5 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text transition-colors",title:"Refresh",children:t.jsx(me,{size:14,className:j?"animate-spin":""})})]}),t.jsx("div",{className:"flex items-center gap-1 px-3 pt-2 shrink-0",children:["installed","available"].map(e=>t.jsx("button",{onClick:()=>f(e),className:`px-3 py-1.5 rounded-t text-[12px] transition-colors ${n===e?"bg-dark-surface text-accent-blue border border-b-0 border-dark-border":"text-dark-muted hover:text-dark-text"}`,children:e==="installed"?a("plugins.installedTab",{count:T.length}):a("plugins.availableTab",{count:h.length})},e))}),t.jsxs("div",{className:"shrink-0 px-3 pt-2 pb-1 space-y-2 bg-dark-bg",children:[t.jsxs("div",{className:"relative",children:[t.jsx(ge,{size:13,className:"absolute left-2.5 top-1/2 -translate-y-1/2 text-dark-muted pointer-events-none"}),t.jsx("input",{value:m,onChange:e=>q(e.target.value),placeholder:a("plugins.searchPlaceholder"),className:"w-full pl-8 pr-8 py-1.5 rounded bg-dark-hover border border-dark-border text-[12px] text-dark-text placeholder-dark-muted outline-none focus:border-accent-blue/50 transition-colors"}),m&&t.jsx("button",{onClick:()=>q(""),className:"absolute right-2 top-1/2 -translate-y-1/2 p-0.5 rounded text-dark-muted hover:text-dark-text transition-colors",title:a("plugins.clear"),children:t.jsx(J,{size:12})})]}),n==="available"&&G.length>2&&t.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:G.map(e=>t.jsx("button",{onClick:()=>se(e==="all"?null:e),className:`px-2 py-0.5 rounded-full text-[11px] border transition-colors ${e==="all"&&o===null||o===e?"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:e==="all"?a("plugins.allCategories"):e},e))}),n==="available"&&t.jsx("div",{className:"flex flex-wrap items-center gap-1.5",children:Se.map(e=>{const r=e.value==="all"?a("plugins.marketFilterAll"):e.value==="builtin"?a("plugins.marketFilterBuiltin"):e.value;return t.jsx("button",{onClick:()=>le(e.value==="all"?null:e.value),className:`px-2 py-0.5 rounded-full text-[11px] border transition-colors ${e.value==="all"&&c===null||c===e.value?"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:r},e.value)})})]}),t.jsxs("div",{className:"flex-1 min-h-0 overflow-y-auto px-3 pb-4",children:[P&&t.jsxs("div",{className:"mt-3 flex items-center gap-2 px-3 py-2 rounded bg-red-500/10 border border-red-500/30 text-red-400 text-[12px]",children:[t.jsx(he,{size:14})," ",P]}),j&&!P&&t.jsx("div",{className:"mt-10 flex justify-center",children:t.jsx("div",{className:"w-5 h-5 border-2 border-accent-blue border-t-transparent rounded-full animate-spin"})}),!j&&n==="installed"&&t.jsxs("div",{className:"mt-3 space-y-2",children:[k.length===0&&Z(a("plugins.emptyInstalled")),ne.map(e=>{const r=e.l2??[],d=e.status==="active";return t.jsxs("div",{className:"rounded-lg border border-dark-border bg-dark-surface p-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[13px] font-medium text-dark-text truncate",children:e.name||e.id}),e.version&&t.jsx("span",{className:"text-[11px] text-dark-muted shrink-0",children:e.version}),Q(e.source),t.jsx("span",{className:`px-1.5 py-0.5 rounded text-[11px] border shrink-0 ${d?"bg-emerald-500/15 text-emerald-400 border-emerald-500/30":"bg-dark-hover text-dark-muted border-dark-border"}`,children:d?"active":"installed"}),e.httpMounted&&t.jsx("span",{className:"px-1.5 py-0.5 rounded text-[11px] bg-emerald-500/15 text-emerald-400 border border-emerald-500/30 shrink-0",children:"http mounted"}),t.jsx("div",{className:"flex-1"}),t.jsx("span",{className:"text-[11px] text-dark-muted font-mono shrink-0",children:e.id})]}),e.description&&t.jsx("p",{className:"mt-1 text-[12px] text-dark-muted",children:e.description}),r.length>0&&t.jsxs("div",{className:"mt-2 flex flex-wrap gap-1.5",children:[r.map(l=>t.jsxs("span",{title:l.note||l.id,className:`px-1.5 py-0.5 rounded text-[11px] border cursor-help ${Pe(l.status)}`,children:[l.kind," · ",l.status,l.status==="wired"&&t.jsx(W,{size:10,className:"inline ml-0.5"})]},`${l.kind}-${l.id}`)),r.filter(l=>l.kind==="provider"&&l.status==="wired").map(l=>t.jsx("button",{disabled:_===l.id,onClick:()=>void xe(l.id),className:"px-1.5 py-0.5 rounded text-[11px] border border-accent-blue/40 text-accent-blue hover:bg-accent-blue/10 disabled:opacity-50 transition-colors",title:a("plugins.applyProviderTitle"),children:_===l.id?"applying…":"apply provider"},`apply-${l.id}`))]}),t.jsxs("div",{className:"mt-2 flex items-center gap-1.5",children:[d?t.jsxs("button",{onClick:()=>void ce(e.id),disabled:i===e.id,className:"flex items-center gap-1 px-2 py-1 rounded bg-amber-500/15 border border-amber-500/30 text-amber-400 text-[11px] hover:bg-amber-500/25 disabled:opacity-50 transition-colors",children:[t.jsx(ke,{size:11})," ",i===e.id?`${$}…`:a("plugins.deactivate")]}):t.jsxs("button",{onClick:()=>void oe(e.id),disabled:i===e.id,className:"flex items-center gap-1 px-2 py-1 rounded bg-emerald-500/15 border border-emerald-500/30 text-emerald-400 text-[11px] hover:bg-emerald-500/25 disabled:opacity-50 transition-colors",children:[t.jsx(ve,{size:11})," ",i===e.id?`${$}…`:a("plugins.activate")]}),t.jsxs("button",{onClick:()=>M(e.id),disabled:i===e.id,className:"flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-[11px] hover:text-red-400 hover:border-red-500/40 disabled:opacity-50 transition-colors",children:[t.jsx(fe,{size:11})," ",a("plugins.uninstall")]})]})]},e.id)}),X(k.length,A)]}),!j&&n==="available"&&t.jsxs("div",{className:"mt-3 space-y-2",children:[v.length===0&&Z(a("plugins.emptyMarket")),de.map(e=>t.jsxs("div",{className:"rounded-lg border border-dark-border bg-dark-surface p-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx("span",{className:"text-[13px] font-medium text-dark-text truncate",children:e.name||e.id}),e.version&&t.jsx("span",{className:"text-[11px] text-dark-muted shrink-0",children:e.version}),Q(e.source),pe(e.market),e.category&&t.jsx("span",{className:"px-1.5 py-0.5 rounded text-[11px] bg-dark-hover text-dark-muted border border-dark-border shrink-0",children:e.category}),t.jsx("div",{className:"flex-1"}),t.jsx("span",{className:"text-[11px] text-dark-muted font-mono shrink-0",children:e.id})]}),e.description&&t.jsx("p",{className:"mt-1 text-[12px] text-dark-muted",children:e.description}),t.jsxs("div",{className:"mt-2 flex items-center gap-1.5",children:[t.jsxs("button",{onClick:()=>void K(e.id,!0),disabled:i===e.id,className:"flex items-center gap-1 px-2 py-1 rounded bg-accent-blue/20 border border-accent-blue/40 text-accent-blue text-[11px] hover:bg-accent-blue/30 disabled:opacity-50 transition-colors",children:[t.jsx(ee,{size:11})," ",i===e.id?`${$}…`:a("plugins.installActivate")]}),t.jsxs("button",{onClick:()=>void K(e.id,!1),disabled:i===e.id,className:"flex items-center gap-1 px-2 py-1 rounded bg-dark-hover border border-dark-border text-dark-muted text-[11px] hover:text-dark-text disabled:opacity-50 transition-colors",children:[t.jsx(ee,{size:11})," ",a("plugins.installOnly")]})]})]},e.id)),X(v.length,I)]})]}),y&&t.jsxs("div",{className:`fixed bottom-4 right-4 z-50 flex items-center gap-2 px-3 py-2 rounded-lg border text-[12px] shadow-lg ${y.kind==="ok"?"bg-emerald-500/15 border-emerald-500/30 text-emerald-400":"bg-red-500/15 border-red-500/30 text-red-400"}`,children:[y.kind==="ok"?t.jsx(W,{size:13}):t.jsx(J,{size:13})," ",y.text]}),t.jsx(Ce,{isOpen:N!==null,title:a("plugins.uninstallTitle"),message:a("plugins.uninstallConfirm",{id:N??""}),onConfirm:()=>{N&&ue(N),M(null)},onClose:()=>M(null)})]})}export{Re as PluginsView};
@@ -1 +0,0 @@
1
- import{j as e}from"./markdown-B2L4Mq-x.js";import{a as u,F as ae,C as ne,aR as oe,aF as me,f as he,Y as X,a4 as pe,n as je,X as de,bq as be,w as ge,bH as le,b7 as fe,A as Z,N as ke,aK as ye,aq as ve,ao as Ne,M as we,a1 as ue,ah as Ce,a0 as Se,k as Pe,bI as Ee}from"./icons-BxNxyk-c.js";import{au as h,av as Me,u as H,a1 as Q,c as N,aw as Ie,ax as z,ay as ze,az as Ae,aA as De,aB as Re,aC as Te,aD as Fe,aE as _e,aF as Be,aG as Le,aH as $e,aI as He,t as L,N as Ke,aJ as Oe}from"./index-RB5ffy32.js";import{D as qe}from"./WorkspaceDirPicker-C5knnArH.js";import"./react-vendor-B2V_5iSS.js";import"./state-0T92JV0u.js";import"./panels-P_I7Q72_.js";function Ve(b={}){const t=b.enabled!==!1,i=h(o=>o.projects),l=h(o=>o.total),c=h(o=>o.hidden),n=h(o=>o.detail),g=h(o=>o.detailLoading),r=h(o=>o.detailError),j=h(o=>o.query),y=h(o=>o.sort),s=h(o=>o.stale),f=h(o=>o.loading),P=h(o=>o.lastError),E=h(o=>o.disabled),I=h(o=>o.refresh);u.useEffect(()=>{t&&h.getState().refresh()},[t]),u.useEffect(()=>{!t||!s||h.getState().scheduleRefresh()},[t,s]),u.useEffect(()=>{if(!t||typeof document>"u")return;const o=()=>{document.visibilityState==="visible"&&h.getState().refresh()};return document.addEventListener("visibilitychange",o),()=>document.removeEventListener("visibilitychange",o)},[t]);const v=new Set(c),C=Me(i,y).filter(o=>!v.has(o.projectId));return{projects:C.filter(o=>o.rootExists),hiddenCount:i.length-C.length,total:l,detail:n,detailLoading:g,detailError:r,query:j,sort:y,stale:s,loading:f,lastError:P,disabled:E,setQuery:o=>h.getState().setQuery(o),setSort:o=>h.getState().setSort(o),openProject:o=>void h.getState().openProject(o),closeDetail:()=>h.getState().closeDetail(),createProject:(o,x)=>h.getState().createProject(o,x),hideProject:o=>h.getState().hideProject(o),unhideAll:()=>h.getState().unhideAll(),probeEntry:()=>void h.getState().probeEntry(),refresh:()=>void I()}}const Ge={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 q({tone:b="neutral",testid:t,title:i,children:l}){return e.jsx("span",{"data-testid":t,title:i,className:N("inline-flex items-center gap-0.5 rounded-full border px-1.5 py-px text-[10.5px] leading-4",Ge[b]),children:l})}function se({icon:b,label:t,hint:i,disabled:l,testid:c,onClick:n}){const g=l?`${t} — ${i??""}`:t;return e.jsx("button",{type:"button","aria-label":g,title:g,"data-testid":c,"data-disabled":l?"true":"false",disabled:l,onClick:r=>{r.stopPropagation(),n()},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:b})}const Qe=u.memo(function({project:t,onOpen:i,onOpenFolder:l,onCopyRoot:c,onHide:n,now:g}){const{t:r}=H(),j=!t.rootExists,y=Object.values(t.threads).reduce((f,P)=>f+P,0),s=Q(t.lastActivityAt,g,r);return e.jsxs("div",{role:"button",tabIndex:0,onClick:()=>i(t.projectId),onKeyDown:f=>{(f.key==="Enter"||f.key===" ")&&f.target===f.currentTarget&&(f.preventDefault(),i(t.projectId))},className:N("group relative cursor-pointer rounded-xl border bg-dark-surface p-3.5 text-left shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-accent-blue",j?"border-dashed border-dark-border/60 opacity-70":"border-dark-border hover:border-accent-blue/40 hover:shadow-md"),"data-testid":`project-card-${t.projectId}`,"data-root-missing":j?"true":"false",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{"aria-hidden":"true",className:N("h-3.5 w-3.5 shrink-0 rounded-[4px] border",j?"border-dark-muted/40 bg-dark-muted/10":"border-accent-blue/50 bg-accent-blue/15")}),e.jsx("button",{type:"button",onClick:f=>{f.stopPropagation(),i(t.projectId)},className:"min-w-0 flex-1 truncate text-left text-[13px] font-semibold text-dark-text",title:t.root,"data-testid":`project-open-${t.projectId}`,children:t.name}),e.jsx("span",{className:"shrink-0 rounded border border-dark-border px-1 py-px text-[10px] leading-4 text-dark-muted",children:r("projects.visibility")})]}),e.jsxs("div",{className:"mt-1 flex items-center gap-2 text-[11px] text-dark-muted",children:[s&&e.jsx("span",{className:"font-mono tabular-nums","data-testid":`project-activity-${t.projectId}`,children:s}),j&&e.jsx("span",{className:"text-accent-yellow",children:r("projects.rootMissing")})]}),e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-1",children:[e.jsxs(q,{testid:`project-sessions-${t.projectId}`,children:[r("projects.sessionCount",{count:t.sessions.total}),t.sessions.running>0&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"text-dark-muted/40","aria-hidden":"true",children:"·"}),e.jsx("span",{className:"inline-flex items-center gap-0.5 text-accent-blue","data-testid":"project-running",children:r("projects.runningCount",{count:t.sessions.running})})]})]}),e.jsx(q,{testid:`project-threads-${t.projectId}`,children:y>0?r("projects.threadCount",{count:y}):r("projects.noThreads")}),t.agentMd.present?e.jsx(q,{tone:t.agentMd.truncated?"warn":"ok",testid:`project-agentmd-${t.projectId}`,title:t.agentMd.truncated?r("projects.agentMdTruncated",{bytes:t.agentMd.bytes??0}):r("projects.agentMdBytes",{bytes:t.agentMd.bytes??0}),children:t.agentMd.truncated?r("projects.agentMdTruncatedShort"):r("projects.agentMdReady")}):e.jsx(q,{testid:`project-agentmd-${t.projectId}`,children:r("projects.agentMdAbsent")}),j&&e.jsx(q,{tone:"warn",testid:`project-missing-${t.projectId}`,children:r("projects.rootMissingChip")})]}),e.jsx("div",{className:"mt-1.5 truncate font-mono text-[10.5px] text-dark-muted/80",title:t.root,children:t.root}),e.jsxs("div",{className:"mt-2.5 flex items-center gap-0.5 border-t border-dark-border/40 pt-2",onClick:f=>f.stopPropagation(),children:[e.jsx(se,{icon:e.jsx(ae,{size:13,"aria-hidden":"true"}),label:r("projects.openFolder"),hint:j?r("projects.openFolderDisabled"):void 0,disabled:j,testid:`project-open-folder-${t.projectId}`,onClick:()=>l(t.root)}),e.jsx(se,{icon:e.jsx(ne,{size:13,"aria-hidden":"true"}),label:r("projects.copyRoot"),testid:`project-copy-root-${t.projectId}`,onClick:()=>c(t.root)}),e.jsx(se,{icon:e.jsx(oe,{size:13,"aria-hidden":"true"}),label:r(j?"projects.removeView":"projects.hide"),hint:r("projects.hideHint"),testid:`project-hide-${t.projectId}`,onClick:()=>n(t.projectId)})]})]})});function Ue(b,t){const i=b.fields,l=c=>typeof i[c]=="string"?i[c]:"";switch(b.type){case"pm_started":return e.jsx("span",{children:t("projects.pmStarted")});case"pm_stopped":return e.jsx("span",{children:t("projects.pmStopped")});case"pm_wakeup":{const c=l("reason"),n=l("summary");return e.jsxs("span",{children:[t("projects.pmWakeup"),c?e.jsxs("span",{className:"text-dark-text-secondary",children:[" · ",c]}):null,n?e.jsx("span",{className:"block text-dark-text-secondary",children:n}):null]})}case"pm_report":{const c=l("title"),n=l("progressSummary"),g=l("nextAction"),r=typeof i.approvalsPending=="number"?i.approvalsPending:0;return e.jsxs("span",{children:[c?e.jsx("span",{className:"font-medium",children:c}):e.jsx("span",{children:t("projects.pmReport")}),n?e.jsx("span",{className:"block text-dark-text-secondary",children:n}):null,g?e.jsxs("span",{className:"block text-dark-text-secondary",children:[t("projects.pmNextAction"),": ",g]}):null,r>0?e.jsxs("span",{className:"mt-0.5 inline-flex items-center gap-1 text-amber-400",children:[e.jsx(pe,{size:12,"aria-hidden":"true"})," ",r," ",t("projects.pmApprovalsPending")]}):null]})}case"pm_approval_requested":return e.jsx("span",{children:t("projects.pmApprovalRequested")});case"pm_approval_resolved":return e.jsxs("span",{children:[t("projects.pmApprovalResolved"),l("decision")?e.jsxs("span",{className:"text-dark-text-secondary",children:[" · ",l("decision")]}):null]});default:return e.jsx("span",{children:b.type})}}const Ye=u.memo(function({root:t}){const{t:i}=H(),l=u.useMemo(()=>Ie(t)??"",[t]),c=z(x=>x.residentByProject[l]??!1),n=z(x=>x.activityByProject[l]??ze),g=z(x=>Ae(x,l)),r=z(x=>x.resolveApproval),[j,y]=u.useState(!1),[s,f]=u.useState(""),[P,E]=u.useState(!1),[I,v]=u.useState(!1);u.useEffect(()=>{l&&De(l)},[l]);const C=async()=>{if(!(!l||I)){v(!0);try{await Re(l,!c)}finally{v(!1)}}},w=async()=>{const x=s.trim();if(!(!x||!l||P)){E(!0);try{await Te(l,x),f("")}finally{E(!1)}}},o=n.slice(-20).reverse();return e.jsxs("section",{"aria-label":i("projects.pmPanel"),className:"border-b border-dark-border",children:[e.jsxs("div",{className:"flex items-center gap-2 px-3 py-2",children:[e.jsx(me,{size:14,"aria-hidden":"true",className:c?"text-accent-green":"text-dark-text-secondary"}),e.jsx("span",{className:"text-xs font-medium",children:i("projects.pmPanel")}),e.jsxs("span",{className:N("inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px]",c?"bg-accent-green/15 text-accent-green":"bg-dark-bg-tertiary text-dark-text-secondary"),children:[e.jsx("span",{className:N("h-1.5 w-1.5 rounded-full",c?"bg-accent-green":"bg-dark-text-secondary"),"aria-hidden":"true"}),i(c?"projects.pmResident":"projects.pmOff")]}),e.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[e.jsx("button",{type:"button",onClick:C,disabled:I||!l,className:N("rounded px-2 py-0.5 text-[11px] transition-colors",c?"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(c?"projects.pmStop":"projects.pmStart")}),e.jsx("button",{type:"button",onClick:()=>y(x=>!x),"aria-expanded":j,"aria-label":i("projects.pmToggleTimeline"),className:"rounded p-1 text-dark-text-secondary hover:bg-dark-bg-tertiary hover:text-dark-text-primary",children:j?e.jsx(he,{size:14,"aria-hidden":"true"}):e.jsx(X,{size:14,"aria-hidden":"true"})})]})]}),g.length>0&&e.jsx("ul",{className:"space-y-1.5 px-3 pb-2",children:g.map(x=>e.jsx("li",{className:"rounded-md border border-amber-500/30 bg-amber-500/5 p-2",children:e.jsxs("div",{className:"flex items-start gap-1.5",children:[e.jsx(pe,{size:13,"aria-hidden":"true",className:"mt-0.5 shrink-0 text-amber-400"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("p",{className:"truncate text-xs font-medium text-dark-text-primary",children:x.title||x.requestedAction||i("projects.pmApprovalCard")}),x.summary?e.jsx("p",{className:"mt-0.5 line-clamp-3 text-[11px] text-dark-text-secondary",children:x.summary}):null,e.jsxs("div",{className:"mt-1.5 flex gap-1.5",children:[e.jsxs("button",{type:"button",onClick:()=>void r(x.escalationId,"approve"),className:"inline-flex items-center gap-1 rounded bg-accent-green/15 px-2 py-0.5 text-[11px] text-accent-green hover:bg-accent-green/25",children:[e.jsx(je,{size:11,"aria-hidden":"true"})," ",i("projects.pmApprove")]}),e.jsxs("button",{type:"button",onClick:()=>void r(x.escalationId,"reject"),className:"inline-flex items-center gap-1 rounded bg-red-500/10 px-2 py-0.5 text-[11px] text-red-400 hover:bg-red-500/20",children:[e.jsx(de,{size:11,"aria-hidden":"true"})," ",i("projects.pmReject")]})]})]})]})},x.escalationId))}),e.jsx("div",{className:"px-3 pb-2",children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("input",{value:s,onChange:x=>f(x.target.value),onKeyDown:x=>{x.key==="Enter"&&!x.nativeEvent.isComposing&&w()},placeholder:i(c?"projects.pmInputPlaceholder":"projects.pmInputDisabled"),disabled:!c,className:"min-w-0 flex-1 rounded-md border border-dark-border bg-dark-bg-tertiary px-2 py-1 text-xs text-dark-text-primary placeholder:text-dark-text-secondary focus:border-accent-green/50 focus:outline-none disabled:opacity-50"}),e.jsx("button",{type:"button",onClick:()=>void w(),disabled:!c||!s.trim()||P,"aria-label":i("projects.pmSend"),className:"rounded p-1.5 text-accent-green hover:bg-accent-green/10 disabled:opacity-40",children:e.jsx(be,{size:13,"aria-hidden":"true"})})]})}),j&&o.length>0&&e.jsx("div",{className:"px-3 pb-2",children:e.jsx("ul",{className:"max-h-48 space-y-1.5 overflow-y-auto",children:o.map(x=>e.jsxs("li",{className:"flex items-start gap-1.5 text-xs",children:[x.type==="pm_report"?e.jsx(ge,{size:12,"aria-hidden":"true",className:"mt-0.5 shrink-0 text-accent-green"}):e.jsx("span",{className:"mt-1 h-1.5 w-1.5 shrink-0 rounded-full bg-dark-text-secondary","aria-hidden":"true"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-dark-text-primary",children:Ue(x,i)}),e.jsx("div",{className:"text-[10px] text-dark-text-secondary",children:Q(x.at)})]})]},x.id))})})]})}),We=["read file","read files","write file","edit file","list dir","list directory","apply patch","web search","web fetch","bash:","bash:","powershell:","powershell:","cmd:","cmd:","todo_write","notify_sessions","send_to_session","plugin_","mcp__"],Je=/^(?:grep|glob)(?:[ \t]+(?![\u4e00-\u9fff])|(?=[^\s\u4e00-\u9fff]))/;function ce(b){const t=b.trim().toLowerCase();return t?/^-{2,}/.test(t)||Je.test(t)?!0:We.some(i=>t.startsWith(i)):!1}const Xe=u.memo(function({currentProjectId:t,currentName:i,currentRootExists:l,currentLastActivityAt:c,onSelectProject:n,children:g}){var R;const{t:r}=H(),j=z(p=>p.managers),y=z(p=>p.dutyProjectKey),s=z(p=>p.managersLoading),f=z(p=>p.managersError),P=z(p=>p.residentByProject),E=z(p=>p.fetchManagers),I=z(p=>p.setDuty);u.useEffect(()=>{E()},[E]);const v=Date.now(),C=j.find(p=>p.projectKey===t)??null,w=j.filter(p=>p.projectKey!==t),o=y?((R=j.find(p=>p.projectKey===y))==null?void 0:R.name)??y:null,x=y===t,D=C?C.resident:P[t]??!1;return e.jsxs("div",{className:"flex min-h-0 min-w-0 flex-1 flex-col","data-testid":"manager-roster",children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-2 px-3 pb-1 pt-2",children:[e.jsx("span",{className:"text-xs font-medium text-dark-text","data-testid":"manager-roster-title",children:r("projects.managersTitle")}),y?e.jsxs("span",{className:"flex min-w-0 items-center gap-1 rounded-full border border-accent-yellow/40 bg-accent-yellow/10 px-1.5 py-px text-[10px] text-accent-yellow","data-testid":"manager-duty-now",children:[e.jsx(le,{size:10,className:"shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"truncate",children:r("projects.dutyNow",{name:o??""})})]}):e.jsx("span",{className:"rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-[10px] text-dark-muted",title:r("projects.managersVacantHint"),"data-testid":"manager-duty-vacant",children:r("projects.dutyVacant")}),y&&e.jsxs("button",{type:"button",onClick:()=>void I(null),disabled:s,className:"ml-auto flex shrink-0 items-center gap-1 rounded border border-dark-border bg-dark-hover px-1.5 py-0.5 text-[10px] text-dark-muted transition-colors hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-50",title:r("projects.managersVacantHint"),"data-testid":"manager-vacate",children:[e.jsx(fe,{size:10,"aria-hidden":"true"}),r("projects.dutyVacate")]})]}),f&&e.jsxs("div",{className:"mx-2 mb-1 flex shrink-0 items-center gap-1.5 rounded-lg border border-accent-red/40 bg-accent-red/10 px-2 py-1 text-[10px] leading-relaxed text-accent-red","data-testid":"manager-roster-error",children:[e.jsx(Z,{size:11,className:"shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1 truncate",children:r("projects.managersLoadFailed")}),e.jsx("button",{type:"button",onClick:()=>void E(),className:"shrink-0 underline hover:no-underline","data-testid":"manager-roster-retry",children:r("projects.retry")})]}),e.jsxs("div",{className:"mx-2 flex min-h-0 flex-1 flex-col rounded-xl border border-accent-blue/30 bg-dark-hover/10","data-testid":"manager-row-current",children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-1.5 border-b border-dark-border/50 px-2.5 py-1.5",children:[e.jsx(le,{size:11,className:N("shrink-0",x?"text-accent-yellow":"text-dark-muted/40"),"aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 truncate text-xs font-medium text-dark-text",title:t,children:i}),x&&e.jsx(V,{tone:"duty",label:r("projects.managerBadgeDuty")}),D&&e.jsx(V,{tone:"resident",label:r("projects.managerBadgeResident")}),!l&&e.jsx(V,{tone:"missing",label:r("projects.managerBadgeMissing")}),c&&e.jsx("span",{className:"ml-auto shrink-0 font-mono text-[10px] tabular-nums text-dark-muted",children:Q(c,v,r)})]}),g]}),w.length>0&&e.jsx("div",{className:"mx-2 mb-2 mt-1.5 flex max-h-40 shrink-0 flex-col gap-1 overflow-y-auto custom-scrollbar",children:w.map((p,_)=>e.jsxs("button",{type:"button",onClick:()=>n==null?void 0:n(p.projectKey),disabled:!n,title:p.managerSessionId,className:N("flex w-full shrink-0 items-center gap-1.5 rounded-lg border border-dark-border/70 bg-dark-surface/60 px-2.5 py-1.5 text-left transition-colors",n&&"hover:border-accent-blue/40 hover:bg-dark-hover/40",!n&&"cursor-default"),"data-testid":`manager-row-${_}`,"data-project-id":p.projectKey,children:[e.jsx("span",{className:N("h-1.5 w-1.5 shrink-0 rounded-full",p.resident?"bg-accent-green":"bg-dark-muted/50"),"aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-dark-text",children:p.name}),p.isDuty&&e.jsx(V,{tone:"duty",label:r("projects.managerBadgeDuty")}),!p.rootExists&&e.jsx(V,{tone:"missing",label:r("projects.managerBadgeMissing")}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-dark-muted",children:Q(p.lastActivityAt,v,r)}),e.jsx(X,{size:12,className:"shrink-0 text-dark-muted","aria-hidden":"true"})]},p.projectKey))})]})});function V({tone:b,label:t}){return e.jsx("span",{className:N("shrink-0 rounded-full border px-1.5 py-px text-[10px] leading-4",b==="duty"&&"border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow",b==="resident"&&"border-accent-blue/40 bg-accent-blue/10 text-accent-blue",b==="missing"&&"border-dark-border bg-dark-hover/40 text-dark-muted"),children:t})}const G=50,Ze=u.memo(function({projectId:t,onBack:i,onOpenFolder:l,onCopyRoot:c,onNewSessionHere:n,onOpenThreadSession:g,onOpenSession:r,onHide:j,onSelectProject:y}){const{t:s}=H(),[f,P]=u.useState(!1),[E,I]=u.useState(null),[v,C]=u.useState(""),[w,o]=u.useState("all"),[x,D]=u.useState(1),[R,p]=u.useState(!1),{state:_,open:K,openAt:ee,close:U}=Fe(),A=h(a=>a.detail),Y=h(a=>a.detailLoading),T=h(a=>a.detailError);u.useEffect(()=>{h.getState().openProject(t)},[t]),u.useEffect(()=>{I(null),P(!1),C(""),o("all"),D(1),p(!1)},[t]);const d=(A==null?void 0:A.project)??null,S=d?!d.rootExists:!1,W=Date.now(),$=(A==null?void 0:A.sessions)??[],F=u.useMemo(()=>{const a=v.trim().toLowerCase();return!a&&w==="all"?$:$.filter(B=>w==="running"&&!B.running?!1:a?B.title.toLowerCase().includes(a)||(B.preview??"").toLowerCase().includes(a):!0)},[$,v,w]),{mainSessions:M,noiseSessions:O}=u.useMemo(()=>{if(v.trim()!=="")return{mainSessions:F,noiseSessions:[]};const a=F.filter(te=>ce(te.title));return{mainSessions:F.filter(te=>!ce(te.title)),noiseSessions:a}},[F,v]),m=Math.max(1,Math.ceil(M.length/G)),k=Math.min(x,m),J=u.useMemo(()=>M.slice((k-1)*G,k*G),[M,k]);u.useEffect(()=>{D(1)},[v,w]);const ie=u.useMemo(()=>{if(!d)return[];const a=[{kind:"item",id:"copy-root",label:s("projects.copyRoot"),icon:ne,onSelect:()=>c(d.root)}];return j&&a.push({kind:"item",id:"hide-view",label:s(S?"projects.removeView":"projects.hide"),icon:oe,onSelect:()=>j(d.projectId)}),a},[d,S,c,j,s]);return e.jsxs("div",{className:"flex h-full min-h-0 flex-col","data-testid":"project-detail",children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5",children:[e.jsx("button",{type:"button",onClick:i,className:"ui-icon-button",title:s("projects.back"),"aria-label":s("projects.back"),"data-testid":"project-detail-back",children:e.jsx(ke,{size:15,"aria-hidden":"true"})}),e.jsxs("nav",{className:"min-w-0 flex items-baseline gap-1.5 text-sm",children:[e.jsx("button",{type:"button",onClick:i,className:"shrink-0 text-dark-muted transition-colors hover:text-dark-text",children:s("projects.title")}),e.jsx("span",{className:"shrink-0 text-dark-muted/50","aria-hidden":"true",children:"›"}),e.jsx("span",{className:"truncate font-medium text-dark-text","data-testid":"project-detail-name",children:(d==null?void 0:d.name)??t})]}),e.jsxs("div",{className:"ml-auto flex items-center gap-2",children:[d&&e.jsx("span",{className:"hidden min-w-0 max-w-[240px] truncate font-mono text-[10.5px] text-dark-muted lg:block",title:d.root,"data-testid":"project-detail-root",children:d.root}),e.jsxs("button",{type:"button",onClick:()=>d&&l(d.root),disabled:S||!d,className:"btn shrink-0 text-[11px] disabled:cursor-not-allowed disabled:opacity-50",title:S?s("projects.openFolderDisabled"):d==null?void 0:d.root,"data-testid":"project-detail-open-folder",children:[e.jsx(ae,{size:12,"aria-hidden":"true"}),s("projects.openFolder")]}),e.jsx("span",{className:"rounded bg-dark-hover/70 px-1.5 py-px text-[10px] text-dark-muted",children:s("projects.overview")}),e.jsx("button",{type:"button",onClick:()=>P(a=>!a),"aria-expanded":f,className:"ui-icon-button",title:s("projects.settings"),"aria-label":s("projects.settings"),"data-testid":"project-detail-settings",children:e.jsx(ye,{size:14,"aria-hidden":"true"})}),e.jsx("button",{type:"button",onClick:a=>K(a,null),onKeyDown:a=>{if(a.key==="Enter"||a.key===" "){a.preventDefault();const B=a.currentTarget.getBoundingClientRect();ee(B.left,B.bottom+4,null,{height:_e(ie.length)})}},className:"ui-icon-button",title:s("projects.moreActions"),"aria-label":s("projects.moreActions"),"aria-haspopup":"menu","data-testid":"project-detail-more",children:e.jsx(ve,{size:14,"aria-hidden":"true"})})]})]}),S&&d&&e.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-[10.5px] leading-relaxed text-accent-yellow","data-testid":"project-detail-missing",children:[e.jsx(Z,{size:12,className:"mt-[1px] shrink-0","aria-hidden":"true"}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("b",{className:"font-semibold",children:s("projects.rootMissingTitle")}),d&&e.jsx("span",{className:"mx-1 font-mono",children:d.root}),e.jsx("br",{}),s("projects.rootMissingBody")]})]}),f&&d&&e.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:[e.jsx(re,{icon:e.jsx(ae,{size:12,"aria-hidden":"true"}),label:s("projects.openFolder"),hint:d.root,disabled:S,disabledHint:S?s("projects.openFolderDisabled"):void 0,onClick:()=>l(d.root),testId:"project-settings-open-folder"}),e.jsx(re,{icon:e.jsx(ne,{size:12,"aria-hidden":"true"}),label:s("projects.copyRoot"),hint:d.root,onClick:()=>c(d.root),testId:"project-settings-copy-root"}),e.jsx(re,{icon:e.jsx(Ne,{size:12,"aria-hidden":"true"}),label:s("projects.rename"),disabled:!0,disabledHint:s("projects.renameDisabled"),testId:"project-settings-rename"})]}),e.jsxs("div",{className:"flex min-h-0 flex-1",children:[e.jsxs(Xe,{currentProjectId:t,currentName:(d==null?void 0:d.name)??t,currentRootExists:d?d.rootExists:!0,currentLastActivityAt:d==null?void 0:d.lastActivityAt,onSelectProject:y,children:[e.jsxs("div",{className:"flex shrink-0 flex-col gap-2 px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-xs font-medium text-dark-text",children:s("projects.sessions")}),d&&e.jsx("span",{className:"rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-[10px] leading-4 text-dark-muted","data-testid":"project-sessions-count",children:s("projects.sessionsCount",{count:M.length})}),e.jsx("div",{className:"ml-auto flex items-center rounded-md bg-dark-hover/60 p-0.5",role:"group",children:["all","running"].map(a=>e.jsx("button",{type:"button",onClick:()=>o(a),"aria-pressed":w===a,className:N("shrink-0 rounded px-1.5 py-0.5 text-[10.5px] transition-colors",w===a?"bg-dark-surface text-dark-text":"text-dark-muted hover:text-dark-text"),"data-testid":`project-sessions-filter-${a}`,children:s(`projects.sessionsFilter.${a}`)},a))}),e.jsxs("button",{type:"button",onClick:()=>d&&n(d.root),disabled:S||!d,className:"btn btn-primary shrink-0 text-[11px] disabled:cursor-not-allowed disabled:opacity-60",title:s(S?"projects.newSessionDisabled":"projects.newSessionHere"),"data-testid":"project-new-session","data-disabled":S?"true":"false",children:[e.jsx(we,{size:12,"aria-hidden":"true"}),s("projects.newSessionHere")]})]}),e.jsxs("div",{className:"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:[e.jsx(ue,{size:13,className:"shrink-0 text-dark-muted","aria-hidden":"true"}),e.jsx("input",{type:"text",value:v,onChange:a=>C(a.target.value),placeholder:s("projects.sessionsSearchPlaceholder"),"aria-label":s("projects.sessionsSearchPlaceholder"),"data-testid":"project-sessions-search",className:"min-w-0 flex-1 bg-transparent text-xs text-dark-text placeholder:text-dark-muted focus:outline-none"}),v&&e.jsx("button",{type:"button",onClick:()=>C(""),className:"shrink-0 rounded p-0.5 text-dark-muted transition-colors hover:text-dark-text","aria-label":s("projects.searchClear"),"data-testid":"project-sessions-search-clear",children:e.jsx(de,{size:12,"aria-hidden":"true"})})]})]}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-2 pb-3 custom-scrollbar",children:T?e.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-[10.5px] leading-relaxed text-accent-red","data-testid":"project-detail-error",children:[e.jsx(Z,{size:12,className:"mt-[1px] shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1",children:s("projects.detailLoadFailed",{message:T})}),e.jsx("button",{type:"button",onClick:()=>void h.getState().openProject(t),className:"shrink-0 underline hover:no-underline","data-testid":"project-detail-retry",children:s("projects.retry")})]}):Y&&!A?e.jsx("p",{className:"px-2 py-4 text-center text-[10.5px] text-dark-muted",children:s("common.loading")}):$.length===0?e.jsxs("div",{className:"px-2 py-6 text-center","data-testid":"project-sessions-empty",children:[e.jsx("p",{className:"text-[11px] text-dark-text",children:s("projects.noSessions")}),e.jsx("p",{className:"mt-1 text-[10.5px] leading-relaxed text-dark-muted",children:s("projects.noSessionsHint")})]}):F.length===0?e.jsxs("div",{className:"px-2 py-6 text-center","data-testid":"project-sessions-no-match",children:[e.jsx("p",{className:"text-[11px] text-dark-text",children:s("projects.sessionsNoMatch")}),e.jsx("p",{className:"mt-1 text-[10.5px] leading-relaxed text-dark-muted",children:s("projects.sessionsNoMatchHint")})]}):e.jsxs(e.Fragment,{children:[M.length>0&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"space-y-1.5","data-testid":"project-sessions-list",children:J.map(a=>e.jsx(xe,{id:a.id,title:a.title,preview:a.preview,running:a.running,updatedAt:a.updatedAt,now:W,onClick:()=>r==null?void 0:r(a.id,S||d==null?void 0:d.root,a.title)},a.id))}),m>1&&e.jsxs("div",{className:"flex select-none items-center justify-center gap-3 pt-3","data-testid":"project-sessions-pagination",children:[e.jsxs("button",{type:"button",onClick:()=>D(a=>Math.max(1,a-1)),disabled:k<=1,className:"flex items-center gap-1 rounded border border-dark-border bg-dark-hover px-2 py-1 text-[11px] text-dark-muted transition-colors hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40","data-testid":"project-sessions-prev",children:[e.jsx(Ce,{size:12,"aria-hidden":"true"}),s("common.prevPage")]}),e.jsx("span",{className:"text-[11px] tabular-nums text-dark-muted",children:s("common.pageInfo",{start:(k-1)*G+1,end:Math.min(k*G,M.length),total:M.length})}),e.jsxs("button",{type:"button",onClick:()=>D(a=>Math.min(m,a+1)),disabled:k>=m,className:"flex items-center gap-1 rounded border border-dark-border bg-dark-hover px-2 py-1 text-[11px] text-dark-muted transition-colors hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40","data-testid":"project-sessions-next",children:[s("common.nextPage"),e.jsx(X,{size:12,"aria-hidden":"true"})]})]})]}),O.length>0&&e.jsxs("div",{className:"mt-2 rounded-lg border border-dark-border/60 bg-dark-surface/40","data-testid":"project-noise-group",children:[e.jsxs("button",{type:"button",onClick:()=>p(a=>!a),"aria-expanded":R||M.length===0,className:"flex w-full items-center gap-1.5 px-2.5 py-1.5 text-left","data-testid":"project-noise-toggle",children:[e.jsx(X,{size:12,className:N("shrink-0 text-dark-muted transition-transform",(R||M.length===0)&&"rotate-90"),"aria-hidden":"true"}),e.jsx("span",{className:"text-[10.5px] text-dark-muted",children:s("projects.noiseGroupCount",{count:O.length})})]}),(R||M.length===0)&&e.jsx("div",{className:"max-h-48 space-y-1 overflow-y-auto border-t border-dark-border/60 p-1.5 custom-scrollbar",children:O.map(a=>e.jsx(xe,{id:a.id,title:a.title,preview:a.preview,running:a.running,updatedAt:a.updatedAt,now:W,onClick:()=>r==null?void 0:r(a.id,S||d==null?void 0:d.root,a.title)},a.id))})]})]})})]}),e.jsxs("div",{className:"flex min-h-0 w-[392px] shrink-0 flex-col border-l border-dark-border",children:[(d==null?void 0:d.root)&&e.jsx(Ye,{root:d.root}),E?e.jsx(Be,{threadId:E,onBack:()=>I(null),onOpenSession:g}):e.jsx(Le,{workspaceId:t,onOpenThread:I})]})]}),e.jsx($e,{items:ie,position:_?{x:_.x,y:_.y}:null,onClose:U,ariaLabel:s("projects.moreActions")})]})});function re({icon:b,label:t,hint:i,disabled:l,disabledHint:c,onClick:n,testId:g}){return e.jsxs("button",{type:"button",onClick:n,disabled:l,className:N("flex w-full items-center gap-2 rounded px-1.5 py-1 text-left text-[11px] transition-colors",l?"cursor-not-allowed text-dark-muted/60":"text-dark-text hover:bg-dark-hover"),"data-testid":g,"data-disabled":l?"true":"false",title:l?c:i,children:[e.jsx("span",{className:"shrink-0",children:b}),e.jsx("span",{className:"shrink-0",children:t}),e.jsx("span",{className:"ml-auto min-w-0 truncate font-mono text-[10px] text-dark-muted/70",children:l?c:i})]})}function xe({id:b,title:t,preview:i,running:l,updatedAt:c,now:n,onClick:g}){const{t:r}=H();return e.jsxs("button",{type:"button",onClick:g,className:"block w-full rounded-lg border border-dark-border/70 bg-dark-surface/60 px-2.5 py-2 text-left transition-colors hover:border-accent-blue/40 hover:bg-dark-hover/40","data-testid":`project-session-${b}`,children:[e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{className:N("h-1.5 w-1.5 shrink-0 rounded-full",l?"bg-accent-blue":"bg-dark-muted/50"),"aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1 truncate text-xs text-dark-text",title:t,children:t}),e.jsx("span",{className:"shrink-0 font-mono text-[10px] tabular-nums text-dark-muted",children:Q(c,n,r)})]}),i&&e.jsx("p",{className:"mt-0.5 truncate pl-3 text-[10.5px] text-dark-muted/80",children:i})]})}const et=250,it=u.memo(function({workspaceDir:t,onNewSessionHere:i,onOpenThreadSession:l,onOpenSession:c}){const{t:n}=H(),{projects:g,hiddenCount:r,query:j,sort:y,loading:s,lastError:f,disabled:P,setQuery:E,setSort:I,openProject:v,closeDetail:C,createProject:w,hideProject:o,unhideAll:x,refresh:D}=Ve(),[R,p]=u.useState(null),[_,K]=u.useState(!1),[ee,U]=u.useState(!1),[A,Y]=u.useState(j),T=u.useRef(null);u.useEffect(()=>{Y(j)},[j]),u.useEffect(()=>()=>{T.current&&clearTimeout(T.current)},[]);const d=m=>{Y(m),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>E(m),et)},[S,W]=u.useState(()=>Date.now());u.useEffect(()=>{const m=setInterval(()=>W(Date.now()),3e4);return()=>clearInterval(m)},[]);const $=u.useMemo(()=>He,[]),F=m=>{Oe.openFolder(m).then(k=>{k.ok||L.error(k.error||n("projects.openFolderFailed"),5e3)})},M=m=>{var J;const k=(J=navigator.clipboard)==null?void 0:J.writeText(m);k&&k.then(()=>L.success(n("projects.copied"),2e3),()=>L.error(n("projects.copyFailed"),4e3))},O=m=>{K(!1),U(!0),w(m).then(k=>{if(U(!1),!k.ok){L.error(k.error,6e3);return}L.success(n("projects.created"),3e3),k.projectId&&p(k.projectId)})};return P?e.jsx("div",{className:"flex h-full items-center justify-center p-6","data-testid":"projects-disabled",children:e.jsxs("div",{className:"max-w-md rounded-xl border border-dark-border bg-dark-surface p-4 text-center",children:[e.jsx(Se,{size:18,className:"mx-auto text-dark-muted","aria-hidden":"true"}),e.jsx("p",{className:"mt-2 text-xs leading-relaxed text-dark-muted",children:n("projects.disabled")})]})}):e.jsxs("div",{className:"flex h-full min-h-0 flex-col","data-testid":"projects-view",children:[R?e.jsx(Ze,{projectId:R,onBack:()=>{p(null),C()},onOpenFolder:F,onCopyRoot:M,onNewSessionHere:i,onOpenThreadSession:l,onOpenSession:c,onHide:m=>{o(m),L.info(n("projects.hiddenToast"),4e3),p(null),C()},onSelectProject:m=>p(m)}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex shrink-0 items-center gap-2 border-b border-dark-border px-3 py-2.5",children:[e.jsx("span",{className:"text-sm font-medium text-dark-text",children:n("projects.title")}),e.jsx("span",{className:"rounded-full border border-dark-border bg-dark-hover/40 px-1.5 py-px text-[10px] leading-4 text-dark-muted","data-testid":"projects-count-pill",children:n("projects.projectCount",{count:g.length})}),e.jsx("div",{className:"ml-1 flex items-center rounded-md bg-dark-hover/60 p-0.5",role:"group",children:$.map(m=>e.jsx("button",{type:"button",onClick:()=>I(m),"aria-pressed":y===m,className:N("shrink-0 rounded px-1.5 py-0.5 text-[10.5px] transition-colors",y===m?"bg-dark-surface text-dark-text":"text-dark-muted hover:text-dark-text"),"data-testid":`projects-sort-${m}`,children:n(`projects.sort.${m}`)},m))}),e.jsxs("div",{className:"ml-auto flex items-center gap-1",children:[e.jsx("button",{type:"button",onClick:D,disabled:s,className:"ui-icon-button disabled:opacity-50",title:n("common.refresh"),"aria-label":n("common.refresh"),"data-testid":"projects-refresh",children:e.jsx(Pe,{size:14,className:N(s&&"animate-spin"),"aria-hidden":"true"})}),e.jsxs("button",{type:"button",onClick:()=>K(!0),disabled:ee,className:"btn btn-primary shrink-0 text-[11px] disabled:opacity-60","data-testid":"projects-new",children:[e.jsx(Ee,{size:13,"aria-hidden":"true"}),n("projects.new")]})]})]}),f&&e.jsx("div",{className:"shrink-0 px-3 pt-2","data-testid":"projects-status-banner",children:e.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-[10.5px] leading-relaxed text-accent-red",children:[e.jsx(Z,{size:12,className:"mt-[1px] shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1",children:n("projects.loadFailed",{message:f})}),e.jsx("button",{type:"button",onClick:D,className:"shrink-0 underline hover:no-underline","data-testid":"projects-retry",children:n("projects.retry")})]})}),r>0&&e.jsx("div",{className:"shrink-0 px-3 pt-2","data-testid":"projects-hidden-banner",children:e.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-[10.5px] text-dark-muted",children:[e.jsx(oe,{size:11,className:"shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"min-w-0 flex-1",children:n("projects.hiddenCount",{count:r})}),e.jsx("button",{type:"button",onClick:x,className:"shrink-0 underline hover:no-underline","data-testid":"projects-unhide-all",children:n("projects.unhideAll")})]})}),e.jsx("div",{className:"min-h-0 flex-1 overflow-y-auto px-3 py-3 custom-scrollbar",children:e.jsxs("div",{className:"mx-auto flex max-w-[860px] flex-col",children:[e.jsx("h1",{className:"text-lg font-semibold text-dark-text",children:n("projects.title")}),e.jsx("p",{className:"mt-0.5 text-xs leading-relaxed text-dark-muted",children:n("projects.subtitle")}),e.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:[e.jsx(ue,{size:13,className:"shrink-0 text-dark-muted","aria-hidden":"true"}),e.jsx("input",{type:"text",value:A,onChange:m=>d(m.target.value),placeholder:n("projects.searchPlaceholder"),"aria-label":n("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"}),A&&e.jsx("button",{type:"button",onClick:()=>d(""),className:"shrink-0 rounded p-0.5 text-dark-muted transition-colors hover:text-dark-text","aria-label":n("projects.searchClear"),"data-testid":"projects-search-clear",children:e.jsx(de,{size:12,"aria-hidden":"true"})}),e.jsx("span",{className:"shrink-0 text-[10px] text-dark-muted/70",children:n("projects.serverFilterHint")})]}),g.length===0?j.trim()?e.jsxs("div",{className:"mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center","data-testid":"projects-search-empty",children:[e.jsx("p",{className:"text-xs text-dark-text",children:n("projects.searchEmpty")}),e.jsx("p",{className:"mt-1 text-[10.5px] leading-relaxed text-dark-muted",children:n("projects.searchEmptyHint",{q:j.trim()})})]}):e.jsxs("div",{className:"mt-6 rounded-xl border border-dashed border-dark-border/60 py-8 text-center","data-testid":"projects-empty",children:[e.jsx("p",{className:"text-xs text-dark-text",children:n("projects.empty")}),e.jsx("p",{className:"mt-1 text-[10.5px] leading-relaxed text-dark-muted",children:n("projects.emptyHint")})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"mb-3 mt-5 flex items-center gap-2 text-[10px] font-semibold uppercase tracking-wide text-dark-muted/60",children:[e.jsx("span",{className:"shrink-0",children:n("projects.yourProjects")}),e.jsx("span",{className:"h-px flex-1 bg-dark-border/60","aria-hidden":"true"})]}),e.jsx("div",{className:"grid [grid-template-columns:repeat(auto-fill,minmax(250px,1fr))] gap-3","data-testid":"projects-list",children:g.map(m=>e.jsx(Qe,{project:m,onOpen:k=>{p(k),v(k)},onOpenFolder:F,onCopyRoot:M,onHide:k=>{o(k),L.info(n("projects.hiddenToast"),4e3)},now:S},m.projectId))})]})]})})]}),_&&Ke.createPortal(e.jsx(qe,{initial:t||"",onClose:()=>K(!1),onConfirm:O}),document.body)]})});export{it as ProjectsView};
@@ -1 +0,0 @@
1
- .traj-root{position:relative;display:flex;flex-direction:column;flex-shrink:0;border-bottom:1px solid var(--color-border, rgba(128, 128, 128, .25));background:var(--color-surface, rgba(20, 22, 28, .6));-webkit-user-select:none;-moz-user-select:none;user-select:none}.traj-labels{display:flex;height:16px;align-items:center;gap:8px;padding:0 8px;font-size:10px;color:var(--color-muted, rgba(150, 155, 165, .6))}.traj-track{position:relative;height:52px;overflow:hidden;cursor:crosshair;touch-action:none}.traj-hoverLine{position:absolute;top:0;bottom:0;width:1px;background:var(--color-accent, rgba(90, 140, 255, .5));pointer-events:none;left:var(--trajectory-hover-left)}.traj-selection{position:absolute;top:0;bottom:0;background:#5a8cff24;border:1px solid rgba(90,140,255,.4);pointer-events:none;left:var(--trajectory-selection-left);width:var(--trajectory-selection-width)}.traj-selection[data-dragging]{background:#5a8cff38}.traj-turnBoundaries{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none}.traj-turnBoundary{position:absolute;top:0;bottom:0;width:1px;background:#ffffff1f;left:var(--trajectory-turn-left)}.traj-lanes{position:absolute;top:0;right:0;bottom:0;left:0}.traj-span{position:absolute;top:calc(var(--trajectory-span-lane) * 17px + 2px);height:13px;border-radius:2px;overflow:hidden;white-space:nowrap;font-size:9px;line-height:13px;padding:0 3px;color:#ffffffbf;background:#6e788c8c;left:var(--trajectory-span-left);width:var(--trajectory-span-width);cursor:pointer}.traj-span[data-timeline-span=user]{background:#5a8cff8c}.traj-span[data-timeline-span=message]{background:#46be828c}.traj-span[data-timeline-span=tool],.traj-span[data-timeline-span=subtool]{background:#aa78f08c}.traj-span[data-timeline-span=compacted]{background:#e6aa3c8c}.traj-span[data-error]{background:#e65050a6}.traj-span[data-current]{outline:1px solid rgba(255,255,255,.7)}.traj-span[data-hovered]{filter:brightness(1.25)}.traj-span[data-search-match=true]{outline:1px solid rgba(90,200,255,.8)}.traj-span[data-search-match=false]{opacity:.35}.traj-span[data-selected=true]{outline:1px solid rgba(90,140,255,.9)}.traj-span[data-assistant-timing]{background:linear-gradient(to right,rgba(70,190,130,.85) 0%,rgba(70,190,130,.85) var(--trajectory-assistant-ttft),rgba(70,190,130,.4) var(--trajectory-assistant-ttft),rgba(70,190,130,.4) 100%)}.traj-detailTab{display:inline-flex;align-items:center;gap:4px;border-radius:4px;padding:2px 8px;font-size:11px;color:var(--color-muted, rgba(150, 155, 165, .8));cursor:pointer}.traj-detailTab:hover{background:#8080801f}.traj-detailTab[data-active=true]{background:#5a8cff29;color:var(--color-text, rgba(230, 232, 238, .95))}.traj-detailBody{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word;color:var(--color-text, rgba(230, 232, 238, .9))}.traj-detailKey{color:var(--color-muted, rgba(150, 155, 165, .7))}.traj-detailValue{color:var(--color-text, rgba(230, 232, 238, .9))}