@tencent-ai/agent-sdk 0.3.269 → 0.3.270

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 (145) hide show
  1. package/cli/CHANGELOG.md +21 -0
  2. package/cli/dist/codebuddy-headless.js +111 -108
  3. package/cli/dist/codebuddy-lite-wb.mjs +143 -140
  4. package/cli/dist/web-ui/assets/{CanvasPaneStandaloneView-AFymTrqt.js → CanvasPaneStandaloneView-CDO7isWn.js} +1 -1
  5. package/cli/dist/web-ui/assets/{CanvasView-CoxUIOeY.js → CanvasView-DJNkeBGK.js} +1 -1
  6. package/cli/dist/web-ui/assets/{ChangesView-CTnio3qy.js → ChangesView-fCuIktEK.js} +1 -1
  7. package/cli/dist/web-ui/assets/{DocsView-DfGq3q0Y.js → DocsView-B79hLvzs.js} +1 -1
  8. package/cli/dist/web-ui/assets/{EditorView-CYw2oZg1.js → EditorView-7YnlryBL.js} +1 -1
  9. package/cli/dist/web-ui/assets/{KeybindingsView-D6w9QUh3.js → KeybindingsView-CIDkpkAb.js} +1 -1
  10. package/cli/dist/web-ui/assets/{LogsView-CP5xbyy4.js → LogsView-Bcv52scT.js} +1 -1
  11. package/cli/dist/web-ui/assets/{MetricsView-C2c14t7O.js → MetricsView-DUSiPsda.js} +1 -1
  12. package/cli/dist/web-ui/assets/{PluginsView-BSEje_UM.js → PluginsView-BTOCj9co.js} +1 -1
  13. package/cli/dist/web-ui/assets/{RemoteControlView-2f1ZwMQ5.js → RemoteControlView-YqmY0vro.js} +1 -1
  14. package/cli/dist/web-ui/assets/{SettingsView-tOHto0ek.js → SettingsView-D2wIPOBw.js} +1 -1
  15. package/cli/dist/web-ui/assets/{SplitContainer-q9iSME5N.js → SplitContainer-DlEN5H4s.js} +1 -1
  16. package/cli/dist/web-ui/assets/{StatsView-BVIL7ys1.js → StatsView-C7iB42TQ.js} +1 -1
  17. package/cli/dist/web-ui/assets/{TasksView-BuNGf8H8.js → TasksView-CKm5dh4d.js} +1 -1
  18. package/cli/dist/web-ui/assets/{TerminalPaneView-IZXBrZd0.js → TerminalPaneView-Cs-7CKCw.js} +1 -1
  19. package/cli/dist/web-ui/assets/{TracesView-BagVLm59.js → TracesView-4MhXOs0J.js} +1 -1
  20. package/cli/dist/web-ui/assets/{WorkersView-CFhFpbFC.js → WorkersView-B5SyD2xB.js} +1 -1
  21. package/cli/dist/web-ui/assets/{abnfDiagram-O67JEVCF-BbyhIfaI.js → abnfDiagram-O67JEVCF-luL6Qe5x.js} +1 -1
  22. package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CVyCykh_.js +1 -0
  23. package/cli/dist/web-ui/assets/{architectureDiagram-NJMV4G6O-DxDD6eVt.js → architectureDiagram-NJMV4G6O-CXZjweyd.js} +1 -1
  24. package/cli/dist/web-ui/assets/{blockDiagram-BEXU5L5S-DTRa2Tb9.js → blockDiagram-BEXU5L5S-DceMcN-6.js} +1 -1
  25. package/cli/dist/web-ui/assets/{c4Diagram-YGBWAQC7--r-yED_M.js → c4Diagram-YGBWAQC7-Chr6hcY4.js} +1 -1
  26. package/cli/dist/web-ui/assets/{canvas-store-BpQ38Vml.js → canvas-store-CLGZ388s.js} +1 -1
  27. package/cli/dist/web-ui/assets/channel-pxcszUh2.js +1 -0
  28. package/cli/dist/web-ui/assets/{chunk-3FUC2YCW-CrLNasJM.js → chunk-3FUC2YCW-BRXxiofJ.js} +1 -1
  29. package/cli/dist/web-ui/assets/{chunk-5DYCD2WN-BvGB0nx-.js → chunk-5DYCD2WN-BJidDn4j.js} +1 -1
  30. package/cli/dist/web-ui/assets/{chunk-742MDFTN-BTBNbBjA.js → chunk-742MDFTN-D8PKsc6_.js} +1 -1
  31. package/cli/dist/web-ui/assets/{chunk-7INBJB4K-CnYo9mzQ.js → chunk-7INBJB4K-0OOQXMSm.js} +1 -1
  32. package/cli/dist/web-ui/assets/{chunk-7M6MHVWA-ChPc3AIy.js → chunk-7M6MHVWA-CinmEwpu.js} +1 -1
  33. package/cli/dist/web-ui/assets/{chunk-7PRAP22T-BWJP0sRU.js → chunk-7PRAP22T-D0WpyU-H.js} +1 -1
  34. package/cli/dist/web-ui/assets/{chunk-GTNCS2PH-BWIt5JBZ.js → chunk-GTNCS2PH-NNZzPISm.js} +1 -1
  35. package/cli/dist/web-ui/assets/{chunk-GWA4HPMP-DPP9EzOc.js → chunk-GWA4HPMP-CVQtrfg2.js} +1 -1
  36. package/cli/dist/web-ui/assets/{chunk-MBY4JIJT-WW7QGbUd.js → chunk-MBY4JIJT-B2Fs2skV.js} +1 -1
  37. package/cli/dist/web-ui/assets/{chunk-NETBCI7D-DvHPTWgP.js → chunk-NETBCI7D-DS15Lcf7.js} +1 -1
  38. package/cli/dist/web-ui/assets/{chunk-O7XYJQB3-DNIHMsy6.js → chunk-O7XYJQB3-irIWVhcH.js} +1 -1
  39. package/cli/dist/web-ui/assets/{chunk-UA2S7LBM-FmyRAjon.js → chunk-UA2S7LBM-DHv_5vdC.js} +1 -1
  40. package/cli/dist/web-ui/assets/{chunk-WEXAMYUT-DPGJtaXE.js → chunk-WEXAMYUT-DTnPpX3o.js} +1 -1
  41. package/cli/dist/web-ui/assets/{chunk-Z7XXMR3K-xCwg-Yew.js → chunk-Z7XXMR3K-CL6QEwjv.js} +1 -1
  42. package/cli/dist/web-ui/assets/{chunk-ZIGJFQKS-C33Iz6Fl.js → chunk-ZIGJFQKS-D-9hFu_x.js} +1 -1
  43. package/cli/dist/web-ui/assets/{classDiagram-v2-NBCMYWYE-CYRZjfMU.js → classDiagram-v2-NBCMYWYE-BGpw8OWR.js} +1 -1
  44. package/cli/dist/web-ui/assets/{cssMode-ClDS6DMb.js → cssMode-DYH1pn7V.js} +1 -1
  45. package/cli/dist/web-ui/assets/{cynefin-OW5HDTMX-BZMPI_-L.js → cynefin-OW5HDTMX-BwDHcOb3.js} +1 -1
  46. package/cli/dist/web-ui/assets/{cynefinDiagram-VND7K2PF-xv7006O3.js → cynefinDiagram-VND7K2PF-C04bh7p8.js} +1 -1
  47. package/cli/dist/web-ui/assets/{dagre-6A5THRUB-BaA5Prow.js → dagre-6A5THRUB-Dea8s6xE.js} +1 -1
  48. package/cli/dist/web-ui/assets/{diagram-22UHCM2B-CLPFfA4R.js → diagram-22UHCM2B-DJVauquX.js} +1 -1
  49. package/cli/dist/web-ui/assets/{diagram-3UASUU5V-DX9eVGvg.js → diagram-3UASUU5V-C7-A4v72.js} +1 -1
  50. package/cli/dist/web-ui/assets/{diagram-ATOU4E4O-C6tAUS3M.js → diagram-ATOU4E4O-7B6YBDOj.js} +1 -1
  51. package/cli/dist/web-ui/assets/{diagram-CDSNMT55-C4bjVjgp.js → diagram-CDSNMT55-DMAwoRXf.js} +1 -1
  52. package/cli/dist/web-ui/assets/{diagram-MLGK6HIB--R4pb2v7.js → diagram-MLGK6HIB-CNB_vlIZ.js} +1 -1
  53. package/cli/dist/web-ui/assets/{diagram-MPIPVDR6-DBZrcvRV.js → diagram-MPIPVDR6-hyhLuNp3.js} +1 -1
  54. package/cli/dist/web-ui/assets/{ebnfDiagram-ZINNZB2B-guH8XqK5.js → ebnfDiagram-ZINNZB2B-CJWaxsG5.js} +1 -1
  55. package/cli/dist/web-ui/assets/{editor-store-B581kWHa.js → editor-store-BxjPLrr9.js} +1 -1
  56. package/cli/dist/web-ui/assets/{editor.main-BDJb4JDA.js → editor.main-Czm6gHJH.js} +2 -2
  57. package/cli/dist/web-ui/assets/{elk-276RUBZZ-CeiKMULj.js → elk-276RUBZZ-D5Y00SxR.js} +1 -1
  58. package/cli/dist/web-ui/assets/{erDiagram-OPXOYQCR-sBAqBzrO.js → erDiagram-OPXOYQCR-BmYHBZJv.js} +1 -1
  59. package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-D5vLpI9F.js +1 -0
  60. package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-Cf58WNhf.js +1 -0
  61. package/cli/dist/web-ui/assets/{ganttDiagram-FUAMR5RP-C6_HpREX.js → ganttDiagram-FUAMR5RP-DbhB40jH.js} +1 -1
  62. package/cli/dist/web-ui/assets/{gitGraph-4MIJSDKK-BXoSq3Gg.js → gitGraph-4MIJSDKK-mjDyHNS1.js} +1 -1
  63. package/cli/dist/web-ui/assets/{gitGraphDiagram-X574FWY7-CGtaH2jU.js → gitGraphDiagram-X574FWY7-D7jHGUGu.js} +1 -1
  64. package/cli/dist/web-ui/assets/{htmlMode-D5olfuMo.js → htmlMode-BSBNaQvK.js} +1 -1
  65. package/cli/dist/web-ui/assets/{index-ClsikMuk.js → index-BtMp20L0.js} +6 -6
  66. package/cli/dist/web-ui/assets/{info-A6RAGUB7-DEwLfJ7B.js → info-A6RAGUB7-yf2Iyt5X.js} +1 -1
  67. package/cli/dist/web-ui/assets/{infoDiagram-VRGFBTTK-DCSOdK6X.js → infoDiagram-VRGFBTTK-CmWWZT96.js} +1 -1
  68. package/cli/dist/web-ui/assets/{ishikawaDiagram-OU5B5YK6-BseHnvYw.js → ishikawaDiagram-OU5B5YK6-NcOpKVNl.js} +1 -1
  69. package/cli/dist/web-ui/assets/{journeyDiagram-ZHPQQLJL-BRxQJTqW.js → journeyDiagram-ZHPQQLJL-dY4w9tp1.js} +1 -1
  70. package/cli/dist/web-ui/assets/{jsonMode-Cg5YHEwQ.js → jsonMode-BUaimt20.js} +1 -1
  71. package/cli/dist/web-ui/assets/{kanban-definition-PNTS6WVX-KI9YMfJk.js → kanban-definition-PNTS6WVX-BctMsDJJ.js} +1 -1
  72. package/cli/dist/web-ui/assets/{line-DprNiO-0.js → line-BYkTAP3U.js} +1 -1
  73. package/cli/dist/web-ui/assets/loader-circle-wVK1RLLa.js +1 -0
  74. package/cli/dist/web-ui/assets/{mermaid-parser.core-GTP4u3FU.js → mermaid-parser.core-BLRTQ_8m.js} +3 -3
  75. package/cli/dist/web-ui/assets/{mermaid.core-CNUJl-CG.js → mermaid.core-DGYOOYu5.js} +4 -4
  76. package/cli/dist/web-ui/assets/{mindmap-definition-NLK3R4M7-C2PcP9ry.js → mindmap-definition-NLK3R4M7-DtFEhmgs.js} +1 -1
  77. package/cli/dist/web-ui/assets/{packet-AYTQ26CC-CZLuLwvG.js → packet-AYTQ26CC-DG8Ws-Q6.js} +1 -1
  78. package/cli/dist/web-ui/assets/{pegDiagram-GJSIUBJH-Bm2hR9le.js → pegDiagram-GJSIUBJH-C1B_R8sV.js} +1 -1
  79. package/cli/dist/web-ui/assets/{pie-WAS4IAKB-CRzoh5ox.js → pie-WAS4IAKB-WpUKIR_Y.js} +1 -1
  80. package/cli/dist/web-ui/assets/{pieDiagram-5QR66LMP-CTJ2r9nd.js → pieDiagram-5QR66LMP-C7VoNMU4.js} +1 -1
  81. package/cli/dist/web-ui/assets/power-BNRlQx4o.js +1 -0
  82. package/cli/dist/web-ui/assets/{quadrantDiagram-O4NWA36T-CTKetN5z.js → quadrantDiagram-O4NWA36T-CXYTQ4y2.js} +1 -1
  83. package/cli/dist/web-ui/assets/{radar-RG4KPBEZ-DXjTvI5t.js → radar-RG4KPBEZ-C3VHLzXv.js} +1 -1
  84. package/cli/dist/web-ui/assets/{railroad-74A4TZTK-BDdQn4Gc.js → railroad-74A4TZTK-Py_5hLH_.js} +1 -1
  85. package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-CqoDhjmj.js +1 -0
  86. package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-DUWdDy3z.js +1 -0
  87. package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-Co6yi1zs.js +1 -0
  88. package/cli/dist/web-ui/assets/{railroadDiagram-XR7U4H2S-B_YntG1t.js → railroadDiagram-XR7U4H2S-5OEyONOk.js} +1 -1
  89. package/cli/dist/web-ui/assets/{requirementDiagram-PLB6GJNP-CDjL2cNi.js → requirementDiagram-PLB6GJNP-DUJYTLHd.js} +1 -1
  90. package/cli/dist/web-ui/assets/{sankeyDiagram-IPEJSGJF-qXJEVvf1.js → sankeyDiagram-IPEJSGJF-Bedevch2.js} +1 -1
  91. package/cli/dist/web-ui/assets/{sequenceDiagram-PO4LG4MO-l-r7gLpE.js → sequenceDiagram-PO4LG4MO-pgraPAoD.js} +1 -1
  92. package/cli/dist/web-ui/assets/{server-O9q4QgxP.js → server-Ccbyj1qh.js} +1 -1
  93. package/cli/dist/web-ui/assets/{sidebar-store-BI5HJsXT.js → sidebar-store-Rkdixr53.js} +1 -1
  94. package/cli/dist/web-ui/assets/{stateDiagram-v2-GCMORJYK-IswgvzFJ.js → stateDiagram-v2-GCMORJYK-DALpfmXP.js} +1 -1
  95. package/cli/dist/web-ui/assets/{swimlanes-2SLR337P-JwNdJjRm.js → swimlanes-2SLR337P-DYo2RgRV.js} +1 -1
  96. package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Dxiovvmi.js +8 -0
  97. package/cli/dist/web-ui/assets/{terminal-store-DxSL6lew.js → terminal-store-DOTQJFag.js} +1 -1
  98. package/cli/dist/web-ui/assets/{theme-store-B-x3NJPZ.js → theme-store-7kL2_Dih.js} +1 -1
  99. package/cli/dist/web-ui/assets/{timeline-definition-EJHVYXUP-DZbLKd2p.js → timeline-definition-EJHVYXUP-teGYk-dY.js} +1 -1
  100. package/cli/dist/web-ui/assets/{timer-CPkvO7Hr.js → timer-DsflRbuo.js} +1 -1
  101. package/cli/dist/web-ui/assets/{treeView-Q6P3EWNA-ClDx_xC6.js → treeView-Q6P3EWNA-DsuuN89d.js} +1 -1
  102. package/cli/dist/web-ui/assets/{treemap-WGGIJYW6-RDLtBb4P.js → treemap-WGGIJYW6-BqqhgGGn.js} +1 -1
  103. package/cli/dist/web-ui/assets/{triangle-alert-RxeG6BcU.js → triangle-alert-BL4rmdOu.js} +1 -1
  104. package/cli/dist/web-ui/assets/{tsMode-D4E8Qd-x.js → tsMode-B6SPhuNF.js} +1 -1
  105. package/cli/dist/web-ui/assets/{use-i18n-BCKBlfpd.js → use-i18n-BvJYl_9l.js} +1 -1
  106. package/cli/dist/web-ui/assets/{usecaseDiagram-POWQR4AR-DEfQU35o.js → usecaseDiagram-POWQR4AR-2sD6xPnt.js} +1 -1
  107. package/cli/dist/web-ui/assets/{vennDiagram-UO4OBE2U-C4yxYnjL.js → vennDiagram-UO4OBE2U-DHLn-BEs.js} +1 -1
  108. package/cli/dist/web-ui/assets/{wardley-WFR3VGLG-wNwnrEey.js → wardley-WFR3VGLG-BD5dMb6v.js} +1 -1
  109. package/cli/dist/web-ui/assets/{wardleyDiagram-VNRHLVJA-nrPZlF5q.js → wardleyDiagram-VNRHLVJA-6V8TM6o7.js} +1 -1
  110. package/cli/dist/web-ui/assets/{workspace-dock-store-5JIgHIqh.js → workspace-dock-store-D1kqgYR-.js} +1 -1
  111. package/cli/dist/web-ui/assets/{xychartDiagram-PMCCYNJV-BXJAFZRI.js → xychartDiagram-PMCCYNJV-B5wGEmv3.js} +1 -1
  112. package/cli/dist/web-ui/assets/{zap-JdzyzkaE.js → zap-u2SXZ7au.js} +1 -1
  113. package/cli/dist/web-ui/index.html +9 -9
  114. package/cli/dist/web-ui/sw.js +1 -1
  115. package/cli/dist-server/2701.codebuddy.js +2 -2
  116. package/cli/dist-server/3080.codebuddy.js +1 -1
  117. package/cli/dist-server/3163.codebuddy.js +1 -1
  118. package/cli/dist-server/codebuddy.js +41 -39
  119. package/cli/dist-server/types/node/agent-task/agent-task.d.ts +1 -0
  120. package/cli/dist-server/types/node/permission/brokered-sandbox/host-service.d.ts +1 -0
  121. package/cli/dist-server/types/node/permission/sandbox-orchestrator.d.ts +2 -1
  122. package/cli/dist-server/types/node/server/formats/acp/acp-trace-context.d.ts +2 -0
  123. package/cli/dist-server/types/node/server/types.d.ts +8 -1
  124. package/cli/dist-server/types/node/utils/clipboard-utils.d.ts +1 -1
  125. package/cli/dist-server/types/node/utils/image-preparation-guard.d.ts +5 -1
  126. package/cli/dist-server/types/node/utils/request-scene.d.ts +5 -0
  127. package/cli/dist-server/types/vendor/cbc-core/node/utils/history-utils.d.ts +33 -8
  128. package/cli/dist-server/types/vendor/cbc-core/node/utils/input-item-utils.d.ts +27 -0
  129. package/cli/package.json +4 -4
  130. package/cli/product.cloudhosted.json +2 -2
  131. package/cli/product.internal.json +2 -2
  132. package/cli/product.ioa.json +2 -2
  133. package/cli/product.json +2 -2
  134. package/cli/product.selfhosted.json +2 -2
  135. package/package.json +1 -1
  136. package/cli/dist/web-ui/assets/architecture-7GRP2DOG-CHYM9JTs.js +0 -1
  137. package/cli/dist/web-ui/assets/channel-DtDG5p59.js +0 -1
  138. package/cli/dist/web-ui/assets/eventmodeling-NTZA5JFV-PAdtPpRo.js +0 -1
  139. package/cli/dist/web-ui/assets/flowDiagram-KWPJA3E3-EJkyCIxy.js +0 -1
  140. package/cli/dist/web-ui/assets/loader-circle-1kyJNWeb.js +0 -1
  141. package/cli/dist/web-ui/assets/power-CbA3xFVD.js +0 -1
  142. package/cli/dist/web-ui/assets/railroad-abnf-HS5TGJTU-C9Q7Ymc5.js +0 -1
  143. package/cli/dist/web-ui/assets/railroad-ebnf-LZEXJU2U-Bg_FzoOI.js +0 -1
  144. package/cli/dist/web-ui/assets/railroad-peg-WCYAUIDC-cvFGmoWK.js +0 -1
  145. package/cli/dist/web-ui/assets/swimlanesDiagram-TC7HE7FX-Bopn2-Vs.js +0 -8
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{W as t,Y as n,c as r,i,nt as a,ot as o,t as s,tt as c}from"./use-i18n-BCKBlfpd.js";import{l,u}from"./markdown-DCKhnxE9.js";import{t as d}from"./theme-store-B-x3NJPZ.js";import{n as f}from"./HoverHint-D2G73lbr.js";import{$ as p,$t as m,C as h,Ct as g,Et as _,Gt as v,It as y,J as b,Ot as ee,Pt as x,Q as S,S as te,U as C,X as w,Y as ne,Z as re,_n as T,a as E,an as ie,at as D,bt as O,c as ae,dt as k,et as oe,ft as se,g as A,gt as ce,h as j,i as le,it as ue,jt as de,l as fe,m as M,n as N,pt as pe,r as me,t as P,tt as he,u as ge,vt as _e,wt as ve}from"./index-ClsikMuk.js";var ye=i(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),F=i(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),be=i(`sun-moon`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715`,key:`xlf6rm`}],[`path`,{d:`M16 12a4 4 0 0 0-4-4`,key:`6vsxu`}],[`path`,{d:`m19 5-1.256 1.256`,key:`1yg6a6`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}]]),I=e(u(),1),L=/^[a-zA-Z0-9._:/-]+$/;function R(e){return L.test(e)}var z=l(),B=[`128000`,`256000`,`1000000`],xe=[`16384`,`32768`,`65536`,`128000`],V={id:``,name:``,vendor:`Custom`,url:``,apiKey:``,maxInputTokens:`128000`,maxOutputTokens:`16384`,temperature:``,supportsToolCall:!0,supportsImages:!1,supportsReasoning:!1,useCustomProtocol:!1};function H(e){let t=Number(e);return Number.isFinite(t)?t>=1e6&&t%1e6==0?`${t/1e6}M`:t>=1e3&&t%1e3==0?`${t/1e3}k`:t>=1024&&t%1024==0?`${t/1024}k`:String(t):e}function U(e){let{label:t,value:n,presets:r,disabled:i,step:a,formatLabel:o,onChange:s}=e,c=r.includes(n),l=c?n:`__custom__`,u=o||(e=>e);return(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t}),(0,z.jsxs)(`select`,{className:`custom-models-select`,value:l,disabled:i,onChange:e=>{let t=e.target.value;if(t===`__custom__`){s(n&&!Number.isNaN(Number(n))?n:r[0]);return}s(t)},children:[r.map(e=>(0,z.jsx)(`option`,{value:e,children:u(e)},e)),(0,z.jsx)(`option`,{value:`__custom__`,children:`Custom…`})]}),!c&&(0,z.jsx)(`input`,{className:`settings-input`,type:`number`,step:a,value:n,disabled:i,onChange:e=>s(e.target.value),placeholder:r[0]})]})}function W(e){return{id:e.id||``,name:e.name||``,vendor:e.vendor||`Custom`,url:e.url||``,apiKey:e.apiKey||``,maxInputTokens:e.maxInputTokens==null?``:String(e.maxInputTokens),maxOutputTokens:e.maxOutputTokens==null?``:String(e.maxOutputTokens),temperature:e.temperature==null?``:String(e.temperature),supportsToolCall:e.supportsToolCall!==!1,supportsImages:!!e.supportsImages,supportsReasoning:!!e.supportsReasoning,useCustomProtocol:!!e.useCustomProtocol}}function G(e){let t=e.trim();return t!==``&&!Number.isNaN(Number(t))?Number(t):void 0}function K(e){let t={id:e.id.trim(),name:e.name.trim()||e.id.trim(),vendor:e.vendor.trim()||`Custom`,url:e.url.trim(),supportsToolCall:e.supportsToolCall,supportsImages:e.supportsImages,supportsReasoning:e.supportsReasoning,useCustomProtocol:e.useCustomProtocol};e.apiKey.trim()&&(t.apiKey=e.apiKey.trim());let n=G(e.maxInputTokens);n!==void 0&&(t.maxInputTokens=n);let r=G(e.maxOutputTokens);r!==void 0&&(t.maxOutputTokens=r);let i=G(e.temperature);return i!==void 0&&(t.temperature=i),t}function Se({onClose:e}){let{t}=s(),[n,r]=(0,I.useState)(`list`),[i,a]=(0,I.useState)([]),[o,c]=(0,I.useState)(!0),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),[p,m]=(0,I.useState)(V),[h,g]=(0,I.useState)(),[_,v]=(0,I.useState)(null),y=(0,I.useCallback)(async()=>{c(!0),f(null);try{let e=await j(!0),t=Array.isArray(e?.models)?e.models:[];a(t)}catch(e){f(e?.message||t(`settings.customModels.loadFailed`)),a([])}finally{c(!1)}},[]);(0,I.useEffect)(()=>{y().catch(()=>{})},[y]),(0,I.useEffect)(()=>{let t=t=>{if(t.key===`Escape`){if(_){v(null);return}if(n===`form`){r(`list`),f(null);return}e()}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[_,n,e]);let b=()=>{m(V),g(void 0),f(null),r(`form`)},ee=e=>{m(W(e)),g(e.id),f(null),r(`form`)},S=()=>{r(`list`),f(null),g(void 0)},C=(e,t)=>{m(n=>({...n,[e]:t}))},w=async()=>{let e=p.id.trim(),n=p.url.trim();if(!n){f(t(`settings.customModels.err.urlRequired`));return}if(!/^https?:\/\//i.test(n)){f(t(`settings.customModels.err.urlInvalid`));return}if(!e){f(t(`settings.customModels.err.idRequired`));return}if(!R(e)){f(t(`settings.customModels.err.idInvalid`));return}if((!h||h!==e)&&i.some(t=>t.id===e)){f(t(`settings.customModels.err.idDuplicate`));return}u(!0),f(null);try{let t=K(p);if(h&&!p.apiKey.trim()){let e=i.find(e=>e.id===h);e?.apiKey&&(t.apiKey=e.apiKey)}let n=await A({model:t,previousId:h&&h!==e?h:void 0,visible:!1,global:!0});a(Array.isArray(n.models)?n.models:[]),r(`list`),g(void 0)}catch(e){f(e?.message||t(`settings.customModels.saveFailed`))}finally{u(!1)}},ne=async()=>{if(_){u(!0),f(null);try{let e=await M(_.id,!0);a(Array.isArray(e.models)?e.models:[]),v(null)}catch(e){f(e?.message||t(`settings.customModels.deleteFailed`)),v(null)}finally{u(!1)}}};return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`custom-models-overlay`,children:(0,z.jsxs)(`div`,{className:`custom-models-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`custom-models-title`,children:[(0,z.jsxs)(`div`,{className:`custom-models-header`,children:[(0,z.jsx)(`h2`,{id:`custom-models-title`,className:`custom-models-title`,children:t(n===`list`?`settings.customModels.title`:h?`settings.customModels.editTitle`:`settings.customModels.addTitle`)}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn`,onClick:e,"aria-label":t(`settings.customModels.close`),children:(0,z.jsx)(ce,{size:16})})]}),d&&(0,z.jsx)(`div`,{className:`custom-models-error`,children:d}),n===`list`?(0,z.jsxs)(`div`,{className:`custom-models-body`,children:[(0,z.jsxs)(`div`,{className:`custom-models-toolbar`,children:[(0,z.jsx)(`span`,{className:`custom-models-hint`,children:t(`settings.customModels.hint`)}),(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:b,children:[(0,z.jsx)(de,{size:14}),(0,z.jsx)(`span`,{children:t(`settings.customModels.add`)})]})]}),o?(0,z.jsx)(`div`,{className:`custom-models-empty`,children:t(`settings.loading`)}):i.length===0?(0,z.jsx)(`div`,{className:`custom-models-empty`,children:t(`settings.customModels.empty`)}):(0,z.jsx)(`ul`,{className:`custom-models-list`,children:i.map(e=>(0,z.jsxs)(`li`,{className:`custom-models-row`,children:[(0,z.jsxs)(`div`,{className:`custom-models-row-main`,children:[(0,z.jsx)(`div`,{className:`custom-models-row-name`,children:e.name||e.id}),(0,z.jsxs)(`div`,{className:`custom-models-row-meta`,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:e.id}),e.vendor?(0,z.jsxs)(`span`,{children:[`· `,e.vendor]}):null]}),e.url?(0,z.jsx)(`div`,{className:`custom-models-row-url`,title:e.url,children:e.url}):null]}),(0,z.jsxs)(`div`,{className:`custom-models-row-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn`,onClick:()=>ee(e),title:t(`settings.customModels.edit`),children:(0,z.jsx)(x,{size:14})}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn danger`,onClick:()=>v(e),title:t(`settings.customModels.delete`),children:(0,z.jsx)(_e,{size:14})})]})]},e.id))})]}):(0,z.jsxs)(`div`,{className:`custom-models-body custom-models-form`,children:[(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.name`)}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.name,onChange:e=>C(`name`,e.target.value),disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.vendor`)}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.vendor,onChange:e=>C(`vendor`,e.target.value),placeholder:`OpenAI / Anthropic / Custom`,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsxs)(`span`,{children:[t(`settings.customModels.field.url`),` *`]}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.url,onChange:e=>C(`url`,e.target.value),placeholder:`https://api.example.com/v1/chat/completions`,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.apiKey`)}),(0,z.jsx)(`input`,{className:`settings-input`,type:`password`,autoComplete:`off`,value:p.apiKey,onChange:e=>C(`apiKey`,e.target.value),placeholder:h?t(`settings.customModels.apiKeyKeep`):``,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsxs)(`span`,{children:[t(`settings.customModels.field.id`),` *`]}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.id,onChange:e=>C(`id`,e.target.value),placeholder:`my-openai-model`,disabled:l})]}),(0,z.jsxs)(`div`,{className:`custom-models-field-row`,children:[(0,z.jsx)(U,{label:t(`settings.customModels.field.maxInputTokens`),value:p.maxInputTokens,presets:B,formatLabel:H,disabled:l,onChange:e=>C(`maxInputTokens`,e)}),(0,z.jsx)(U,{label:t(`settings.customModels.field.maxOutputTokens`),value:p.maxOutputTokens,presets:xe,formatLabel:H,disabled:l,onChange:e=>C(`maxOutputTokens`,e)}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.temperature`)}),(0,z.jsx)(`input`,{className:`settings-input`,type:`number`,step:`0.1`,min:`0`,max:`2`,value:p.temperature,disabled:l,onChange:e=>C(`temperature`,e.target.value),placeholder:t(`settings.customModels.field.temperatureDefault`)})]})]}),(0,z.jsxs)(`div`,{className:`custom-models-toggles`,children:[(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsToolCall`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsToolCall?`on`:``}`,onClick:()=>C(`supportsToolCall`,!p.supportsToolCall)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsImages`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsImages?`on`:``}`,onClick:()=>C(`supportsImages`,!p.supportsImages)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsReasoning`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsReasoning?`on`:``}`,onClick:()=>C(`supportsReasoning`,!p.supportsReasoning)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.useCustomProtocol`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.useCustomProtocol?`on`:``}`,onClick:()=>C(`useCustomProtocol`,!p.useCustomProtocol)})]})]}),(0,z.jsxs)(`div`,{className:`custom-models-form-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:S,disabled:l,children:t(`settings.customModels.cancel`)}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-primary-btn`,onClick:()=>{w().catch(()=>{})},disabled:l,children:t(l?`settings.loading`:`settings.customModels.save`)})]})]})]})}),_&&(0,z.jsx)(te,{title:t(`settings.customModels.deleteTitle`),message:t(`settings.customModels.deleteMessage`).replace(`{id}`,_.id),danger:!0,confirmLabel:t(`settings.customModels.delete`),cancelLabel:t(`settings.customModels.cancel`),onConfirm:()=>{ne().catch(()=>{})},onCancel:()=>v(null)})]})}function Ce(e){let t={...e??{}},n=a();return n&&(t.Authorization=`Bearer ${n}`),t}function we({scope:e,configuredDefault:t,defaultInherited:r=!1,onSetDefault:i,onResetDefault:a,allowCreateByAI:c=!0,detachedWorkspace:l=!1}){let{t:u,tryT:d}=s(),{agents:p,defaultAgentName:_,sessionBlank:v}=k(),y=k(e=>e.backendSupport),x=ue(e=>e.sessionId),[te,C]=(0,I.useState)(``),[T,E]=(0,I.useState)(!1),[ie,D]=(0,I.useState)(null),[O,oe]=(0,I.useState)(null),[A,ce]=(0,I.useState)(!1),[j,le]=(0,I.useState)(``),[M,N]=(0,I.useState)(!1),me=(0,I.useRef)(null);(0,I.useEffect)(()=>{if(!M)return;let e=document.activeElement instanceof HTMLElement?document.activeElement:null;me.current?.focus();let t=e=>{e.key===`Escape`&&N(!1)};return window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`keydown`,t),e?.focus()}},[M]);let P=e=>{let t=e?.agents;t&&(l||k.getState().applyAgentFromResponse({agents:t,defaultAgentName:e.defaultAgentName}),C(n=>{let r=e.defaultAgentName||n;return r&&t.some(e=>e.name===r)?r:t.find(e=>re(e.name))?.name??t[0]?.name??``}))};(0,I.useEffect)(()=>{if(y!==!0)return;let e=!1;return b().callExtMethod(`_codebuddy.ai/getAgents`,{}).then(t=>{e||P(t)}).catch(t=>{e||D(h(t,u(`mainAgent.loadFailed`)))}),()=>{e=!0}},[y]);let[he,ge]=(0,I.useState)(!1),[ve,ye]=(0,I.useState)(``),[F,be]=(0,I.useState)(!1),[L,R]=(0,I.useState)(null),B=async()=>{let e=ve.trim();if(e&&!F){be(!0),R(null);try{let t=await o(`/api/v1/agents/create-by-ai`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({description:e})}),n=await t.json().catch(()=>({}));if(!t.ok||n?.data?.success!==!0){R(h(n,`HTTP ${t.status}`));return}ge(!1),ye(``),D(u(`mainAgent.createSuccess`));let r=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(r)}catch(e){R(h(e,u(`mainAgent.createFailed`)))}finally{be(!1)}}},xe=async e=>{if(!A){if(O!==e){oe(e);return}ce(!0),D(null);try{let t=await o(`/api/v1/agents/delete`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({name:e})});if(!t.ok){let e=await t.json().catch(()=>({}));D(h(e,`${u(`mainAgent.deleteFailed`)} (HTTP ${t.status})`));return}D(u(`mainAgent.deleted`,{name:e}));let n=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(n)}catch(e){D(h(e,u(`mainAgent.deleteFailed`)))}finally{ce(!1),oe(null)}}},V=async e=>{D(null);try{let t=await o(`/api/v1/agents/open`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({name:e})}),r=await t.json().catch(()=>({}));if(!t.ok){D(h(r,u(`mainAgent.openFailed`)));return}let i=r?.data?.path;if(typeof i==`string`&&i.trim()){N(!1),n(i.trim());return}D(u(`mainAgent.openFailed`))}catch(e){D(h(e,u(`mainAgent.openFailed`)))}},H=async e=>{E(!0),D(null);try{if(await i(e)){if(l)C(e);else{let e=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(e)}D(u(`mainAgent.defaultSaved`))}else D(u(`settings.saveFailed`))}catch(e){D(h(e,u(`settings.saveFailed`)))}finally{E(!1)}},U=async()=>{E(!0),D(null);try{if(!await a()){D(u(`settings.saveFailed`));return}if(C(``),!l){let e=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(e)}D(u(`settings.saved`))}catch(e){D(h(e,u(`settings.saveFailed`)))}finally{E(!1)}},W=async()=>{if(D(null),!x){D(u(`mainAgent.openInCreateFailed`));return}if(!v){D(u(`mainAgent.openInCreateFailed`));return}E(!0),se();try{let e=await b().callExtMethod(`session/set_agent`,{sessionId:x,agentName:`create`});e?.agentName?(k.getState().applySetAgentResult({agentName:e.agentName,models:e.models??[],currentModelId:e.currentModelId??``,sessionBlank:e.sessionBlank??!1}),D(u(`mainAgent.openInCreateSuccess`))):pe()}catch(e){pe(),D(h(e,u(`mainAgent.openInCreateFailed`)))}finally{E(!1)}},G=j.trim().toLowerCase(),K=e=>!G||[e.name,e.displayName,fe(e,d),ae(e,d)].filter(Boolean).join(` `).toLowerCase().includes(G),Se=ne(p),we=[{label:u(`mainAgent.groupBuiltin`),items:Se.builtin},{label:u(`mainAgent.groupCustom`),items:Se.custom}].map(e=>({...e,items:e.items.filter(K)})).filter(e=>e.items.length>0),Te=S(t??te,_),q=p.find(e=>e.name===Te),J=q?fe(q,d):te||_||`-`,Ee=(0,z.jsxs)(z.Fragment,{children:[p.length>4&&(0,z.jsx)(`div`,{className:`px-3 pb-1`,children:(0,z.jsx)(`input`,{type:`search`,value:j,onChange:e=>le(e.target.value),placeholder:u(`mainAgent.searchPlaceholder`),className:`w-full rounded-md border border-border-default bg-bg-secondary px-2 py-1.5 text-[12px] text-text-primary outline-none focus:border-accent-brand`})}),ie&&(0,z.jsx)(`div`,{className:`settings-value text-[12px] text-text-tertiary`,children:ie}),we.length===0&&(0,z.jsx)(`div`,{className:`settings-value`,children:p.length===0?u(`mainAgent.empty`):u(`mainAgent.filterEmpty`)}),we.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-[11px] uppercase tracking-wide text-text-tertiary`,children:e.label}),e.items.map(e=>{let t=w(e.name,Te),n=e.custom?e.source===`user`?u(`mainAgent.scope.user`):u(`mainAgent.scope.project`):null,r=!l&&e.custom&&(e.source===`user`||e.source===`project`),i=ae(e,d);return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsxs)(`span`,{className:`text-[13px] text-text-primary truncate block`,children:[fe(e,d),n&&(0,z.jsx)(`span`,{className:`ml-1.5 rounded border border-border-default px-1 py-px text-[10px] text-text-tertiary align-middle`,children:n})]}),i&&(0,z.jsx)(`span`,{className:`text-[11px] text-text-tertiary truncate block`,children:i}),e.broken&&(0,z.jsx)(`span`,{className:`text-[11px] text-red-500 truncate block`,children:e.broken})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[t?(0,z.jsx)(`span`,{className:`text-[11px] text-text-tertiary`,children:u(`mainAgent.isDefault`)}):(0,z.jsx)(`button`,{type:`button`,disabled:T||!!e.broken,onClick:()=>H(e.name),className:`text-[12px] text-accent-brand hover:underline disabled:opacity-40`,children:u(`mainAgent.setDefault`)}),!l&&e.name===`create`&&!e.broken&&(0,z.jsx)(f,{text:v?``:u(`mainAgent.lockedHint`),always:!0,className:`inline-flex`,children:(0,z.jsxs)(`button`,{type:`button`,disabled:T||!v,onClick:()=>{W().catch(()=>void 0)},className:`flex items-center gap-1 text-[12px] text-accent-brand hover:underline disabled:opacity-40`,children:[(0,z.jsx)(g,{size:12}),u(`mainAgent.openInCreate`)]})}),r&&(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{V(e.name).catch(()=>void 0)},className:`flex items-center gap-1 text-[12px] text-text-tertiary hover:text-text-primary`,title:u(`mainAgent.openFile`),children:[(0,z.jsx)(m,{size:12}),u(`mainAgent.openFile`)]}),r&&(0,z.jsxs)(`button`,{type:`button`,disabled:A,onClick:()=>{xe(e.name).catch(()=>void 0)},onBlur:()=>{O===e.name&&oe(null)},className:`flex items-center gap-1 text-[12px] disabled:opacity-40 ${O===e.name?`text-red-500 font-medium hover:underline`:`text-text-tertiary hover:text-red-500`}`,title:u(`mainAgent.delete`),children:[(0,z.jsx)(_e,{size:12}),O===e.name?u(`mainAgent.deleteConfirm`):u(`mainAgent.delete`)]})]})]},e.name)})]},e.label)),c&&(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{ge(!0),R(null)},className:`mx-3 my-2 flex w-[calc(100%-24px)] items-center justify-center gap-1.5 rounded-lg border border-dashed border-border-default py-2 text-[12px] text-text-tertiary transition-colors hover:border-accent-brand hover:text-text-primary`,children:[(0,z.jsx)(g,{size:13}),u(`mainAgent.createByAI`)]}),c&&he&&(0,z.jsxs)(`div`,{className:`mx-2 mb-2 rounded-lg border border-border-default bg-bg-primary p-3`,children:[(0,z.jsx)(`div`,{className:`text-[12px] text-text-primary mb-1.5`,children:u(`mainAgent.createByAIHint`)}),(0,z.jsx)(`textarea`,{value:ve,onChange:e=>ye(e.target.value),rows:3,placeholder:u(`mainAgent.createByAIPlaceholder`),className:`w-full resize-none rounded-md border border-border-default bg-bg-secondary px-2 py-1.5 text-[12px] text-text-primary outline-none focus:border-accent-brand`,disabled:F}),L&&(0,z.jsx)(`div`,{className:`mt-1.5 text-[11px] text-red-500`,children:L}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>{ge(!1),ye(``),R(null)},disabled:F,className:`text-[12px] text-text-tertiary hover:text-text-primary disabled:opacity-40`,children:u(`app.cancel`)}),(0,z.jsx)(`button`,{type:`button`,onClick:B,disabled:F||!ve.trim(),className:`flex items-center gap-1 rounded-md bg-accent-brand px-2.5 py-1 text-[12px] text-white hover:opacity-90 disabled:opacity-40`,children:F?(0,z.jsxs)(z.Fragment,{children:[u(`mainAgent.creating`),`…`]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(de,{size:12}),u(`mainAgent.createByAI`)]})})]})]})]});return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:u(`mainAgent.currentDefault`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:u(`mainAgent.currentDefaultHint`)}),e===`project`&&r&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:u(`settings.inherited`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 ml-3`,children:[(0,z.jsx)(`span`,{className:`settings-value`,children:(0,z.jsx)(`strong`,{children:J})}),e===`project`&&!r&&(0,z.jsx)(`button`,{type:`button`,disabled:T,onClick:()=>{U().catch(()=>void 0)},className:`settings-reset-icon`,title:u(`settings.inheritUser`),"aria-label":u(`settings.inheritUser`),children:(0,z.jsx)(ee,{size:13})}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{N(!0),D(null)},className:`rounded-md border border-border-default px-2.5 py-1 text-[12px] text-text-primary transition-colors hover:border-accent-brand hover:text-accent-brand`,children:u(`mainAgent.manage`)})]})]}),M&&(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,onClick:()=>N(!1),children:(0,z.jsxs)(`div`,{className:`flex max-h-[80vh] w-full max-w-2xl flex-col overflow-hidden rounded-xl border border-border-default bg-bg-primary shadow-xl`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`main-agent-manager-title`,onClick:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border-default px-4 py-3`,children:[(0,z.jsx)(`h3`,{id:`main-agent-manager-title`,className:`text-[14px] font-medium text-text-primary`,children:u(`mainAgent.sectionTitle`)}),(0,z.jsx)(`button`,{ref:me,type:`button`,onClick:()=>N(!1),className:`text-text-tertiary hover:text-text-primary`,"aria-label":u(`app.cancel`),children:`✕`})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3`,children:Ee})]})})]})}var Te=[{titleKey:`settings.group.modelAndReasoning`,items:[{key:`reasoningEffort`,labelKey:`settings.item.reasoningEffort`,descKey:`settings.item.reasoningEffort.desc`,type:`select`,options:[{value:`minimal`,labelKey:`settings.effort.minimal`},{value:`low`,labelKey:`settings.effort.low`},{value:`medium`,labelKey:`settings.effort.medium`},{value:`high`,labelKey:`settings.effort.high`},{value:`xhigh`,labelKey:`settings.effort.xhigh`},{value:`max`,labelKey:`settings.effort.max`}]},{key:`alwaysThinkingEnabled`,labelKey:`settings.item.alwaysThinkingEnabled`,type:`toggle`}]},{titleKey:`settings.group.behavior`,items:[{key:`autoCompactEnabled`,labelKey:`settings.item.autoCompactEnabled`,type:`toggle`},{key:`autoCompactWindow`,labelKey:`settings.item.autoCompactWindow`,descKey:`settings.item.autoCompactWindow.desc`,type:`number`},{key:`includeCoAuthoredBy`,labelKey:`settings.item.includeCoAuthoredBy`,type:`toggle`},{key:`fileCheckpointingEnabled`,labelKey:`settings.item.fileCheckpointingEnabled`,descKey:`settings.item.fileCheckpointingEnabled.desc`,type:`toggle`},{key:`promptSuggestionEnabled`,labelKey:`settings.item.promptSuggestionEnabled`,type:`toggle`},{key:`codebuddy.composer.busySendMode`,labelKey:`settings.item.busySendMode`,descKey:`settings.item.busySendMode.desc`,type:`select`,defaultValue:`queue`,hideEmptyOption:!0,options:[{value:`queue`,labelKey:`settings.item.busySendMode.queue`},{value:`immediate`,labelKey:`settings.item.busySendMode.immediate`}]},{key:`ignoreGitIgnore`,labelKey:`settings.item.ignoreGitIgnore`,descKey:`settings.item.ignoreGitIgnore.desc`,type:`toggle`},{key:`deferToolLoading`,labelKey:`settings.item.deferToolLoading`,type:`toggle`},{key:`hookOutputCollapsed`,labelKey:`settings.item.hookOutputCollapsed`,type:`toggle`}]},{titleKey:`settings.group.memory`,items:[{key:`memory.enabled`,labelKey:`settings.item.memory.enabled`,type:`toggle`},{key:`memory.autoMemoryEnabled`,labelKey:`settings.item.memory.autoMemoryEnabled`,descKey:`settings.item.memory.autoMemoryEnabled.desc`,type:`toggle`}]},{titleKey:`settings.group.language`,items:[{key:`language`,labelKey:`settings.item.language`,descKey:`settings.item.language.desc`,type:`text`}]},{titleKey:`settings.group.mainAgent`,items:[{key:`codebuddy.mainAgent.enabled`,labelKey:`settings.item.mainAgent.enabled`,descKey:`settings.item.mainAgent.enabled.desc`,type:`toggle`,defaultValue:!0},{key:`codebuddy.mainAgent.allowUnopted`,labelKey:`settings.item.mainAgent.allowUnopted`,descKey:`settings.item.mainAgent.allowUnopted.desc`,type:`toggle`,defaultValue:!1}]},{titleKey:`settings.group.advanced`,items:[{key:`cleanupPeriodDays`,labelKey:`settings.item.cleanupPeriodDays`,type:`number`},{key:`imageHistoryRetainRounds`,labelKey:`settings.item.imageHistoryRetainRounds`,descKey:`settings.item.imageHistoryRetainRounds.desc`,type:`number`}]},{titleKey:`settings.group.sandbox`,items:[{key:`sandbox.enabled`,labelKey:`settings.item.sandbox.enabled`,descKey:`settings.item.sandbox.enabled.desc`,type:`toggle`},{key:`sandbox.autoAllowBashIfSandboxed`,labelKey:`settings.item.sandbox.autoAllowBashIfSandboxed`,descKey:`settings.item.sandbox.autoAllowBashIfSandboxed.desc`,type:`toggle`}]}];function q(e){return e.split(`.`)[0]}function J(e,t){let n=e;for(let e of t.split(`.`)){if(!n||typeof n!=`object`||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,e))return;n=n[e]}return n}function Ee(e,t){let n=e;for(let e of t.split(`.`)){if(!n||typeof n!=`object`||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,e))return!1;n=n[e]}return!0}function De(e,t,n){let r=t.split(`.`),i=structuredClone(e),a=i;for(let e=0;e<r.length-1;e++){let t=r[e],n=a[t];a[t]=n&&typeof n==`object`&&!Array.isArray(n)?{...n}:{},a=a[t]}return a[r.at(-1)]=n,i}function Oe(e,t){let n=t.split(`.`),r=(e,t)=>{let i={...e},a=n[t];if(t===n.length-1)return delete i[a],i;let o=i[a];if(o&&typeof o==`object`&&!Array.isArray(o)){let e=r(o,t+1);Object.keys(e).length===0?delete i[a]:i[a]=e}return i};return r(e,0)}function ke(e,t,n){return Ee(t,n)?J(t,n):J(e,n)}function Ae(e,t,n,r){let i=n.trim().toLocaleLowerCase();return e.flatMap(e=>{let n=r(e.titleKey).toLocaleLowerCase(),a=i.length>0&&n.includes(i),o=e.items.filter(e=>!t.has(e.key)&&!t.has(q(e.key))?!1:!i||a?!0:[e.key,r(e.labelKey),e.descKey?r(e.descKey):``].some(e=>e.toLocaleLowerCase().includes(i)));return o.length>0?[{...e,items:o}]:[]})}function Y(e,...t){let n=e.trim().toLocaleLowerCase();return!n||t.some(e=>e.toLocaleLowerCase().includes(n))}var X={connection:`settings-section-connection`,appearance:`settings-section-appearance`,notifications:`settings-section-notifications`,model:`settings-section-model`,mode:`settings-section-mode`,system:`settings-section-system`};function je(e){return`settings-section-${e.replace(/\./g,`-`)}`}function Me({presentation:e=`page`,workspaceCwd:i,workspaceLabel:a}={}){let{status:o,sessionId:l,currentModel:u,models:f,modes:m,currentMode:h}=ue(),{info:g,fetch:x}=r(),{mode:S,toggle:te}=d(),{t:w,tryT:ne,locale:re,toggleLocale:ae}=s(),se=k(e=>e.backendSupport),A=ge(se),j=e===`dock`,de=e===`page`?t():null,fe=de?.get(`cwd`)?.trim(),M=i?.trim()||fe||void 0,pe=a?.trim()||de?.get(`name`)?.trim()||void 0,[_e,L]=(0,I.useState)(null),R=j||M?`project`:`user`,[B,xe]=(0,I.useState)(``),[V,H]=(0,I.useState)({}),[U,W]=(0,I.useState)({user:{},project:{}}),G=(0,I.useRef)(U),[K,Ce]=(0,I.useState)(null),[Me,Pe]=(0,I.useState)(!1),[Fe,Ie]=(0,I.useState)(!1),[Le,Re]=(0,I.useState)({}),ze=(0,I.useRef)({}),Be=(0,I.useRef)(Promise.resolve()),Ve=(0,I.useRef)(null),[He,Ue]=(0,I.useState)(X.connection),[We,Ge]=(0,I.useState)(!1),Ke=E(e=>e.enabled),qe=E(e=>e.unsupported),Je=E(e=>e.nativeAvailable),Ye=E(e=>e.setNativeAvailable),Xe=E(e=>e.setEnabled),Ze=E(e=>e.noteUnsupported),[Qe,$e]=(0,I.useState)(()=>le());(0,I.useEffect)(()=>{let e=!1;return P().then(t=>{e||Ye(t)}).catch(()=>void 0),()=>{e=!0}},[Ye]);let Z=(0,I.useCallback)((e,t)=>{let n=new URLSearchParams;t&&n.set(`scope`,t),M&&t!==`user`&&n.set(`cwd`,M);let r=n.toString();return`/api/v1/settings${e}${r?`?${r}`:``}`},[M]),et=(0,I.useCallback)(async()=>{Ie(!0),Pe(!1);try{let e=await Promise.all([fetch(Z(`/layers`,`project`),{headers:c()}),fetch(Z(`/meta`,`project`),{headers:c()})]),t=e.find(e=>!e.ok);if(t)throw Error(`Settings API: ${t.status}`);let[n,r]=await Promise.all(e.map(e=>e.json())),i=n?.data??n,a={user:i.user??{},project:i.project??{}};G.current=a,W(a),H(i.userEffective??{});let o=i.effective??{};Ce(r?.data??r),D.getState().hydrateFromSettings(o)}catch(e){console.error(`Failed to load settings:`,e),Pe(!0)}finally{Ie(!1)}},[Z]);(0,I.useEffect)(()=>{et().catch(()=>void 0)},[et]),(0,I.useEffect)(()=>()=>{Object.values(ze.current).forEach(clearTimeout)},[]),(0,I.useEffect)(()=>{g||x()},[g,x]);let tt=(0,I.useCallback)(async()=>{let e=await me({title:w(`settings.notify.testTitle`),body:w(`settings.notify.testBody`)});if(e===`sent`){Ze(!1);return}if(e===`throttled`){he.error(w(`settings.notify.testThrottled`));return}if(Ze(!0),N({title:w(`settings.notify.testTitle`),body:w(`settings.notify.testBody`)})){he.success(w(`settings.notify.testBrowserSent`));return}he.error(w(`settings.notify.testFailed`))},[Ze,w]),nt=(0,I.useCallback)(()=>{let e=!Ke;e&&Je===!1&&typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission().then(e=>{$e(e===`granted`?`granted`:e===`denied`?`denied`:`default`)}).catch(()=>void 0),Xe(e)},[Ke,Je,Xe]),rt=(0,I.useCallback)(async(e,t)=>{await C(e)&&(L(t),setTimeout(()=>L(null),1500))},[]),it=async e=>{if(await st(`model`,e)&&(R===`user`&&p(e,null),l&&!M))try{await b().setModel(l,e)}catch(e){console.error(`Model change failed:`,e)}},at=async()=>{if(!await ct(`model`))return;let e=J(V,`model`);if(l&&!M&&typeof e==`string`)try{await b().setModel(l,e)}catch(e){console.error(`Model reset failed:`,e)}},ot=async e=>{if(await st(`permissions.defaultMode`,e)&&(R===`user`&&oe(e,null),l&&!M))try{await b().setMode(l,e)}catch(e){console.error(`Mode change failed:`,e)}},Q=(0,I.useCallback)((e,t)=>{Re(n=>({...n,[e]:t})),ze.current[e]&&clearTimeout(ze.current[e]),ze.current[e]=setTimeout(()=>{Re(t=>{let n={...t};return delete n[e],n})},1500)},[]),st=(0,I.useCallback)((e,t)=>{let n=Be.current.then(async()=>{try{let n=await fetch(Z(`/${encodeURIComponent(q(e))}`,R),{method:`PUT`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({value:t,path:e})});if(!n.ok&&n.status!==204)throw Error(`HTTP ${n.status}`);let r=De(G.current[R],e,t),i={...G.current,[R]:r};return G.current=i,W(i),R===`user`&&H(n=>De(n,e,t)),R===`user`&&e===`codebuddy.composer.busySendMode`&&(t===`queue`||t===`immediate`)&&D.getState().setMode(t,!1),Q(e,`success`),!0}catch(t){return console.error(`Failed to save setting "${e}":`,t),Q(e,`error`),!1}});return Be.current=n.then(()=>void 0,()=>void 0),n},[R,Z,Q]),ct=(0,I.useCallback)(e=>{if(R!==`project`)return Promise.resolve(void 0);let t=Be.current.then(async()=>{try{let t=await fetch(Z(`/${encodeURIComponent(q(e))}/reset`,`project`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({path:e})});if(!t.ok&&t.status!==204)throw Error(`HTTP ${t.status}`);let n=Oe(G.current.project,e),r={...G.current,project:n};return G.current=r,W(r),Q(e,`success`),!0}catch(t){return console.error(`Failed to reset setting "${e}":`,t),Q(e,`error`),!1}});return Be.current=t.then(()=>void 0,()=>void 0),t},[R,Z,Q]),lt={disconnected:`bg-gray-400`,connecting:`bg-accent-yellow animate-pulse`,connected:`bg-accent-green`,error:`bg-accent-red`}[o],ut={connected:`connection.connected`,connecting:`connection.connecting`,disconnected:`connection.disconnected`,error:`connection.error`},dt=S===`light`?O:S===`dark`?y:be,ft=w(S===`light`?`theme.light`:S===`dark`?`theme.dark`:`theme.system`),pt=re===`system`?F:v,mt=w(re===`zh`?`locale.zh`:re===`en`?`locale.en`:`locale.system`),ht=(0,I.useMemo)(()=>new Set(R===`project`?[...K?.projectKeys??[],...K?.projectPaths??[]]:K?.userKeys??[]),[K,R]),gt=(0,I.useMemo)(()=>Ae(Te,ht,B,w),[ht,B,w]),_t=R===`user`&&Y(B,w(`sidebar.connectionStatus`),w(`sidebar.status`),w(`sidebar.sessionId`)),vt=R===`user`&&Y(B,w(`settings.appearance`),w(`sidebar.theme`),w(`sidebar.language`)),yt=R===`user`&&Y(B,w(`settings.notifications`),w(`settings.notify.title`),w(`settings.notify.desc`)),bt=ht.has(`model`)&&Y(B,w(`settings.model`),w(`settings.item.model`),w(`settings.item.model.desc`),`model`),xt=R===`user`&&m.length>0&&Y(B,w(`settings.mode`),w(`sidebar.permissionMode`),`permissions.defaultMode`),St=R===`user`&&!!g&&Y(B,w(`settings.systemInfo`),w(`sidebar.cwd`),w(`sidebar.os`),w(`sidebar.nodeVersion`)),Ct=_t||vt||yt||bt||xt||St||gt.length>0,wt=U[R],Tt=(0,I.useCallback)(e=>R===`project`?ke(V,U.project,e):J(V,e),[R,U.project,V]),Et=(0,I.useCallback)(e=>R===`project`&&!Ee(U.project,e),[R,U.project]),Dt=String(Tt(`model`)??u??``),Ot=Tt(`codebuddy.mainAgent.enabled`)!==!1,kt=K?.scopes[R]?.filePath,$=(0,I.useMemo)(()=>{let e=[];_t&&e.push({id:X.connection,label:w(`sidebar.connectionStatus`)}),vt&&e.push({id:X.appearance,label:w(`settings.appearance`)}),yt&&e.push({id:X.notifications,label:w(`settings.notifications`)}),bt&&e.push({id:X.model,label:w(`settings.model`)}),xt&&e.push({id:X.mode,label:w(`settings.mode`)});for(let t of gt)e.push({id:je(t.titleKey),label:w(t.titleKey)});return St&&e.push({id:X.system,label:w(`settings.systemInfo`)}),e},[vt,_t,xt,bt,yt,St,w,gt]);(0,I.useEffect)(()=>{$.length>0&&!$.some(e=>e.id===He)&&Ue($[0].id)},[He,$]);let At=(0,I.useCallback)(e=>{let t=Ve.current?.querySelector(`#${CSS.escape(e)}`)??document.getElementById(e);t&&(Ue(e),t.scrollIntoView({behavior:`smooth`,block:`start`}))},[]);return(0,I.useEffect)(()=>{let e=Ve.current;if(!e||$.length===0)return;let t=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting).sort((e,t)=>e.boundingClientRect.top-t.boundingClientRect.top)[0]?.target?.id;t&&Ue(t)},{root:e,rootMargin:`-12% 0px -70% 0px`,threshold:[0,.1,.25,.5,1]});for(let n of $){let r=e.querySelector(`#${CSS.escape(n.id)}`);r&&t.observe(r)}return()=>t.disconnect()},[$]),(0,z.jsxs)(`div`,{className:`settings-view${j?` settings-view-dock`:``}`,"data-presentation":e,children:[(0,z.jsxs)(`header`,{className:`settings-header`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`h1`,{className:`settings-title`,children:w(j?`agents.workspaceSettings`:`settings.title`)}),(0,z.jsxs)(`p`,{className:`settings-scope-hint`,title:kt,children:[M&&pe?pe+` · `:``,w(R===`project`?`settings.scope.projectHint`:`settings.scope.userHint`),kt?` · ${kt}`:``]})]}),(0,z.jsxs)(`div`,{className:`settings-search`,role:`search`,children:[(0,z.jsx)(_,{size:15,"aria-hidden":!0}),(0,z.jsx)(`input`,{value:B,onChange:e=>xe(e.target.value),placeholder:w(`settings.search.placeholder`),"aria-label":w(`settings.search.placeholder`)}),B&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>xe(``),title:w(`settings.search.clear`),"aria-label":w(`settings.search.clear`),children:(0,z.jsx)(ce,{size:13})})]})]}),(0,z.jsx)(`span`,{className:`sr-only`,"aria-live":`polite`,children:w(Ct?`settings.search.results`:`settings.search.empty`)}),(0,z.jsxs)(`div`,{className:`settings-content`,ref:Ve,children:[(0,z.jsx)(`nav`,{className:`settings-toc`,"aria-label":w(`settings.sections`),children:(0,z.jsx)(`div`,{className:`settings-toc-inner`,children:$.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`settings-toc-item${He===e.id?` active`:``}`,"aria-current":He===e.id?`location`:void 0,onClick:()=>At(e.id),children:e.label},e.id))})}),(0,z.jsxs)(`div`,{className:`settings-sections`,children:[_t&&(0,z.jsxs)(`div`,{id:X.connection,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`sidebar.connectionStatus`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.status`)}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`w-2 h-2 rounded-full ${lt}`}),(0,z.jsx)(`span`,{className:`settings-value`,children:w(ut[o]||`connection.disconnected`)})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.sessionId`)}),(0,z.jsx)(`span`,{className:`settings-value font-mono text-[12px]`,children:l?l.substring(0,12):w(`sidebar.notConnected`)})]})]})]}),vt&&(0,z.jsxs)(`div`,{id:X.appearance,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.appearance`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.theme`)}),(0,z.jsxs)(`button`,{onClick:te,className:`settings-toggle-btn`,children:[(0,z.jsx)(dt,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:ft})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.language`)}),(0,z.jsxs)(`button`,{onClick:ae,className:`settings-toggle-btn`,children:[(0,z.jsx)(pt,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:mt})]})]})]})]}),yt&&(0,z.jsxs)(`div`,{id:X.notifications,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.notifications`)}),(0,z.jsx)(`div`,{className:`settings-card`,children:(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`settings.notify.title`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:w(`settings.notify.desc`)}),qe&&(0,z.jsx)(`span`,{className:`settings-desc text-accent-red`,children:w(`settings.notify.unsupported`)}),Je===!1&&(0,z.jsx)(`span`,{className:`settings-desc ${Qe===`denied`?`text-accent-red`:``}`,children:w(Qe===`granted`?`settings.notify.browserHint.granted`:Qe===`denied`?`settings.notify.browserHint.denied`:`settings.notify.browserHint.default`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center shrink-0 ml-3 gap-2`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>{tt().catch(()=>void 0)},title:w(`settings.notify.test`),children:[(0,z.jsx)(ye,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:w(`settings.notify.test`)})]}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${Ke?`on`:``}`,onClick:nt,"aria-pressed":Ke,"aria-label":w(`settings.notify.title`),title:w(`settings.notify.title`)})]})]})})]}),bt&&(0,z.jsxs)(`div`,{id:X.model,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.model`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[f.length>0?(0,z.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,z.jsxs)(`div`,{className:`flex w-full items-center gap-2`,children:[(0,z.jsx)(`select`,{value:Dt,onChange:e=>{it(e.target.value).catch(()=>void 0)},className:`settings-select`,children:f.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name||e.id},e.id))}),R===`project`&&Ee(wt,`model`)&&(0,z.jsxs)(`button`,{type:`button`,className:`settings-reset-btn`,onClick:()=>{at().catch(()=>void 0)},title:w(`settings.inheritUser`),"aria-label":w(`settings.inheritUser`),children:[(0,z.jsx)(ee,{size:13}),(0,z.jsx)(`span`,{children:w(`settings.reset`)})]})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[R===`project`&&Et(`model`)&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:w(`settings.inherited`)}),Le.model&&(0,z.jsx)(`span`,{className:`settings-save-feedback ${Le.model}`,children:w(Le.model===`success`?`settings.saved`:`settings.saveFailed`)})]})]}):(0,z.jsx)(`div`,{className:`settings-row`,children:(0,z.jsx)(`span`,{className:`settings-value`,children:w(`sidebar.noModels`)})}),R===`user`&&(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`settings.customModels.entryLabel`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:w(`settings.customModels.entryDesc`)})]}),(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>Ge(!0),children:[(0,z.jsx)(ve,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:w(`settings.customModels.manage`)})]})]})]})]}),xt&&(0,z.jsxs)(`div`,{id:X.mode,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.mode`)}),(0,z.jsx)(`div`,{className:`settings-card`,children:(0,z.jsx)(`select`,{value:h,onChange:e=>ot(e.target.value),className:`settings-select`,children:m.map(e=>(0,z.jsx)(`option`,{value:e.id,title:ne(`mode.${e.id}.desc`)||e.description,children:ne(`mode.${e.id}`)||e.name},e.id))})})]}),Fe?(0,z.jsx)(`div`,{className:`settings-empty-state`,children:w(`settings.loading`)}):Me?(0,z.jsxs)(`div`,{className:`settings-empty-state`,children:[(0,z.jsx)(`span`,{children:w(`settings.loadFailed`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>{et().catch(()=>void 0)},children:w(`connection.retry`)})]}):gt.map(e=>(0,z.jsxs)(`div`,{id:je(e.titleKey),className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(e.titleKey)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[e.items.map(e=>(0,z.jsx)(Ne,{item:e,value:Tt(e.key),inherited:Et(e.key),feedback:Le[e.key],onSave:st,onReset:R===`project`?ct:void 0},e.key)),e.titleKey===`settings.group.mainAgent`&&Ot&&A.enabled&&!A.loading&&(0,z.jsx)(we,{scope:R,configuredDefault:Tt(`codebuddy.mainAgent.default`),defaultInherited:Et(`codebuddy.mainAgent.default`),onSetDefault:e=>st(`codebuddy.mainAgent.default`,e),onResetDefault:()=>ct(`codebuddy.mainAgent.default`),allowCreateByAI:!M,detachedWorkspace:!!M})]})]},e.titleKey)),!Fe&&!Me&&!Ct&&(0,z.jsxs)(`div`,{className:`settings-empty-state`,children:[(0,z.jsx)(_,{size:20,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:w(B?`settings.search.empty`:`settings.noProjectSettings`)})]}),St&&g&&(0,z.jsxs)(`div`,{id:X.system,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.systemInfo`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.cwd`)}),(0,z.jsxs)(`button`,{onClick:()=>rt(g.cwd,`cwd`),className:`settings-copy-btn`,title:g.cwd,children:[(0,z.jsx)(`span`,{className:`truncate cursor-pointer hover:underline hover:text-accent-brand`,onClick:e=>{e.stopPropagation(),n(g.cwd)},children:g.cwd}),_e===`cwd`?(0,z.jsx)(T,{size:12,className:`shrink-0 text-accent-green`}):(0,z.jsx)(ie,{size:12,className:`shrink-0 text-text-tertiary`})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.os`)}),(0,z.jsxs)(`span`,{className:`settings-value`,children:[g.os,` `,g.arch]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.nodeVersion`)}),(0,z.jsx)(`span`,{className:`settings-value`,children:g.nodeVersion})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.gatewayMode`)}),(0,z.jsx)(`span`,{className:`settings-value capitalize`,children:g.gatewayMode})]}),g.tunnelUrl&&(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.tunnelUrl`)}),(0,z.jsxs)(`button`,{onClick:()=>rt(g.tunnelUrl,`tunnel`),className:`settings-copy-btn`,title:g.tunnelUrl,children:[(0,z.jsx)(`span`,{className:`truncate`,children:g.tunnelUrl.replace(/^https?:\/\//,``)}),_e===`tunnel`?(0,z.jsx)(T,{size:12,className:`shrink-0 text-accent-green`}):(0,z.jsx)(ie,{size:12,className:`shrink-0 text-text-tertiary`})]})]})]})]})]})]}),We&&(0,z.jsx)(Se,{onClose:()=>Ge(!1)})]})}function Ne({item:e,value:t,inherited:n=!1,feedback:r,onSave:i,onReset:a}){let{t:o}=s(),[c,l]=(0,I.useState)(``),[u,d]=(0,I.useState)(!1),f=(0,I.useRef)(null);(0,I.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[e.key,i]),(0,I.useEffect)(()=>{e.type===`text`||e.type===`number`?l(t==null?``:String(t)):e.type===`json`&&(l(t==null?``:JSON.stringify(t,null,2)),d(!1))},[t,e.type]);let p=e.type===`toggle`&&t===void 0&&e.defaultValue!==void 0?e.defaultValue:t,m=(0,I.useCallback)(()=>{i(e.key,!p)},[e.key,p,i]),h=(0,I.useCallback)(t=>{i(e.key,t||void 0)},[e.key,i]),g=(0,I.useCallback)(t=>{l(t),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{if(e.type===`number`){let n=Number(t);!isNaN(n)&&t.trim()!==``&&i(e.key,n)}else if(e.type===`json`)try{let n=JSON.parse(t);if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Expected a JSON object`);d(!1),i(e.key,n)}catch{d(!0)}else i(e.key,t)},600)},[e.key,e.type,i]);return(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:o(e.labelKey)}),r&&(0,z.jsx)(`span`,{className:`settings-save-feedback ${r===`success`?`success`:`error`}`,children:o(r===`success`?`settings.saved`:`settings.saveFailed`)})]}),e.descKey&&(0,z.jsx)(`span`,{className:`settings-desc`,children:o(e.descKey)}),n&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:o(`settings.inherited`)}),u&&(0,z.jsx)(`span`,{className:`settings-desc text-accent-red`,children:o(`settings.invalidJson`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center shrink-0 ml-3 gap-2`,children:[!n&&a&&(0,z.jsx)(`button`,{type:`button`,className:`settings-reset-icon`,onClick:()=>a(e.key),title:o(`settings.inheritUser`),"aria-label":o(`settings.inheritUser`),children:(0,z.jsx)(ee,{size:13})}),e.type===`toggle`&&(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p?`on`:``}`,onClick:m,"aria-pressed":!!p,"aria-label":o(e.labelKey)}),e.type===`select`&&e.options&&(0,z.jsxs)(`select`,{value:String(t??(typeof e.defaultValue==`string`?e.defaultValue:``)),onChange:e=>h(e.target.value),className:`settings-inline-select`,children:[!e.hideEmptyOption&&(0,z.jsx)(`option`,{value:``,children:`-`}),e.options.map(e=>(0,z.jsx)(`option`,{value:e.value,children:o(e.labelKey)},e.value))]}),e.type===`text`&&(0,z.jsx)(`input`,{type:`text`,value:c,onChange:e=>g(e.target.value),placeholder:o(`settings.notSet`),className:`settings-input`}),e.type===`number`&&(0,z.jsx)(`input`,{type:`number`,value:c,onChange:e=>g(e.target.value),className:`settings-input`,style:{width:80}}),e.type===`json`&&(0,z.jsx)(`textarea`,{value:c,onChange:e=>g(e.target.value),placeholder:`{}`,className:`settings-input wide`,rows:3,style:{width:`100%`,resize:`vertical`}})]})]})}export{Me as SettingsView};
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{W as t,Y as n,c as r,i,nt as a,ot as o,t as s,tt as c}from"./use-i18n-BvJYl_9l.js";import{l,u}from"./markdown-DCKhnxE9.js";import{t as d}from"./theme-store-7kL2_Dih.js";import{n as f}from"./HoverHint-D2G73lbr.js";import{$ as p,$t as m,C as h,Ct as g,Et as _,Gt as v,It as y,J as b,Ot as ee,Pt as x,Q as S,S as te,U as C,X as w,Y as ne,Z as re,_n as T,a as E,an as ie,at as D,bt as O,c as ae,dt as k,et as oe,ft as se,g as A,gt as ce,h as j,i as le,it as ue,jt as de,l as fe,m as M,n as N,pt as pe,r as me,t as P,tt as he,u as ge,vt as _e,wt as ve}from"./index-BtMp20L0.js";var ye=i(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),F=i(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),be=i(`sun-moon`,[[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M14.837 16.385a6 6 0 1 1-7.223-7.222c.624-.147.97.66.715 1.248a4 4 0 0 0 5.26 5.259c.589-.255 1.396.09 1.248.715`,key:`xlf6rm`}],[`path`,{d:`M16 12a4 4 0 0 0-4-4`,key:`6vsxu`}],[`path`,{d:`m19 5-1.256 1.256`,key:`1yg6a6`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}]]),I=e(u(),1),L=/^[a-zA-Z0-9._:/-]+$/;function R(e){return L.test(e)}var z=l(),B=[`128000`,`256000`,`1000000`],xe=[`16384`,`32768`,`65536`,`128000`],V={id:``,name:``,vendor:`Custom`,url:``,apiKey:``,maxInputTokens:`128000`,maxOutputTokens:`16384`,temperature:``,supportsToolCall:!0,supportsImages:!1,supportsReasoning:!1,useCustomProtocol:!1};function H(e){let t=Number(e);return Number.isFinite(t)?t>=1e6&&t%1e6==0?`${t/1e6}M`:t>=1e3&&t%1e3==0?`${t/1e3}k`:t>=1024&&t%1024==0?`${t/1024}k`:String(t):e}function U(e){let{label:t,value:n,presets:r,disabled:i,step:a,formatLabel:o,onChange:s}=e,c=r.includes(n),l=c?n:`__custom__`,u=o||(e=>e);return(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t}),(0,z.jsxs)(`select`,{className:`custom-models-select`,value:l,disabled:i,onChange:e=>{let t=e.target.value;if(t===`__custom__`){s(n&&!Number.isNaN(Number(n))?n:r[0]);return}s(t)},children:[r.map(e=>(0,z.jsx)(`option`,{value:e,children:u(e)},e)),(0,z.jsx)(`option`,{value:`__custom__`,children:`Custom…`})]}),!c&&(0,z.jsx)(`input`,{className:`settings-input`,type:`number`,step:a,value:n,disabled:i,onChange:e=>s(e.target.value),placeholder:r[0]})]})}function W(e){return{id:e.id||``,name:e.name||``,vendor:e.vendor||`Custom`,url:e.url||``,apiKey:e.apiKey||``,maxInputTokens:e.maxInputTokens==null?``:String(e.maxInputTokens),maxOutputTokens:e.maxOutputTokens==null?``:String(e.maxOutputTokens),temperature:e.temperature==null?``:String(e.temperature),supportsToolCall:e.supportsToolCall!==!1,supportsImages:!!e.supportsImages,supportsReasoning:!!e.supportsReasoning,useCustomProtocol:!!e.useCustomProtocol}}function G(e){let t=e.trim();return t!==``&&!Number.isNaN(Number(t))?Number(t):void 0}function K(e){let t={id:e.id.trim(),name:e.name.trim()||e.id.trim(),vendor:e.vendor.trim()||`Custom`,url:e.url.trim(),supportsToolCall:e.supportsToolCall,supportsImages:e.supportsImages,supportsReasoning:e.supportsReasoning,useCustomProtocol:e.useCustomProtocol};e.apiKey.trim()&&(t.apiKey=e.apiKey.trim());let n=G(e.maxInputTokens);n!==void 0&&(t.maxInputTokens=n);let r=G(e.maxOutputTokens);r!==void 0&&(t.maxOutputTokens=r);let i=G(e.temperature);return i!==void 0&&(t.temperature=i),t}function Se({onClose:e}){let{t}=s(),[n,r]=(0,I.useState)(`list`),[i,a]=(0,I.useState)([]),[o,c]=(0,I.useState)(!0),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),[p,m]=(0,I.useState)(V),[h,g]=(0,I.useState)(),[_,v]=(0,I.useState)(null),y=(0,I.useCallback)(async()=>{c(!0),f(null);try{let e=await j(!0),t=Array.isArray(e?.models)?e.models:[];a(t)}catch(e){f(e?.message||t(`settings.customModels.loadFailed`)),a([])}finally{c(!1)}},[]);(0,I.useEffect)(()=>{y().catch(()=>{})},[y]),(0,I.useEffect)(()=>{let t=t=>{if(t.key===`Escape`){if(_){v(null);return}if(n===`form`){r(`list`),f(null);return}e()}};return window.addEventListener(`keydown`,t),()=>window.removeEventListener(`keydown`,t)},[_,n,e]);let b=()=>{m(V),g(void 0),f(null),r(`form`)},ee=e=>{m(W(e)),g(e.id),f(null),r(`form`)},S=()=>{r(`list`),f(null),g(void 0)},C=(e,t)=>{m(n=>({...n,[e]:t}))},w=async()=>{let e=p.id.trim(),n=p.url.trim();if(!n){f(t(`settings.customModels.err.urlRequired`));return}if(!/^https?:\/\//i.test(n)){f(t(`settings.customModels.err.urlInvalid`));return}if(!e){f(t(`settings.customModels.err.idRequired`));return}if(!R(e)){f(t(`settings.customModels.err.idInvalid`));return}if((!h||h!==e)&&i.some(t=>t.id===e)){f(t(`settings.customModels.err.idDuplicate`));return}u(!0),f(null);try{let t=K(p);if(h&&!p.apiKey.trim()){let e=i.find(e=>e.id===h);e?.apiKey&&(t.apiKey=e.apiKey)}let n=await A({model:t,previousId:h&&h!==e?h:void 0,visible:!1,global:!0});a(Array.isArray(n.models)?n.models:[]),r(`list`),g(void 0)}catch(e){f(e?.message||t(`settings.customModels.saveFailed`))}finally{u(!1)}},ne=async()=>{if(_){u(!0),f(null);try{let e=await M(_.id,!0);a(Array.isArray(e.models)?e.models:[]),v(null)}catch(e){f(e?.message||t(`settings.customModels.deleteFailed`)),v(null)}finally{u(!1)}}};return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{className:`custom-models-overlay`,children:(0,z.jsxs)(`div`,{className:`custom-models-modal`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`custom-models-title`,children:[(0,z.jsxs)(`div`,{className:`custom-models-header`,children:[(0,z.jsx)(`h2`,{id:`custom-models-title`,className:`custom-models-title`,children:t(n===`list`?`settings.customModels.title`:h?`settings.customModels.editTitle`:`settings.customModels.addTitle`)}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn`,onClick:e,"aria-label":t(`settings.customModels.close`),children:(0,z.jsx)(ce,{size:16})})]}),d&&(0,z.jsx)(`div`,{className:`custom-models-error`,children:d}),n===`list`?(0,z.jsxs)(`div`,{className:`custom-models-body`,children:[(0,z.jsxs)(`div`,{className:`custom-models-toolbar`,children:[(0,z.jsx)(`span`,{className:`custom-models-hint`,children:t(`settings.customModels.hint`)}),(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:b,children:[(0,z.jsx)(de,{size:14}),(0,z.jsx)(`span`,{children:t(`settings.customModels.add`)})]})]}),o?(0,z.jsx)(`div`,{className:`custom-models-empty`,children:t(`settings.loading`)}):i.length===0?(0,z.jsx)(`div`,{className:`custom-models-empty`,children:t(`settings.customModels.empty`)}):(0,z.jsx)(`ul`,{className:`custom-models-list`,children:i.map(e=>(0,z.jsxs)(`li`,{className:`custom-models-row`,children:[(0,z.jsxs)(`div`,{className:`custom-models-row-main`,children:[(0,z.jsx)(`div`,{className:`custom-models-row-name`,children:e.name||e.id}),(0,z.jsxs)(`div`,{className:`custom-models-row-meta`,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:e.id}),e.vendor?(0,z.jsxs)(`span`,{children:[`· `,e.vendor]}):null]}),e.url?(0,z.jsx)(`div`,{className:`custom-models-row-url`,title:e.url,children:e.url}):null]}),(0,z.jsxs)(`div`,{className:`custom-models-row-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn`,onClick:()=>ee(e),title:t(`settings.customModels.edit`),children:(0,z.jsx)(x,{size:14})}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-icon-btn danger`,onClick:()=>v(e),title:t(`settings.customModels.delete`),children:(0,z.jsx)(_e,{size:14})})]})]},e.id))})]}):(0,z.jsxs)(`div`,{className:`custom-models-body custom-models-form`,children:[(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.name`)}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.name,onChange:e=>C(`name`,e.target.value),disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.vendor`)}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.vendor,onChange:e=>C(`vendor`,e.target.value),placeholder:`OpenAI / Anthropic / Custom`,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsxs)(`span`,{children:[t(`settings.customModels.field.url`),` *`]}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.url,onChange:e=>C(`url`,e.target.value),placeholder:`https://api.example.com/v1/chat/completions`,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.apiKey`)}),(0,z.jsx)(`input`,{className:`settings-input`,type:`password`,autoComplete:`off`,value:p.apiKey,onChange:e=>C(`apiKey`,e.target.value),placeholder:h?t(`settings.customModels.apiKeyKeep`):``,disabled:l})]}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsxs)(`span`,{children:[t(`settings.customModels.field.id`),` *`]}),(0,z.jsx)(`input`,{className:`settings-input`,value:p.id,onChange:e=>C(`id`,e.target.value),placeholder:`my-openai-model`,disabled:l})]}),(0,z.jsxs)(`div`,{className:`custom-models-field-row`,children:[(0,z.jsx)(U,{label:t(`settings.customModels.field.maxInputTokens`),value:p.maxInputTokens,presets:B,formatLabel:H,disabled:l,onChange:e=>C(`maxInputTokens`,e)}),(0,z.jsx)(U,{label:t(`settings.customModels.field.maxOutputTokens`),value:p.maxOutputTokens,presets:xe,formatLabel:H,disabled:l,onChange:e=>C(`maxOutputTokens`,e)}),(0,z.jsxs)(`label`,{className:`custom-models-field`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.temperature`)}),(0,z.jsx)(`input`,{className:`settings-input`,type:`number`,step:`0.1`,min:`0`,max:`2`,value:p.temperature,disabled:l,onChange:e=>C(`temperature`,e.target.value),placeholder:t(`settings.customModels.field.temperatureDefault`)})]})]}),(0,z.jsxs)(`div`,{className:`custom-models-toggles`,children:[(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsToolCall`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsToolCall?`on`:``}`,onClick:()=>C(`supportsToolCall`,!p.supportsToolCall)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsImages`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsImages?`on`:``}`,onClick:()=>C(`supportsImages`,!p.supportsImages)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.supportsReasoning`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.supportsReasoning?`on`:``}`,onClick:()=>C(`supportsReasoning`,!p.supportsReasoning)})]}),(0,z.jsxs)(`label`,{className:`custom-models-toggle`,children:[(0,z.jsx)(`span`,{children:t(`settings.customModels.field.useCustomProtocol`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p.useCustomProtocol?`on`:``}`,onClick:()=>C(`useCustomProtocol`,!p.useCustomProtocol)})]})]}),(0,z.jsxs)(`div`,{className:`custom-models-form-actions`,children:[(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:S,disabled:l,children:t(`settings.customModels.cancel`)}),(0,z.jsx)(`button`,{type:`button`,className:`custom-models-primary-btn`,onClick:()=>{w().catch(()=>{})},disabled:l,children:t(l?`settings.loading`:`settings.customModels.save`)})]})]})]})}),_&&(0,z.jsx)(te,{title:t(`settings.customModels.deleteTitle`),message:t(`settings.customModels.deleteMessage`).replace(`{id}`,_.id),danger:!0,confirmLabel:t(`settings.customModels.delete`),cancelLabel:t(`settings.customModels.cancel`),onConfirm:()=>{ne().catch(()=>{})},onCancel:()=>v(null)})]})}function Ce(e){let t={...e??{}},n=a();return n&&(t.Authorization=`Bearer ${n}`),t}function we({scope:e,configuredDefault:t,defaultInherited:r=!1,onSetDefault:i,onResetDefault:a,allowCreateByAI:c=!0,detachedWorkspace:l=!1}){let{t:u,tryT:d}=s(),{agents:p,defaultAgentName:_,sessionBlank:v}=k(),y=k(e=>e.backendSupport),x=ue(e=>e.sessionId),[te,C]=(0,I.useState)(``),[T,E]=(0,I.useState)(!1),[ie,D]=(0,I.useState)(null),[O,oe]=(0,I.useState)(null),[A,ce]=(0,I.useState)(!1),[j,le]=(0,I.useState)(``),[M,N]=(0,I.useState)(!1),me=(0,I.useRef)(null);(0,I.useEffect)(()=>{if(!M)return;let e=document.activeElement instanceof HTMLElement?document.activeElement:null;me.current?.focus();let t=e=>{e.key===`Escape`&&N(!1)};return window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`keydown`,t),e?.focus()}},[M]);let P=e=>{let t=e?.agents;t&&(l||k.getState().applyAgentFromResponse({agents:t,defaultAgentName:e.defaultAgentName}),C(n=>{let r=e.defaultAgentName||n;return r&&t.some(e=>e.name===r)?r:t.find(e=>re(e.name))?.name??t[0]?.name??``}))};(0,I.useEffect)(()=>{if(y!==!0)return;let e=!1;return b().callExtMethod(`_codebuddy.ai/getAgents`,{}).then(t=>{e||P(t)}).catch(t=>{e||D(h(t,u(`mainAgent.loadFailed`)))}),()=>{e=!0}},[y]);let[he,ge]=(0,I.useState)(!1),[ve,ye]=(0,I.useState)(``),[F,be]=(0,I.useState)(!1),[L,R]=(0,I.useState)(null),B=async()=>{let e=ve.trim();if(e&&!F){be(!0),R(null);try{let t=await o(`/api/v1/agents/create-by-ai`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({description:e})}),n=await t.json().catch(()=>({}));if(!t.ok||n?.data?.success!==!0){R(h(n,`HTTP ${t.status}`));return}ge(!1),ye(``),D(u(`mainAgent.createSuccess`));let r=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(r)}catch(e){R(h(e,u(`mainAgent.createFailed`)))}finally{be(!1)}}},xe=async e=>{if(!A){if(O!==e){oe(e);return}ce(!0),D(null);try{let t=await o(`/api/v1/agents/delete`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({name:e})});if(!t.ok){let e=await t.json().catch(()=>({}));D(h(e,`${u(`mainAgent.deleteFailed`)} (HTTP ${t.status})`));return}D(u(`mainAgent.deleted`,{name:e}));let n=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(n)}catch(e){D(h(e,u(`mainAgent.deleteFailed`)))}finally{ce(!1),oe(null)}}},V=async e=>{D(null);try{let t=await o(`/api/v1/agents/open`,{method:`POST`,headers:Ce({"Content-Type":`application/json`}),body:JSON.stringify({name:e})}),r=await t.json().catch(()=>({}));if(!t.ok){D(h(r,u(`mainAgent.openFailed`)));return}let i=r?.data?.path;if(typeof i==`string`&&i.trim()){N(!1),n(i.trim());return}D(u(`mainAgent.openFailed`))}catch(e){D(h(e,u(`mainAgent.openFailed`)))}},H=async e=>{E(!0),D(null);try{if(await i(e)){if(l)C(e);else{let e=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(e)}D(u(`mainAgent.defaultSaved`))}else D(u(`settings.saveFailed`))}catch(e){D(h(e,u(`settings.saveFailed`)))}finally{E(!1)}},U=async()=>{E(!0),D(null);try{if(!await a()){D(u(`settings.saveFailed`));return}if(C(``),!l){let e=await b().callExtMethod(`_codebuddy.ai/getAgents`,{});P(e)}D(u(`settings.saved`))}catch(e){D(h(e,u(`settings.saveFailed`)))}finally{E(!1)}},W=async()=>{if(D(null),!x){D(u(`mainAgent.openInCreateFailed`));return}if(!v){D(u(`mainAgent.openInCreateFailed`));return}E(!0),se();try{let e=await b().callExtMethod(`session/set_agent`,{sessionId:x,agentName:`create`});e?.agentName?(k.getState().applySetAgentResult({agentName:e.agentName,models:e.models??[],currentModelId:e.currentModelId??``,sessionBlank:e.sessionBlank??!1}),D(u(`mainAgent.openInCreateSuccess`))):pe()}catch(e){pe(),D(h(e,u(`mainAgent.openInCreateFailed`)))}finally{E(!1)}},G=j.trim().toLowerCase(),K=e=>!G||[e.name,e.displayName,fe(e,d),ae(e,d)].filter(Boolean).join(` `).toLowerCase().includes(G),Se=ne(p),we=[{label:u(`mainAgent.groupBuiltin`),items:Se.builtin},{label:u(`mainAgent.groupCustom`),items:Se.custom}].map(e=>({...e,items:e.items.filter(K)})).filter(e=>e.items.length>0),Te=S(t??te,_),q=p.find(e=>e.name===Te),J=q?fe(q,d):te||_||`-`,Ee=(0,z.jsxs)(z.Fragment,{children:[p.length>4&&(0,z.jsx)(`div`,{className:`px-3 pb-1`,children:(0,z.jsx)(`input`,{type:`search`,value:j,onChange:e=>le(e.target.value),placeholder:u(`mainAgent.searchPlaceholder`),className:`w-full rounded-md border border-border-default bg-bg-secondary px-2 py-1.5 text-[12px] text-text-primary outline-none focus:border-accent-brand`})}),ie&&(0,z.jsx)(`div`,{className:`settings-value text-[12px] text-text-tertiary`,children:ie}),we.length===0&&(0,z.jsx)(`div`,{className:`settings-value`,children:p.length===0?u(`mainAgent.empty`):u(`mainAgent.filterEmpty`)}),we.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-[11px] uppercase tracking-wide text-text-tertiary`,children:e.label}),e.items.map(e=>{let t=w(e.name,Te),n=e.custom?e.source===`user`?u(`mainAgent.scope.user`):u(`mainAgent.scope.project`):null,r=!l&&e.custom&&(e.source===`user`||e.source===`project`),i=ae(e,d);return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsxs)(`span`,{className:`text-[13px] text-text-primary truncate block`,children:[fe(e,d),n&&(0,z.jsx)(`span`,{className:`ml-1.5 rounded border border-border-default px-1 py-px text-[10px] text-text-tertiary align-middle`,children:n})]}),i&&(0,z.jsx)(`span`,{className:`text-[11px] text-text-tertiary truncate block`,children:i}),e.broken&&(0,z.jsx)(`span`,{className:`text-[11px] text-red-500 truncate block`,children:e.broken})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[t?(0,z.jsx)(`span`,{className:`text-[11px] text-text-tertiary`,children:u(`mainAgent.isDefault`)}):(0,z.jsx)(`button`,{type:`button`,disabled:T||!!e.broken,onClick:()=>H(e.name),className:`text-[12px] text-accent-brand hover:underline disabled:opacity-40`,children:u(`mainAgent.setDefault`)}),!l&&e.name===`create`&&!e.broken&&(0,z.jsx)(f,{text:v?``:u(`mainAgent.lockedHint`),always:!0,className:`inline-flex`,children:(0,z.jsxs)(`button`,{type:`button`,disabled:T||!v,onClick:()=>{W().catch(()=>void 0)},className:`flex items-center gap-1 text-[12px] text-accent-brand hover:underline disabled:opacity-40`,children:[(0,z.jsx)(g,{size:12}),u(`mainAgent.openInCreate`)]})}),r&&(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{V(e.name).catch(()=>void 0)},className:`flex items-center gap-1 text-[12px] text-text-tertiary hover:text-text-primary`,title:u(`mainAgent.openFile`),children:[(0,z.jsx)(m,{size:12}),u(`mainAgent.openFile`)]}),r&&(0,z.jsxs)(`button`,{type:`button`,disabled:A,onClick:()=>{xe(e.name).catch(()=>void 0)},onBlur:()=>{O===e.name&&oe(null)},className:`flex items-center gap-1 text-[12px] disabled:opacity-40 ${O===e.name?`text-red-500 font-medium hover:underline`:`text-text-tertiary hover:text-red-500`}`,title:u(`mainAgent.delete`),children:[(0,z.jsx)(_e,{size:12}),O===e.name?u(`mainAgent.deleteConfirm`):u(`mainAgent.delete`)]})]})]},e.name)})]},e.label)),c&&(0,z.jsxs)(`button`,{type:`button`,onClick:()=>{ge(!0),R(null)},className:`mx-3 my-2 flex w-[calc(100%-24px)] items-center justify-center gap-1.5 rounded-lg border border-dashed border-border-default py-2 text-[12px] text-text-tertiary transition-colors hover:border-accent-brand hover:text-text-primary`,children:[(0,z.jsx)(g,{size:13}),u(`mainAgent.createByAI`)]}),c&&he&&(0,z.jsxs)(`div`,{className:`mx-2 mb-2 rounded-lg border border-border-default bg-bg-primary p-3`,children:[(0,z.jsx)(`div`,{className:`text-[12px] text-text-primary mb-1.5`,children:u(`mainAgent.createByAIHint`)}),(0,z.jsx)(`textarea`,{value:ve,onChange:e=>ye(e.target.value),rows:3,placeholder:u(`mainAgent.createByAIPlaceholder`),className:`w-full resize-none rounded-md border border-border-default bg-bg-secondary px-2 py-1.5 text-[12px] text-text-primary outline-none focus:border-accent-brand`,disabled:F}),L&&(0,z.jsx)(`div`,{className:`mt-1.5 text-[11px] text-red-500`,children:L}),(0,z.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>{ge(!1),ye(``),R(null)},disabled:F,className:`text-[12px] text-text-tertiary hover:text-text-primary disabled:opacity-40`,children:u(`app.cancel`)}),(0,z.jsx)(`button`,{type:`button`,onClick:B,disabled:F||!ve.trim(),className:`flex items-center gap-1 rounded-md bg-accent-brand px-2.5 py-1 text-[12px] text-white hover:opacity-90 disabled:opacity-40`,children:F?(0,z.jsxs)(z.Fragment,{children:[u(`mainAgent.creating`),`…`]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(de,{size:12}),u(`mainAgent.createByAI`)]})})]})]})]});return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:u(`mainAgent.currentDefault`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:u(`mainAgent.currentDefaultHint`)}),e===`project`&&r&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:u(`settings.inherited`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0 ml-3`,children:[(0,z.jsx)(`span`,{className:`settings-value`,children:(0,z.jsx)(`strong`,{children:J})}),e===`project`&&!r&&(0,z.jsx)(`button`,{type:`button`,disabled:T,onClick:()=>{U().catch(()=>void 0)},className:`settings-reset-icon`,title:u(`settings.inheritUser`),"aria-label":u(`settings.inheritUser`),children:(0,z.jsx)(ee,{size:13})}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{N(!0),D(null)},className:`rounded-md border border-border-default px-2.5 py-1 text-[12px] text-text-primary transition-colors hover:border-accent-brand hover:text-accent-brand`,children:u(`mainAgent.manage`)})]})]}),M&&(0,z.jsx)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center bg-black/40 p-4`,onClick:()=>N(!1),children:(0,z.jsxs)(`div`,{className:`flex max-h-[80vh] w-full max-w-2xl flex-col overflow-hidden rounded-xl border border-border-default bg-bg-primary shadow-xl`,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`main-agent-manager-title`,onClick:e=>e.stopPropagation(),children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border-default px-4 py-3`,children:[(0,z.jsx)(`h3`,{id:`main-agent-manager-title`,className:`text-[14px] font-medium text-text-primary`,children:u(`mainAgent.sectionTitle`)}),(0,z.jsx)(`button`,{ref:me,type:`button`,onClick:()=>N(!1),className:`text-text-tertiary hover:text-text-primary`,"aria-label":u(`app.cancel`),children:`✕`})]}),(0,z.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto p-3`,children:Ee})]})})]})}var Te=[{titleKey:`settings.group.modelAndReasoning`,items:[{key:`reasoningEffort`,labelKey:`settings.item.reasoningEffort`,descKey:`settings.item.reasoningEffort.desc`,type:`select`,options:[{value:`minimal`,labelKey:`settings.effort.minimal`},{value:`low`,labelKey:`settings.effort.low`},{value:`medium`,labelKey:`settings.effort.medium`},{value:`high`,labelKey:`settings.effort.high`},{value:`xhigh`,labelKey:`settings.effort.xhigh`},{value:`max`,labelKey:`settings.effort.max`}]},{key:`alwaysThinkingEnabled`,labelKey:`settings.item.alwaysThinkingEnabled`,type:`toggle`}]},{titleKey:`settings.group.behavior`,items:[{key:`autoCompactEnabled`,labelKey:`settings.item.autoCompactEnabled`,type:`toggle`},{key:`autoCompactWindow`,labelKey:`settings.item.autoCompactWindow`,descKey:`settings.item.autoCompactWindow.desc`,type:`number`},{key:`includeCoAuthoredBy`,labelKey:`settings.item.includeCoAuthoredBy`,type:`toggle`},{key:`fileCheckpointingEnabled`,labelKey:`settings.item.fileCheckpointingEnabled`,descKey:`settings.item.fileCheckpointingEnabled.desc`,type:`toggle`},{key:`promptSuggestionEnabled`,labelKey:`settings.item.promptSuggestionEnabled`,type:`toggle`},{key:`codebuddy.composer.busySendMode`,labelKey:`settings.item.busySendMode`,descKey:`settings.item.busySendMode.desc`,type:`select`,defaultValue:`queue`,hideEmptyOption:!0,options:[{value:`queue`,labelKey:`settings.item.busySendMode.queue`},{value:`immediate`,labelKey:`settings.item.busySendMode.immediate`}]},{key:`ignoreGitIgnore`,labelKey:`settings.item.ignoreGitIgnore`,descKey:`settings.item.ignoreGitIgnore.desc`,type:`toggle`},{key:`deferToolLoading`,labelKey:`settings.item.deferToolLoading`,type:`toggle`},{key:`hookOutputCollapsed`,labelKey:`settings.item.hookOutputCollapsed`,type:`toggle`}]},{titleKey:`settings.group.memory`,items:[{key:`memory.enabled`,labelKey:`settings.item.memory.enabled`,type:`toggle`},{key:`memory.autoMemoryEnabled`,labelKey:`settings.item.memory.autoMemoryEnabled`,descKey:`settings.item.memory.autoMemoryEnabled.desc`,type:`toggle`}]},{titleKey:`settings.group.language`,items:[{key:`language`,labelKey:`settings.item.language`,descKey:`settings.item.language.desc`,type:`text`}]},{titleKey:`settings.group.mainAgent`,items:[{key:`codebuddy.mainAgent.enabled`,labelKey:`settings.item.mainAgent.enabled`,descKey:`settings.item.mainAgent.enabled.desc`,type:`toggle`,defaultValue:!0},{key:`codebuddy.mainAgent.allowUnopted`,labelKey:`settings.item.mainAgent.allowUnopted`,descKey:`settings.item.mainAgent.allowUnopted.desc`,type:`toggle`,defaultValue:!1}]},{titleKey:`settings.group.advanced`,items:[{key:`cleanupPeriodDays`,labelKey:`settings.item.cleanupPeriodDays`,type:`number`},{key:`imageHistoryRetainRounds`,labelKey:`settings.item.imageHistoryRetainRounds`,descKey:`settings.item.imageHistoryRetainRounds.desc`,type:`number`}]},{titleKey:`settings.group.sandbox`,items:[{key:`sandbox.enabled`,labelKey:`settings.item.sandbox.enabled`,descKey:`settings.item.sandbox.enabled.desc`,type:`toggle`},{key:`sandbox.autoAllowBashIfSandboxed`,labelKey:`settings.item.sandbox.autoAllowBashIfSandboxed`,descKey:`settings.item.sandbox.autoAllowBashIfSandboxed.desc`,type:`toggle`}]}];function q(e){return e.split(`.`)[0]}function J(e,t){let n=e;for(let e of t.split(`.`)){if(!n||typeof n!=`object`||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,e))return;n=n[e]}return n}function Ee(e,t){let n=e;for(let e of t.split(`.`)){if(!n||typeof n!=`object`||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,e))return!1;n=n[e]}return!0}function De(e,t,n){let r=t.split(`.`),i=structuredClone(e),a=i;for(let e=0;e<r.length-1;e++){let t=r[e],n=a[t];a[t]=n&&typeof n==`object`&&!Array.isArray(n)?{...n}:{},a=a[t]}return a[r.at(-1)]=n,i}function Oe(e,t){let n=t.split(`.`),r=(e,t)=>{let i={...e},a=n[t];if(t===n.length-1)return delete i[a],i;let o=i[a];if(o&&typeof o==`object`&&!Array.isArray(o)){let e=r(o,t+1);Object.keys(e).length===0?delete i[a]:i[a]=e}return i};return r(e,0)}function ke(e,t,n){return Ee(t,n)?J(t,n):J(e,n)}function Ae(e,t,n,r){let i=n.trim().toLocaleLowerCase();return e.flatMap(e=>{let n=r(e.titleKey).toLocaleLowerCase(),a=i.length>0&&n.includes(i),o=e.items.filter(e=>!t.has(e.key)&&!t.has(q(e.key))?!1:!i||a?!0:[e.key,r(e.labelKey),e.descKey?r(e.descKey):``].some(e=>e.toLocaleLowerCase().includes(i)));return o.length>0?[{...e,items:o}]:[]})}function Y(e,...t){let n=e.trim().toLocaleLowerCase();return!n||t.some(e=>e.toLocaleLowerCase().includes(n))}var X={connection:`settings-section-connection`,appearance:`settings-section-appearance`,notifications:`settings-section-notifications`,model:`settings-section-model`,mode:`settings-section-mode`,system:`settings-section-system`};function je(e){return`settings-section-${e.replace(/\./g,`-`)}`}function Me({presentation:e=`page`,workspaceCwd:i,workspaceLabel:a}={}){let{status:o,sessionId:l,currentModel:u,models:f,modes:m,currentMode:h}=ue(),{info:g,fetch:x}=r(),{mode:S,toggle:te}=d(),{t:w,tryT:ne,locale:re,toggleLocale:ae}=s(),se=k(e=>e.backendSupport),A=ge(se),j=e===`dock`,de=e===`page`?t():null,fe=de?.get(`cwd`)?.trim(),M=i?.trim()||fe||void 0,pe=a?.trim()||de?.get(`name`)?.trim()||void 0,[_e,L]=(0,I.useState)(null),R=j||M?`project`:`user`,[B,xe]=(0,I.useState)(``),[V,H]=(0,I.useState)({}),[U,W]=(0,I.useState)({user:{},project:{}}),G=(0,I.useRef)(U),[K,Ce]=(0,I.useState)(null),[Me,Pe]=(0,I.useState)(!1),[Fe,Ie]=(0,I.useState)(!1),[Le,Re]=(0,I.useState)({}),ze=(0,I.useRef)({}),Be=(0,I.useRef)(Promise.resolve()),Ve=(0,I.useRef)(null),[He,Ue]=(0,I.useState)(X.connection),[We,Ge]=(0,I.useState)(!1),Ke=E(e=>e.enabled),qe=E(e=>e.unsupported),Je=E(e=>e.nativeAvailable),Ye=E(e=>e.setNativeAvailable),Xe=E(e=>e.setEnabled),Ze=E(e=>e.noteUnsupported),[Qe,$e]=(0,I.useState)(()=>le());(0,I.useEffect)(()=>{let e=!1;return P().then(t=>{e||Ye(t)}).catch(()=>void 0),()=>{e=!0}},[Ye]);let Z=(0,I.useCallback)((e,t)=>{let n=new URLSearchParams;t&&n.set(`scope`,t),M&&t!==`user`&&n.set(`cwd`,M);let r=n.toString();return`/api/v1/settings${e}${r?`?${r}`:``}`},[M]),et=(0,I.useCallback)(async()=>{Ie(!0),Pe(!1);try{let e=await Promise.all([fetch(Z(`/layers`,`project`),{headers:c()}),fetch(Z(`/meta`,`project`),{headers:c()})]),t=e.find(e=>!e.ok);if(t)throw Error(`Settings API: ${t.status}`);let[n,r]=await Promise.all(e.map(e=>e.json())),i=n?.data??n,a={user:i.user??{},project:i.project??{}};G.current=a,W(a),H(i.userEffective??{});let o=i.effective??{};Ce(r?.data??r),D.getState().hydrateFromSettings(o)}catch(e){console.error(`Failed to load settings:`,e),Pe(!0)}finally{Ie(!1)}},[Z]);(0,I.useEffect)(()=>{et().catch(()=>void 0)},[et]),(0,I.useEffect)(()=>()=>{Object.values(ze.current).forEach(clearTimeout)},[]),(0,I.useEffect)(()=>{g||x()},[g,x]);let tt=(0,I.useCallback)(async()=>{let e=await me({title:w(`settings.notify.testTitle`),body:w(`settings.notify.testBody`)});if(e===`sent`){Ze(!1);return}if(e===`throttled`){he.error(w(`settings.notify.testThrottled`));return}if(Ze(!0),N({title:w(`settings.notify.testTitle`),body:w(`settings.notify.testBody`)})){he.success(w(`settings.notify.testBrowserSent`));return}he.error(w(`settings.notify.testFailed`))},[Ze,w]),nt=(0,I.useCallback)(()=>{let e=!Ke;e&&Je===!1&&typeof Notification<`u`&&Notification.permission==="default"&&Notification.requestPermission().then(e=>{$e(e===`granted`?`granted`:e===`denied`?`denied`:`default`)}).catch(()=>void 0),Xe(e)},[Ke,Je,Xe]),rt=(0,I.useCallback)(async(e,t)=>{await C(e)&&(L(t),setTimeout(()=>L(null),1500))},[]),it=async e=>{if(await st(`model`,e)&&(R===`user`&&p(e,null),l&&!M))try{await b().setModel(l,e)}catch(e){console.error(`Model change failed:`,e)}},at=async()=>{if(!await ct(`model`))return;let e=J(V,`model`);if(l&&!M&&typeof e==`string`)try{await b().setModel(l,e)}catch(e){console.error(`Model reset failed:`,e)}},ot=async e=>{if(await st(`permissions.defaultMode`,e)&&(R===`user`&&oe(e,null),l&&!M))try{await b().setMode(l,e)}catch(e){console.error(`Mode change failed:`,e)}},Q=(0,I.useCallback)((e,t)=>{Re(n=>({...n,[e]:t})),ze.current[e]&&clearTimeout(ze.current[e]),ze.current[e]=setTimeout(()=>{Re(t=>{let n={...t};return delete n[e],n})},1500)},[]),st=(0,I.useCallback)((e,t)=>{let n=Be.current.then(async()=>{try{let n=await fetch(Z(`/${encodeURIComponent(q(e))}`,R),{method:`PUT`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({value:t,path:e})});if(!n.ok&&n.status!==204)throw Error(`HTTP ${n.status}`);let r=De(G.current[R],e,t),i={...G.current,[R]:r};return G.current=i,W(i),R===`user`&&H(n=>De(n,e,t)),R===`user`&&e===`codebuddy.composer.busySendMode`&&(t===`queue`||t===`immediate`)&&D.getState().setMode(t,!1),Q(e,`success`),!0}catch(t){return console.error(`Failed to save setting "${e}":`,t),Q(e,`error`),!1}});return Be.current=n.then(()=>void 0,()=>void 0),n},[R,Z,Q]),ct=(0,I.useCallback)(e=>{if(R!==`project`)return Promise.resolve(void 0);let t=Be.current.then(async()=>{try{let t=await fetch(Z(`/${encodeURIComponent(q(e))}/reset`,`project`),{method:`POST`,headers:c({"Content-Type":`application/json`}),body:JSON.stringify({path:e})});if(!t.ok&&t.status!==204)throw Error(`HTTP ${t.status}`);let n=Oe(G.current.project,e),r={...G.current,project:n};return G.current=r,W(r),Q(e,`success`),!0}catch(t){return console.error(`Failed to reset setting "${e}":`,t),Q(e,`error`),!1}});return Be.current=t.then(()=>void 0,()=>void 0),t},[R,Z,Q]),lt={disconnected:`bg-gray-400`,connecting:`bg-accent-yellow animate-pulse`,connected:`bg-accent-green`,error:`bg-accent-red`}[o],ut={connected:`connection.connected`,connecting:`connection.connecting`,disconnected:`connection.disconnected`,error:`connection.error`},dt=S===`light`?O:S===`dark`?y:be,ft=w(S===`light`?`theme.light`:S===`dark`?`theme.dark`:`theme.system`),pt=re===`system`?F:v,mt=w(re===`zh`?`locale.zh`:re===`en`?`locale.en`:`locale.system`),ht=(0,I.useMemo)(()=>new Set(R===`project`?[...K?.projectKeys??[],...K?.projectPaths??[]]:K?.userKeys??[]),[K,R]),gt=(0,I.useMemo)(()=>Ae(Te,ht,B,w),[ht,B,w]),_t=R===`user`&&Y(B,w(`sidebar.connectionStatus`),w(`sidebar.status`),w(`sidebar.sessionId`)),vt=R===`user`&&Y(B,w(`settings.appearance`),w(`sidebar.theme`),w(`sidebar.language`)),yt=R===`user`&&Y(B,w(`settings.notifications`),w(`settings.notify.title`),w(`settings.notify.desc`)),bt=ht.has(`model`)&&Y(B,w(`settings.model`),w(`settings.item.model`),w(`settings.item.model.desc`),`model`),xt=R===`user`&&m.length>0&&Y(B,w(`settings.mode`),w(`sidebar.permissionMode`),`permissions.defaultMode`),St=R===`user`&&!!g&&Y(B,w(`settings.systemInfo`),w(`sidebar.cwd`),w(`sidebar.os`),w(`sidebar.nodeVersion`)),Ct=_t||vt||yt||bt||xt||St||gt.length>0,wt=U[R],Tt=(0,I.useCallback)(e=>R===`project`?ke(V,U.project,e):J(V,e),[R,U.project,V]),Et=(0,I.useCallback)(e=>R===`project`&&!Ee(U.project,e),[R,U.project]),Dt=String(Tt(`model`)??u??``),Ot=Tt(`codebuddy.mainAgent.enabled`)!==!1,kt=K?.scopes[R]?.filePath,$=(0,I.useMemo)(()=>{let e=[];_t&&e.push({id:X.connection,label:w(`sidebar.connectionStatus`)}),vt&&e.push({id:X.appearance,label:w(`settings.appearance`)}),yt&&e.push({id:X.notifications,label:w(`settings.notifications`)}),bt&&e.push({id:X.model,label:w(`settings.model`)}),xt&&e.push({id:X.mode,label:w(`settings.mode`)});for(let t of gt)e.push({id:je(t.titleKey),label:w(t.titleKey)});return St&&e.push({id:X.system,label:w(`settings.systemInfo`)}),e},[vt,_t,xt,bt,yt,St,w,gt]);(0,I.useEffect)(()=>{$.length>0&&!$.some(e=>e.id===He)&&Ue($[0].id)},[He,$]);let At=(0,I.useCallback)(e=>{let t=Ve.current?.querySelector(`#${CSS.escape(e)}`)??document.getElementById(e);t&&(Ue(e),t.scrollIntoView({behavior:`smooth`,block:`start`}))},[]);return(0,I.useEffect)(()=>{let e=Ve.current;if(!e||$.length===0)return;let t=new IntersectionObserver(e=>{let t=e.filter(e=>e.isIntersecting).sort((e,t)=>e.boundingClientRect.top-t.boundingClientRect.top)[0]?.target?.id;t&&Ue(t)},{root:e,rootMargin:`-12% 0px -70% 0px`,threshold:[0,.1,.25,.5,1]});for(let n of $){let r=e.querySelector(`#${CSS.escape(n.id)}`);r&&t.observe(r)}return()=>t.disconnect()},[$]),(0,z.jsxs)(`div`,{className:`settings-view${j?` settings-view-dock`:``}`,"data-presentation":e,children:[(0,z.jsxs)(`header`,{className:`settings-header`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsx)(`h1`,{className:`settings-title`,children:w(j?`agents.workspaceSettings`:`settings.title`)}),(0,z.jsxs)(`p`,{className:`settings-scope-hint`,title:kt,children:[M&&pe?pe+` · `:``,w(R===`project`?`settings.scope.projectHint`:`settings.scope.userHint`),kt?` · ${kt}`:``]})]}),(0,z.jsxs)(`div`,{className:`settings-search`,role:`search`,children:[(0,z.jsx)(_,{size:15,"aria-hidden":!0}),(0,z.jsx)(`input`,{value:B,onChange:e=>xe(e.target.value),placeholder:w(`settings.search.placeholder`),"aria-label":w(`settings.search.placeholder`)}),B&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>xe(``),title:w(`settings.search.clear`),"aria-label":w(`settings.search.clear`),children:(0,z.jsx)(ce,{size:13})})]})]}),(0,z.jsx)(`span`,{className:`sr-only`,"aria-live":`polite`,children:w(Ct?`settings.search.results`:`settings.search.empty`)}),(0,z.jsxs)(`div`,{className:`settings-content`,ref:Ve,children:[(0,z.jsx)(`nav`,{className:`settings-toc`,"aria-label":w(`settings.sections`),children:(0,z.jsx)(`div`,{className:`settings-toc-inner`,children:$.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`settings-toc-item${He===e.id?` active`:``}`,"aria-current":He===e.id?`location`:void 0,onClick:()=>At(e.id),children:e.label},e.id))})}),(0,z.jsxs)(`div`,{className:`settings-sections`,children:[_t&&(0,z.jsxs)(`div`,{id:X.connection,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`sidebar.connectionStatus`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.status`)}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`w-2 h-2 rounded-full ${lt}`}),(0,z.jsx)(`span`,{className:`settings-value`,children:w(ut[o]||`connection.disconnected`)})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.sessionId`)}),(0,z.jsx)(`span`,{className:`settings-value font-mono text-[12px]`,children:l?l.substring(0,12):w(`sidebar.notConnected`)})]})]})]}),vt&&(0,z.jsxs)(`div`,{id:X.appearance,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.appearance`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.theme`)}),(0,z.jsxs)(`button`,{onClick:te,className:`settings-toggle-btn`,children:[(0,z.jsx)(dt,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:ft})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.language`)}),(0,z.jsxs)(`button`,{onClick:ae,className:`settings-toggle-btn`,children:[(0,z.jsx)(pt,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:mt})]})]})]})]}),yt&&(0,z.jsxs)(`div`,{id:X.notifications,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.notifications`)}),(0,z.jsx)(`div`,{className:`settings-card`,children:(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`settings.notify.title`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:w(`settings.notify.desc`)}),qe&&(0,z.jsx)(`span`,{className:`settings-desc text-accent-red`,children:w(`settings.notify.unsupported`)}),Je===!1&&(0,z.jsx)(`span`,{className:`settings-desc ${Qe===`denied`?`text-accent-red`:``}`,children:w(Qe===`granted`?`settings.notify.browserHint.granted`:Qe===`denied`?`settings.notify.browserHint.denied`:`settings.notify.browserHint.default`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center shrink-0 ml-3 gap-2`,children:[(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>{tt().catch(()=>void 0)},title:w(`settings.notify.test`),children:[(0,z.jsx)(ye,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:w(`settings.notify.test`)})]}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${Ke?`on`:``}`,onClick:nt,"aria-pressed":Ke,"aria-label":w(`settings.notify.title`),title:w(`settings.notify.title`)})]})]})})]}),bt&&(0,z.jsxs)(`div`,{id:X.model,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.model`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[f.length>0?(0,z.jsxs)(`div`,{className:`settings-row settings-row-stack`,children:[(0,z.jsxs)(`div`,{className:`flex w-full items-center gap-2`,children:[(0,z.jsx)(`select`,{value:Dt,onChange:e=>{it(e.target.value).catch(()=>void 0)},className:`settings-select`,children:f.map(e=>(0,z.jsx)(`option`,{value:e.id,children:e.name||e.id},e.id))}),R===`project`&&Ee(wt,`model`)&&(0,z.jsxs)(`button`,{type:`button`,className:`settings-reset-btn`,onClick:()=>{at().catch(()=>void 0)},title:w(`settings.inheritUser`),"aria-label":w(`settings.inheritUser`),children:[(0,z.jsx)(ee,{size:13}),(0,z.jsx)(`span`,{children:w(`settings.reset`)})]})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[R===`project`&&Et(`model`)&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:w(`settings.inherited`)}),Le.model&&(0,z.jsx)(`span`,{className:`settings-save-feedback ${Le.model}`,children:w(Le.model===`success`?`settings.saved`:`settings.saveFailed`)})]})]}):(0,z.jsx)(`div`,{className:`settings-row`,children:(0,z.jsx)(`span`,{className:`settings-value`,children:w(`sidebar.noModels`)})}),R===`user`&&(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`settings.customModels.entryLabel`)}),(0,z.jsx)(`span`,{className:`settings-desc`,children:w(`settings.customModels.entryDesc`)})]}),(0,z.jsxs)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>Ge(!0),children:[(0,z.jsx)(ve,{size:14,className:`text-accent-brand`}),(0,z.jsx)(`span`,{children:w(`settings.customModels.manage`)})]})]})]})]}),xt&&(0,z.jsxs)(`div`,{id:X.mode,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.mode`)}),(0,z.jsx)(`div`,{className:`settings-card`,children:(0,z.jsx)(`select`,{value:h,onChange:e=>ot(e.target.value),className:`settings-select`,children:m.map(e=>(0,z.jsx)(`option`,{value:e.id,title:ne(`mode.${e.id}.desc`)||e.description,children:ne(`mode.${e.id}`)||e.name},e.id))})})]}),Fe?(0,z.jsx)(`div`,{className:`settings-empty-state`,children:w(`settings.loading`)}):Me?(0,z.jsxs)(`div`,{className:`settings-empty-state`,children:[(0,z.jsx)(`span`,{children:w(`settings.loadFailed`)}),(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-btn`,onClick:()=>{et().catch(()=>void 0)},children:w(`connection.retry`)})]}):gt.map(e=>(0,z.jsxs)(`div`,{id:je(e.titleKey),className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(e.titleKey)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[e.items.map(e=>(0,z.jsx)(Ne,{item:e,value:Tt(e.key),inherited:Et(e.key),feedback:Le[e.key],onSave:st,onReset:R===`project`?ct:void 0},e.key)),e.titleKey===`settings.group.mainAgent`&&Ot&&A.enabled&&!A.loading&&(0,z.jsx)(we,{scope:R,configuredDefault:Tt(`codebuddy.mainAgent.default`),defaultInherited:Et(`codebuddy.mainAgent.default`),onSetDefault:e=>st(`codebuddy.mainAgent.default`,e),onResetDefault:()=>ct(`codebuddy.mainAgent.default`),allowCreateByAI:!M,detachedWorkspace:!!M})]})]},e.titleKey)),!Fe&&!Me&&!Ct&&(0,z.jsxs)(`div`,{className:`settings-empty-state`,children:[(0,z.jsx)(_,{size:20,"aria-hidden":!0}),(0,z.jsx)(`span`,{children:w(B?`settings.search.empty`:`settings.noProjectSettings`)})]}),St&&g&&(0,z.jsxs)(`div`,{id:X.system,className:`settings-group`,children:[(0,z.jsx)(`h2`,{className:`settings-group-title`,children:w(`settings.systemInfo`)}),(0,z.jsxs)(`div`,{className:`settings-card`,children:[(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.cwd`)}),(0,z.jsxs)(`button`,{onClick:()=>rt(g.cwd,`cwd`),className:`settings-copy-btn`,title:g.cwd,children:[(0,z.jsx)(`span`,{className:`truncate cursor-pointer hover:underline hover:text-accent-brand`,onClick:e=>{e.stopPropagation(),n(g.cwd)},children:g.cwd}),_e===`cwd`?(0,z.jsx)(T,{size:12,className:`shrink-0 text-accent-green`}):(0,z.jsx)(ie,{size:12,className:`shrink-0 text-text-tertiary`})]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.os`)}),(0,z.jsxs)(`span`,{className:`settings-value`,children:[g.os,` `,g.arch]})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.nodeVersion`)}),(0,z.jsx)(`span`,{className:`settings-value`,children:g.nodeVersion})]}),(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.gatewayMode`)}),(0,z.jsx)(`span`,{className:`settings-value capitalize`,children:g.gatewayMode})]}),g.tunnelUrl&&(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:w(`sidebar.tunnelUrl`)}),(0,z.jsxs)(`button`,{onClick:()=>rt(g.tunnelUrl,`tunnel`),className:`settings-copy-btn`,title:g.tunnelUrl,children:[(0,z.jsx)(`span`,{className:`truncate`,children:g.tunnelUrl.replace(/^https?:\/\//,``)}),_e===`tunnel`?(0,z.jsx)(T,{size:12,className:`shrink-0 text-accent-green`}):(0,z.jsx)(ie,{size:12,className:`shrink-0 text-text-tertiary`})]})]})]})]})]})]}),We&&(0,z.jsx)(Se,{onClose:()=>Ge(!1)})]})}function Ne({item:e,value:t,inherited:n=!1,feedback:r,onSave:i,onReset:a}){let{t:o}=s(),[c,l]=(0,I.useState)(``),[u,d]=(0,I.useState)(!1),f=(0,I.useRef)(null);(0,I.useEffect)(()=>()=>{f.current&&clearTimeout(f.current)},[e.key,i]),(0,I.useEffect)(()=>{e.type===`text`||e.type===`number`?l(t==null?``:String(t)):e.type===`json`&&(l(t==null?``:JSON.stringify(t,null,2)),d(!1))},[t,e.type]);let p=e.type===`toggle`&&t===void 0&&e.defaultValue!==void 0?e.defaultValue:t,m=(0,I.useCallback)(()=>{i(e.key,!p)},[e.key,p,i]),h=(0,I.useCallback)(t=>{i(e.key,t||void 0)},[e.key,i]),g=(0,I.useCallback)(t=>{l(t),f.current&&clearTimeout(f.current),f.current=setTimeout(()=>{if(e.type===`number`){let n=Number(t);!isNaN(n)&&t.trim()!==``&&i(e.key,n)}else if(e.type===`json`)try{let n=JSON.parse(t);if(!n||typeof n!=`object`||Array.isArray(n))throw Error(`Expected a JSON object`);d(!1),i(e.key,n)}catch{d(!0)}else i(e.key,t)},600)},[e.key,e.type,i]);return(0,z.jsxs)(`div`,{className:`settings-row`,children:[(0,z.jsxs)(`div`,{className:`flex flex-col gap-0.5 min-w-0 flex-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{className:`settings-label`,children:o(e.labelKey)}),r&&(0,z.jsx)(`span`,{className:`settings-save-feedback ${r===`success`?`success`:`error`}`,children:o(r===`success`?`settings.saved`:`settings.saveFailed`)})]}),e.descKey&&(0,z.jsx)(`span`,{className:`settings-desc`,children:o(e.descKey)}),n&&(0,z.jsx)(`span`,{className:`settings-inherited`,children:o(`settings.inherited`)}),u&&(0,z.jsx)(`span`,{className:`settings-desc text-accent-red`,children:o(`settings.invalidJson`)})]}),(0,z.jsxs)(`div`,{className:`flex items-center shrink-0 ml-3 gap-2`,children:[!n&&a&&(0,z.jsx)(`button`,{type:`button`,className:`settings-reset-icon`,onClick:()=>a(e.key),title:o(`settings.inheritUser`),"aria-label":o(`settings.inheritUser`),children:(0,z.jsx)(ee,{size:13})}),e.type===`toggle`&&(0,z.jsx)(`button`,{type:`button`,className:`settings-toggle-switch ${p?`on`:``}`,onClick:m,"aria-pressed":!!p,"aria-label":o(e.labelKey)}),e.type===`select`&&e.options&&(0,z.jsxs)(`select`,{value:String(t??(typeof e.defaultValue==`string`?e.defaultValue:``)),onChange:e=>h(e.target.value),className:`settings-inline-select`,children:[!e.hideEmptyOption&&(0,z.jsx)(`option`,{value:``,children:`-`}),e.options.map(e=>(0,z.jsx)(`option`,{value:e.value,children:o(e.labelKey)},e.value))]}),e.type===`text`&&(0,z.jsx)(`input`,{type:`text`,value:c,onChange:e=>g(e.target.value),placeholder:o(`settings.notSet`),className:`settings-input`}),e.type===`number`&&(0,z.jsx)(`input`,{type:`number`,value:c,onChange:e=>g(e.target.value),className:`settings-input`,style:{width:80}}),e.type===`json`&&(0,z.jsx)(`textarea`,{value:c,onChange:e=>g(e.target.value),placeholder:`{}`,className:`settings-input wide`,rows:3,style:{width:`100%`,resize:`vertical`}})]})]})}export{Me as SettingsView};
@@ -1 +1 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./use-i18n-BCKBlfpd.js";import{l as n,u as r}from"./markdown-DCKhnxE9.js";import{s as i}from"./index-ClsikMuk.js";var a=e(r(),1),o=n();function s({direction:e,ratio:n,onRatioChange:r,children:s}){let{t:c}=t(),l=(0,a.useRef)(null),[u,d]=(0,a.useState)(!1),f=(0,a.useCallback)(t=>{if(t.button!==0&&t.pointerType===`mouse`)return;t.preventDefault(),t.stopPropagation();let n=l.current;if(!n)return;let a=n.getBoundingClientRect();d(!0),i({pointerId:t.pointerId,target:t.currentTarget,cursor:e===`horizontal`?`col-resize`:`row-resize`,onMove:(t,n)=>{let i;i=e===`horizontal`?(t-a.left)/a.width:(n-a.top)/a.height,r(Math.max(.1,Math.min(.9,i)))},onEnd:()=>d(!1)})},[e,r]),p=(0,a.useCallback)(t=>{let i=null;t.key===`Home`&&(i=.1),t.key===`End`&&(i=.9),e===`horizontal`?(t.key===`ArrowLeft`&&(i=n-.05),t.key===`ArrowRight`&&(i=n+.05)):(t.key===`ArrowUp`&&(i=n-.05),t.key===`ArrowDown`&&(i=n+.05)),i!==null&&(t.preventDefault(),r(Math.max(.1,Math.min(.9,i))))},[e,r,n]),m=e===`horizontal`,h=`${n*100}%`,g=`${(1-n)*100}%`;return(0,o.jsxs)(`div`,{ref:l,className:`flex h-full w-full min-h-0`,style:{flexDirection:m?`row`:`column`},children:[(0,o.jsx)(`div`,{style:{[m?`width`:`height`]:h,overflow:`hidden`,display:`flex`},children:s[0]}),(0,o.jsx)(`div`,{className:`split-sash ${m?`split-sash-horizontal`:`split-sash-vertical`} ${u?`dragging`:``}`,role:`separator`,tabIndex:0,"aria-label":c(`ide.resizeSplit`),"aria-orientation":m?`vertical`:`horizontal`,"aria-valuemin":10,"aria-valuemax":90,"aria-valuenow":Math.round(n*100),onPointerDown:f,onKeyDown:p}),(0,o.jsx)(`div`,{style:{[m?`width`:`height`]:g,overflow:`hidden`,display:`flex`},children:s[1]})]})}export{s as t};
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{t}from"./use-i18n-BvJYl_9l.js";import{l as n,u as r}from"./markdown-DCKhnxE9.js";import{s as i}from"./index-BtMp20L0.js";var a=e(r(),1),o=n();function s({direction:e,ratio:n,onRatioChange:r,children:s}){let{t:c}=t(),l=(0,a.useRef)(null),[u,d]=(0,a.useState)(!1),f=(0,a.useCallback)(t=>{if(t.button!==0&&t.pointerType===`mouse`)return;t.preventDefault(),t.stopPropagation();let n=l.current;if(!n)return;let a=n.getBoundingClientRect();d(!0),i({pointerId:t.pointerId,target:t.currentTarget,cursor:e===`horizontal`?`col-resize`:`row-resize`,onMove:(t,n)=>{let i;i=e===`horizontal`?(t-a.left)/a.width:(n-a.top)/a.height,r(Math.max(.1,Math.min(.9,i)))},onEnd:()=>d(!1)})},[e,r]),p=(0,a.useCallback)(t=>{let i=null;t.key===`Home`&&(i=.1),t.key===`End`&&(i=.9),e===`horizontal`?(t.key===`ArrowLeft`&&(i=n-.05),t.key===`ArrowRight`&&(i=n+.05)):(t.key===`ArrowUp`&&(i=n-.05),t.key===`ArrowDown`&&(i=n+.05)),i!==null&&(t.preventDefault(),r(Math.max(.1,Math.min(.9,i))))},[e,r,n]),m=e===`horizontal`,h=`${n*100}%`,g=`${(1-n)*100}%`;return(0,o.jsxs)(`div`,{ref:l,className:`flex h-full w-full min-h-0`,style:{flexDirection:m?`row`:`column`},children:[(0,o.jsx)(`div`,{style:{[m?`width`:`height`]:h,overflow:`hidden`,display:`flex`},children:s[0]}),(0,o.jsx)(`div`,{className:`split-sash ${m?`split-sash-horizontal`:`split-sash-vertical`} ${u?`dragging`:``}`,role:`separator`,tabIndex:0,"aria-label":c(`ide.resizeSplit`),"aria-orientation":m?`vertical`:`horizontal`,"aria-valuemin":10,"aria-valuemax":90,"aria-valuenow":Math.round(n*100),onPointerDown:f,onKeyDown:p}),(0,o.jsx)(`div`,{style:{[m?`width`:`height`]:g,overflow:`hidden`,display:`flex`},children:s[1]})]})}export{s as t};
@@ -1,2 +1,2 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{i as t,st as n,t as r}from"./use-i18n-BCKBlfpd.js";import{l as i,u as a}from"./markdown-DCKhnxE9.js";import{t as o}from"./theme-store-B-x3NJPZ.js";import{t as s}from"./timer-CPkvO7Hr.js";import{t as c}from"./zap-JdzyzkaE.js";import{Ct as l,D as u,Wt as d,kt as f,lt as p,sn as m,vn as h,zt as g}from"./index-ClsikMuk.js";var _=t(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),v=t(`trending-up`,[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]),y=e(a(),1),b=n((e,t)=>({stats:null,statsLoading:!1,statsError:null,sessionStats:null,sessionLoading:!1,sessionError:null,fetchStats:async()=>{e({statsLoading:!t().stats,statsError:null});try{e({stats:await p(`/api/v1/stats`),statsLoading:!1})}catch(t){e({statsError:t.message,statsLoading:!1})}},fetchSessionStats:async()=>{e({sessionLoading:!t().sessionStats,sessionError:null});try{e({sessionStats:await p(`/api/v1/stats/session`),sessionLoading:!1})}catch(t){e({sessionError:t.message,sessionLoading:!1})}},fetchAll:async()=>{await Promise.all([t().fetchStats(),t().fetchSessionStats()])}}));function x(e){return e>=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`k`:e.toString()}function S(e){if(e<=0)return`-`;let t=Math.floor(e/1e3),n=Math.floor(t/60),r=Math.floor(n/60);return r>0?`${r}h ${n%60}m ${t%60}s`:n>0?`${n}m ${t%60}s`:`${t}s`}function C(e){return e.replace(/^anthropic\./,``).replace(/^openai\./,``).replace(/-\d{8}$/,``).replace(/@.*$/,``)}function w(e){return new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})}var T=[`#ebedf0`,`#9be9a8`,`#40c463`,`#30a14e`,`#216e39`],E=[`#161b22`,`#0e4429`,`#006d32`,`#26a641`,`#39d353`],D=[`#3b82f6`,`#10b981`,`#8b5cf6`],O=[{name:`The Little Prince`,tokens:22e3},{name:`The Old Man and the Sea`,tokens:35e3},{name:`A Christmas Carol`,tokens:37e3},{name:`Animal Farm`,tokens:39e3},{name:`Fahrenheit 451`,tokens:6e4},{name:`The Great Gatsby`,tokens:62e3},{name:`Brave New World`,tokens:83e3},{name:`Harry Potter and the Philosopher's Stone`,tokens:103e3},{name:`1984`,tokens:123e3},{name:`Pride and Prejudice`,tokens:156e3},{name:`Dune`,tokens:244e3},{name:`A Game of Thrones`,tokens:381e3},{name:`The Lord of the Rings`,tokens:576e3},{name:`War and Peace`,tokens:73e4}],k=[{name:`朝花夕拾`,tokens:18e3},{name:`骆驼祥子`,tokens:6e4},{name:`活着`,tokens:72e3},{name:`围城`,tokens:84e3},{name:`三体`,tokens:126e3},{name:`射雕英雄传`,tokens:234e3},{name:`红楼梦`,tokens:438e3},{name:`三国演义`,tokens:48e4},{name:`西游记`,tokens:492e3},{name:`水浒传`,tokens:576e3},{name:`平凡的世界`,tokens:6e5},{name:`金庸全集`,tokens:636e4}],A=[{en:`a TED talk`,zh:`一场 TED 演讲`,minutes:18},{en:`an episode of The Office`,zh:`一集《办公室》`,minutes:22},{en:`listening to Abbey Road`,zh:`听一遍《Abbey Road》专辑`,minutes:47},{en:`a yoga class`,zh:`一节瑜伽课`,minutes:60},{en:`a World Cup soccer match`,zh:`一场世界杯比赛`,minutes:90},{en:`a half marathon (average time)`,zh:`一场半程马拉松`,minutes:120},{en:`the movie Inception`,zh:`电影《盗梦空间》`,minutes:148},{en:`watching Titanic`,zh:`电影《泰坦尼克号》`,minutes:195},{en:`a transatlantic flight`,zh:`一趟跨大西洋航班`,minutes:420},{en:`a full night of sleep`,zh:`一整晚的睡眠`,minutes:480}];function j(e,t,n,r){let i=[],a=r===`zh`?k:O;if(t>0){for(let e of a)if(t>=e.tokens){let r=t/e.tokens;i.push(r>=2?n(`stats.funFact.moreTokens`).replace(`{times}`,String(Math.floor(r))).replace(`{book}`,e.name):n(`stats.funFact.sameTokens`).replace(`{book}`,e.name))}}if(e.longestSession){let t=e.longestSession.duration/6e4;for(let e of A){let a=t/e.minutes;if(a>=2){let t=r===`zh`?e.zh:e.en;i.push(n(`stats.funFact.longerSession`).replace(`{times}`,String(Math.floor(a))).replace(`{activity}`,t))}}}if(i.length===0)return``;let o=Math.floor((e.longestSession?.duration??0)/6e4);return i[Math.abs(Math.trunc(t+o))%i.length]}var M=i();function N({dailyModelTokens:e,topModels:t}){let n=(0,y.useMemo)(()=>{let n={top:20,right:20,bottom:40,left:60},r=700-n.left-n.right,i=220-n.top-n.bottom,a=0;for(let n of e)for(let e of t){let t=n.tokensByModel[e.id]||0;t>a&&(a=t)}a===0&&(a=1);let o=t.map((t,o)=>{let s=e.map((o,s)=>{let c=n.left+s/Math.max(e.length-1,1)*r,l=o.tokensByModel[t.id]||0;return`${c},${n.top+i-l/a*i}`});return e.some(e=>(e.tokensByModel[t.id]||0)>0)?{path:`M${s.join(`L`)}`,color:D[o%D.length],id:t.id,label:t.label}:null}).filter(Boolean),s=Array.from({length:5},(e,t)=>{let r=a*(1-t/4);return{y:n.top+t/4*i,label:x(Math.round(r))}}),c=Math.min(5,e.length),l=Math.max(1,Math.floor((e.length-1)/(c-1)));return{W:700,H:220,PAD:n,CW:r,CH:i,lines:o,yGridLines:s,xLabels:Array.from({length:c},(t,i)=>{let a=Math.min(i*l,e.length-1);return{x:n.left+a/Math.max(e.length-1,1)*r,label:w(e[a].date)}})}},[e,t]);return(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`div`,{className:`overflow-x-auto`,children:(0,M.jsxs)(`svg`,{viewBox:`0 0 ${n.W} ${n.H}`,className:`w-full min-w-[500px]`,style:{maxHeight:`240px`},children:[n.yGridLines.map((e,t)=>(0,M.jsxs)(`g`,{children:[(0,M.jsx)(`line`,{x1:n.PAD.left,y1:e.y,x2:n.W-n.PAD.right,y2:e.y,className:`stroke-border-primary`,strokeWidth:.5,strokeDasharray:`4 4`}),(0,M.jsx)(`text`,{x:n.PAD.left-8,y:e.y+4,textAnchor:`end`,className:`fill-text-tertiary`,fontSize:10,children:e.label})]},t)),n.lines.map((e,t)=>(0,M.jsx)(`path`,{d:e.path,fill:`none`,stroke:e.color,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},t)),n.xLabels.map((e,t)=>(0,M.jsx)(`text`,{x:e.x,y:n.H-10,textAnchor:`middle`,className:`fill-text-tertiary`,fontSize:10,children:e.label},t))]})}),(0,M.jsx)(`div`,{className:`flex gap-4 mt-2 justify-center`,children:n.lines.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-text-secondary`,children:[(0,M.jsx)(`span`,{className:`w-2.5 h-2.5 rounded-full`,style:{backgroundColor:e.color}}),(0,M.jsx)(`span`,{children:e.label})]},e.id))})]})}function P({stats:e}){let{t}=r(),n=(0,y.useMemo)(()=>Object.entries(e.modelUsage).map(([e,t])=>{let n=t.inputTokens>0?t.cacheReadInputTokens/t.inputTokens*100:0;return{name:e,shortName:t.displayName||C(e),inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadInputTokens:t.cacheReadInputTokens,cacheHitRate:n,total:t.inputTokens+t.outputTokens,costUSD:t.costUSD}}).sort((e,t)=>t.total-e.total),[e.modelUsage]),i=(0,y.useMemo)(()=>n.reduce((e,t)=>e+t.total,0),[n]);return n.length===0?(0,M.jsx)(`div`,{className:`text-center py-12 text-text-tertiary`,children:t(`stats.noData`)}):(0,M.jsxs)(M.Fragment,{children:[e.dailyModelTokens.length>=2&&(0,M.jsxs)(`div`,{className:`mb-6`,children:[(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-3`,children:t(`stats.tokensPerDay`)}),(0,M.jsx)(N,{dailyModelTokens:e.dailyModelTokens,topModels:n.slice(0,3).map(e=>({id:e.name,label:e.shortName}))})]}),(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-3`,children:t(`stats.allModels`)}),(0,M.jsx)(`div`,{className:`space-y-3`,children:n.map(e=>{let n=i>0?e.total/i*100:0;return(0,M.jsxs)(`div`,{className:`bg-bg-secondary rounded-lg p-3 border border-border-primary`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,M.jsx)(`span`,{className:`text-sm font-medium text-text-primary`,children:e.shortName}),(0,M.jsxs)(`span`,{className:`text-xs text-text-tertiary`,children:[n.toFixed(1),`%`]})]}),(0,M.jsx)(`div`,{className:`h-1.5 bg-bg-tertiary rounded-full mb-2`,children:(0,M.jsx)(`div`,{className:`h-full rounded-full bg-accent-brand transition-all duration-500`,style:{width:`${Math.min(n,100)}%`}})}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-4 gap-2 text-xs text-text-secondary`,children:[(0,M.jsxs)(`span`,{children:[t(`stats.input`),`: `,x(e.inputTokens)]}),(0,M.jsxs)(`span`,{children:[t(`stats.output`),`: `,x(e.outputTokens)]}),e.cacheReadInputTokens>0&&(0,M.jsxs)(`span`,{children:[t(`stats.cacheHitRate`),`: `,e.cacheHitRate.toFixed(1),`%`]}),e.costUSD>0&&(0,M.jsxs)(`span`,{children:[t(`stats.cost`),`: $`,e.costUSD.toFixed(2)]})]})]},e.name)})})]})}function F({dailyActivity:e}){let{t}=r(),n=o(e=>e.resolved)===`dark`?E:T,i=(0,y.useMemo)(()=>{let t=new Map;for(let n of e)t.set(n.date,n.messageCount);let n=e.map(e=>e.messageCount).filter(e=>e>0).sort((e,t)=>e-t),r=n.length>0?n[Math.floor(n.length*.25)]:0,i=n.length>0?n[Math.floor(n.length*.5)]:0,a=n.length>0?n[Math.floor(n.length*.75)]:0,o=e=>e===0||n.length===0?0:e>=a?4:e>=i?3:e>=r?2:1,s=new Date;s.setHours(0,0,0,0);let c=new Date(s);c.setDate(s.getDate()-s.getDay());let l=new Date(c);l.setDate(l.getDate()-357);let u=[],d=[],f=-1,p=new Date(l);for(let e=0;e<52;e++)for(let n=0;n<7;n++){if(p>s){p.setDate(p.getDate()+1);continue}let r=`${p.getFullYear()}-${String(p.getMonth()+1).padStart(2,`0`)}-${String(p.getDate()).padStart(2,`0`)}`,i=t.get(r)||0;n===0&&p.getMonth()!==f&&(d.push({text:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][p.getMonth()],x:32+e*14}),f=p.getMonth()),u.push({key:r,x:32+e*14,y:20+n*14,level:o(i),date:r,count:i}),p.setDate(p.getDate()+1)}return{cells:u,monthLabels:d,width:770,height:128,CELL_SIZE:12,TOP_PADDING:20,LEFT_PADDING:32,CELL_GAP:2}},[e]);return(0,M.jsx)(`div`,{className:`overflow-x-auto`,children:(0,M.jsxs)(`svg`,{width:i.width,height:i.height+30,viewBox:`0 0 ${i.width} ${i.height+30}`,className:`min-w-[500px]`,children:[i.monthLabels.map((e,t)=>(0,M.jsx)(`text`,{x:e.x,y:i.TOP_PADDING-6,className:`fill-text-tertiary`,fontSize:10,children:e.text},t)),[``,`Mon`,``,`Wed`,``,`Fri`,``].map((e,t)=>e?(0,M.jsx)(`text`,{x:i.LEFT_PADDING-6,y:i.TOP_PADDING+t*(i.CELL_SIZE+i.CELL_GAP)+i.CELL_SIZE-2,className:`fill-text-tertiary`,fontSize:10,textAnchor:`end`,children:e},t):null),i.cells.map(e=>(0,M.jsx)(`rect`,{x:e.x,y:e.y,width:i.CELL_SIZE,height:i.CELL_SIZE,rx:2,fill:n[e.level],children:(0,M.jsxs)(`title`,{children:[e.date,`: `,e.count,` `,t(`stats.heatmap.messages`)]})},e.key)),(()=>{let e=i.height+4,r=i.LEFT_PADDING;return(0,M.jsxs)(`g`,{children:[(0,M.jsx)(`text`,{x:r,y:e+10,className:`fill-text-tertiary`,fontSize:10,children:t(`stats.heatmap.less`)}),n.map((t,n)=>(0,M.jsx)(`rect`,{x:r+30+n*(i.CELL_SIZE+2),y:e,width:i.CELL_SIZE,height:i.CELL_SIZE,rx:2,fill:t},n)),(0,M.jsx)(`text`,{x:r+30+5*(i.CELL_SIZE+2)+4,y:e+10,className:`fill-text-tertiary`,fontSize:10,children:t(`stats.heatmap.more`)})]})})()]})})}function I({sessionStats:e}){let{t}=r(),n=(0,y.useMemo)(()=>Object.values(e.tokenUsageByModel).reduce((e,t)=>e+t.inputTokens+t.outputTokens,0),[e.tokenUsageByModel]);return(0,M.jsxs)(`div`,{className:`flex flex-wrap gap-3 mb-6 p-3 bg-bg-secondary/50 rounded-xl border border-border-primary/50`,children:[(0,M.jsx)(L,{label:t(`stats.session.title`),icon:(0,M.jsx)(_,{size:12})}),(0,M.jsx)(L,{label:t(`stats.session.apiDuration`),value:S(e.apiDuration)}),(0,M.jsx)(L,{label:t(`stats.session.wallTime`),value:S(e.runningTime)}),(0,M.jsx)(L,{label:t(`stats.session.linesAdded`),value:`+${e.fileChangeStats.totalAddedLines}`,valueClass:`text-green-500`}),(0,M.jsx)(L,{label:t(`stats.session.linesDeleted`),value:`-${e.fileChangeStats.totalDeletedLines}`,valueClass:`text-red-500`}),(0,M.jsx)(L,{label:t(`stats.session.tokens`),value:x(n)})]})}function L({label:e,value:t,icon:n,valueClass:r}){return(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[n,(0,M.jsx)(`span`,{className:`text-text-tertiary`,children:e}),t&&(0,M.jsx)(`span`,{className:`font-medium text-text-primary ${r||``}`,children:t})]})}function R({icon:e,label:t,value:n}){return(0,M.jsxs)(`div`,{className:`bg-bg-secondary rounded-xl p-4 border border-border-primary`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,M.jsx)(`span`,{className:`text-text-tertiary`,children:e}),(0,M.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:t})]}),(0,M.jsx)(`div`,{className:`text-lg font-semibold text-text-primary`,style:{fontVariantNumeric:`tabular-nums`},children:n})]})}function z({stats:e,sessionStats:t}){let{t:n,resolved:i}=r(),a=(0,y.useMemo)(()=>Object.entries(e.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),[e.modelUsage]),o=(0,y.useMemo)(()=>a.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),[a]),u=(0,y.useMemo)(()=>{let e=a.reduce((e,[,t])=>e+t.inputTokens,0),t=a.reduce((e,[,t])=>e+t.cacheReadInputTokens,0);return e>0?t/e*100:0},[a]),f=a[0],p=(0,y.useMemo)(()=>j(e,o,n,i),[e,o,n,i]);return(0,M.jsxs)(M.Fragment,{children:[t&&(0,M.jsx)(I,{sessionStats:t}),e.dailyActivity.length>0&&(0,M.jsx)(`div`,{className:`mb-6`,children:(0,M.jsx)(F,{dailyActivity:e.dailyActivity})}),f&&(0,M.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-4 mb-4`,children:[(0,M.jsx)(R,{icon:(0,M.jsx)(l,{size:16}),label:n(`stats.favoriteModel`),value:f[1].displayName||C(f[0])}),(0,M.jsx)(R,{icon:(0,M.jsx)(d,{size:16}),label:n(`stats.totalTokens`),value:x(o)}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.cacheHitRate`),value:`${u.toFixed(1)}%`})]}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 gap-4 mb-6`,children:[(0,M.jsx)(R,{icon:(0,M.jsx)(g,{size:16}),label:n(`stats.sessions`),value:x(e.totalSessions)}),(0,M.jsx)(R,{icon:(0,M.jsx)(s,{size:16}),label:n(`stats.longestSession`),value:e.longestSession?S(e.longestSession.duration):n(`stats.na`)}),(0,M.jsx)(R,{icon:(0,M.jsx)(v,{size:16}),label:n(`stats.activeDays`),value:`${e.activeDays}/${e.totalDays}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.currentStreak`),value:`${e.streaks.currentStreak} ${n(`stats.days`)}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.longestStreak`),value:`${e.streaks.longestStreak} ${n(`stats.days`)}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(m,{size:16}),label:n(`stats.peakHour`),value:e.peakActivityHour===null?n(`stats.na`):`${e.peakActivityHour}:00-${e.peakActivityHour+1}:00`})]}),p&&(0,M.jsx)(`div`,{className:`p-3 bg-bg-secondary/50 rounded-lg border border-border-primary/50 text-sm text-accent-brand`,children:p})]})}function B({toolUsage:e}){let{t}=r(),n=e.slice(0,20),i=n[0]?.count||0;return n.length===0?(0,M.jsx)(`div`,{className:`text-center py-12 text-text-tertiary`,children:t(`stats.noData`)}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-4`,children:t(`stats.topTools`)}),(0,M.jsx)(`div`,{className:`space-y-2`,children:n.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(`span`,{className:`text-xs text-text-secondary w-28 text-right truncate font-mono`,children:e.toolName}),(0,M.jsx)(`div`,{className:`flex-1 h-6 bg-bg-tertiary rounded overflow-hidden`,children:(0,M.jsx)(`div`,{className:`h-full bg-accent-brand/60 rounded transition-all duration-500 flex items-center pl-2`,style:{width:`${Math.max(e.count/i*100,2)}%`},children:e.count/i>.15&&(0,M.jsx)(`span`,{className:`text-[10px] text-text-primary font-mono`,children:x(e.count)})})}),e.count/i<=.15&&(0,M.jsx)(`span`,{className:`text-xs text-text-tertiary w-12 font-mono`,children:x(e.count)})]},e.toolName))})]})}function V(){let{t:e}=r(),{stats:t,statsLoading:n,statsError:i,sessionStats:a,fetchAll:o}=b(),[s,c]=(0,y.useState)(`overview`);if((0,y.useEffect)(()=>{o()},[o]),n&&!t)return(0,M.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,M.jsx)(u,{size:`large`,text:e(`stats.loading`)})});if(i&&!t)return(0,M.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,M.jsxs)(`div`,{className:`text-center`,children:[(0,M.jsx)(`div`,{className:`text-text-secondary mb-4`,children:i}),(0,M.jsx)(`button`,{onClick:o,className:`px-4 py-2 bg-accent-brand text-accent-brand-foreground rounded-lg text-sm`,children:e(`stats.refresh`)})]})});let l=[{key:`overview`,label:e(`stats.tab.overview`)},{key:`models`,label:e(`stats.tab.models`)},{key:`tools`,label:e(`stats.tab.tools`)}];return(0,M.jsxs)(`div`,{className:`flex-1 overflow-auto p-4 md:p-6`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between mb-6`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(h,{size:20,className:`text-accent-brand`}),(0,M.jsx)(`h1`,{className:`text-lg font-semibold text-text-primary`,children:e(`stats.title`)})]}),(0,M.jsxs)(`button`,{onClick:o,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm text-text-secondary
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{i as t,st as n,t as r}from"./use-i18n-BvJYl_9l.js";import{l as i,u as a}from"./markdown-DCKhnxE9.js";import{t as o}from"./theme-store-7kL2_Dih.js";import{t as s}from"./timer-DsflRbuo.js";import{t as c}from"./zap-u2SXZ7au.js";import{Ct as l,D as u,Wt as d,kt as f,lt as p,sn as m,vn as h,zt as g}from"./index-BtMp20L0.js";var _=t(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),v=t(`trending-up`,[[`path`,{d:`M16 7h6v6`,key:`box55l`}],[`path`,{d:`m22 7-8.5 8.5-5-5L2 17`,key:`1t1m79`}]]),y=e(a(),1),b=n((e,t)=>({stats:null,statsLoading:!1,statsError:null,sessionStats:null,sessionLoading:!1,sessionError:null,fetchStats:async()=>{e({statsLoading:!t().stats,statsError:null});try{e({stats:await p(`/api/v1/stats`),statsLoading:!1})}catch(t){e({statsError:t.message,statsLoading:!1})}},fetchSessionStats:async()=>{e({sessionLoading:!t().sessionStats,sessionError:null});try{e({sessionStats:await p(`/api/v1/stats/session`),sessionLoading:!1})}catch(t){e({sessionError:t.message,sessionLoading:!1})}},fetchAll:async()=>{await Promise.all([t().fetchStats(),t().fetchSessionStats()])}}));function x(e){return e>=1e6?(e/1e6).toFixed(1)+`M`:e>=1e3?(e/1e3).toFixed(1)+`k`:e.toString()}function S(e){if(e<=0)return`-`;let t=Math.floor(e/1e3),n=Math.floor(t/60),r=Math.floor(n/60);return r>0?`${r}h ${n%60}m ${t%60}s`:n>0?`${n}m ${t%60}s`:`${t}s`}function C(e){return e.replace(/^anthropic\./,``).replace(/^openai\./,``).replace(/-\d{8}$/,``).replace(/@.*$/,``)}function w(e){return new Date(e).toLocaleDateString(`en-US`,{month:`short`,day:`numeric`})}var T=[`#ebedf0`,`#9be9a8`,`#40c463`,`#30a14e`,`#216e39`],E=[`#161b22`,`#0e4429`,`#006d32`,`#26a641`,`#39d353`],D=[`#3b82f6`,`#10b981`,`#8b5cf6`],O=[{name:`The Little Prince`,tokens:22e3},{name:`The Old Man and the Sea`,tokens:35e3},{name:`A Christmas Carol`,tokens:37e3},{name:`Animal Farm`,tokens:39e3},{name:`Fahrenheit 451`,tokens:6e4},{name:`The Great Gatsby`,tokens:62e3},{name:`Brave New World`,tokens:83e3},{name:`Harry Potter and the Philosopher's Stone`,tokens:103e3},{name:`1984`,tokens:123e3},{name:`Pride and Prejudice`,tokens:156e3},{name:`Dune`,tokens:244e3},{name:`A Game of Thrones`,tokens:381e3},{name:`The Lord of the Rings`,tokens:576e3},{name:`War and Peace`,tokens:73e4}],k=[{name:`朝花夕拾`,tokens:18e3},{name:`骆驼祥子`,tokens:6e4},{name:`活着`,tokens:72e3},{name:`围城`,tokens:84e3},{name:`三体`,tokens:126e3},{name:`射雕英雄传`,tokens:234e3},{name:`红楼梦`,tokens:438e3},{name:`三国演义`,tokens:48e4},{name:`西游记`,tokens:492e3},{name:`水浒传`,tokens:576e3},{name:`平凡的世界`,tokens:6e5},{name:`金庸全集`,tokens:636e4}],A=[{en:`a TED talk`,zh:`一场 TED 演讲`,minutes:18},{en:`an episode of The Office`,zh:`一集《办公室》`,minutes:22},{en:`listening to Abbey Road`,zh:`听一遍《Abbey Road》专辑`,minutes:47},{en:`a yoga class`,zh:`一节瑜伽课`,minutes:60},{en:`a World Cup soccer match`,zh:`一场世界杯比赛`,minutes:90},{en:`a half marathon (average time)`,zh:`一场半程马拉松`,minutes:120},{en:`the movie Inception`,zh:`电影《盗梦空间》`,minutes:148},{en:`watching Titanic`,zh:`电影《泰坦尼克号》`,minutes:195},{en:`a transatlantic flight`,zh:`一趟跨大西洋航班`,minutes:420},{en:`a full night of sleep`,zh:`一整晚的睡眠`,minutes:480}];function j(e,t,n,r){let i=[],a=r===`zh`?k:O;if(t>0){for(let e of a)if(t>=e.tokens){let r=t/e.tokens;i.push(r>=2?n(`stats.funFact.moreTokens`).replace(`{times}`,String(Math.floor(r))).replace(`{book}`,e.name):n(`stats.funFact.sameTokens`).replace(`{book}`,e.name))}}if(e.longestSession){let t=e.longestSession.duration/6e4;for(let e of A){let a=t/e.minutes;if(a>=2){let t=r===`zh`?e.zh:e.en;i.push(n(`stats.funFact.longerSession`).replace(`{times}`,String(Math.floor(a))).replace(`{activity}`,t))}}}if(i.length===0)return``;let o=Math.floor((e.longestSession?.duration??0)/6e4);return i[Math.abs(Math.trunc(t+o))%i.length]}var M=i();function N({dailyModelTokens:e,topModels:t}){let n=(0,y.useMemo)(()=>{let n={top:20,right:20,bottom:40,left:60},r=700-n.left-n.right,i=220-n.top-n.bottom,a=0;for(let n of e)for(let e of t){let t=n.tokensByModel[e.id]||0;t>a&&(a=t)}a===0&&(a=1);let o=t.map((t,o)=>{let s=e.map((o,s)=>{let c=n.left+s/Math.max(e.length-1,1)*r,l=o.tokensByModel[t.id]||0;return`${c},${n.top+i-l/a*i}`});return e.some(e=>(e.tokensByModel[t.id]||0)>0)?{path:`M${s.join(`L`)}`,color:D[o%D.length],id:t.id,label:t.label}:null}).filter(Boolean),s=Array.from({length:5},(e,t)=>{let r=a*(1-t/4);return{y:n.top+t/4*i,label:x(Math.round(r))}}),c=Math.min(5,e.length),l=Math.max(1,Math.floor((e.length-1)/(c-1)));return{W:700,H:220,PAD:n,CW:r,CH:i,lines:o,yGridLines:s,xLabels:Array.from({length:c},(t,i)=>{let a=Math.min(i*l,e.length-1);return{x:n.left+a/Math.max(e.length-1,1)*r,label:w(e[a].date)}})}},[e,t]);return(0,M.jsxs)(`div`,{children:[(0,M.jsx)(`div`,{className:`overflow-x-auto`,children:(0,M.jsxs)(`svg`,{viewBox:`0 0 ${n.W} ${n.H}`,className:`w-full min-w-[500px]`,style:{maxHeight:`240px`},children:[n.yGridLines.map((e,t)=>(0,M.jsxs)(`g`,{children:[(0,M.jsx)(`line`,{x1:n.PAD.left,y1:e.y,x2:n.W-n.PAD.right,y2:e.y,className:`stroke-border-primary`,strokeWidth:.5,strokeDasharray:`4 4`}),(0,M.jsx)(`text`,{x:n.PAD.left-8,y:e.y+4,textAnchor:`end`,className:`fill-text-tertiary`,fontSize:10,children:e.label})]},t)),n.lines.map((e,t)=>(0,M.jsx)(`path`,{d:e.path,fill:`none`,stroke:e.color,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},t)),n.xLabels.map((e,t)=>(0,M.jsx)(`text`,{x:e.x,y:n.H-10,textAnchor:`middle`,className:`fill-text-tertiary`,fontSize:10,children:e.label},t))]})}),(0,M.jsx)(`div`,{className:`flex gap-4 mt-2 justify-center`,children:n.lines.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs text-text-secondary`,children:[(0,M.jsx)(`span`,{className:`w-2.5 h-2.5 rounded-full`,style:{backgroundColor:e.color}}),(0,M.jsx)(`span`,{children:e.label})]},e.id))})]})}function P({stats:e}){let{t}=r(),n=(0,y.useMemo)(()=>Object.entries(e.modelUsage).map(([e,t])=>{let n=t.inputTokens>0?t.cacheReadInputTokens/t.inputTokens*100:0;return{name:e,shortName:t.displayName||C(e),inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadInputTokens:t.cacheReadInputTokens,cacheHitRate:n,total:t.inputTokens+t.outputTokens,costUSD:t.costUSD}}).sort((e,t)=>t.total-e.total),[e.modelUsage]),i=(0,y.useMemo)(()=>n.reduce((e,t)=>e+t.total,0),[n]);return n.length===0?(0,M.jsx)(`div`,{className:`text-center py-12 text-text-tertiary`,children:t(`stats.noData`)}):(0,M.jsxs)(M.Fragment,{children:[e.dailyModelTokens.length>=2&&(0,M.jsxs)(`div`,{className:`mb-6`,children:[(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-3`,children:t(`stats.tokensPerDay`)}),(0,M.jsx)(N,{dailyModelTokens:e.dailyModelTokens,topModels:n.slice(0,3).map(e=>({id:e.name,label:e.shortName}))})]}),(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-3`,children:t(`stats.allModels`)}),(0,M.jsx)(`div`,{className:`space-y-3`,children:n.map(e=>{let n=i>0?e.total/i*100:0;return(0,M.jsxs)(`div`,{className:`bg-bg-secondary rounded-lg p-3 border border-border-primary`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between mb-2`,children:[(0,M.jsx)(`span`,{className:`text-sm font-medium text-text-primary`,children:e.shortName}),(0,M.jsxs)(`span`,{className:`text-xs text-text-tertiary`,children:[n.toFixed(1),`%`]})]}),(0,M.jsx)(`div`,{className:`h-1.5 bg-bg-tertiary rounded-full mb-2`,children:(0,M.jsx)(`div`,{className:`h-full rounded-full bg-accent-brand transition-all duration-500`,style:{width:`${Math.min(n,100)}%`}})}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-4 gap-2 text-xs text-text-secondary`,children:[(0,M.jsxs)(`span`,{children:[t(`stats.input`),`: `,x(e.inputTokens)]}),(0,M.jsxs)(`span`,{children:[t(`stats.output`),`: `,x(e.outputTokens)]}),e.cacheReadInputTokens>0&&(0,M.jsxs)(`span`,{children:[t(`stats.cacheHitRate`),`: `,e.cacheHitRate.toFixed(1),`%`]}),e.costUSD>0&&(0,M.jsxs)(`span`,{children:[t(`stats.cost`),`: $`,e.costUSD.toFixed(2)]})]})]},e.name)})})]})}function F({dailyActivity:e}){let{t}=r(),n=o(e=>e.resolved)===`dark`?E:T,i=(0,y.useMemo)(()=>{let t=new Map;for(let n of e)t.set(n.date,n.messageCount);let n=e.map(e=>e.messageCount).filter(e=>e>0).sort((e,t)=>e-t),r=n.length>0?n[Math.floor(n.length*.25)]:0,i=n.length>0?n[Math.floor(n.length*.5)]:0,a=n.length>0?n[Math.floor(n.length*.75)]:0,o=e=>e===0||n.length===0?0:e>=a?4:e>=i?3:e>=r?2:1,s=new Date;s.setHours(0,0,0,0);let c=new Date(s);c.setDate(s.getDate()-s.getDay());let l=new Date(c);l.setDate(l.getDate()-357);let u=[],d=[],f=-1,p=new Date(l);for(let e=0;e<52;e++)for(let n=0;n<7;n++){if(p>s){p.setDate(p.getDate()+1);continue}let r=`${p.getFullYear()}-${String(p.getMonth()+1).padStart(2,`0`)}-${String(p.getDate()).padStart(2,`0`)}`,i=t.get(r)||0;n===0&&p.getMonth()!==f&&(d.push({text:[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`][p.getMonth()],x:32+e*14}),f=p.getMonth()),u.push({key:r,x:32+e*14,y:20+n*14,level:o(i),date:r,count:i}),p.setDate(p.getDate()+1)}return{cells:u,monthLabels:d,width:770,height:128,CELL_SIZE:12,TOP_PADDING:20,LEFT_PADDING:32,CELL_GAP:2}},[e]);return(0,M.jsx)(`div`,{className:`overflow-x-auto`,children:(0,M.jsxs)(`svg`,{width:i.width,height:i.height+30,viewBox:`0 0 ${i.width} ${i.height+30}`,className:`min-w-[500px]`,children:[i.monthLabels.map((e,t)=>(0,M.jsx)(`text`,{x:e.x,y:i.TOP_PADDING-6,className:`fill-text-tertiary`,fontSize:10,children:e.text},t)),[``,`Mon`,``,`Wed`,``,`Fri`,``].map((e,t)=>e?(0,M.jsx)(`text`,{x:i.LEFT_PADDING-6,y:i.TOP_PADDING+t*(i.CELL_SIZE+i.CELL_GAP)+i.CELL_SIZE-2,className:`fill-text-tertiary`,fontSize:10,textAnchor:`end`,children:e},t):null),i.cells.map(e=>(0,M.jsx)(`rect`,{x:e.x,y:e.y,width:i.CELL_SIZE,height:i.CELL_SIZE,rx:2,fill:n[e.level],children:(0,M.jsxs)(`title`,{children:[e.date,`: `,e.count,` `,t(`stats.heatmap.messages`)]})},e.key)),(()=>{let e=i.height+4,r=i.LEFT_PADDING;return(0,M.jsxs)(`g`,{children:[(0,M.jsx)(`text`,{x:r,y:e+10,className:`fill-text-tertiary`,fontSize:10,children:t(`stats.heatmap.less`)}),n.map((t,n)=>(0,M.jsx)(`rect`,{x:r+30+n*(i.CELL_SIZE+2),y:e,width:i.CELL_SIZE,height:i.CELL_SIZE,rx:2,fill:t},n)),(0,M.jsx)(`text`,{x:r+30+5*(i.CELL_SIZE+2)+4,y:e+10,className:`fill-text-tertiary`,fontSize:10,children:t(`stats.heatmap.more`)})]})})()]})})}function I({sessionStats:e}){let{t}=r(),n=(0,y.useMemo)(()=>Object.values(e.tokenUsageByModel).reduce((e,t)=>e+t.inputTokens+t.outputTokens,0),[e.tokenUsageByModel]);return(0,M.jsxs)(`div`,{className:`flex flex-wrap gap-3 mb-6 p-3 bg-bg-secondary/50 rounded-xl border border-border-primary/50`,children:[(0,M.jsx)(L,{label:t(`stats.session.title`),icon:(0,M.jsx)(_,{size:12})}),(0,M.jsx)(L,{label:t(`stats.session.apiDuration`),value:S(e.apiDuration)}),(0,M.jsx)(L,{label:t(`stats.session.wallTime`),value:S(e.runningTime)}),(0,M.jsx)(L,{label:t(`stats.session.linesAdded`),value:`+${e.fileChangeStats.totalAddedLines}`,valueClass:`text-green-500`}),(0,M.jsx)(L,{label:t(`stats.session.linesDeleted`),value:`-${e.fileChangeStats.totalDeletedLines}`,valueClass:`text-red-500`}),(0,M.jsx)(L,{label:t(`stats.session.tokens`),value:x(n)})]})}function L({label:e,value:t,icon:n,valueClass:r}){return(0,M.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[n,(0,M.jsx)(`span`,{className:`text-text-tertiary`,children:e}),t&&(0,M.jsx)(`span`,{className:`font-medium text-text-primary ${r||``}`,children:t})]})}function R({icon:e,label:t,value:n}){return(0,M.jsxs)(`div`,{className:`bg-bg-secondary rounded-xl p-4 border border-border-primary`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,M.jsx)(`span`,{className:`text-text-tertiary`,children:e}),(0,M.jsx)(`span`,{className:`text-xs font-medium text-text-secondary`,children:t})]}),(0,M.jsx)(`div`,{className:`text-lg font-semibold text-text-primary`,style:{fontVariantNumeric:`tabular-nums`},children:n})]})}function z({stats:e,sessionStats:t}){let{t:n,resolved:i}=r(),a=(0,y.useMemo)(()=>Object.entries(e.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),[e.modelUsage]),o=(0,y.useMemo)(()=>a.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),[a]),u=(0,y.useMemo)(()=>{let e=a.reduce((e,[,t])=>e+t.inputTokens,0),t=a.reduce((e,[,t])=>e+t.cacheReadInputTokens,0);return e>0?t/e*100:0},[a]),f=a[0],p=(0,y.useMemo)(()=>j(e,o,n,i),[e,o,n,i]);return(0,M.jsxs)(M.Fragment,{children:[t&&(0,M.jsx)(I,{sessionStats:t}),e.dailyActivity.length>0&&(0,M.jsx)(`div`,{className:`mb-6`,children:(0,M.jsx)(F,{dailyActivity:e.dailyActivity})}),f&&(0,M.jsxs)(`div`,{className:`grid grid-cols-1 md:grid-cols-3 gap-4 mb-4`,children:[(0,M.jsx)(R,{icon:(0,M.jsx)(l,{size:16}),label:n(`stats.favoriteModel`),value:f[1].displayName||C(f[0])}),(0,M.jsx)(R,{icon:(0,M.jsx)(d,{size:16}),label:n(`stats.totalTokens`),value:x(o)}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.cacheHitRate`),value:`${u.toFixed(1)}%`})]}),(0,M.jsxs)(`div`,{className:`grid grid-cols-2 md:grid-cols-3 gap-4 mb-6`,children:[(0,M.jsx)(R,{icon:(0,M.jsx)(g,{size:16}),label:n(`stats.sessions`),value:x(e.totalSessions)}),(0,M.jsx)(R,{icon:(0,M.jsx)(s,{size:16}),label:n(`stats.longestSession`),value:e.longestSession?S(e.longestSession.duration):n(`stats.na`)}),(0,M.jsx)(R,{icon:(0,M.jsx)(v,{size:16}),label:n(`stats.activeDays`),value:`${e.activeDays}/${e.totalDays}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.currentStreak`),value:`${e.streaks.currentStreak} ${n(`stats.days`)}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(c,{size:16}),label:n(`stats.longestStreak`),value:`${e.streaks.longestStreak} ${n(`stats.days`)}`}),(0,M.jsx)(R,{icon:(0,M.jsx)(m,{size:16}),label:n(`stats.peakHour`),value:e.peakActivityHour===null?n(`stats.na`):`${e.peakActivityHour}:00-${e.peakActivityHour+1}:00`})]}),p&&(0,M.jsx)(`div`,{className:`p-3 bg-bg-secondary/50 rounded-lg border border-border-primary/50 text-sm text-accent-brand`,children:p})]})}function B({toolUsage:e}){let{t}=r(),n=e.slice(0,20),i=n[0]?.count||0;return n.length===0?(0,M.jsx)(`div`,{className:`text-center py-12 text-text-tertiary`,children:t(`stats.noData`)}):(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(`h2`,{className:`text-sm font-medium text-text-primary mb-4`,children:t(`stats.topTools`)}),(0,M.jsx)(`div`,{className:`space-y-2`,children:n.map(e=>(0,M.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,M.jsx)(`span`,{className:`text-xs text-text-secondary w-28 text-right truncate font-mono`,children:e.toolName}),(0,M.jsx)(`div`,{className:`flex-1 h-6 bg-bg-tertiary rounded overflow-hidden`,children:(0,M.jsx)(`div`,{className:`h-full bg-accent-brand/60 rounded transition-all duration-500 flex items-center pl-2`,style:{width:`${Math.max(e.count/i*100,2)}%`},children:e.count/i>.15&&(0,M.jsx)(`span`,{className:`text-[10px] text-text-primary font-mono`,children:x(e.count)})})}),e.count/i<=.15&&(0,M.jsx)(`span`,{className:`text-xs text-text-tertiary w-12 font-mono`,children:x(e.count)})]},e.toolName))})]})}function V(){let{t:e}=r(),{stats:t,statsLoading:n,statsError:i,sessionStats:a,fetchAll:o}=b(),[s,c]=(0,y.useState)(`overview`);if((0,y.useEffect)(()=>{o()},[o]),n&&!t)return(0,M.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,M.jsx)(u,{size:`large`,text:e(`stats.loading`)})});if(i&&!t)return(0,M.jsx)(`div`,{className:`flex-1 flex items-center justify-center`,children:(0,M.jsxs)(`div`,{className:`text-center`,children:[(0,M.jsx)(`div`,{className:`text-text-secondary mb-4`,children:i}),(0,M.jsx)(`button`,{onClick:o,className:`px-4 py-2 bg-accent-brand text-accent-brand-foreground rounded-lg text-sm`,children:e(`stats.refresh`)})]})});let l=[{key:`overview`,label:e(`stats.tab.overview`)},{key:`models`,label:e(`stats.tab.models`)},{key:`tools`,label:e(`stats.tab.tools`)}];return(0,M.jsxs)(`div`,{className:`flex-1 overflow-auto p-4 md:p-6`,children:[(0,M.jsxs)(`div`,{className:`flex items-center justify-between mb-6`,children:[(0,M.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,M.jsx)(h,{size:20,className:`text-accent-brand`}),(0,M.jsx)(`h1`,{className:`text-lg font-semibold text-text-primary`,children:e(`stats.title`)})]}),(0,M.jsxs)(`button`,{onClick:o,className:`flex items-center gap-1.5 px-3 py-1.5 text-sm text-text-secondary
2
2
  hover:text-text-primary hover:bg-bg-hover rounded-lg transition-colors`,title:e(`stats.refresh`),children:[(0,M.jsx)(f,{size:14}),(0,M.jsx)(`span`,{children:e(`stats.refresh`)})]})]}),(0,M.jsx)(`div`,{className:`flex gap-1 mb-6 bg-bg-secondary rounded-lg p-1 w-fit`,children:l.map(e=>(0,M.jsx)(`button`,{onClick:()=>c(e.key),className:`px-4 py-1.5 text-sm rounded-md transition-colors ${s===e.key?`bg-bg-primary text-text-primary font-medium shadow-sm`:`text-text-secondary hover:text-text-primary`}`,children:e.label},e.key))}),t?(0,M.jsxs)(M.Fragment,{children:[s===`overview`&&(0,M.jsx)(z,{stats:t,sessionStats:a}),s===`models`&&(0,M.jsx)(P,{stats:t}),s===`tools`&&(0,M.jsx)(B,{toolUsage:t.toolUsage}),(0,M.jsx)(`div`,{className:`mt-8 text-xs text-text-tertiary text-center`,children:e(`stats.timeRange`).replace(`{days}`,String(t.totalDays))})]}):(0,M.jsx)(`div`,{className:`text-center py-12 text-text-tertiary`,children:e(`stats.noData`)})]})}export{V as StatsView};
