@opencodex/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
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,$t as n,A as r,Bt as i,Ct as a,H as o,Lt as s,Rn as c,Rr as l,Ur as u,Vn as d,W as f,dn as p,ft as m,g as ee,m as h,ot as te,r as ne,st as g,t as re,ur as _,w as v}from"./icons-BvYhTENi.js";import{t as ie}from"./useTranslation-BGmCDuQI.js";import{t as y}from"./api-CCt9DRQm.js";import{I as b}from"./markdown-DAQZeY5V.js";import{A as x,f as ae}from"./common-BHXgEvgk.js";import{B as S}from"./index-BX-d2OBW.js";var C=e(u(),1),w=b();function T(e){return e.split(/[,,、]/).map(e=>e.trim()).filter(Boolean)}function E({connector:e,onRefresh:t}){let{t:r}=ie(),[a,o]=(0,C.useState)(null),[s,c]=(0,C.useState)(null),[l,u]=(0,C.useState)(null),[d,f]=(0,C.useState)(null),p=e.accounts??[],ne=(e.requiresEnv??[]).filter(e=>!e.optional),g=async(e,n)=>{o(e),c(null);let r=await n();r&&c(r),o(null),r||t()},re=()=>u({mode:`add`,label:``,tags:``,env:{}}),v=e=>u({mode:`creds`,accountId:e.id,label:e.label,tags:e.tags.join(`, `),env:{}}),b=()=>{if(!l)return;let t=T(l.tags),n=Object.fromEntries(Object.entries(l.env).filter(([,e])=>e.trim().length>0)),r=l.accountId??`new`;g(r,async()=>{if(l.mode===`add`){let r=await y.connectors.addAccount(e.id,{...l.label.trim()?{label:l.label.trim()}:{},tags:t,...Object.keys(n).length?{env:n}:{}});if(!r.success)return r.error||`新增账号失败`}else{let r=p.find(e=>e.id===l.accountId);if(!r)return`账号已不存在,请刷新`;let i=await y.connectors.updateAccount(e.id,r.id,{label:l.label.trim()||r.label,tags:t});if(!i.success)return i.error||`保存账号失败`;if(Object.keys(n).length){let e=await y.connectors.connect(r.stateId,n);if(!e.success)return e.error||`连接账号失败`}}return u(null),null})},ae=e=>{!e.enabled&&e.missingEnv?.length?v(e):g(e.id,async()=>{let t=await y.connectors.toggle(e.stateId,!e.enabled);return t.success?null:t.error||`切换 ${e.label} 失败`})},S=(t,n)=>{g(t.id,async()=>{let r=await y.connectors.updateAccount(e.id,t.id,{tags:T(n)});return r.success?null:r.error||`保存标签失败`}),f(null)},E=t=>{window.confirm(r(`connectors.accountsRemoveConfirm`,{label:t.label}))&&g(t.id,async()=>{let n=await y.connectors.removeAccount(e.id,t.id);return n.success?n.data?.removed===!1?`账号已不存在`:null:n.error||`删除账号失败`})},oe=e=>e.enabled&&e.status===`ready`?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-green`,children:[(0,w.jsx)(_,{size:10}),e.toolCount?r(`connectors.toolCount`,{count:e.toolCount}):`ready`]}):e.status===`error`?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-red`,title:e.error,children:[(0,w.jsx)(h,{size:10}),e.error||r(`connectors.missing`)]}):e.missingEnv?.length?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge text-accent-yellow`,children:[(0,w.jsx)(h,{size:10}),e.missingEnv.join(`, `),` `,r(`connectors.missing`)]}):(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.status});return(0,w.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-2`,children:[(0,w.jsxs)(`span`,{className:`text-xs text-dark-muted inline-flex items-center gap-1`,children:[(0,w.jsx)(n,{size:12}),r(`connectors.accountsTitle`),(0,w.jsxs)(`span`,{className:`text-badge`,children:[`(`,p.length,`)`]})]}),(0,w.jsxs)(`button`,{type:`button`,onClick:re,className:`inline-flex items-center gap-1 text-meta text-accent-blue hover:underline`,children:[(0,w.jsx)(te,{size:11}),r(`connectors.accountsAdd`)]})]}),p.length===0?(0,w.jsx)(`p`,{className:`text-badge text-dark-muted`,children:r(`connectors.accountsEmpty`)}):(0,w.jsx)(`ul`,{className:`space-y-1.5`,children:p.map(e=>(0,w.jsxs)(`li`,{className:`flex items-center gap-2 flex-wrap bg-dark-bg/60 border border-dark-border rounded-lg px-2.5 py-1.5`,children:[(0,w.jsx)(`span`,{className:`text-sm`,children:e.label}),d?.id===e.id?(0,w.jsx)(`input`,{autoFocus:!0,value:d.value,onChange:t=>f({id:e.id,value:t.target.value}),onBlur:()=>S(e,d.value),onKeyDown:t=>{t.key===`Enter`&&S(e,d.value),t.key===`Escape`&&f(null)},placeholder:r(`connectors.accountsTagsHint`),className:`px-1.5 py-0.5 bg-dark-surface border border-dark-border rounded text-badge w-40`}):(0,w.jsxs)(w.Fragment,{children:[e.tags.length?e.tags.map(e=>(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:e},e)):(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,children:r(`connectors.accountsNoTags`)}),(0,w.jsx)(`button`,{type:`button`,title:r(`connectors.accountsEditTags`),onClick:()=>f({id:e.id,value:e.tags.join(`, `)}),className:`text-dark-muted hover:text-accent-blue`,children:(0,w.jsx)(m,{size:11})})]}),e.hint?(0,w.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.hint}):null,a===e.id?(0,w.jsx)(i,{size:11,className:`animate-spin text-dark-muted`}):oe(e),(0,w.jsxs)(`span`,{className:`ms-auto flex items-center gap-1.5`,children:[(0,w.jsx)(`button`,{type:`button`,title:r(`connectors.accountsCreds`),onClick:()=>v(e),className:`p-1 rounded text-dark-muted hover:text-accent-blue hover:bg-dark-hover`,children:(0,w.jsx)(n,{size:12})}),(0,w.jsx)(`button`,{type:`button`,title:r(`connectors.accountsRemove`),onClick:()=>E(e),disabled:a!==null,className:`p-1 rounded text-dark-muted hover:text-accent-red hover:bg-accent-red/10 disabled:opacity-40`,children:(0,w.jsx)(ee,{size:12})}),(0,w.jsx)(`button`,{role:`switch`,"aria-checked":e.enabled,disabled:a!==null,onClick:()=>ae(e),className:`relative w-9 h-5 rounded-full transition-colors disabled:opacity-50 ${e.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,w.jsx)(`span`,{className:`absolute top-0.5 w-4 h-4 bg-white rounded-full transition-transform ${e.enabled?`start-4`:`start-0.5`}`})})]})]},e.id))}),s?(0,w.jsx)(`p`,{className:`text-badge text-accent-red mt-2`,children:s}):null,l?(0,w.jsxs)(`div`,{className:`mt-2 border border-dark-border rounded-lg p-2.5 bg-dark-bg/60 space-y-2`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:r(`connectors.accountsLabel`)}),(0,w.jsx)(`input`,{autoFocus:!0,value:l.label,onChange:e=>u({...l,label:e.target.value}),placeholder:r(`connectors.accountsLabelHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:r(`connectors.accountsTags`)}),(0,w.jsx)(`input`,{value:l.tags,onChange:e=>u({...l,tags:e.target.value}),placeholder:r(`connectors.accountsTagsHint`),className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`})]}),ne.map(e=>(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e.label}),(0,w.jsx)(`input`,{type:e.secret?`password`:`text`,value:l.env[e.key]??``,onChange:t=>u({...l,env:{...l.env,[e.key]:t.target.value}}),placeholder:e.key,className:`w-full px-2 py-1 bg-dark-surface border border-dark-border rounded text-sm focus:border-accent-blue focus:outline-none`}),e.hint?(0,w.jsx)(`p`,{className:`text-badge text-dark-muted mt-0.5`,children:e.hint}):null]},e.key)),(0,w.jsxs)(`div`,{className:`flex gap-2`,children:[(0,w.jsx)(x,{variant:`accent`,disabled:a!==null,onClick:b,children:l.mode===`add`?r(`connectors.accountsAdd`):r(`common.save`)}),(0,w.jsx)(`button`,{type:`button`,onClick:()=>u(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:r(`common.cancel`)})]})]}):null]})}var oe={"code-intelligence":`🧠 代码智能`,filesystem:`📂 文件系统`,databases:`🗄️ 数据库`,"browser-automation":`🌐 浏览器自动化`,"knowledge-memory":`🧠 知识/记忆`,"search-web":`🔎 搜索/网页`,"cloud-platforms":`☁️ 云平台`,communication:`💬 通讯`,"developer-tools":`🛠️ 开发者工具`,security:`🔒 安全`,"test-demo":`🧪 测试/Demo`,other:`📦 其他`},D=`email-imap`;function se(e){return(e.missingEnv?.length??0)>0||!!e.supportsOAuth&&!e.authorized}var ce=[`phone_use`,`phone_inspect`];function O(){let{t:e}=ie(),[u,m]=(0,C.useState)([]),[b,T]=(0,C.useState)(!0),[O,le]=(0,C.useState)(null),[k,A]=(0,C.useState)({}),[ue,j]=(0,C.useState)(null),[M,de]=(0,C.useState)(``),[N,fe]=(0,C.useState)(null),[P,pe]=(0,C.useState)(`all`),[me,F]=(0,C.useState)(null),[he,ge]=(0,C.useState)({}),[_e,I]=(0,C.useState)(!1),[L,R]=(0,C.useState)({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),[z,ve]=(0,C.useState)(null),[ye,B]=(0,C.useState)(!1),[be,V]=(0,C.useState)(null),[H,xe]=(0,C.useState)(null),[Se,U]=(0,C.useState)(!1),[Ce,W]=(0,C.useState)(null),[G,we]=(0,C.useState)(null),[K,Te]=(0,C.useState)(!1),[Ee,De]=(0,C.useState)(null),Oe=async()=>{B(!0),V(null);try{let e=await y.tools.get(`computer_use`);ve(e.success&&e.data?!!e.data.enabled:!1)}catch(e){V(e instanceof Error?e.message:String(e))}B(!1)},ke=async()=>{if(z===null)return;let e=!z;B(!0),V(null);try{let t=await y.tools.toggle(`computer_use`,e);t.success?ve(e):V(t.error||`切换 Computer Use 失败`)}catch(e){V(e instanceof Error?e.message:String(e))}B(!1)},Ae=async()=>{U(!0),W(null);try{let e=await y.tools.get(`phone_use`);xe(e.success&&e.data?!!e.data.enabled:!1)}catch(e){W(e instanceof Error?e.message:String(e))}U(!1)},je=async()=>{if(H===null)return;let t=!H;U(!0),W(null);try{let n=(await Promise.all(ce.map(e=>y.tools.toggle(e,t)))).find(e=>!e.success);n?W(n.error||e(`connectors.phoneToggleFailed`)):(xe(t),t&&Me())}catch(e){W(e instanceof Error?e.message:String(e))}U(!1)},Me=async()=>{Te(!0),W(null);try{let t=await y.device.androidStatus();t.success&&t.data?we(t.data):W(t.error||e(`connectors.phoneCheckFailed`))}catch(e){W(e instanceof Error?e.message:String(e))}Te(!1)},Ne=()=>{window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:`tools`}))},Pe=()=>R({name:``,command:``,args:``,env:``,transport:`stdio`,url:``,headers:``}),Fe=e=>Object.fromEntries(e.split(`,`).map(e=>e.trim()).filter(Boolean).map(e=>{let t=e.indexOf(`=`);return t>0?[e.slice(0,t).trim(),e.slice(t+1).trim()]:[e,``]})),Ie=async()=>{let t=L.transport!==`stdio`;if(!L.name.trim()||!t&&!L.command.trim()||t&&!L.url.trim())j(e(`connectors.customFormRequired`));else{A(e=>({...e,__add:!0})),j(null);try{let e=await y.connectors.addCustom({name:L.name.trim(),command:t?void 0:L.command.trim(),args:t?void 0:L.args.split(/\s+/).filter(Boolean),env:Fe(L.env),url:t?L.url.trim():void 0,transport:t?L.transport:void 0,headers:t?Fe(L.headers):void 0});e.success&&e.data?(m(t=>[...t,e.data]),I(!1),Pe()):j(e.error||`添加失败`)}catch(e){j(e instanceof Error?e.message:String(e))}finally{A(e=>({...e,__add:!1}))}}},Le=async e=>{A(t=>({...t,[e.id]:!0}));try{let t=await y.connectors.removeCustom(e.id);t.success?m(t=>t.filter(t=>t.id!==e.id)):j(t.error||`删除失败`)}finally{A(t=>({...t,[e.id]:!1}))}},q=async()=>{T(!0),le(null);let e=await y.connectors.list();e.success&&Array.isArray(e.data?.connectors)?m(e.data.connectors):le(e.error||`加载连接器失败`),T(!1)};(0,C.useEffect)(()=>{q(),Oe(),Ae()},[]),S(()=>void q(),{filterServer:e=>/^(managed|custom)-connector-/.test(e)});let J=(e,t,n,r)=>{j(n||null),m(n=>n.map(n=>n.id===e?t??{...n,enabled:!!r,status:`error`}:n))},Re=async(e,t,n)=>{j(null),A(t=>({...t,[e.id]:!0})),m(n=>n.map(n=>n.id===e.id?{...n,enabled:t,status:t?`connecting`:`installed`}:n));try{let r=await y.connectors.toggle(e.id,t,n);r.success&&r.data?m(t=>t.map(t=>t.id===e.id?r.data:t)):J(e.id,void 0,r.error||`切换 ${e.name} 失败`,!t)}catch(n){J(e.id,void 0,n instanceof Error?n.message:String(n),!t)}finally{A(t=>({...t,[e.id]:!1}))}},ze=e=>{!e.enabled&&e.requiresEnv?.length&&e.missingEnv?.length?F(e.id):(F(null),Re(e,!e.enabled))},Be=async(e,t)=>{F(null),j(null),A(t=>({...t,[e.id]:!0})),m(t=>t.map(t=>t.id===e.id?{...t,enabled:!0,status:`connecting`}:t));try{let n=await y.connectors.connect(e.id,t);n.success&&n.data?(m(t=>t.map(t=>t.id===e.id?n.data:t)),ge(t=>({...t,[e.id]:{}}))):J(e.id,void 0,n.error||`连接 ${e.name} 失败`,!1)}catch(t){J(e.id,void 0,t instanceof Error?t.message:String(t),!1)}finally{A(t=>({...t,[e.id]:!1}))}},Ve=async t=>{j(null),De(t.id);try{let n=await y.connectors.authorize(t.id);if(!n.success||!n.data?.authUrl){j(n.error||e(`connectors.authorizeFailed`));return}window.open(n.data.authUrl,`_blank`,`noopener,noreferrer`);let r=Date.now()+12e4;for(;Date.now()<r;){await new Promise(e=>setTimeout(e,2e3));let e=(await y.connectors.list()).data?.connectors?.find(e=>e.id===t.id);if(e){if(m(n=>n.map(n=>n.id===t.id?e:n)),e.error){j(e.error);break}if(e.authorized&&e.status===`ready`)break}}}catch(e){j(e instanceof Error?e.message:String(e))}finally{De(null)}},He=t=>{let n=`inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-badge`;return t.stage===`ready`?(0,w.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,w.jsx)(_,{size:9}),e(`connectors.phoneBadgeReady`)]}):t.stage===`adb-missing`||t.stage===`adb-error`?(0,w.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,w.jsx)(h,{size:9}),t.stage===`adb-error`?e(`connectors.phoneBadgeAdbError`):e(`connectors.phoneBadgeNoAdb`)]}):(0,w.jsxs)(`span`,{className:`${n} bg-accent-yellow/15 text-accent-yellow`,children:[(0,w.jsx)(h,{size:9}),e(`connectors.phoneBadgeWaiting`)]})},Ue=e=>e===`adb-error`?0:e===`adb-missing`?1:e===`no-device`?2:e===`unauthorized`||e===`device-offline`?3:e===`multiple`?4:0,We=t=>{switch(t.stage){case`ready`:return e(`connectors.phoneReady`,{device:t.selected?`${t.selected.serial}${t.selected.model?` · ${t.selected.model}`:``}`:`—`});case`adb-missing`:return e(`connectors.phoneAdbMissing`,{env:t.envKeys.binary});case`adb-error`:return e(`connectors.phoneAdbError`,{env:t.envKeys.binary});case`no-device`:return e(`connectors.phoneNoDevice`);case`unauthorized`:return e(`connectors.phoneUnauthorized`);case`device-offline`:return e(`connectors.phoneOffline`);case`multiple`:return e(`connectors.phoneMultiple`,{count:t.devices.filter(e=>e.state===`device`).length,serials:t.devices.filter(e=>e.state===`device`).map(e=>e.serial).join(`, `),env:t.envKeys.serial});default:return e(`connectors.phoneNoDevice`)}},Ge=t=>{let n=`inline-flex items-center gap-1 px-2 py-0.5 rounded text-xs font-medium`;if(!t.installed)return(0,w.jsxs)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:[(0,w.jsx)(d,{size:12}),e(`connectors.notInstalled`)]});switch(t.status){case`ready`:return(0,w.jsxs)(`span`,{className:`${n} bg-accent-green/15 text-accent-green`,children:[(0,w.jsx)(_,{size:12}),e(`connectors.ready`)]});case`connecting`:return(0,w.jsxs)(`span`,{className:`${n} bg-accent-blue/15 text-accent-blue`,children:[(0,w.jsx)(i,{size:12,className:`animate-spin`}),e(`connectors.connecting`)]});case`error`:return(0,w.jsxs)(`span`,{className:`${n} bg-accent-red/15 text-accent-red`,children:[(0,w.jsx)(h,{size:12}),e(`connectors.error`)]});case`disabled`:return(0,w.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.disabled`)});default:return(0,w.jsx)(`span`,{className:`${n} bg-dark-hover text-dark-muted`,children:e(`connectors.installed`)})}},Y=u.find(e=>e.id===D)??null,X=u.filter(e=>e.featured&&e.id!==D&&se(e)),Ke=new Set(X.map(e=>e.id)),Z=u.filter(e=>e.id!==D&&!Ke.has(e.id)),qe=Y?.missingEnv??[],Q=qe.length>0,Je=!!(Y&&me===Y.id),$=Z.filter(e=>P===`all`||e.kind===P),Ye=$.filter(e=>{if(M){let t=M.toLowerCase();if(![e.name,e.id,e.description,e.category??``,e.kind,...e.languages??[]].join(` `).toLowerCase().includes(t))return!1}return!(N&&e.category!==N)}).sort((e,t)=>e.enabled===t.enabled?e.name.localeCompare(t.name):e.enabled?-1:1),Xe=[...new Set($.map(e=>e.category).filter(Boolean))];if(b)return(0,w.jsx)(`div`,{className:`flex-1 overflow-y-auto p-4`,role:`status`,"aria-label":e(`common.loading`),children:(0,w.jsx)(ae,{count:5})});if(O)return(0,w.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,w.jsxs)(`div`,{className:`text-center`,children:[(0,w.jsx)(h,{size:32,className:`mx-auto mb-2 text-accent-red`}),(0,w.jsx)(`p`,{className:`text-accent-red mb-4`,children:O}),(0,w.jsx)(x,{variant:`accent`,onClick:()=>void q(),children:e(`common.retry`)})]})});let Ze=t=>{let r=he[t.id]??{},i=(e,n)=>ge(r=>({...r,[t.id]:{...r[t.id]??{},[e]:n}})),a=t.requiresEnv??[],o=a.filter(e=>!e.optional),s=a.filter(e=>e.optional),c=new Set(t.configuredEnv??[]),l=Object.fromEntries(Object.entries(r).filter(([,e])=>e.trim().length>0)),u=o.filter(e=>!l[e.key]&&!c.has(e.key)),d=t=>(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`label`,{className:`flex items-center gap-1.5 text-meta text-dark-muted mb-1`,children:[(0,w.jsx)(`span`,{children:t.label}),t.optional?(0,w.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-dark-hover text-dark-muted`,children:e(`connectors.envOptional`)}):null,c.has(t.key)?(0,w.jsx)(`span`,{className:`text-badge px-1 py-0.5 rounded bg-accent-green/15 text-accent-green`,children:e(`connectors.envAlreadySet`)}):null]}),(0,w.jsx)(`input`,{type:t.secret?`password`:`text`,value:r[t.key]??``,onChange:e=>i(t.key,e.target.value),placeholder:c.has(t.key)?e(`connectors.envKeepPlaceholder`):t.key,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`}),t.hint?(0,w.jsx)(`p`,{className:`text-badge text-dark-muted mt-1`,children:t.hint}):null]},t.key);return(0,w.jsxs)(`div`,{className:`mt-3 pt-3 border-t border-dark-border`,children:[(0,w.jsxs)(`div`,{className:`text-xs text-dark-muted mb-2 flex items-center gap-1`,children:[(0,w.jsx)(n,{size:12}),o.length?e(`connectors.needCredentials`):e(`connectors.envOptionalOnly`)]}),(0,w.jsx)(`div`,{className:`space-y-2`,children:o.map(d)}),s.length?(0,w.jsxs)(`details`,{className:`mt-2`,open:u.length===0&&o.length===0,children:[(0,w.jsx)(`summary`,{className:`text-meta text-dark-muted cursor-pointer select-none`,children:e(`connectors.envOptionalSection`,{count:s.length})}),(0,w.jsx)(`div`,{className:`space-y-2 mt-2`,children:s.map(d)})]}):null,u.length?(0,w.jsx)(`p`,{className:`text-badge text-accent-yellow mt-2`,children:e(`connectors.envMissingRequired`,{keys:u.map(e=>e.key).join(`, `)})}):null,(0,w.jsxs)(`div`,{className:`flex gap-2 mt-2`,children:[(0,w.jsx)(x,{variant:`accent`,disabled:u.length>0,onClick:()=>void Be(t,l),children:e(`connectors.connect`)}),(0,w.jsx)(`button`,{onClick:()=>F(null),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]})},Qe=(t,r=!1)=>{let i=!!k[t.id],a=me===t.id,s=new Set(t.configuredEnv??[]),l=(t.requiresEnv??[]).filter(e=>e.optional&&!s.has(e.key)).length;return(0,w.jsxs)(`div`,{className:r?``:`bg-dark-surface border border-dark-border rounded-lg p-4 transition-opacity ${t.enabled?``:`opacity-80`}`,children:[(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,w.jsxs)(`div`,{className:`flex items-start gap-3 flex-1 min-w-0`,children:[(0,w.jsx)(`span`,{className:`mt-0.5 shrink-0 px-2 py-1 rounded-md text-meta font-semibold uppercase ${t.kind===`lsp`?`bg-accent-purple/15 text-accent-purple`:`bg-accent-green/15 text-accent-green`}`,children:t.kind===`lsp`?`LSP`:`MCP`}),(0,w.jsxs)(`div`,{className:`min-w-0`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,w.jsx)(`span`,{className:`font-medium text-sm truncate`,children:t.name}),t.custom?(0,w.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-purple/15 text-accent-purple`,children:e(`connectors.custom`)}):null,t.official?(0,w.jsxs)(`span`,{title:`Official`,className:`text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[`🎖️ `,e(`connectors.official`)]}):null,t.scope===`cloud`?(0,w.jsxs)(`span`,{title:`Cloud`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-accent-blue/15 text-accent-blue`,children:[(0,w.jsx)(p,{size:9}),e(`connectors.cloud`)]}):(0,w.jsxs)(`span`,{title:`Local`,className:`inline-flex items-center gap-0.5 text-badge px-1.5 py-0.5 rounded bg-dark-hover text-dark-muted`,children:[(0,w.jsx)(o,{size:9}),e(`connectors.local`)]}),t.language?(0,w.jsx)(`span`,{className:`text-badge`,children:t.language}):null,Ge(t)]}),(0,w.jsx)(`p`,{className:`text-xs text-dark-muted mt-1 line-clamp-2`,children:t.description}),(0,w.jsxs)(`div`,{className:`flex items-center gap-3 mt-2 text-meta text-dark-muted flex-wrap`,children:[(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,w.jsx)(o,{size:11}),(0,w.jsx)(`code`,{className:`text-badge`,children:t.installHint})]}),t.transport&&t.transport!==`stdio`?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-accent-blue`,children:[(0,w.jsx)(p,{size:11}),t.transport===`sse`?`SSE`:`Streamable HTTP`]}):null,t.languages?.length?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,w.jsx)(re,{size:11}),t.languages.join(`, `)]}):null,t.kind===`mcp`&&t.toolCount!==void 0?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,w.jsx)(g,{size:11}),e(`connectors.toolCount`,{count:t.toolCount})]}):null,t.requiresEnv?.length?(0,w.jsxs)(`button`,{type:`button`,onClick:()=>F(a?null:t.id),className:`inline-flex items-center gap-1 hover:text-accent-blue ${t.missingEnv?.length?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,w.jsx)(n,{size:11}),t.missingEnv?.length?`${t.missingEnv.join(`, `)} ${e(`connectors.missing`)}`:e(`connectors.envConfigured`),l?` · ${e(`connectors.envOptionalUnset`,{count:l})}`:null]}):null,t.docsUrl?(0,w.jsxs)(`a`,{href:t.docsUrl,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 hover:text-accent-blue`,onClick:e=>e.stopPropagation(),children:[(0,w.jsx)(c,{size:11}),e(`connectors.docs`)]}):null]}),t.error?(0,w.jsx)(`p`,{className:`text-meta text-accent-red mt-1`,children:t.error}):null,t.supportsOAuth&&!t.authorized&&!t.error?(0,w.jsx)(`p`,{className:`text-meta text-accent-yellow mt-1`,children:e(`connectors.oauthNotAuthorized`)}):null]})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[t.supportsOAuth?(0,w.jsx)(x,{variant:t.authorized?`ghost`:`accent`,size:`sm`,disabled:i||Ee===t.id,onClick:()=>void Ve(t),children:Ee===t.id?e(`connectors.authorizing`):t.authorized?e(`connectors.reauthorize`):e(`connectors.authorize`)}):null,t.custom?(0,w.jsx)(`button`,{onClick:()=>void Le(t),disabled:i,title:e(`connectors.removeCustom`),className:`p-1.5 rounded-lg text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-40`,children:(0,w.jsx)(ee,{size:14})}):null,!t.installed&&t.enabled?(0,w.jsxs)(`span`,{className:`text-meta text-accent-blue flex items-center gap-1`,children:[(0,w.jsx)(d,{size:11,className:`animate-pulse`}),e(`connectors.installing`)]}):null,(0,w.jsx)(`button`,{role:`switch`,"aria-checked":t.enabled,disabled:i,onClick:()=>ze(t),className:`relative w-12 h-6 rounded-full transition-colors disabled:opacity-50 ${t.enabled?`bg-accent-green`:`bg-dark-border`}`,children:(0,w.jsx)(`span`,{className:`absolute top-1 w-4 h-4 bg-white rounded-full transition-transform ${t.enabled?`start-7`:`start-1`}`})})]})]}),a?Ze(t):null,t.supportsAccounts?(0,w.jsx)(E,{connector:t,onRefresh:()=>void q()}):null]},t.id)};return(0,w.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar p-4`,children:[(0,w.jsxs)(`div`,{className:`sticky top-0 z-20 -mx-4 -mt-4 flex items-center justify-between bg-dark-bg/90 px-4 pb-3 pt-4 backdrop-blur`,children:[(0,w.jsxs)(`h2`,{className:`text-lg font-semibold flex items-center gap-2`,children:[(0,w.jsx)(g,{size:20}),e(`nav.connectors`),(0,w.jsxs)(`span`,{className:`text-sm font-normal text-dark-muted`,children:[`· `,Z.filter(e=>e.enabled).length,`/`,Z.length]})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,w.jsx)(x,{variant:`accent`,leftIcon:(0,w.jsx)(te,{size:14}),onClick:()=>I(e=>!e),children:e(`connectors.addCustom`)}),(0,w.jsxs)(`button`,{onClick:()=>void q(),className:`flex items-center gap-2 px-3 py-1.5 bg-dark-surface border border-dark-border rounded hover:bg-dark-hover transition-colors`,children:[(0,w.jsx)(t,{size:14}),e(`common.refresh`)]})]})]}),(0,w.jsxs)(`div`,{className:`mb-4 px-3 py-2 rounded-lg bg-accent-blue/10 border border-accent-blue/20 text-xs text-dark-muted space-y-1`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-x-2 gap-y-1 flex-wrap`,children:[(0,w.jsx)(`span`,{children:e(`connectors.scopeHint`)}),(0,w.jsxs)(`button`,{type:`button`,onClick:Ne,className:`inline-flex items-center gap-1 text-accent-blue hover:underline`,children:[e(`connectors.scopeHintToolsLink`),(0,w.jsx)(l,{size:11})]})]}),(0,w.jsx)(`div`,{children:e(`connectors.builtinCardHint`)})]}),(0,w.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg space-y-3`,children:[Y?(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,w.jsx)(s,{size:16,className:`mt-0.5 shrink-0 ${Q?`text-accent-yellow`:`text-accent-green`}`}),(0,w.jsxs)(`div`,{className:`min-w-0`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,w.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.emailTitle`)}),Ge(Y),Q?(0,w.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-badge px-1.5 py-0.5 rounded bg-accent-yellow/15 text-accent-yellow`,children:[(0,w.jsx)(h,{size:9}),e(`connectors.emailNeedsSetup`)]}):null]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.emailDesc`)})]})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,w.jsxs)(`button`,{type:`button`,onClick:()=>F(Je?null:Y.id),className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta border transition-colors ${Q?`bg-accent-yellow/15 border-accent-yellow/40 text-accent-yellow hover:bg-accent-yellow/25`:`bg-dark-bg border-dark-border text-dark-muted hover:bg-dark-hover`}`,children:[(0,w.jsx)(n,{size:11}),e(Q?`connectors.emailConfigure`:`connectors.emailEditCredentials`)]}),(0,w.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":Y.enabled,disabled:!!k[Y.id],onClick:()=>ze(Y),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${Y.enabled?`bg-accent-green`:`bg-dark-border`}`,children:k[Y.id]?(0,w.jsx)(i,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,w.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${Y.enabled?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),Q?(0,w.jsxs)(`div`,{className:`mt-2 flex items-start gap-2 rounded-lg bg-accent-yellow/10 border border-accent-yellow/30 px-3 py-2`,children:[(0,w.jsx)(h,{size:13,className:`text-accent-yellow mt-0.5 shrink-0`}),(0,w.jsxs)(`div`,{className:`text-xs text-accent-yellow space-y-0.5`,children:[(0,w.jsx)(`div`,{children:e(`connectors.emailNeedsSetupHint`,{keys:qe.join(`, `)})}),(0,w.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.emailPriorityHint`)})]})]}):null,Je?Ze(Y):null,Y.supportsAccounts?(0,w.jsx)(E,{connector:Y,onRefresh:()=>void q()}):null]}):null,X.length?(0,w.jsxs)(`div`,{className:`space-y-2 ${Y?`pt-3 border-t border-dark-border`:``}`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-1.5 text-meta text-dark-muted`,children:[(0,w.jsx)(v,{size:11}),e(`connectors.featuredSetup`)]}),X.map(e=>(0,w.jsx)(`div`,{children:Qe(e,!0)},e.id))]}):null,(0,w.jsxs)(`div`,{className:`flex items-center justify-between gap-3 ${Y?`pt-3 border-t border-dark-border`:``}`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,w.jsx)(a,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`text-sm text-dark-text`,children:`Computer Use`}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:`GUI 截屏 + 鼠标键盘操控(Windows)。每次调用需审批;需要视觉模型读屏。`})]})]}),(0,w.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!z,disabled:ye,onClick:()=>void ke(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${z?`bg-accent-blue`:`bg-dark-border`}`,children:ye?(0,w.jsx)(i,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,w.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${z?`translate-x-[18px]`:`translate-x-0.5`}`})})]}),be?(0,w.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:be}):null,(0,w.jsxs)(`div`,{className:`pt-3 border-t border-dark-border space-y-2`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between gap-3`,children:[(0,w.jsxs)(`div`,{className:`min-w-0 flex items-start gap-2`,children:[(0,w.jsx)(r,{size:16,className:`text-accent-blue mt-0.5 shrink-0`}),(0,w.jsxs)(`div`,{className:`min-w-0`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,w.jsx)(`span`,{className:`text-sm text-dark-text`,children:e(`connectors.phoneTitle`)}),G?He(G):null]}),(0,w.jsx)(`div`,{className:`text-xs text-dark-muted mt-0.5`,children:e(`connectors.phoneDesc`)})]})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[(0,w.jsxs)(`button`,{type:`button`,onClick:()=>void Me(),disabled:K,className:`inline-flex items-center gap-1 px-2.5 py-1 rounded-lg text-meta bg-dark-bg border border-dark-border text-dark-muted hover:bg-dark-hover transition-colors disabled:opacity-50`,children:[K?(0,w.jsx)(i,{size:11,className:`animate-spin`}):(0,w.jsx)(f,{size:11}),e(K?`connectors.phoneChecking`:G?`connectors.phoneRecheck`:`connectors.phoneCheck`)]}),(0,w.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":!!H,disabled:Se,onClick:()=>void je(),className:`relative w-9 h-5 rounded-full transition-colors shrink-0 disabled:opacity-50 ${H?`bg-accent-blue`:`bg-dark-border`}`,children:Se?(0,w.jsx)(i,{size:12,className:`absolute start-[7px] top-[3px] animate-spin text-accent-fg`}):(0,w.jsx)(`span`,{className:`absolute top-0.5 left-0 w-4 h-4 rounded-full bg-white shadow transition-transform ${H?`translate-x-[18px]`:`translate-x-0.5`}`})})]})]}),G?(0,w.jsx)(`div`,{className:`rounded-lg border px-3 py-2 text-xs ${G.stage===`ready`?`bg-accent-green/10 border-accent-green/30 text-accent-green`:G.stage===`adb-missing`||G.stage===`adb-error`?`bg-accent-red/10 border-accent-red/30 text-accent-red`:`bg-accent-yellow/10 border-accent-yellow/30 text-accent-yellow`}`,children:(0,w.jsxs)(`div`,{className:`flex items-start gap-2`,children:[G.stage===`ready`?(0,w.jsx)(_,{size:13,className:`mt-0.5 shrink-0`}):(0,w.jsx)(h,{size:13,className:`mt-0.5 shrink-0`}),(0,w.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,w.jsx)(`div`,{children:We(G)}),Ue(G.stage)>0?(0,w.jsx)(`ol`,{className:`space-y-0.5`,children:[1,2,3,4].map(t=>{let n=Ue(G.stage),r=t===1?{env:G.envKeys.binary}:t===4?{env:G.envKeys.serial}:{};return(0,w.jsxs)(`li`,{className:`flex items-start gap-1.5 ${t===n?`text-accent-yellow`:`text-dark-muted`}`,children:[(0,w.jsx)(`span`,{className:`shrink-0 tabular-nums`,children:t===n?`▶`:t+`.`}),(0,w.jsx)(`span`,{children:e(`connectors.phoneStep${t}`,r)})]},t)})}):null,G.devices.length>0?(0,w.jsx)(`div`,{className:`text-dark-muted`,children:e(`connectors.phoneDevices`,{list:G.devices.map(e=>`${e.serial} [${e.state}]${e.model?` · ${e.model}`:``}`).join(` | `)})}):null,G.stage!==`ready`&&G.reason?(0,w.jsx)(`div`,{className:`text-dark-muted break-words opacity-80`,children:G.reason}):null]})]})}):(0,w.jsx)(`div`,{className:`text-xs text-dark-muted ps-6`,children:e(`connectors.phoneConnectHint`)}),Ce?(0,w.jsx)(`div`,{className:`text-xs text-accent-red bg-accent-red/10 border border-accent-red/30 rounded-lg px-3 py-2`,children:Ce}):null]})]}),_e?(0,w.jsxs)(`div`,{className:`mb-4 p-4 bg-dark-surface border border-dark-border rounded-lg`,children:[(0,w.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,w.jsx)(ne,{size:15,className:`text-accent-purple`}),e(`connectors.customTitle`)]}),(0,w.jsx)(`div`,{className:`flex gap-1`,children:[[`stdio`,`🖥️ `+e(`connectors.customLocal`)],[`http`,`🌐 HTTP`],[`sse`,`📡 SSE`]].map(([e,t])=>(0,w.jsx)(`button`,{onClick:()=>R(t=>({...t,transport:e})),className:`px-3 py-1.5 rounded-lg text-xs transition-colors ${L.transport===e?`bg-accent-blue text-accent-fg`:`bg-dark-bg border border-dark-border hover:bg-dark-hover`}`,children:t},e))})]}),(0,w.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customName`)}),(0,w.jsx)(`input`,{value:L.name,onChange:e=>R(t=>({...t,name:e.target.value})),placeholder:`my-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),L.transport===`stdio`?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customCommand`)}),(0,w.jsx)(`input`,{value:L.command,onChange:e=>R(t=>({...t,command:e.target.value})),placeholder:`npx -y @some/mcp-server`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customArgs`)}),(0,w.jsx)(`input`,{value:L.args,onChange:e=>R(t=>({...t,args:e.target.value})),placeholder:`--arg value`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}):(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customUrl`)}),(0,w.jsx)(`input`,{value:L.url,onChange:e=>R(t=>({...t,url:e.target.value})),placeholder:`https://mcp.example.com/mcp`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}),L.transport===`stdio`?(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customEnv`)}),(0,w.jsx)(`input`,{value:L.env,onChange:e=>R(t=>({...t,env:e.target.value})),placeholder:`KEY=value, KEY2=value2`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]}):(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`label`,{className:`block text-meta text-dark-muted mb-1`,children:e(`connectors.customHeaders`)}),(0,w.jsx)(`input`,{value:L.headers,onChange:e=>R(t=>({...t,headers:e.target.value})),placeholder:`Authorization=Bearer xxx`,className:`w-full px-3 py-1.5 bg-dark-bg border border-dark-border rounded-lg text-sm text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})]}),(0,w.jsxs)(`div`,{className:`flex gap-2 mt-3`,children:[(0,w.jsx)(x,{variant:`accent`,onClick:()=>void Ie(),loading:!!k.__add,children:e(`connectors.add`)}),(0,w.jsx)(`button`,{onClick:()=>I(!1),className:`px-3 py-1.5 bg-dark-surface border border-dark-border rounded-lg text-sm`,children:e(`common.cancel`)})]})]}):null,(0,w.jsx)(`div`,{className:`flex gap-1 mb-3`,children:[[`all`,`${e(`connectors.all`)} (${Z.length})`],[`lsp`,`LSP (${Z.filter(e=>e.kind===`lsp`).length})`],[`mcp`,`MCP (${Z.filter(e=>e.kind===`mcp`).length})`]].map(([e,t])=>(0,w.jsx)(`button`,{onClick:()=>pe(e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${P===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:t},e))}),(0,w.jsx)(`div`,{className:`flex gap-3 mb-3`,children:(0,w.jsxs)(`div`,{className:`flex-1 relative`,children:[(0,w.jsx)(f,{size:16,className:`absolute start-3 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,w.jsx)(`input`,{type:`text`,value:M,onChange:e=>de(e.target.value),placeholder:e(`connectors.searchPlaceholder`),className:`w-full ps-10 pe-4 py-2 bg-dark-surface border border-dark-border rounded-lg text-dark-text placeholder-dark-muted focus:border-accent-blue focus:outline-none`})]})}),(0,w.jsxs)(`div`,{className:`flex gap-1 mb-4 flex-wrap`,children:[(0,w.jsxs)(`button`,{onClick:()=>fe(null),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${N?`bg-dark-surface border border-dark-border hover:bg-dark-hover`:`bg-accent-blue text-accent-fg`}`,children:[e(`connectors.all`),` `,(0,w.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,$.length,`)`]})]}),Xe.map(e=>{let t=$.filter(t=>t.category===e).length;return(0,w.jsxs)(`button`,{onClick:()=>fe(N===e?null:e),className:`px-3 py-1.5 rounded-lg text-sm transition-colors ${N===e?`bg-accent-blue text-accent-fg`:`bg-dark-surface border border-dark-border hover:bg-dark-hover`}`,children:[oe[e]??e,` `,(0,w.jsxs)(`span`,{className:`opacity-70 text-xs`,children:[`(`,t,`)`]})]},e)})]}),ue?(0,w.jsx)(`div`,{className:`mb-4 px-3 py-2 bg-accent-red/10 border border-accent-red/30 rounded-lg text-accent-red text-sm`,children:ue}):null,(0,w.jsx)(`div`,{children:Ye.length===0?(0,w.jsxs)(`div`,{className:`text-center text-dark-muted text-sm py-10`,children:[(0,w.jsx)(f,{size:24,className:`mx-auto mb-2 opacity-50`}),e(`connectors.noResults`)]}):(0,w.jsx)(`div`,{className:`space-y-2`,children:Ye.map(e=>Qe(e))})})]})}export{O as ConnectorsView};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Cn as n,J as r,Ur as i,Vn as a,W as o,an as s,br as c,hn as l,p as u,vr as d,yr as f}from"./icons-BvYhTENi.js";import{t as ee}from"./react-vendor-BlngCquv.js";import{t as p}from"./useTranslation-BGmCDuQI.js";import{n as m,t as h}from"./cn-rx4uumOJ.js";import{t as g}from"./api-CCt9DRQm.js";import{I as _}from"./markdown-DAQZeY5V.js";var v=e(i(),1),y=_();function b(e){return{ts:`typescript`,tsx:`typescript`,js:`javascript`,jsx:`javascript`,py:`python`,rs:`rust`,go:`go`,rb:`ruby`,json:`json`,xml:`xml`,html:`html`,css:`css`,scss:`scss`,md:`markdown`,yaml:`yaml`,yml:`yaml`,toml:`toml`,sql:`sql`,sh:`shell`,bat:`bat`,ps1:`powershell`,dockerfile:`dockerfile`,properties:`properties`,c:`c`,cpp:`cpp`,h:`c`,hpp:`cpp`,cs:`csharp`,vue:`html`,svelte:`html`,svg:`xml`}[e.split(`.`).pop()?.toLowerCase()||``]||`plaintext`}function x(){let{t:e}=p(),[i,_]=(0,v.useState)([]),[x,S]=(0,v.useState)(null),[C,w]=(0,v.useState)(``),[T,E]=(0,v.useState)(``),[te,D]=(0,v.useState)(!1),[O,k]=(0,v.useState)(``),[A,j]=(0,v.useState)(!1),[M,N]=(0,v.useState)(!1),[P,F]=(0,v.useState)(!1),[I,L]=(0,v.useState)(``),R=(0,v.useRef)(null);(0,v.useEffect)(()=>{x?(D(!0),g.files.read(x).then(t=>{if(t.success&&t.data){let e=typeof t.data==`string`?t.data:JSON.stringify(t.data);w(e),E(e)}else m.error(t.error||e(`fileTree.readFail`))}).catch(()=>m.error(e(`fileTree.readFail`))).finally(()=>D(!1))):(w(``),E(``))},[x]);let z=async e=>{j(!0);try{let t=await g.files.list(e);t.success&&Array.isArray(t.data)&&_(t.data.map(e=>({...e,expanded:!1})))}finally{j(!1)}},B=async e=>{if(e.type===`directory`)try{let t=await g.files.list(e.path);if(t.success&&Array.isArray(t.data)){let n=t.data.map(e=>({...e,expanded:!1}));_(t=>V(t,e.id,n))}}catch{}},V=(e,t,n)=>e.map(e=>e.id===t?{...e,children:n,expanded:!0}:e.children?{...e,children:V(e.children,t,n)}:e);(0,v.useEffect)(()=>{z()},[]);let H=e=>{let t=W(i,e);t&&t.type===`directory`&&!t.children?B(t):_(t=>U(t,e))},U=(e,t)=>e.map(e=>e.id===t&&e.type===`directory`?{...e,expanded:!e.expanded}:e.children?{...e,children:U(e.children,t)}:e),W=(e,t)=>{for(let n of e){if(n.id===t)return n;if(n.children){let e=W(n.children,t);if(e)return e}}return null},G=(e,t)=>t?e.reduce((e,n)=>{if(n.name.toLowerCase().includes(t.toLowerCase()))e.push(n);else if(n.children){let r=G(n.children,t);r.length>0&&e.push({...n,children:r,expanded:!0})}return e},[]):e,K=(0,v.useCallback)(async()=>{if(x){N(!0);try{let t=await g.files.update(x,C);t.success?(E(C),m.success(e(`fileTree.saved`))):m.error(t.error||e(`fileTree.saveFail`))}catch{m.error(e(`fileTree.saveFail`))}finally{N(!1)}}},[x,C,e]),q=()=>{S(null),w(``),E(``)},J=(0,v.useCallback)(async t=>{let n=await g.files.download(t);n.success?m.success(e(`fileTree.downloadStarted`)):m.error(n.error||e(`fileTree.downloadFail`))},[e]),Y=()=>R.current?.click(),X=(0,v.useCallback)(async t=>{if(!t||t.length===0)return;let n=I||(x?x.replace(/[\\/][^\\/]+$/,``):``);F(!0);let r=0,i=0;for(let e of Array.from(t)){let t=n?`${n}/${e.name}`:e.name;(await g.files.upload(e,t)).success?r++:i++}F(!1),r>0&&m.success(e(`fileTree.uploadedCount`,{count:r})),i>0&&m.error(e(`fileTree.uploadFailedCount`,{count:i})),await z()},[I,x,e]),Z=C!==T,Q=()=>Z?typeof window>`u`||typeof window.confirm!=`function`?!1:window.confirm(e(`fileTree.discardConfirm`,{file:x||``})):!0,ne=()=>{Q()&&q()},$=(t,n=0)=>{let r=t.type===`directory`,i=x===t.path,o=I===t.path;return(0,y.jsxs)(`div`,{children:[(0,y.jsxs)(`div`,{className:`group flex items-center gap-1 px-2 py-0.5 cursor-pointer rounded text-xs transition-colors ${i?`bg-accent-blue/20 text-accent-blue`:o?`bg-accent-blue/10`:`hover:bg-dark-hover`}`,style:{paddingLeft:`${n*14+6}px`},onClick:()=>r?(L(t.path),H(t.id)):S(t.path),title:r?e(`fileTree.setUploadDirHint`):t.path,children:[r&&(0,y.jsx)(`span`,{className:`text-dark-muted shrink-0`,children:t.expanded?(0,y.jsx)(c,{size:12}):(0,y.jsx)(d,{size:12})}),r?(0,y.jsx)(l,{size:12,className:`text-accent-yellow shrink-0`}):(0,y.jsx)(`span`,{className:`w-3`}),(0,y.jsx)(`span`,{className:`truncate flex-1`,children:t.name}),!r&&(0,y.jsx)(`button`,{onClick:e=>{e.stopPropagation(),J(t.path)},className:`opacity-0 group-hover:opacity-100 p-0.5 rounded hover:bg-dark-border text-dark-muted hover:text-dark-text shrink-0`,title:e(`fileTree.download`),children:(0,y.jsx)(a,{size:11})})]}),r&&t.expanded&&t.children?.map(e=>$(e,n+1))]},t.id)},re=O?G(i,O):i;return(0,y.jsxs)(`div`,{className:`flex-1 flex overflow-hidden`,children:[(0,y.jsxs)(`div`,{className:h(`flex flex-col overflow-hidden flex-1 min-h-0`,x&&`hidden`),children:[(0,y.jsx)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-dark-border`,children:(0,y.jsxs)(`div`,{className:`flex items-center gap-0.5 ms-auto`,children:[(0,y.jsx)(`button`,{onClick:Y,disabled:P,className:`p-1 rounded hover:bg-dark-hover disabled:opacity-50`,title:I?e(`fileTree.uploadTo`,{dir:I}):e(`fileTree.uploadToRoot`),children:(0,y.jsx)(u,{size:12,className:P?`animate-pulse`:``})}),(0,y.jsx)(`button`,{onClick:()=>z(),disabled:A,className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.refresh`),children:(0,y.jsx)(t,{size:12,className:A?`animate-spin`:``})}),(0,y.jsx)(`button`,{onClick:()=>{Q()&&(_(i.map(e=>({...e,expanded:!1}))),q())},className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.collapse`),children:(0,y.jsx)(s,{size:12})})]})}),(0,y.jsx)(`div`,{className:`p-1.5 border-b border-dark-border`,children:(0,y.jsxs)(`div`,{className:`relative`,children:[(0,y.jsx)(o,{size:12,className:`absolute start-2 top-1/2 -translate-y-1/2 text-dark-muted`}),(0,y.jsx)(`input`,{type:`text`,value:O,onChange:e=>k(e.target.value),placeholder:e(`fileTree.searchPlaceholder`),className:`w-full ps-6 pe-2 py-1 text-xs bg-dark-bg border border-dark-border rounded focus:border-accent-blue focus:outline-none`})]})}),(0,y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar py-1`,children:re.map(e=>$(e))}),(0,y.jsx)(`input`,{ref:R,type:`file`,multiple:!0,className:`hidden`,onChange:e=>{X(e.target.files),e.currentTarget.value=``}})]}),(0,y.jsx)(`div`,{className:h(`flex-1 flex flex-col min-w-0 bg-dark-bg`,!x&&`hidden`),children:x?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-b border-dark-border bg-dark-surface`,children:[(0,y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs min-w-0`,children:[(0,y.jsx)(`button`,{onClick:ne,className:`p-0.5 -ms-1 rounded hover:bg-dark-hover text-dark-muted hover:text-dark-text shrink-0`,title:e(`fileTree.backToList`),"aria-label":e(`fileTree.backToList`),"data-testid":`file-tree-back`,children:(0,y.jsx)(f,{size:13})}),(0,y.jsx)(n,{size:12,className:`text-dark-muted shrink-0`}),(0,y.jsx)(`span`,{className:`truncate`,children:x}),Z&&(0,y.jsxs)(`span`,{className:`text-accent-yellow text-badge shrink-0`,children:[`● `,e(`fileTree.modified`)]})]}),(0,y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,y.jsxs)(`button`,{onClick:K,disabled:!Z||M,className:`px-2 py-0.5 text-badge rounded flex items-center gap-1 transition-colors ${Z?`bg-accent-green text-accent-fg hover:opacity-90`:`bg-dark-border text-dark-muted cursor-not-allowed`}`,children:[(0,y.jsx)(r,{size:10}),e(M?`fileTree.saving`:`fileTree.save`)]}),(0,y.jsx)(`button`,{onClick:()=>void J(x),className:`p-1 rounded hover:bg-dark-hover`,title:e(`fileTree.download`),children:(0,y.jsx)(a,{size:12})})]})]}),(0,y.jsx)(`div`,{className:`flex-1 min-h-0`,children:te?(0,y.jsx)(`div`,{className:`flex items-center justify-center h-full`,children:(0,y.jsx)(`div`,{className:`w-4 h-4 border-2 border-accent-blue border-t-transparent rounded-full animate-spin`})}):(0,y.jsx)(ee,{language:b(x),value:C,onChange:e=>w(e||``),theme:`vs-dark`,options:{fontSize:13,fontFamily:`"Cascadia Code", "Fira Code", Consolas, monospace`,minimap:{enabled:!0,renderCharacters:!1,maxColumn:80,showSlider:`mouseover`},lineNumbers:`on`,scrollBeyondLastLine:!1,wordWrap:`on`,automaticLayout:!0,tabSize:2}})})]}):(0,y.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,y.jsxs)(`div`,{className:`text-center`,children:[(0,y.jsx)(n,{size:32,className:`text-dark-muted mx-auto mb-2`}),(0,y.jsx)(`p`,{className:`text-sm text-dark-muted`,children:e(`fileTree.selectFileHint`)})]})})})]})}export{x as FileTreeView};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,D as n,K as r,Kt as i,O as a,T as o,Ur as s,Vn as c,_ as l,ct as u,g as d,n as f,ot as p,p as m,pt as h,v as g,vr as _,yr as v,z as y}from"./icons-BvYhTENi.js";import{t as b}from"./useTranslation-BGmCDuQI.js";import{n as x}from"./state-_ZfNVAsd.js";import{t as S}from"./api-CCt9DRQm.js";import{I as C}from"./markdown-DAQZeY5V.js";import{A as w,j as T}from"./common-BHXgEvgk.js";var E=e(s(),1),D=x((e,t)=>({rules:[],templates:[],stats:null,events:[],agents:[],loading:!1,error:null,fieldErrors:null,formOpen:!1,editingRule:null,draftRule:null,dryRunResult:null,loadRules:async()=>{let t=await S.hooks.list();t.success&&Array.isArray(t.data)?e({rules:t.data}):t.success&&t.data&&!Array.isArray(t.data)?e({error:`服务端返回的规则数据格式异常`}):e({error:t.error||`Failed to load rules`})},loadTemplates:async()=>{let t=await S.hooks.templates();t.success&&Array.isArray(t.data)?e({templates:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的模板数据格式异常`})},loadStats:async()=>{let t=await S.hooks.stats();t.success&&t.data&&e({stats:t.data})},loadEvents:async()=>{let t=await S.hooks.events();t.success&&Array.isArray(t.data)?e({events:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的事件数据格式异常`})},loadAgents:async()=>{let t=await S.hooks.agents();t.success&&Array.isArray(t.data)?e({agents:t.data}):t.success&&t.data&&!Array.isArray(t.data)&&e({error:`服务端返回的Agent数据格式异常`})},loadAll:async()=>{e({loading:!0,error:null});try{await Promise.all([t().loadRules(),t().loadTemplates(),t().loadStats(),t().loadEvents(),t().loadAgents()])}catch(t){e({error:String(t)})}finally{e({loading:!1})}},createRule:async n=>{e({fieldErrors:null});let r=await S.hooks.create(n);if(r.success)return await t().loadRules(),await t().loadStats(),e({formOpen:!1,editingRule:null}),!0;if(r.error){e({error:r.error});try{let t=JSON.parse(r.error);t.fieldErrors&&e({fieldErrors:t.fieldErrors})}catch{}}return!1},updateRule:async(n,r)=>{e({fieldErrors:null});let i=await S.hooks.update(n,r);return i.success?(await t().loadRules(),e({formOpen:!1,editingRule:null}),!0):(e({error:i.error||`Update failed`}),!1)},deleteRule:async n=>{let r=await S.hooks.delete(n);return r.success?(await t().loadRules(),await t().loadStats(),!0):(e({error:r.error||`Delete failed`}),!1)},batchDelete:async n=>{let r=await S.hooks.batchDelete(n);return r.success?(await t().loadRules(),await t().loadStats(),!0):(e({error:r.error||`Batch delete failed`}),!1)},toggleRule:async(n,r)=>(await S.hooks.toggle(n,r)).success?(e(e=>({rules:e.rules.map(e=>e.name===n?{...e,enabled:r}:e)})),!0):(await t().loadRules(),!1),batchToggle:async(n,r)=>(await S.hooks.batchToggle(n,r)).success?(e(e=>({rules:e.rules.map(e=>n.includes(e.name)?{...e,enabled:r}:e)})),!0):(await t().loadRules(),!1),dryRun:async t=>{let n=await S.hooks.dryRun(t);return n.success&&n.data?(e({dryRunResult:n.data}),n.data):(e({error:n.error||`Dry-run failed`}),null)},openForm:t=>e({formOpen:!0,editingRule:t||null,draftRule:null,dryRunResult:null,fieldErrors:null}),openFormFromTemplate:(t,n)=>e({formOpen:!0,editingRule:null,draftRule:{...t.rule,description:n||t.rule.description},dryRunResult:null,fieldErrors:null}),closeForm:()=>e({formOpen:!1,editingRule:null,draftRule:null,dryRunResult:null,fieldErrors:null}),setDryRunResult:t=>e({dryRunResult:t}),clearError:()=>e({error:null}),clearFieldErrors:()=>e({fieldErrors:null})})),O=C(),k={SYSTEM:`bg-accent-red/15 text-accent-red`,SECURITY:`bg-accent-orange/15 text-accent-orange`,PROJECT:`bg-accent-blue/15 text-accent-blue`,USER:`bg-accent-green/15 text-accent-green`,PLUGIN:`bg-accent-purple/15 text-accent-purple`},A={SHELL:`bg-accent-yellow/15 text-accent-yellow`,HTTP:`bg-accent-cyan/15 text-accent-cyan`,PROMPT:`bg-accent-purple/15 text-accent-purple`,AGENT:`bg-accent-blue/15 text-accent-blue`};function j({rules:e,onEdit:t}){let{t:r}=b(),{toggleRule:i,deleteRule:a,batchDelete:s,batchToggle:c}=D(),[l,u]=(0,E.useState)(new Set),[f,p]=(0,E.useState)(!1),m=Array.isArray(e)?e:[];if(m.length===0)return(0,O.jsxs)(`div`,{className:`flex flex-1 flex-col items-center justify-center gap-3 py-16 text-dark-muted`,children:[(0,O.jsx)(`div`,{className:`text-4xl opacity-60`,children:`🪝`}),(0,O.jsx)(`p`,{className:`text-sm`,children:r(`hook.noRules`)}),(0,O.jsx)(`p`,{className:`text-xs text-dark-muted/70`,children:r(`hook.noRulesHint`)})]});let g=e=>{let t=new Set(l);t.has(e)?t.delete(e):t.add(e),u(t),p(t.size===m.length)},_=()=>{f?(u(new Set),p(!1)):(u(new Set(m.map(e=>e.name))),p(!0))},v=()=>{l.size!==0&&confirm(r(`hook.batchDeleteConfirm`,{n:l.size}))&&(s(Array.from(l)),u(new Set),p(!1))},y=e=>{l.size!==0&&(c(Array.from(l),e),u(new Set),p(!1))};return(0,O.jsxs)(`div`,{className:`flex flex-1 flex-col min-h-0`,children:[l.size>0&&(0,O.jsxs)(`div`,{className:`mb-2 flex items-center gap-2 rounded-lg border border-accent-blue/30 bg-accent-blue/5 px-3 py-1.5 text-sm`,children:[(0,O.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.selectedItems`,{n:l.size})}),(0,O.jsx)(`button`,{onClick:()=>y(!0),className:`rounded bg-accent-green/15 px-2 py-0.5 text-accent-green transition-colors hover:bg-accent-green/25`,children:r(`hook.enableAll`)}),(0,O.jsx)(`button`,{onClick:()=>y(!1),className:`rounded bg-dark-hover px-2 py-0.5 text-dark-text transition-colors hover:bg-dark-border`,children:r(`hook.disableAll`)}),(0,O.jsx)(`button`,{onClick:v,className:`rounded bg-accent-red/15 px-2 py-0.5 text-accent-red transition-colors hover:bg-accent-red/25`,children:r(`common.delete`)})]}),(0,O.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto custom-scrollbar rounded-xl border border-dark-border`,children:(0,O.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,O.jsx)(`thead`,{className:`sticky top-0 bg-dark-hover text-dark-muted`,children:(0,O.jsxs)(`tr`,{children:[(0,O.jsx)(`th`,{className:`w-8 p-2.5`,children:(0,O.jsx)(`button`,{onClick:_,children:f?(0,O.jsx)(n,{size:14}):(0,O.jsx)(o,{size:14})})}),(0,O.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:r(`hook.colName`)}),(0,O.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:r(`hook.colEvents`)}),(0,O.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:r(`hook.colType`)}),(0,O.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:r(`hook.fieldPriority`)}),(0,O.jsx)(`th`,{className:`p-2.5 text-start font-medium`,children:r(`hook.colStatus`)}),(0,O.jsx)(`th`,{className:`p-2.5 text-end font-medium`,children:r(`hook.colActions`)})]})}),(0,O.jsx)(`tbody`,{className:`divide-y divide-dark-border`,children:m.map(e=>(0,O.jsxs)(`tr`,{className:`transition-colors hover:bg-dark-hover/50`,children:[(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsx)(`button`,{onClick:()=>g(e.name),children:l.has(e.name)?(0,O.jsx)(n,{size:14,className:`text-accent-blue`}):(0,O.jsx)(o,{size:14,className:`text-dark-muted`})})}),(0,O.jsxs)(`td`,{className:`p-2.5`,children:[(0,O.jsx)(`div`,{className:`font-medium text-dark-text`,children:e.name}),e.description&&(0,O.jsx)(`div`,{className:`mt-0.5 max-w-[220px] truncate text-xs text-dark-muted`,children:e.description})]}),(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[Array.isArray(e.events)&&e.events.slice(0,3).map(e=>(0,O.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5 text-xs text-dark-text`,children:e},e)),Array.isArray(e.events)&&e.events.length>3&&(0,O.jsxs)(`span`,{className:`px-1 py-0.5 text-xs text-dark-muted`,children:[`+`,e.events.length-3]})]})}),(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-xs font-medium ${A[e.implementationType]||`bg-dark-hover text-dark-muted`}`,children:e.implementationType})}),(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-xs font-medium ${k[e.priority]||`bg-dark-hover text-dark-muted`}`,children:e.priority})}),(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsx)(`button`,{onClick:()=>i(e.name,!e.enabled),className:`relative h-5 w-9 rounded-full transition-colors ${e.enabled?`bg-accent-green`:`bg-dark-border`}`,title:e.enabled?r(`hook.clickToDisable`):r(`hook.clickToEnable`),children:(0,O.jsx)(`span`,{className:`absolute top-0.5 block h-3.5 w-3.5 rounded-full bg-white transition-all ${e.enabled?`start-[18px]`:`start-[2px]`}`})})}),(0,O.jsx)(`td`,{className:`p-2.5`,children:(0,O.jsxs)(`div`,{className:`flex items-center justify-end gap-1`,children:[(0,O.jsx)(`button`,{onClick:()=>t(e),className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:r(`hook.actionEdit`),children:(0,O.jsx)(h,{size:14})}),(0,O.jsx)(`button`,{onClick:()=>{confirm(r(`hook.deleteRuleConfirm`,{name:e.name}))&&a(e.name)},className:`rounded p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:r(`common.delete`),children:(0,O.jsx)(d,{size:14})})]})})]},e.name))})]})})]})}var M={name:``,description:``,events:[],implementationType:`SHELL`,command:``,url:``,promptTemplate:``,agentName:``,priority:`USER`,tools:[],matcherToolNamePattern:``,matcherFromState:``,matcherToState:``,timeoutMs:3e4,enabled:!0,failOpen:!0,onFailure:`fail-open`,scope:`project`},N=[{value:`SYSTEM`,label:`SYSTEM (100)`},{value:`SECURITY`,label:`SECURITY (80)`},{value:`PROJECT`,label:`PROJECT (60)`},{value:`USER`,label:`USER (40)`},{value:`PLUGIN`,label:`PLUGIN (20)`}],P=e=>`w-full rounded-lg border bg-dark-bg px-3 py-2 text-sm text-dark-text placeholder-dark-muted/60 transition-colors focus:outline-none focus:ring-2 ${e?`border-accent-red focus:border-accent-red focus:ring-accent-red/20`:`border-dark-border focus:border-accent-blue focus:ring-accent-blue/20`}`,F=`mb-1 block text-xs font-medium text-dark-muted`;function I({isOpen:e,events:t,agents:n}){let{t:r}=b(),{editingRule:i,draftRule:a,fieldErrors:o,dryRunResult:s,createRule:c,updateRule:l,closeForm:d,dryRun:p,setDryRunResult:m,clearFieldErrors:h}=D(),{visible:g,phase:y}=T(e),x=[{value:`SHELL`,label:r(`hook.implShell`),desc:r(`hook.implShellDesc`)},{value:`HTTP`,label:r(`hook.implHttp`),desc:r(`hook.implHttpDesc`)},{value:`PROMPT`,label:`LLM Prompt`,desc:r(`hook.implPromptDesc`)},{value:`AGENT`,label:`AI Agent`,desc:r(`hook.implAgentDesc`)}],S=Array.isArray(t)?t:[],C=Array.isArray(n)?n:[],[k,A]=(0,E.useState)(0),[j,I]=(0,E.useState)(M),[L,R]=(0,E.useState)(``),z=i??a;(0,E.useEffect)(()=>{e&&(A(0),R(``),I(z?{name:z.name,description:z.description||``,events:z.events,implementationType:z.implementationType,command:z.command||``,url:z.url||``,promptTemplate:z.promptTemplate||``,agentName:z.agentName||``,priority:z.priority,tools:z.tools||[],matcherToolNamePattern:z.matchers?.toolNamePattern||``,matcherFromState:z.matchers?.fromState||``,matcherToState:z.matchers?.toState||``,timeoutMs:z.timeoutMs,enabled:z.enabled,failOpen:z.failOpen,onFailure:z.onFailure||(z.failOpen?`fail-open`:`block`),scope:z.scope||`project`}:M))},[e,z]);let B=(e,t)=>{I(n=>({...n,[e]:t})),h()},V=e=>{I(t=>({...t,events:t.events.includes(e)?t.events.filter(t=>t!==e):[...t.events,e]}))},H=e=>{e.every(e=>j.events.includes(e))?I(t=>({...t,events:t.events.filter(t=>!e.includes(t))})):I(t=>({...t,events:[...new Set([...t.events,...e])]}))},U=async()=>{let e={};j.matcherToolNamePattern&&(e.toolNamePattern=j.matcherToolNamePattern),j.matcherFromState&&(e.fromState=j.matcherFromState),j.matcherToState&&(e.toState=j.matcherToState);let t={...j,tools:j.tools.length>0?j.tools:[]};t.matchers=e,delete t.matcherToolNamePattern,delete t.matcherFromState,delete t.matcherToState,i?await l(i.name,t):await c(t)},W=async()=>{m(null);let e={};j.matcherToolNamePattern&&(e.toolNamePattern=j.matcherToolNamePattern),await p({hook:{name:j.name||`dry-run`,description:j.description,events:j.events,implementationType:j.implementationType,command:j.command,url:j.url,promptTemplate:j.promptTemplate,agentName:j.agentName,priority:j.priority,tools:j.tools,matchers:e,timeoutMs:j.timeoutMs,enabled:!0,failOpen:j.failOpen,onFailure:j.onFailure,scope:j.scope},eventType:j.events[0]||`PRE_TOOL_USE`,toolName:``,toolInput:``})},G=L?S.map(e=>({...e,events:Array.isArray(e.events)?e.events.filter(e=>e.name.toLowerCase().includes(L.toLowerCase())||e.summary.includes(L)):[]})).filter(e=>e.events.length>0):S,K=[{title:r(`hook.stepBasicTitle`),desc:r(`hook.stepBasicDesc`)},{title:r(`hook.stepImplTitle`),desc:r(`hook.stepImplDesc`)},{title:r(`hook.stepAdvancedTitle`),desc:r(`hook.stepAdvancedDesc`)}];return g?(0,O.jsxs)(`div`,{className:`fixed inset-0 z-50 flex justify-end`,children:[(0,O.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":y,onClick:d}),(0,O.jsxs)(`div`,{className:`relative flex h-full w-[560px] flex-col border-s border-dark-border bg-dark-bg shadow-2xl ui-overlay-panel-edge`,"data-phase":y,children:[(0,O.jsxs)(`div`,{className:`flex flex-shrink-0 items-center justify-between border-b border-dark-border px-4 py-3.5`,children:[(0,O.jsx)(`h3`,{className:`text-base font-semibold text-dark-text`,children:i?r(`hook.editRule`,{name:i.name}):r(`hook.addRule`)}),(0,O.jsx)(`button`,{onClick:d,className:`rounded-lg p-1 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,children:(0,O.jsx)(f,{size:18})})]}),(0,O.jsx)(`div`,{className:`flex flex-shrink-0 border-b border-dark-border`,children:K.map((e,t)=>{let n=t===k,r=t<k;return(0,O.jsxs)(`button`,{onClick:()=>A(t),className:`relative flex-1 border-b-2 px-2 py-2.5 text-center text-xs transition-colors ${n?`border-accent-blue bg-accent-blue/5 text-accent-blue`:r?`border-transparent text-dark-text`:`border-transparent text-dark-muted hover:text-dark-text`}`,children:[(0,O.jsx)(`span`,{className:`me-1 inline-flex h-4 w-4 items-center justify-center rounded-full text-badge ${n?`bg-accent-blue text-accent-fg`:r?`bg-accent-green text-accent-fg`:`bg-dark-hover text-dark-muted`}`,children:r?`✓`:t+1}),(0,O.jsx)(`span`,{className:`font-medium`,children:e.title})]},e.title)})}),(0,O.jsxs)(`div`,{className:`flex-1 min-h-0 space-y-4 overflow-auto custom-scrollbar p-4`,children:[o&&Object.keys(o).length>0&&(0,O.jsx)(`div`,{className:`rounded-lg border border-accent-red/40 bg-accent-red/10 p-2.5 text-xs text-accent-red`,children:Object.entries(o).map(([e,t])=>(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`strong`,{children:[e,`:`]}),` `,t]},e))}),k===0&&(0,O.jsxs)(`div`,{className:`space-y-4`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldName`)}),(0,O.jsx)(`input`,{value:j.name,onChange:e=>B(`name`,e.target.value),placeholder:`my-custom-hook`,className:P(o?.name)})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldDescription`)}),(0,O.jsx)(`textarea`,{value:j.description,onChange:e=>B(`description`,e.target.value),placeholder:r(`hook.descriptionPlaceholder`),rows:2,className:P()})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:`Scope`}),(0,O.jsxs)(`select`,{value:j.scope,onChange:e=>B(`scope`,e.target.value),className:P(),children:[(0,O.jsx)(`option`,{value:`project`,children:`project (.agent/hooks.json)`}),(0,O.jsx)(`option`,{value:`user`,children:`user (~/.agent/hooks.json)`}),(0,O.jsx)(`option`,{value:`local`,children:`local (.agent/hooks.local.json)`})]})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`div`,{className:`mb-1 flex items-center justify-between`,children:[(0,O.jsx)(`label`,{className:`text-xs font-medium text-dark-muted`,children:r(`hook.fieldEvents`)}),(0,O.jsx)(`span`,{className:`text-xs text-accent-blue`,children:r(`hook.eventsSelected`,{n:j.events.length})})]}),(0,O.jsx)(`input`,{value:L,onChange:e=>R(e.target.value),placeholder:r(`hook.searchEventsPlaceholder`),className:P()+` mb-2`}),(0,O.jsx)(`div`,{className:`max-h-[280px] space-y-2 overflow-auto custom-scrollbar rounded-lg border border-dark-border bg-dark-surface p-2`,children:G.map(e=>(0,O.jsxs)(`div`,{children:[(0,O.jsxs)(`button`,{onClick:()=>H(e.events.map(e=>e.name)),className:`mb-1 text-xs font-medium text-dark-muted transition-colors hover:text-dark-text`,children:[e.category,` — `,r(`hook.toggleAllEvents`)]}),e.events.map(e=>{let t=j.events.includes(e.name);return(0,O.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-1 py-1 transition-colors hover:bg-dark-hover`,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>V(e.name),className:`h-3.5 w-3.5 accent-accent-blue`}),(0,O.jsx)(`span`,{className:`text-xs text-dark-text`,children:e.name}),(0,O.jsxs)(`span`,{className:`truncate text-xs text-dark-muted`,children:[`— `,e.summary]})]},e.name)})]},e.category))})]})]}),k===1&&(0,O.jsxs)(`div`,{className:`space-y-4`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldImplType`)}),(0,O.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:x.map(e=>{let t=j.implementationType===e.value;return(0,O.jsxs)(`button`,{onClick:()=>B(`implementationType`,e.value),className:`rounded-lg border p-3 text-start transition-colors ${t?`border-accent-blue bg-accent-blue/10 ring-1 ring-accent-blue/30`:`border-dark-border bg-dark-surface hover:bg-dark-hover`}`,children:[(0,O.jsx)(`div`,{className:`text-sm font-medium ${t?`text-accent-blue`:`text-dark-text`}`,children:e.label}),(0,O.jsx)(`div`,{className:`mt-1 text-xs text-dark-muted`,children:e.desc})]},e.value)})})]}),j.implementationType===`SHELL`&&(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldCommand`)}),(0,O.jsx)(`input`,{value:j.command,onChange:e=>B(`command`,e.target.value),placeholder:`python3 .agent/hooks/audit.py`,className:`font-mono ${P(o?.command)}`})]}),j.implementationType===`HTTP`&&(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:`URL *`}),(0,O.jsx)(`input`,{value:j.url,onChange:e=>B(`url`,e.target.value),placeholder:`https://example.com/hooks/audit`,className:P(o?.url)})]}),j.implementationType===`PROMPT`&&(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldPromptTemplate`)}),(0,O.jsx)(`textarea`,{value:j.promptTemplate,onChange:e=>B(`promptTemplate`,e.target.value),placeholder:r(`hook.promptTemplatePlaceholder`),rows:5,className:`font-mono ${P(o?.promptTemplate)}`})]}),j.implementationType===`AGENT`&&(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:`Agent *`}),(0,O.jsxs)(`select`,{value:j.agentName,onChange:e=>B(`agentName`,e.target.value),className:P(o?.agentName),children:[(0,O.jsx)(`option`,{value:``,children:r(`hook.selectAgentPlaceholder`)}),C.map(e=>(0,O.jsxs)(`option`,{value:e.id,children:[e.name,` (`,e.description,`)`]},e.id))]}),(0,O.jsx)(`p`,{className:`mt-1 text-xs text-dark-muted`,children:r(`hook.agentReadOnlyHint`)})]})]}),k===2&&(0,O.jsxs)(`div`,{className:`space-y-4`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldPriority`)}),(0,O.jsx)(`select`,{value:j.priority,onChange:e=>B(`priority`,e.target.value),className:P(),children:N.map(e=>(0,O.jsx)(`option`,{value:e.value,children:e.label},e.value))})]}),(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldTimeout`)}),(0,O.jsx)(`input`,{type:`number`,value:j.timeoutMs,onChange:e=>B(`timeoutMs`,parseInt(e.target.value)||3e4),min:100,max:3e5,step:1e3,className:P()})]}),(0,O.jsxs)(`div`,{className:`flex flex-col gap-2.5`,children:[(0,O.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:j.enabled,onChange:e=>B(`enabled`,e.target.checked),className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.labelEnabled`)]}),(0,O.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:j.failOpen,onChange:e=>B(`failOpen`,e.target.checked),className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.failOpenLabel`)]}),(0,O.jsxs)(`label`,{className:`flex items-center gap-2 text-sm text-dark-text`,title:r(`hook.onFailureHint`),children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:j.onFailure===`block`,onChange:e=>{let t=e.target.checked;I(e=>({...e,onFailure:t?`block`:`fail-open`,failOpen:!t&&e.failOpen})),h()},className:`h-3.5 w-3.5 accent-accent-blue`}),r(`hook.onFailureLabel`)]})]})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:r(`hook.fieldToolFilter`)}),(0,O.jsx)(`input`,{value:j.matcherToolNamePattern,onChange:e=>B(`matcherToolNamePattern`,e.target.value),placeholder:`Bash.*|FileWrite.*`,className:`font-mono ${P()}`})]}),j.events.some(e=>e.includes(`STATE`))&&(0,O.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:`From State`}),(0,O.jsx)(`input`,{value:j.matcherFromState,onChange:e=>B(`matcherFromState`,e.target.value),className:P()})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`label`,{className:F,children:`To State`}),(0,O.jsx)(`input`,{value:j.matcherToState,onChange:e=>B(`matcherToState`,e.target.value),className:P()})]})]}),s&&(0,O.jsxs)(`div`,{className:`rounded-lg border border-dark-border bg-dark-surface p-3`,children:[(0,O.jsx)(`div`,{className:`mb-2 text-xs font-medium text-dark-text`,children:r(`hook.dryRunResultTitle`)}),(0,O.jsxs)(`div`,{className:`space-y-1 text-xs`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunDecision`)}),(0,O.jsx)(`span`,{className:s.decision===`ALLOW`?`text-accent-green`:s.decision===`DENY`?`text-accent-red`:`text-accent-yellow`,children:s.decision})]}),(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunReason`)}),(0,O.jsx)(`span`,{className:`text-dark-text`,children:s.reason})]}),s.contextOutput&&(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`span`,{className:`text-dark-muted`,children:r(`hook.dryRunOutput`)}),(0,O.jsx)(`span`,{className:`text-dark-text`,children:s.contextOutput})]})]})]}),(0,O.jsxs)(`button`,{onClick:W,className:`inline-flex items-center gap-1.5 rounded-lg border border-dark-border bg-dark-surface px-3 py-1.5 text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,O.jsx)(u,{size:12}),` `,r(`hook.dryRunButton`)]})]})]}),(0,O.jsxs)(`div`,{className:`flex flex-shrink-0 items-center justify-between border-t border-dark-border px-4 py-3`,children:[(0,O.jsx)(`div`,{className:`flex gap-2`,children:k>0&&(0,O.jsx)(w,{size:`sm`,onClick:()=>A(k-1),leftIcon:(0,O.jsx)(v,{size:14}),children:r(`hook.prevStep`)})}),(0,O.jsxs)(`div`,{className:`flex gap-2`,children:[(0,O.jsx)(w,{size:`sm`,onClick:d,children:r(`common.cancel`)}),k<2?(0,O.jsx)(w,{size:`sm`,variant:`accent`,onClick:()=>A(k+1),rightIcon:(0,O.jsx)(_,{size:14}),children:r(`hook.nextStep`)}):(0,O.jsx)(w,{size:`sm`,variant:`accent`,onClick:U,children:r(i?`hook.saveChanges`:`hook.createRule`)})]})]})]})]}):null}function L({stats:e}){let{t}=b();if(!e)return null;let n=[{id:`total`,label:t(`hook.statTotal`),value:e.totalHooks,icon:i,iconWrap:`bg-accent-blue/15 text-accent-blue`},{id:`enabled`,label:t(`common.enabled`),value:e.enabledCount,icon:l,iconWrap:`bg-accent-green/15 text-accent-green`},{id:`disabled`,label:t(`common.disabled`),value:e.disabledCount,icon:g,iconWrap:`bg-dark-hover text-dark-muted`}];return(0,O.jsx)(`div`,{className:`grid grid-cols-3 gap-3`,children:n.map(e=>{let t=e.icon;return(0,O.jsxs)(`div`,{className:`flex items-center gap-3 rounded-xl border border-dark-border bg-dark-surface px-4 py-3`,children:[(0,O.jsx)(`span`,{className:`flex h-9 w-9 shrink-0 items-center justify-center rounded-lg ${e.iconWrap}`,children:(0,O.jsx)(t,{size:18})}),(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`div`,{className:`text-xl font-bold text-dark-text`,children:e.value}),(0,O.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e.label})]})]},e.id)})})}var R={safety:{Icon:y,cls:`text-accent-red`},quality:{Icon:a,cls:`text-accent-blue`},audit:{Icon:r,cls:`text-accent-purple`}},z={Icon:r,cls:`text-dark-muted`};function B({templates:e,existingNames:t,onPick:n}){let{t:r}=b(),i=Array.isArray(e)?e:[];if(i.length===0)return null;let a=new Set(t);return(0,O.jsxs)(`section`,{className:`mt-4 min-w-0 rounded-xl border border-dark-border bg-dark-surface p-4`,children:[(0,O.jsxs)(`div`,{className:`mb-3`,children:[(0,O.jsx)(`h3`,{className:`text-sm font-semibold text-dark-text`,children:r(`hook.templatesTitle`)}),(0,O.jsx)(`p`,{className:`mt-0.5 text-xs text-dark-muted`,children:r(`hook.templatesDesc`)})]}),(0,O.jsx)(`div`,{className:`grid grid-cols-1 gap-2 md:grid-cols-2 xl:grid-cols-3`,children:i.map(e=>{let{Icon:t,cls:i}=R[e.category]??z,o=r(`hook.template.${e.id}.title`),s=r(`hook.template.${e.id}.desc`),c=a.has(e.id);return(0,O.jsxs)(`button`,{type:`button`,onClick:()=>n(e),className:`group rounded-lg border border-dark-border bg-dark-bg p-3 text-start transition-colors hover:border-accent-blue/40 hover:bg-dark-hover`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,O.jsx)(t,{size:13,className:i}),(0,O.jsx)(`span`,{className:`text-meta uppercase tracking-wider text-dark-muted`,children:r(`hook.templateCategory.${e.category}`)}),c&&(0,O.jsx)(`span`,{className:`ms-auto rounded bg-dark-raised px-1.5 text-badge text-dark-muted`,children:r(`hook.templateExists`)})]}),(0,O.jsx)(`div`,{className:`mt-1 text-sm font-medium text-dark-text`,children:o}),(0,O.jsx)(`p`,{className:`mt-1 line-clamp-2 text-xs leading-relaxed text-dark-muted`,children:s}),(0,O.jsx)(`div`,{className:`mt-2 text-xs text-accent-blue opacity-0 transition-opacity group-hover:opacity-100`,children:r(`hook.templateUse`)})]},e.id)})})]})}function V(){let{t:e}=b(),{rules:n,templates:r,stats:i,events:a,agents:o,loading:s,error:l,formOpen:u,loadAll:d,openForm:h,openFormFromTemplate:g,clearError:_}=D();(0,E.useEffect)(()=>{d()},[]);let v=(0,E.useCallback)(async()=>{let e=await S.hooks.export();if(e.success&&e.data){let t=new Blob([JSON.stringify(e.data,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`hooks-export.json`,r.click(),URL.revokeObjectURL(n)}},[]),y=(0,E.useCallback)(()=>{let t=document.createElement(`input`);t.type=`file`,t.accept=`.json`,t.onchange=async t=>{let n=t.target.files?.[0];if(!n)return;let r=await n.text();try{let t=JSON.parse(r),n=confirm(e(`hook.importMergeConfirm`))?`merge`:`replace`;(await S.hooks.import({...t,mergeMode:n})).success&&d()}catch(e){console.error(`Import failed:`,e)}},t.click()},[d,e]);return(0,O.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-dark-bg text-dark-text`,children:[(0,O.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-3 border-b border-dark-border px-6 py-4`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`h2`,{className:`text-base font-semibold text-dark-text`,children:e(`hook.configTitle`)}),(0,O.jsx)(`p`,{className:`mt-0.5 text-xs text-dark-muted`,children:e(`hook.configDesc`)})]}),(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(`button`,{onClick:d,title:e(`common.refresh`),className:`rounded-lg p-2 text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,children:(0,O.jsx)(t,{size:16,className:s?`animate-spin`:``})}),(0,O.jsx)(w,{onClick:y,leftIcon:(0,O.jsx)(m,{size:14}),children:e(`hook.import`)}),(0,O.jsx)(w,{onClick:v,leftIcon:(0,O.jsx)(c,{size:14}),children:e(`hook.export`)}),(0,O.jsx)(w,{variant:`accent`,onClick:()=>h(),leftIcon:(0,O.jsx)(p,{size:14}),children:e(`hook.newRule`)})]})]}),(0,O.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-auto custom-scrollbar px-6 py-4`,children:[l&&(0,O.jsxs)(`div`,{className:`mb-3 flex items-center justify-between rounded-lg border border-accent-red/40 bg-accent-red/10 px-4 py-2 text-sm text-accent-red`,children:[(0,O.jsx)(`span`,{children:l}),(0,O.jsx)(`button`,{onClick:_,className:`text-accent-red/70 transition-colors hover:text-accent-red`,children:(0,O.jsx)(f,{size:16})})]}),(0,O.jsx)(L,{stats:i}),(0,O.jsx)(B,{templates:r,existingNames:n.map(e=>e.name),onPick:t=>g(t,e(`hook.template.${t.id}.desc`))}),(0,O.jsxs)(`section`,{className:`mt-4 min-w-0 rounded-xl border border-dark-border bg-dark-surface p-4`,children:[(0,O.jsxs)(`div`,{className:`mb-3 flex items-center justify-between`,children:[(0,O.jsx)(`h3`,{className:`text-sm font-semibold text-dark-text`,children:e(`hook.ruleList`)}),(0,O.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e(`hook.ruleCount`,{n:n.length})})]}),s&&n.length===0?(0,O.jsx)(`div`,{className:`flex h-[520px] items-center justify-center text-dark-muted`,children:e(`common.loading`)}):(0,O.jsx)(`div`,{className:`min-h-[520px]`,children:(0,O.jsx)(j,{rules:n,onEdit:e=>h(e)})})]})]}),(0,O.jsx)(I,{isOpen:u,events:a,agents:o})]})}export{V as HookConfigView};
@@ -0,0 +1,14 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Br as n,Bt as r,Cn as i,Cr as a,Dn as o,En as s,Fr as c,Gn as l,Ir as u,Jn as d,Nn as f,O as p,Ot as m,Rn as h,Rr as g,Rt as _,T as v,Tt as y,Ur as b,Ut as x,W as S,_r as C,an as w,br as T,ct as E,er as D,ft as O,g as k,gt as ee,hn as A,ht as te,kt as ne,lt as re,mn as ie,n as ae,ot as j,t as M,u as oe,vn as N,vr as P,xr as se,zt as F}from"./icons-BvYhTENi.js";import{r as I}from"./react-vendor-BlngCquv.js";import{t as L}from"./useTranslation-BGmCDuQI.js";import{S as ce,f as le,l as R,o as ue,s as de}from"./ttsSettings-DHo3OsOq.js";import{n as z,t as B}from"./cn-rx4uumOJ.js";import"./src-49LUQhkG.js";import{a as fe,f as pe,n as me,r as he}from"./workspaceSemantics-RaIRer76.js";import{C as V,St as H,_t as ge,bt as U,ft as W,n as _e,pt as ve,r as ye,t as be,vt as xe,xt as G,yt as Se}from"./MessageBubble-CV16DZMG.js";import{a as Ce,i as we,n as Te,o as Ee,r as De,s as Oe,t as ke}from"./sttLanguages-aqoVC79g.js";import{r as Ae,t as je}from"./settingsStore-RLUAWgIk.js";import{r as Me,t as K}from"./api-CCt9DRQm.js";import{I as Ne}from"./markdown-DAQZeY5V.js";import{A as Pe,C as Fe,E as Ie,T as Le,c as Re,h as ze,j as Be,w as Ve}from"./common-BHXgEvgk.js";import{G as He,H as Ue,V as We,a as Ge,c as Ke,l as qe,n as Je,o as q,r as Ye,s as Xe}from"./index-BX-d2OBW.js";var Ze=/\[Pasted text #(\d+)(?:\s*\+\d+ lines?)?\]/g,Qe=0,$e=new Map;function et(e){let t=++Qe;return $e.set(t,e.replace(/\r\n?/g,`
2
+ `)),t}function tt(e){return $e.get(e)}function nt(e){$e.delete(e)}function rt(e){return e.length>800||it(e)>0}function it(e){return(e.match(/\r\n|\r|\n/g)||[]).length}function at(e){let t=et(e),n=it(e);return n===0?{id:t,label:`[Pasted text #${t}]`}:{id:t,label:`[Pasted text #${t} +${n} lines]`}}function ot(e){return Ze.lastIndex=0,e.replace(Ze,(e,t)=>{let n=parseInt(t,10),r=$e.get(n);return r===void 0?e:r})}function st(e){Ze.lastIndex=0;let t=[],n;for(;(n=Ze.exec(e))!==null;){let e=n[1];e!==void 0&&t.push(parseInt(e,10))}return Ze.lastIndex=0,t}function ct(e){for(let t of e)$e.delete(t)}function lt(e){let t=e.match(/\[Pasted text #\d+(?:\s*\+\d+ lines?)?\]$/);return t?t[0]:null}function ut(e){let t=e.match(/^\[Pasted text #\d+(?:\s*\+\d+ lines?)?\]/);return t?t[0]:null}function dt(e){let t=e.match(/#(\d+)/);t&&nt(parseInt(t[1]??``,10))}var J=e(b(),1),Y=Ne();function ft(e,t=28){let n=e.replace(/\s+/g,` `).trim();return n.length>t?`${n.slice(0,t)}…`:n}var pt=`cubic-bezier(0.34, 1.56, 0.64, 1)`,mt=14,ht=7,X=.6,gt=160,_t=440;function vt(){let e=(0,J.useCallback)(()=>typeof window>`u`?_t:Math.max(gt,Math.min(_t,Math.round(window.innerHeight*X))),[]),[t,n]=(0,J.useState)(e);return(0,J.useEffect)(()=>{let t=()=>n(e());return window.addEventListener(`resize`,t),()=>window.removeEventListener(`resize`,t)},[e]),t}var yt=(0,J.memo)(function({items:e,activeId:t,onJump:n}){let{t:r}=L(),[i,a]=(0,J.useState)(!1),o=(0,J.useRef)(null),s=vt(),c=(0,J.useCallback)(()=>{o.current&&window.clearTimeout(o.current),a(!0)},[]),l=(0,J.useCallback)(()=>{o.current&&window.clearTimeout(o.current),o.current=window.setTimeout(()=>a(!1),180)},[]),u=Math.max(ht,Math.min(mt,Math.floor(s/Math.max(1,e.length)))),d=Math.max(1,Math.floor(s/ht)),f=(0,J.useMemo)(()=>{let n=e.length,r=Math.min(n,d),i=n/r,a=t?e.findIndex(e=>e.id===t):-1;return Array.from({length:r},(e,t)=>{let r=Math.round(t*i),o=Math.min(n,Math.max(r+1,Math.round((t+1)*i)));return{start:r,end:o,active:a>=r&&a<o}}).flatMap(t=>{let n=e[t.start];return n?[{...t,key:n.id,first:n}]:[]})},[e,t,d]),p=u>=12?6:u>=9?5:4,m=Math.min(p+2,Math.max(4,u-2)),h=u>=12?`ring-2 ring-accent-blue/25`:`ring-1 ring-accent-blue/30`;return e.length===0?null:(0,Y.jsx)(`div`,{role:`list`,"aria-label":r(`chat.messageRail`),className:`pointer-events-none absolute end-4 top-1/2 z-30 hidden -translate-y-1/2 md:block`,children:(0,Y.jsxs)(`div`,{onMouseEnter:c,onMouseLeave:l,"data-testid":`rail-trigger`,className:`pointer-events-auto relative flex items-center py-3`,children:[(0,Y.jsxs)(`div`,{"aria-hidden":!i,inert:!i,"data-testid":`rail-panel`,className:`absolute end-full top-1/2 flex w-72 -translate-y-1/2 origin-right rtl:origin-left flex-col overflow-hidden rounded-xl border border-dark-border/70 bg-dark-bg/90 shadow-pop backdrop-blur-xl transition-all duration-300 ${i?`translate-x-0 scale-100 opacity-100`:`pointer-events-none translate-x-4 rtl:-translate-x-4 scale-95 opacity-0`}`,style:{transitionTimingFunction:i?pt:`ease`},children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b border-dark-border/60 px-3 py-2`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5 text-meta font-semibold uppercase tracking-[0.08em] text-dark-muted`,children:[(0,Y.jsx)(x,{size:12,className:`text-accent-blue`,"aria-hidden":`true`}),r(`chat.messageIndex`)]}),(0,Y.jsx)(`span`,{className:`rounded-full bg-dark-hover px-1.5 py-0.5 text-badge font-medium tabular-nums text-dark-muted`,children:e.length})]}),(0,Y.jsx)(`div`,{className:`max-h-[55vh] overflow-y-auto p-1.5 custom-scrollbar`,children:e.map((e,r)=>{let a=e.id===t;return(0,Y.jsxs)(`button`,{type:`button`,role:`listitem`,onClick:()=>n(e.id),title:e.content,"aria-current":a?`true`:void 0,tabIndex:i?0:-1,className:`group/item flex w-full items-start gap-2 rounded-lg px-2 py-1.5 text-start transition-all duration-200 ${i?`translate-x-0 opacity-100`:`translate-x-2 rtl:-translate-x-2 opacity-0`} ${a?`bg-accent-blue/10`:`hover:bg-dark-hover`}`,style:{transitionDelay:i?`${Math.min(r*24,264)}ms`:`0ms`},children:[(0,Y.jsx)(`span`,{className:`mt-px flex h-4 w-4 shrink-0 items-center justify-center rounded text-badge font-semibold tabular-nums transition-colors duration-200 ${a?`bg-accent-blue text-accent-fg`:`bg-dark-hover text-dark-muted group-hover/item:bg-dark-border/80 group-hover/item:text-dark-text`}`,children:r+1}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1`,children:(0,Y.jsx)(`span`,{"data-testid":`rail-entry-content`,className:`block break-words text-xs leading-snug line-clamp-2 group-hover/item:line-clamp-none transition-colors duration-200 ${a?`font-medium text-accent-blue`:`text-dark-text/90`}`,children:e.content})}),(0,Y.jsx)(P,{size:12,"aria-hidden":`true`,className:`mt-0.5 shrink-0 -translate-x-1 rtl:translate-x-1 rtl:rotate-180 text-dark-muted/50 opacity-0 transition-all duration-200 group-hover/item:translate-x-0 group-hover/item:opacity-100`})]},e.id)})})]}),(0,Y.jsx)(`div`,{"data-testid":`rail-dots`,className:`flex flex-col items-end`,style:{maxHeight:s},children:f.map(e=>{let{first:t}=e,r=e.end-e.start>1,i=r?`${e.start+1}–${e.end} (${e.end-e.start})`:`${e.start+1}. ${ft(t.content)}`;return(0,Y.jsx)(`button`,{type:`button`,role:`listitem`,onClick:()=>n(t.id),title:r?`${e.start+1}–${e.end}: ${t.content}`:t.content,"aria-label":i,"aria-current":e.active?`true`:void 0,className:`group/dot pointer-events-auto flex items-center justify-center rounded-full transition-colors duration-200 hover:bg-dark-surface/80`,style:{height:u,width:20},children:(0,Y.jsx)(`span`,{style:{height:e.active?m:p,width:e.active?m:p},className:e.active?`rounded-full bg-accent-blue transition-all duration-300 ease-out group-hover/dot:scale-125 ${h}`:`rounded-full bg-dark-muted/35 transition-all duration-300 ease-out group-hover/dot:scale-125 group-hover/dot:bg-dark-muted`})},e.key)})})]})})});function bt({sessionId:e}){let t=ue(e=>e.compactionProgress),n=le(e=>e.activeSessionId);if(!t||n&&e&&n!==e)return null;let r=t.percent<100;return(0,Y.jsxs)(`div`,{"data-testid":`compaction-indicator`,className:`chat-col flex items-center gap-2 px-4 py-1.5 text-xs text-dark-text sm:px-6`,title:t.message||void 0,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap`,children:`compact`}),(0,Y.jsxs)(`span`,{className:`tabular-nums whitespace-nowrap`,children:[t.percent,`%`]}),(0,Y.jsx)(`span`,{className:`h-1.5 w-20 overflow-hidden rounded-full bg-dark-border/70`,children:(0,Y.jsx)(`span`,{className:`block h-full rounded-full bg-dark-text/70 transition-all${r?` animate-pulse-soft`:``}`,style:{width:`${t.percent}%`}})})]})}var xt=24,St=2e3,Ct=150,wt=28;function Tt({label:e}){let t=(0,J.useRef)(Date.now()),n=(0,J.useRef)(null),[r,i]=(0,J.useState)(!1);return(0,J.useEffect)(()=>{let e=window.setTimeout(()=>i(!0),15e3);return()=>window.clearTimeout(e)},[]),(0,J.useEffect)(()=>{if(!r)return;let e=()=>{let e=n.current;if(!e)return;let r=Math.floor((Date.now()-t.current)/1e3);e.textContent=r>=60?`${Math.floor(r/60)}m ${r%60}s`:`${r}s`};e();let i=window.setInterval(e,1e3);return()=>window.clearInterval(i)},[r]),(0,Y.jsxs)(`div`,{className:`chat-col flex items-center gap-2 px-4 py-3 text-xs text-dark-muted sm:px-6`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`}),(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`,style:{animationDelay:`0.2s`}}),(0,Y.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-accent-blue animate-blink`,style:{animationDelay:`0.4s`}})]}),(0,Y.jsx)(`span`,{className:`text-shimmer`,children:e}),r&&(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 tabular-nums text-dark-muted/70`,children:[(0,Y.jsx)(D,{size:10}),(0,Y.jsx)(`span`,{ref:n,children:`15s`})]})]})}var Et=(0,J.memo)(function({messages:e,isGenerating:t,sessionId:n,onRegenerate:r,onRetryTurn:i,onDeleteMessage:a,onOpenSidebarView:o}){let{t:s}=L(),c=(0,J.useRef)(null),l=(0,J.useRef)(new Map),[u,d]=(0,J.useState)(!0),[f,p]=(0,J.useState)(null),m=(0,J.useRef)(u),h=(0,J.useRef)(f),g=(0,J.useCallback)(e=>{m.current!==e&&(m.current=e,d(e))},[]),_=(0,J.useCallback)(e=>{h.current!==e&&(h.current=e,p(e))},[]),[v,y]=(0,J.useState)(null),[b,x]=(0,J.useState)(0),S=(0,J.useRef)(null),C=(0,J.useRef)(!1),w=(0,J.useRef)(null),E=(0,J.useRef)(!1),D=(0,J.useRef)(null),O=(0,J.useRef)(!1),k=(0,J.useRef)(null),ee=(0,J.useRef)(null),A=(0,J.useRef)(t);A.current=t;let te=(0,J.useRef)(0),[ne,re]=(0,J.useState)({top:0,bottom:0}),ie=(0,J.useRef)(ne),ae=(0,J.useCallback)((e,t)=>{(ie.current.top!==e||ie.current.bottom!==t)&&(ie.current={top:e,bottom:t},re({top:e,bottom:t}))},[]),j=(0,J.useMemo)(()=>e.filter(e=>!e.deleted),[e]),M=(0,J.useMemo)(()=>{if(!t)return!1;let e=j[j.length-1];return!e||e.type!==`assistant`?!1:!e.content},[t,j]),oe=(0,J.useMemo)(()=>j.filter(e=>ce(e)).map(e=>({id:e.id,content:e.content})),[j]),N=(0,J.useMemo)(()=>oe.map(e=>e.id),[oe]),P=(0,J.useCallback)(e=>{if(e){let t=e.dataset.mid;t&&l.current.set(t,e)}},[]);(0,J.useEffect)(()=>{let e=new Set(N);for(let t of l.current.keys())e.has(t)||l.current.delete(t)},[N]);let se=(0,J.useCallback)(()=>{let e=c.current;if(!e||N.length===0){_(null);return}let t=e.getBoundingClientRect(),n=t.top+t.height*.35,r=N[0]??null;for(let e of N){let t=l.current.get(e);if(t&&t.isConnected){if(t.getBoundingClientRect().top<=n)r=e;else break}}e.scrollHeight-e.scrollTop-e.clientHeight<xt&&(r=N[N.length-1]??r),_(r)},[N,_]),F=(0,J.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.scrollTop<=2,n=e.scrollTop+e.clientHeight>=e.scrollHeight-2;ae(t?0:wt,n?0:wt)},[ae]),I=(0,J.useCallback)(()=>{let e=c.current;if(!e)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight,n=t<xt;E.current?n&&(E.current=!1):C.current?t>=xt&&(C.current=!1):g(n),se(),F()},[se,F,g]),le=(0,J.useCallback)(()=>{let e=c.current;if(!e||A.current||C.current||E.current)return;let t=e.scrollHeight-e.scrollTop-e.clientHeight;g(t<xt),F()},[g,F]);(0,J.useLayoutEffect)(()=>{O.current=!0,k.current&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{O.current=!1},St),w.current&&window.clearTimeout(w.current),C.current=!1,E.current=!1;let e=c.current;e&&(e.scrollTop=e.scrollHeight),g(!0),F()},[n,g,F]),(0,J.useEffect)(()=>{let e=c.current,t=ee.current;if(!e||!t||typeof ResizeObserver>`u`)return;let n=new ResizeObserver(()=>{O.current&&m.current&&(e.scrollTop=e.scrollHeight)});return n.observe(t),()=>n.disconnect()},[]),(0,J.useEffect)(()=>{se(),F()},[e,se,F]),(0,J.useEffect)(()=>{let e=c.current;if(!e)return;let t=()=>{F(),le()},n=()=>{te.current=performance.now(),E.current=!1,O.current=!1},r=e=>{(e.key===`PageUp`||e.key===`PageDown`||e.key===`ArrowUp`||e.key===`ArrowDown`||e.key===`Home`||e.key===`End`)&&n()};return e.addEventListener(`wheel`,n,{passive:!0}),e.addEventListener(`touchmove`,n,{passive:!0}),e.addEventListener(`keydown`,r),window.addEventListener(`resize`,t),()=>{e.removeEventListener(`wheel`,n),e.removeEventListener(`touchmove`,n),e.removeEventListener(`keydown`,r),window.removeEventListener(`resize`,t)}},[F,le]);let R=(0,J.useCallback)(e=>{let t=c.current,n=l.current.get(e);if(!t||!n||!n.isConnected)return;g(!1),y(e),x(e=>e+1),S.current&&window.clearTimeout(S.current),S.current=window.setTimeout(()=>y(null),1600);let r=t.getBoundingClientRect(),i=n.getBoundingClientRect(),a=t.scrollTop+(i.top-r.top)-t.clientHeight/2+i.height/2;w.current&&window.clearTimeout(w.current),C.current=!0,t.scrollTo({top:Math.max(0,a),behavior:`smooth`}),`onscrollend`in t&&t.addEventListener(`scrollend`,()=>{C.current=!1},{once:!0}),w.current=window.setTimeout(()=>{C.current=!1},1500)},[g]);(0,J.useEffect)(()=>()=>{S.current&&window.clearTimeout(S.current),w.current&&window.clearTimeout(w.current),D.current&&window.clearTimeout(D.current),k.current&&window.clearTimeout(k.current)},[]);let ue=(0,J.useCallback)(()=>{w.current&&window.clearTimeout(w.current),C.current=!1;let e=c.current;e&&(e.scrollTop=e.scrollHeight)},[]),de=(0,J.useCallback)(()=>{w.current&&window.clearTimeout(w.current),C.current=!1,g(!0);let e=c.current;e&&(E.current=!0,D.current&&window.clearTimeout(D.current),D.current=window.setTimeout(()=>{E.current=!1},1e3),`onscrollend`in e&&e.addEventListener(`scrollend`,()=>{E.current=!1},{once:!0}),e.scrollTo({top:e.scrollHeight,behavior:`smooth`}))},[g]);(0,J.useEffect)(()=>{t&&(g(!0),ue())},[t,ue,g]);let z=(0,J.useMemo)(()=>{let e=j[j.length-1];return`${j.length}:${e?.id??``}:${e?.content?.length??0}:${e?.textBlocks?.length??0}:${e?.toolCalls?.length??0}:${e?.thinkingBlocks?.length??0}:${e?.thinking?.length??0}`},[j]),B=(0,J.useRef)(z);return(0,J.useEffect)(()=>{u?z!==B.current&&(B.current=z,!(performance.now()-te.current<=Ct)&&ue()):B.current=z},[z,u,ue]),(0,Y.jsxs)(`div`,{className:`relative flex-1 min-h-0`,children:[(0,Y.jsxs)(`div`,{ref:c,onScroll:I,style:{"--ui-fade-top":`${ne.top}px`,"--ui-fade-bottom":`${ne.bottom}px`},className:`fade-mask-y h-full overflow-y-auto custom-scrollbar`,children:[(0,Y.jsx)(`div`,{ref:ee,className:`chat-stack flex flex-col pb-8 pt-5`,children:j.map((e,t)=>{let s=j[t-1],c=s?s.type===e.type?`mt-2`:`mt-5`:``;return(0,Y.jsxs)(`div`,{"data-mid":e.id,ref:P,className:`relative w-full ${c}`,children:[v===e.id&&(0,Y.jsx)(`div`,{className:`animate-rail-flash pointer-events-none absolute inset-0`},b),(0,Y.jsx)(be,{message:e,sessionId:n,onRegenerate:r,onRetryTurn:i,onDeleteMessage:a,onOpenSidebarView:o})]},e.id)})}),(0,Y.jsx)(bt,{sessionId:n}),t&&!M&&(0,Y.jsx)(Tt,{label:s(`chat.thinkingEllipsis`)},n)]}),oe.length>0&&(0,Y.jsx)(yt,{items:oe,activeId:f,onJump:R}),!u&&j.length>0&&(0,Y.jsx)(`button`,{type:`button`,onClick:de,title:s(`chat.backToBottom`),"aria-label":s(`chat.backToBottom`),className:`absolute bottom-5 end-5 z-20 flex h-8 w-8 animate-fade-in-up items-center justify-center rounded-full border border-dark-border/70 bg-dark-surface/90 text-dark-muted shadow-lg backdrop-blur transition-all duration-200 hover:scale-110 hover:text-dark-text hover:shadow-xl`,children:(0,Y.jsx)(T,{size:15})})]})}),Dt=(0,J.memo)(function(){let{t:e}=L(),t=W(e=>e.mode),n=W(e=>e.setAutoLevel),r=ve(e=>e.autoLevel),i=t!==`normal`&&pe(t),a=G(i?r:0),o=(t===`normal`?`act`:fe(t))===`chat`,s=U[a],[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(null),f=(0,J.useId)(),p=u??a,m=U[p],h=(0,J.useRef)(null),g=(0,J.useRef)(null),_=e=>{o||(l(!0),h.current?.contains(e.target)||d(null))},v=e=>{let t=e.relatedTarget;t&&g.current?.contains(t)||(l(!1),d(null))},y=(0,J.useCallback)(e=>{o||e!==a&&n(e)},[o,a,n]),b=(0,J.useRef)(0);(0,J.useEffect)(()=>{let e=g.current;if(!e||o)return;let t=e=>{let t=Math.abs(e.deltaY)>=Math.abs(e.deltaX)?e.deltaY:0;if(t===0||(e.preventDefault(),b.current+=t,Math.abs(b.current)<30))return;let n=b.current>0?1:-1;b.current=0,y(H(a,n>0?-1:1))};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[y,o,a]);let x=(0,J.useCallback)(e=>{if(o)return;let t=t=>{e.preventDefault(),y(H(a,t))};switch(e.key){case`ArrowUp`:case`ArrowRight`:t(1);break;case`ArrowDown`:case`ArrowLeft`:t(-1);break;case`Home`:e.preventDefault(),y(0);break;case`End`:e.preventDefault(),y(4)}},[y,o,a]),S=t=>{let n=U[t];return`${t}/4 · ${n.label} — ${n.hint}\n${e(`plan.autoAllows`)}: ${n.allows}\n${e(`plan.autoAsks`)}: ${n.asks}`},C=`${e(`plan.autoApprove`)} ${S(a)}`;return(0,Y.jsxs)(`div`,{ref:g,role:`slider`,tabIndex:o?-1:0,"aria-label":e(`plan.autoApprove`),"aria-valuemin":0,"aria-valuemax":4,"aria-valuenow":a,"aria-valuetext":`${s.label} (${a}/4)`,"aria-describedby":c?f:void 0,"aria-disabled":o||void 0,onKeyDown:x,onMouseOver:_,onMouseOut:v,onFocus:()=>l(!o),onBlur:()=>{l(!1),d(null)},title:c?void 0:o?`${e(`plan.autoApprove`)} — chat · ${s.hint}`:C,className:B(`relative flex items-center gap-1.5 rounded-full border px-2 py-0.5 text-xs whitespace-nowrap transition-colors select-none`,o?`border-dark-border text-dark-muted opacity-50 cursor-not-allowed`:B(`cursor-pointer outline-none focus-visible:ring-1 focus-visible:ring-accent-yellow/60`,i?`border-accent-yellow/40 bg-accent-yellow/10 text-accent-yellow`:`border-dark-border text-dark-muted hover:bg-dark-hover`)),children:[(0,Y.jsx)(`span`,{ref:h,className:`flex items-end gap-[2px]`,"aria-hidden":!0,children:Se.map(e=>{let t=e>0&&a>=e;return(0,Y.jsx)(`span`,{title:c?void 0:S(e),onMouseOver:()=>d(e),onMouseDown:t=>{t.preventDefault(),y(e)},className:B(`w-[3px] rounded-sm transition-colors`,t?`bg-accent-yellow`:i?`bg-accent-yellow/25 hover:bg-accent-yellow/60`:`bg-dark-border`,!o&&(i?`hover:bg-accent-yellow/70`:`hover:bg-dark-muted/50`)),style:{height:4+e*2.5}},e)})}),(0,Y.jsx)(`span`,{className:`font-medium tabular-nums`,children:a}),(0,Y.jsx)(`span`,{className:`uppercase tracking-wide`,children:s.label}),c&&(0,Y.jsxs)(`div`,{id:f,role:`tooltip`,className:`pointer-events-none absolute bottom-full left-0 z-50 mb-2 w-max max-w-[min(80vw,30rem)] space-y-1 whitespace-normal break-words rounded-lg border border-dark-border bg-dark-surface px-2.5 py-2 text-start font-normal normal-case tracking-wide text-dark-text shadow-pop`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-medium tabular-nums`,children:p}),(0,Y.jsx)(`span`,{className:`uppercase tracking-wide text-accent-yellow`,children:m.label}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.hint})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-[auto_minmax(0,1fr)] gap-x-1.5 gap-y-0.5`,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-accent-green`,children:e(`plan.autoAllows`)}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.allows}),(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-accent-yellow`,children:e(`plan.autoAsks`)}),(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:m.asks})]})]})]})}),Ot={act:`border-accent-green/30 text-accent-green bg-accent-green/10`,"auto-act":`border-accent-yellow/30 text-accent-yellow bg-accent-yellow/10`,goal:`border-accent-purple/30 text-accent-purple bg-accent-purple/10`,"auto-goal":`border-accent-red/30 text-accent-red bg-accent-red/10`,chat:`border-accent-cyan/30 text-accent-cyan bg-accent-cyan/10`,normal:`border-accent-green/30 text-accent-green`},kt=(0,J.memo)(function(){let{t:e}=L(),t=W(e=>e.mode),n=W(e=>e.modeSource),r=W(e=>e.setBaseMode),i=fe(t===`normal`?`act`:t),a=n===`user_override`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[me.map(n=>{let o=i===n,s=he[n],c=t!==`normal`&&o?Ot[t]??`border-dark-border text-dark-muted`:`border-dark-border text-dark-muted hover:bg-dark-hover`;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>r(n),className:B(`px-2 py-0.5 rounded-full border text-xs whitespace-nowrap transition-colors cursor-pointer`,c),title:e(`chat.clickToSwitchMode`),"aria-pressed":o,children:[s.label,o&&a&&(0,Y.jsx)(_,{size:10,className:`ms-1 inline-block -mt-px`,"aria-hidden":!0})]},n)}),a&&(0,Y.jsx)(`span`,{className:`flex items-center text-accent-yellow`,title:e(`plan.modeLocked`),"aria-label":e(`plan.modeLocked`),children:(0,Y.jsx)(_,{size:11,"aria-hidden":!0})}),(0,Y.jsx)(Dt,{})]})}),At=(0,J.memo)(function(){let{t:e}=L(),t=le(e=>e.activeSessionId),n=W(e=>t?e.pendingSuggestionsBySession[t]:void 0),r=W(e=>e.clearPendingSuggestion),i=W(e=>e.setBaseMode);if(!n)return null;let a=n.suggestedMode;if(a!==`act`&&a!==`goal`)return null;let o=a,s=he[o]?.label??o,c=he[fe(n.currentMode)]?.label??n.currentMode,l=typeof n.confidence==`number`?` · ${e(`plan.modeSuggestionConfidence`)} ${Math.round(n.confidence*100)}%`:``;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-accent-cyan/20 bg-accent-cyan/10 px-4 py-1.5 text-xs`,role:`status`,children:[(0,Y.jsx)(`span`,{className:`shrink-0 font-medium text-accent-cyan`,children:e(`plan.modeSuggestionTitle`)}),(0,Y.jsxs)(`span`,{className:`flex min-w-0 items-center gap-1 text-dark-muted`,children:[(0,Y.jsx)(`span`,{className:`whitespace-nowrap`,children:c}),(0,Y.jsx)(g,{size:11,className:`shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{className:`whitespace-nowrap text-dark-text`,children:s}),(0,Y.jsx)(`span`,{className:`shrink-0`,children:l}),n.reason&&(0,Y.jsxs)(`span`,{className:`hidden min-w-0 truncate md:inline`,title:n.reason,children:[`· `,n.reason]})]}),(0,Y.jsxs)(`span`,{className:`ms-auto flex shrink-0 items-center gap-1.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{i(o),r(n.sessionId)},className:B(`flex items-center gap-1 rounded-full border border-accent-cyan/40 px-2.5 py-0.5`,`text-accent-cyan transition-colors hover:bg-accent-cyan/20 cursor-pointer`),children:[(0,Y.jsx)(se,{size:11,"aria-hidden":!0}),e(`plan.modeSuggestionApply`,{mode:s})]}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>r(n.sessionId),className:B(`flex items-center gap-1 rounded-full border border-dark-border px-2.5 py-0.5`,`text-dark-muted transition-colors hover:bg-dark-hover cursor-pointer`),children:[(0,Y.jsx)(ae,{size:11,"aria-hidden":!0}),e(`plan.modeSuggestionKeep`,{mode:c})]})]})]})}),Z=I();function jt(){return Me.get(`/api/models/cached`)}var Mt=(0,J.memo)(function(){let{t:e}=L(),t=ue(e=>e.model),r=ue(e=>e.modelRef),i=ue(e=>e.setModel),a=ue(e=>e.setModelRef),o=W(e=>e.mode),s=Ae(e=>e.effort),c=Ae(e=>e.setEffort),[u,d]=(0,J.useState)([]),[f,p]=(0,J.useState)(!1),{visible:m,phase:h}=Be(f),g=(0,J.useRef)(null),_=(0,J.useRef)(null),[v,y]=(0,J.useState)(`session`),[b,x]=(0,J.useState)(`user`),C=Re(e=>e.kinds),w=Re(e=>e.load),E=le(e=>e.activeSessionId),[D,O]=(0,J.useState)(`models`),[k,ee]=(0,J.useState)(``),[A,te]=(0,J.useState)(``),[ne,re]=(0,J.useState)({}),[ae,j]=(0,J.useState)({}),[M,oe]=(0,J.useState)(!1),[N,P]=(0,J.useState)(null),[I,ce]=(0,J.useState)([]),R=(0,J.useMemo)(()=>Ke(Array.from(new Set(u.map(e=>e.provider).filter(Boolean))),u,I),[u,I]),de=(0,J.useCallback)(async()=>{try{let e=await K.models.list();e.success&&e.data&&Array.isArray(e.data.models)&&d(e.data.models.filter(e=>e.enabled!==!1))}catch{}},[]),pe=(0,J.useCallback)(async()=>{try{let e=await jt();e.success&&e.data?.providers&&re(e.data.providers)}catch{}},[]),me=(0,J.useCallback)(async t=>{if(t){oe(!0),P(null);try{let n=await K.models.byProvider(t);if(n.success&&n.data){let e=n.data.models||[];j(n=>({...n,[t]:e}))}else P(n.error||e(`chat.loadModelsFailed`))}catch{P(e(`chat.loadModelsFailed`))}finally{oe(!1)}}},[e]);(0,J.useEffect)(()=>{de()},[de]);let[he,V]=(0,J.useState)(0);(0,J.useEffect)(()=>{let e=()=>{de(),pe(),V(e=>e+1)};return window.addEventListener(`models-updated`,e),()=>window.removeEventListener(`models-updated`,e)},[de,pe]);let[H,ge]=(0,J.useState)(null),U=(0,J.useCallback)(()=>{let e=g.current;if(!e)return;let t=e.getBoundingClientRect();ge({left:Math.max(8,Math.min(t.left,window.innerWidth-400-8)),bottom:Math.max(8,window.innerHeight-t.top+6),maxHeight:Math.max(160,t.top-6-8)})},[]),_e=(0,J.useCallback)(()=>{let e=Xe(r)||u.find(e=>e.isGlobalDefault)?.provider||R[0]||``;O(`models`),ee(e),te(``),P(null),U(),p(!0),pe()},[r,u,R,pe,U]);(0,J.useEffect)(()=>{f&&k&&me(k)},[f,k,he,me]),(0,J.useEffect)(()=>{f&&(k&&R.includes(k)||ee(R[0]||``))},[f,k,R]),(0,J.useEffect)(()=>{f&&w()},[f,w]),(0,J.useEffect)(()=>{C.length!==0&&(C.some(e=>e.id===b)||x(C[0].id))},[C,b]);let ve=(0,J.useCallback)(()=>p(!1),[]);(0,J.useEffect)(()=>{if(f)return U(),window.addEventListener(`resize`,U),window.addEventListener(`scroll`,U,!0),()=>{window.removeEventListener(`resize`,U),window.removeEventListener(`scroll`,U,!0)}},[f,U]),(0,J.useEffect)(()=>{if(!f)return;let e=e=>{let t=e.target;g.current?.contains(t)||_.current?.contains(t)||ve()},t=e=>{e.key===`Escape`&&ve()};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[f,ve]);let ye=(0,J.useMemo)(()=>{let e=ae[k];return e&&e.length>0?e:ne[k]?.models??[]},[ae,ne,k]),be=(0,J.useMemo)(()=>qe(Ge(k,ye,u),I,k),[k,ye,u,I]),xe=(0,J.useMemo)(()=>{let e=A.trim().toLowerCase();return e?be.filter(t=>t.id.toLowerCase().includes(e)||t.name.toLowerCase().includes(e)):be},[be,A]),G=e=>{ce(t=>[e,...t.filter(t=>t!==e)].slice(0,20))},Se=async n=>{if(ve(),v===`session`&&!E){z.error(e(`chat.sessionModelNoSession`));return}let s=k,c=`${s}:${n.id}`,l=t,u=r;i(n.id),a(c);try{if(!n.configured){let t=await K.models.create({provider:s,model:{id:n.id,name:n.name||n.id}});if(!t.success){i(l),a(u),z.error(t.error||e(`chat.addModelFailed`));return}}if(v===`session`){let t=await K.models.setSessionModel(E,s,n.id);if(!t.success){i(l),a(u),z.error(t.error||e(`chat.switchModelFailed`));return}G(c),await de();return}if(v===`kind`){let t=Re.getState(),r=C.find(e=>e.id===b)?.labelKey?e(C.find(e=>e.id===b).labelKey):b;if(!await t.saveEntry(b,{...t.entries[b]??{},model:n.id})){i(l),a(u),z.error(t.error||e(`chat.kindBindFailed`));return}if(E){let t=await K.models.setSessionModel(E,s,n.id);if(!t.success){i(l),a(u),z.error(t.error||e(`chat.switchModelFailed`));return}}G(c),z.success(e(`chat.kindBoundToast`,{kind:r,model:n.id})),await de();return}let t=fe(o===`normal`?`act`:o)===`goal`?{goal:c}:{global:c,act:c},r=await K.models.setDefaults(t);if(!r.success){i(l),a(u),z.error(r.error||e(`chat.switchModelFailed`));return}G(c),await de()}catch{i(l),a(u),z.error(e(`chat.addModelFailed`))}},Ce=fe(o===`normal`?`act`:o),we=Ce===`goal`?`isGoalDefault`:`isActDefault`,Te=e=>{let n=`${k}:${e.id}`;return r?r===n:t===n||t===e.id},Ee=u.some(e=>e[we]===!0),De=u.find(e=>e.isGlobalDefault),ke=async()=>{ve();let e=Ce===`goal`?{goal:null}:{act:null};try{(await K.models.setDefaults(e)).success&&(De?(i(De.id),a(`${De.provider}:${De.id}`)):(i(``),a(``)),await de())}catch{}},Me=q(t,r),Ne=A.trim().toLowerCase();return(0,Y.jsxs)(`div`,{className:`relative min-w-0`,ref:g,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>f?ve():_e(),className:`flex w-full items-center gap-1 px-2 py-0.5 rounded-full border border-dark-border text-dark-muted whitespace-nowrap transition-colors hover:bg-dark-hover cursor-pointer`,title:Me||e(`chat.clickToSelectModel`),"aria-haspopup":`listbox`,"aria-expanded":f,children:[(0,Y.jsx)(l,{size:12,className:`shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium max-w-[8rem] truncate`,children:Me||e(`chat.selectModel`)}),(0,Y.jsx)(T,{size:12,className:B(`transition-transform`,f&&`rotate-180`)})]}),m&&(0,Z.createPortal)((0,Y.jsxs)(`div`,{ref:_,role:`listbox`,"data-phase":h,"aria-label":e(`chat.selectModel`),style:H?{left:H.left,bottom:H.bottom,maxHeight:H.maxHeight}:void 0,className:`fixed z-50 flex w-[400px] max-w-[92vw] flex-col overflow-hidden rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop ui-overlay-panel-fade`,children:[(0,Y.jsx)(`div`,{role:`tablist`,"aria-label":e(`chat.selectModel`),className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border`,children:[{key:`models`,label:e(`chat.selectModel`),Icon:l},{key:`effort`,label:e(`chat.effort`),Icon:ie}].map(({key:e,label:t,Icon:n})=>(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":D===e,onClick:()=>O(e),className:B(`flex items-center gap-1 text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,D===e?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(n,{size:11,className:`shrink-0`}),t]},e))}),D===`models`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border`,children:[{key:`session`,label:e(`chat.applyScopeSession`),hint:e(`chat.sessionScopeHint`)},{key:`kind`,label:e(`chat.applyScopeKind`),hint:e(`chat.kindScopeHint`)},{key:`global`,label:e(`chat.applyScopeGlobal`),hint:e(`chat.globalScopeHint`)}].map(({key:e,label:t,hint:n})=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>y(e),title:n,className:B(`text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,v===e?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:t},e))}),v===`kind`&&(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 px-2 py-1.5 border-b border-dark-border text-meta`,children:[(0,Y.jsx)(`span`,{className:`text-dark-muted`,children:e(`chat.kindSelectLabel`)}),(0,Y.jsx)(`select`,{value:b,onChange:e=>x(e.target.value),className:`rounded border border-dark-border bg-dark-surface px-1.5 py-0.5 text-meta text-dark-text`,children:C.map(t=>(0,Y.jsx)(`option`,{value:t.id,children:t.labelKey?e(t.labelKey):t.id},t.id))})]}),Ee&&(0,Y.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!1,onClick:ke,title:e(`chat.followGlobalDefaultHint`),className:`flex w-full shrink-0 items-center gap-2 px-3 py-2 text-start transition-colors hover:bg-dark-hover border-b border-dark-border/60`,children:[(0,Y.jsx)(n,{size:11,className:`shrink-0 text-accent-green`}),(0,Y.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-semibold text-accent-green`,children:e(`chat.followGlobalDefault`)}),(0,Y.jsx)(`span`,{className:`block text-badge text-dark-muted mt-0.5 truncate`,children:De?De.name||De.id:e(`chat.noGlobalDefault`)})]})]}),R.length>0?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{role:`tablist`,"aria-label":e(`chat.selectProvider`),className:`flex shrink-0 items-center gap-1 px-2 py-1.5 border-b border-dark-border overflow-x-auto custom-scrollbar`,children:R.map(e=>{let t=e===k,n=ae[e]?.length||ne[e]?.models.length||0;return(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":t,onClick:()=>{ee(e),te(``),P(null)},className:B(`shrink-0 flex items-center gap-1 text-meta px-2 py-0.5 rounded-full border transition-colors cursor-pointer`,t?`border-accent-blue text-accent-blue bg-accent-blue/10 font-medium`:`border-dark-border text-dark-muted hover:text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:`max-w-[7rem] truncate`,children:e}),n>0&&(0,Y.jsx)(`span`,{className:`text-badge opacity-70`,children:n})]},e)})}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 px-2 py-1.5 border-b border-dark-border`,children:[(0,Y.jsx)(S,{size:11,className:`shrink-0 text-dark-muted`}),(0,Y.jsx)(`input`,{value:A,onChange:e=>te(e.target.value),placeholder:e(`chat.searchModels`),"aria-label":e(`chat.searchModels`),className:`flex-1 min-w-0 bg-dark-surface text-dark-text text-xs px-2 py-1 rounded border border-dark-border placeholder-dark-muted/60 focus:outline-none focus:border-accent-blue`})]}),(0,Y.jsxs)(`div`,{className:`min-h-0 overflow-y-auto py-1 custom-scrollbar`,style:{height:253},children:[M&&xe.length===0&&(0,Y.jsxs)(`div`,{className:`px-3 py-2 text-xs text-dark-muted flex items-center gap-1.5`,children:[(0,Y.jsx)(F,{size:11,className:`animate-spin`}),e(`chat.loadingModels`)]}),!M&&N&&xe.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-accent-red`,children:N}),xe.map(t=>{let n=Te(t);return(0,Y.jsx)(`button`,{type:`button`,role:`option`,"aria-selected":n,onClick:()=>{Se(t)},className:B(`w-full shrink-0 flex items-center gap-2 px-3 py-2 text-start transition-colors`,n?`bg-dark-hover`:`hover:bg-dark-hover`),children:(0,Y.jsxs)(`span`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`span`,{className:B(`flex h-3.5 w-3.5 items-center justify-center rounded-full border transition-colors shrink-0`,n?`border-accent-green bg-accent-green/20 text-accent-green`:`border-dark-border text-transparent`),children:(0,Y.jsx)(se,{size:10,strokeWidth:3})}),(0,Y.jsx)(`span`,{className:`text-xs font-semibold text-dark-text truncate`,children:t.name||t.id})]}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 mt-0.5 flex-wrap ps-[1.375rem]`,children:[(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:t.id}),t.isGlobalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-red/20 text-accent-red`,children:e(`chat.globalDefault`)}),t.isActDefault&&!t.isGlobalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-yellow/20 text-accent-yellow`,children:e(`chat.actDefault`)}),t.isGoalDefault&&(0,Y.jsx)(`span`,{className:`text-badge px-1 rounded bg-accent-purple/20 text-accent-purple`,children:e(`chat.goalDefault`)})]})]})},t.id)}),!M&&!N&&xe.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:e(Ne?`chat.noModelsFound`:`chat.noProviderModels`)})]})]}):(0,Y.jsx)(`div`,{className:`px-3 py-2 text-xs text-dark-muted`,children:e(`chat.noConfiguredProviders`)})]}):(0,Y.jsx)(Y.Fragment,{children:(0,Y.jsx)(`div`,{className:`shrink-0 py-1`,children:je.map(t=>{let n=Oe[t],r=t===s;return(0,Y.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":r,onClick:()=>{c(t),ve()},className:B(`w-full flex items-center gap-2 px-3 py-1.5 text-start transition-colors`,r?`bg-dark-hover`:`hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:B(`flex h-4 w-4 items-center justify-center rounded border transition-colors shrink-0`,r?`border-accent-green bg-accent-green/20 text-accent-green`:`border-dark-border text-transparent`),children:(0,Y.jsx)(se,{size:11,strokeWidth:3})}),(0,Y.jsx)(`span`,{className:`text-xs font-medium ${r?n.color:`text-dark-text`}`,children:e(n.labelKey)})]},t)})})})]}),document.body)]})});function Nt(e){let t=(e??``).toLowerCase();return t?t.includes(`android`)?`android`:t.includes(`iphone`)||t.includes(`ipad`)||t.includes(`ipod`)?`ios`:t.includes(`mac`)||t.includes(`darwin`)?`macos`:t.includes(`win`)?`windows`:t.includes(`linux`)||t.includes(`x11`)||t.includes(`cros`)?`linux`:null:null}function Pt(){if(typeof navigator>`u`)return`unknown`;let e=typeof navigator.userAgent==`string`?navigator.userAgent:``,t=Nt(e);if(t===`android`||t===`ios`)return t;let n=navigator.userAgentData,r=Nt(n?.platform);if(r)return r;let i=typeof navigator.platform==`string`?navigator.platform:``;return Nt(i)===`macos`&&(navigator.maxTouchPoints??0)>1?`ios`:Nt(i)??Nt(e)??`unknown`}function Q(){if(typeof navigator>`u`)return`unknown`;let e=`${navigator.userAgentData?.architecture??``} ${navigator.userAgent??``} ${navigator.platform??``}`.toLowerCase();return/arm|aarch64|apple silicon/.test(e)?`arm64`:/x86_64|amd64|x64|win64|wow64|intel/.test(e)?`x64`:`unknown`}function Ft(){return typeof window<`u`&&window.__TAURI__!==void 0}var It={windows:`chat.desktopDownloadOsWindows`,macos:`chat.desktopDownloadOsMacos`,linux:`chat.desktopDownloadOsLinux`,android:`chat.desktopDownloadOsAndroid`,ios:`chat.desktopDownloadOsIos`,unknown:`chat.desktopDownloadOsUnknown`},Lt=[`windows`,`macos`,`linux`];function Rt(e){if(typeof e!=`number`||!Number.isFinite(e)||e<=0)return null;let t=e/1048576;return t>=10?`${Math.round(t)} MB`:`${t.toFixed(1)} MB`}function zt(e){try{return new URL(e).host}catch{return e}}function Bt(e){return e.url||e.mirrors[0]||``}function Vt(e,t){let n=document.createElement(`a`);n.href=e,n.download=t,n.target=`_blank`,n.rel=`noopener`,n.style.display=`none`,document.body.appendChild(n),n.click(),n.remove()}var Ht=(0,J.memo)(function({onHandoffToAi:e}){let{t}=L(),[n,i]=(0,J.useState)(`idle`),[a,o]=(0,J.useState)(null),[s,c]=(0,J.useState)(!1),l=(0,J.useRef)(null),u=(0,J.useRef)(!0),d=(0,J.useRef)(!1),f=(0,J.useRef)(!1);(0,J.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]);let m=(0,J.useMemo)(()=>Pt(),[]),g=(0,J.useMemo)(()=>Q(),[]),_=(0,J.useMemo)(()=>Ft(),[]),v=t(It[m]),b=m===`android`||m===`ios`,x=_?t(`chat.desktopDownloadOtherPlatforms`):t(`chat.desktopDownloadTitle`,{os:v}),S=t(_?`chat.desktopDownloadOtherPlatforms`:`chat.desktopDownloadRecommend`),w=a?.artifacts??{},T=w[m]?.[0],E=a?.page||xe(),D=g===`arm64`&&(m===`windows`||m===`linux`),O=(0,J.useCallback)(()=>{d.current||(d.current=!0,i(`loading`),K.system.desktopDownload().then(e=>{u.current&&(e.success&&e.data?(o(e.data),i(`ready`)):i(`failed`))}).catch(()=>{u.current&&i(`failed`)}))},[]);(0,J.useEffect)(()=>{if(!s)return;let e=e=>{l.current?.contains(e.target)||c(!1)},t=e=>{e.key===`Escape`&&c(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[s]);let k=(0,J.useCallback)(()=>{window.open(E,`_blank`,`noopener`)},[E]),ee=(0,J.useCallback)(e=>{let n=Bt(e);c(!1),n?(Vt(n,e.name),e.url&&e.source===`mirror`&&z.info(t(`chat.desktopDownloadViaMirrorToast`))):(k(),z.warning(t(`chat.desktopDownloadUnavailable`)))},[k,t]),A=(0,J.useCallback)(()=>{b?(k(),z.info(t(`chat.desktopDownloadMobileHint`))):n===`failed`?(k(),z.warning(t(`chat.desktopDownloadUnavailable`))):n===`ready`?T?ee(T):(k(),z.warning(t(`chat.desktopDownloadUnavailable`))):(f.current=!0,O(),z.info(t(`chat.desktopDownloadFetching`)))},[ee,b,k,T,O,n,t]);(0,J.useEffect)(()=>{(n===`ready`||n===`failed`)&&f.current&&(f.current=!1,A())},[n,A]);let te=(0,J.useCallback)(()=>{let n=T?Bt(T):E,r=(T?.mirrors??[]).slice(0,3).join(` `);e(t(`chat.desktopDownloadPrompt`,{os:v,url:n||E,mirrors:r||t(`chat.desktopDownloadPromptNoMirror`)})),c(!1),z.success(t(`chat.desktopDownloadHandToAiHint`))},[e,v,T,E,t]),ne=(e,n,r)=>{let i=Rt(e.size),a=ge(e.name);return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>ee(e),className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(y,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[(0,Y.jsxs)(`span`,{className:`font-medium`,children:[r?`${t(It[n])} · `:``,a]}),e.source===`mirror`&&(0,Y.jsx)(`span`,{className:`ms-1.5 rounded bg-accent-yellow/15 px-1 py-0.5 text-badge text-accent-yellow`,children:t(`chat.desktopDownloadFromMirror`)}),(0,Y.jsx)(`span`,{className:`mt-0.5 block truncate text-badge text-dark-muted`,children:e.name})]}),i&&(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted`,children:t(`chat.desktopDownloadSize`,{size:i})})]},`${n}-${e.name}`)},re=Lt.filter(e=>e!==m&&(w[e]?.length??0)>0),ie=T?.mirrors??[];return(0,Y.jsxs)(`div`,{className:`relative flex shrink-0 items-center`,ref:l,onPointerEnter:O,onFocus:O,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:A,className:`flex h-8 items-center gap-1.5 rounded-s-full ps-2.5 pe-1.5 text-meta font-medium text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:x,"aria-label":x,children:[(0,Y.jsx)(y,{size:14,className:`shrink-0`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`hidden whitespace-nowrap sm:inline`,children:S})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{s||O(),c(!s)},className:`flex h-8 w-4 items-center justify-center rounded-e-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:t(`chat.desktopDownloadMenu`),"aria-label":t(`chat.desktopDownloadMenu`),"aria-haspopup":`menu`,"aria-expanded":s,children:(0,Y.jsx)(C,{size:11,className:B(`transition-transform`,s&&`rotate-180`),"aria-hidden":`true`})}),s&&(0,Y.jsxs)(`div`,{role:`menu`,"aria-label":t(`chat.desktopDownloadMenu`),className:`absolute bottom-full left-0 mb-1 z-50 w-72 overflow-hidden rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop`,children:[(0,Y.jsx)(`div`,{className:`border-b border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadYourSystem`,{os:v})}),(0,Y.jsx)(`div`,{className:`py-1`,children:(w[m]??[]).length>0?(w[m]??[]).map(e=>ne(e,m,!1)):(0,Y.jsx)(`div`,{className:`px-3 py-1.5 text-meta leading-relaxed text-dark-muted`,children:t(b?`chat.desktopDownloadMobileMenuHint`:n===`failed`?`chat.desktopDownloadUnavailable`:`chat.desktopDownloadLoading`)})}),D&&(0,Y.jsx)(`div`,{className:`border-t border-dark-border px-3 py-1.5 text-badge leading-relaxed text-accent-yellow`,children:t(`chat.desktopDownloadArmHint`)}),re.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`border-y border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadOtherSystems`)}),(0,Y.jsx)(`div`,{className:`py-1`,children:[...re].flatMap(e=>(w[e]??[]).map(t=>ne(t,e,!0)))})]}),(0,Y.jsx)(`div`,{className:`border-y border-dark-border px-3 py-1.5 text-badge font-semibold uppercase tracking-wide text-dark-muted`,children:t(`chat.desktopDownloadTrouble`)}),(0,Y.jsxs)(`div`,{className:`py-1`,children:[ie.slice(0,2).map(e=>(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{c(!1),Vt(e,T?.name??``)},className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(h,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:t(`chat.desktopDownloadViaMirror`,{host:zt(e)})})]},e)),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{c(!1),k()},className:`flex w-full items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(h,{size:12,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:t(`chat.desktopDownloadOpenRelease`)})]})]}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:te,className:`flex w-full items-center gap-2 px-3 py-2 text-start text-xs text-accent-blue transition-colors hover:bg-dark-hover`,children:[(0,Y.jsx)(p,{size:12,className:`shrink-0`,"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:t(`chat.desktopDownloadHandToAi`)}),(0,Y.jsx)(`span`,{className:`mt-0.5 block text-badge text-dark-muted`,children:t(`chat.desktopDownloadHandToAiDesc`)})]})]})}),m===`macos`&&(0,Y.jsx)(`div`,{className:`border-t border-dark-border px-3 py-1.5 text-badge leading-relaxed text-dark-muted/80`,children:t(`chat.desktopDownloadMacUnsignedHint`)}),n!==`ready`&&n!==`failed`&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-t border-dark-border px-3 py-1.5 text-badge text-dark-muted`,children:[(0,Y.jsx)(r,{size:10,className:`animate-spin`,"aria-hidden":`true`}),t(`chat.desktopDownloadFetching`)]})]})]})});function Ut(e,t){if(!e)return t;let n=e.includes(`\\`)?`\\`:`/`;return e.endsWith(n)?e+t:e+n+t}function Wt(e,t=48){let n=e.replace(/[\\/]+$/,``);if(n.length<=t)return n;let r=n.includes(`\\`)?`\\`:`/`;return`…${r}${n.split(/[\\/]+/).filter(Boolean).slice(-2).join(r)}`}function Gt(e){return e.replace(/[\\/]+/g,`/`).replace(/\/+$/,``).toLowerCase()}function Kt({isOpen:e,initial:t,onClose:n,onConfirm:i}){let{t:a}=L(),{visible:o,phase:s}=Be(e),[l,u]=(0,J.useState)(t),[d,f]=(0,J.useState)(null),[p,m]=(0,J.useState)([]),[h,g]=(0,J.useState)(!1),[_,v]=(0,J.useState)(``),[y,b]=(0,J.useState)(t),x=(0,J.useRef)(null),S=(0,J.useCallback)(async e=>{g(!0),v(``);try{let t=await K.dirs.list(e);if(!t.success||!t.data){v(t.error||a(`chat.dirPickerLoadError`));return}u(t.data.path),f(t.data.parent),m(t.data.dirs||[]),b(t.data.path)}catch(e){v(e instanceof Error?e.message:a(`chat.dirPickerLoadError`))}finally{g(!1)}},[a]);(0,J.useEffect)(()=>{e&&S(t)},[e,t,S]),(0,J.useEffect)(()=>{x.current?.focus()},[]),(0,J.useEffect)(()=>{if(!e)return;let t=e=>{e.key===`Escape`&&(e.preventDefault(),e.stopPropagation(),n())};return document.addEventListener(`keydown`,t),document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,t),document.body.style.overflow=``}},[e,n]);let C=(0,J.useCallback)(()=>{let e=y.trim();e&&S(e)},[y,S]),T=(0,J.useCallback)(()=>{d&&S(d)},[d,S]);return o?(0,Y.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center overflow-hidden p-4`,role:`dialog`,"aria-modal":`true`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-0 ui-scrim ui-overlay-backdrop`,"data-phase":s,onClick:n}),(0,Y.jsxs)(`div`,{className:`relative w-full max-w-lg mx-4 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-xl shadow-pop flex flex-col max-h-[70vh] ui-overlay-panel`,"data-phase":s,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-4 py-2.5 border-b border-dark-border shrink-0`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-compact font-semibold text-dark-text`,children:[(0,Y.jsx)(N,{size:15,className:`text-accent-blue`,"aria-hidden":`true`}),a(`chat.dirPickerTitle`)]}),(0,Y.jsx)(`button`,{type:`button`,onClick:n,className:`rounded p-1 text-dark-muted hover:bg-dark-hover hover:text-dark-text transition-colors`,"aria-label":a(`a11y.close`),children:(0,Y.jsx)(ae,{size:15,"aria-hidden":`true`})})]}),(0,Y.jsxs)(`div`,{className:`p-4 flex flex-col gap-3 min-h-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1`,children:[(0,Y.jsx)(w,{size:13,className:`absolute start-2.5 top-1/2 -translate-y-1/2 text-dark-muted/60`,"aria-hidden":`true`}),(0,Y.jsx)(`input`,{ref:x,value:y,onChange:e=>b(e.target.value),onKeyDown:e=>{e.key===`Enter`&&C()},placeholder:a(`chat.dirPickerEnterPath`),spellCheck:!1,className:`w-full rounded-lg border border-dark-border bg-dark-surface ps-8 pe-2.5 py-1.5 text-xs font-mono text-dark-text
3
+ placeholder-dark-muted/50 focus:outline-none focus:border-accent-blue/50 focus:ring-2 focus:ring-accent-blue/10`})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:C,disabled:h||!y.trim(),className:`shrink-0 rounded-lg border border-dark-border px-2.5 py-1.5 text-xs text-dark-muted
4
+ hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 transition-colors`,children:a(`chat.dirPickerGo`)})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`flex-1 truncate font-mono text-meta text-dark-muted bg-dark-surface rounded-md px-2 py-1 border border-dark-border`,title:l,children:l||a(`chat.noWorkspaceDir`)}),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void T(),disabled:h||!l,className:`shrink-0 flex items-center gap-1 rounded-md border border-dark-border px-2 py-1 text-meta text-dark-muted
5
+ hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 transition-colors`,children:[(0,Y.jsx)(c,{size:12,"aria-hidden":`true`}),a(`chat.dirPickerUp`)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-y-auto custom-scrollbar rounded-lg border border-dark-border bg-dark-surface divide-y divide-dark-border/60`,children:h?(0,Y.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-6 text-xs text-dark-muted`,children:[(0,Y.jsx)(r,{size:14,className:`animate-spin`,"aria-hidden":`true`}),a(`chat.loading`)]}):_?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-xs text-accent-red`,children:_}):p.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-xs text-dark-muted/60 text-center`,children:a(`chat.dirPickerNoDirs`)}):p.map(e=>{let t=Ut(l,e);return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void S(t),className:`w-full flex items-center gap-2 px-3 py-1.5 text-start text-xs text-dark-text
6
+ hover:bg-dark-hover transition-colors group`,children:[(0,Y.jsx)(A,{size:13,className:`shrink-0 text-accent-yellow/80 group-hover:text-accent-yellow`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e}),(0,Y.jsx)(P,{size:12,className:`shrink-0 ms-auto text-dark-muted/40`,"aria-hidden":`true`})]},e)})}),(0,Y.jsx)(Pe,{variant:`accent`,className:`w-full`,onClick:()=>i(l),disabled:!l,loading:h,children:a(`chat.dirPickerConfirm`)})]})]})]}):null}var qt=(0,J.memo)(function({workspaceDir:e,onSelect:t,onNewSessionInDir:n}){let{t:r}=L(),i=Ae(e=>e.recentDirs),a=Ue(e=>e.projects),o=Ue(e=>e.hidden),s=Ue(e=>e.sort),c=Ue(e=>e.disabled),l=Ue(e=>e.lastError),[u,d]=(0,J.useState)(!1),[f,p]=(0,J.useState)(!1),m=(0,J.useRef)(null);(0,J.useEffect)(()=>{if(!u)return;let e=Ue.getState();e.disabled||e.lastFetchedAt>0||e.refresh()},[u]),(0,J.useEffect)(()=>{if(!u)return;let e=e=>{m.current&&!m.current.contains(e.target)&&d(!1)},t=e=>{e.key===`Escape`&&d(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[u]);let h=(0,J.useCallback)(e=>{let n=e?.trim?.()||``;n&&(d(!1),p(!1),t(n))},[t]),g=(0,J.useCallback)(e=>{let t=e?.trim?.()||``;t&&n&&(d(!1),p(!1),n(t))},[n]),_=new Set(o),v=c?[]:We(a.filter(e=>e.rootExists&&!_.has(e.projectId)),s),y=new Set(v.map(e=>Gt(e.root))),b=i.filter(e=>!y.has(Gt(e))),x=e?Gt(e):null,S=v.length>0||a.length===0&&!c&&l!==null;return(0,Y.jsxs)(`div`,{className:`relative min-w-0 max-w-[min(70%,26rem)]`,ref:m,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>d(e=>!e),className:B(`flex w-full items-center gap-1 px-2 py-0.5 rounded-full border text-xs whitespace-nowrap transition-colors cursor-pointer`,u?`border-accent-blue/40 text-accent-blue bg-accent-blue/10`:`border-dark-border text-dark-muted hover:bg-dark-hover hover:text-dark-text`),title:e?`${e}\n${r(`chat.clickToSwitchDir`)}`:r(`chat.clickToSwitchDir`),"aria-label":r(`chat.clickToSwitchDir`),"aria-expanded":u,"aria-haspopup":`menu`,children:[(0,Y.jsx)(N,{size:12,className:`shrink-0 text-accent-blue/80`,"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`truncate font-mono text-meta`,children:e?Wt(e):r(`chat.noWorkspaceDir`)}),(0,Y.jsx)(T,{size:11,className:B(`shrink-0 transition-transform`,u&&`rotate-180`),"aria-hidden":`true`})]}),u&&(0,Y.jsxs)(`div`,{role:`menu`,className:`absolute bottom-full right-0 mb-2 w-72 max-w-[calc(100vw-1.5rem)] max-h-[70vh] overflow-y-auto custom-scrollbar rounded-xl border border-dark-border bg-dark-overlay ui-surface-overlay shadow-pop z-40 animate-fade-in`,children:[S&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`px-3 pt-2.5 pb-1 text-badge font-semibold uppercase tracking-wide text-dark-muted/50 select-none`,children:r(`chat.projectDirs`)}),v.length===0?(0,Y.jsx)(`div`,{className:`px-3 pb-2 text-meta text-accent-red/80 select-none`,children:r(`chat.projectsLoadFailed`)}):(0,Y.jsx)(`div`,{className:`max-h-44 overflow-y-auto custom-scrollbar`,"data-testid":`dir-picker-projects`,children:v.map(e=>{let t=x!==null&&Gt(e.root)===x;return(0,Y.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`dir-picker-project-row`,"data-project-id":e.projectId,onClick:()=>h(e.root),className:B(`min-w-0 flex-1 flex items-center gap-2 px-3 py-1.5 text-start text-xs transition-colors group`,t?`text-accent-blue bg-accent-blue/5`:`text-dark-text hover:bg-dark-hover`),title:`${r(`chat.dirSwitchHere`)}\n${e.root}`,children:[(0,Y.jsx)(A,{size:12,className:B(`shrink-0`,t?`text-accent-blue`:`text-accent-yellow/80 group-hover:text-accent-yellow`),"aria-hidden":`true`}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`block truncate`,children:e.name}),(0,Y.jsx)(`span`,{className:`block truncate font-mono text-meta text-dark-muted/60`,children:e.root})]}),t&&(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-accent-blue`,children:`✓`})]}),n&&(0,Y.jsx)(`button`,{type:`button`,"data-testid":`dir-picker-project-new-session`,"data-project-id":e.projectId,onClick:t=>{t.stopPropagation(),g(e.root)},className:`shrink-0 px-2 text-dark-muted hover:text-accent-blue hover:bg-dark-hover transition-colors`,title:r(`chat.dirNewSessionHere`),"aria-label":`${r(`chat.dirNewSessionHere`)}:${e.name}`,children:(0,Y.jsx)(j,{size:12,"aria-hidden":`true`})})]},e.projectId)})}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`})]}),(0,Y.jsx)(`div`,{className:`px-3 pt-2.5 pb-1 text-badge font-semibold uppercase tracking-wide text-dark-muted/50 select-none`,children:r(`chat.recentDirs`)}),b.length===0?(0,Y.jsx)(`div`,{className:`px-3 pb-2 text-meta text-dark-muted/50 select-none`,children:r(`chat.noRecentDirs`)}):(0,Y.jsx)(`div`,{className:`max-h-56 overflow-y-auto custom-scrollbar`,children:b.map(e=>{let t=x!==null&&Gt(e)===x;return(0,Y.jsxs)(`div`,{className:`flex items-stretch`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,"data-testid":`dir-picker-recent-row`,onClick:()=>h(e),className:B(`min-w-0 flex-1 flex items-center gap-2 px-3 py-1.5 text-start text-xs transition-colors group`,t?`text-accent-blue bg-accent-blue/5`:`text-dark-text hover:bg-dark-hover`),title:`${r(`chat.dirSwitchHere`)}\n${e}`,children:[(0,Y.jsx)(A,{size:12,className:B(`shrink-0`,t?`text-accent-blue`:`text-accent-yellow/80 group-hover:text-accent-yellow`),"aria-hidden":`true`}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-mono text-meta`,children:e}),t&&(0,Y.jsx)(`span`,{className:`ms-auto shrink-0 text-badge text-accent-blue`,children:`✓`})]}),n&&(0,Y.jsx)(`button`,{type:`button`,"data-testid":`dir-picker-recent-new-session`,onClick:t=>{t.stopPropagation(),g(e)},className:`shrink-0 px-2 text-dark-muted hover:text-accent-blue hover:bg-dark-hover transition-colors`,title:r(`chat.dirNewSessionHere`),"aria-label":`${r(`chat.dirNewSessionHere`)}:${e}`,children:(0,Y.jsx)(j,{size:12,"aria-hidden":`true`})})]},e)})}),(0,Y.jsx)(`div`,{className:`border-t border-dark-border`}),(0,Y.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{d(!1),p(!0)},className:`w-full flex items-center gap-2 px-3 py-2 text-start text-xs text-accent-blue hover:bg-dark-hover transition-colors`,children:[(0,Y.jsx)(P,{size:13,"aria-hidden":`true`}),r(`chat.chooseOtherDir`)]})]}),(0,Z.createPortal)((0,Y.jsx)(Kt,{isOpen:f,initial:e||``,onClose:()=>p(!1),onConfirm:h}),document.body)]})}),Jt=`__files__`,Yt=`__sessions__`;function Xt(e){return e===`enqueue`?`summarize`:e===`summarize`?`next-step`:e===`next-step`?`direct`:`enqueue`}function Zt(e){return e.replace(/[\\/]+$/,``).replace(/\\/g,`/`).toLowerCase()}function Qt(e){return[{key:Jt,label:e.files},{key:Yt,label:e.sessions}]}function $t(e){return e?Zt(e):`￿`}function en(e,t){return t===`__files__`?e.filter(e=>e.kind===`file`):[...e.filter(e=>e.kind===`session`)].sort((e,t)=>$t(e.kind===`session`?e.dir:``).localeCompare($t(t.kind===`session`?t.dir:``)))}function tn(e,t,n){if(e.length===0)return t;let r=e.indexOf(t),i=r<0?-1:r;return n?e[(i+1)%e.length]:e[((i<0?e.length:i)-1+e.length)%e.length]}var nn=new Set([`running`]);function rn(e){return nn.has(String(e.status||``))?!0:e.live===!0}function an(e,t){let n=[];for(let r of e){let e=String(r.id||r.sessionId||``);if(!e||e===t)continue;let i=String(r.title||e.slice(0,8));n.push({kind:`session`,key:e,label:i,detail:e.slice(0,8),dir:String(r.workspaceDir||``),status:r.status===void 0?void 0:String(r.status),updatedAt:r.updatedAt===void 0?void 0:String(r.updatedAt),messageCount:typeof r.messageCount==`number`?r.messageCount:void 0})}return n}function on(e,t,n=`active`){let r=an(e,t);if(n===`all`)return r;let i=new Map(e.map(e=>[String(e.id||e.sessionId||``),e]));return r.filter(e=>{let t=i.get(e.key);return t?rn(t):!1})}var sn={enqueue:`chat.mentionDeliveryEnqueue`,summarize:`chat.mentionDeliverySummarize`,"next-step":`chat.mentionDeliveryNextStep`,direct:`chat.mentionDeliveryDirect`},cn={enqueue:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`,summarize:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`,"next-step":`bg-accent-blue/20 text-accent-blue font-medium`,direct:`bg-accent-green/20 text-accent-green font-medium`};function ln(e){return e===`running`?`bg-accent-green/15 text-accent-green`:e===`paused`||e===`interrupted`||e===`error`?`bg-accent-yellow/15 text-accent-yellow`:`bg-dark-hover text-dark-muted`}function un(e){return e===`running`?`chat.mentionStatusRunning`:e===`paused`||e===`interrupted`?`chat.mentionStatusPaused`:e===`error`?`chat.mentionStatusError`:e===`stopped`?`chat.mentionStatusStopped`:`chat.mentionStatusIdle`}function dn(e){return e?/^\d{12,}$/.test(e)?Number(e):e:0}function fn({isOpen:e,items:t,selectedIndex:n,query:a,isSearching:o,onSelect:s,onHover:c,selectedCount:l=0,onFinish:u,tabs:d,activeTab:f,onTabChange:p,scope:m=`active`,onToggleScope:h,deliveryMode:g=`enqueue`,onToggleDelivery:_}){let{t:v}=L(),{visible:y,phase:b}=Be(e);if(!y)return null;let x=!!(p&&d&&d.length>1);return(0,Y.jsxs)(`div`,{className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 ui-overlay-panel-fade`,"data-phase":b,children:[(0,Y.jsxs)(`div`,{className:`max-h-60 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:a?`@${a}`:`@ ${v(`chat.mentionFilesGroup`)} / ${v(`chat.mentionSessionsGroup`)}`}),(0,Y.jsxs)(`span`,{className:`opacity-70 flex items-center gap-2`,children:[l>0&&(0,Y.jsx)(`span`,{className:`px-1.5 py-0.5 rounded-full bg-accent-blue/20 text-accent-blue font-medium`,children:v(`chat.selectedCountShort`,{n:l})}),(0,Y.jsx)(`span`,{children:v(x?`chat.mentionTabHint`:`chat.fileMentionHelpMulti`)})]})]}),x&&(0,Y.jsx)(`div`,{className:`flex items-center gap-1 px-3 py-1.5 border-b border-dark-border bg-dark-surface overflow-x-auto custom-scrollbar`,children:d.map(e=>{let t=e.key===f;return(0,Y.jsx)(`button`,{type:`button`,onMouseDown:t=>{t.preventDefault(),p(e.key)},className:`px-2 py-0.5 rounded text-meta whitespace-nowrap transition-colors ${t?`bg-accent-blue/20 text-accent-blue font-medium`:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`}`,children:e.label},e.key)})}),t.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-6 text-center text-dark-muted text-xs flex flex-col items-center gap-1`,children:o?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(r,{size:16,className:`animate-spin`}),(0,Y.jsx)(`span`,{children:v(`chat.searchingFiles`)})]}):(0,Y.jsx)(`span`,{children:v(x&&f!==`__files__`?`chat.mentionEmptySessions`:`chat.noMatchingFiles`)})}):t.map((e,r)=>{let a=t[r-1],o=a&&a.kind===`session`?a.dir||``:null,l=e.kind===`session`?e.dir||``:null,u=!a||a.kind!==e.kind||l!==null&&o!==l,d=l===null?v(`chat.mentionFilesGroup`):`📁 ${l||v(`chat.mentionTabUnknownDir`)}`;return(0,Y.jsxs)(`div`,{children:[u&&(0,Y.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-badge uppercase tracking-wide text-dark-muted/70 bg-dark-surface/40 truncate`,title:d,children:d}),(0,Y.jsxs)(`button`,{onClick:()=>s(e),onMouseEnter:()=>c(r),className:`w-full px-3 py-1.5 flex items-center gap-2 text-start text-xs transition-colors border-s-2 ${r===n?`bg-accent-blue/20 text-accent-blue border-accent-blue`:`hover:bg-dark-hover text-dark-text border-transparent`}`,children:[e.kind===`session`?(0,Y.jsx)(oe,{size:12,className:`text-accent-blue shrink-0`}):e.isDir?(0,Y.jsx)(A,{size:12,className:`text-accent-yellow shrink-0`}):(0,Y.jsx)(i,{size:12,className:`text-dark-muted shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e.label}),e.kind===`session`?(0,Y.jsxs)(`span`,{className:`ms-auto flex shrink-0 items-center gap-1.5`,children:[e.detail&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate`,children:e.detail}),e.updatedAt&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted/70`,children:V(dn(e.updatedAt),Date.now(),v)}),e.messageCount!==void 0&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted/70`,children:v(`chat.mentionMsgCount`,{count:e.messageCount})}),(0,Y.jsx)(`span`,{className:`px-1.5 py-0.5 rounded-full text-badge whitespace-nowrap ${ln(e.status)}`,children:v(un(e.status))})]}):e.detail&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate ms-auto`,children:e.detail})]})]},e.key)})]}),u&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-t border-dark-border bg-dark-surface`,children:[(0,Y.jsxs)(`span`,{className:`flex items-center gap-2 text-badge text-dark-muted`,children:[x&&h&&(0,Y.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:h,className:`px-1.5 py-0.5 rounded text-badge transition-colors ${m===`all`?`bg-accent-blue/20 text-accent-blue font-medium`:`text-dark-muted hover:text-dark-text hover:bg-dark-hover`}`,title:v(`chat.mentionScopeHint`),children:[v(`chat.mentionScopeLabel`),v(m===`all`?`chat.mentionScopeAll`:`chat.mentionScopeActive`)]}),x&&_&&(0,Y.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:_,className:`px-1.5 py-0.5 rounded text-badge transition-colors ${cn[g]}`,title:v(`chat.mentionDeliveryHint`),children:[v(`chat.mentionDeliveryLabel`),v(sn[g])]}),(0,Y.jsx)(`span`,{children:l>0?v(`chat.selectedFilesCount`,{n:l}):v(`chat.enterInsertMulti`)})]}),(0,Y.jsx)(Pe,{variant:`accent`,size:`sm`,onClick:u,children:v(`chat.finishMention`)})]})]})}function pn({open:e,onClose:n,onSelect:r}){let{t:i}=L(),[a,o]=(0,J.useState)([]),[s,c]=(0,J.useState)(!1),[l,u]=(0,J.useState)(``);(0,J.useEffect)(()=>{e&&(u(``),c(!0),K.skills.list().then(e=>{let t=Array.isArray(e.data)?e.data:[];o(t.filter(e=>e.enabled!==!1))}).catch(()=>o([])).finally(()=>c(!1)))},[e]);let d=(0,J.useMemo)(()=>{let e=l.trim().toLowerCase();return e?a.filter(t=>[t.id,t.name,t.description,t.category,...t.tags||[]].join(` `).toLowerCase().includes(e)):a},[a,l]);return(0,Y.jsx)(ze,{isOpen:e,onClose:n,title:i(`skills.pickTitle`),size:`lg`,children:(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 rounded-lg bg-dark-bg border border-dark-border focus-within:border-accent-blue`,children:[(0,Y.jsx)(S,{size:14,className:`text-dark-muted shrink-0`}),(0,Y.jsx)(`input`,{value:l,onChange:e=>u(e.target.value),placeholder:i(`skills.pickPlaceholder`),autoFocus:!0,className:`flex-1 bg-transparent outline-none text-sm placeholder-dark-muted/60`}),s&&(0,Y.jsx)(t,{size:13,className:`animate-spin text-dark-muted`})]}),s?(0,Y.jsx)(`div`,{className:`flex items-center justify-center py-12`,children:(0,Y.jsx)(t,{size:20,className:`animate-spin text-accent-blue`})}):d.length===0?(0,Y.jsx)(`div`,{className:`text-center py-12 text-sm text-dark-muted`,children:i(`skills.pickEmpty`)}):(0,Y.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-2`,children:d.map(e=>(0,Y.jsxs)(`button`,{onClick:()=>r(e),className:`text-start rounded-lg border border-dark-border p-3 flex flex-col gap-1 transition-colors hover:border-accent-blue/50 hover:bg-dark-hover`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 min-w-0`,children:[(0,Y.jsxs)(`span`,{className:`font-medium text-sm truncate`,children:[e.icon||`⭐`,` `,e.name]}),(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted shrink-0`,children:e.injection||`lazy`})]}),(0,Y.jsxs)(`div`,{className:`text-xs text-dark-muted truncate font-mono`,children:[`$`,e.id]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted line-clamp-2`,children:e.description}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mt-1`,children:[(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-dark-bg border border-dark-border text-dark-muted truncate`,children:e.category||`—`}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 text-meta text-accent-blue shrink-0`,children:[(0,Y.jsx)(M,{size:11}),i(`skills.pickUse`)]})]})]},e.id))})]})})}function mn({isOpen:e,items:t,selectedIndex:n,query:i,isLoading:a,onSelect:o,onHover:s}){let{t:c}=L(),{visible:l,phase:u}=Be(e);return l?(0,Y.jsx)(`div`,{className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 ui-overlay-panel-fade`,"data-phase":u,children:(0,Y.jsxs)(`div`,{className:`max-h-60 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text truncate`,children:i?`$${i}`:c(`chat.skillMenuTitle`)}),(0,Y.jsx)(`span`,{className:`opacity-70 shrink-0`,children:c(`chat.skillMenuHint`)})]}),t.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-6 text-center text-dark-muted text-xs flex flex-col items-center gap-1`,children:a?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(r,{size:16,className:`animate-spin`}),(0,Y.jsx)(`span`,{children:c(`chat.skillMenuLoading`)})]}):(0,Y.jsx)(`span`,{children:c(`chat.skillMenuEmpty`)})}):t.map((e,t)=>(0,Y.jsxs)(`button`,{onClick:()=>o(e),onMouseEnter:()=>s(t),className:`w-full px-3 py-1.5 flex items-center gap-2 text-start text-xs transition-colors border-s-2 ${t===n?`bg-accent-blue/20 text-accent-blue border-accent-blue`:`hover:bg-dark-hover text-dark-text border-transparent`}`,children:[(0,Y.jsx)(`span`,{className:`shrink-0`,"aria-hidden":`true`,children:e.icon||(0,Y.jsx)(p,{size:12,className:`text-accent-blue`})}),(0,Y.jsx)(`span`,{className:`truncate`,children:e.name||e.id}),(0,Y.jsxs)(`span`,{className:`text-badge font-mono text-dark-muted shrink-0`,children:[`$`,e.id]}),e.description&&(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted truncate ms-auto`,children:e.description})]},e.id))]})}):null}function hn(e){for(let t=e.length-1;t>=0;t--)if(e[t]===`$`){if(t>0&&/\w/.test(e.charAt(t-1)))continue;return t}return-1}function gn(e,t){let n=t.filter(e=>e.enabled!==!1);if(!e)return`prefix`;for(let t of n)if(t.id.toLowerCase()===e)return`exact`;for(let t of n)if(t.id.toLowerCase().startsWith(e))return`prefix`;return null}function _n(e,t,n){let r=e.slice(0,t),i=hn(r);if(i===-1)return{active:!1,query:``,start:-1};let a=r.slice(i+1);if(a.length>=200||!/^[\w.\-\\/\s]*$/.test(a))return{active:!1,query:``,start:-1};let o=(a.split(/[\s/\\]/)[0]??``).toLowerCase();return(n.length===0?`prefix`:gn(o,n))===`prefix`?{active:!0,query:a,start:i}:{active:!1,query:``,start:-1}}function vn(e,t){let n=t.trim().toLowerCase();if(!n)return 1;let r=e.id.toLowerCase(),i=(e.name||``).toLowerCase(),a=(e.description||``).toLowerCase(),o=(e.tags||[]).join(` `).toLowerCase();return r===n||i===n?100:r.startsWith(n)?90:i.startsWith(n)?80:r.includes(n)?60:i.includes(n)?55:o.includes(n)?40:a.includes(n)?30:0}function yn(e,t){let n=t.replace(/^\$/,``).trim().split(/\s+/)[0]??``;return e.filter(e=>e.enabled!==!1).map(e=>({skill:e,score:vn(e,n)})).filter(e=>e.score>0).sort((e,t)=>t.score-e.score||e.skill.id.localeCompare(t.skill.id)).map(e=>e.skill)}var bn=class extends Error{code;constructor(e,t){super(t??e),this.code=e,this.name=`ScreenshotError`}};function xn(e){let t=document.createElement(`canvas`);t.width=e.videoWidth,t.height=e.videoHeight;let n=t.getContext(`2d`);if(!n)throw new bn(`failed`,`Canvas 2D context unavailable`);return n.drawImage(e,0,0,t.width,t.height),new Promise((e,n)=>{t.toBlob(t=>t?e(t):n(new bn(`failed`,`canvas.toBlob returned null`)),`image/png`)})}async function Sn(){if(!navigator.mediaDevices?.getDisplayMedia)throw new bn(`unsupported`,`Screen capture is not supported in this browser`);let e=await navigator.mediaDevices.getDisplayMedia({video:!0,audio:!1}).catch(e=>{let t=e instanceof DOMException?e.name:``;throw t===`NotAllowedError`||t===`AbortError`?new bn(`cancelled`,`User dismissed the screen picker`):new bn(`failed`,e instanceof Error?e.message:String(e))}),t=e.getTracks();try{let t=document.createElement(`video`);t.srcObject=e,t.muted=!0,t.playsInline=!0,await t.play().catch(()=>void 0),t.readyState<2&&await new Promise(e=>{let n=()=>e();t.addEventListener(`loadeddata`,n,{once:!0}),setTimeout(n,1e3)}),await new Promise(e=>requestAnimationFrame(()=>e()));let n=t.videoWidth,r=t.videoHeight;if(!n||!r)throw new bn(`failed`,`Captured video frame has no pixels`);let i=await xn(t);t.srcObject=null;let a=new Date().toISOString().replace(/[:.]/g,`-`).slice(0,19);return new File([i],`screenshot-${a}.png`,{type:`image/png`})}finally{for(let e of t)e.stop()}}var Cn=16e3;function wn(){let e=[`audio/webm;codecs=opus`,`audio/webm`,`audio/mp4`];if(typeof MediaRecorder>`u`)return``;for(let t of e)if(MediaRecorder.isTypeSupported(t))return t;return``}async function Tn(e){if(e.sampleRate===Cn&&e.numberOfChannels===1)return e.getChannelData(0);let t=Math.max(1,Math.ceil(e.length*Cn/e.sampleRate)),n=new OfflineAudioContext(1,t,Cn),r=n.createBufferSource();return r.buffer=e,r.connect(n.destination),r.start(0),(await n.startRendering()).getChannelData(0)}function En(e,t){let n=new ArrayBuffer(44+e.length*2),r=new DataView(n),i=(e,t)=>{for(let n=0;n<t.length;n++)r.setUint8(e+n,t.charCodeAt(n))};i(0,`RIFF`),r.setUint32(4,36+e.length*2,!0),i(8,`WAVE`),i(12,`fmt `),r.setUint32(16,16,!0),r.setUint16(20,1,!0),r.setUint16(22,1,!0),r.setUint32(24,t,!0),r.setUint32(28,t*2,!0),r.setUint16(32,2,!0),r.setUint16(34,16,!0),i(36,`data`),r.setUint32(40,e.length*2,!0);let a=44;for(let t=0;t<e.length;t++){let n=Math.max(-1,Math.min(1,e[t]??0));r.setInt16(a,n<0?n*32768:n*32767,!0),a+=2}return n}function Dn(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>{let e=String(r.result||``),n=e.indexOf(`,`);t(n>=0?e.slice(n+1):e)},r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function On(e){let[t,n]=(0,J.useState)(`idle`),[r,i]=(0,J.useState)(0),a=(0,J.useRef)(null),o=(0,J.useRef)(null),s=(0,J.useRef)([]),c=(0,J.useRef)(null),l=(0,J.useRef)(0),u=(0,J.useCallback)(()=>{o.current?.getTracks().forEach(e=>e.stop()),o.current=null},[]),d=(0,J.useCallback)(()=>{c.current&&=(clearInterval(c.current),null)},[]);return(0,J.useEffect)(()=>()=>{d(),a.current&&a.current.state!==`inactive`&&a.current.stop(),u()},[d,u]),{state:t,elapsedMs:r,start:(0,J.useCallback)(async()=>{if(t!==`idle`)return;if(typeof MediaRecorder>`u`)throw Error(`当前浏览器不支持语音输入(需要 MediaRecorder)。请使用 Chrome/Edge/Firefox 或桌面版。`);let e;try{e=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0}})}catch(e){throw e instanceof DOMException&&e.name===`NotAllowedError`?Error(`麦克风权限被拒绝。请在浏览器地址栏允许麦克风权限后重试。`):Error(`无法访问麦克风:`+(e instanceof Error?e.message:String(e)))}o.current=e,s.current=[];let r=new MediaRecorder(e,wn()?{mimeType:wn()}:void 0);r.ondataavailable=e=>{e.data&&e.data.size>0&&s.current.push(e.data)},a.current=r,r.start(),l.current=Date.now(),i(0),n(`recording`),c.current=setInterval(()=>i(Date.now()-l.current),100)},[t]),stop:(0,J.useCallback)(async()=>{let t=a.current;if(!t||t.state===`inactive`)throw Error(`当前没有进行中的录音。`);let r=new Promise(e=>{t.onstop=()=>e()});t.stop(),await r,d(),u(),a.current=null,n(`transcribing`);try{let t=new Blob(s.current,{type:wn()||`audio/webm`});s.current=[];let r=await t.arrayBuffer(),i=new AudioContext,a;try{a=await i.decodeAudioData(r)}finally{i.close()}if(a.duration<.25)return n(`idle`),``;let o=En(await Tn(a),Cn),c=await Dn(new Blob([o],{type:`audio/wav`})),l=await K.stt.transcribe(e,c,`wav`);if(!l.success)throw Error(l.error||`语音转写失败`);return l.data?.text??``}finally{n(`idle`)}},[e,d,u]),cancel:(0,J.useCallback)(()=>{let e=a.current;e&&e.state!==`inactive`&&e.stop(),a.current=null,s.current=[],d(),u(),n(`idle`)},[d,u])}}var kn=({isOpen:e,commands:t,selectedIndex:n,filter:r,onSelect:i,onHover:a,containerRef:o})=>{let{t:s}=L();return!e||t.length===0?null:(0,Y.jsxs)(`div`,{ref:o,className:`absolute bottom-full left-0 right-0 mb-2 bg-dark-overlay ui-surface-overlay border border-dark-border rounded-lg shadow-pop overflow-hidden z-50 max-h-72 overflow-y-auto custom-scrollbar`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 text-meta text-dark-muted border-b border-dark-border bg-dark-surface`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:r?`/${r}`:s(`slashCommands.quickCommands`)}),(0,Y.jsx)(`span`,{className:`opacity-70`,children:s(`slashCommands.help`)})]}),t.map((e,t)=>(0,Y.jsxs)(`button`,{"data-index":t,onClick:()=>i(e),onMouseEnter:()=>a(t),className:`w-full px-3 py-2 flex items-start gap-3 text-start transition-colors border-s-2 ${t===n?`bg-accent-blue/10 border-accent-blue`:`border-transparent hover:bg-dark-hover`}`,children:[(0,Y.jsx)(`span`,{className:`text-lg leading-none shrink-0`,"aria-hidden":`true`,children:e.icon}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`span`,{className:`text-sm font-medium text-dark-text`,children:[`/`,e.name]}),e.args&&(0,Y.jsx)(`span`,{className:`text-xs text-dark-muted`,children:e.args}),!e.local&&(0,Y.jsx)(`span`,{className:`text-badge px-1.5 py-0.5 rounded bg-accent-blue/20 text-accent-blue shrink-0`,children:s(`slashCommands.backend`)})]}),(0,Y.jsx)(`div`,{className:`text-xs text-dark-muted truncate`,children:e.description})]}),t===n&&(0,Y.jsx)(d,{size:14,className:`text-dark-muted shrink-0 mt-0.5`,"aria-hidden":`true`})]},e.id))]})},An=`xlsx.xls.csv.docx.txt.md.mdx.rst.adoc.ts.tsx.js.jsx.mjs.cjs.mts.cts.json.jsonc.yaml.yml.toml.xml.html.css.scss.less.py.rb.go.rs.java.kt.swift.c.h.cpp.hpp.cc.cs.sh.bash.zsh.ps1.bat.cmd.sql.graphql.proto.vue.svelte.astro.env.gitignore.gitattributes.editorconfig`.split(`.`),jn=RegExp(`(?:\\.(${An.join(`|`)})|dockerfile|makefile)$`,`i`),Mn=[`png`,`jpg`,`jpeg`,`webp`,`gif`,`bmp`,`svg`],Nn=Object.freeze([]),Pn=RegExp(`\\.(${Mn.join(`|`)})$`,`i`),Fn=10485760,In=An.map(e=>`.${e}`).join(`,`)+`,.Dockerfile,.Makefile,`+Mn.map(e=>`.${e}`).join(`,`),Ln=`.agent/attachments`,Rn=52428800,zn=10,Bn=`chat-col`,Vn=72,Hn=.7,Un=`deepseekcode.composerPref`,Wn=550;function Gn(){try{let e=window.localStorage.getItem(Un);return e===`collapsed`||e===`expanded`?e:`auto`}catch{return`auto`}}function Kn(){return typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(hover: hover) and (pointer: fine)`).matches}var qn=/["<>]/g;function Jn(e){return`<image name="${(e||`image`).replace(qn,``)}" />`}var Yn=e=>/\.xlsx?$/i.test(e)?o:/\.(csv|docx|txt|md|mdx|rst|adoc|json|jsonc|yaml|yml|toml|xml|html|css|scss|less|env|gitignore|gitattributes|editorconfig)$/i.test(e)?s:/\.(ts|tsx|js|jsx|mjs|cjs|mts|cts|py|rb|go|rs|java|kt|swift|c|h|cpp|hpp|cc|cs|sh|bash|zsh|ps1|bat|cmd|sql|graphql|proto|vue|svelte|astro|dockerfile|makefile)$/i.test(e)?f:i,Xn=50,Zn=5e3,Qn={enqueue:`chat.mentionDeliveryEnqueue`,summarize:`chat.mentionDeliverySummarize`,"next-step":`chat.mentionDeliveryNextStep`,direct:`chat.mentionDeliveryDirect`},$n={enqueue:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`,summarize:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`,"next-step":`bg-accent-blue/10 text-accent-blue`,direct:`bg-accent-blue/10 text-accent-blue`};function er(e,t){let n=e.slice(0,t),r=n.lastIndexOf(`@`);if(r===-1)return{active:!1,query:``,start:-1};let i=n.slice(r+1);return/^[\p{L}\p{N}_\-./]*$/u.test(i)?{active:!0,query:i,start:r}:{active:!1,query:``,start:-1}}function tr(e,t){let n=e.lastIndexOf(`
7
+ `,t-1)+1,r=e.slice(n,t);return!r.startsWith(`/`)||/\s/.test(r)?{active:!1,query:``}:{active:!0,query:r.slice(1)}}var nr=(0,J.memo)(function({sessionId:e,onSend:t,onRunShell:n,onStop:i,onPause:o,onResume:s,slashOptions:l,workspaceDir:d,onWorkspaceSelect:f,onNewSessionInDir:h,focusRequest:g,inputDisabled:_,inputDisabledHint:y}){let{t:b}=L(),x=R(t=>t.sessionInputs?.[e]??``),S=R(e=>e.setSessionInput),w=R(t=>t.generatingSessions?.includes(e)??!1),D=R(t=>t.pausedSessions?.includes(e)??!1),A=R(t=>t.sessionSuggestions?.[e]),ie=R(t=>t.sessionTurns?.[e]??``),j=R(e=>e.clearSessionSuggestion),M=!x&&!w&&!_&&A&&(A.turnId??``)===ie?A.text:``,oe=R(t=>t.pendingBySession?.[e])??Nn,N=oe.length,P=(0,J.useRef)(null),[F,I]=(0,J.useState)(null),ce=(0,J.useRef)(null),[le,fe]=(0,J.useState)(!1),pe=(0,J.useRef)(null),me=(0,J.useRef)(!1),he=(0,J.useRef)(0),[V,H]=(0,J.useState)([]),[ge,U]=(0,J.useState)(!1),[W,ve]=(0,J.useState)(!1),[be,xe]=(0,J.useState)(!1),[G,Se]=(0,J.useState)(!1),[Oe,Ae]=(0,J.useState)(``),[je,Me]=(0,J.useState)(0),[Ne,Pe]=(0,J.useState)([]),[Re,ze]=(0,J.useState)(!1),Be=(0,J.useRef)(-1),Ue=(0,J.useRef)([]);Ue.current=Ne;let We=(0,J.useRef)(null),Ge=(0,J.useCallback)(()=>{let t=R.getState().clearPending(e);t>0&&z.info(b(`toast.queueRevoked`,{count:t}))},[e,b]),Ke=(0,J.useCallback)(t=>{let n=R.getState();n.promotePending(e,t),!n.isGenerating(e)&&!n.isPaused(e)?de(e):z.info(b(`toast.queuePromoted`))},[e,b]),qe=(0,J.useCallback)(t=>{R.getState().removePending(e,t)&&z.info(b(`toast.queueRemoved`))},[e,b]),q=(0,J.useCallback)(t=>{S(e,t)},[e,S]),Xe=(0,J.useCallback)(()=>{let e=A?.text??``;e&&(q(e),requestAnimationFrame(()=>{let t=P.current;t&&(t.focus(),t.selectionStart=t.selectionEnd=e.length)}))},[q,A]),Ze=(0,J.useCallback)(t=>{let n=R.getState().removePending(e,t);if(!n)return;let r=[],i=[],a=(n.display?.content??n.content).replace(/<attachment path="([^"]*)"\s*\/>/g,(e,t)=>(r.push(t),``)).replace(/<image name="([^"]*)"\s*\/>/g,(e,t)=>(i.push(t),``)).trim();if(n.display)for(let e of n.display.pastes){let t=et(e.content),n=it(e.content),r=n>0?`[Pasted text #${t} +${n} lines]`:`[Pasted text #${t}]`;a=a.replace(RegExp(`\\[Pasted text #${e.id}(?:\\s*\\+\\d+ lines?)?\\]`,`g`),r)}for(let e of n.files??[])dn.current.add(e);let o=r.map((e,t)=>({id:`queued-att-${Date.now()}-${t}`,name:e.split(`/`).pop()||e,size:0,uploading:!1,path:e}));(n.images??[]).forEach((e,t)=>{o.push({id:`queued-img-${Date.now()}-${t}`,name:i[t]||`image-${t+1}.png`,size:Math.max(1,Math.round((e.length-e.indexOf(`,`)-1)*3/4)),uploading:!1,imageDataUri:e})}),o.length>0&&H(e=>[...e,...o].slice(-10));let s=R.getState().getSessionInput(e);q(s.trim()?`${s.trimEnd()}\n\n${a}`:a),requestAnimationFrame(()=>P.current?.focus())},[e,q]),Qe=(0,J.useCallback)(e=>e.replace(/<attachment path="[^"]*"\s*\/>/g,``).replace(/<image name="[^"]*"\s*\/>/g,``).trim(),[]),[$e,nt]=(0,J.useState)(we),[ft,pt]=(0,J.useState)(!1),mt=(0,J.useRef)(null),ht=(0,J.useCallback)(e=>{nt(e),De(e),pt(!1)},[]);(0,J.useEffect)(()=>{if(!ft)return;let e=e=>{mt.current&&!mt.current.contains(e.target)&&pt(!1)},t=e=>{e.key===`Escape`&&pt(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[ft]);let X=On($e),gt=(0,J.useRef)(null),_t=(0,J.useCallback)(async()=>{try{if(!gt.current){let e=await K.stt.status();e.success&&e.data&&(gt.current=e.data)}let e=gt.current;if(!e)return!0;if(e.service!==`ok`&&e.service!==`stopped`)return z.warning(b(`stt.backendMissing`)),window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:{tab:`settings`,section:`stt`}})),!1;let t=e.backends?.[$e];return t&&!t.installed?(z.warning(b(`stt.backendMissing`)),window.dispatchEvent(new CustomEvent(`switch-tab`,{detail:{tab:`settings`,section:`stt`}})),!1):!0}catch{return!0}},[b,$e]);(0,J.useEffect)(()=>{let e=()=>{gt.current=null};return window.addEventListener(`stt-backends-changed`,e),()=>window.removeEventListener(`stt-backends-changed`,e)},[]),(0,J.useEffect)(()=>{let e=e=>{let t=Te(e.detail?.lang);nt(t)};return window.addEventListener(`stt-lang-changed`,e),()=>window.removeEventListener(`stt-lang-changed`,e)},[]);let vt=(0,J.useCallback)(e=>{let t=P.current,n=t?.selectionStart??x.length,r=x.slice(0,n)+e+x.slice(n);q(r),requestAnimationFrame(()=>{t?.focus();let r=n+e.length;t&&(t.selectionStart=t.selectionEnd=r)})},[x,q]);(0,J.useEffect)(()=>{if(!g)return;let e=P.current;if(!e)return;e.focus();let t=e.value.length;e.selectionStart=t,e.selectionEnd=t},[g]);let yt=(0,J.useCallback)(async()=>{if(w)z.info(b(`stt.generatingTitle`));else if(X.state===`recording`)try{let e=await X.stop();e?vt(e):z.info(b(`stt.noSpeech`))}catch(e){z.error(e instanceof Error?e.message:String(e))}else if(X.state===`idle`&&await _t())try{await X.start()}catch(e){z.error(e instanceof Error?e.message:String(e))}},[X,vt,_t,b,w]),{isOpen:bt,filter:xt,filteredCommands:St,selectedIndex:Ct,setSelectedIndex:wt,selectNext:Tt,selectPrev:Et,executeCommand:Dt,openMenu:Ot,closeMenu:Z,setFilter:jt,allCommands:Nt,containerRef:Pt}=Ye(l),[Q,Ft]=(0,J.useState)(!1),[It,Lt]=(0,J.useState)(``),[Rt,zt]=(0,J.useState)([]),[Bt,Vt]=(0,J.useState)(0),[Ut,Wt]=(0,J.useState)(!1),[Gt,Kt]=(0,J.useState)(0),Yt=(0,J.useRef)(-1),[Zt,$t]=(0,J.useState)(`active`),nn=(0,J.useRef)(`active`),[rn,an]=(0,J.useState)(`summarize`),sn=(0,J.useRef)(`summarize`);sn.current=rn;let[cn,ln]=(0,J.useState)([]),un=(0,J.useCallback)(()=>{ln(Array.from(hn.current.values()))},[]);nn.current=Zt;let dn=(0,J.useRef)(new Set),hn=(0,J.useRef)(new Map),gn=(0,J.useRef)([]),vn=(0,J.useRef)(0),xn=(0,J.useRef)(!1);(0,J.useEffect)(()=>{let t=t=>{let n=R.getState().getSessionInput(e),r=`@${t} `,i=n.trim()?`${n.trimEnd()} ${r}`:r;dn.current.add(t),S(e,i),Kt(dn.current.size+hn.current.size),requestAnimationFrame(()=>P.current?.focus())};return Fe(t),()=>Le(t)},[e,S]),(0,J.useEffect)(()=>{let t=t=>{let n=R.getState().getSessionInput(e),r=n.trim()?`${n.trimEnd()}\n\n${t}`:t;S(e,r),requestAnimationFrame(()=>P.current?.focus())};return Ve(t),()=>Ie(t)},[e,S]);let Cn=(0,J.useCallback)(t=>{let n=R.getState().getSessionInput(e),r=n.trim()?`${n.trimEnd()}\n\n${t}`:t;S(e,r),requestAnimationFrame(()=>P.current?.focus())},[e,S]),wn=(0,J.useRef)([]),[Tn,En]=(0,J.useState)(Jt),Dn=(0,J.useRef)([]),An=(0,J.useRef)([]),Mn=(0,J.useRef)(0),qn=(0,J.useRef)(``);qn.current=It;let nr=(0,J.useCallback)((e,t)=>{let n=e.map(e=>({kind:`file`,key:e.path,label:e.name,detail:e.path,isDir:e.type===`directory`})),r=Dn.current,i=t.toLowerCase(),a=(i?r.filter(e=>e.label.toLowerCase().includes(i)||e.key.toLowerCase().includes(i)):r).slice(0,Xn);return[...n,...a]},[]),rr=(0,J.useCallback)(async()=>{let e=Date.now();if(An.current.length>0&&e-Mn.current<Zn)return An.current;try{let e=await K.sessions.list(),t=e.success&&e.data?e.data:[];(t.length>0||An.current.length===0)&&(An.current=t),Mn.current=Date.now()}catch{}return An.current},[]),ir=(0,J.useCallback)(async()=>{let t=await rr();return Dn.current=on(t,e,nn.current),Dn.current},[rr,e]),ar=(0,J.useCallback)(e=>{wn.current=e,zt(e)},[]),or=(0,J.useCallback)((e,t)=>{ar(nr(e.slice(0,Xn),t))},[ar,nr]),sr=(0,J.useCallback)(()=>{let t=nn.current===`active`?`all`:`active`;nn.current=t,$t(t),(async()=>{let n=await rr();Dn.current=on(n,e,t),or(gn.current,qn.current.toLowerCase())})()},[rr,e,or]),cr=(0,J.useCallback)(()=>{let e=Xt(sn.current);(e===`direct`||e===`summarize`)&&dn.current.size>0&&(e=`enqueue`),sn.current=e,an(e)},[]),lr=(0,J.useMemo)(()=>Qt({files:b(`chat.mentionTabFiles`),sessions:b(`chat.mentionTabSessions`)}),[b]),ur=lr.some(e=>e.key===Tn)?Tn:Jt,dr=(0,J.useMemo)(()=>en(Rt,ur),[Rt,ur]);(0,J.useEffect)(()=>{dn.current=new Set,hn.current=new Map,un(),xn.current=!1,En(Jt),Dn.current=[],An.current=[],Mn.current=0,vn.current++,Ft(!1),Lt(``),zt([]),wn.current=[],Kt(0),Z()},[e,Z,un]);let fr=(0,J.useDeferredValue)(x),pr=ue(e=>e.estimateTokens),mr=(0,J.useMemo)(()=>pr(fr),[fr,pr]),hr=(0,J.useCallback)(()=>{let e=P.current;e&&(F==null?(e.style.maxHeight=``,e.style.height=`auto`,e.style.height=Math.min(e.scrollHeight,200)+`px`):(e.style.maxHeight=`${F}px`,e.style.height=`${F}px`))},[F]);(0,J.useEffect)(()=>{hr()},[x,V.length,hr]),(0,J.useEffect)(()=>()=>{document.body.style.userSelect=``},[]);let gr=(0,J.useCallback)(e=>{let t=P.current;t&&e.button===0&&(e.preventDefault(),ce.current={startY:e.clientY,startHeight:t.getBoundingClientRect().height,current:0},e.currentTarget.setPointerCapture(e.pointerId),document.body.style.userSelect=`none`,fe(!0))},[]),_r=(0,J.useCallback)(e=>{let t=ce.current,n=P.current;if(!t||!n)return;t.movedY=e.clientY-t.startY;let r=Math.max(Vn,Math.min(Math.round(window.innerHeight*Hn),t.startHeight-(e.clientY-t.startY)));t.current=r,n.style.maxHeight=`${r}px`,n.style.height=`${r}px`},[]),vr=(0,J.useCallback)(e=>{let t=ce.current;if(ce.current=null,document.body.style.userSelect=``,fe(!1),t){try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}t.current>0&&Math.abs(t.movedY??0)>3&&I(t.current)}},[]),yr=(0,J.useCallback)(()=>I(null),[]),br=(0,J.useCallback)(e=>{let t=P.current;if(!t)return;let n=F??t.getBoundingClientRect().height,r=Math.max(Vn,Math.min(Math.round(window.innerHeight*Hn),n+e));I(r)},[F]),xr=(0,J.useCallback)(async e=>{let t=++vn.current;Wt(!0);try{let n=await K.files.search(e);if(t!==vn.current)return null;let r=(n.success&&n.data?n.data.files:[]).map(e=>({id:e,name:e.slice(e.lastIndexOf(`/`)+1),path:e,type:`file`}));return gn.current=r,r}catch{return null}finally{t===vn.current&&Wt(!1)}},[]),Sr=(0,J.useCallback)(async(e,t)=>{if(xn.current){let n=Yt.current;if(n<0||t<n){xn.current=!1,Ft(!1);return}let r=e.slice(n,t);if(/\s/.test(r)){xn.current=!1,Ft(!1);return}Yt.current=n,Lt(r),Ft(!0),Vt(0);let i=r.toLowerCase(),[a]=await Promise.all([xr(i),ir()]);if(!a)return;or(a,i);return}let n=er(e,t);if(!n.active){Q&&Ft(!1);return}Yt.current=n.start,Lt(n.query),Ft(!0),Vt(0);let r=n.query.toLowerCase(),[i]=await Promise.all([xr(r),ir()]);i&&or(i,r)},[Q,xr,ir,or]),Cr=(0,J.useCallback)(async()=>{if(Ue.current.length>0)return Ue.current;if(We.current)return We.current;ze(!0);let e=K.skills.list().then(e=>{let t=Array.isArray(e.data)?e.data:[];return Pe(t),t}).catch(()=>[]).finally(()=>{We.current=null,ze(!1)});return We.current=e,e},[]),wr=(0,J.useMemo)(()=>yn(Ne,Oe),[Ne,Oe]),Tr=(0,J.useCallback)((e,t)=>{let n=_n(e,t,Ue.current);n.active?(Be.current=n.start,Ae(n.query),Me(0),Se(!0),Ue.current.length===0&&Cr()):G&&(Se(!1),Ae(``))},[G,Cr]);(0,J.useEffect)(()=>{if(!G||Ne.length===0)return;let e=P.current;if(!e)return;let t=_n(e.value,e.selectionStart??e.value.length,Ne);t.active?(Be.current=t.start,Ae(t.query)):(Se(!1),Ae(``))},[Ne,G]);let Er=(0,J.useCallback)(e=>{let t=e.target.value,n=e.target.selectionStart??t.length;q(t),Sr(t,n),Tr(t,n);let r=tr(t,n);r.active?(bt||Ot(),jt(r.query),wt(0)):bt&&Z()},[q,Sr,Tr,bt,Ot,jt,wt,Z]),Dr=(0,J.useCallback)(e=>{let t=P.current,n=x,r=Yt.current>=0?Yt.current:t?.selectionStart??n.length,i=Math.min(n.length,r+1+It.length),a,o;if(e.kind===`session`){let t=e.label||e.key;a=/\s/.test(t)?e.key:t,hn.current.set(e.key,t),un(),o=`@${a} `}else a=e.key,dn.current.add(a),o=`@${a} `;let s=n.slice(0,r)+o+n.slice(i);q(s),Ft(!0),Lt(``),(async()=>{let e=await xr(``);e&&or(e,``)})(),Vt(0),Kt(dn.current.size+hn.current.size),Yt.current=r+o.length,xn.current=!0,requestAnimationFrame(()=>{t?.focus(),t&&(t.selectionStart=t.selectionEnd=r+o.length)})},[x,It,q,xr,or]),Or=(0,J.useCallback)(()=>{xn.current=!1,Ft(!1),Lt(``),Kt(0),En(Jt)},[]),kr=(0,J.useCallback)(e=>{let t=P.current;if(!e.args){let n=Dt(e,``);if(n?.message&&(n.success?z.success(n.message):z.error(n.message)),n?.draft){q(n.draft),I(null),requestAnimationFrame(()=>{t?.focus(),t&&(t.selectionStart=t.selectionEnd=n.draft.length)});return}q(``),I(null);return}let n=t?.selectionStart??x.length,r=x.lastIndexOf(`
8
+ `,n-1)+1,i=x.slice(0,r)+`/${e.name} `+x.slice(n);q(i),Z(),requestAnimationFrame(()=>{t?.focus();let n=r+e.name.length+2;t&&(t.selectionStart=t.selectionEnd=n)})},[x,q,Dt,Z]),Ar=(0,J.useCallback)(e=>{let t=P.current,n=Be.current>=0?Be.current:t?.selectionStart??x.length,r=Math.min(x.length,n+1+Oe.length),i=`$${e.id} `,a=x.slice(0,n)+i+x.slice(r);q(a),Se(!1),Ae(``),Be.current=-1,requestAnimationFrame(()=>{t?.focus();let e=n+i.length;t&&(t.selectionStart=t.selectionEnd=e)})},[x,Oe,q]),jr=(0,J.useCallback)(()=>{Se(!1),Ae(``),Be.current=-1},[]),Mr=(0,J.useCallback)(e=>{let t=P.current,n=t?.selectionStart??x.length,r=`$${e.id} `,i=x.slice(0,n)+r+x.slice(n);q(i),xe(!1),xn.current=!1,Ft(!1),Lt(``),Se(!1),Ae(``),requestAnimationFrame(()=>{t?.focus();let e=n+r.length;t&&(t.selectionStart=t.selectionEnd=e)})},[x,q]),Nr=2048,Pr=(0,J.useCallback)(e=>new Promise((t,n)=>{let r=()=>{let r=new FileReader;r.onload=()=>t(String(r.result??``)),r.onerror=()=>n(Error(`Failed to read image`)),r.readAsDataURL(e)};(async()=>{let n=null;try{n=await createImageBitmap(e)}catch{r();return}try{let i=Math.max(n.width,n.height);if(i<=Nr){n.close(),r();return}let a=Nr/i,o=document.createElement(`canvas`);o.width=Math.max(1,Math.round(n.width*a)),o.height=Math.max(1,Math.round(n.height*a));let s=o.getContext(`2d`);if(!s){n.close(),r();return}s.drawImage(n,0,0,o.width,o.height),n.close();let c=e.type===`image/jpeg`?`image/jpeg`:`image/png`;t(o.toDataURL(c,c===`image/jpeg`?.9:void 0))}catch{n?.close(),r()}})()}),[]),Fr=(0,J.useCallback)(e=>{let t=Array.from(e);H(e=>{let n=zn-e.length,r=e.slice();for(let e of t.slice(0,n)){let t=Pn.test(e.name);if(!t&&!jn.test(e.name)){z.warning(b(`fileJob.unsupportedType`,{name:e.name}));continue}if(e.size>(t?Fn:Rn)){z.error(b(`fileJob.fileTooLarge`,{name:e.name}));continue}if(r.some(t=>t.name===e.name&&t.size===e.size)){z.warning(b(`fileJob.duplicateFile`,{name:e.name}));continue}let n={id:`att-${Date.now()}-${Math.random().toString(36).slice(2,6)}`,file:e,name:e.name,size:e.size,uploading:!1};t&&Pr(e).then(e=>{H(t=>t.map(t=>t.id===n.id?{...t,imageDataUri:e}:t))}).catch(()=>{H(e=>e.filter(e=>e.id!==n.id)),z.error(b(`fileJob.uploadFailed`,{name:e.name}))}),r.push(n)}return r.length>=zn&&z.warning(b(`fileJob.maxAttachments`,{n:zn})),r})},[b,Pr]),Ir=(0,J.useCallback)(e=>{e.target.files&&e.target.files.length>0&&(Fr(e.target.files),e.target.value=``)},[Fr]),Lr=(0,J.useCallback)(()=>{pe.current?.click()},[]),Rr=(0,J.useCallback)(async()=>{if(!(W||w)){ve(!0);try{let e=await Sn();Fr([e])}catch(e){e instanceof bn&&e.code===`cancelled`||z.error(b(`fileJob.screenshotFailed`))}finally{ve(!1)}}},[Fr,b,W,w]),zr=(0,J.useRef)(Rr);(0,J.useEffect)(()=>{zr.current=Rr},[Rr]),(0,J.useEffect)(()=>{let e=e=>{(e.ctrlKey||e.metaKey)&&e.shiftKey&&(e.key===`s`||e.key===`S`)&&(e.preventDefault(),zr.current())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]);let Br=(0,J.useCallback)(e=>{H(t=>t.filter(t=>t.id!==e))},[]),Vr=(0,J.useCallback)(e=>{e.preventDefault(),U(!0)},[]),Hr=(0,J.useCallback)(e=>{e.preventDefault(),U(!1)},[]),Ur=(0,J.useCallback)(e=>{e.preventDefault(),U(!1),e.dataTransfer.files&&e.dataTransfer.files.length>0&&Fr(e.dataTransfer.files)},[Fr]),Wr=(0,J.useCallback)(async()=>{if(V.length===0)return``;let e=[];for(let t of V){if(t.imageDataUri)continue;if(t.path){e.push(`<attachment path="${t.path}" />`);continue}if(!t.file)continue;H(e=>e.map(e=>e.id===t.id?{...e,uploading:!0,error:void 0}:e));let n=`${Ln}/${t.name}`,r=await K.files.upload(t.file,n);if(r.success&&r.data?.path){let n=r.data.path.replace(/\\/g,`/`);H(e=>e.map(e=>e.id===t.id?{...e,uploading:!1,path:n}:e)),e.push(`<attachment path="${n}" />`)}else H(e=>e.map(e=>e.id===t.id?{...e,uploading:!1,error:r.error||b(`fileJob.uploadFailed`)}:e)),z.error(`${t.name}: ${r.error||b(`fileJob.uploadFailed`)}`)}return e.length>0?`${e.join(`
9
+ `)}\n\n`:``},[V,b]),Gr=(0,J.useCallback)(e=>{let t=e.clipboardData.getData(`text/plain`);if(e.clipboardData.files&&e.clipboardData.files.length>0){e.preventDefault(),Fr(e.clipboardData.files);return}if(!t||!rt(t))return;e.preventDefault();let{label:n}=at(t),r=P.current;if(!r)return;let i=r.selectionStart,a=r.selectionEnd,o=r.value,s=o.slice(0,i)+n+o.slice(a);q(s),requestAnimationFrame(()=>{r.selectionStart=r.selectionEnd=i+n.length})},[q,Fr]),Kr=(0,J.useCallback)(async()=>{let r=x.trim()?x:M,i=st(r),a=i.map(e=>({id:e,content:tt(e)??``})).filter(e=>e.content!==``),o=ot(r);ct(i),xn.current=!1,Ft(!1),Z();let s=o.trim(),c=V.length>0;if(!s&&!c)return;let l=o.trim();if(l.startsWith(`/`)&&!c){let e=Je(l);if(e){let t=Nt.find(t=>t.name===e.command);if(t){let n=Dt(t,e.args);if(n?.message&&(n.success?z.success(n.message):z.error(n.message)),n?.draft){q(n.draft),I(null),requestAnimationFrame(()=>{let e=P.current;e&&(e.focus(),e.setSelectionRange(n.draft.length,n.draft.length))});return}q(``),I(null),H([]),dn.current=new Set,hn.current=new Map,un(),Kt(0);return}z.error(b(`slashCommands.unknownCommand`,{cmd:`/${e.command}`}));return}}if(l.startsWith(`!`)&&!c){let e=l.slice(1).trim();if(!e)return;n?.(e),q(``),I(null),H([]),dn.current=new Set,hn.current=new Map,Kt(0);return}let u=Array.from(dn.current).filter(e=>o.includes(`@${e}`)),d=Array.from(hn.current.entries()).map(([e,t])=>({id:e,title:t})).filter(e=>o.includes(`@${e.title}`)||o.includes(`@${e.id}`)),f=``;if(c){if(V.some(e=>e.uploading)){z.warning(b(`fileJob.stillUploading`));return}f=await Wr()}let p=V.filter(e=>e.imageDataUri),m=p.map(e=>e.imageDataUri);if(p.length>0){let e=p.map(e=>Jn(e.name)).join(`
10
+ `);f=f?`${f}${e}\n\n`:`${e}\n\n`}let h=(f+o).trim();if(!h&&!c)return;let g=a.length>0?{content:`${f}${x}`,pastes:a}:void 0;t(h||f.trim(),u.length>0?u:void 0,m.length>0?m:void 0,d.length>0?d:void 0,d.length>0?sn.current:void 0,g),q(``),j(e),I(null),H([]),dn.current=new Set,hn.current=new Map,Kt(0),Se(!1),Ae(``)},[x,M,V,t,n,q,j,e,Wr,b,Z,Nt,Dt]),qr=(0,J.useCallback)(e=>{if(!e.nativeEvent.isComposing){if((e.key===`Backspace`||e.key===`Delete`)&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey){let t=P.current;if(t&&t.selectionStart===t.selectionEnd){let n=t.selectionStart,r=t.value;if(e.key===`Backspace`&&n>0){let i=lt(r.slice(0,n));if(i){e.preventDefault(),q(r.slice(0,n-i.length)+r.slice(n)),dt(i),requestAnimationFrame(()=>{t.focus();let e=n-i.length;t.selectionStart=t.selectionEnd=e});return}}else if(e.key===`Delete`&&n<r.length){let i=ut(r.slice(n));if(i){e.preventDefault(),q(r.slice(0,n)+r.slice(n+i.length)),dt(i),requestAnimationFrame(()=>{t.focus(),t.selectionStart=t.selectionEnd=n});return}}}}if(e.key===`Backspace`&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&!e.shiftKey&&V.length>0){let t=P.current;if(t&&t.selectionStart===0&&t.selectionEnd===0){let t=V[V.length-1];if(t){e.preventDefault(),Br(t.id);return}}}if(Q&&lr.length>1&&e.key===`Tab`){e.preventDefault();let t=lr.map(e=>e.key);En(n=>tn(t,n,!e.shiftKey)),Vt(0)}else if(Q&&lr.length>1&&e.key===`S`&&!e.ctrlKey&&!e.metaKey&&!e.altKey)e.preventDefault(),sr();else if(Q&&lr.length>1&&e.key===`M`&&!e.ctrlKey&&!e.metaKey&&!e.altKey)e.preventDefault(),cr();else{if(Q&&dr.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Vt(e=>(e+1)%dr.length);return}if(e.key===`ArrowUp`){e.preventDefault(),Vt(e=>(e-1+dr.length)%dr.length);return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=dr[Bt];t&&(e.preventDefault(),Dr(t));return}if(e.key===`Escape`){e.preventDefault(),Or();return}}else if(Q&&e.key===`Escape`){e.preventDefault(),Or();return}if(G&&wr.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Me(e=>(e+1)%wr.length);return}if(e.key===`ArrowUp`){e.preventDefault(),Me(e=>(e-1+wr.length)%wr.length);return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=wr[je];t&&(e.preventDefault(),Ar(t));return}if(e.key===`Escape`){e.preventDefault(),jr();return}}else if(G&&e.key===`Escape`){e.preventDefault(),jr();return}if(bt&&St.length>0){if(e.key===`ArrowDown`){e.preventDefault(),Tt();return}if(e.key===`ArrowUp`){e.preventDefault(),Et();return}if(e.key===`Enter`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey){let t=St[Ct];t&&(e.preventDefault(),kr(t));return}if(e.key===`Escape`){e.preventDefault(),Z();return}}else if(bt&&e.key===`Escape`){e.preventDefault(),Z();return}if(e.key===`Tab`&&!e.shiftKey&&!e.ctrlKey&&!e.metaKey&&!e.altKey&&M)e.preventDefault(),Xe();else if(e.key===`Escape`&&w){e.preventDefault();let t=Date.now(),n=He(N,D,he.current,t);he.current=t,n===`revokeQueue`?(Ge(),he.current=0):n===`stop`?i():o()}else(e.key===`Enter`&&(e.ctrlKey||e.metaKey)||e.key===`Enter`&&!e.shiftKey)&&(e.preventDefault(),Kr())}}},[w,D,N,Ge,Kr,o,s,i,Q,Rt,Bt,Dr,Or,lr,sr,cr,G,wr,je,Ar,jr,bt,St,Ct,Tt,Et,kr,Z,q,V,Br,M,Xe]),Jr=(0,J.useCallback)(()=>{me.current=!0},[]),Yr=(0,J.useCallback)(()=>{me.current=!1},[]),[Xr,Zr]=(0,J.useState)(()=>typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(max-width: 767px)`).matches);(0,J.useEffect)(()=>{if(typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(max-width: 767px)`),t=()=>{Zr(e.matches),e.matches||ri(!1)};return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[Qr,$r]=(0,J.useState)(()=>Gn()),[ei,ti]=(0,J.useState)(()=>Gn()===`collapsed`),[ni,ri]=(0,J.useState)(!1),[ii,ai]=(0,J.useState)(!1),oi=(0,J.useRef)(!1),si=Qr===`expanded`,ci=(0,J.useCallback)(e=>{$r(e);try{e===`auto`?window.localStorage.removeItem(Un):window.localStorage.setItem(Un,e)}catch{}},[]),li=(0,J.useRef)(null),$=(0,J.useCallback)(()=>{li.current!==null&&(clearTimeout(li.current),li.current=null)},[]);(0,J.useEffect)(()=>$,[$]),(0,J.useEffect)(()=>{Xr&&w&&!si&&ri(!0)},[Xr,w,si]);let[ui,di]=(0,J.useState)(()=>Kn());(0,J.useEffect)(()=>{if(typeof window.matchMedia!=`function`)return;let e=window.matchMedia(`(hover: hover) and (pointer: fine)`),t=()=>di(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let fi=oi.current||me.current||x.trim().length>0||V.length>0||N>0||_||ge||Q||bt||G,pi=ui&&Qr===`auto`&&!ei,mi=ei||Xr&&ni||ii,hi=ii&&!ei&&!(Xr&&ni),gi=(0,J.useCallback)(()=>{$(),ai(!1),ti(!0),ci(`collapsed`)},[$,ci]),_i=(0,J.useCallback)(()=>{$(),ri(!1),ai(!1),Qr===`collapsed`&&(ti(!1),ci(`auto`))},[$,Qr,ci]),vi=(0,J.useCallback)(()=>{$(),si?ci(`auto`):(ai(!1),ri(!1),ti(!1),ci(`expanded`))},[$,si,ci]),yi=(0,J.useCallback)(()=>{$(),ai(!1)},[$]),bi=(0,J.useCallback)(()=>{pi&&($(),li.current=setTimeout(()=>{li.current=null,!fi&&ai(!0)},Wn))},[fi,$,pi]),xi=(0,J.useCallback)(()=>{$(),ai(!1)},[$]),Si=mr>8e3,Ci=!_&&(x.trim().length>0||V.length>0),wi=w?b(`stt.generatingTitle`):X.state===`recording`?b(`stt.stopTitle`):b(`stt.title`),Ti=X.state===`transcribing`||w,Ei=/mac/i.test(navigator.platform||``)?`⌘`:`Ctrl`;return(0,Y.jsxs)(`div`,{className:`chat-composer-shell shrink-0 pb-3 pt-2 max-md:order-4 max-md:mt-auto`,onMouseEnter:yi,onMouseLeave:bi,onDragOver:Vr,onDragLeave:Hr,onDrop:Ur,children:[oe.length>0&&(0,Y.jsxs)(`div`,{className:`${Bn} mb-2 rounded-lg border border-dark-border bg-dark-surface px-2.5 py-1.5 text-xs text-dark-muted`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`⏳`}),(0,Y.jsx)(`span`,{className:`font-medium text-dark-text`,children:b(`chat.queuedCount`,{count:oe.length})}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1`}),(0,Y.jsx)(`span`,{className:`shrink-0 text-badge text-dark-muted/60`,children:b(`chat.queuedEscHint`)}),(0,Y.jsx)(`button`,{onClick:Ge,className:`flex h-5 w-5 shrink-0 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:b(`chat.queuedRevoke`),"aria-label":b(`chat.queuedRevoke`),children:(0,Y.jsx)(ae,{size:12,"aria-hidden":`true`})})]}),(0,Y.jsx)(`ul`,{className:`mt-1 max-h-40 space-y-0.5 overflow-y-auto`,children:oe.map((e,t)=>(0,Y.jsxs)(`li`,{className:`group flex items-center gap-2 rounded px-1 py-0.5 transition-colors hover:bg-dark-hover/60`,children:[(0,Y.jsx)(`span`,{className:`w-4 shrink-0 text-center text-badge tabular-nums text-dark-muted/60`,children:t+1}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-dark-muted/80`,title:Qe(e.content),children:Qe(e.content)||b(`chat.queuedEmptyPreview`)}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-0.5 opacity-0 transition-opacity group-hover:opacity-100 group-focus-within:opacity-100`,children:[(0,Y.jsx)(`button`,{onClick:()=>Ke(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:b(`chat.queuedSendNow`),"aria-label":b(`chat.queuedSendNow`),children:(0,Y.jsx)(u,{size:12,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>Ze(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-blue`,title:b(`chat.queuedEdit`),"aria-label":b(`chat.queuedEdit`),children:(0,Y.jsx)(O,{size:12,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>qe(e.id),className:`flex h-5 w-5 items-center justify-center rounded text-dark-muted transition-colors hover:bg-dark-hover hover:text-accent-red`,title:b(`chat.queuedDelete`),"aria-label":b(`chat.queuedDelete`),children:(0,Y.jsx)(k,{size:12,"aria-hidden":`true`})})]})]},e.id))})]}),V.length>0&&(0,Y.jsx)(`div`,{className:`${Bn} mb-2 flex flex-wrap gap-1.5`,children:V.map(e=>{let t=Yn(e.name),n=e.imageDataUri,i=(0,Y.jsxs)(Y.Fragment,{children:[n?(0,Y.jsx)(ye,{src:n,name:e.name,size:13,hoverPreview:!1,thumb:!0}):e.uploading?(0,Y.jsx)(r,{size:13,className:`animate-spin`}):(0,Y.jsx)(t,{size:13}),(0,Y.jsx)(`span`,{className:`max-w-[140px] truncate`,children:e.name}),(0,Y.jsx)(`span`,{className:`text-badge text-dark-muted`,children:e.size>1048576?`${(e.size/1024/1024).toFixed(1)} MB`:`${Math.max(1,Math.round(e.size/1024))} KB`}),!e.uploading&&(0,Y.jsx)(`button`,{onClick:()=>Br(e.id),className:`rounded p-0.5 text-dark-muted hover:text-accent-red hover:bg-accent-red/10 transition-colors`,"aria-label":b(`a11y.close`),children:(0,Y.jsx)(ae,{size:11})})]}),a=B(`flex items-center gap-1.5 rounded-lg border text-xs transition-colors ${n?`p-1 pe-2`:`px-2 py-1`}`,e.error?`border-accent-red/40 bg-accent-red/5 text-accent-red`:e.uploading?`border-accent-blue/40 bg-accent-blue/5 text-accent-blue`:`border-dark-border bg-dark-surface text-dark-text`,n&&`cursor-zoom-in hover:border-accent-blue/40`);return n?(0,Y.jsx)(_e,{src:n,alt:e.name,className:`min-w-0`,children:(0,Y.jsx)(`div`,{className:a,children:i})},e.id):(0,Y.jsx)(`div`,{className:a,children:i},e.id)})}),ge&&(0,Y.jsx)(`div`,{className:`${Bn} mb-2 rounded-xl border-2 border-dashed border-accent-blue/50 bg-accent-blue/5 py-3 text-center text-xs text-accent-blue`,children:b(`fileJob.dropHint`)}),(0,Y.jsx)(At,{}),(0,Y.jsxs)(`div`,{className:`chat-composer-card relative rounded-xl border ${le?``:`transition-all duration-150`} ${Bn} ${mi?`flex items-end gap-1 px-2 py-1.5`:``} ${hi?`pointer-events-none opacity-0`:``}`,children:[!mi&&(0,Y.jsx)(`div`,{role:`separator`,"aria-orientation":`horizontal`,"aria-label":b(`chat.resizeHint`),title:b(`chat.resizeHint`),tabIndex:0,onPointerDown:gr,onPointerMove:_r,onPointerUp:vr,onPointerCancel:vr,onDoubleClick:yr,onKeyDown:e=>{e.key===`ArrowUp`?(e.preventDefault(),br(24)):e.key===`ArrowDown`&&(e.preventDefault(),br(-24))},className:`group absolute inset-x-0 top-0 z-10 flex h-2.5 cursor-row-resize touch-none items-center justify-center rounded-t-xl outline-none focus-visible:bg-accent-blue/10`,children:(0,Y.jsx)(`span`,{"aria-hidden":`true`,className:`h-1 w-9 rounded-full bg-dark-border transition-colors group-hover:bg-accent-blue/70 group-focus-visible:bg-accent-blue/70`})}),!mi&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end gap-2 px-3 pt-2.5`,children:f&&(0,Y.jsx)(qt,{workspaceDir:d,onSelect:f,onNewSessionInDir:h})}),Q&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!Q,children:(0,Y.jsx)(fn,{isOpen:Q,items:dr,selectedIndex:Bt,query:It,isSearching:Ut,onSelect:Dr,onHover:Vt,selectedCount:Gt,onFinish:Or,tabs:lr,activeTab:ur,onTabChange:En,scope:Zt,onToggleScope:sr,deliveryMode:rn,onToggleDelivery:cr})}),G&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!G,children:(0,Y.jsx)(mn,{isOpen:G,items:wr,selectedIndex:je,query:Oe,isLoading:Re,onSelect:Ar,onHover:Me})}),bt&&(0,Y.jsx)(`div`,{onMouseDown:e=>e.preventDefault(),"aria-hidden":!bt,children:(0,Y.jsx)(kn,{isOpen:bt,commands:St,selectedIndex:Ct,filter:xt,onSelect:kr,onHover:wt,containerRef:Pt})}),(0,Y.jsxs)(`div`,{className:mi?`relative flex min-w-0 flex-1 items-start`:`relative`,children:[M&&(0,Y.jsx)(`div`,{"aria-hidden":`true`,className:mi?`pointer-events-none absolute inset-0 overflow-hidden px-1.5 py-1.5 text-sm leading-relaxed`:`pointer-events-none absolute inset-0 overflow-hidden px-4 pt-2 pb-3 text-sm leading-relaxed`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:Xe,className:`pointer-events-auto relative z-20 min-w-0 cursor-pointer whitespace-pre-wrap break-words border-0 bg-transparent p-0 text-start text-dark-muted/70 transition-colors hover:text-dark-muted`,title:b(`chat.suggestionAccept`),"aria-label":b(`chat.suggestionAccept`),children:M}),(0,Y.jsx)(`span`,{className:`mt-0.5 shrink-0 rounded border border-dark-border px-1.5 py-0.5 text-badge text-dark-muted/70`,"aria-hidden":`true`,children:b(`chat.suggestionAccept`)}),(0,Y.jsx)(`button`,{type:`button`,tabIndex:-1,onMouseDown:e=>e.preventDefault(),onClick:()=>j(e),className:`pointer-events-auto relative z-20 mt-0.5 shrink-0 rounded border border-dark-border px-1.5 py-0.5 text-badge text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.suggestionDismiss`),"aria-label":b(`chat.suggestionDismiss`),children:b(`chat.suggestionDismiss`)})]})}),(0,Y.jsx)(`textarea`,{ref:P,value:x,onChange:Er,onKeyDown:qr,onPaste:Gr,onFocus:()=>{oi.current=!0,xi()},onBlur:()=>{oi.current=!1,Q&&Or(),Z(),G&&jr()},onCompositionStart:Jr,onCompositionEnd:Yr,placeholder:M?``:_&&y?y:b(mi?`chat.inputPlaceholderCollapsed`:w?`chat.generatingPlaceholder`:`chat.inputPlaceholder`),rows:1,"aria-label":`Message input`,disabled:_,className:mi?`w-full flex-1 bg-transparent px-1.5 py-1.5 text-sm text-dark-text placeholder-dark-muted/60 resize-none focus:outline-none min-h-[36px] max-h-[28vh] leading-relaxed${M?` relative z-10`:``}`:`w-full bg-transparent px-4 pt-2 pb-3 text-sm text-dark-text placeholder-dark-muted/60
11
+ resize-none focus:outline-none min-h-[72px] max-h-[40vh] leading-relaxed${M?` relative z-10`:``}`})]}),mi&&(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5 pb-0.5`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:_i,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.composerExpand`),"aria-label":b(`chat.composerExpand`),children:(0,Y.jsx)(C,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void yt(),disabled:Ti,className:B(`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors`,X.state===`recording`?`bg-accent-red/15 text-accent-red animate-pulse`:`hover:bg-dark-hover hover:text-dark-text`,`disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent`),title:wi,"aria-label":wi,children:X.state===`transcribing`?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):X.state===`recording`?(0,Y.jsx)(ne,{size:15,"aria-hidden":`true`}):(0,Y.jsx)(m,{size:15,"aria-hidden":`true`})}),X.state===`recording`&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums text-accent-red`,"aria-hidden":`true`,children:[(X.elapsedMs/1e3).toFixed(0),`s`]}),w&&(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red/80 text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>void Kr(),disabled:!Ci,className:`flex h-8 w-8 items-center justify-center rounded-full bg-dark-text text-dark-bg transition-all
12
+ hover:opacity-80 active:scale-95 disabled:opacity-25 disabled:cursor-not-allowed`,title:b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),"aria-label":b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),children:(0,Y.jsx)(c,{size:15,"aria-hidden":`true`})})]}),!mi&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-2 gap-y-1.5 px-3 pb-3 lg:flex-nowrap`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-x-2`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:gi,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`chat.composerCollapse`),"aria-label":b(`chat.composerCollapse`),children:(0,Y.jsx)(T,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:vi,"aria-pressed":si,className:`flex h-8 w-8 items-center justify-center rounded-full transition-colors ${si?`bg-accent-blue/15 text-accent-blue hover:bg-accent-blue/25`:`text-dark-muted hover:bg-dark-hover hover:text-dark-text`}`,title:b(si?`chat.composerUnpin`:`chat.composerPin`),"aria-label":b(si?`chat.composerUnpin`:`chat.composerPin`),children:(0,Y.jsx)(re,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(kt,{}),(0,Y.jsx)(`span`,{className:`hidden min-w-0 sm:block`,children:(0,Y.jsx)(Mt,{})}),(0,Y.jsx)(Ee,{}),(0,Y.jsx)(Ht,{onHandoffToAi:Cn}),cn.length>0&&(0,Y.jsx)(`button`,{type:`button`,onClick:cr,className:B(`flex h-8 min-w-0 items-center rounded-full px-2.5 text-meta font-medium transition-colors`,$n[rn]),title:b(`chat.mentionDeliveryHint`),children:(0,Y.jsx)(`span`,{className:`max-w-[180px] truncate`,children:b(`chat.mentionDeliveryChip`,{titles:cn.join(`、`),mode:b(Qn[rn])})})})]}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5`,children:[mr>0&&x.length>0&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums ${Si?`text-accent-red font-medium`:`text-dark-muted/60`}`,children:[`~`,mr,` tokens`,Si?` · ${b(`chat.nearLimit`)}`:``]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsxs)(`div`,{ref:mt,className:`relative`,children:[(0,Y.jsxs)(`button`,{onClick:()=>pt(e=>!e),disabled:X.state!==`idle`||w,className:`flex h-8 items-center justify-center gap-0.5 rounded-full px-2 text-meta font-semibold text-dark-muted transition-colors
13
+ hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 disabled:hover:bg-transparent disabled:cursor-not-allowed`,title:b(w?`stt.generatingTitle`:`stt.langToggle`),"aria-label":b(w?`stt.generatingTitle`:`stt.langToggle`),"aria-haspopup":`listbox`,"aria-expanded":ft,children:[Ce($e).short,(0,Y.jsx)(C,{size:11,"aria-hidden":`true`})]}),ft&&(0,Y.jsxs)(`div`,{role:`listbox`,"aria-label":b(`stt.langToggle`),className:`absolute bottom-full right-0 mb-2 z-50 w-44 rounded-lg border border-dark-border bg-dark-overlay ui-surface-overlay shadow-lg py-1 max-h-72 overflow-auto custom-scrollbar`,children:[ke.map(e=>(0,Y.jsxs)(`button`,{role:`option`,"aria-selected":e.code===$e,onClick:()=>ht(e.code),className:B(`flex w-full items-center justify-between gap-2 px-3 py-1.5 text-xs transition-colors`,e.code===$e?`text-accent-blue bg-accent-blue/10`:`text-dark-text hover:bg-dark-hover`),children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label}),(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5 text-badge text-dark-muted`,children:[`Whisper`,e.code===$e&&(0,Y.jsx)(se,{size:12,"aria-hidden":`true`})]})]},e.code)),(0,Y.jsx)(`div`,{className:`mt-1 border-t border-dark-border px-3 pt-1.5 pb-0.5 text-badge leading-relaxed text-dark-muted/70`,children:b(`stt.multiHint`)})]})]}),(0,Y.jsx)(`button`,{onClick:()=>void yt(),disabled:Ti,className:B(`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors`,X.state===`recording`?`bg-accent-red/15 text-accent-red animate-pulse`:`hover:bg-dark-hover hover:text-dark-text`,`disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent`),title:wi,"aria-label":wi,children:X.state===`transcribing`?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):X.state===`recording`?(0,Y.jsx)(ne,{size:15,"aria-hidden":`true`}):(0,Y.jsx)(m,{size:15,"aria-hidden":`true`})}),X.state===`recording`&&(0,Y.jsxs)(`span`,{className:`text-badge tabular-nums text-accent-red`,"aria-hidden":`true`,children:[(X.elapsedMs/1e3).toFixed(0),`s`]})]}),!w&&(0,Y.jsx)(`button`,{onClick:()=>xe(!0),className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`skills.pickTitle`),"aria-label":b(`skills.pickTitle`),children:(0,Y.jsx)(p,{size:15,"aria-hidden":`true`})}),!w&&(0,Y.jsx)(`button`,{onClick:()=>void Rr(),disabled:W,className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text disabled:opacity-40 disabled:cursor-not-allowed`,title:`${b(`fileJob.screenshot`)} (${Ei}+Shift+S)`,"aria-label":`${b(`fileJob.screenshot`)} (${Ei}+Shift+S)`,children:W?(0,Y.jsx)(r,{size:15,className:`animate-spin`,"aria-hidden":`true`}):(0,Y.jsx)(a,{size:15,"aria-hidden":`true`})}),!w&&(0,Y.jsx)(`button`,{onClick:()=>void Lr(),className:`flex h-8 w-8 items-center justify-center rounded-full text-dark-muted transition-colors hover:bg-dark-hover hover:text-dark-text`,title:b(`fileJob.attach`),"aria-label":b(`fileJob.attach`),children:(0,Y.jsx)(ee,{size:15,"aria-hidden":`true`})}),(0,Y.jsx)(`input`,{ref:pe,type:`file`,multiple:!0,accept:In,className:`hidden`,onChange:Ir}),w&&!Ci?(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[D?(0,Y.jsx)(`button`,{onClick:s,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-green text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.resumeGen`),"aria-label":b(`chat.resumeGen`),children:(0,Y.jsx)(E,{size:14,"aria-hidden":`true`})}):(0,Y.jsx)(`button`,{onClick:o,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-yellow text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.pauseGen`),"aria-label":b(`chat.pauseGen`),children:(0,Y.jsx)(te,{size:14,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[w&&(0,Y.jsx)(`button`,{onClick:i,className:`flex h-8 w-8 items-center justify-center rounded-full bg-accent-red/80 text-accent-fg transition-all hover:opacity-85 active:scale-95`,title:b(`chat.stopGen`),"aria-label":b(`chat.stopGen`),children:(0,Y.jsx)(v,{size:13,"aria-hidden":`true`})}),(0,Y.jsx)(`button`,{onClick:()=>void Kr(),disabled:!Ci,className:`flex h-8 w-8 items-center justify-center rounded-full bg-dark-text text-dark-bg transition-all
14
+ hover:opacity-80 active:scale-95 disabled:opacity-25 disabled:cursor-not-allowed`,title:b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),"aria-label":b(w?`chat.sendQueuedBtn`:`chat.sendBtn`),children:(0,Y.jsx)(c,{size:15,"aria-hidden":`true`})})]})]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-1.5 hidden select-none items-center justify-center gap-3 text-badge text-dark-muted/55 transition-opacity duration-150 sm:flex ${hi?`opacity-0`:``}`,children:[(0,Y.jsx)(`span`,{children:b(`chat.shiftEnter`)}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:b(`chat.escHint`)}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:`${Ei}+Shift+S ${b(`shortcuts.screenshot`)}`}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,Y.jsx)(`span`,{children:b(`chat.bangHint`)})]}),(0,Y.jsx)(pn,{open:be,onClose:()=>xe(!1),onSelect:Mr})]})});export{Kt as n,Et as r,nr as t};
@@ -0,0 +1 @@
1
+ import{i as e}from"./rolldown-runtime-COiEfhsA.js";import{$ as t,Un as n,Ur as r,br as i,g as a,vr as o,yr as s}from"./icons-BvYhTENi.js";import{t as c}from"./useTranslation-BGmCDuQI.js";import{n as l,r as u}from"./settingsStore-RLUAWgIk.js";import{r as d}from"./api-CCt9DRQm.js";import{I as f}from"./markdown-DAQZeY5V.js";var p=e(r(),1),m=f(),ee=[`fact`,`code_change`,`user_preference`,`error_fix`,`decision`,`convention`,`goal`,`interaction`],h=6e3,g=500;function te(e){if(!Number.isFinite(e))return 50;let t=Math.floor(e);return t>=5&&t<=g?t:50}function _(e){if(!Number.isFinite(e)||e<=0)return`—`;try{return new Date(e).toLocaleString()}catch{return`—`}}function v(){let{t:e}=c(),r=te(u(e=>e.memoryPageSize)),a=u(e=>e.setMemoryPageSize),s=(0,p.useMemo)(()=>l.includes(r)?l:[...l,r].sort((e,t)=>e-t),[r]),[f,_]=(0,p.useState)([]),[v,b]=(0,p.useState)(null),[x,re]=(0,p.useState)(null),[S,C]=(0,p.useState)(!1),[w,T]=(0,p.useState)(null),[E,ie]=(0,p.useState)(`all`),[D,ae]=(0,p.useState)(`all`),[O,oe]=(0,p.useState)(`time`),[k,A]=(0,p.useState)({}),[j,M]=(0,p.useState)(null),[N,P]=(0,p.useState)([]),[F,I]=(0,p.useState)([]),[L,R]=(0,p.useState)(1),z=(0,p.useRef)(null),B=(0,p.useRef)(null),V=(0,p.useRef)(null),[H,U]=(0,p.useState)(null),W=(0,p.useCallback)(e=>{R(e),V.current&&(V.current.scrollTop=0)},[]),G=(0,p.useCallback)(async()=>{C(!0),T(null);let[t,n]=await Promise.all([d.get(`/api/memory/status`),d.get(`/api/memory/list?limit=${g}`)]);t.success&&t.data?b(t.data):T(t.error??e(`memory.loadFailed`)),n.success&&n.data?(_(n.data.items??[]),re(n.data.stats??null),A(n.data.usage??{}),M(n.data.usageSummary??null),P([]),n.data.warnings?.length&&T(e(`memory.partialRead`,{reason:n.data.warnings[0]}))):T(n.error??e(`memory.loadFailed`)),C(!1)},[e]);(0,p.useEffect)(()=>{G()},[G]);let K=(0,p.useCallback)(async t=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null),B.current=null,U(null);let n=await d.post(`/api/memory/delete`,{id:t});if(n.success&&n.data?.deleted===!0){T(e(`memory.deleted`));return}let r=n.success?n.data?.reason??e(`memory.deleteUnavailable`):n.error??``;P(e=>e.filter(e=>e!==t)),T(e(`memory.deleteFailed`,{reason:r}))},[e]),q=(0,p.useCallback)(e=>{B.current&&K(B.current.id),P(t=>t.includes(e.id)?t:[...t,e.id]);let t={id:e.id,content:e.content};B.current=t,U(t),z.current=window.setTimeout(()=>{K(e.id)},h)},[K]),se=(0,p.useCallback)(()=>{let t=B.current;t&&(z.current!==null&&(window.clearTimeout(z.current),z.current=null),B.current=null,U(null),P(e=>e.filter(e=>e!==t.id)),T(e(`memory.undoDone`)))},[e]);(0,p.useEffect)(()=>()=>{z.current!==null&&window.clearTimeout(z.current);let e=B.current;e&&d.post(`/api/memory/delete`,{id:e.id})},[]);let J=(0,p.useMemo)(()=>{let e=new Set(N);return f.filter(t=>!(e.has(t.id)||E!==`all`&&t.scope!==E||D!==`all`&&t.type!==D))},[f,N,E,D]),Y=(0,p.useMemo)(()=>{let e=new Map;for(let t of J){let n=t.subject?`s:${t.subject}|${t.layer??`fact`}`:`i:${t.id}`,r=e.get(n);r?r.push(t):e.set(n,[t])}let t=[];for(let[n,r]of e){let[e,...i]=[...r].sort((e,t)=>t.timestamp-e.timestamp);e&&t.push({key:n,head:e,rest:i})}return t.sort((e,t)=>{if(O===`usage`){let n=(k[t.head.id]?.count??0)-(k[e.head.id]?.count??0);if(n!==0)return n}return t.head.timestamp-e.head.timestamp})},[J,O,k]),X=Math.max(1,Math.ceil(Y.length/r)),Z=Math.min(L,X),ce=(0,p.useMemo)(()=>Y.slice((Z-1)*r,Z*r),[Y,Z,r]),le=e=>{I(t=>t.includes(e)?t.filter(t=>t!==e):[...t,e])},Q=v!=null&&!v.tombstones,$=(0,p.useMemo)(()=>{let e=new Set(f.map(e=>e.scope));return[`global`,`workspace`].filter(t=>e.has(t))},[f]);return(0,m.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,m.jsxs)(`div`,{className:`flex h-12 shrink-0 items-center gap-3 border-b border-dark-border px-4`,children:[(0,m.jsx)(n,{size:16,className:`shrink-0 text-dark-muted`,"aria-hidden":`true`}),(0,m.jsx)(`span`,{className:`truncate text-sm font-medium text-dark-text`,children:e(`memory.title`)}),v?.workspaceHash?(0,m.jsx)(`span`,{className:`truncate text-[11px] text-dark-muted opacity-60`,children:v.workspaceHash}):null,(0,m.jsx)(`span`,{className:`ms-auto truncate text-[11px] text-dark-muted`,children:e(`memory.recallElsewhere`)})]}),v&&!v.active?(0,m.jsxs)(`div`,{className:`mx-4 mt-3 rounded border border-amber-500/40 bg-amber-500/10 px-3 py-2 text-xs text-amber-200`,children:[(0,m.jsx)(`div`,{className:`font-medium`,children:e(`memory.disabled`)}),(0,m.jsx)(`div`,{className:`mt-1 text-amber-200/80`,children:v.reason??e(`memory.disabledHint`)}),(0,m.jsxs)(`div`,{className:`mt-1 text-amber-200/60`,children:[e(`memory.backendLabel`),`: `,v.backend,v.cause?` · ${v.cause}`:``]})]}):null,(0,m.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2 border-b border-dark-border px-4 py-2`,children:[(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.filterScope`),(0,m.jsxs)(`select`,{value:E,onChange:e=>{ie(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`all`,children:e(`memory.all`)}),($.length>0?$:[`global`,`workspace`]).map(t=>(0,m.jsx)(`option`,{value:t,children:e(t===`global`?`memory.scopeGlobal`:`memory.scopeWorkspace`)},t))]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.filterCategory`),(0,m.jsxs)(`select`,{value:D,onChange:e=>{ae(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`all`,children:e(`memory.all`)}),ee.map(t=>(0,m.jsx)(`option`,{value:t,children:e(`memory.category.${t}`)},t))]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.sortBy`),(0,m.jsxs)(`select`,{value:O,onChange:e=>{oe(e.target.value),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:[(0,m.jsx)(`option`,{value:`time`,children:e(`memory.sortTime`)}),(0,m.jsx)(`option`,{value:`usage`,children:e(`memory.sortUsage`)})]})]}),(0,m.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-dark-muted`,children:[e(`memory.pageSize`),(0,m.jsx)(`select`,{"data-testid":`memory-page-size`,value:r,onChange:e=>{a(Number(e.target.value)),W(1)},className:`rounded border border-dark-border bg-dark-surface px-1.5 py-1 text-xs text-dark-text`,children:s.map(t=>(0,m.jsx)(`option`,{value:t,children:e(`memory.pageSizeOption`,{count:t})},t))})]}),(0,m.jsxs)(`span`,{className:`text-xs text-dark-muted`,children:[e(`memory.count`,{count:J.length}),x?` · ${e(`memory.totalCount`,{count:x.totalItems})}`:``,x?.truncated?` (${e(`memory.truncated`)})`:``]}),j?(0,m.jsx)(`span`,{className:`text-[11px] text-dark-muted opacity-70`,title:j.ledgerPath??void 0,children:j.enabled?e(`memory.usageSummary`,{events:j.totalEvents,ids:j.distinctIds}):e(`memory.usageOff`)}):null,(0,m.jsxs)(`button`,{type:`button`,onClick:()=>void G(),disabled:S,className:`ms-auto flex items-center gap-1 rounded px-2 py-1 text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text disabled:opacity-50`,children:[(0,m.jsx)(t,{size:13,className:S?`animate-spin`:void 0,"aria-hidden":`true`}),e(`memory.refresh`)]})]}),Q?(0,m.jsxs)(`div`,{className:`mx-4 mt-2 rounded border border-dark-border bg-dark-surface px-3 py-2 text-xs text-dark-muted`,children:[(0,m.jsx)(`span`,{className:`text-dark-text`,children:e(`memory.localDeleteOff`)}),(0,m.jsx)(`span`,{className:`ms-1`,children:e(`memory.localDeleteOffHint`)})]}):null,w?(0,m.jsx)(`div`,{className:`mx-4 mt-2 rounded border border-dark-border bg-dark-surface px-3 py-2 text-xs text-dark-text`,children:w}):null,(0,m.jsx)(`div`,{ref:V,className:`flex-1 overflow-y-auto px-4 py-3`,children:S&&f.length===0?(0,m.jsx)(`div`,{className:`text-xs text-dark-muted`,children:e(`memory.loading`)}):Y.length===0?(0,m.jsxs)(`div`,{className:`text-xs text-dark-muted`,children:[(0,m.jsx)(`div`,{children:e(`memory.empty`)}),(0,m.jsx)(`div`,{className:`mt-1 text-dark-muted/70`,children:e(`memory.emptyHint`)})]}):(0,m.jsx)(`ul`,{className:`space-y-2`,children:ce.map(({key:t,head:n,rest:r})=>{let a=F.includes(t);return(0,m.jsxs)(`li`,{className:`rounded border border-dark-border bg-dark-surface p-3`,children:[(0,m.jsx)(y,{item:n,usage:k[n.id],onDelete:Q?void 0:q,muted:!1}),r.length>0?(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(`button`,{type:`button`,onClick:()=>le(t),className:`mt-2 flex items-center gap-1 text-xs text-dark-muted hover:text-dark-text`,children:[a?(0,m.jsx)(i,{size:12,"aria-hidden":`true`}):(0,m.jsx)(o,{size:12,"aria-hidden":`true`}),e(`memory.collapsed`,{count:r.length})]}),a?(0,m.jsx)(`ul`,{className:`mt-2 space-y-2 border-s border-dark-border ps-3`,children:r.map(e=>(0,m.jsx)(`li`,{children:(0,m.jsx)(y,{item:e,usage:k[e.id],onDelete:Q?void 0:q,muted:!0})},e.id))}):null]}):null]},t)})})}),X>1?(0,m.jsx)(ne,{page:Z,pageCount:X,onChange:W}):null,H?(0,m.jsxs)(`div`,{className:`flex shrink-0 items-center justify-between gap-3 border-t border-dark-border bg-dark-surface px-4 py-2`,children:[(0,m.jsxs)(`span`,{className:`min-w-0 flex-1 truncate text-xs text-dark-muted`,children:[e(`memory.pendingDelete`),`: `,H.content]}),(0,m.jsx)(`button`,{type:`button`,onClick:se,className:`shrink-0 rounded border border-dark-border px-2 py-1 text-xs text-dark-text hover:bg-dark-hover`,children:e(`memory.undo`)})]}):null]})}function y({item:e,usage:t,onDelete:n,muted:r}){let{t:i}=c();return(0,m.jsxs)(`div`,{className:r?`opacity-60`:void 0,children:[(0,m.jsxs)(`div`,{className:`flex items-start justify-between gap-3`,children:[(0,m.jsx)(`p`,{className:`min-w-0 flex-1 whitespace-pre-wrap break-words text-sm text-dark-text`,children:e.content}),n?(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e),title:i(`memory.delete`),"aria-label":i(`memory.delete`),className:`shrink-0 rounded p-1 text-dark-muted hover:bg-dark-hover hover:text-red-400`,children:(0,m.jsx)(a,{size:13,"aria-hidden":`true`})}):null]}),(0,m.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-2 gap-y-1 text-[11px] text-dark-muted`,children:[(0,m.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:i(e.scope===`global`?`memory.scopeGlobal`:e.scope===`session`?`memory.scopeSession`:`memory.scopeWorkspace`)}),(0,m.jsx)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:i(`memory.category.${e.type}`,{defaultValue:e.type})}),e.layer===`experience`?(0,m.jsxs)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5 text-amber-300/90`,children:[i(`memory.layerExperience`),e.boundaryEnvs?.length?`: ${e.boundaryEnvs.join(`, `)}`:``]}):null,e.subject?(0,m.jsxs)(`span`,{className:`rounded bg-dark-hover px-1.5 py-0.5`,children:[`#`,e.subject]}):null,(0,m.jsx)(`span`,{children:i(`memory.confidenceShort`,{value:Math.round((e.confidence??0)*100)})}),(0,m.jsx)(`span`,{className:t?.count?`text-emerald-300/90`:`opacity-70`,children:t?.count?i(`memory.usageUsed`,{count:t.count}):i(`memory.usageNever`)}),t?.lastUsedAt?(0,m.jsx)(`span`,{className:`opacity-70`,children:i(`memory.usageLastAt`,{time:_(t.lastUsedAt)})}):null,(0,m.jsx)(`span`,{children:_(e.timestamp)}),e.id?(0,m.jsx)(`span`,{className:`truncate opacity-60`,children:e.id}):null]})]})}function b(e,t){if(t<=7)return Array.from({length:t},(e,t)=>t+1);let n=[1],r=Math.max(2,e-1),i=Math.min(t-1,e+1);r>2&&n.push(null);for(let e=r;e<=i;e+=1)n.push(e);return i<t-1&&n.push(null),n.push(t),n}function ne({page:e,pageCount:t,onChange:n}){let{t:r}=c(),i=`rounded border border-dark-border p-1 text-dark-muted hover:bg-dark-hover hover:text-dark-text disabled:cursor-not-allowed disabled:opacity-40`;return(0,m.jsxs)(`div`,{"data-testid":`memory-pager`,className:`flex shrink-0 items-center justify-end gap-1 border-t border-dark-border px-4 py-2`,children:[(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e-1),disabled:e<=1,"aria-label":r(`common.prevPage`),className:i,children:(0,m.jsx)(s,{size:13,"aria-hidden":`true`})}),b(e,t).map((t,r)=>t===null?(0,m.jsx)(`span`,{className:`px-1 text-xs text-dark-muted opacity-60`,children:`…`},`gap-${r}`):(0,m.jsx)(`button`,{type:`button`,"data-testid":`memory-page-${t}`,onClick:()=>n(t),"aria-current":t===e?`page`:void 0,className:t===e?`min-w-[1.75rem] rounded border border-accent-blue/60 bg-accent-blue/15 px-1.5 py-1 text-xs text-dark-text`:`min-w-[1.75rem] rounded border border-dark-border px-1.5 py-1 text-xs text-dark-muted hover:bg-dark-hover hover:text-dark-text`,children:t},t)),(0,m.jsx)(`button`,{type:`button`,onClick:()=>n(e+1),disabled:e>=t,"aria-label":r(`common.nextPage`),className:i,children:(0,m.jsx)(o,{size:13,"aria-hidden":`true`})})]})}export{v as MemoryView};
@@ -0,0 +1 @@
1
+ @font-face{font-display:block;font-family:KaTeX_AMS;font-style:normal;font-weight:400;src:url(/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Caligraphic;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Fraktur;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:700;src:url(/assets/KaTeX_Main-Bold-Cx986IdX.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Main;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Main-Regular-B22Nviop.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:700;src:url(/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Math;font-style:italic;font-weight:400;src:url(/assets/KaTeX_Math-Italic-t53AETM-.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:700;src:url(/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:italic;font-weight:400;src:url(/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_SansSerif;font-style:normal;font-weight:400;src:url(/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Script;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Script-Regular-D3wIWfF6.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Size1;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Size2;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Size3;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAA4oAA4AAAAAHbQAAA3TAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAgRQIDgmcDBEICo1oijYBNgIkA14LMgAEIAWJAAeBHAyBHBvbGiMRdnO0IkRRkiYDgr9KsJ1NUAf2kILNxgUmgqIgq1P89vcbIcmsQbRps3vCcXdYOKSWEPEKgZgQkprQQsxIXUgq0DqpGKmIvrgkeVGtEQD9DzAO29fM9jYhxZEsL2FeURH2JN4MIcTdO049NCVdxQ/w9NrSYFEBKTDKpLKfNkCGDc1RwjZLQcm3vqJ2UW9Xfa3tgAHz6ivp6vgC2yD4/6352ndnN0X0TL7seypkjZlMsjmZnf0Mm5Q+JykRWQBKCVCVPbARPXWyQtb5VgLB6Biq7/Uixcj2WGqdI8tGSgkuRG+t910GKP2D7AQH0DB9FMDW/obJZ8giFI3Wg8Cvevz0M+5m0rTh7XDBlvo9Y4vm13EXmfttwI4mBo1EG15fxJhUiCLbiiyCf/ZA6MFAhg3pGIZGdGIVjtPn6UcMk9A/UUr9PhoNsCENw1APAq0gpH73e+M+0ueyHbabc3vkbcdtzcf/fiy+NxQEjf9ud/ELBHAXJ0nk4z+MXH2Ev/kWyV4k7SkvpPc9Qr38F6RPWnM9cN6DJ0AdD1BhtgABtmoRoFCvPsBAumNm6soZG2Gk5GyVTo2sJncSyp0jQTYoR6WDvTwaaEcHsxHfvuWhHA3a6bN7twRKtcGok6NsCi7jYRrM2jExsUFMxMQYuJbMhuWNOumEJy9hi29Dmg5zMp/A5+hhPG19j1vBrq8JTLr8ki5VLPmG/PynJHVul440bxg5xuymHUFPBshC+nA9I1FmwbRBTNHAcik3Oae0cxKoI3MOriM42UrPe51nsaGxJ+WfXubAsP84aabUlQSJ1IiE0iPETLUU4CATgfXSCSpuRFRmCGbO+wSpAnzaeaCYW1VNEysRtuXCEL1kUFUbbtMv3Tilt/1c11jt3Q5bbMa84cpWipp8Elw3MZhOHsOlwwVUQM3lAR35JiFQbaYCRnMF2lxAWoOg2gyoIV4PouX8HytNIfLhqpJtXB4vjiViUI8IJ7bkC4ikkQvKksnOTKICwnqWSZ9YS5f0WCxmpgjbIq7EJcM4aI2nmhLNY2JIUgOjXZFWBHb+x5oh6cwb0Tv1ackHdKi0I9OO2wE9aogIOn540CCCziyhN+IaejtgAONKznHlHyutPrHGwCx9S6B8kfS4Mfi4Eyv7OU730bT1SCBjt834cXsf43zVjPUqqJjgrjeGnBxSG4aYAKFuVbeCfkDIjAqMb6yLNIbCuvXhMH2/+k2vkNpkORhR59N1CkzoOENvneIosjYmuTxlhUzaGEJQ/iWqx4dmwpmKjrwTiTGTCVozNAYqk/zXOndWxuWSmJkQpJw3pK5KX6QrLt5LATMqpmPAQhkhK6PUjzHUn7E0gHE0kPE0iKkolgkUx9SZmVAdDgpffdyJKg3k7VmzYGCwVXGz/tXmkOIp+vcWs+EMuhhvN0h9uhfzWJziBQmCREGSIFmQIkgVpAnSBRmC//6hkLZwaVhwxlrJSOdqlFtOYxlau9F2QN5Y98xmIAsiM1HVp2VFX+DHHGg6Ecjh3vmqtidX3qHI2qycTk/iwxSt5UzTmEP92ZBnEWTk4Mx8Mpl78ZDokxg/KWb+Q0QkvdKVmq3TMW+RXEgrsziSAfNXFMhDc60N5N9jQzjfO0kBKpUZl0ZmwJ41j/B9Hz6wmRaJB84niNmQrzp9eSlQCDDzazGDdVi3P36VZQ+Jy4f9UBNp+3zTjqI4abaFAm+GShVaXlsGdF3FYzZcDI6cori4kMxUECl9IjJZpzkvitAoxKue+90pDMvcKRxLl53TmOKCmV/xRolNKSqqUxc6LStOETmFOiLZZptlZepcKiAzteG8PEdpnQpbOMNcMsR4RR2Bs0cKFEvSmIjAFcnarqwUL4lDhHmnVkwu1IwshbiCcgvOheZuYyOteufZZwlcTlLgnZ3o/WcYdzZHW/WGaqaVfmTZ1aWCceJjkbZqsfbkOtcFlUZM/jy+hXHDbaUobWqqXaeWobbLO99yG5N3U4wxco0rQGGcOLASFMXeJoham8M+/x6O2WywK2l4HGbq1CoUyC/IZikQhdq3SiuNrvAEj0AVu9x2x3lp/xWzahaxidezFVtdcb5uEnzyl0ZmYiuKI0exvCd4Xc9CV1KB0db00z92wDPde0kukbvZIWN6jUWFTmPIC/Y4UPCm8UfDTFZpZNon1qLFTkBhxzB+FjQRA2Q/YRJT8pQigslMaUpFyAG8TMlXigiqmAZX4xgijKjRlGpLE0GdplRfCaJo0JQaSxNBk6ZmMzcya0FmrcisDdn0Q3HI2sWSppYigmlM1XT/kLQZSNpMJG0WkjYbSZuDpM1F0uYhFc1HxU4m1QJjDK6iL0S5uSj5rgXc3RejEigtcRBtqYPQsiTskmO5vosV+q4VGIKbOkDg0jtRrq+Em1YloaTFar3EGr1EUC8R0kus1Uus00usL97ABr2BjXoDm/QGNhuWtMVBKOwg/i78lT7hBsAvDmwHc/ao3vmUbBmhjeYySZNWvGkfZAgISDSaDo1SVpzGDsAEkF8B+gEapViUoZgUWXcRIGFZNm6gWbAKk0bp0k1MHG9fLYtV4iS2SmLEQFARzRcnf9PUS0LVn05/J9MiRRBU3v2IrvW974v4N00L7ZMk0wXP1409CHo/an8zTRHD3eSJ6m8D4YMkZNl3M79sqeuAsr/m3f+8/yl7A50aiAEJgeBeMWzu7ui9UfUBCe2TIqZIoOd/3/udRBOQidQZUERzb2/VwZN1H/Sju82ew2H2Wfr6qvfVf3hqwDvAIpkQVFy4B9Pe9e4/XvPeceu7h3dvO56iJPf0+A6cqA2ip18ER+iFgggiuOkvj24bby0N9j2UHIkgqIt+sVgfodC4YghLSMjSZbH0VR/6dMDrYJeKHilKTemt6v6kvzvn3/RrdWtr0GoN/xL+Sex/cPYLUpepx9cz/D46UPU5KXgAQa+NDps1v6J3xP1i2HtaDB0M9aX2deA7SYff//+gUCovMmIK/qfsFcOk+4Y5ZN97XlG6zebqtMbKgeRFi51vnxTQYBUik2rS/Cn6PC8ADR8FGxsRPB82dzfND90gIcshOcYUkfjherBz53odpm6TP8txlwOZ71xmfHHOvq053qFF/MRlS3jP0ELudrf2OeN8DHvp6ZceLe8qKYvWz/7yp0u4dKPfli3CYq0O13Ih71mylJ80tOi10On8wi+F4+LWgDPeJ30msSQt9/vkmHq9/Lvo2b461mP801v3W4xTcs6CbvF9UDdrSt+A8OUbpSh55qAUFXWznBBfdeJ8a4d7ugT5tvxUza3h9m4H7ptTqiG4z0g5dc0X29OcGlhpGFMpQo9ytTS+NViZpNdvU4kWx+LKxNY10kQ1yqGXrhe4/1nvP7E+nd5A92TtaRplbHSqoIdOqtRWti+fkB5/n1+/VvCmz12pG1kpQWsfi1ftlBobm0bpngs16CHkbIwdLnParxtTV3QYRlfJ0KFskH7pdN/YDn+yRuSd7sNH3aO0DYPggk6uWuXrfOc+fa3VTxFVvKaNxHsiHmsXyCLIE5yuOeN3/Jdf8HBL/5M6shjyhxHx9BjB1O0+4NLOnjLLSxwO7ukN4jMbOIcD879KLSi6Pk61Oqm2377n8079PXEEQ7cy7OKEC9nbpet118fxweTafpt69x/Bt8UqGzNQt7aelpc44dn5cqhwf71+qKp/Zf/+a0zcizOUWpl/iBcSXip0pplkatCchoH5c5aUM8I7/dWxAej8WicPL1URFZ9BDJelUwEwTkGqUhgSlydVes95YdXvhh9Gfz/aeFWvgVb4tuLbcv4+wLdutVZv/cUonwBD/6eDlE0aSiKK/uoH3+J1wDE/jMVqY2ysGufN84oIXB0sPzy8ollX/LegY74DgJXJR57sn+VGza0x3DnuIgABFM15LmajjjsNlYj+JEZGbuRYcAMOWxFkPN2w6Wd46xo4gVWQR/X4lyI/R6K/YK0110GzudPRW7Y+UOBGTfNNzHeYT0fiH0taunBpq9HEW8OKSaBGj21L0MqenEmNRWBAWDWAk4CpNoEZJ2tTaPFgbQYj8HxtFilErs3BTRwT8uO1NXQaWfIotchmPkAF5mMBAliEmZiOGVgCG9LgRzpscMAOOwowlT3JhusdazXGSC/hxR3UlmWVwWHpOIKheqONvjyhSiTHIkVUco5bnji8m//zL7PKaT1Vl5I6UE609f+gkr6MZKVyKc7zJRmCahLsdlyA5fdQkRSan9LgnnLEyGSkaKJCJog0wAgvepWBt80+1yKln1bMVtCljfNWDueKLsWwaEbBSfSPTEmVRsUcYYMnEjcjeyCZzBXK9E9BYBXLKjOSpUDR+nEV3TFSUdQaz+ot98QxgXwx0GQ+EEUAKB2qZPkQQ0GqFD8UPFMqyaCHM24BZmSGic9EYMagKizOw9Hz50DMrDLrqqLkTAhplMictiCAx5S3BIUQdeJeLnBy2CNtMfz6cV4u8XKoFZQesbf9YZiIERiHjaNodDW6LgcirX/mPnJIkBGDUpTBhSa0EIr38D5hCIszhCM8URGBqImoWjpvpt1ebu/v3Gl3qJfMnNM+9V+kiRFyROTPHQWOcs1dNW94/ukKMPZBvDi55i5CttdeJz84DLngLqjcdwEZ87bFFR8CIG35OAkDVN6VRDZ7aq67NteYqZ2lpT8oYB2CytoBd6VuAx4WgiAsnuj3WohG+LugzXiQRDeM3XYXlULv4dp5VFYC)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Size4;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2)format("woff2")}@font-face{font-display:block;font-family:KaTeX_Typewriter;font-style:normal;font-weight:400;src:url(/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2)format("woff2")}.katex{text-indent:0;text-rendering:auto;font:1.21em/1.2 KaTeX_Main,math,Times New Roman,serif;position:relative}.katex *{border-color:currentColor;-ms-high-contrast-adjust:none!important}.katex .katex-version:after{content:"0.19.0"}.katex .katex-mathml{clip-path:inset(50%);border:0;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.katex .katex-html>.katex-newline{display:block}.katex .katex-base{white-space:nowrap;width:min-content;position:relative}.katex .katex-base,.katex .katex-strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;table-layout:fixed;display:inline-table}.katex .vlist-r{display:table-row}.katex .vlist{vertical-align:bottom;display:table-cell;position:relative}.katex .vlist>span{height:0;display:block;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{width:0;overflow:hidden}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{vertical-align:bottom;width:2px;min-width:2px;font-size:1px;display:table-cell}.katex .katex-vbox{flex-direction:column;align-items:baseline;display:inline-flex}.katex .katex-thinbox{flex-direction:row;width:0;max-width:0;display:inline-flex}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .katex-hdashline,.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-rule,.katex .katex-underline .underline-line,.katex .mfrac .frac-line{min-height:1px}.katex .mspace{display:inline-block}.katex .katex-smash{line-height:0;display:inline}.katex .clap,.katex .llap,.katex .rlap{width:0;position:relative}.katex .clap>.katex-inner,.katex .llap>.katex-inner,.katex .rlap>.katex-inner{position:absolute}.katex .clap>.katex-fix,.katex .llap>.katex-fix,.katex .rlap>.katex-fix{display:inline-block}.katex .llap>.katex-inner{right:0}.katex .clap>.katex-inner,.katex .rlap>.katex-inner{left:0}.katex .clap>.katex-inner>span{margin-left:-50%;margin-right:50%}.katex .katex-rule{border:0 solid;display:inline-block;position:relative}.katex .katex-hline,.katex .katex-overline .overline-line,.katex .katex-underline .underline-line{border-bottom-style:solid;width:100%;display:inline-block}.katex .katex-hdashline{border-bottom-style:dashed;width:100%;display:inline-block}.katex .sqrt>.katex-root{margin-left:.277778em;margin-right:-.555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .katex-sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .katex-sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .katex-sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .katex-sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .katex-sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .katex-sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .katex-sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .katex-sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .katex-sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .katex-sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .katex-sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .katex-sizing.reset-size2.size1{font-size:.833333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .katex-sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .katex-sizing.reset-size2.size3{font-size:1.16667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .katex-sizing.reset-size2.size4{font-size:1.33333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .katex-sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .katex-sizing.reset-size2.size6{font-size:1.66667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .katex-sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .katex-sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .katex-sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .katex-sizing.reset-size2.size10{font-size:3.45667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .katex-sizing.reset-size2.size11{font-size:4.14667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .katex-sizing.reset-size3.size1{font-size:.714286em}.katex .fontsize-ensurer.reset-size3.size2,.katex .katex-sizing.reset-size3.size2{font-size:.857143em}.katex .fontsize-ensurer.reset-size3.size3,.katex .katex-sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .katex-sizing.reset-size3.size4{font-size:1.14286em}.katex .fontsize-ensurer.reset-size3.size5,.katex .katex-sizing.reset-size3.size5{font-size:1.28571em}.katex .fontsize-ensurer.reset-size3.size6,.katex .katex-sizing.reset-size3.size6{font-size:1.42857em}.katex .fontsize-ensurer.reset-size3.size7,.katex .katex-sizing.reset-size3.size7{font-size:1.71429em}.katex .fontsize-ensurer.reset-size3.size8,.katex .katex-sizing.reset-size3.size8{font-size:2.05714em}.katex .fontsize-ensurer.reset-size3.size9,.katex .katex-sizing.reset-size3.size9{font-size:2.46857em}.katex .fontsize-ensurer.reset-size3.size10,.katex .katex-sizing.reset-size3.size10{font-size:2.96286em}.katex .fontsize-ensurer.reset-size3.size11,.katex .katex-sizing.reset-size3.size11{font-size:3.55429em}.katex .fontsize-ensurer.reset-size4.size1,.katex .katex-sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .katex-sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .katex-sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .katex-sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .katex-sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .katex-sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .katex-sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .katex-sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .katex-sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .katex-sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .katex-sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .katex-sizing.reset-size5.size1{font-size:.555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .katex-sizing.reset-size5.size2{font-size:.666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .katex-sizing.reset-size5.size3{font-size:.777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .katex-sizing.reset-size5.size4{font-size:.888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .katex-sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .katex-sizing.reset-size5.size6{font-size:1.11111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .katex-sizing.reset-size5.size7{font-size:1.33333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .katex-sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .katex-sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .katex-sizing.reset-size5.size10{font-size:2.30444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .katex-sizing.reset-size5.size11{font-size:2.76444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .katex-sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .katex-sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .katex-sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .katex-sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .katex-sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .katex-sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .katex-sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .katex-sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .katex-sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .katex-sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .katex-sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .katex-sizing.reset-size7.size1{font-size:.416667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .katex-sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .katex-sizing.reset-size7.size3{font-size:.583333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .katex-sizing.reset-size7.size4{font-size:.666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .katex-sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .katex-sizing.reset-size7.size6{font-size:.833333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .katex-sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .katex-sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .katex-sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .katex-sizing.reset-size7.size10{font-size:1.72833em}.katex .fontsize-ensurer.reset-size7.size11,.katex .katex-sizing.reset-size7.size11{font-size:2.07333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .katex-sizing.reset-size8.size1{font-size:.347222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .katex-sizing.reset-size8.size2{font-size:.416667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .katex-sizing.reset-size8.size3{font-size:.486111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .katex-sizing.reset-size8.size4{font-size:.555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .katex-sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .katex-sizing.reset-size8.size6{font-size:.694444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .katex-sizing.reset-size8.size7{font-size:.833333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .katex-sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .katex-sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .katex-sizing.reset-size8.size10{font-size:1.44028em}.katex .fontsize-ensurer.reset-size8.size11,.katex .katex-sizing.reset-size8.size11{font-size:1.72778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .katex-sizing.reset-size9.size1{font-size:.289352em}.katex .fontsize-ensurer.reset-size9.size2,.katex .katex-sizing.reset-size9.size2{font-size:.347222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .katex-sizing.reset-size9.size3{font-size:.405093em}.katex .fontsize-ensurer.reset-size9.size4,.katex .katex-sizing.reset-size9.size4{font-size:.462963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .katex-sizing.reset-size9.size5{font-size:.520833em}.katex .fontsize-ensurer.reset-size9.size6,.katex .katex-sizing.reset-size9.size6{font-size:.578704em}.katex .fontsize-ensurer.reset-size9.size7,.katex .katex-sizing.reset-size9.size7{font-size:.694444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .katex-sizing.reset-size9.size8{font-size:.833333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .katex-sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .katex-sizing.reset-size9.size10{font-size:1.20023em}.katex .fontsize-ensurer.reset-size9.size11,.katex .katex-sizing.reset-size9.size11{font-size:1.43981em}.katex .fontsize-ensurer.reset-size10.size1,.katex .katex-sizing.reset-size10.size1{font-size:.24108em}.katex .fontsize-ensurer.reset-size10.size2,.katex .katex-sizing.reset-size10.size2{font-size:.289296em}.katex .fontsize-ensurer.reset-size10.size3,.katex .katex-sizing.reset-size10.size3{font-size:.337512em}.katex .fontsize-ensurer.reset-size10.size4,.katex .katex-sizing.reset-size10.size4{font-size:.385728em}.katex .fontsize-ensurer.reset-size10.size5,.katex .katex-sizing.reset-size10.size5{font-size:.433944em}.katex .fontsize-ensurer.reset-size10.size6,.katex .katex-sizing.reset-size10.size6{font-size:.48216em}.katex .fontsize-ensurer.reset-size10.size7,.katex .katex-sizing.reset-size10.size7{font-size:.578592em}.katex .fontsize-ensurer.reset-size10.size8,.katex .katex-sizing.reset-size10.size8{font-size:.694311em}.katex .fontsize-ensurer.reset-size10.size9,.katex .katex-sizing.reset-size10.size9{font-size:.833173em}.katex .fontsize-ensurer.reset-size10.size10,.katex .katex-sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .katex-sizing.reset-size10.size11{font-size:1.19961em}.katex .fontsize-ensurer.reset-size11.size1,.katex .katex-sizing.reset-size11.size1{font-size:.200965em}.katex .fontsize-ensurer.reset-size11.size2,.katex .katex-sizing.reset-size11.size2{font-size:.241158em}.katex .fontsize-ensurer.reset-size11.size3,.katex .katex-sizing.reset-size11.size3{font-size:.281351em}.katex .fontsize-ensurer.reset-size11.size4,.katex .katex-sizing.reset-size11.size4{font-size:.321543em}.katex .fontsize-ensurer.reset-size11.size5,.katex .katex-sizing.reset-size11.size5{font-size:.361736em}.katex .fontsize-ensurer.reset-size11.size6,.katex .katex-sizing.reset-size11.size6{font-size:.401929em}.katex .fontsize-ensurer.reset-size11.size7,.katex .katex-sizing.reset-size11.size7{font-size:.482315em}.katex .fontsize-ensurer.reset-size11.size8,.katex .katex-sizing.reset-size11.size8{font-size:.578778em}.katex .fontsize-ensurer.reset-size11.size9,.katex .katex-sizing.reset-size11.size9{font-size:.694534em}.katex .fontsize-ensurer.reset-size11.size10,.katex .katex-sizing.reset-size11.size10{font-size:.833601em}.katex .fontsize-ensurer.reset-size11.size11,.katex .katex-sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{width:.12em;display:inline-block}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .katex-accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .katex-accent .accent-body{position:relative}.katex .katex-accent .accent-body:not(.accent-full){width:0}.katex .katex-overlay{display:block}.katex .mtable .vertical-separator{min-width:1px;display:inline-block}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;height:inherit;width:100%;display:block;position:absolute}.katex svg path{stroke:none}.katex svg{fill-rule:nonzero;fill-opacity:1;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1}.katex img{border-style:none;min-width:0;max-width:none;min-height:0;max-height:none}.katex .katex-stretchy{width:100%;display:block;position:relative;overflow:hidden}.katex .katex-stretchy:after,.katex .katex-stretchy:before{content:""}.katex .hide-tail{width:100%;position:relative;overflow:hidden}.katex .halfarrow-left{width:50.2%;position:absolute;left:0;overflow:hidden}.katex .halfarrow-right{width:50.2%;position:absolute;right:0;overflow:hidden}.katex .brace-left{width:25.1%;position:absolute;left:0;overflow:hidden}.katex .brace-center{width:50%;position:absolute;left:25%;overflow:hidden}.katex .brace-right{width:25.1%;position:absolute;right:0;overflow:hidden}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{box-sizing:border-box;border:.04em solid}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .katex-sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{box-sizing:border-box;border-top:.049em solid;border-right:.049em solid;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .reflectbox{display:inline-block;transform:scaleX(-1)}.katex .eqn-num:before{content:"(" counter(katexEqnNo) ")";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:"(" counter(mmlEqnNo) ")";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{text-align:left;display:inline-block;position:absolute;right:calc(50% + .3em)}.katex .cd-label-right{text-align:right;display:inline-block;position:absolute;left:calc(50% + .3em)}.katex-display{text-align:center;margin:1em 0;display:block}.katex-display>.katex{text-align:center;white-space:nowrap;display:block}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.katex-tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.katex-tag{left:0;right:auto}.katex-display.fleqn>.katex{text-align:left;padding-left:2em}body{counter-reset:katexEqnNo mmlEqnNo}