@@ -1,4 +1,4 @@
1
- import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{i as t,st as n,t as r,tt as i}from"./use-i18n-BCKBlfpd.js";import{l as a,u as o}from"./markdown-DCKhnxE9.js";import{i as s}from"./terminal-store-DxSL6lew.js";import{t as c}from"./loader-circle-1kyJNWeb.js";import{t as l}from"./power-CbA3xFVD.js";import{t as u}from"./timer-CPkvO7Hr.js";import{t as d}from"./zap-JdzyzkaE.js";import{$t as f,Cn as p,D as m,Et as h,Ht as g,Pt as _,S as v,_n as y,cn as ee,dn as b,gn as x,gt as S,it as te,jt as C,kt as w,mn as T,qt as E,sn as D,tt as O,un as k,vt as A}from"./index-ClsikMuk.js";var ne=t(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),j=t(`newspaper`,[[`path`,{d:`M15 18h-5`,key:`95g1m2`}],[`path`,{d:`M18 14h-8`,key:`sponae`}],[`path`,{d:`M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2`,key:`39pd36`}],[`rect`,{width:`8`,height:`4`,x:`10`,y:`6`,rx:`1`,key:`aywv1n`}]]),M=t(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),N=t(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),P=t(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),F=e(o(),1);function I(){return te.getState().sessionId??void 0}var L=n((e,t)=>({tasks:[],loading:!1,error:null,fetchTasks:async()=>{let t=I();if(t){e({loading:!0,error:null});try{let n=new URLSearchParams({sessionId:t}),r=await fetch(`/api/v1/scheduled-tasks?${n}`,{headers:i()});if(!r.ok)throw Error(`HTTP ${r.status}`);let a=await r.json();e({tasks:(a.data??a).tasks||[],loading:!1})}catch(t){console.error(`[ScheduledTasks] Fetch error:`,t),e({error:t.message,loading:!1})}}},createTask:async(n,r,a=!0,o=!1)=>{let s=I();if(s)try{let e=await fetch(`/api/v1/scheduled-tasks`,{method:`POST`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({cron:n,prompt:r,recurring:a,durable:o,sessionId:s})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error?.message||`HTTP ${e.status}`)}await t().fetchTasks()}catch(t){throw console.error(`[ScheduledTasks] Create error:`,t),e({error:t.message}),t}},updateTask:async(t,n)=>{let r=I();if(r)try{let a=await fetch(`/api/v1/scheduled-tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({...n,sessionId:r})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${a.status}`)}let o=await a.json(),s=o.data??o;e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,...s}:e),error:null}))}catch(t){throw console.error(`[ScheduledTasks] Update error:`,t),e({error:t.message}),t}},fetchTaskExecutionsPage:async(e,t={})=>{let n=I();if(!n)return{executions:[],hasMore:!1};let r=new URLSearchParams({sessionId:n});t.status&&r.set(`status`,t.status),t.from!==void 0&&r.set(`from`,String(t.from)),t.query&&r.set(`query`,t.query),t.cursor&&r.set(`cursor`,t.cursor),r.set(`limit`,String(t.limit??20));let a=await fetch(`/api/v1/scheduled-tasks/${encodeURIComponent(e)}/executions?${r}`,{headers:i()});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${a.status}`)}let o=await a.json(),s=o.data??o;return{executions:s.executions||[],nextCursor:s.nextCursor,hasMore:!!s.hasMore}},deleteTaskExecutions:async(e,t)=>{let n=I();if(!n||t.length===0)return;let r=await fetch(`/api/v1/scheduled-tasks/${encodeURIComponent(e)}/executions/delete`,{method:`POST`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({sessionId:n,executionIds:t})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${r.status}`)}},deleteTask:async n=>{let r=I();if(r)try{let e=new URLSearchParams({sessionId:r}),a=await fetch(`/api/v1/scheduled-tasks/${n}?${e}`,{method:`DELETE`,headers:i()});if(!a.ok&&a.status!==204)throw Error(`HTTP ${a.status}`);await t().fetchTasks()}catch(t){throw console.error(`[ScheduledTasks] Delete error:`,t),e({error:t.message}),t}}})),R=a(),z=[{label:`5m`,cron:`*/5 * * * *`},{label:`10m`,cron:`*/10 * * * *`},{label:`15m`,cron:`*/15 * * * *`},{label:`30m`,cron:`*/30 * * * *`},{label:`1h`,cron:`7 * * * *`},{label:`2h`,cron:`7 */2 * * *`},{label:`6h`,cron:`7 */6 * * *`},{label:`1d`,cron:`3 9 * * *`},{label:`1w`,cron:`3 9 * * 1`}];function B({onSubmit:e,onCancel:t,initialValues:n}){let{t:i}=r(),a=!!n,[o,s]=(0,F.useState)(n?.cron??`*/5 * * * *`),[c,l]=(0,F.useState)(n?.prompt??``),[u,d]=(0,F.useState)(n?.recurring??!0),[f,p]=(0,F.useState)(n?.durable??!1),[m,h]=(0,F.useState)(!1),[g,_]=(0,F.useState)(null);return(0,R.jsxs)(`div`,{className:`border border-accent-brand/30 rounded-xl p-4 bg-bg-secondary/30`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,R.jsx)(`h3`,{className:`text-sm font-medium text-text-primary`,children:i(a?`scheduled.edit`:`scheduled.create`)}),(0,R.jsx)(`button`,{onClick:t,className:`p-1 rounded hover:bg-bg-secondary text-text-tertiary`,children:(0,R.jsx)(S,{size:14})})]}),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsx)(`label`,{className:`text-xs text-text-secondary mb-1 block`,children:i(`scheduled.cron`)}),(0,R.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`*/5 * * * *`,className:`w-full px-3 py-1.5 text-sm rounded-lg border border-border-default bg-bg-primary text-text-primary focus:border-accent-brand/50 outline-none font-mono`}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-1.5 mt-1.5`,children:z.map(e=>(0,R.jsx)(`button`,{onClick:()=>s(e.cron),className:`text-[10px] px-2 py-0.5 rounded-full border transition-colors ${o===e.cron?`border-accent-brand/50 text-accent-brand bg-accent-brand/5`:`border-border-default text-text-tertiary hover:text-text-secondary hover:border-border-default/80`}`,children:e.label},e.label))})]}),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsx)(`label`,{className:`text-xs text-text-secondary mb-1 block`,children:i(`scheduled.prompt`)}),(0,R.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),placeholder:i(`scheduled.promptPlaceholder`),rows:2,className:`w-full px-3 py-1.5 text-sm rounded-lg border border-border-default bg-bg-primary text-text-primary focus:border-accent-brand/50 outline-none resize-none`})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-4 mb-3`,children:[(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-text-secondary cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:u,onChange:e=>d(e.target.checked),className:`rounded`}),i(`scheduled.recurring`)]}),(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-text-secondary cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:f,onChange:e=>p(e.target.checked),className:`rounded`}),i(`scheduled.durable`)]})]}),g&&(0,R.jsx)(`div`,{className:`text-xs text-accent-red mb-2`,children:g}),(0,R.jsxs)(`button`,{onClick:async()=>{if(o.trim()&&c.trim()){h(!0),_(null);try{await e(o.trim(),c.trim(),u,f),t()}catch(e){_(e.message||`Failed to create task`)}finally{h(!1)}}},disabled:m||!o.trim()||!c.trim(),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-accent-brand text-accent-brand-foreground text-sm font-medium hover:bg-accent-brand/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors`,children:[a?(0,R.jsx)(P,{size:14}):(0,R.jsx)(C,{size:14}),i(m?a?`scheduled.saving`:`scheduled.creating`:a?`scheduled.save`:`scheduled.create`)]})]})}var V={status:`all`,range:`all`,query:``},re={active:!1,selectedIds:[]};function H(e){return e.status===`succeeded`||e.status===`failed`}function ie(e){return e.active?re:{active:!0,selectedIds:[]}}function ae(e,t){return!e.active||!H(t)?e:e.selectedIds.includes(t.id)?{...e,selectedIds:e.selectedIds.filter(e=>e!==t.id)}:{...e,selectedIds:[...e.selectedIds,t.id]}}function oe(e,t){if(!e.active)return e;let n=t.filter(H).map(e=>e.id),r=n.length>0&&n.every(t=>e.selectedIds.includes(t));return{...e,selectedIds:r?[]:n}}function se(e,t){if(t.length===0||e.selectedIds.length===0)return e;let n=new Set(t);return{...e,selectedIds:e.selectedIds.filter(e=>!n.has(e))}}function U(e){try{return decodeURIComponent(e)}catch{return}}function W(e){let[t,n=``]=e.replace(/^#?\/?/,``).split(`?`),r=t.split(`/`);if(r.length<3||r[0]!==`tasks`||r[2]!==`executions`)return;let i=U(r[1]),a=r[3]?U(r[3]):void 0;if(!i||r[3]&&!a)return;let o=new URLSearchParams(n),s=o.get(`status`),c=o.get(`range`);return{taskId:i,...a?{executionId:a}:{},filters:{status:s===`queued`||s===`running`||s===`succeeded`||s===`failed`?s:`all`,range:c===`day`||c===`week`||c===`month`?c:`all`,query:o.get(`q`)??``}}}function G(e,t=V,n){let r=new URLSearchParams;t.status!==`all`&&r.set(`status`,t.status),t.range!==`all`&&r.set(`range`,t.range),t.query&&r.set(`q`,t.query);let i=r.toString(),a=n?`/`+encodeURIComponent(n):``;return`#/tasks/`+encodeURIComponent(e)+`/executions`+a+(i?`?`+i:``)}function ce(e,t){let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>t.startedAt-e.startedAt||t.id.localeCompare(e.id))}function le(e,t,n=Date.now()){if(t.status!==`all`&&e.status!==t.status)return!1;let r=ue(t.range,n);if(r!==void 0&&e.startedAt<r)return!1;let i=t.query.toLocaleLowerCase();return!i||[e.id,e.prompt,e.error,e.schedule].some(e=>e?.toLocaleLowerCase().includes(i))}function ue(e,t=Date.now()){let n=e===`day`?864e5:e===`week`?6048e5:e===`month`?2592e6:void 0;return n===void 0?void 0:t-n}function de({task:e,onDelete:t,onUpdate:n}){let{t:i}=r(),[a,o]=(0,F.useState)(!1),[s,c]=(0,F.useState)(!1),[d,f]=(0,F.useState)(!1),[p,m]=(0,F.useState)(null),h=async()=>{o(!0),m(null);try{await t(e.id)}catch(e){m(e instanceof Error?e.message:String(e))}finally{o(!1)}},g=e.durable||e.permanent,v=e.enabled!==!1;return d?(0,R.jsx)(B,{initialValues:{cron:e.cron,prompt:e.prompt,recurring:!!e.recurring,durable:!!g},onSubmit:async(t,r,i,a)=>{await n(e.id,{cron:t,prompt:r,recurring:i,durable:a}),f(!1)},onCancel:()=>f(!1)}):(0,R.jsxs)(`div`,{className:`group flex items-start gap-3 px-4 py-3 rounded-xl border border-border-default transition-colors hover:border-accent-brand/30 ${v?``:`opacity-60`}`,children:[(0,R.jsx)(`div`,{className:`flex-shrink-0 mt-0.5`,children:e.recurring?(0,R.jsx)(N,{size:18,className:`text-accent-blue`}):(0,R.jsx)(u,{size:18,className:`text-accent-yellow`})}),(0,R.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,R.jsx)(`span`,{className:`text-sm font-medium text-text-primary`,children:e.humanSchedule}),(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full ${e.recurring?`bg-accent-blue/10 text-accent-blue`:`bg-accent-yellow/10 text-accent-yellow`}`,children:e.recurring?i(`scheduled.recurring`):i(`scheduled.oneShot`)}),(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full ${v?`bg-accent-green/10 text-accent-green`:`bg-bg-secondary text-text-tertiary`}`,children:i(v?`scheduled.enabled`:`scheduled.disabled`)}),g&&(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full bg-accent-green/10 text-accent-green`,children:i(`scheduled.durable`)})]}),(0,R.jsx)(`p`,{className:`text-xs text-text-secondary truncate`,title:e.prompt,children:e.prompt}),p&&(0,R.jsx)(`p`,{className:`mt-1 text-xs text-accent-red`,children:p}),(0,R.jsxs)(`div`,{className:`flex items-center gap-3 mt-1.5 text-[10px] text-text-tertiary`,children:[(0,R.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(D,{size:10}),`ID: `,e.id]}),e.lastFiredAt&&(0,R.jsxs)(`span`,{children:[i(`scheduled.lastFired`),`: `,new Date(e.lastFiredAt).toLocaleString()]}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{window.location.hash=G(e.id,V)},className:`flex items-center gap-1 text-accent-blue hover:text-accent-brand transition-colors`,children:[i(`scheduled.executions`),(0,R.jsx)(T,{size:11})]})]})]}),(0,R.jsxs)(`div`,{className:`flex-shrink-0 flex items-center gap-1`,children:[(0,R.jsxs)(`button`,{onClick:async()=>{c(!0),m(null);try{await n(e.id,{enabled:!v})}catch(e){m(e instanceof Error?e.message:String(e))}finally{c(!1)}},disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded-lg text-[11px] transition-colors disabled:opacity-50 ${v?`text-accent-green hover:bg-accent-green/10`:`text-text-tertiary hover:bg-bg-secondary`}`,title:i(v?`scheduled.disable`:`scheduled.enable`),children:[(0,R.jsx)(l,{size:13}),i(v?`scheduled.disable`:`scheduled.enable`)]}),(0,R.jsx)(`button`,{onClick:()=>f(!0),className:`p-1.5 rounded-lg text-text-tertiary hover:text-accent-brand hover:bg-accent-brand/10 transition-colors`,title:i(`scheduled.edit`),children:(0,R.jsx)(_,{size:14})}),(0,R.jsx)(`button`,{onClick:h,disabled:a,className:`p-1.5 rounded-lg text-text-tertiary hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-50`,title:i(`scheduled.delete`),children:(0,R.jsx)(A,{size:14})})]})]})}var fe=20;function pe({execution:e}){let{t}=r();return e.status===`succeeded`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-green`,children:[(0,R.jsx)(b,{size:14}),t(`scheduled.execution.succeeded`)]}):e.status===`failed`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-red`,children:[(0,R.jsx)(k,{size:14}),t(`scheduled.execution.failed`)]}):e.status===`queued`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-yellow`,children:[(0,R.jsx)(ee,{size:14}),t(`scheduled.execution.queued`)]}):(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-blue`,children:[(0,R.jsx)(c,{size:14,className:`animate-spin`}),t(`scheduled.execution.running`)]})}function me({route:e,onOpenExecution:t}){let{t:n}=r(),i=te(e=>e.sessionId),a=L(e=>e.tasks),o=L(e=>e.fetchTasks),s=L(e=>e.fetchTaskExecutionsPage),l=L(e=>e.deleteTaskExecutions),u=a.find(t=>t.id===e.taskId),[d,f]=(0,F.useState)(e.filters),[m,_]=(0,F.useState)(e.filters.query),[y,b]=(0,F.useState)([]),[C,E]=(0,F.useState)(),[D,k]=(0,F.useState)(!1),[ne,j]=(0,F.useState)(null),[M,N]=(0,F.useState)(0),[P,I]=(0,F.useState)(),[z,B]=(0,F.useState)(!1),[V,U]=(0,F.useState)(!0),[W,de]=(0,F.useState)(!1),[me,he]=(0,F.useState)(null),[K,ge]=(0,F.useState)(!1),[q,J]=(0,F.useState)(re),[Y,X]=(0,F.useState)(null),[Z,_e]=(0,F.useState)(!1),[ve,Q]=(0,F.useState)(null),[ye,be]=(0,F.useState)(null),xe=(0,F.useRef)(null),Se=(0,F.useRef)(null),Ce=(0,F.useRef)(null),we=(0,F.useRef)(null),Te=(0,F.useRef)(null),Ee=(0,F.useRef)(0),De=(0,F.useRef)(d);De.current=d,(0,F.useEffect)(()=>{f(e.filters),_(e.filters.query),J(re),E(void 0),X(null),Q(null)},[e.filters.query,e.filters.range,e.filters.status,e.taskId,i]),(0,F.useEffect)(()=>{u||o()},[o,u]);let $=(0,F.useCallback)(async(t,n=!1)=>{let r=++Ee.current;n?de(!0):U(!0),he(null);try{let i=ue(d.range),a=await s(e.taskId,{...d.status===`all`?{}:{status:d.status},...i===void 0?{}:{from:i},...d.query?{query:d.query}:{},...t?{cursor:t}:{},limit:fe});if(r!==Ee.current)return;b(e=>n?ce(e,a.executions):a.executions),I(a.nextCursor),B(a.hasMore)}catch(e){r===Ee.current&&he(e instanceof Error?e.message:String(e))}finally{r===Ee.current&&(U(!1),de(!1))}},[s,d.query,d.range,d.status,e.taskId]);(0,F.useEffect)(()=>{b([]),I(void 0),B(!1),J(re),X(null),Q(null),$()},[$,i]);let Oe=(0,F.useCallback)(t=>{f(t),window.history.replaceState(null,``,G(e.taskId,t,e.executionId))},[e.executionId,e.taskId]);(0,F.useEffect)(()=>{let e=m.trim();if(e===d.query)return;let t=window.setTimeout(()=>{Oe({...d,query:e})},300);return()=>window.clearTimeout(t)},[Oe,d,m]),(0,F.useEffect)(()=>{if(!e.executionId){E(void 0),k(!1),j(null);return}let t=y.find(t=>t.id===e.executionId);if(t){E(t),k(!1),j(null);return}if(C?.id===e.executionId)return;let n=!1;return k(!0),j(null),s(e.taskId,{query:e.executionId,limit:100}).then(t=>{n||E(t.executions.find(t=>t.id===e.executionId))}).catch(e=>{n||j(e instanceof Error?e.message:String(e))}).finally(()=>{n||k(!1)}),()=>{n=!0}},[M,y,s,e.executionId,e.taskId,C?.id]),(0,F.useEffect)(()=>{let e=Ce.current;if(!e||!z||W||!P)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&$(P,!0)},{root:Se.current,rootMargin:`160px 0px`,threshold:0});return t.observe(e),()=>t.disconnect()},[z,W,P,$]);let ke=(0,F.useMemo)(()=>{let e=new Set(y.filter(e=>e.status===`queued`||e.status===`running`).map(e=>e.id));return(C?.status===`queued`||C?.status===`running`)&&e.add(C.id),[...e]},[y,C]);(0,F.useEffect)(()=>{if(ke.length===0)return;let t=!1,n,r=async()=>{try{let i=await s(e.taskId,{limit:100});if(t)return;let a=new Map(i.executions.filter(e=>ke.includes(e.id)).map(e=>[e.id,e]));b(e=>e.map(e=>a.get(e.id)??e).filter(e=>le(e,d))),E(e=>e&&(a.get(e.id)??e)),[...a.values()].some(e=>e.status===`queued`||e.status===`running`)&&(n=setTimeout(r,2e3))}catch{t||(n=setTimeout(r,2e3))}};return n=setTimeout(r,2e3),()=>{t=!0,n&&clearTimeout(n)}},[ke,s,d,e.taskId]),(0,F.useEffect)(()=>{let e=window.matchMedia(`(max-width: 639px)`),t=()=>ge(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,F.useEffect)(()=>{if(!e.executionId){xe.current?.removeAttribute(`inert`),Te.current?.focus(),Te.current=null;return}K&&xe.current?.setAttribute(`inert`,``),we.current?.focus();let t=t=>{t.key===`Escape`&&(window.location.hash=G(e.taskId,De.current))};return document.addEventListener(`keydown`,t),()=>{xe.current?.removeAttribute(`inert`),document.removeEventListener(`keydown`,t)}},[K,e.executionId,e.taskId]);let Ae=(t,n)=>{n&&(Te.current=n),window.location.hash=G(e.taskId,d,t.id)},je=()=>{window.location.hash=G(e.taskId,d)},Me=y.filter(H),Ne=C?.status===`queued`||C?.status===`running`,Pe=!!(C?.sessionId&&(Ne||C.runId)),Fe=Me.length>0&&Me.every(e=>q.selectedIds.includes(e.id)),Ie=e=>{e.length!==0&&(Q(null),X(e))},Le=async e=>{if(e.sessionId&&!ye){be(e.id);try{await t(e)===!1&&be(null)}catch(e){O.error(`${n(`scheduled.execution.openFailed`)}: ${e instanceof Error?e.message:String(e)}`),be(null)}}};return(0,R.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 bg-bg-primary`,children:[(0,R.jsxs)(`div`,{ref:xe,className:`flex min-w-0 flex-1 flex-col`,children:[(0,R.jsxs)(`header`,{className:`border-b border-border-default px-4 py-3 sm:px-6`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:()=>{window.location.hash=`#/tasks`},className:`rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary`,"aria-label":n(`scheduled.executionsBack`),children:(0,R.jsx)(p,{size:18})}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsx)(`h1`,{className:`truncate text-lg font-semibold text-text-primary`,children:n(`scheduled.executionsTitle`)}),(0,R.jsx)(`p`,{className:`truncate text-xs text-text-tertiary`,children:u?u.humanSchedule+` · `+u.prompt:e.taskId})]}),(0,R.jsxs)(`div`,{className:`ml-auto flex flex-wrap items-center justify-end gap-2`,children:[q.active?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`span`,{className:`hidden text-xs text-text-tertiary sm:inline`,children:n(`scheduled.executionsSelected`,{count:q.selectedIds.length})}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>J(e=>oe(e,y)),disabled:Me.length===0||Z,className:`rounded-lg px-2.5 py-1.5 text-xs text-text-secondary hover:bg-bg-secondary disabled:opacity-50`,children:n(Fe?`scheduled.executionsClearSelection`:`scheduled.executionsSelectAll`)}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>Ie([...q.selectedIds]),disabled:q.selectedIds.length===0||Z,className:`rounded-lg bg-accent-red px-2.5 py-1.5 text-xs font-medium text-white hover:opacity-90 disabled:opacity-40`,children:n(`scheduled.executionsDeleteSelected`)}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>J(e=>ie(e)),disabled:Z,className:`rounded-lg px-2.5 py-1.5 text-xs text-text-secondary hover:bg-bg-secondary disabled:opacity-50`,children:n(`app.cancel`)})]}):(0,R.jsxs)(`button`,{type:`button`,onClick:()=>J(e=>ie(e)),disabled:Me.length===0,className:`flex items-center gap-1.5 rounded-lg border border-border-default px-2.5 py-1.5
1
+ import{i as e}from"./rolldown-runtime-Dd_uD5pT.js";import{i as t,st as n,t as r,tt as i}from"./use-i18n-BvJYl_9l.js";import{l as a,u as o}from"./markdown-DCKhnxE9.js";import{i as s}from"./terminal-store-DOTQJFag.js";import{t as c}from"./loader-circle-wVK1RLLa.js";import{t as l}from"./power-BNRlQx4o.js";import{t as u}from"./timer-DsflRbuo.js";import{t as d}from"./zap-u2SXZ7au.js";import{$t as f,Cn as p,D as m,Et as h,Ht as g,Pt as _,S as v,_n as y,cn as ee,dn as b,gn as x,gt as S,it as te,jt as C,kt as w,mn as T,qt as E,sn as D,tt as O,un as k,vt as A}from"./index-BtMp20L0.js";var ne=t(`inbox`,[[`polyline`,{points:`22 12 16 12 14 15 10 15 8 12 2 12`,key:`o97t9d`}],[`path`,{d:`M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z`,key:`oot6mr`}]]),j=t(`newspaper`,[[`path`,{d:`M15 18h-5`,key:`95g1m2`}],[`path`,{d:`M18 14h-8`,key:`sponae`}],[`path`,{d:`M4 22h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H8a2 2 0 0 0-2 2v16a2 2 0 0 1-4 0v-9a2 2 0 0 1 2-2h2`,key:`39pd36`}],[`rect`,{width:`8`,height:`4`,x:`10`,y:`6`,rx:`1`,key:`aywv1n`}]]),M=t(`package`,[[`path`,{d:`M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z`,key:`1a0edw`}],[`path`,{d:`M12 22V12`,key:`d0xqtd`}],[`polyline`,{points:`3.29 7 12 12 20.71 7`,key:`ousv84`}],[`path`,{d:`m7.5 4.27 9 5.15`,key:`1c824w`}]]),N=t(`repeat`,[[`path`,{d:`m17 2 4 4-4 4`,key:`nntrym`}],[`path`,{d:`M3 11v-1a4 4 0 0 1 4-4h14`,key:`84bu3i`}],[`path`,{d:`m7 22-4-4 4-4`,key:`1wqhfi`}],[`path`,{d:`M21 13v1a4 4 0 0 1-4 4H3`,key:`1rx37r`}]]),P=t(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),F=e(o(),1);function I(){return te.getState().sessionId??void 0}var L=n((e,t)=>({tasks:[],loading:!1,error:null,fetchTasks:async()=>{let t=I();if(t){e({loading:!0,error:null});try{let n=new URLSearchParams({sessionId:t}),r=await fetch(`/api/v1/scheduled-tasks?${n}`,{headers:i()});if(!r.ok)throw Error(`HTTP ${r.status}`);let a=await r.json();e({tasks:(a.data??a).tasks||[],loading:!1})}catch(t){console.error(`[ScheduledTasks] Fetch error:`,t),e({error:t.message,loading:!1})}}},createTask:async(n,r,a=!0,o=!1)=>{let s=I();if(s)try{let e=await fetch(`/api/v1/scheduled-tasks`,{method:`POST`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({cron:n,prompt:r,recurring:a,durable:o,sessionId:s})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error?.message||`HTTP ${e.status}`)}await t().fetchTasks()}catch(t){throw console.error(`[ScheduledTasks] Create error:`,t),e({error:t.message}),t}},updateTask:async(t,n)=>{let r=I();if(r)try{let a=await fetch(`/api/v1/scheduled-tasks/${t}`,{method:`PATCH`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({...n,sessionId:r})});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${a.status}`)}let o=await a.json(),s=o.data??o;e(e=>({tasks:e.tasks.map(e=>e.id===t?{...e,...s}:e),error:null}))}catch(t){throw console.error(`[ScheduledTasks] Update error:`,t),e({error:t.message}),t}},fetchTaskExecutionsPage:async(e,t={})=>{let n=I();if(!n)return{executions:[],hasMore:!1};let r=new URLSearchParams({sessionId:n});t.status&&r.set(`status`,t.status),t.from!==void 0&&r.set(`from`,String(t.from)),t.query&&r.set(`query`,t.query),t.cursor&&r.set(`cursor`,t.cursor),r.set(`limit`,String(t.limit??20));let a=await fetch(`/api/v1/scheduled-tasks/${encodeURIComponent(e)}/executions?${r}`,{headers:i()});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${a.status}`)}let o=await a.json(),s=o.data??o;return{executions:s.executions||[],nextCursor:s.nextCursor,hasMore:!!s.hasMore}},deleteTaskExecutions:async(e,t)=>{let n=I();if(!n||t.length===0)return;let r=await fetch(`/api/v1/scheduled-tasks/${encodeURIComponent(e)}/executions/delete`,{method:`POST`,headers:{"Content-Type":`application/json`,...i()},body:JSON.stringify({sessionId:n,executionIds:t})});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error?.message||`HTTP ${r.status}`)}},deleteTask:async n=>{let r=I();if(r)try{let e=new URLSearchParams({sessionId:r}),a=await fetch(`/api/v1/scheduled-tasks/${n}?${e}`,{method:`DELETE`,headers:i()});if(!a.ok&&a.status!==204)throw Error(`HTTP ${a.status}`);await t().fetchTasks()}catch(t){throw console.error(`[ScheduledTasks] Delete error:`,t),e({error:t.message}),t}}})),R=a(),z=[{label:`5m`,cron:`*/5 * * * *`},{label:`10m`,cron:`*/10 * * * *`},{label:`15m`,cron:`*/15 * * * *`},{label:`30m`,cron:`*/30 * * * *`},{label:`1h`,cron:`7 * * * *`},{label:`2h`,cron:`7 */2 * * *`},{label:`6h`,cron:`7 */6 * * *`},{label:`1d`,cron:`3 9 * * *`},{label:`1w`,cron:`3 9 * * 1`}];function B({onSubmit:e,onCancel:t,initialValues:n}){let{t:i}=r(),a=!!n,[o,s]=(0,F.useState)(n?.cron??`*/5 * * * *`),[c,l]=(0,F.useState)(n?.prompt??``),[u,d]=(0,F.useState)(n?.recurring??!0),[f,p]=(0,F.useState)(n?.durable??!1),[m,h]=(0,F.useState)(!1),[g,_]=(0,F.useState)(null);return(0,R.jsxs)(`div`,{className:`border border-accent-brand/30 rounded-xl p-4 bg-bg-secondary/30`,children:[(0,R.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,R.jsx)(`h3`,{className:`text-sm font-medium text-text-primary`,children:i(a?`scheduled.edit`:`scheduled.create`)}),(0,R.jsx)(`button`,{onClick:t,className:`p-1 rounded hover:bg-bg-secondary text-text-tertiary`,children:(0,R.jsx)(S,{size:14})})]}),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsx)(`label`,{className:`text-xs text-text-secondary mb-1 block`,children:i(`scheduled.cron`)}),(0,R.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`*/5 * * * *`,className:`w-full px-3 py-1.5 text-sm rounded-lg border border-border-default bg-bg-primary text-text-primary focus:border-accent-brand/50 outline-none font-mono`}),(0,R.jsx)(`div`,{className:`flex flex-wrap gap-1.5 mt-1.5`,children:z.map(e=>(0,R.jsx)(`button`,{onClick:()=>s(e.cron),className:`text-[10px] px-2 py-0.5 rounded-full border transition-colors ${o===e.cron?`border-accent-brand/50 text-accent-brand bg-accent-brand/5`:`border-border-default text-text-tertiary hover:text-text-secondary hover:border-border-default/80`}`,children:e.label},e.label))})]}),(0,R.jsxs)(`div`,{className:`mb-3`,children:[(0,R.jsx)(`label`,{className:`text-xs text-text-secondary mb-1 block`,children:i(`scheduled.prompt`)}),(0,R.jsx)(`textarea`,{value:c,onChange:e=>l(e.target.value),placeholder:i(`scheduled.promptPlaceholder`),rows:2,className:`w-full px-3 py-1.5 text-sm rounded-lg border border-border-default bg-bg-primary text-text-primary focus:border-accent-brand/50 outline-none resize-none`})]}),(0,R.jsxs)(`div`,{className:`flex items-center gap-4 mb-3`,children:[(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-text-secondary cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:u,onChange:e=>d(e.target.checked),className:`rounded`}),i(`scheduled.recurring`)]}),(0,R.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-text-secondary cursor-pointer`,children:[(0,R.jsx)(`input`,{type:`checkbox`,checked:f,onChange:e=>p(e.target.checked),className:`rounded`}),i(`scheduled.durable`)]})]}),g&&(0,R.jsx)(`div`,{className:`text-xs text-accent-red mb-2`,children:g}),(0,R.jsxs)(`button`,{onClick:async()=>{if(o.trim()&&c.trim()){h(!0),_(null);try{await e(o.trim(),c.trim(),u,f),t()}catch(e){_(e.message||`Failed to create task`)}finally{h(!1)}}},disabled:m||!o.trim()||!c.trim(),className:`flex items-center gap-1.5 px-3 py-1.5 rounded-lg bg-accent-brand text-accent-brand-foreground text-sm font-medium hover:bg-accent-brand/90 disabled:opacity-50 disabled:cursor-not-allowed transition-colors`,children:[a?(0,R.jsx)(P,{size:14}):(0,R.jsx)(C,{size:14}),i(m?a?`scheduled.saving`:`scheduled.creating`:a?`scheduled.save`:`scheduled.create`)]})]})}var V={status:`all`,range:`all`,query:``},re={active:!1,selectedIds:[]};function H(e){return e.status===`succeeded`||e.status===`failed`}function ie(e){return e.active?re:{active:!0,selectedIds:[]}}function ae(e,t){return!e.active||!H(t)?e:e.selectedIds.includes(t.id)?{...e,selectedIds:e.selectedIds.filter(e=>e!==t.id)}:{...e,selectedIds:[...e.selectedIds,t.id]}}function oe(e,t){if(!e.active)return e;let n=t.filter(H).map(e=>e.id),r=n.length>0&&n.every(t=>e.selectedIds.includes(t));return{...e,selectedIds:r?[]:n}}function se(e,t){if(t.length===0||e.selectedIds.length===0)return e;let n=new Set(t);return{...e,selectedIds:e.selectedIds.filter(e=>!n.has(e))}}function U(e){try{return decodeURIComponent(e)}catch{return}}function W(e){let[t,n=``]=e.replace(/^#?\/?/,``).split(`?`),r=t.split(`/`);if(r.length<3||r[0]!==`tasks`||r[2]!==`executions`)return;let i=U(r[1]),a=r[3]?U(r[3]):void 0;if(!i||r[3]&&!a)return;let o=new URLSearchParams(n),s=o.get(`status`),c=o.get(`range`);return{taskId:i,...a?{executionId:a}:{},filters:{status:s===`queued`||s===`running`||s===`succeeded`||s===`failed`?s:`all`,range:c===`day`||c===`week`||c===`month`?c:`all`,query:o.get(`q`)??``}}}function G(e,t=V,n){let r=new URLSearchParams;t.status!==`all`&&r.set(`status`,t.status),t.range!==`all`&&r.set(`range`,t.range),t.query&&r.set(`q`,t.query);let i=r.toString(),a=n?`/`+encodeURIComponent(n):``;return`#/tasks/`+encodeURIComponent(e)+`/executions`+a+(i?`?`+i:``)}function ce(e,t){let n=new Map(e.map(e=>[e.id,e]));for(let e of t)n.set(e.id,e);return[...n.values()].sort((e,t)=>t.startedAt-e.startedAt||t.id.localeCompare(e.id))}function le(e,t,n=Date.now()){if(t.status!==`all`&&e.status!==t.status)return!1;let r=ue(t.range,n);if(r!==void 0&&e.startedAt<r)return!1;let i=t.query.toLocaleLowerCase();return!i||[e.id,e.prompt,e.error,e.schedule].some(e=>e?.toLocaleLowerCase().includes(i))}function ue(e,t=Date.now()){let n=e===`day`?864e5:e===`week`?6048e5:e===`month`?2592e6:void 0;return n===void 0?void 0:t-n}function de({task:e,onDelete:t,onUpdate:n}){let{t:i}=r(),[a,o]=(0,F.useState)(!1),[s,c]=(0,F.useState)(!1),[d,f]=(0,F.useState)(!1),[p,m]=(0,F.useState)(null),h=async()=>{o(!0),m(null);try{await t(e.id)}catch(e){m(e instanceof Error?e.message:String(e))}finally{o(!1)}},g=e.durable||e.permanent,v=e.enabled!==!1;return d?(0,R.jsx)(B,{initialValues:{cron:e.cron,prompt:e.prompt,recurring:!!e.recurring,durable:!!g},onSubmit:async(t,r,i,a)=>{await n(e.id,{cron:t,prompt:r,recurring:i,durable:a}),f(!1)},onCancel:()=>f(!1)}):(0,R.jsxs)(`div`,{className:`group flex items-start gap-3 px-4 py-3 rounded-xl border border-border-default transition-colors hover:border-accent-brand/30 ${v?``:`opacity-60`}`,children:[(0,R.jsx)(`div`,{className:`flex-shrink-0 mt-0.5`,children:e.recurring?(0,R.jsx)(N,{size:18,className:`text-accent-blue`}):(0,R.jsx)(u,{size:18,className:`text-accent-yellow`})}),(0,R.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,R.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,R.jsx)(`span`,{className:`text-sm font-medium text-text-primary`,children:e.humanSchedule}),(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full ${e.recurring?`bg-accent-blue/10 text-accent-blue`:`bg-accent-yellow/10 text-accent-yellow`}`,children:e.recurring?i(`scheduled.recurring`):i(`scheduled.oneShot`)}),(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full ${v?`bg-accent-green/10 text-accent-green`:`bg-bg-secondary text-text-tertiary`}`,children:i(v?`scheduled.enabled`:`scheduled.disabled`)}),g&&(0,R.jsx)(`span`,{className:`text-[10px] px-1.5 py-0.5 rounded-full bg-accent-green/10 text-accent-green`,children:i(`scheduled.durable`)})]}),(0,R.jsx)(`p`,{className:`text-xs text-text-secondary truncate`,title:e.prompt,children:e.prompt}),p&&(0,R.jsx)(`p`,{className:`mt-1 text-xs text-accent-red`,children:p}),(0,R.jsxs)(`div`,{className:`flex items-center gap-3 mt-1.5 text-[10px] text-text-tertiary`,children:[(0,R.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,R.jsx)(D,{size:10}),`ID: `,e.id]}),e.lastFiredAt&&(0,R.jsxs)(`span`,{children:[i(`scheduled.lastFired`),`: `,new Date(e.lastFiredAt).toLocaleString()]}),(0,R.jsxs)(`button`,{type:`button`,onClick:()=>{window.location.hash=G(e.id,V)},className:`flex items-center gap-1 text-accent-blue hover:text-accent-brand transition-colors`,children:[i(`scheduled.executions`),(0,R.jsx)(T,{size:11})]})]})]}),(0,R.jsxs)(`div`,{className:`flex-shrink-0 flex items-center gap-1`,children:[(0,R.jsxs)(`button`,{onClick:async()=>{c(!0),m(null);try{await n(e.id,{enabled:!v})}catch(e){m(e instanceof Error?e.message:String(e))}finally{c(!1)}},disabled:s,className:`flex items-center gap-1 px-2 py-1 rounded-lg text-[11px] transition-colors disabled:opacity-50 ${v?`text-accent-green hover:bg-accent-green/10`:`text-text-tertiary hover:bg-bg-secondary`}`,title:i(v?`scheduled.disable`:`scheduled.enable`),children:[(0,R.jsx)(l,{size:13}),i(v?`scheduled.disable`:`scheduled.enable`)]}),(0,R.jsx)(`button`,{onClick:()=>f(!0),className:`p-1.5 rounded-lg text-text-tertiary hover:text-accent-brand hover:bg-accent-brand/10 transition-colors`,title:i(`scheduled.edit`),children:(0,R.jsx)(_,{size:14})}),(0,R.jsx)(`button`,{onClick:h,disabled:a,className:`p-1.5 rounded-lg text-text-tertiary hover:text-accent-red hover:bg-accent-red/10 transition-colors disabled:opacity-50`,title:i(`scheduled.delete`),children:(0,R.jsx)(A,{size:14})})]})]})}var fe=20;function pe({execution:e}){let{t}=r();return e.status===`succeeded`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-green`,children:[(0,R.jsx)(b,{size:14}),t(`scheduled.execution.succeeded`)]}):e.status===`failed`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-red`,children:[(0,R.jsx)(k,{size:14}),t(`scheduled.execution.failed`)]}):e.status===`queued`?(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-yellow`,children:[(0,R.jsx)(ee,{size:14}),t(`scheduled.execution.queued`)]}):(0,R.jsxs)(`span`,{className:`flex items-center gap-1 text-accent-blue`,children:[(0,R.jsx)(c,{size:14,className:`animate-spin`}),t(`scheduled.execution.running`)]})}function me({route:e,onOpenExecution:t}){let{t:n}=r(),i=te(e=>e.sessionId),a=L(e=>e.tasks),o=L(e=>e.fetchTasks),s=L(e=>e.fetchTaskExecutionsPage),l=L(e=>e.deleteTaskExecutions),u=a.find(t=>t.id===e.taskId),[d,f]=(0,F.useState)(e.filters),[m,_]=(0,F.useState)(e.filters.query),[y,b]=(0,F.useState)([]),[C,E]=(0,F.useState)(),[D,k]=(0,F.useState)(!1),[ne,j]=(0,F.useState)(null),[M,N]=(0,F.useState)(0),[P,I]=(0,F.useState)(),[z,B]=(0,F.useState)(!1),[V,U]=(0,F.useState)(!0),[W,de]=(0,F.useState)(!1),[me,he]=(0,F.useState)(null),[K,ge]=(0,F.useState)(!1),[q,J]=(0,F.useState)(re),[Y,X]=(0,F.useState)(null),[Z,_e]=(0,F.useState)(!1),[ve,Q]=(0,F.useState)(null),[ye,be]=(0,F.useState)(null),xe=(0,F.useRef)(null),Se=(0,F.useRef)(null),Ce=(0,F.useRef)(null),we=(0,F.useRef)(null),Te=(0,F.useRef)(null),Ee=(0,F.useRef)(0),De=(0,F.useRef)(d);De.current=d,(0,F.useEffect)(()=>{f(e.filters),_(e.filters.query),J(re),E(void 0),X(null),Q(null)},[e.filters.query,e.filters.range,e.filters.status,e.taskId,i]),(0,F.useEffect)(()=>{u||o()},[o,u]);let $=(0,F.useCallback)(async(t,n=!1)=>{let r=++Ee.current;n?de(!0):U(!0),he(null);try{let i=ue(d.range),a=await s(e.taskId,{...d.status===`all`?{}:{status:d.status},...i===void 0?{}:{from:i},...d.query?{query:d.query}:{},...t?{cursor:t}:{},limit:fe});if(r!==Ee.current)return;b(e=>n?ce(e,a.executions):a.executions),I(a.nextCursor),B(a.hasMore)}catch(e){r===Ee.current&&he(e instanceof Error?e.message:String(e))}finally{r===Ee.current&&(U(!1),de(!1))}},[s,d.query,d.range,d.status,e.taskId]);(0,F.useEffect)(()=>{b([]),I(void 0),B(!1),J(re),X(null),Q(null),$()},[$,i]);let Oe=(0,F.useCallback)(t=>{f(t),window.history.replaceState(null,``,G(e.taskId,t,e.executionId))},[e.executionId,e.taskId]);(0,F.useEffect)(()=>{let e=m.trim();if(e===d.query)return;let t=window.setTimeout(()=>{Oe({...d,query:e})},300);return()=>window.clearTimeout(t)},[Oe,d,m]),(0,F.useEffect)(()=>{if(!e.executionId){E(void 0),k(!1),j(null);return}let t=y.find(t=>t.id===e.executionId);if(t){E(t),k(!1),j(null);return}if(C?.id===e.executionId)return;let n=!1;return k(!0),j(null),s(e.taskId,{query:e.executionId,limit:100}).then(t=>{n||E(t.executions.find(t=>t.id===e.executionId))}).catch(e=>{n||j(e instanceof Error?e.message:String(e))}).finally(()=>{n||k(!1)}),()=>{n=!0}},[M,y,s,e.executionId,e.taskId,C?.id]),(0,F.useEffect)(()=>{let e=Ce.current;if(!e||!z||W||!P)return;let t=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&$(P,!0)},{root:Se.current,rootMargin:`160px 0px`,threshold:0});return t.observe(e),()=>t.disconnect()},[z,W,P,$]);let ke=(0,F.useMemo)(()=>{let e=new Set(y.filter(e=>e.status===`queued`||e.status===`running`).map(e=>e.id));return(C?.status===`queued`||C?.status===`running`)&&e.add(C.id),[...e]},[y,C]);(0,F.useEffect)(()=>{if(ke.length===0)return;let t=!1,n,r=async()=>{try{let i=await s(e.taskId,{limit:100});if(t)return;let a=new Map(i.executions.filter(e=>ke.includes(e.id)).map(e=>[e.id,e]));b(e=>e.map(e=>a.get(e.id)??e).filter(e=>le(e,d))),E(e=>e&&(a.get(e.id)??e)),[...a.values()].some(e=>e.status===`queued`||e.status===`running`)&&(n=setTimeout(r,2e3))}catch{t||(n=setTimeout(r,2e3))}};return n=setTimeout(r,2e3),()=>{t=!0,n&&clearTimeout(n)}},[ke,s,d,e.taskId]),(0,F.useEffect)(()=>{let e=window.matchMedia(`(max-width: 639px)`),t=()=>ge(e.matches);return t(),e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]),(0,F.useEffect)(()=>{if(!e.executionId){xe.current?.removeAttribute(`inert`),Te.current?.focus(),Te.current=null;return}K&&xe.current?.setAttribute(`inert`,``),we.current?.focus();let t=t=>{t.key===`Escape`&&(window.location.hash=G(e.taskId,De.current))};return document.addEventListener(`keydown`,t),()=>{xe.current?.removeAttribute(`inert`),document.removeEventListener(`keydown`,t)}},[K,e.executionId,e.taskId]);let Ae=(t,n)=>{n&&(Te.current=n),window.location.hash=G(e.taskId,d,t.id)},je=()=>{window.location.hash=G(e.taskId,d)},Me=y.filter(H),Ne=C?.status===`queued`||C?.status===`running`,Pe=!!(C?.sessionId&&(Ne||C.runId)),Fe=Me.length>0&&Me.every(e=>q.selectedIds.includes(e.id)),Ie=e=>{e.length!==0&&(Q(null),X(e))},Le=async e=>{if(e.sessionId&&!ye){be(e.id);try{await t(e)===!1&&be(null)}catch(e){O.error(`${n(`scheduled.execution.openFailed`)}: ${e instanceof Error?e.message:String(e)}`),be(null)}}};return(0,R.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 bg-bg-primary`,children:[(0,R.jsxs)(`div`,{ref:xe,className:`flex min-w-0 flex-1 flex-col`,children:[(0,R.jsxs)(`header`,{className:`border-b border-border-default px-4 py-3 sm:px-6`,children:[(0,R.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,R.jsx)(`button`,{type:`button`,onClick:()=>{window.location.hash=`#/tasks`},className:`rounded-lg p-2 text-text-secondary transition-colors hover:bg-bg-secondary hover:text-text-primary`,"aria-label":n(`scheduled.executionsBack`),children:(0,R.jsx)(p,{size:18})}),(0,R.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,R.jsx)(`h1`,{className:`truncate text-lg font-semibold text-text-primary`,children:n(`scheduled.executionsTitle`)}),(0,R.jsx)(`p`,{className:`truncate text-xs text-text-tertiary`,children:u?u.humanSchedule+` · `+u.prompt:e.taskId})]}),(0,R.jsxs)(`div`,{className:`ml-auto flex flex-wrap items-center justify-end gap-2`,children:[q.active?(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`span`,{className:`hidden text-xs text-text-tertiary sm:inline`,children:n(`scheduled.executionsSelected`,{count:q.selectedIds.length})}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>J(e=>oe(e,y)),disabled:Me.length===0||Z,className:`rounded-lg px-2.5 py-1.5 text-xs text-text-secondary hover:bg-bg-secondary disabled:opacity-50`,children:n(Fe?`scheduled.executionsClearSelection`:`scheduled.executionsSelectAll`)}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>Ie([...q.selectedIds]),disabled:q.selectedIds.length===0||Z,className:`rounded-lg bg-accent-red px-2.5 py-1.5 text-xs font-medium text-white hover:opacity-90 disabled:opacity-40`,children:n(`scheduled.executionsDeleteSelected`)}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>J(e=>ie(e)),disabled:Z,className:`rounded-lg px-2.5 py-1.5 text-xs text-text-secondary hover:bg-bg-secondary disabled:opacity-50`,children:n(`app.cancel`)})]}):(0,R.jsxs)(`button`,{type:`button`,onClick:()=>J(e=>ie(e)),disabled:Me.length===0,className:`flex items-center gap-1.5 rounded-lg border border-border-default px-2.5 py-1.5
2
2
  text-xs text-text-secondary hover:bg-bg-secondary disabled:opacity-50`,children:[(0,R.jsx)(g,{size:14}),n(`scheduled.executionsSelect`)]}),(0,R.jsx)(`button`,{type:`button`,onClick:()=>$(),disabled:V||Z,className:`rounded-lg border border-border-default p-2 text-text-secondary transition-colors
3
3
  hover:bg-bg-secondary hover:text-text-primary disabled:opacity-50`,"aria-label":n(`tasks.refresh`),children:(0,R.jsx)(w,{size:15,className:V?`animate-spin`:``})})]})]}),(0,R.jsxs)(`div`,{className:`mt-3 flex flex-col gap-2 sm:flex-row`,children:[(0,R.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,R.jsx)(h,{size:14,className:`pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-text-tertiary`}),(0,R.jsx)(`input`,{value:m,onChange:e=>_(e.target.value),placeholder:n(`scheduled.executionsSearchPlaceholder`),className:`w-full rounded-lg border border-border-default bg-bg-secondary py-2 pl-9 pr-8
4
4
  text-sm text-text-primary outline-none transition-colors placeholder:text-text-tertiary