limixbot 0.3.23 → 0.3.24

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 (123) hide show
  1. package/dist/assets/{ActivityPanel-BkpnvFMV.js → ActivityPanel-BjjmX49M.js} +1 -1
  2. package/dist/assets/{App-5fWd2qWI.js → App-BWtQhGWp.js} +90 -90
  3. package/dist/assets/{AppEventEditor-4U6g9rYH.js → AppEventEditor-Bq1-MGxi.js} +1 -1
  4. package/dist/assets/{BotSettingsDialog-DBAjMChc.js → BotSettingsDialog-CVlvG4Rb.js} +4 -4
  5. package/dist/assets/{BrowserPanel-DKxFFmVF.js → BrowserPanel-CPLcno_m.js} +1 -1
  6. package/dist/assets/{BrowserProfilesManager-DbsOGGoV.js → BrowserProfilesManager-D9JsCp1k.js} +1 -1
  7. package/dist/assets/{CloudAddDialog-I2EDWXA8.js → CloudAddDialog-DcmN7A5a.js} +1 -1
  8. package/dist/assets/{ComputerFilesPane-DA4Txmh9.js → ComputerFilesPane-Bjx6TGmM.js} +1 -1
  9. package/dist/assets/{ComputerPanel-B3EgKF7M.js → ComputerPanel-C9Xx4Ifs.js} +2 -2
  10. package/dist/assets/{DataPanel-DALLlVzz.js → DataPanel-IfpQCi3b.js} +1 -1
  11. package/dist/assets/{DesktopViewer-BTFnhvej.js → DesktopViewer-RjjUUlrQ.js} +1 -1
  12. package/dist/assets/{FilesView-DfvDhNdO.js → FilesView-D_0GwHAN.js} +1 -1
  13. package/dist/assets/{GrokMoveDialog-CVgxiDZG.js → GrokMoveDialog-CUie-0en.js} +1 -1
  14. package/dist/assets/{InspectorPanel-B8d5f_Z7.js → InspectorPanel-BuFL6wWf.js} +1 -1
  15. package/dist/assets/{KeyboardShortcutsModal-C4Sy1Y5Q.js → KeyboardShortcutsModal-uOhXagTA.js} +1 -1
  16. package/dist/assets/{LiveDesktop-BdLw7_qb.js → LiveDesktop-BwpZa-Ri.js} +1 -1
  17. package/dist/assets/{LocalVmWorkspace-Dd8v6HSb.js → LocalVmWorkspace-CousHKOb.js} +1 -1
  18. package/dist/assets/{MacLocalControl-DBItoJQX.js → MacLocalControl-BKDzplO2.js} +1 -1
  19. package/dist/assets/{MarkdownFilePreview-tXLtgk1m.js → MarkdownFilePreview-CCwc1Tek.js} +1 -1
  20. package/dist/assets/{MenuMotion-DnbwlBMa.js → MenuMotion-CSgaJLc2.js} +1 -1
  21. package/dist/assets/NewBotDialog-BtvoCpqN.js +1 -0
  22. package/dist/assets/{PhoneAppDialog-D4klvpz5.js → PhoneAppDialog-C1hIwyT8.js} +1 -1
  23. package/dist/assets/{PlacesRail-BYBRFGDz.js → PlacesRail-PP97GpM6.js} +1 -1
  24. package/dist/assets/{PluginsPanel-DUOw0nhP.js → PluginsPanel-DpUEC1zc.js} +1 -1
  25. package/dist/assets/{ProIntroduction-B1eqbu20.js → ProIntroduction-C-7uexIW.js} +1 -1
  26. package/dist/assets/{RemoteAgentSettingsPanel-B46lWStL.js → RemoteAgentSettingsPanel-DtofJtgF.js} +1 -1
  27. package/dist/assets/{RoomPanel-DBKyhryu.js → RoomPanel-CHbgQ0xd.js} +1 -1
  28. package/dist/assets/{RoutinesPage-CCSHgNRs.js → RoutinesPage-ZdFTYQc-.js} +2 -2
  29. package/dist/assets/{SettingsModal-CwXiblca.js → SettingsModal-Cdz3bEYZ.js} +1 -1
  30. package/dist/assets/{ShareTeamDialog-DuSs1saG.js → ShareTeamDialog-CNu6Kwet.js} +1 -1
  31. package/dist/assets/{SignedInSites-BdxFX6Wt.js → SignedInSites-CyWcDbLW.js} +1 -1
  32. package/dist/assets/TeamLibraryPanel-DMhdlaSH.js +1 -0
  33. package/dist/assets/{TeamMapPage-PW3Ots-y.js → TeamMapPage-C2PnNdil.js} +1 -1
  34. package/dist/assets/{TriggersPage-D5jH7bR3.js → TriggersPage-B_br6xBZ.js} +1 -1
  35. package/dist/assets/{VisibilitySection-yE3ZIXKk.js → VisibilitySection-DH0WrBCn.js} +1 -1
  36. package/dist/assets/{WebhookTrigger-doGyrUZA.js → WebhookTrigger-BASBoMb_.js} +1 -1
  37. package/dist/assets/{WorksOnGrid-DWvjM4aV.js → WorksOnGrid-CboITAAs.js} +1 -1
  38. package/dist/assets/{abnfDiagram-YUKMZFIV-Bs9i-eLj.js → abnfDiagram-YUKMZFIV-CJ69o_vp.js} +1 -1
  39. package/dist/assets/{activity-DIhOTAmd.js → activity-BdRjGS2C.js} +1 -1
  40. package/dist/assets/{architectureDiagram-47P4ROYG-CR-7WHVu.js → architectureDiagram-47P4ROYG-BH57AmKC.js} +1 -1
  41. package/dist/assets/{blockDiagram-E7TT5TSB-Cx9qUsrY.js → blockDiagram-E7TT5TSB-D3ebMs_o.js} +1 -1
  42. package/dist/assets/{c4Diagram-CRA5TL53-CtuUaTlE.js → c4Diagram-CRA5TL53-6TrdcGZR.js} +1 -1
  43. package/dist/assets/{calendar-days-DyyECwZf.js → calendar-days-DiMBTH2e.js} +1 -1
  44. package/dist/assets/channel-k2J2GMwv.js +1 -0
  45. package/dist/assets/{chunk-2Q5K7J3B-DIvFRpG0.js → chunk-2Q5K7J3B-BemwHdji.js} +1 -1
  46. package/dist/assets/{chunk-5VM5RSS4-Cxp3RKyR.js → chunk-5VM5RSS4-CQZbLBld.js} +1 -1
  47. package/dist/assets/{chunk-7TKQ45FW-DSOW_9p2.js → chunk-7TKQ45FW-Dy6EXFTX.js} +1 -1
  48. package/dist/assets/{chunk-AW2ZBBNX-zV216OhN.js → chunk-AW2ZBBNX-BbKGGyK8.js} +1 -1
  49. package/dist/assets/{chunk-FVRAUYC3-BOtXkSrZ.js → chunk-FVRAUYC3-DHqUalc2.js} +2 -2
  50. package/dist/assets/{chunk-HTAEGDNF-DiV1eG2w.js → chunk-HTAEGDNF-B66Vjlwq.js} +1 -1
  51. package/dist/assets/{chunk-JWPE2WC7-BZJyqcw-.js → chunk-JWPE2WC7-DrtdT6L3.js} +1 -1
  52. package/dist/assets/{chunk-KQW6MTUR-DabkPo_d.js → chunk-KQW6MTUR-t7RW8fFT.js} +1 -1
  53. package/dist/assets/{chunk-XXDRQBXY-CcZGTVYy.js → chunk-XXDRQBXY-CntyS42N.js} +1 -1
  54. package/dist/assets/{classDiagram-v2-K4WV4PDN-DfOdVcjL.js → classDiagram-v2-K4WV4PDN-KlNCgeTt.js} +1 -1
  55. package/dist/assets/{coins-s4HyWHyQ.js → coins-BHKpT34i.js} +1 -1
  56. package/dist/assets/{core-D7M03RiE.js → core-DEy6KDLR.js} +1 -1
  57. package/dist/assets/{cose-bilkent-JH36ORCC-CqrD5E-Q.js → cose-bilkent-JH36ORCC-C_cXoOGT.js} +1 -1
  58. package/dist/assets/{cynefin-EF2NZ3EQ-fcIOWtrM.js → cynefin-EF2NZ3EQ-DGuwW5zt.js} +1 -1
  59. package/dist/assets/{cynefinDiagram-3GCD6N5R-Cx2XYJ57.js → cynefinDiagram-3GCD6N5R-qMzxXkVk.js} +1 -1
  60. package/dist/assets/{dagre-W4DXFKR2-D6f_32GP.js → dagre-W4DXFKR2-Q-osY3Yi.js} +1 -1
  61. package/dist/assets/{diagram-2UJZ2QOL-IxXxA3zr.js → diagram-2UJZ2QOL-DyVJSBOF.js} +1 -1
  62. package/dist/assets/{diagram-OVF4WLC6-DzRS9og-.js → diagram-OVF4WLC6-C5qBFdpm.js} +1 -1
  63. package/dist/assets/{diagram-PFPMY2P6-CA4cF9TP.js → diagram-PFPMY2P6-C1PW3U2P.js} +1 -1
  64. package/dist/assets/{diagram-UMYRVEAY-B5YdB3mN.js → diagram-UMYRVEAY-D2pa0Mzi.js} +1 -1
  65. package/dist/assets/{diagram-YEKJPTXX-D8jMUZQ7.js → diagram-YEKJPTXX-BIzOA1li.js} +1 -1
  66. package/dist/assets/{diagram-ZIFT7M5P-D9FKtuee.js → diagram-ZIFT7M5P-B1UL3O8m.js} +1 -1
  67. package/dist/assets/{ebnfDiagram-VR2GEFS7-BipEfLA3.js → ebnfDiagram-VR2GEFS7-Cxu-kU8s.js} +1 -1
  68. package/dist/assets/{elk-IJKZMXRS-ByA43ZYx.js → elk-IJKZMXRS-DJS39Bm9.js} +1 -1
  69. package/dist/assets/{erDiagram-O2IAPWRE-hlDRgJN-.js → erDiagram-O2IAPWRE-Cb31BS5L.js} +1 -1
  70. package/dist/assets/{file-up-DXcOpz8w.js → file-up-DWGlVRGP.js} +1 -1
  71. package/dist/assets/{flowDiagram-OXPTDLAJ-BuCuOW1m.js → flowDiagram-OXPTDLAJ-BaPTzS6m.js} +1 -1
  72. package/dist/assets/{ganttDiagram-R7TSEDQI-Bk16Ilgi.js → ganttDiagram-R7TSEDQI-B_Lr-26i.js} +1 -1
  73. package/dist/assets/{gitGraphDiagram-XJZIOB7I-CN3BXWBF.js → gitGraphDiagram-XJZIOB7I-UHyDFX6a.js} +1 -1
  74. package/dist/assets/{import-name-wz0BNJ-d.js → import-name-Cxwtm5XO.js} +1 -1
  75. package/dist/assets/{index-BR_1_bou.js → index-BME9PdWM.js} +1 -1
  76. package/dist/assets/{index-BJo4IICg.js → index-BSrb6nsc.js} +2 -2
  77. package/dist/assets/{infoDiagram-5W2HQ5XZ-DSUAydoj.js → infoDiagram-5W2HQ5XZ-B7ovBJYA.js} +1 -1
  78. package/dist/assets/{ishikawaDiagram-K3B6WC7H-C1_ZiQE2.js → ishikawaDiagram-K3B6WC7H-BYS-TlrF.js} +1 -1
  79. package/dist/assets/{journeyDiagram-COXZFDF6-CAGOqBTO.js → journeyDiagram-COXZFDF6-jJxKYEtT.js} +1 -1
  80. package/dist/assets/{kanban-definition-P3RFRI5V-Dj3_9GgV.js → kanban-definition-P3RFRI5V-DyiFYaIK.js} +1 -1
  81. package/dist/assets/{mcp-servers-qzidl6IU.js → mcp-servers-DXFuhTlS.js} +1 -1
  82. package/dist/assets/{mermaid.core-CcbkAG9m.js → mermaid.core-D3YJgsiB.js} +4 -4
  83. package/dist/assets/{mindmap-definition-LZFPQGKD-C_gFeuC9.js → mindmap-definition-LZFPQGKD-DnbWodUY.js} +1 -1
  84. package/dist/assets/{minimize-DixQTKye.js → minimize-Af1aU3Tz.js} +1 -1
  85. package/dist/assets/{monitor-IwDx0ohO.js → monitor-DuYHWIyw.js} +1 -1
  86. package/dist/assets/{new-bot-COptZjiW.js → new-bot-TwOnvVO1.js} +1 -1
  87. package/dist/assets/{org-library-97Cfj4XD.js → org-library-BLD6YHcM.js} +1 -1
  88. package/dist/assets/{package-format-MbGfBQ0g.js → package-format-72bbOy2w.js} +1 -1
  89. package/dist/assets/{pegDiagram-BGZESJAR-CYa91QJf.js → pegDiagram-BGZESJAR-CcOuP6zx.js} +1 -1
  90. package/dist/assets/{pieDiagram-CAPJLFHJ-H4g7rmhD.js → pieDiagram-CAPJLFHJ-DhCU7Sfy.js} +1 -1
  91. package/dist/assets/{quadrantDiagram-GDMTTRAM-CkHV6SSw.js → quadrantDiagram-GDMTTRAM-7OziX26h.js} +1 -1
  92. package/dist/assets/{rail-SzaGJCSZ.js → rail-DI2iZJYt.js} +1 -1
  93. package/dist/assets/{railroadDiagram-SM67HX2B-Kx3ccbrH.js → railroadDiagram-SM67HX2B-rg44R4U2.js} +1 -1
  94. package/dist/assets/{remote-desktop-panel-CVuN83Ny.js → remote-desktop-panel-BPKKvcHT.js} +1 -1
  95. package/dist/assets/{requirementDiagram-X7JNWC4A-BcNRqLgf.js → requirementDiagram-X7JNWC4A-DFNvg72O.js} +1 -1
  96. package/dist/assets/{sankeyDiagram-UM26HJRW-CQP982o-.js → sankeyDiagram-UM26HJRW-CUOrQF2i.js} +1 -1
  97. package/dist/assets/{sequenceDiagram-ZO4K6R2Y-BXkOAwlC.js → sequenceDiagram-ZO4K6R2Y-4HKsH1wt.js} +1 -1
  98. package/dist/assets/{sizeCapture-INFHLROL-BtuN-EAh.js → sizeCapture-INFHLROL-BEXQDTx-.js} +1 -1
  99. package/dist/assets/{stateDiagram-v2-TBUQTH76-CmlsJGhT.js → stateDiagram-v2-TBUQTH76-BYBLUqiy.js} +1 -1
  100. package/dist/assets/{styles-ElM5u1od.js → styles-C2_XZv1s.js} +1 -1
  101. package/dist/assets/{swimlanes-N4OXWK64-GH4PBeGD.js → swimlanes-N4OXWK64-D-bp8wWN.js} +1 -1
  102. package/dist/assets/swimlanesDiagram-K3J5GTZL-DTQBdgKt.js +8 -0
  103. package/dist/assets/{team-share-B2cRBtNk.js → team-share-Dpu1nJNz.js} +1 -1
  104. package/dist/assets/{timeline-definition-YOQAKGHF-j8Q7uetA.js → timeline-definition-YOQAKGHF-CtLFkcud.js} +1 -1
  105. package/dist/assets/{usecaseDiagram-VIAY4XPW-Cz4ej3SQ.js → usecaseDiagram-VIAY4XPW-AWOhUKvG.js} +1 -1
  106. package/dist/assets/{vennDiagram-BLWOH2XV-BZ3IAGpt.js → vennDiagram-BLWOH2XV-C_OYDBvp.js} +1 -1
  107. package/dist/assets/{vi-CVDyZGky.js → vi-P4zxF4j0.js} +1 -1
  108. package/dist/assets/{wardleyDiagram-YMQ3BMBF-Bc32JfGA.js → wardleyDiagram-YMQ3BMBF-CdxMh8tE.js} +1 -1
  109. package/dist/assets/{xychartDiagram-TAQBALBS-s5XbB-l2.js → xychartDiagram-TAQBALBS-BL2spC5z.js} +1 -1
  110. package/dist/index.html +2 -2
  111. package/dist/rail.html +4 -4
  112. package/dist-server/index.js +1580 -1567
  113. package/dist-server/package.json +1 -1
  114. package/dist-server/server/index.js +1 -1
  115. package/dist-server/server/initial-greeting.js +4 -0
  116. package/dist-server/server/limix-bot-library.js +178 -0
  117. package/dist-server/server/routes/bot-skills.js +6 -0
  118. package/dist-server/server/routes/teams.js +1 -1
  119. package/package.json +1 -1
  120. package/dist/assets/NewBotDialog-sfd-FzAz.js +0 -1
  121. package/dist/assets/TeamLibraryPanel-Djaf5q_z.js +0 -1
  122. package/dist/assets/channel-DXuqtdcQ.js +0 -1
  123. package/dist/assets/swimlanesDiagram-K3J5GTZL-VqQY3wNh.js +0 -8
@@ -1,4 +1,4 @@
1
- import{c as rt,r as l,j as e,t,a as z,S as lt,f as he,p as ys,g as vs,a8 as Er,X as Le,i as js,C as Ar,a9 as ja,L as yt,aK as Ir,aT as Pr,a0 as Rr,B as Tr,b as Be,aU as Br,aV as Lr,aW as Ys,ao as Xs,aX as Or,ap as zr,aY as Mr,aZ as Ur,a3 as Fr,G as Dr,a_ as _r,a$ as ks,b0 as Kr,b1 as $r,b2 as Qs,b3 as Ns,l as Hr,b4 as Wr,m as Zs,b5 as ka,d as Gr,b6 as Vr,q as qr,b7 as Jr,o as Yr,as as Xr,b8 as en,ar as Qr,b9 as Zr,ba as tn,bb as sn,bc as nn,bd as el,be as tl,ac as sl,bf as nl,bg as al}from"./styles-ElM5u1od.js";import{bP as wt,u as W,S as me,n as U,D as pe,cM as il,cI as Na,T as we,gY as Re,eK as Ge,gZ as rl,a0 as Te,eI as ll,eJ as ol,g_ as ns,g$ as tt,h0 as wa,h1 as ws,h2 as Ss,h3 as cl,e0 as an,h4 as Sa,h5 as Ca,h6 as dl,h7 as ul,h8 as ml,bN as de,b_ as Y,e8 as as,eH as pl,h9 as Ea,ha as bt,hb as St,hc as Aa,hd as Ia,he as Pe,hf as Fe,hg as xl,hh as gl,hi as hl,hj as fl,hk as bl,C as Ve,hl as Pa,hm as yl,hn as vl,ho as Ra,hp as Ta,hq as be,hr as ye,dp as rn,hs as Ct,ht as jl,hu as kl,hv as Nl,hw as wl,hx as Sl,gR as Ba,bt as Cl,hy as et,W as El,dH as Al,Q as La,hz as Oa,hA as Il,aQ as vt,ft as nt,fu as at,hB as Pl,P as We,r as Rl,ck as Tl,gG as Bl,hC as Et,hD as za,hE as Ll,hF as Ol,hG as ln,hH as Ma,hI as At,hJ as Ua,hK as zl,hL as Ml,hM as Ul,hN as Fl,G as Dl,hO as _l,hP as it,ef as It,hQ as Kl,hR as $l,hS as Hl,hT as Wl,fB as Gl,hU as on,hV as Vl,hW as ql,K as Jl,hX as cn,hY as Yl,ed as Fa,hZ as Xl,h_ as Ql,h$ as Zl,i0 as eo,i1 as to,i2 as so,i3 as Da,i4 as no,i5 as ao,i6 as io,i7 as ro,i8 as lo,i9 as oo,ia as _a,ib as co,ic as uo,dN as mo,id as po,e9 as xo,ie as go,ig as ho,ih as fo,c as bo,ii as dn,ij as yo,ik as un,l as vo,il as jo,im as ko,io as No,bH as wo,ip as So,iq as Co,ir as Eo,is as Ao,it as Ka,fr as Qe,iu as Io,fq as Po,iv as $a,iw as Ro,ix as Ha,iy as To,iz as mn,iA as Bo,iB as Lo,iC as Oo,iD as zo,iE as Mo,iF as Uo,iG as Fo,iH as Do,iI as Cs,iJ as _o,fh as Wa,m as Ko,iK as $o,iL as Ho,iM as pn,iN as Wo,iO as Go,iP as xn,iQ as Vo,bj as qo,iR as Jo,iS as Yo,iT as Xo,iU as Qo,iV as Zo,iW as gn,iX as ec,by as Es,iY as tc,bz as sc,iZ as nc,i_ as ac,i$ as ic,j0 as rc,j1 as lc,j2 as oc,j3 as cc,j4 as dc,j5 as hn,gu as uc,j6 as mc,j7 as pc,j8 as Ga,j9 as xc,ja as gc,jb as hc,jc as Va,jd as qa,je as Ja,jf as fc,jg as bc,jh as yc,d5 as vc,I as jc,ji as kc,eC as Nc,bY as fn,jj as bn,e$ as yn,d$ as wc,a2 as Sc,aC as Cc,jk as Ec,jl as Ac,jm as Ic}from"./App-5fWd2qWI.js";import{L as V,P as Se,z as ot,E as Pc,M as Rc,ak as Tc,a0 as Bc,X as Lc,K as Oc,x as As,C as Ya,B as Pt,al as zc,am as Mc,an as Uc,d as Xa,r as Fc,A as Dc,U as Qa,c as _c,ao as Kc,ap as $c,N as Hc,ac as Wc,aq as Gc,b as Vc,y as qc,V as Jc,O as Ut}from"./PlacesRail-BYBRFGDz.js";import{C as Is,a as Yc,R as Ne}from"./MenuMotion-DnbwlBMa.js";import{l as Za,M as Xc,w as Qc}from"./MacLocalControl-DBItoJQX.js";import{Q as Zc}from"./VisibilitySection-yE3ZIXKk.js";import{r as ei,a as ti,b as ed,i as td,C as sd,c as nd,p as ad}from"./index-BJo4IICg.js";import{c as id,A as rd,w as ld,d as od,e as vn}from"./activity-DIhOTAmd.js";import{U as si,R as ni,B as ai,S as ii,a as ri,D as li,T as oi,C as ci,L as is,b as di,F as ui,A as rs,E as cd,c as dd,P as ud,d as md,e as pd,N as xd}from"./NewBotDialog-sfd-FzAz.js";import{a as gd,u as hd,C as mi,b as fd,P as bd}from"./ProIntroduction-B1eqbu20.js";import{M as pi}from"./monitor-IwDx0ohO.js";import{C as yd}from"./coins-s4HyWHyQ.js";import"./org-library-97Cfj4XD.js";import"./package-format-MbGfBQ0g.js";import"./mcp-servers-qzidl6IU.js";import"./WorksOnGrid-DWvjM4aV.js";import"./new-bot-COptZjiW.js";import"./RoutinesPage-CCSHgNRs.js";import"./remote-desktop-DDRRx8uY.js";import"./team-share-B2cRBtNk.js";import"./BrowserProfilesManager-DbsOGGoV.js";import"./SignedInSites-BdxFX6Wt.js";const vd=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],jd=rt("cloud-download",vd);const kd=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],Nd=rt("palette",kd);const wd=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],Sd=rt("scroll-text",wd);const Cd=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Ed=rt("terminal",Cd);const Ad=[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]],Id=rt("unplug",Ad);function Ps(s){return s.filter(n=>n.driverKind==="openai-compat"&&n.instanceId.startsWith("openai-compat-"))}const ls="limix.settings.size",Pd=640,Rd=460,Ft=()=>typeof window<"u"&&window.innerWidth>=768;function Dt(s,n,a){const i=Math.max(320,window.innerWidth-32),r=Math.max(320,window.innerHeight-96);s.style.width=`${Math.round(Math.min(Math.max(n,Math.min(Pd,i)),i))}px`,s.style.height=`${Math.round(Math.min(Math.max(a,Math.min(Rd,r)),r))}px`}function Td(s){s.style.width="",s.style.height="";try{window.localStorage.removeItem(ls)}catch{}}const Bd=[{sx:1,sy:0,cls:"right-0 top-4 bottom-4 w-1.5",cursor:"cursor-ew-resize"},{sx:-1,sy:0,cls:"left-0 top-4 bottom-4 w-1.5",cursor:"cursor-ew-resize"},{sx:0,sy:1,cls:"bottom-0 left-4 right-4 h-1.5",cursor:"cursor-ns-resize"},{sx:0,sy:-1,cls:"top-0 left-4 right-4 h-1.5",cursor:"cursor-ns-resize"},{sx:1,sy:1,cls:"bottom-0 right-0 h-4 w-4",cursor:"cursor-nwse-resize"},{sx:-1,sy:1,cls:"bottom-0 left-0 h-4 w-4",cursor:"cursor-nesw-resize"}];function Ld(){const s=l.useRef(null);l.useEffect(()=>{const a=s.current?.parentElement;if(!a)return;if(a.style.maxWidth="100%",a.style.maxHeight="100%",Ft())try{const r=JSON.parse(window.localStorage.getItem(ls)??"null");r&&typeof r.w=="number"&&typeof r.h=="number"&&Dt(a,r.w,r.h)}catch{}const i=()=>{a.style.width&&(Ft()?Dt(a,a.offsetWidth,a.offsetHeight):(a.style.width="",a.style.height=""))};return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[]);const n=a=>i=>{const r=s.current?.parentElement;if(!r||!Ft())return;i.preventDefault();const c=i.clientX,o=i.clientY,d=r.offsetWidth,u=r.offsetHeight,m=x=>Dt(r,d+a.sx*(x.clientX-c)*2,u+a.sy*(x.clientY-o)*2),p=()=>{window.removeEventListener("pointermove",m);try{window.localStorage.setItem(ls,JSON.stringify({w:r.offsetWidth,h:r.offsetHeight}))}catch{}};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p,{once:!0})};return e.jsx("span",{ref:s,className:"contents",children:Bd.map(a=>e.jsx("span",{"aria-hidden":"true",title:"Kéo để đổi kích thước (bấm đúp để đặt lại)",className:`absolute z-20 hidden touch-none md:block ${a.cls} ${a.cursor}`,onPointerDown:n(a),onDoubleClick:()=>{const i=s.current?.parentElement;i&&Td(i)}},`${a.sx}${a.sy}`))})}function ve({children:s,note:n="settings.adminOnly.change"}){return wt()===!1?e.jsx("p",{"data-admin-only":!0,className:"text-[13px] text-ink-secondary",children:t(n)}):s}function Rs(s,n,a="start",i=0){const r=n.getBoundingClientRect().top-s.getBoundingClientRect().top+s.scrollTop;s.scrollTop=Math.max(0,a==="center"?r-(s.clientHeight-(n.offsetHeight??0))/2:r-i)}function Od(s){for(let n=s.parentElement;n;n=n.parentElement){const a=getComputedStyle(n).overflowY;if((a==="auto"||a==="scroll")&&n.scrollHeight>n.clientHeight)return n}return null}function zd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(null),o=s.config?.tts?.everyReply===!0,d=()=>{i(!0),c(null),U("/api/config",{method:"PUT",body:JSON.stringify({tts:{everyReply:!o}})}).then(u=>n({type:"configStatus",config:u})).catch(u=>c(u.message)).finally(()=>i(!1))};return e.jsxs("div",{"data-voice-every-reply":!0,className:"flex items-center justify-between gap-4 px-3 py-2.5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[14px] font-medium leading-5 text-ink",children:t("voice.everyReply")}),e.jsx("div",{className:"mt-0.5 text-[12px] leading-4 text-ink-secondary",children:t("voice.everyReply.allHelp")}),r&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:r})]}),e.jsx(me,{checked:o,disabled:a,"aria-label":t("voice.everyReply"),onClick:d})]})}function _t(s){return[...new Set(s.split(/[,,、\s]+/).map(n=>n.trim()).filter(Boolean))]}const Ue=z(Re,"font-sans"),Md=[5,10,20,30,60],Kt="ui-icon-button shrink-0 hover:text-ink",$t={name:"Google Gemini",url:"https://generativelanguage.googleapis.com/v1beta/openai"},os={count:64,length:200},Ud=s=>s.length<=os.count&&s.every(n=>n.length<=os.length),cs=(s,n)=>U(`/api/instances/${encodeURIComponent(s)}`,{method:"PATCH",body:JSON.stringify(n)});function xi({server:s,disabled:n,onPick:a}){return e.jsxs(pe,{size:"sm",className:"shrink-0",value:s.replyWaitMinutes??"",onChange:i=>a(i.target.value?Number(i.target.value):null),disabled:n,"aria-label":t("apiInstances.replyWaitFor",{name:s.displayName}),title:t("apiInstances.replyWaitHint"),children:[e.jsx("option",{value:"",children:t("apiInstances.replyWaitDefault")}),[...new Set([...Md,...s.replyWaitMinutes?[s.replyWaitMinutes]:[]])].sort((i,r)=>i-r).map(i=>e.jsx("option",{value:i,children:t("apiInstances.replyWaitMinutes",{minutes:String(i)})},i))]})}function Fd(){const{state:s,dispatch:n,refreshInstances:a}=W(),[i,r]=l.useState(!1),[c,o]=l.useState(null),d=s.instances.find(m=>m.instanceId==="openaiCompat"&&m.driverKind==="openai-compat");if(!d||!s.config?.openaiCompat?.url)return null;const u=m=>{i||(r(!0),o(null),cs(d.instanceId,{replyWaitMinutes:m}).then(async({instances:p})=>{Array.isArray(p)?n({type:"instances",instances:p}):await a({reportErrors:!0})}).catch(p=>o(p.message||t("apiInstances.failed"))).finally(()=>r(!1)))};return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(xi,{server:d,disabled:i,onPick:u}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.replyWaitHint")}),c&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:c})]})}function Dd(){const{state:s}=W();return e.jsx(_d,{servers:Ps(s.instances)})}function _d({servers:s}){const{dispatch:n,refreshInstances:a}=W(),[i,r]=l.useState(""),[c,o]=l.useState(""),[d,u]=l.useState(""),[m,p]=l.useState(""),[x,g]=l.useState(null),[h,b]=l.useState(null),[y,f]=l.useState(null),[k,E]=l.useState(""),N=!!(i.trim()&&c.trim()&&d.trim()),w=(j,O,v,A)=>{x||(g(j),b(null),O().then(async({instances:P})=>{Array.isArray(P)?n({type:"instances",instances:P}):await a({reportErrors:!0}),v?.()}).catch(P=>b({text:P.message||t("apiInstances.failed"),at:A})).finally(()=>g(null)))},I=()=>N&&w("add",()=>U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:i.trim(),url:c.trim(),key:d.trim(),..._t(m).length?{models:_t(m)}:{}})}).then(j=>(Ge("custom_endpoint","settings","unverified"),j),j=>{throw Ge("custom_endpoint","settings","error"),j}),()=>{r(""),o(""),u(""),p("")});return e.jsxs("div",{"data-api-keys-other":!0,children:[e.jsx("div",{className:"mb-0.5 text-[13px] leading-[18px] text-ink",children:t("apiInstances.title")}),e.jsx("p",{className:"mb-2 text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.subtitle")}),s.length===0&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.empty")}),s.map(j=>e.jsxs("div",{className:"mb-1.5 rounded-lg border border-hairline/60 bg-inset px-3 py-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[12px] text-ink",children:j.displayName}),j.url&&e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",children:j.url})]}),e.jsx(xi,{server:j,disabled:x!==null,onPick:O=>w("other",()=>cs(j.instanceId,{replyWaitMinutes:O}))}),e.jsx("button",{type:"button",onClick:()=>{E((j.managedModels??[]).join(", ")),f(y===j.instanceId?null:j.instanceId),b(null)},disabled:x!==null,"aria-label":t("apiInstances.editModels",{name:j.displayName}),"aria-expanded":y===j.instanceId,title:t("apiInstances.editModels",{name:j.displayName}),className:Kt,children:e.jsx(il,{size:13,"aria-hidden":"true"})}),e.jsx("button",{type:"button",onClick:()=>w("other",()=>U(`/api/instances/${encodeURIComponent(j.instanceId)}/refresh-models`,{method:"POST"})),disabled:x!==null,"aria-label":t("apiInstances.refreshModels",{name:j.displayName}),title:t("apiInstances.refreshModels",{name:j.displayName}),className:Kt,children:e.jsx(Na,{size:13,"aria-hidden":"true"})}),e.jsx("button",{type:"button",onClick:()=>w("other",()=>U(`/api/instances/${encodeURIComponent(j.instanceId)}`,{method:"DELETE"})),disabled:x!==null,"aria-label":t("apiInstances.remove",{name:j.displayName}),title:t("apiInstances.remove",{name:j.displayName}),className:`${Kt} hover:bg-danger/10 hover:text-danger`,children:e.jsx(we,{size:13,"aria-hidden":"true"})})]}),y===j.instanceId&&e.jsxs("div",{className:"mt-1.5 flex flex-col gap-1.5",children:[e.jsx("input",{value:k,onChange:O=>E(O.target.value),placeholder:t("apiInstances.models"),"aria-label":t("apiInstances.modelsFor",{name:j.displayName}),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.editModelsHint")}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx("button",{type:"button",onClick:()=>{const O=_t(k);if(!Ud(O)){b({text:t("apiInstances.modelsLimit",os),at:j.instanceId});return}w("other",()=>cs(j.instanceId,{models:O}),()=>f(null),j.instanceId)},disabled:x!==null,className:"ui-button",children:t("common.save")}),e.jsx("button",{type:"button",onClick:()=>f(null),disabled:x!==null,className:"ui-button",children:t("common.cancel")})]}),h?.at===j.instanceId&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:h.text})]})]},j.instanceId)),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsx("button",{type:"button",onClick:()=>{r($t.name),o($t.url)},disabled:x!==null,className:"ui-button self-start",children:t("apiInstances.geminiPreset")}),c.trim()===$t.url&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.geminiKeyHint")}),e.jsx("input",{value:i,onChange:j=>r(j.target.value),placeholder:t("apiInstances.name"),"aria-label":t("apiInstances.name"),spellCheck:!1,disabled:x!==null,className:Ue}),e.jsx("input",{type:"url",value:c,onChange:j=>o(j.target.value),placeholder:"https://api.example.com/v1","aria-label":t("apiInstances.url"),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("input",{type:"password",value:d,onChange:j=>u(j.target.value),placeholder:t("apiInstances.key"),"aria-label":t("apiInstances.key"),autoComplete:"off",disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("input",{value:m,onChange:j=>p(j.target.value),placeholder:t("apiInstances.models"),"aria-label":t("apiInstances.models"),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.modelsHint")}),e.jsxs("button",{type:"button",onClick:I,disabled:x!==null||!N,className:"ui-button self-start",children:[x==="add"?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),x==="add"?t("apiInstances.adding"):t("apiInstances.add")]})]}),h&&!h.at&&e.jsx("div",{className:"mt-1 text-[12px] text-danger",children:h.text})]})}const Kd="lm-studio";function $d(s){const n=s.trim();if(!/^[1-9]\d{0,4}$/.test(n))return null;const a=Number(n);return a>65535?null:`http://127.0.0.1:${a}/v1`}function Hd({heading:s=!0}={}){const{state:n,dispatch:a,refreshInstances:i}=W(),r=Ps(n.instances),[c,o]=l.useState("1234"),[d,u]=l.useState(""),[m,p]=l.useState(!1),[x,g]=l.useState(null),h=$d(c),b=!!(h&&r.some(f=>f.url===h)),y=()=>{m||!h||b||(p(!0),g(null),U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:"LM Studio",url:h,key:d.trim()||Kd,catalog:"lmstudio"})}).then(async f=>{Ge("custom_endpoint","settings","unverified"),Array.isArray(f.instances)?a({type:"instances",instances:f.instances}):await i({reportErrors:!0}),u("")},f=>{Ge("custom_endpoint","settings","error"),g(f instanceof Error&&f.message?f.message:t("apiInstances.failed"))}).finally(()=>p(!1)))};return e.jsxs("div",{className:z(s&&"rounded-lg border border-hairline/40 bg-inset px-3 py-2"),children:[s&&e.jsx("div",{className:"text-[13px] text-ink",children:t("lmStudio.title")}),e.jsx("p",{className:z("text-[12px] leading-4 text-ink-secondary",s&&"mt-1"),children:t("lmStudio.desc")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] leading-4 text-ink-secondary",children:[t("lmStudio.port"),e.jsx("input",{inputMode:"numeric",value:c,onChange:f=>o(f.target.value),"aria-label":t("lmStudio.port"),spellCheck:!1,disabled:m,className:z(Ue,"font-mono")})]}),e.jsx("input",{type:"password",value:d,onChange:f=>u(f.target.value),placeholder:t("lmStudio.token"),"aria-label":t("lmStudio.token"),autoComplete:"off",disabled:m,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("lmStudio.tokenHint")}),h&&e.jsx("p",{className:"truncate font-mono text-[12px] leading-4 text-ink-secondary",children:h}),e.jsxs("button",{type:"button",onClick:y,disabled:m||!h||b,className:"ui-button self-start",children:[m?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),m?t("lmStudio.adding"):t("lmStudio.add")]}),b&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("lmStudio.added")})]}),x&&e.jsx("div",{className:"mt-1 text-[12px] text-danger",children:x})]})}const Wd="ollama",Gd="https://ollama.com/download",Vd=s=>`${s.replace(/\/+$/,"")}/v1`,qd=(s,n)=>s?.trim().replace(/\/+$/,"")===n;function Jd({visible:s}){const{state:n,dispatch:a,refreshInstances:i}=W(),[r,c]=l.useState(""),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(!1),[g,h]=l.useState(null),b=l.useRef(0),y=l.useRef(!1),f=l.useCallback(I=>{const j=++b.current;m(!0),h(null),U(`/api/instances/ollama${I?`?url=${encodeURIComponent(I)}`:""}`).then(O=>{j===b.current&&d(O.status)}).catch(O=>{j===b.current&&(d(null),h(O.message||t("apiInstances.failed")))}).finally(()=>{j===b.current&&m(!1)})},[]);l.useEffect(()=>{!s||y.current||(y.current=!0,f(""))},[s,f]);const k=o?Vd(o.url):null,E=!!(k&&(Ps(n.instances).some(I=>I.url===k)||qd(n.config?.openaiCompat?.url,k))),N=!!(k&&!E&&!p&&!u&&(o?.state==="ready"||o?.state==="no-models")),w=()=>{!N||!k||(x(!0),h(null),U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:"Ollama",url:k,key:Wd,catalog:"ollama"})}).then(async I=>{Ge("custom_endpoint","settings","unverified"),Array.isArray(I.instances)?a({type:"instances",instances:I.instances}):await i({reportErrors:!0})},I=>{Ge("custom_endpoint","settings","error"),h(I instanceof Error&&I.message?I.message:t("apiInstances.failed"))}).finally(()=>x(!1)))};return e.jsxs("div",{"data-ollama-server":!0,children:[e.jsx("div",{role:"status","aria-live":"polite",children:u?e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] leading-4 text-ink-secondary",children:[e.jsx(V,{size:12,className:"animate-spin","aria-hidden":"true"}),t("ollama.checking")]}):o&&e.jsx(rl,{status:o})}),!u&&o?.state==="not-running"&&e.jsx("a",{href:Gd,target:"_blank",rel:"noopener noreferrer",className:"mt-1 inline-block text-[12px] font-medium text-accent-text hover:underline",children:t("ollama.download")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsx("input",{type:"url",value:r,onChange:I=>c(I.target.value),onKeyDown:I=>{I.key==="Enter"&&f(r.trim())},placeholder:"http://127.0.0.1:11434","aria-label":t("ollama.address"),spellCheck:!1,disabled:p,className:z(Re,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("ollama.addressHint")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsxs("button",{type:"button",onClick:w,disabled:!N,className:"ui-button",children:[p?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),p?t("ollama.adding"):t("ollama.add")]}),e.jsxs("button",{type:"button",onClick:()=>f(r.trim()),disabled:u||p,className:"ui-button",children:[e.jsx(Na,{size:12,"aria-hidden":"true"}),t("common.checkAgain")]})]}),E&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("ollama.added")})]}),g&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:g})]})}function Yd(){const{state:s,dispatch:n}=W(),a=s.config?.opencodeGo?.providerKeys??[],[i,r]=l.useState(""),[c,o]=l.useState(""),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(null),h=d||m!==null,b=(k,E)=>U("/api/config",{method:"PUT",body:JSON.stringify({opencodeGo:{providerKeys:{[k]:E}}})}).then(N=>n({type:"configStatus",config:N})),y=()=>{const k=i.trim().toUpperCase(),E=ll(c);if(!(h||!k||!E)){if(!ol(E)){g(t("keys.notAKey"));return}u(!0),g(null),b(k,E).then(()=>{r(""),o("")}).catch(N=>g(N.message)).finally(()=>u(!1))}},f=k=>{h||(p(k),g(null),b(k,"").catch(E=>g(E.message)).finally(()=>p(null)))};return e.jsxs("div",{"data-opencode-provider-keys":!0,className:"flex flex-col gap-2",children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.opencode.otherProviders.hint")}),s.config?.cloudHome!==!0&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.opencode.providersHint").split("{command}").flatMap((k,E)=>E===0?[k]:[e.jsx("code",{className:"font-mono",children:"opencode auth login"},E),k])}),a.map(k=>e.jsxs("div",{"data-opencode-provider-key":k,className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:z(Re,"block flex-1 truncate text-ink"),children:k}),e.jsx("button",{type:"button",onClick:()=>f(k),disabled:h,"aria-label":t("keys.opencode.otherProviders.removeAria",{name:k}),className:"ui-button shrink-0",children:m===k?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):t("keys.row.remove")})]},k)),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{type:"text",value:i,onChange:k=>{g(null),r(k.target.value)},onKeyDown:k=>k.key==="Enter"&&y(),disabled:h,placeholder:"VENICE_API_KEY","aria-label":t("keys.opencode.otherProviders.name"),autoComplete:"off",spellCheck:!1,className:z(Re,"w-auto min-w-[min(100%,10rem)] flex-1 uppercase placeholder:normal-case")}),e.jsx("input",{type:"password",value:c,onChange:k=>{g(null),o(k.target.value)},onKeyDown:k=>k.key==="Enter"&&y(),disabled:h,placeholder:t("keys.opencode.otherProviders.keyPlaceholder"),"aria-label":t("keys.opencode.otherProviders.key"),autoComplete:"off",className:z(Re,"w-auto min-w-[min(100%,10rem)] flex-1")}),e.jsx("button",{type:"button",onClick:y,disabled:h||!i.trim()||!c.trim(),className:"ui-button ui-button-primary shrink-0",children:d?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):t("common.save")})]}),x&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:x})]})}function Xd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(null);if(!s.config?.anthropic?.configured)return null;const o=s.config.anthropic.everyClaudeBot===!0,d=()=>{a||(i(!0),c(null),U("/api/config",{method:"PUT",body:JSON.stringify({anthropic:{everyClaudeBot:!o}})}).then(u=>n({type:"configStatus",config:u})).catch(u=>c(u.message)).finally(()=>i(!1)))};return e.jsxs("div",{"data-anthropic-every-claude-bot":!0,className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("keys.anthropic.everyBot")}),e.jsx("div",{className:"text-[12px] leading-4 text-ink-secondary",children:o?t("keys.anthropic.everyBotOn"):t("keys.anthropic.everyBotOff")})]}),e.jsx(me,{checked:o,disabled:a,onClick:d,"aria-label":t("keys.anthropic.everyBot")})]}),o&&e.jsxs("p",{className:"flex gap-1.5 text-[12px] leading-4 text-warning",children:[e.jsx(Te,{size:13,className:"mt-px shrink-0","aria-hidden":"true"}),e.jsx("span",{children:t("keys.anthropic.warning")})]}),r&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:r})]})}function Qd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(""),[r,c]=l.useState(!1),[o,d]=l.useState(null),u=!!s.config?.vps?.configured,m=!a.trim()&&u;l.useEffect(()=>{i(s.config?.vps?.sshAlias??"")},[s.config?.vps?.sshAlias]);const p=()=>{r||!a.trim()&&!u||(c(!0),d(null),U("/api/config",{method:"PUT",body:JSON.stringify({vps:{sshAlias:a.trim()}})}).then(x=>{n({type:"configStatus",config:x}),i(x.vps?.sshAlias??"")}).catch(x=>d(x.message)).finally(()=>c(!1)))};return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("p",{className:"text-[12px] leading-4 text-ink-secondary",children:[t("keys.vps.descBefore"),e.jsx("a",{href:"https://github.com/milind-soni/OpenMausBot/blob/main/docs/byo-vps.md",target:"_blank",rel:"noopener noreferrer",className:"text-accent-text hover:underline",children:t("keys.vps.descLink")}),t("keys.vps.descAfter")]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{type:"text","data-key-input":!0,value:a,onChange:x=>i(x.target.value),onKeyDown:x=>x.key==="Enter"&&p(),placeholder:"my-vps","aria-label":t("keys.vps.aria"),autoComplete:"off",spellCheck:!1,className:z(Re,"w-auto min-w-[min(100%,12rem)] flex-1")}),e.jsx("button",{type:"button",onClick:p,disabled:r||!a.trim()&&!u||a.trim()===(s.config?.vps?.sshAlias??""),className:z("ui-button shrink-0",!m&&"ui-button-primary"),title:m?t("keys.vps.removeAlias"):void 0,children:r?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):m?t("keys.row.remove"):t("common.save")})]}),o&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:o})]})}function Zd(){const{state:s,dispatch:n}=W(),a=s.config?.openaiCompat?.url??"",[i,r]=l.useState(a),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=l.useRef(!1);l.useEffect(()=>{r(a)},[a]);const p=i.trim()!==a,x=()=>{m.current||!p||(m.current=!0,o(!0),u(null),U("/api/config",{method:"PUT",body:JSON.stringify({openaiCompat:{url:i.trim()}})}).then(g=>n({type:"configStatus",config:g})).catch(g=>u(g.message)).finally(()=>{m.current=!1,o(!1)}))};return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("keys.openaiCompat.url")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:"url",value:i,onChange:g=>r(g.target.value),onBlur:x,onKeyDown:g=>g.key==="Enter"&&x(),placeholder:"https://api.groq.com/openai/v1","aria-label":t("keys.openaiCompat.url"),spellCheck:!1,className:z(Re,"pr-8")}),c&&e.jsx(V,{size:13,"aria-hidden":"true",className:"absolute right-2.5 top-1/2 -translate-y-1/2 animate-spin text-ink-secondary"})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.openaiCompat.urlHint")}),d&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:d})]})}const eu="rounded-xl bg-card in-data-[settings-look=simple]:rounded-[12px] in-data-[settings-look=simple]:border-[0.5px] in-data-[settings-look=simple]:border-(--settings-edge) in-data-[settings-look=simple]:bg-menu",tu=1600,su={opencodeProviders:()=>e.jsx(Yd,{}),ollama:s=>e.jsx(Jd,{visible:s}),lmStudio:()=>e.jsx(Hd,{heading:!1}),vps:()=>e.jsx(Qd,{})},nu={anthropic:()=>e.jsx(Xd,{}),openaiCompat:()=>e.jsxs(e.Fragment,{children:[e.jsx(Zd,{}),e.jsx(Fd,{}),e.jsx(Dd,{})]}),box:()=>e.jsx(ml,{}),liveKey:()=>e.jsx(ul,{})};function gi(s,n){if(s.kind==="uses")return!1;const a=Ss(s,n);return a.configured||a.included===!0}function au({entry:s,visible:n}){const{state:a}=W(),i=l.useId(),c=Ss(s,a.config).configured?{tone:"ok",text:t("keys.connected")}:null;return e.jsxs("div",{"data-key-row":s.id,role:"group","aria-labelledby":i,className:Sa,children:[e.jsx(Ca,{entry:s,status:c,titleId:i}),e.jsx("div",{className:"flex flex-col gap-2 pl-8",children:su[s.id]?.(n)})]})}function iu({entry:s}){const{state:n,dispatch:a}=W(),i=l.useId(),r=s.opens,c=Ss(s,n.config),o=c.configured?{tone:"ok",text:t("keys.connected")}:null;return e.jsxs("div",{"data-key-row":s.id,role:"group","aria-labelledby":i,className:Sa,children:[e.jsx(Ca,{entry:s,status:o,titleId:i}),e.jsxs("div",{className:"flex flex-col gap-2 pl-8",children:[c.configured&&e.jsx("div",{className:"flex",children:e.jsx(dl,{saved:c,label:t(s.labelKey)})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[s.whereKey&&e.jsx("span",{className:"min-w-0 flex-1 text-[12px] leading-4 text-ink-secondary",children:t(s.whereKey)}),r&&e.jsx("button",{type:"button","data-key-open":!0,className:"ui-button shrink-0",onClick:()=>a({type:"toggleAppSettings",open:!0,section:r}),children:t("keys.row.open")})]})]})]})}function ru({entry:s,visible:n}){return s.kind==="uses"&&s.uses?e.jsx(an,{id:s.uses,row:s.id}):s.kind==="panel"?e.jsx(au,{entry:s,visible:n}):s.kind==="elsewhere"?e.jsx(iu,{entry:s}):e.jsx(an,{id:s.id,children:nu[s.id]?.()})}function lu({id:s,rows:n,open:a,onToggle:i}){const{state:r}=W(),c=ns.find(m=>m.id===s),o=l.useId(),d=l.useId(),u=n.filter(m=>gi(m,r.config)).length;return e.jsxs("section",{"data-keys-section":s,"aria-labelledby":o,className:eu,children:[e.jsxs("button",{type:"button","aria-expanded":a,"aria-controls":d,onClick:i,className:"flex w-full cursor-pointer items-center gap-3 rounded-[inherit] px-4 py-2.5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/60",children:[e.jsxs("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[e.jsx("span",{id:o,className:"text-[14px] font-medium leading-5 text-ink",children:t(c.titleKey)}),e.jsx("span",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t(c.purposeKey)})]}),u>0&&e.jsx("span",{className:"shrink-0 text-[12px] leading-4 text-ink-secondary",children:t("keys.section.connected",{count:u})}),e.jsx(Is,{size:14,"aria-hidden":"true",className:z("shrink-0 text-ink-secondary transition-transform motion-reduce:transition-none",a&&"rotate-90")})]}),e.jsxs("div",{id:d,hidden:!a,className:"flex flex-col gap-0.5 border-t border-hairline/40 px-1 py-1.5 in-data-[settings-look=simple]:border-t-[0.5px] in-data-[settings-look=simple]:border-(--settings-edge)",children:[n.map(m=>e.jsx(ru,{entry:m,visible:a},m.id)),s==="voice"&&e.jsx(zd,{})]})]})}function ou(s,n,a){const i=n.row?s?.querySelector(`[data-key-row="${n.row}"]`):s?.querySelector(`[data-keys-section="${a}"]`);if(!i||i.closest("[hidden]"))return!1;const r=Od(i);return r&&Rs(r,i,n.row?"center":"start",16),n.row&&(i.querySelector("[data-key-input], [data-key-replace], [data-key-own], [data-key-open], input, button")?.focus({preventScroll:!0}),i.setAttribute("data-key-highlight",""),window.setTimeout(()=>i.removeAttribute("data-key-highlight"),tu)),!0}function cu(){const{state:s}=W(),[n,a]=l.useState(""),[i,r]=l.useState(()=>new Set(ns.filter(x=>x.id==="ai"||tt.some(g=>g.section===x.id&&gi(g,s.config))).map(x=>x.id))),c=l.useRef(null),o=wa(),d=n.trim().toLowerCase();l.useEffect(()=>{if(!o)return;const x=tt.find(y=>y.id===o.row)?.section??"ai";a(""),r(y=>y.has(x)?y:new Set([...y,x]));let g=0,h=0;const b=()=>{ou(c.current,o,x)||++h>60?cl(o):g=window.requestAnimationFrame(b)};return g=window.requestAnimationFrame(b),()=>window.cancelAnimationFrame(g)},[o]);const u=s.config?.live?.provider==="azure",m=tt.filter(x=>ws(x,d)&&!(u&&x.id==="liveCalls")),p=ns.flatMap(x=>{const g=m.filter(h=>h.section===x.id);return g.length>0?[{id:x.id,rows:g}]:[]});return e.jsxs("div",{ref:c,"data-keys-page":!0,className:"flex flex-col gap-4",children:[e.jsx("p",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t("settings.connections.subtitle")}),e.jsxs("div",{className:"flex h-8 items-center gap-2 rounded-lg bg-ink/[0.05] px-[9px] focus-within:ring-2 focus-within:ring-focus/60",children:[e.jsx(lt,{size:15,"aria-hidden":"true",className:"shrink-0 text-ink-secondary"}),e.jsx("input",{"data-keys-search":!0,type:"text",value:n,onChange:x=>a(x.target.value),onKeyDown:x=>{x.key!=="Escape"||!n||(x.preventDefault(),x.stopPropagation(),a(""))},placeholder:t("keys.search.placeholder"),"aria-label":t("keys.search.aria"),autoComplete:"off",spellCheck:!1,className:"w-full min-w-0 bg-transparent text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"})]}),p.length===0?e.jsx("p",{"data-keys-empty":!0,className:"px-1 text-[13px] leading-[18px] text-ink-secondary",children:t("keys.search.none",{query:n.trim()})}):p.map(({id:x,rows:g})=>e.jsx(lu,{id:x,rows:g,open:d!==""||i.has(x),onToggle:()=>r(h=>{const b=new Set(h);return b.has(x)?b.delete(x):b.add(x),b})},x))]})}function hi({simple:s=!1}){return null}function fi({simple:s=!1}){const n=window.ogb?.openAtLogin,[a,i]=l.useState(null),[r,c]=l.useState(!1),[o,d]=l.useState(!1);if(l.useEffect(()=>{let m=!0;return n?.state().then(p=>{m&&i(p)}).catch(()=>{}),()=>{m=!1}},[n]),!n||!a?.available)return null;const u=m=>{c(!0),d(!1),n.set(m).then(i,()=>d(!0)).finally(()=>c(!1))};return e.jsx(de,{title:t("settings.openAtLogin.title"),subtitle:t(s?"settings.simple.openAtLogin":"settings.openAtLogin.subtitle"),message:o?e.jsx("span",{role:"alert",className:"text-danger",children:t("settings.openAtLogin.failed")}):void 0,children:e.jsx(me,{checked:a.on,disabled:r,"aria-label":t("settings.openAtLogin.title"),onClick:()=>u(!a.on)})})}function du(s=typeof window>"u"?void 0:window.ogb){return s?.platform==="darwin"&&s.talkShortcut?["talk","voice","shortcut","hotkey","hold to talk","push to talk","quick asks"]:[]}function bi(){const s=window.ogb?.talkShortcut,[n,a]=l.useState(null),[i,r]=l.useState(!1),[c,o]=l.useState(!1);if(l.useEffect(()=>{let x=!0;return s?.state().then(g=>{x&&a(g)}).catch(()=>{}),()=>{x=!1}},[s]),!s||!n?.available)return null;const d=n.keys.find(x=>x.id===n.key)?.label??"",u=x=>{r(!0),o(!1),s.set(x).then(a,()=>o(!0)).finally(()=>r(!1))},m=c?t("settings.talk.failed"):n.enabled&&n.taken?t("settings.talk.taken",{key:d}):null,p=e.jsxs(e.Fragment,{children:[n.enabled&&e.jsx(pe,{size:"sm",className:"w-full max-w-[240px]",value:n.key,disabled:i,"aria-label":t("settings.talk.keyAria"),onChange:x=>u({key:x.target.value}),children:n.keys.map(x=>e.jsx("option",{value:x.id,children:x.label},x.id))}),m&&e.jsx("div",{role:"alert",className:n.enabled?"mt-2 text-danger":"text-danger",children:m})]});return e.jsx(de,{title:t("settings.talk.title"),subtitle:t("settings.talk.subtitle",{key:d}),message:n.enabled||m?p:null,children:e.jsx(me,{checked:n.enabled,disabled:i,"aria-label":t("settings.talk.aria"),onClick:()=>u({enabled:!n.enabled})})})}const Ht=s=>s===0||s>=1024*1024?`${Math.round(s/(1024*1024))} MB`:`${Math.ceil(s/1024)} KB`;function yi(){const[s,n]=l.useState(null),[a,i]=l.useState(!1),[r,c]=l.useState(!1),[o,d]=l.useState(null);if(l.useEffect(()=>{let m=!0;return U("/api/attachment-storage").then(p=>{m&&n(p)}).catch(()=>{}),()=>{m=!1}},[]),!s)return null;const u=async()=>{c(!0),d(null);try{const m=await U("/api/attachment-storage",{method:"POST"});n(m);const p=t("settings.attachments.cleared",{count:m.removed,freed:Ht(m.freedBytes)});d(m.failed>0?{kind:"error",message:`${p} ${t("settings.attachments.failed",{count:m.failed})}`}:{kind:"success",message:p})}catch(m){d({kind:"error",message:m instanceof Error?m.message:String(m)})}finally{c(!1),i(!1)}};return e.jsx(de,{title:t("settings.attachments.title"),subtitle:e.jsxs(e.Fragment,{children:[e.jsx("span",{"data-attachments-used":!0,className:"block",children:t("settings.attachments.used",{used:Ht(s.usedBytes),max:Ht(s.maxBytes)})}),e.jsx("span",{className:"block",children:t(a?"settings.attachments.confirmText":"settings.attachments.help")})]}),message:o&&e.jsx("p",{role:o.kind==="error"?"alert":"status",className:z(o.kind==="error"?"text-danger":"text-success"),children:o.message}),children:e.jsx("div",{className:"flex flex-wrap gap-2",children:a?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:()=>i(!1),disabled:r,className:"ui-button",children:t("settings.attachments.cancel")}),e.jsx("button",{type:"button",onClick:()=>{u()},disabled:r,className:"ui-button text-danger",children:r?t("settings.attachments.clearing"):t("settings.attachments.confirm")})]}):e.jsx("button",{type:"button",onClick:()=>{d(null),i(!0)},className:"ui-button",children:t("settings.attachments.clear")})})})}function vi({simple:s=!1}){const[n,a]=l.useState(!1),[i,r]=l.useState(null),[c,o]=l.useState(null),d=async()=>{if(!(!window.ogb?.exportDiagnostics||n)){a(!0),r(null);try{const p=await window.ogb.exportDiagnostics();p&&r({kind:"success",message:t("settings.diagnostics.saved",{path:p})})}catch(p){r({kind:"error",message:p instanceof Error?p.message:String(p)})}finally{a(!1)}}},u=async()=>{if(window.ogb?.openLogsFolder){r(null);try{const p=await window.ogb.openLogsFolder();o(p.folder),p.opened||r({kind:"error",message:t("settings.diagnostics.openFailed",{folder:p.folder})})}catch(p){r({kind:"error",message:p instanceof Error?p.message:String(p)})}}},m=!!window.ogb?.exportDiagnostics;return e.jsx(de,{title:t("settings.diagnostics.title"),subtitle:t(s?"settings.simple.diagnostics":"settings.diagnostics.subtitle"),message:e.jsxs(e.Fragment,{children:[c&&i?.kind!=="error"&&e.jsx("p",{role:"status","data-logs-folder":!0,className:"break-all text-ink-secondary",children:t("settings.diagnostics.logsAt",{folder:c})}),i&&e.jsx("p",{role:i.kind==="error"?"alert":"status",className:z("break-all",i.kind==="error"?"text-danger":"text-success"),children:i.message}),e.jsx("p",{"data-logs-help":!0,className:"text-ink-tertiary",children:t(m?"settings.diagnostics.logsHelp":"settings.diagnostics.elsewhere")})]}),children:m&&e.jsxs("div",{className:"flex flex-wrap gap-2",children:[window.ogb?.openLogsFolder&&e.jsx("button",{type:"button",onClick:()=>{u()},className:"ui-button",children:t("settings.diagnostics.openLogs")}),e.jsx("button",{onClick:()=>{d()},disabled:n,"aria-label":t("settings.diagnostics.aria"),className:"ui-button",children:n?t("settings.diagnostics.exporting"):t("settings.diagnostics.export")})]})})}const uu="https://dash.cloudflare.com/profile/api-tokens",mu=/^[0-9a-f]{32}$/i,jn="w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none";function pu({failureText:s}){const{state:n,dispatch:a}=W(),i=n.config?.helpers,r=i?.own.workersAi===!0,c=i?.workersAiAccountId??"",[o,d]=l.useState(null),[u,m]=l.useState(""),[p,x]=l.useState(!1),[g,h]=l.useState(!1),[b,y]=l.useState(null),[f,k]=l.useState(null),E=(o??c).trim(),N=u.trim(),w=!N&&r&&o===null,I=o!==null&&E!==c,j=A=>a({type:"configStatus",config:A}),O=async()=>{if(!(p||!N&&!r&&!I)){if(N&&!mu.test(E))return y(t("decider.workersAi.needsAccount"));x(!0),y(null),k(null);try{(I||N&&!c)&&j(await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{workersAiAccountId:E}})})),(N||w)&&j(window.ogb?.setCredential?await window.ogb.setCredential("workersAiToken",N):await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{workersAiToken:N}})})),m(""),d(null)}catch(A){y(A instanceof Error?A.message:String(A))}finally{x(!1)}}},v=async()=>{if(!(g||p||!N&&!r)){h(!0),k(null),y(null);try{const A=await U("/api/decider/test",{method:"POST",body:JSON.stringify({provider:"workersai",...N?{key:N,accountId:E}:{}})}),P=A.extraction?[t(A.extraction.ok?"decider.test.extractionOk":"decider.test.extractionFailed")]:[];k(A.ok?{ok:A.extraction?.ok!==!1,text:[t("decider.workersAi.test.ok",{ms:String(A.latencyMs)}),...P].join(" ")}:{ok:!1,text:s(A)})}catch(A){k({ok:!1,text:A instanceof Error?A.message:String(A)})}finally{h(!1)}}};return e.jsxs(Y,{title:t("decider.workersAi.title"),children:[e.jsx("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:t("decider.workersAi.detail")}),r&&e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-success",children:[e.jsx("span",{className:"size-1.5 rounded-full bg-success"}),e.jsx("span",{children:t("decider.status.connected")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("input",{type:"text","data-testid":"workers-ai-account",value:o??c,onChange:A=>{k(null),y(null),d(A.target.value)},disabled:p,placeholder:t("decider.workersAi.accountIdPlaceholder"),"aria-label":t("decider.workersAi.accountId"),autoComplete:"off",spellCheck:!1,className:jn}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password","data-testid":"workers-ai-token",value:u,onChange:A=>{k(null),y(null),m(A.target.value)},onKeyDown:A=>A.key==="Enter"&&void O(),disabled:p,placeholder:r?t("keys.replace"):t("decider.workersAi.tokenPlaceholder"),"aria-label":t("decider.workersAi.token"),autoComplete:"off",spellCheck:!1,className:jn}),e.jsx("button",{type:"button","data-testid":"workers-ai-save",onClick:()=>{O()},disabled:p||!N&&!r&&!I,title:w?t("keys.removeKey"):t("common.save"),className:z("flex w-[72px] shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control py-2 text-[13px] hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",w?"text-danger":"text-ink"),children:p?e.jsx(V,{size:13,className:"animate-spin"}):w?t("keys.clear"):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})}),e.jsx("button",{type:"button","data-testid":"workers-ai-test",onClick:()=>{v()},disabled:g||p||!N&&!r,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:g?t("keys.testing"):t("keys.test")})]})]}),b&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:b}),f&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",f.ok?"text-success":"text-danger"),children:f.text}),e.jsxs("a",{href:uu,target:"_blank",rel:"noopener noreferrer",className:"mt-2 inline-flex cursor-pointer items-center gap-1 text-[12px] text-accent hover:underline",children:[t("decider.workersAi.getKey"),e.jsx(ot,{size:11,"aria-hidden":"true"})]})]})}const xu={jev:"https://typesafe.ai",openrouter:"https://openrouter.ai/keys"},gu=1500,Ts={rejected:"decider.error.rejected",unreachable:"decider.error.unreachable",timeout:"decider.error.timeout",rate_limited:"decider.error.rateLimited",overloaded:"decider.error.overloaded",malformed:"decider.error.malformed",no_key:"decider.error.noKey",misconfigured:"decider.error.misconfigured"},kn={rejected:"decider.included.error.rejected",rate_limited:"decider.included.error.limited"},hu={...Ts,rejected:"decider.openrouter.error.rejected",unreachable:"decider.openrouter.error.unreachable",timeout:"decider.openrouter.error.timeout",rate_limited:"decider.openrouter.error.rateLimited",overloaded:"decider.openrouter.error.overloaded",malformed:"decider.openrouter.error.malformed"},fu={...Ts,rejected:"decider.workersAi.error.rejected",unreachable:"decider.workersAi.error.unreachable",timeout:"decider.workersAi.error.timeout",rate_limited:"decider.workersAi.error.rateLimited",overloaded:"decider.workersAi.error.overloaded",malformed:"decider.workersAi.error.malformed"},Wt={jev:"decider.status.byJev",workersai:"decider.status.byWorkersAi",openrouter:"decider.status.byOpenRouter"};function bu(s){const n=s?.decider,a=s?.helpers?.extraction,i=n?.configured?n.included?t("decider.status.byCloud"):t(Wt[n.provider]??Wt.jev):t("decider.status.notSetUp"),r=a?.provider?a.included?t("decider.status.byCloud"):t(Wt[a.provider]):t("decider.status.notSetUp");return t("decider.status.line",{decisions:i,extraction:r})}function Nn(s,n=!1,a="jev"){if(a==="workersai"){if(s.reason==="http_error")return t("decider.workersAi.error.http",{status:String(s.status??"?")});const r=fu[s.reason];return r?t(r):t("decider.error.other")}if(a==="openrouter"){if(s.reason==="http_error"&&s.status===402)return t("decider.openrouter.error.credits");if(s.reason==="http_error")return t("decider.openrouter.error.http",{status:String(s.status??"?")});const r=hu[s.reason];return r?t(r):t("decider.error.other")}if(n&&s.reason==="http_error"&&s.status===402)return t("decider.included.error.subscription");if(n&&kn[s.reason])return t(kn[s.reason]);if(s.reason==="http_error")return t("decider.error.http",{status:String(s.status??"?")});const i=Ts[s.reason];return i?t(i):t("decider.error.other")}const yu=["decider.jobs.browserClicks","decider.jobs.toolSelection","decider.jobs.placement"];function vu(){const{state:s,dispatch:n}=W(),a=s.config?.decider,i=a?.provider==="openrouter"?"openrouter":"jev",r=i==="openrouter",c=a?.configured??!1,o=c&&a?.included===!0,d=r&&c&&a?.keySource==="shared",u=r&&a?.sharedKey===!0,m=c&&!o&&!d,p=a?.enabled??!1,x=a?.jobs.roomRouting??!0,[g,h]=l.useState(""),[b,y]=l.useState(!1),[f,k]=l.useState(!1),[E,N]=l.useState(!1),[w,I]=l.useState(null),[j,O]=l.useState(null),[v,A]=l.useState(null),P=g.trim(),F=!P&&m,se=!r||o?null:d?"decider.openrouter.status.sharedHint":c?u?"decider.openrouter.status.ownFallbackHint":null:"decider.openrouter.status.notConnectedHint",ne=T=>n({type:"configStatus",config:T}),X=async T=>{if(!f){k(!0),I(null);try{ne(await U("/api/config",{method:"PUT",body:JSON.stringify({decider:T})}))}catch(B){I(B instanceof Error?B.message:String(B))}finally{k(!1)}}};l.useEffect(()=>{if(!r||v)return;let T=!1;return U("/api/decider/models").then(B=>{T||A(B)},()=>{}),()=>{T=!0}},[r,v]);const S=T=>{h(""),O(null),X(T)},q=async()=>{if(!(b||!P&&!m)){y(!0),I(null),O(null);try{const T=window.ogb?.setCredential?await window.ogb.setCredential(r?"openrouterDeciderKey":"jevApiKey",P):await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{[r?"openrouterKey":"key"]:P}})});ne(T),h("")}catch(T){I(T instanceof Error?T.message:String(T))}finally{y(!1)}}},ee=async()=>{if(E||b||!P&&!c)return;N(!0),O(null),I(null);const T=!P&&o,B=!P&&d;try{const R=await U("/api/decider/test",{method:"POST",body:JSON.stringify(P?{key:P}:{})});O(R.ok?{ok:!0,text:r?[t(B?"decider.openrouter.test.okShared":"decider.openrouter.test.ok",{ms:String(R.latencyMs)}),...R.latencyMs>gu?[t("decider.test.slow")]:[]].join(" "):t("decider.test.ok",{ms:String(R.latencyMs)})}:{ok:!1,text:Nn(R,T,i)})}catch(R){O({ok:!1,text:R instanceof Error?R.message:String(R)})}finally{N(!1)}};return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"space-y-2 px-4",children:[e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("decider.intro")}),e.jsx("p",{role:"status","data-testid":"helpers-status",className:"text-[13px] font-medium text-ink",children:bu(s.config)})]}),e.jsx(pu,{failureText:T=>Nn(T,!1,"workersai")}),e.jsx(de,{title:t("decider.provider.label"),children:e.jsxs(pe,{className:"w-48","data-testid":"decider-provider",value:i,onChange:T=>S({provider:T.target.value==="openrouter"?"openrouter":"jev"}),disabled:f||!s.config,"aria-label":t("decider.provider.label"),children:[e.jsx("option",{value:"jev",children:t("decider.provider.jev")}),e.jsx("option",{value:"openrouter",children:t("decider.provider.openrouter")})]})}),r&&e.jsx(de,{title:t("decider.model.label"),subtitle:v?.source==="builtin"?t("decider.model.builtinNote"):void 0,children:e.jsxs(pe,{className:"w-64 max-w-full","data-testid":"decider-model",value:a?.model??"",onChange:T=>S({openrouterModel:T.target.value,openrouterApi:v?.models.find(B=>B.id===T.target.value)?.api??"chat"}),disabled:f,"aria-label":t("decider.model.label"),children:[a?.model&&!v?.models.some(T=>T.id===a.model)&&e.jsx("option",{value:a.model,children:a.model}),["recommended","more"].map(T=>{const B=v?.models.filter(R=>R.group===T)??[];return B.length>0&&e.jsx("optgroup",{label:t(T==="recommended"?"decider.model.recommended":"decider.model.more"),children:B.map(R=>e.jsx("option",{value:R.id,children:R.name},R.id))},T)})]})}),e.jsx(de,{title:t(r?"decider.openrouter.master":"decider.master"),subtitle:c?void 0:t(r?"decider.masterNeedsKey.openrouter":"decider.masterNeedsKey"),children:e.jsx(me,{"data-testid":"decider-master","aria-label":t(r?"decider.openrouter.master":"decider.master"),checked:p,disabled:!c||f||!s.config,onClick:()=>{X({enabled:!p})},className:"cursor-pointer"})}),e.jsxs(Y,{title:t(r?"decider.openrouter.key.label":"decider.key.label"),children:[e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx("span",{className:z("size-1.5 rounded-full",c?"bg-success":"bg-raised-hover")}),e.jsx("span",{className:c?"text-success":void 0,children:o?t("keys.includedWithCloudPro"):d?t("decider.openrouter.status.shared"):c?t(u?"decider.openrouter.status.own":"decider.status.connected"):t("decider.status.notConnected")})]}),se&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[t(se),!m&&e.jsxs(e.Fragment,{children:[" ",e.jsx("button",{type:"button","data-testid":"decider-manage-keys",onClick:()=>n(as("openrouter")),className:"cursor-pointer text-accent hover:underline",children:t("decider.openrouter.key.manageLink")})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password",value:g,onChange:T=>{O(null),I(null),h(T.target.value)},onKeyDown:T=>T.key==="Enter"&&void q(),disabled:b,placeholder:m?t("keys.replace"):t(d?"decider.openrouter.key.overridePlaceholder":r?"decider.openrouter.key.placeholder":"decider.key.placeholder"),"aria-label":t(r?"decider.openrouter.key.label":"decider.key.label"),autoComplete:"off",spellCheck:!1,className:"w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),e.jsx("button",{type:"button","data-testid":"decider-save",onClick:()=>{q()},disabled:b||!P&&!m,title:F?t("keys.removeKey"):t("common.save"),className:z("flex w-[72px] shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control py-2 text-[13px] hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",F?"text-danger":"text-ink"),children:b?e.jsx(V,{size:13,className:"animate-spin"}):F?t("keys.clear"):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})}),e.jsx("button",{type:"button","data-testid":"decider-test",onClick:()=>{ee()},disabled:E||b||!P&&!c,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:E?t("keys.testing"):t("keys.test")})]}),w&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:w}),j&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",j.ok?"text-success":"text-danger"),children:j.text}),!d&&e.jsxs("a",{href:xu[i],target:"_blank",rel:"noopener noreferrer",className:"mt-2 inline-flex cursor-pointer items-center gap-1 text-[12px] text-accent hover:underline",children:[t(r?"decider.openrouter.key.getKey":"decider.key.getKey"),e.jsx(ot,{size:11,"aria-hidden":"true"})]})]}),e.jsx(Y,{title:t("decider.jobs.title"),children:e.jsxs("ul",{className:"flex flex-col",children:[e.jsxs("li",{className:"flex items-start justify-between gap-4 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[13px] font-medium text-ink",children:t("decider.jobs.roomRouting")}),e.jsx("div",{className:"mt-0.5 text-[12px] leading-relaxed text-ink-secondary",children:t("decider.jobs.roomRoutingDetail")})]}),e.jsx(me,{"data-testid":"decider-job-roomRouting","aria-label":t("decider.jobs.roomRouting"),checked:p&&x,disabled:!p||f,onClick:()=>{X({jobs:{roomRouting:!x}})},className:"cursor-pointer"})]}),yu.map(T=>e.jsxs("li",{"data-testid":"decider-coming-soon","aria-disabled":"true",className:"flex items-center justify-between gap-4 border-t border-hairline/40 py-2 opacity-50",children:[e.jsx("span",{className:"text-[13px] text-ink-secondary",children:t(T)}),e.jsx("span",{className:"rounded bg-control px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-ink-secondary",children:t("decider.jobs.comingSoon")})]},T))]})})]})}const ju=["openai","xai","gemini","openrouter","custom"],ku=4,ji={openai:"gpt-image-2",xai:"grok-imagine-image-2.0",gemini:"gemini-2.5-flash-image",openrouter:"google/gemini-2.5-flash-image",custom:""},Nu={openai:[{id:"gpt-image-2",name:"GPT Image 2"},{id:"gpt-image-1",name:"GPT Image 1"},{id:"gpt-image-1-mini",name:"GPT Image 1 Mini"}],xai:[{id:"grok-imagine-image-2.0",name:"Grok Imagine Image 2.0"}],gemini:[{id:"gemini-2.5-flash-image",name:"Nano Banana (Gemini 2.5 Flash Image)"}],openrouter:[{id:"google/gemini-2.5-flash-image",name:"Google: Nano Banana (Gemini 2.5 Flash Image)"},{id:"google/gemini-3.1-flash-image",name:"Google: Nano Banana 2 (Gemini 3.1 Flash Image)"},{id:"google/gemini-3-pro-image",name:"Google: Nano Banana Pro (Gemini 3 Pro Image)"},{id:"openai/gpt-image-2",name:"OpenAI: GPT Image 2"},{id:"black-forest-labs/flux-3-image",name:"Black Forest Labs: FLUX 3 Image"},{id:"bytedance-seed/seedream-5-0-pro",name:"ByteDance Seed: Seedream 5.0 Pro"},{id:"x-ai/grok-imagine-image-2.0",name:"xAI: Grok Imagine Image 2.0"},{id:"qwen/qwen-image-3",name:"Qwen: Qwen Image 3"}],custom:[]};function wu(s){const n="Use an HTTPS API base URL, or HTTP for a local router, without passwords, query parameters or fragments";let a;try{a=new URL(s.trim())}catch{throw new Error(n)}if(s.length>2048||a.username||a.password||a.search||a.hash)throw new Error(n);const i=a.hostname.toLowerCase(),r=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(i),c=i==="localhost"||i.endsWith(".localhost")||i.endsWith(".local")||i==="host.docker.internal"||i==="host.containers.internal"||i==="[::1]"||/^\[f[cd][0-9a-f]{2}:/.test(i)||r&&(Number(r[1])===127||Number(r[1])===10||Number(r[1])===192&&Number(r[2])===168||Number(r[1])===172&&Number(r[2])>=16&&Number(r[2])<=31);if(a.protocol!=="https:"&&!(a.protocol==="http:"&&c))throw new Error(n);if(r&&(Number(r[1])===0||Number(r[1])===169&&Number(r[2])===254))throw new Error(n);return a.pathname=a.pathname.replace(/\/+$/,"").replace(/\/images\/generations$/,""),a.toString().replace(/\/+$/,"")}const jt={openai:"OpenAI",xai:"Grok (xAI)",gemini:"Gemini",openrouter:"OpenRouter",custom:"Custom"},Su={openai:{credential:"openaiImageApiKey",patch:s=>({imageGen:{key:s}}),label:"imageGen.key.openai"},gemini:{credential:"geminiImageApiKey",patch:s=>({imageGen:{geminiKey:s}}),label:"imageGen.key.gemini"},custom:{credential:"customImageApiKey",patch:s=>({imageGen:{customApiKey:s}}),label:"imageGen.key.custom"}},Cu={xai:{label:"imageGen.key.xai",note:"imageGen.key.sharedXai"},openrouter:{label:"imageGen.key.openrouter",note:"imageGen.key.sharedOpenrouter"}},wn={openai:"https://platform.openai.com/api-keys",gemini:"https://aistudio.google.com/apikey",xai:"https://console.x.ai",openrouter:"https://openrouter.ai/keys"},ds="w-full min-w-0 rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none disabled:opacity-50",Sn="flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",Gt="\0other";function Eu(s,n){return n.ok?n.freeTier?{ok:!1,text:t("imageGen.test.noCredit")}:{ok:!0,text:t(s==="openrouter"?"imageGen.test.okOpenrouter":"imageGen.test.ok")}:n.reason==="model_missing"?{ok:!1,text:t("imageGen.test.modelMissing",{model:n.model})}:n.reason==="rejected"?{ok:!1,text:t("imageGen.test.rejected")}:n.reason==="unreachable"?{ok:!1,text:t("imageGen.test.unreachable")}:n.reason==="no_key"?{ok:!1,text:t("imageGen.key.missing")}:n.reason==="no_url"?{ok:!1,text:t("imageGen.test.noUrl")}:{ok:!1,text:t("imageGen.test.unexpected")}}function Au(s,n){return n==="openai"?s?.openaiConfigured===!0:n==="xai"?s?.xaiConfigured===!0:n==="gemini"?s?.geminiConfigured===!0:n==="openrouter"?s?.openrouterConfigured===!0:s?.customKeyConfigured===!0}function Iu(){const{state:s,dispatch:n}=W(),a=s.config?.imageGen,i=a?.primary??{provider:a?.provider??"openai",model:a?.model??ji.openai,configured:a?.configured===!0},r=a?.fallback??null,[c,o]=l.useState(!1),[d,u]=l.useState(null),[m,p]=l.useState(null),x=i.provider==="openrouter"||r?.provider==="openrouter";l.useEffect(()=>{if(!x||m)return;let y=!1;return U("/api/images/openrouter-models").then(f=>{y||p(Array.isArray(f?.models)?f:{source:"builtin",models:[]})},()=>{y||p({source:"builtin",models:[]})}),()=>{y=!0}},[x,m]);const g=async y=>{o(!0),u(null);try{const f=await U("/api/config",{method:"PUT",body:JSON.stringify(y)});n({type:"configStatus",config:f})}catch(f){u(f instanceof Error?f.message:String(f))}finally{o(!1)}},h=(y,f)=>{if(y==="fallback"&&f==="")return void g({imageGen:{fallback:null}});const k=f,E=y==="primary"&&r?.provider===k;g({imageGen:{[y]:{provider:k},...E?{fallback:null}:{}}})},b=[i.provider,...r?[r.provider]:[]].filter((y,f,k)=>k.indexOf(y)===f);return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"space-y-2 px-4",children:[e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("imageGen.intro")}),e.jsxs("p",{role:"status","data-testid":"image-gen-status",className:"flex items-center gap-2 text-[13px] font-medium text-ink",children:[e.jsx("span",{className:z("size-1.5 shrink-0 rounded-full",a?.ready?i.configured?"bg-success":"bg-warning":"bg-raised-hover")}),a?.ready?i.configured?t("imageGen.status.ready",{provider:jt[i.provider]}):t("imageGen.status.backupOnly",{provider:jt[r.provider]}):t("imageGen.status.notReady")]})]}),e.jsx(Cn,{slot:"primary",provider:i.provider,model:i.model,configured:i.configured,openrouterModels:m,disabled:c||!s.config,onProvider:h,onModel:y=>{g({imageGen:{primary:{provider:i.provider,model:y}}})}}),e.jsx(Cn,{slot:"fallback",provider:r?.provider??null,model:r?.model??"",configured:r?.configured===!0,exclude:i.provider,openrouterModels:m,disabled:c||!s.config,onProvider:h,onModel:y=>r&&void g({imageGen:{fallback:{provider:r.provider,model:y}}})}),e.jsx(de,{title:t("imageGen.maxPerTurn.label"),subtitle:t("imageGen.maxPerTurn.help"),children:e.jsx(pe,{className:"w-20","data-testid":"image-gen-max",value:String(a?.maxPerTurn??ku),onChange:y=>{g({imageGen:{maxPerTurn:Number(y.target.value)}})},disabled:c||!s.config,"aria-label":t("imageGen.maxPerTurn.label"),children:Array.from({length:10},(y,f)=>f+1).map(y=>e.jsx("option",{value:y,children:y},y))})}),d&&e.jsx("p",{role:"alert",className:"px-4 text-[12px] text-danger",children:d}),b.map(y=>e.jsx(Ru,{provider:y,status:a},y))]})}function Cn({slot:s,provider:n,model:a,configured:i,exclude:r,openrouterModels:c,disabled:o,onProvider:d,onModel:u}){const m=t(s==="primary"?"imageGen.primary.label":"imageGen.fallback.label");return e.jsxs(e.Fragment,{children:[e.jsx(de,{title:m,subtitle:n&&!i?t(n==="custom"?"imageGen.slot.needsConnection":"imageGen.slot.needsKey"):t(s==="primary"?"imageGen.primary.help":"imageGen.fallback.help"),children:e.jsxs(pe,{className:"w-48","data-testid":`image-gen-${s}`,value:n??"",onChange:p=>d(s,p.target.value),disabled:o,"aria-label":m,children:[s==="fallback"&&e.jsx("option",{value:"",children:t("imageGen.fallback.none")}),ju.filter(p=>p!==r).map(p=>e.jsx("option",{value:p,children:jt[p]},p))]})}),n&&e.jsx(Pu,{slot:s,slotLabel:m,provider:n,model:a,openrouterModels:c,disabled:o,onModel:u})]})}function Pu({slot:s,slotLabel:n,provider:a,model:i,openrouterModels:r,disabled:c,onModel:o}){const[d,u]=l.useState(null),p=(a==="openrouter"&&r?.source==="openrouter"?r.models:null)??Nu[a].map(b=>({...b,group:"recommended"})),x=d!==null||p.length===0,g=()=>{d!==null&&(u(null),d.trim()&&d.trim()!==i&&o(d.trim()))},h=b=>{if(b===Gt)return u(i);u(null),o(b)};return e.jsx(de,{title:t("decider.model.label"),subtitle:a==="openrouter"&&r?.source==="builtin"?t("decider.model.builtinNote"):void 0,children:e.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[p.length>0&&e.jsxs(pe,{className:"w-64 max-w-full","data-testid":`image-gen-${s}-model`,value:x?Gt:i,onChange:b=>h(b.target.value),disabled:c,"aria-label":t("imageGen.model.label",{slot:n}),children:[i&&!p.some(b=>b.id===i)&&e.jsx("option",{value:i,children:i}),["recommended","more"].map(b=>{const y=p.filter(f=>f.group===b);return y.length>0&&e.jsx("optgroup",{label:t(b==="recommended"?"decider.model.recommended":"decider.model.more"),children:y.map(f=>e.jsx("option",{value:f.id,children:f.name},f.id))},b)}),e.jsx("option",{value:Gt,children:t("imageGen.model.other")})]}),x&&e.jsx("input",{value:d??i,onChange:b=>u(b.target.value),onBlur:g,onKeyDown:b=>b.key==="Enter"&&g(),disabled:c,placeholder:ji[a]||t("imageGen.model.placeholder"),"aria-label":t("imageGen.model.idLabel",{slot:n}),autoComplete:"off",spellCheck:!1,className:z(ds,"w-64 max-w-full")})]})})}function Ru({provider:s,status:n}){const{dispatch:a}=W(),[i,r]=l.useState(""),[c,o]=l.useState(null),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(!1),[h,b]=l.useState(null),y=s==="openrouter"?[n?.primary,n?.fallback].filter(P=>P?.provider===s).map(P=>P?.model).join(" "):"",f=h?.models===y?h:null,k=P=>b(P&&{...P,models:y}),E=Au(n,s),N=s==="openai"||s==="gemini"||s==="custom"?Su[s]:null,w=s==="xai"||s==="openrouter"?Cu[s]:null,I=c??n?.customUrl??"",j=async P=>{u(!0),p(null),k(null);try{a({type:"configStatus",config:await P()}),r(""),o(null)}catch(F){p(F instanceof Error?F.message:String(F))}finally{u(!1)}},O=P=>j(async()=>s==="xai"||s==="openrouter"?pl(s,P,!1):window.ogb?.setCredential&&N?window.ogb.setCredential(N.credential,P):U("/api/config",{method:"PUT",body:JSON.stringify(N.patch(P))})),v=()=>j(async()=>{const P=I.trim()?wu(I.trim()):"";return U("/api/config",{method:"PUT",body:JSON.stringify({imageGen:{customUrl:P}})})}),A=async()=>{g(!0),k(null);try{k(Eu(s,await U("/api/images/test",{method:"POST",body:JSON.stringify({provider:s})})))}catch(P){k({ok:!1,text:P instanceof Error?P.message:String(P)})}finally{g(!1)}};return e.jsxs(Y,{title:jt[s],children:[e.jsx(Tu,{configured:E,optional:s==="custom"}),w&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[t(w.note)," ",e.jsx("button",{type:"button",onClick:()=>a({type:"toggleAppSettings",open:!0,section:"connections"}),className:"cursor-pointer text-accent hover:underline",children:t("imageGen.key.manage")})]}),s==="custom"&&e.jsxs("div",{className:"mb-2 flex gap-2",children:[e.jsx("input",{type:"url",value:I,onChange:P=>o(P.target.value),onKeyDown:P=>P.key==="Enter"&&void v(),disabled:d,placeholder:"http://127.0.0.1:4000/v1","aria-label":t("imageGen.custom.url"),autoComplete:"off",className:ds}),e.jsxs("button",{type:"button",onClick:()=>{v()},disabled:d||c===null,className:Sn,children:[d?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(he,{size:13}),t("common.save")]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password",value:i,onChange:P=>r(P.target.value),onKeyDown:P=>P.key==="Enter"&&i.trim()&&void O(i.trim()),disabled:d,placeholder:E?t("keys.replace"):t("imageGen.key.paste"),"aria-label":t((N??w).label),autoComplete:"off",spellCheck:!1,className:ds}),e.jsxs("button",{type:"button",onClick:()=>{O(i.trim())},disabled:d||!i.trim(),className:Sn,children:[d?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(he,{size:13}),t("common.save")]}),E&&e.jsx("button",{type:"button",onClick:()=>{A()},disabled:x||d,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:x?t("keys.testing"):t("keys.test")})]}),f&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",f.ok?"text-success":"text-danger"),children:f.text}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2 text-[12px] text-ink-secondary",children:[wn[s]?e.jsx("a",{href:wn[s],target:"_blank",rel:"noreferrer",className:"text-accent hover:underline",children:t("imageGen.key.get")}):e.jsx("span",{children:t("imageGen.custom.help",{app:ys()})}),E&&e.jsx("button",{type:"button",onClick:()=>{O("")},disabled:d,className:"cursor-pointer hover:text-danger disabled:opacity-50",children:t("keys.removeKey")})]}),m&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:m})]})}function Tu({configured:s,optional:n=!1}){return e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx("span",{className:z("size-1.5 rounded-full",s?"bg-success":"bg-raised-hover")}),e.jsx("span",{className:s?"text-success":void 0,children:t(s?"imageGen.key.saved":n?"imageGen.key.optional":"imageGen.key.missing")})]})}function Vt(s){if(s.readOnly||s.trialCredit||s.access==="custom"||s.access==="api")return null;if(s.driverKind==="claudeAgent")return"claude";const n=s.authentication?.method;return s.snapshot.chatgptPlan===!0||(n==="device-code"||n==="browser-pkce")&&Ea(s.driverKind)==="codex"?"chatgpt":null}function Bs(s){return s.snapshot.state!=="available"?"unavailable":s.snapshot.authenticated===!0?"signedIn":s.snapshot.authenticated===!1?"signedOut":"unknown"}const Ls={claude:{title:"accounts.claude",add:"accounts.addClaude",removeBody:"accounts.removeBodyClaude"},chatgpt:{title:"accounts.chatgpt",add:"accounts.addChatgpt",removeBody:"accounts.removeBodyChatgpt"}};function Bu(s,n){return{signOut:Bs(n)==="signedIn"&&n.authentication?.signOut===!0&&n.snapshot.account?.method!=="api-key",remove:s==="claude"?n.instanceId!=="claude"&&n.claudeAccount?.isDefault!==!0:n.instanceId.startsWith("chatgpt-")}}function ki(s){return s.some(Pe)}function Lu(s,n){const a=n.filter(o=>Bs(o)==="signedIn"),i=ki(n),r=n.some(o=>o.snapshot.state==="available"),c=n.length>1?t("accounts.count",{count:String(n.length),signedIn:String(a.length)}):a[0]?.snapshot.account?.email??bl(n[0]);return{title:t(Ls[s].title),subtitle:c,ready:i,status:i?t("onboarding.engines.ready"):r?t("model.signInRequired"):t("onboarding.engines.needsSetup"),action:i?t("engines.library.manage"):r?t("accounts.signIn"):t("engines.library.setup")}}function Ou({group:s,instance:n,onRename:a}){const{state:i,dispatch:r,refreshInstances:c}=W(),[o,d]=l.useState(!1),[u,m]=l.useState(null),[p,x]=l.useState(!1),[g,h]=l.useState(null),b=l.useRef(null),{signOut:y,remove:f}=Bu(s,n),k=i.bots.filter(w=>w.modelSelection.instanceId===n.instanceId).length;l.useEffect(()=>{if(!o)return;const w=j=>{j.key==="Escape"&&(j.stopPropagation(),d(!1))},I=j=>{j.target instanceof Node&&!b.current?.contains(j.target)&&d(!1)};return window.addEventListener("keydown",w,!0),window.addEventListener("pointerdown",I),()=>{window.removeEventListener("keydown",w,!0),window.removeEventListener("pointerdown",I)}},[o]);const E=async w=>{m(null),x(!0),h(null);try{const I=`/api/instances/${encodeURIComponent(n.instanceId)}${w==="signOut"?"/auth/sign-out":""}`,{instances:j}=await U(I,w==="signOut"?{method:"POST"}:{method:"DELETE"});Array.isArray(j)?r({type:"instances",instances:j}):await c().catch(()=>{})}catch(I){h(I instanceof Error?I.message:String(I))}finally{x(!1)}},N="ui-menu-row w-full text-left disabled:cursor-not-allowed disabled:opacity-50";return e.jsxs("div",{ref:b,className:"relative flex items-center gap-1",children:[f&&e.jsx("button",{type:"button",disabled:p||k>0,onClick:()=>m("remove"),title:k>0?t("accounts.inUse",{count:String(k)}):void 0,className:"rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:t("accounts.remove")}),e.jsx("button",{type:"button",onClick:()=>d(w=>!w),disabled:p,"aria-haspopup":"menu","aria-expanded":o,"aria-label":t("accounts.menu",{name:Fe(n)}),className:"flex size-8 items-center justify-center rounded-lg text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50",children:p?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(Pc,{size:16})}),o&&e.jsxs("div",{role:"menu",className:z("absolute right-0 top-full z-40 mt-1 w-[220px] overflow-hidden text-[13px]",Rc),children:[e.jsx("button",{type:"button",role:"menuitem",className:z(N,"text-ink"),onClick:()=>{d(!1),a()},children:t("accounts.rename")}),y&&e.jsx("button",{type:"button",role:"menuitem",className:z(N,"text-ink"),onClick:()=>{d(!1),m("signOut")},children:t("accounts.signOut")}),f&&k>0&&e.jsx("p",{className:"px-3 pb-1 pt-0.5 text-[11px] leading-snug text-ink-secondary",children:t("accounts.inUse",{count:String(k)})})]}),g&&e.jsx("p",{role:"alert",className:"absolute right-0 top-full z-30 mt-1 w-[260px] rounded-lg bg-card p-2 text-[12px] text-danger shadow-lg",children:g}),e.jsx(Ve,{open:u==="signOut",title:t("accounts.signOutTitle",{name:Fe(n)}),body:t("accounts.signOutBody"),confirmLabel:t("accounts.signOut"),onCancel:()=>m(null),onConfirm:()=>{E("signOut")}}),e.jsx(Ve,{open:u==="remove",title:t("accounts.removeTitle",{name:Fe(n)}),body:t(Ls[s].removeBody),confirmLabel:t("accounts.remove"),tone:"neutral",onCancel:()=>m(null),onConfirm:()=>{E("remove")}})]})}function zu({instance:s,onDone:n}){const{dispatch:a}=W(),[i,r]=l.useState(Fe(s)),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=async()=>{const p=i.trim();if(!p||p===Fe(s))return n();o(!0),u(null);try{const{instances:x}=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({displayName:p})});Array.isArray(x)&&a({type:"instances",instances:x}),n()}catch(x){u(x instanceof Error?x.message:String(x))}finally{o(!1)}};return e.jsxs("form",{className:"flex min-w-0 flex-1 flex-col gap-1",onSubmit:p=>{p.preventDefault(),m()},children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:i,onChange:p=>r(p.target.value),maxLength:80,autoFocus:!0,disabled:c,"aria-label":t("accounts.nameLabel"),onKeyDown:p=>{p.key==="Escape"&&(p.stopPropagation(),n())},className:"min-w-0 flex-1 rounded-lg border border-hairline/40 bg-inset px-2.5 py-1.5 text-[13px] text-ink outline-none focus:border-accent-border disabled:opacity-50"}),e.jsx("button",{type:"submit",disabled:c||!i.trim(),className:"rounded-lg bg-raised px-3 py-1.5 text-[12px] font-medium text-ink hover:bg-raised-hover disabled:opacity-50",children:c?e.jsx(V,{size:13,className:"animate-spin"}):t("common.save")}),e.jsx("button",{type:"button",onClick:n,disabled:c,className:"rounded-lg px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control",children:t("common.cancel")})]}),d&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:d})]})}function Mu({group:s,instance:n,signingIn:a,onSignIn:i,onSignInDone:r}){const[c,o]=l.useState(!1),d=Bs(n),u=n.snapshot.account,m=n.snapshot.authenticationUnavailableReason,p=m&&d!=="signedIn"?m:d==="signedIn"?u?.method==="api-key"?t("accounts.apiKey"):[u?.email,u?.organization].filter(Boolean).join(" · ")||t("accounts.signedIn"):d==="signedOut"?t("accounts.notSignedIn"):d==="unknown"?t("accounts.unknown"):n.snapshot.reason??t("onboarding.engines.needsSetup");return e.jsxs("li",{"data-account":n.instanceId,"data-account-state":d,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsx("span",{"aria-hidden":"true",className:z("flex size-6 shrink-0 items-center justify-center rounded-full",d==="signedIn"?"bg-success/15 text-success":"bg-control text-ink-secondary"),children:d==="signedIn"?e.jsx(he,{size:13}):e.jsx("span",{className:z("size-1.5 rounded-full",d==="signedOut"?"bg-warning":"bg-ink-tertiary")})}),c?e.jsx(zu,{instance:n,onDone:()=>o(!1)}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:Fe(n),children:Fe(n)}),e.jsx("div",{className:"truncate text-[12px] text-ink-secondary",title:p,children:p})]}),d!=="signedIn"&&d!=="unavailable"&&!m&&!a&&e.jsx("button",{type:"button",onClick:i,className:z("shrink-0 rounded-lg px-3 py-1.5 text-[12px] font-semibold",d==="signedOut"?"bg-accent text-white hover:brightness-110":"bg-control text-ink hover:bg-raised-hover"),children:t("accounts.signIn")}),e.jsx(Ou,{group:s,instance:n,onRename:()=>o(!0)})]})]}),a&&e.jsx("div",{className:"pl-9",children:s==="claude"?e.jsxs(e.Fragment,{children:[e.jsx(xl,{instanceId:n.instanceId,autoStart:!0,onDone:r}),n.claudeAccount?.signInCommand&&e.jsxs("details",{className:"mt-2 text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer select-none hover:text-ink",children:t("engineSetup.preferTerminal")}),e.jsx(gl,{command:n.claudeAccount.signInCommand,actionLabel:t("engineSetup.openSignIn"),compact:!0})]})]}):e.jsx(hl,{instanceId:n.instanceId,provider:"codex",browserPkce:n.authentication?.method==="browser-pkce",autoStart:!0,onDone:r})}),s==="chatgpt"&&d==="signedIn"&&n.snapshot.chatgptPlan&&e.jsx("div",{className:"pl-9",children:e.jsx(fl,{instanceId:n.instanceId,welcome:!1})})]})}function Ni({label:s,endpoint:n,extra:a,folder:i=!1,describedBy:r,onAdded:c}){const{dispatch:o}=W(),[d,u]=l.useState(!1),[m,p]=l.useState(""),[x,g]=l.useState(""),[h,b]=l.useState(!1),[y,f]=l.useState(null),k=async()=>{if(!(h||!m.trim())){b(!0),f(null);try{const E={displayName:m.trim(),...a,...i&&x.trim()?{configDir:x.trim()}:{}},N=await U(n,{method:"POST",body:JSON.stringify(E)});Array.isArray(N.instances)&&o({type:"instances",instances:N.instances}),u(!1),p(""),g(""),typeof N.instanceId=="string"&&c(N.instanceId)}catch(E){f(E instanceof Error?E.message:String(E))}finally{b(!1)}}};return d?e.jsxs("form",{"data-add-account":n,className:"space-y-2.5 rounded-xl border border-hairline/50 bg-app p-3",onSubmit:E=>{E.preventDefault(),k()},children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("accounts.nameLabel"),e.jsx("input",{value:m,onChange:E=>p(E.target.value),placeholder:t("accounts.namePlaceholder"),maxLength:80,autoFocus:!0,required:!0,disabled:h,"aria-describedby":r,className:"rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] font-normal text-ink outline-none focus:border-accent-border disabled:opacity-50"})]}),i&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer select-none hover:text-ink",children:t("accounts.folderToggle")}),e.jsx("input",{value:x,onChange:E=>g(E.target.value),placeholder:"~/.claude-work",maxLength:4096,spellCheck:!1,disabled:h,"aria-label":t("accounts.folderToggle"),className:"mt-2 w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12px] text-ink outline-none focus:border-accent-border disabled:opacity-50"}),e.jsx("p",{className:"mt-1 leading-relaxed",children:t("accounts.folderHint")})]}),y&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:y}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:()=>{u(!1),f(null)},disabled:h,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:h||!m.trim(),className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[h&&e.jsx(V,{size:13,className:"animate-spin"}),t("accounts.addSubmit")]})]})]}):e.jsxs("button",{type:"button",onClick:()=>u(!0),"aria-describedby":r,className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),s]})}function Uu({group:s,accounts:n,advanced:a,bare:i=!1}){const[r,c]=l.useState(null),o=n[0],d=n.some(p=>p.snapshot.state==="available"),u=n.find(p=>p.policy)?.policy,m=l.useId();return e.jsxs(bt,{instance:o,summary:Lu(s,n),bare:i,children:[u&&e.jsxs("p",{className:"mb-3 text-[12px] leading-relaxed text-ink-secondary",children:[e.jsx("span",{className:"font-medium text-ink",children:t("policy.managedBy",{organization:u.organizationName})})," · ",u.reason]}),d?e.jsxs("div",{className:"space-y-2",children:[e.jsx("ul",{"data-accounts":s,className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:n.map(p=>e.jsx(Mu,{group:s,instance:p,signingIn:r===p.instanceId,onSignIn:()=>c(p.instanceId),onSignInDone:()=>c(x=>x===p.instanceId?null:x)},p.instanceId))}),!o.snapshot.authenticationUnavailableReason&&e.jsxs(e.Fragment,{children:[e.jsx(Ni,{label:t(Ls[s].add),endpoint:`/api/instances/${s}-accounts`,folder:s==="claude",describedBy:s==="chatgpt"?m:void 0,onAdded:c}),s==="chatgpt"&&e.jsx("p",{id:m,className:"px-2 text-[12px] leading-relaxed text-ink-secondary",children:t("accounts.addChatgptWorkspaceNote")})]})]}):e.jsx(St,{instance:o,unframed:!0}),o.snapshot.update&&e.jsx(Aa,{update:o.snapshot.update,instance:o,className:"mt-3",quiet:!0}),o.snapshot.warning&&e.jsx(Ia,{warning:o.snapshot.warning,className:"mt-3"}),a]})}const Fu={claude:{url:"https://api.anthropic.com",model:"deepseek-chat"},codex:{url:"https://api.openai.com/v1",model:""}},ut=z(Re,"font-sans"),Du={name:"",url:"",token:"",model:""},_u=s=>({name:s.displayName,url:(s.claudeEndpoint??s.codexEndpoint)?.baseUrl??"",token:"",model:""});function En({instance:s,engine:n,onDone:a}){const{dispatch:i}=W(),r=Fu[n],[c,o]=l.useState(s?_u(s):Du),[d,u]=l.useState(!1),[m,p]=l.useState(null),x=b=>({value:c[b],onChange:y=>o(f=>({...f,[b]:y.target.value})),spellCheck:!1,disabled:d}),g=!!(c.name.trim()&&(c.url.trim()||n==="codex")&&(s||c.token.trim())),h=async()=>{if(d||!g)return;u(!0),p(null);const b={displayName:c.name.trim(),baseUrl:c.url.trim()||r.url,...c.token.trim()?{token:c.token.trim()}:{},...c.model.trim()?{model:c.model.trim()}:{}};try{const y=s?await U(`/api/instances/${encodeURIComponent(s.instanceId)}/${n}-endpoint`,{method:"PATCH",body:JSON.stringify(b)}):await U(`/api/instances/${n}-endpoint`,{method:"POST",body:JSON.stringify(b)});Array.isArray(y.instances)&&i({type:"instances",instances:y.instances}),a()}catch(y){p(y instanceof Error&&y.message?y.message:t("claudeEndpoints.failed"))}finally{u(!1)}};return e.jsxs("form",{"data-claude-endpoint-form":n==="claude"?s?.instanceId??"new":void 0,"data-codex-endpoint-form":n==="codex"?s?.instanceId??"new":void 0,className:"flex flex-col gap-2 rounded-xl border border-hairline/50 bg-inset p-3",onSubmit:b=>{b.preventDefault(),h()},children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t(n==="codex"?"agentEndpoints.responses":"agentEndpoints.messages")}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.name"),e.jsx("input",{...x("name"),maxLength:80,autoFocus:!0,"aria-label":t("claudeEndpoints.name"),className:ut})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.baseUrl"),e.jsx("input",{...x("url"),type:"url",maxLength:2048,placeholder:r.url,"aria-label":t("claudeEndpoints.baseUrl"),className:z(ut,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.token"),e.jsx("input",{...x("token"),type:"password",maxLength:4096,autoComplete:"off","aria-label":t("claudeEndpoints.token"),className:z(ut,"font-mono"),placeholder:s?t("claudeEndpoints.tokenKeep"):""})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.model"),e.jsx("input",{...x("model"),maxLength:160,placeholder:r.model,"aria-label":t("claudeEndpoints.model"),className:z(ut,"font-mono")})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeEndpoints.modelHint")}),m&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:m}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:a,disabled:d,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:d||!g,className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[d&&e.jsx(V,{size:13,className:"animate-spin"}),t("common.save")]})]})]})}function Ku({instance:s,onEdit:n}){const{state:a,dispatch:i}=W(),[r,c]=l.useState(!1),[o,d]=l.useState(!1),[u,m]=l.useState(null),p=a.bots.filter(h=>h.modelSelection.instanceId===s.instanceId||h.fallback?.some(b=>b.instanceId===s.instanceId)||h.tasks?.some(b=>b.modelSelection?.instanceId===s.instanceId)).length,x=s.claudeEndpoint??s.codexEndpoint,g=async()=>{c(!1),d(!0),m(null);try{const h=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"DELETE"});Array.isArray(h.instances)&&i({type:"instances",instances:h.instances})}catch(h){m(h instanceof Error?h.message:String(h))}finally{d(!1)}};return e.jsxs("li",{"data-claude-endpoint":s.claudeEndpoint?s.instanceId:void 0,"data-codex-endpoint":s.codexEndpoint?s.instanceId:void 0,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:s.displayName,children:s.displayName}),e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",title:x?.baseUrl,children:x?.baseUrl})]}),e.jsx("button",{type:"button",onClick:n,disabled:o,className:"shrink-0 rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:t("claudeEndpoints.edit")}),e.jsx("button",{type:"button",disabled:o||p>0,onClick:()=>c(!0),title:p>0?t("accounts.inUse",{count:String(p)}):t("accounts.remove"),"aria-label":t("claudeEndpoints.remove",{name:s.displayName}),className:"flex size-8 shrink-0 items-center justify-center rounded-lg text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:o?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(we,{size:14})})]}),u&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:u}),e.jsx(Ve,{open:r,title:t("accounts.removeTitle",{name:s.displayName}),body:t("claudeEndpoints.removeBody"),confirmLabel:t("accounts.remove"),tone:"neutral",pending:o,onCancel:()=>c(!1),onConfirm:()=>{g()}})]})}function wi({engine:s}){const{state:n}=W(),a=n.instances.filter(c=>s==="claude"?c.claudeEndpoint:c.codexEndpoint),[i,r]=l.useState(null);return e.jsxs("div",{"data-claude-endpoints":s==="claude"?"":void 0,"data-codex-endpoints":s==="codex"?"":void 0,className:"mt-3 space-y-2",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t(s==="claude"?"claudeEndpoints.title":"agentEndpoints.codexTitle")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t(s==="claude"?"claudeEndpoints.hint":"agentEndpoints.codexHint")}),a.length===0?e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeEndpoints.empty")}):e.jsx("ul",{className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:a.map(c=>i===c.instanceId?e.jsx("li",{className:"p-3",children:e.jsx(En,{engine:s,instance:c,onDone:()=>r(null)})},c.instanceId):e.jsx(Ku,{instance:c,onEdit:()=>r(c.instanceId)},c.instanceId))}),i==="new"?e.jsx(En,{engine:s,onDone:()=>r(null)}):e.jsxs("button",{type:"button",onClick:()=>r("new"),className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),t("claudeEndpoints.add")]})]})}function qt(){return e.jsx(wi,{engine:"claude"})}function Jt(){return e.jsx(wi,{engine:"codex"})}const Ze=z(Re,"font-sans"),$u={opusModel:"global.anthropic.claude-opus-5-5",sonnetModel:"global.anthropic.claude-sonnet-5-5",haikuModel:"global.anthropic.claude-haiku-5-5",smallFastModel:"global.anthropic.claude-haiku-5-5"},An=["opusModel","sonnetModel","haikuModel","smallFastModel"],Hu={name:"Claude on Bedrock",awsProfile:"default",awsRegion:"",model:"",opusModel:"",sonnetModel:"",haikuModel:"",smallFastModel:""},Wu=s=>{const n=s.claudeBedrock;return{name:s.displayName,awsProfile:n?.awsProfile||"default",awsRegion:n?.awsRegion??"",model:n?.model??"",opusModel:n?.opusModel??"",sonnetModel:n?.sonnetModel??"",haikuModel:n?.haikuModel??"",smallFastModel:n?.smallFastModel??""}},In={opusModel:"claudeBedrock.opus",sonnetModel:"claudeBedrock.sonnet",haikuModel:"claudeBedrock.haiku",smallFastModel:"claudeBedrock.smallFast"};function Pn({instance:s,onDone:n}){const{dispatch:a}=W(),[i,r]=l.useState(s?Wu(s):Hu),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=g=>({value:i[g],onChange:h=>r(b=>({...b,[g]:h.target.value})),spellCheck:!1,disabled:c}),p=!!(i.name.trim()&&i.awsProfile.trim()&&i.awsRegion.trim()&&i.model.trim()),x=async()=>{if(c||!p)return;o(!0),u(null);const g={displayName:i.name.trim(),awsProfile:i.awsProfile.trim(),awsRegion:i.awsRegion.trim(),model:i.model.trim(),...Object.fromEntries(An.map(h=>[h,i[h].trim()]))};try{const h=s?await U(`/api/instances/${encodeURIComponent(s.instanceId)}/claude-bedrock`,{method:"PATCH",body:JSON.stringify(g)}):await U("/api/instances/claude-bedrock",{method:"POST",body:JSON.stringify(g)});Array.isArray(h.instances)&&a({type:"instances",instances:h.instances}),n()}catch(h){u(h instanceof Error&&h.message?h.message:t("claudeBedrock.failed"))}finally{o(!1)}};return e.jsxs("form",{"data-claude-bedrock-form":s?.instanceId??"new",className:"flex flex-col gap-2 rounded-xl border border-hairline/50 bg-inset p-3",onSubmit:g=>{g.preventDefault(),x()},children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.awsHint")}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.name"),e.jsx("input",{...m("name"),maxLength:80,autoFocus:!0,"aria-label":t("claudeBedrock.name"),className:Ze})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.profile"),e.jsx("input",{...m("awsProfile"),maxLength:128,placeholder:"default","aria-label":t("claudeBedrock.profile"),className:z(Ze,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.region"),e.jsx("input",{...m("awsRegion"),maxLength:32,placeholder:"us-east-1","aria-label":t("claudeBedrock.region"),className:z(Ze,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.model"),e.jsx("input",{...m("model"),maxLength:160,placeholder:"global.anthropic.claude-sonnet-5-5","aria-label":t("claudeBedrock.model"),className:z(Ze,"font-mono")})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.modelHint")}),e.jsxs("details",{className:"rounded-lg border border-hairline/40 px-2.5 py-2",children:[e.jsx("summary",{className:"cursor-pointer text-[12px] font-medium text-ink-secondary outline-none hover:text-ink",children:t("claudeBedrock.tiers")}),e.jsx("div",{className:"mt-2 flex flex-col gap-2",children:An.map(g=>e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t(In[g]),e.jsx("input",{...m(g),maxLength:160,placeholder:$u[g],"aria-label":t(In[g]),className:z(Ze,"font-mono")})]},g))})]}),d&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:d}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:n,disabled:c,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:c||!p,className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[c&&e.jsx(V,{size:13,className:"animate-spin"}),t("common.save")]})]})]})}function Gu({instance:s,onEdit:n}){const{state:a,dispatch:i}=W(),[r,c]=l.useState(!1),[o,d]=l.useState(!1),[u,m]=l.useState(null),p=a.bots.filter(h=>h.modelSelection.instanceId===s.instanceId||h.fallback?.some(b=>b.instanceId===s.instanceId)||h.tasks?.some(b=>b.modelSelection?.instanceId===s.instanceId)).length,x=s.claudeBedrock,g=async()=>{c(!1),d(!0),m(null);try{const h=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"DELETE"});Array.isArray(h.instances)&&i({type:"instances",instances:h.instances})}catch(h){m(h instanceof Error?h.message:String(h))}finally{d(!1)}};return e.jsxs("li",{"data-claude-bedrock":s.instanceId,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsx(Pa,{preset:"aws",size:16,className:"shrink-0"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:s.displayName,children:s.displayName}),e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",children:t("claudeBedrock.rowSubtitle",{profile:x?.awsProfile??"",region:x?.awsRegion??""})})]}),e.jsx("button",{type:"button",onClick:n,disabled:o,className:"shrink-0 rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:t("claudeBedrock.edit")}),e.jsx("button",{type:"button",disabled:o||p>0,onClick:()=>c(!0),title:p>0?t("accounts.inUse",{count:String(p)}):t("accounts.remove"),"aria-label":t("claudeBedrock.remove",{name:s.displayName}),className:"flex size-8 shrink-0 items-center justify-center rounded-lg text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:o?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(we,{size:14})})]}),u&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:u}),e.jsx(Ve,{open:r,title:t("accounts.removeTitle",{name:s.displayName}),body:t("claudeBedrock.removeBody"),confirmLabel:t("accounts.remove"),tone:"neutral",pending:o,onCancel:()=>c(!1),onConfirm:()=>{g()}})]})}function Yt(){const{state:s}=W(),n=s.instances.filter(r=>r.claudeBedrock),[a,i]=l.useState(null);return e.jsxs("div",{"data-claude-bedrock-endpoints":"",className:"mt-3 space-y-2",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("claudeBedrock.title")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.hint")}),n.length===0?e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.empty")}):e.jsx("ul",{className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:n.map(r=>a===r.instanceId?e.jsx("li",{className:"p-3",children:e.jsx(Pn,{instance:r,onDone:()=>i(null)})},r.instanceId):e.jsx(Gu,{instance:r,onEdit:()=>i(r.instanceId)},r.instanceId))}),a==="new"?e.jsx(Pn,{onDone:()=>i(null)}):e.jsxs("button",{type:"button",onClick:()=>i("new"),className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),t("claudeBedrock.add")]})]})}function Rn(s){const n=s/1048576;return n<1?t("engines.freeSpace.underOneMb"):n<1024?`${Math.round(n)} MB`:`${(n/1024).toFixed(1)} GB`}function Vu({instance:s,initial:n={kind:"idle"}}){const[a,i]=l.useState(n),[r,c]=l.useState(null),o=`/api/instances/${encodeURIComponent(s.instanceId)}/leftover-files`,d=async()=>{c(null),i({kind:"scanning"});try{const p=await U(o);i(p.folders>0?{kind:"found",bytes:p.bytes,complete:p.complete}:{kind:"none"})}catch(p){c(p instanceof Error?p.message:String(p)),i({kind:"idle"})}},u=async()=>{c(null),i({kind:"deleting"});try{const p=await U(`${o}/remove`,{method:"POST",body:JSON.stringify({})});i({kind:"done",freedBytes:p.freedBytes,remaining:p.remaining})}catch(p){c(p instanceof Error?p.message:String(p)),i({kind:"idle"})}},m=a.kind==="scanning"||a.kind==="deleting";return e.jsxs("section",{className:"mt-3 rounded-xl border border-hairline/40 px-3 py-2.5","aria-label":t("engines.freeSpace.title"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(Tc,{size:13,"aria-hidden":"true",className:"shrink-0 text-ink-secondary"}),e.jsx("span",{className:"text-[12px] font-medium text-ink",children:t("engines.freeSpace.title")}),e.jsx("span",{className:"flex-1"}),(a.kind==="idle"||a.kind==="none"||a.kind==="done"||m)&&e.jsxs("button",{type:"button",onClick:()=>{d()},disabled:m,className:"flex shrink-0 items-center gap-1 rounded-lg border border-hairline/40 px-3 py-1 text-[12px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:[m&&e.jsx(V,{size:12,className:"animate-spin"}),t("engines.freeSpace.action")]})]}),e.jsx("p",{className:"mt-1.5 text-[12px] leading-relaxed text-ink-secondary",children:t("engines.freeSpace.intro")}),a.kind==="scanning"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.scanning")}),a.kind==="deleting"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.deleting")}),a.kind==="none"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.none")}),a.kind==="found"&&e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2",children:[e.jsx("p",{role:"status",className:"flex-1 text-[12px] text-ink",children:t(a.complete?"engines.freeSpace.found":"engines.freeSpace.foundAtLeast",{size:Rn(a.bytes)})}),e.jsx("button",{type:"button",onClick:()=>i({kind:"idle"}),className:"rounded-lg px-3 py-1 text-[12px] text-ink-secondary hover:bg-raised/50 hover:text-ink",children:t("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>{u()},className:"rounded-lg bg-raised px-3 py-1 text-[12px] text-ink hover:bg-raised-hover",children:t("engines.freeSpace.delete")})]}),a.kind==="done"&&e.jsxs("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:[(a.freedBytes>0||a.remaining===0)&&e.jsxs("span",{className:"text-success",children:[t("engines.freeSpace.freed",{size:Rn(a.freedBytes)})," "]}),a.remaining>0&&t("engines.freeSpace.someLeft")]}),r&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:r})]})}const Xt=[60,120,180,360,720];function Si(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(""),o=l.useRef(!1),d=s.config?.cacheKeepWarm;if(!d)return null;const u=async p=>{if(!o.current){o.current=!0,i(!0),c("");try{const x=await U("/api/config",{method:"PUT",body:JSON.stringify({cacheKeepWarm:{enabled:p.enabled,windowMinutes:p.windowMinutes}})});n({type:"configStatus",config:x})}catch(x){c(x instanceof Error?x.message:t("settings.keepWarm.error"))}finally{o.current=!1,i(!1)}}},m=Xt.includes(d.windowMinutes)?[...Xt]:[...Xt,d.windowMinutes].sort((p,x)=>p-x);return e.jsxs(Y,{title:t("settings.keepWarm.title"),subtitle:t("settings.keepWarm.subtitle"),children:[e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[e.jsx("label",{htmlFor:"cache-keepwarm-enabled",className:"text-[13px] font-medium text-ink",children:t("settings.keepWarm.enable")}),e.jsx(me,{id:"cache-keepwarm-enabled",checked:d.enabled,disabled:a,"aria-describedby":"cache-keepwarm-help cache-keepwarm-cost",onClick:()=>{u({...d,enabled:!d.enabled})}})]}),e.jsx("p",{id:"cache-keepwarm-help",className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("settings.keepWarm.help")}),e.jsx("p",{id:"cache-keepwarm-cost",className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("settings.keepWarm.cost")}),e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[e.jsx("label",{htmlFor:"cache-keepwarm-window",className:"text-[13px] font-medium text-ink",children:t("settings.keepWarm.window")}),e.jsx(pe,{id:"cache-keepwarm-window",value:d.windowMinutes,disabled:a||!d.enabled,onChange:p=>{u({...d,windowMinutes:Number(p.target.value)})},children:m.map(p=>e.jsx("option",{value:p,children:t("settings.keepWarm.hours",{hours:Number((p/60).toFixed(2))})},p))})]}),a&&e.jsx("span",{role:"status",className:"sr-only",children:t("settings.threads.saving")}),r&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:r})]})}function qu({instance:s,cliDefault:n,onClose:a,onSaved:i}){const[r,c]=l.useState(s.cliCandidates??null),[o,d]=l.useState(""),[u,m]=l.useState(s.cli&&!(s.cliCandidates??[]).includes(s.cli)?s.cli:""),[p,x]=l.useState(!1),[g,h]=l.useState(null),[b,y]=l.useState(!1),[f,k]=l.useState(null),E=l.useRef(!1);l.useEffect(()=>{E.current||(E.current=!0,U(`/api/cli-candidates?name=${encodeURIComponent(n??"")}`).then(({candidates:v})=>{c(v),s.cli&&(v.includes(s.cli)?d(s.cli):m(s.cli))}).catch(()=>c(v=>v??[])))},[n,s.cli]);const N=u.trim()||o,w=N!==(s.cli??""),I=p||b;l.useEffect(()=>{h(null)},[N]);const j=()=>{if(I||!N||!w)return;y(!0),k(null);const v=N;U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({cli:v})}).then(()=>Promise.resolve(i()).catch(()=>{})).then(a).catch(A=>k(A.message)).finally(()=>y(!1))},O=()=>{I||!N||!w||(x(!0),k(null),U("/api/cli-test",{method:"POST",body:JSON.stringify({cli:N,driver:s.driverKind})}).then(v=>{h(v),v.ok&&j()}).catch(v=>k(v.message)).finally(()=>x(!1)))};return e.jsxs("div",{className:"mt-2.5 flex flex-col gap-2",children:[r!==null&&r.length>0&&e.jsxs(pe,{className:"w-full font-mono",value:u.trim()?"":o,onChange:v=>{d(v.target.value),m("")},"aria-label":t("engines.detectedAria",{name:s.displayName}),disabled:I,children:[e.jsx("option",{value:"",children:t("engines.selectBinary")}),r.map(v=>e.jsx("option",{value:v,children:v},v))]}),e.jsx("input",{type:"text",value:u,onChange:v=>m(v.target.value),onKeyDown:v=>{v.key==="Enter"&&(v.preventDefault(),!(!N||!w)&&O())},placeholder:r?.length?t("engines.manualPath"):"/absolute/path/to/cli","aria-label":t("engines.customAria",{name:s.displayName}),spellCheck:!1,disabled:I,className:"w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12px] text-ink placeholder:font-sans placeholder:text-ink-secondary focus:outline-none disabled:opacity-50"}),g&&!g.ok&&g.message&&e.jsxs("div",{role:"alert",className:"flex gap-1.5 rounded-lg border border-warning/25 bg-warning/10 px-2.5 py-2 text-[12px] leading-relaxed text-warning",children:[e.jsx(Te,{size:13,className:"mt-0.5 shrink-0"}),e.jsx("span",{children:t("engines.testFailed",{message:g.message})})]}),g?.ok&&g.version&&e.jsx("div",{className:"text-[12px] text-success",children:t("engines.testPassed",{version:g.version})}),f&&e.jsx("div",{role:"alert",className:"text-[12px] text-danger",children:f}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{onClick:a,disabled:I,className:"rounded-lg px-3 py-1.5 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:t("common.cancel")}),g&&!g.ok?e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>h(null),disabled:I,className:"rounded-lg px-3 py-1.5 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:t("engines.editPath")}),e.jsx("button",{onClick:()=>j(),disabled:I,className:"flex items-center gap-1.5 rounded-lg bg-raised px-3 py-1.5 text-[13px] text-danger hover:bg-raised-hover disabled:opacity-50",children:b?e.jsx(V,{size:13,className:"animate-spin"}):t("engines.saveAnyway")})]}):e.jsx("button",{onClick:O,disabled:I||!N||!w,className:z("flex w-[72px] items-center justify-center gap-1.5 rounded-lg py-1.5 text-[13px]","bg-raised text-ink hover:bg-raised-hover","disabled:cursor-not-allowed disabled:opacity-50"),children:I?e.jsx(V,{size:13,className:"animate-spin"}):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})})]})]})}function Ci({instance:s}){const{refreshInstances:n}=W(),[a,i]=l.useState(!1),r=Yc(a),[c,o]=l.useState(!1),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(null),h=l.useRef(null);l.useEffect(()=>{h.current!==null&&h.current!==s.cli&&i(!1),h.current=s.cli??null},[s.cli]);const b=()=>{c||d||(o(!0),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({cli:""})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(k=>g(k.message)).finally(()=>o(!1)))},y=()=>{c||d||(o(!0),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({hidden:!0})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(k=>g(k.message)).finally(()=>o(!1)))},f=()=>{c||d||(u(!0),p(null),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}/claude-update`,{method:"POST",body:JSON.stringify({})}).then(async({version:k})=>{p(k),await Promise.resolve(n()).catch(()=>{})}).catch(k=>g(k.message)).finally(()=>u(!1)))};return e.jsxs("details",{className:"mt-4 border-t border-hairline/40 pt-3",children:[e.jsx("summary",{className:"cursor-pointer rounded-md py-1 text-[12px] font-medium text-ink-secondary outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:t("engines.library.advanced")}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("engines.footer")}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2 text-[13px]",children:[s.cli?e.jsx("span",{className:"w-full break-all font-mono text-[12px] text-ink-secondary",title:s.cli,children:s.cli}):s.cliDefault&&e.jsx("span",{className:"break-all font-mono text-[11px] text-ink-secondary",children:s.cliDefault}),s.snapshot.version&&e.jsx("span",{className:"break-all text-[11px] text-ink-secondary",title:s.snapshot.version,children:s.snapshot.version}),e.jsx("span",{className:"flex-1"}),s.driverKind==="claudeAgent"&&e.jsxs("button",{onClick:f,disabled:c||d,className:"flex shrink-0 items-center gap-1 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:[d?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(Ne,{size:12}),d?t("engines.updating"):t("engines.updateClaude")]}),s.cli&&e.jsx("button",{onClick:b,disabled:c||d,className:"shrink-0 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:c?t("engines.resetting"):t("engines.reset")}),e.jsx("button",{type:"button","data-hide-engine":s.instanceId,onClick:y,disabled:c||d,title:t("engines.hideHint"),className:"shrink-0 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:t("engines.hide")}),e.jsx("button",{onClick:()=>i(k=>!k),disabled:d,"aria-expanded":a,className:z("shrink-0 rounded-lg border border-hairline/40 px-3 py-1 text-[12px]",a?"bg-accent/15 text-accent":"text-ink-secondary hover:bg-raised/50 hover:text-ink","disabled:opacity-50"),children:t("engines.setCli")})]}),m&&e.jsx("div",{role:"status",className:"mt-1 text-[12px] text-success",children:t("engines.claudeUpdated",{version:m})}),x&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:x}),r.shown&&e.jsx("div",{className:r.className,...r.exitProps,children:e.jsx(qu,{instance:s,cliDefault:s.cliDefault,onClose:()=>i(!1),onSaved:n})})]})}function Tn({instance:s,action:n}){const{state:a,dispatch:i,refreshInstances:r}=W(),[c,o]=l.useState(!1),[d,u]=l.useState(!1),[m,p]=l.useState(null),x=n==="remove",g=x?a.bots.filter(y=>y.modelSelection.instanceId===s.instanceId).length:0,h=t(x?"accounts.remove":"accounts.signOut"),b=async()=>{o(!1),u(!0),p(null);try{const y=`/api/instances/${encodeURIComponent(s.instanceId)}${x?"":"/auth/sign-out"}`,{instances:f}=await U(y,{method:x?"DELETE":"POST"});Array.isArray(f)?i({type:"instances",instances:f}):await r()}catch(y){p(y instanceof Error?y.message:String(y))}finally{u(!1)}};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("button",{type:"button",disabled:d||g>0,onClick:()=>o(!0),className:z("rounded-lg px-2.5 py-1.5 text-[12px] font-medium disabled:cursor-not-allowed disabled:opacity-50",x?"text-danger hover:bg-danger/10":"text-ink-secondary hover:bg-raised hover:text-ink"),children:d?e.jsx(V,{size:13,className:"animate-spin"}):h}),g>0&&e.jsx("p",{className:"text-[11px] text-ink-secondary",children:t("accounts.inUse",{count:String(g)})})]}),m&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:m}),e.jsx(Ve,{open:c,title:t(x?"accounts.removeTitle":"accounts.signOutTitle",{name:s.displayName}),body:t(x?"accounts.removeBodyAntigravity":"accounts.signOutBody"),confirmLabel:h,tone:"neutral",pending:d,onCancel:()=>{d||o(!1)},onConfirm:()=>{b()}})]})}function Ju({source:s}){const{state:n}=W(),[a,i]=l.useState(null),r=a?n.instances.find(c=>c.instanceId===a&&c.snapshot.authenticated!==!0):void 0;return e.jsxs(e.Fragment,{children:[e.jsx(Ni,{label:t("engineSetup.antigravity.addAccount"),endpoint:"/api/instances/antigravity-accounts",extra:{sourceInstanceId:s.instanceId},onAdded:i}),r&&e.jsx("div",{"data-antigravity-added":r.instanceId,children:e.jsx(St,{instance:r,unframed:!0})})]})}function Yu({instance:s,bare:n=!1}){const a=s.policy&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[e.jsx("span",{className:"font-medium text-ink",children:t("policy.managedBy",{organization:s.policy.organizationName})})," · ",s.policy.reason]});return s.trialCredit?e.jsx(bt,{instance:s,bare:n,children:e.jsx("p",{"data-trial-credit":s.trialCredit,className:"text-[13px] leading-relaxed text-ink-secondary",children:t(s.trialCredit==="used_up"?"engines.trialCreditUsedUp":s.trialCredit==="ended"?"engines.trialCreditEnded":Pe(s)?"engines.trialCredit":"engines.trialCreditOwn")})}):s.readOnly?e.jsxs(bt,{instance:s,bare:n,children:[a,e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("organization.managedEngine")}),!Pe(s)&&e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:t("organization.engineUnavailable")})]}):e.jsxs(bt,{instance:s,bare:n,children:[a,!Pe(s)&&e.jsx(St,{instance:s,intent:s.access==="custom"?"inject":"cloud",description:s.codexEndpoint?t("agentEndpoints.codexHint"):void 0,unframed:!0}),Pe(s)&&e.jsx(kl,{instance:s,className:"mt-3"}),Pe(s)&&s.serverKind==="ollama"&&e.jsx(Nl,{instance:s,className:"mt-3"}),Pe(s)&&e.jsx(wl,{instance:s,className:"mt-3"}),s.snapshot.update&&e.jsx(Aa,{update:s.snapshot.update,instance:s,className:"mt-3",quiet:!0}),s.snapshot.warning&&e.jsx(Ia,{warning:s.snapshot.warning,className:"mt-3"}),Pe(s)&&s.snapshot.authenticated===!0&&(s.authentication?.method==="device-code"?e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] text-success",children:[e.jsx(he,{size:13}),t(Sl[Ea(s.driverKind)].connectedAccount)]}):s.authentication?.method==="paste-code"&&e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] text-success",children:[e.jsx(he,{size:13}),t("engineSetup.claude.connectedAccount")]})),s.freeUpSpace&&e.jsx(Vu,{instance:s}),s.driverKind==="antigravityAgent"&&e.jsxs("div",{className:"mt-3 space-y-3",children:[s.snapshot.authenticated&&e.jsx("p",{className:"break-words text-[12px] text-ink-secondary",children:s.snapshot.account?.email??t("engineSetup.antigravity.emailUnavailable")}),e.jsx(Ju,{source:s}),s.snapshot.authenticated===!0&&s.authentication?.signOut===!0&&e.jsx(Tn,{instance:s,action:"signOut"}),s.instanceId.startsWith("antigravity-")&&e.jsx(Tn,{instance:s,action:"remove"})]}),e.jsx(Ci,{instance:s})]})}function Xu(s,n){return n?s.snapshot.authenticated===!0&&s.snapshot.account?.email?s.snapshot.account.email:t("onboarding.engines.ready"):s.snapshot.ollama?jl(s.snapshot.ollama):s.snapshot.state==="available"&&s.snapshot.authenticated===!1?t("model.signInRequired"):t("onboarding.engines.needsSetup")}function Qu({rows:s,isReady:n,renderEngine:a,more:i}){const[r,c]=l.useState(null),o=s.filter(u=>n(u)||u.authentication!==void 0),d=s.filter(u=>!o.includes(u));return e.jsxs(e.Fragment,{children:[e.jsx(be,{label:t("settings.simple.ai.yours"),actions:e.jsx(Ra,{}),children:e.jsx(ye,{children:o.map(u=>{const m=n(u),p=r===u.instanceId;return e.jsxs("div",{"data-simple-engine":u.instanceId,className:"group",children:[e.jsxs("div",{className:"flex min-h-11 flex-wrap items-center gap-x-5 gap-y-2 px-4 py-2.5",children:[e.jsxs("span",{className:"flex min-w-[min(100%,15rem)] flex-1 items-center gap-3",children:[e.jsx(rn,{instance:u,size:14,subtle:!0}),e.jsxs("span",{className:"flex min-w-0 flex-col gap-0.5",children:[e.jsx("span",{className:"truncate text-[14px] leading-5 text-ink",children:u.displayName}),e.jsx("span",{className:"truncate text-[13px] leading-[18px] text-ink-secondary",children:Xu(u,m)})]})]}),e.jsx("button",{type:"button","aria-expanded":p,className:"ui-button ml-auto shrink-0",onClick:()=>c(p?null:u.instanceId),children:t(p?"common.done":m?"settings.simple.ai.manage":"settings.simple.ai.setUp")})]}),p&&e.jsx("div",{className:"px-4 pb-3",children:a(u,!0)})]},u.instanceId)})})}),d.length>0&&e.jsx(Ct,{title:t("settings.simple.ai.more",{count:String(d.length)}),trailing:e.jsx("span",{"aria-hidden":"true",className:"flex items-center -space-x-1",children:d.slice(0,4).map(u=>e.jsx("span",{className:"flex size-[18px] items-center justify-center rounded-full bg-menu",children:e.jsx(rn,{instance:u,size:14,subtle:!0})},u.instanceId))}),...i,children:e.jsx(Ta,{instances:d,isReady:n,renderEngine:u=>a(u)})})]})}function Zu(){const{state:s,refreshInstances:n}=W(),[a,i]=l.useState([]),[r,c]=l.useState(null),[o,d]=l.useState(null);if(l.useEffect(()=>{let m=!0;return U("/api/instances/hidden").then(p=>{m&&i(Array.isArray(p?.instances)?p.instances:[])}).catch(()=>{}),()=>{m=!1}},[s.instances]),a.length===0)return null;const u=m=>{c(m),d(null),U(`/api/instances/${encodeURIComponent(m)}`,{method:"PATCH",body:JSON.stringify({hidden:!1})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(p=>d(p.message)).finally(()=>c(null))};return e.jsxs("details",{"data-hidden-engines":!0,className:"px-4",children:[e.jsx("summary",{className:"cursor-pointer text-[13px] font-medium text-ink-secondary hover:text-ink",children:t("engines.hiddenTitle",{count:String(a.length)})}),e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.hiddenHint")}),e.jsx("div",{className:"mt-2 flex flex-col gap-1.5",children:a.map(m=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-hairline/40 bg-inset px-3 py-2",children:[e.jsx("span",{className:"min-w-0 truncate text-[13px] text-ink",children:m.displayName}),e.jsx("button",{type:"button","data-unhide-engine":m.instanceId,disabled:r!==null,onClick:()=>u(m.instanceId),className:"shrink-0 text-[12px] font-medium text-accent hover:underline disabled:opacity-50",children:r===m.instanceId?t("engines.unhiding"):t("engines.unhide")})]},m.instanceId))}),o&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:o})]})}function Ei({simple:s=!1,more:n}){const{state:a}=W();l.useEffect(()=>yl,[]);const i=a.instances.filter(g=>g.readOnly||g.cli!==void 0||g.cliDefault!==void 0||g.snapshot.state==="unavailable"||vl(g)||g.claudeEndpoint!==void 0||g.claudeBedrock!==void 0||g.codexEndpoint!==void 0),r=new Map;for(const g of i){const h=Vt(g);h&&r.set(h,[...r.get(h)??[],g])}const c=g=>{const h=Vt(g);return h&&r.get(h)?.[0]===g?h:null},o=i.filter(g=>!Vt(g)||c(g)),d=o.length>0&&o.every(g=>g.readOnly),u=!r.has("chatgpt")&&!d,m=!r.has("claude")&&!d,p=g=>{const h=c(g);return h?ki(r.get(h)):Pe(g)},x=(g,h=!1)=>{const b=c(g);return b?e.jsx(Uu,{group:b,accounts:r.get(b),bare:h,advanced:e.jsxs(e.Fragment,{children:[b==="claude"?e.jsxs(e.Fragment,{children:[e.jsx(qt,{}),e.jsx(Yt,{})]}):e.jsx(Jt,{}),e.jsx(Ci,{instance:g})]})}):e.jsx(Yu,{instance:g,bare:h})};return s&&n?e.jsxs(e.Fragment,{children:[e.jsx(Qu,{rows:o,isReady:p,renderEngine:x,more:n}),m&&e.jsxs("div",{className:"px-4",children:[e.jsx(qt,{}),e.jsx(Yt,{})]}),u&&e.jsx("div",{className:"px-4",children:e.jsx(Jt,{})})]}):e.jsxs("div",{className:"flex min-w-0 flex-col gap-6 pb-2",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1 basis-60 space-y-2 px-4",children:[e.jsx("h1",{className:"text-[22px] font-semibold tracking-tight text-ink",children:t("settings.engines.title")}),e.jsx("p",{className:"mt-2 max-w-lg text-[13px] leading-relaxed text-ink-secondary",children:t("engines.library.intro")})]}),e.jsx(Ra,{})]}),e.jsx(Ta,{instances:o,isReady:p,renderEngine:x}),m&&e.jsxs("div",{className:"px-4",children:[e.jsx(qt,{}),e.jsx(Yt,{})]}),u&&e.jsx("div",{className:"px-4",children:e.jsx(Jt,{})}),e.jsx(Zu,{}),e.jsx(Si,{})]})}const em={status:"/api/local-computer","local-vms":"/api/local-computer/instances",cloud:"/api/computers/boxes",vps:"/api/computers/vps"};function mt(s,n){return[em[s],{signal:n}]}function Os(s,n){return[s,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n)}]}function tm({instances:s,configured:n,aliases:a,loading:i,removingName:r,error:c,unavailableReason:o,onRefresh:d,onRemove:u}){return e.jsxs(Y,{title:t("vm.vps.title"),subtitle:t("vm.vps.subtitle"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:n===!0?t("vm.vps.sshHost",{alias:a.join(", ")||t("vm.vps.configuredFallback")}):n===!1?e.jsxs(e.Fragment,{children:[t("vm.vps.needsAlias")," ",e.jsx(Ba,{id:"vps"})]}):t("vm.vps.refreshHint")}),e.jsxs("button",{type:"button",onClick:d,disabled:i||r!==null,"aria-label":t("vm.vps.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(i&&"animate-spin")})," ",t("vm.refresh")]})]}),c&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:c}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:i?t("vm.vps.checking"):o?t("vm.vps.unavailable",{reason:o}):n===!1?t("vm.vps.notConfigured"):s.length===1?t("vm.vps.foundOne"):t("vm.vps.foundMany",{count:s.length})}),!(n===!1&&!i&&!o)&&e.jsxs("div",{"aria-busy":i||r!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:[o&&s.length>0&&e.jsxs("div",{className:"flex items-center gap-2 border-b border-hairline/35 px-3 py-2.5 text-[12px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",o]}),i&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.vps.checkingList")]}):o&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",o]}):n===!1?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Bc,{size:14,className:"shrink-0"})," ",t("vm.vps.notConfigured")]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.vps.noneFound")}):s.map((m,p)=>{const x=um(m),g=zs(x),h=r===m.name,b=Ms(m.name);return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",p>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:m.orphaned?t("vm.vps.orphan",{id:b}):m.ownerName}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",m.inUse||x==="running"?"bg-success/15 text-success":x==="stopped"||x==="paused"?"bg-control text-ink-secondary":"bg-warning/15 text-warning"),children:g}),a.length>1&&e.jsx("span",{className:"rounded-full bg-control px-2 py-0.5 font-mono text-[11px] text-ink-secondary",children:m.vpsAlias})]}),e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:m.orphaned?t("vm.owner.gone"):t("vm.owner.owned")}),m.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.vps.stopFirst")})]}),e.jsxs("button",{type:"button",onClick:()=>u(m),disabled:i||m.inUse||r!==null,"aria-busy":h||void 0,title:t("vm.vps.removeTitle"),className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[h?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("vm.vps.remove")]})]},`${m.vpsAlias??""}:${m.name}`)})]})]})}const sm=[1e3,2e3,4e3];function nm(s){return new Promise(n=>window.setTimeout(n,s))}const am={auto:"vm.dest.auto",cloud:"place.cloud",vm:"vm.dest.vm",local:"vm.dest.local",browser:"vm.dest.browser",off:"vm.dest.off"},im={unmanaged:"vm.state.notManaged","in-use":"vm.state.inUse",stopped:"vm.state.stopped",running:"vm.state.running",attention:"vm.state.attention",sleeping:"vm.state.sleeping","going-to-sleep":"vm.state.goingToSleep",starting:"vm.state.starting",restarting:"vm.state.restarting",removing:"vm.state.removing",paused:"vm.state.paused"};function zs(s){return t(im[s])}function rm(s){return s.managed?s.inUse?"in-use":s.container==="stopped"?"stopped":s.ready?"running":"attention":"unmanaged"}function lm(s){return zs(rm(s))}function om(s){return s.inUse?"in-use":s.state==="removing"?"removing":s.state==="archived"?"sleeping":s.state==="archiving"?"going-to-sleep":["idle","ready","running"].includes(s.state)?"running":["init","provisioning","provisioned","cloning"].includes(s.state)?"starting":"attention"}function Ai(s,n,a){const i={...a},r=new Set(s.map(o=>o.boxId)),c=s.flatMap(o=>{const d=a[o.boxId];return d==="deleted"?[]:d==="deleting"?[{...o,state:"removing"}]:d!=="sleeping"?[o]:o.state==="archived"?(delete i[o.boxId],[o]):[{...o,state:"archived"}]});for(const o of n)a[o.boxId]!=="sleeping"||r.has(o.boxId)||c.push({...o,state:"archived"});for(const[o,d]of Object.entries(a))(d==="deleted"||d==="deleting")&&!r.has(o)&&delete i[o];return{instances:c,overrides:i}}function cm(s,n,a){return s.configured!==!0||s.available!==!0?{instances:n,overrides:{...a}}:Ai(Array.isArray(s.instances)?s.instances:[],n,a)}function dm(s){return["idle","ready","running"].includes(s.state)}function um(s){return s.inUse?"in-use":s.state==="running"?"running":s.state==="restarting"?"restarting":s.state==="removing"?"removing":["created","exited"].includes(s.state)?"stopped":s.state==="paused"?"paused":"attention"}function Ms(s){const n=/-([a-f0-9]{12})$/i.exec(s)?.[1];return n?n.slice(-8).toLowerCase():"unknown"}function mm(s){return{confirmation:t("vm.confirm.deleteBotVm",{name:s.name}),request:Os(`/api/bots/${s.botId}/local-computer/remove`,{})}}function pm(s,n){return{confirmation:s==="delete"?t("vm.confirm.deleteCloud",{subject:n.orphaned?t("vm.confirm.orphanCloud"):t("vm.confirm.ownedCloud",{name:n.ownerName??""})}):null,request:Os(`/api/computers/boxes/${encodeURIComponent(n.boxId)}/${s}`,s==="delete"?{confirmName:n.name}:{})}}function xm(s){const n=Ms(s.name);return{confirmation:t("vm.confirm.removeVps",{subject:s.orphaned?t("vm.confirm.orphanVps",{id:n}):t("vm.confirm.ownedVps",{name:s.ownerName??""})}),request:Os(`/api/computers/vps/${encodeURIComponent(s.name)}/remove`,{confirmName:s.name,alias:s.vpsAlias})}}function Qt(s,n){return s.confirmation!==null&&!n(s.confirmation)?null:s.request}function gm({instances:s,configured:n,loading:a,pending:i,error:r,unavailableReason:c,onRefresh:o,onSleep:d,onDelete:u}){return e.jsxs(Y,{title:t("vm.cloud.title"),subtitle:t("vm.cloud.subtitle"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:n===!0?t("vm.cloud.includesOrphans"):n===!1?e.jsxs(e.Fragment,{children:[t("vm.cloud.needsKey")," ",e.jsx(Ba,{id:"box"})]}):t("vm.cloud.refreshHint")}),e.jsxs("button",{type:"button",onClick:o,disabled:a||i!==null,"aria-label":t("vm.cloud.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(a&&"animate-spin")})," ",t("vm.refresh")]})]}),r&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:r}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:a?t("vm.cloud.checking"):c?t("vm.cloud.unavailable",{reason:c}):n===!1?t("vm.cloud.notConnected"):s.length===1?t("vm.cloud.foundOne"):t("vm.cloud.foundMany",{count:s.length})}),!(n===!1&&!a&&!c)&&e.jsx("div",{"aria-busy":a||i!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:a&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.cloud.checkingList")]}):c?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",c]}):n===!1?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(vs,{size:14,className:"shrink-0"})," ",t("vm.cloud.notConnected")]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.cloud.noneFound")}):s.map((m,p)=>{const x=om(m),g=zs(x),h=i?.boxId===m.boxId,b=dm(m),y=x==="removing";return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",p>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:m.orphaned?t("vm.cloud.orphan"):t("vm.cloud.ofBot",{name:m.ownerName??""})}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",m.inUse||x==="running"?"bg-success/15 text-success":x==="sleeping"||x==="going-to-sleep"?"bg-control text-ink-secondary":"bg-warning/15 text-warning"),children:g})]}),e.jsx("div",{className:"mt-1 break-all text-[12px] text-ink-secondary",children:m.orphaned?t("vm.owner.gone"):t("vm.cloud.machineId",{id:m.name})}),m.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.cloud.stopFirst")})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[e.jsxs("button",{type:"button",onClick:()=>d(m),disabled:a||m.inUse||i!==null||!b,"aria-busy":h&&i?.action==="sleep"?!0:void 0,title:b?t("vm.cloud.sleepTitle"):t("vm.cloud.sleepBlocked",{state:g.toLowerCase()}),className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:cursor-not-allowed disabled:opacity-40",children:[h&&i?.action==="sleep"?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(Lc,{size:12}),t("vm.cloud.sleep")]}),e.jsxs("button",{type:"button",onClick:()=>u(m),disabled:a||m.inUse||i!==null||y,"aria-busy":h&&i?.action==="delete"?!0:void 0,title:t("vm.cloud.deleteTitle"),className:"flex items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[h&&i?.action==="delete"?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("common.delete")]})]})]},m.boxId)})})]})}function hm({instances:s,maxInstances:n,loading:a,deletingBotId:i,error:r,unavailableReason:c,onRefresh:o,onDelete:d}){return e.jsxs(Y,{title:t("vm.perBot.title"),subtitle:t("vm.perBot.subtitle",{count:c?t("vm.perBot.inventoryUnavailable"):t("vm.perBot.created",{count:s.length,max:n})}),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:t("vm.perBot.deleteHint")}),e.jsxs("button",{type:"button",onClick:o,disabled:a||i!==null,"aria-label":t("vm.perBot.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(a&&"animate-spin")})," ",t("vm.refresh")]})]}),r&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:r}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:a?t("vm.perBot.checking"):c?t("vm.perBot.unavailable",{reason:c}):s.length===1?t("vm.perBot.foundOne"):t("vm.perBot.foundMany",{count:s.length})}),e.jsx("div",{"aria-busy":a||i!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:a&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.perBot.checkingList")]}):c?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",c]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.perBot.none")}):s.map((u,m)=>{const p=lm(u),x=i===u.botId,g=u.managed===!0;return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",m>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:u.name}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",g?u.inUse||u.ready?"bg-success/15 text-success":u.container==="stopped"?"bg-control text-ink-secondary":"bg-warning/15 text-warning":"bg-warning/15 text-warning"),children:p})]}),e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.perBot.destination",{destination:t(am[u.destination])})}),!g&&e.jsx("div",{className:"mt-1 text-[12px] text-warning",children:t("vm.perBot.unmanaged")}),g&&u.problem&&!u.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-warning",children:Za(u.problem)}),g&&u.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.perBot.stopFirst")})]}),g&&e.jsxs("button",{type:"button",onClick:()=>d(u),disabled:a||u.inUse||i!==null,"aria-busy":x||void 0,title:u.inUse?t("vm.perBot.deleteBlocked"):t("vm.perBot.deleteTitle",{name:u.name}),className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[x?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("common.delete")]})]},u.botId)})})]})}function pt({n:s,title:n,done:a,children:i}){return e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:z("mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full text-[11px]",a?"bg-success/20 text-success":"border border-hairline/50 text-ink-secondary"),children:a?e.jsx(he,{size:12}):s}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:z("text-[14px]",a?"text-ink-secondary line-through":"text-ink"),children:n}),!a&&i&&e.jsx("div",{className:"mt-2 flex flex-col items-start gap-2 [&>*]:max-w-full",children:i})]})]})}function $e({action:s,pending:n,children:a,onClick:i,danger:r=!1}){return e.jsxs("button",{onClick:i,"aria-busy":n===s,disabled:n!==null,className:z("flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-[13px] font-medium disabled:opacity-50",r?"bg-danger/15 text-danger hover:bg-danger/20":"bg-accent text-white hover:brightness-110"),children:[n===s&&e.jsx(V,{size:13,className:"animate-spin"}),a]})}const Ii=5,Pi=1440,fm=480;function bm(s){const n=s.trim();if(!/^\d+$/.test(n))return null;const a=Number(n);return a>=Ii&&a<=Pi?a:null}function ym({minutes:s,disabled:n,onSave:a}){const[i,r]=l.useState(String(s)),[c,o]=l.useState(!1),[d,u]=l.useState(""),[m,p]=l.useState(!1);l.useEffect(()=>{c||r(String(s))},[s,c]);const x=async()=>{if(!c||m)return;const g=bm(i);if(g===null){u(t("vm.idle.range"));return}p(!0);try{await a(g),r(String(g)),o(!1),u("")}catch(h){u(h instanceof Error?h.message:t("vm.idle.error"))}finally{p(!1)}};return e.jsxs("div",{className:"mt-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"local-vm-idle-timeout",className:"text-[13px] text-ink",children:t("vm.idle.label")}),e.jsx("div",{id:"local-vm-idle-timeout-help",className:"text-[12px] text-ink-secondary",children:t("vm.idle.detail")})]}),e.jsxs("div",{className:z("flex w-[150px] shrink-0 items-center rounded-lg border bg-control",d?"border-danger/60":"border-hairline/40 focus-within:border-focus"),children:[e.jsx("input",{id:"local-vm-idle-timeout",type:"number",min:Ii,max:Pi,step:1,inputMode:"numeric",value:i,disabled:n||m,"aria-invalid":!!d,"aria-describedby":d?"local-vm-idle-timeout-error local-vm-idle-timeout-help":"local-vm-idle-timeout-help",onChange:g=>{r(g.target.value),o(!0),u("")},onBlur:()=>{x()},onKeyDown:g=>{g.key==="Enter"&&g.currentTarget.blur()},className:"min-w-0 flex-1 bg-transparent px-2.5 py-1.5 text-[13px] tabular-nums text-ink focus:outline-none disabled:opacity-50"}),e.jsx("span",{className:"pr-2.5 text-[13px] text-ink-secondary",children:t("vm.idle.minutes")})]})]}),d?e.jsx("p",{id:"local-vm-idle-timeout-error",role:"alert",className:"mt-1.5 text-[12px] text-danger",children:d}):null]})}function Ri(){const s=W().state.config?.cloudHome===!0,[n,a]=l.useState(null),[i,r]=l.useState(!0),[c,o]=l.useState(null),d=l.useRef(null);l.useEffect(()=>()=>d.current?.abort(),[]);const[u,m]=l.useState(null),[p,x]=l.useState(!1),[g,h]=l.useState(0),[b,y]=l.useState([]),[f,k]=l.useState(2),[E,N]=l.useState(!1),[w,I]=l.useState(null),[j,O]=l.useState(null),[v,A]=l.useState(null),[P,F]=l.useState(0),[se,ne]=l.useState([]),[X,S]=l.useState(null),[q,ee]=l.useState(!0),[T,B]=l.useState(null),[R,$]=l.useState(null),[te,le]=l.useState(null),[ie,D]=l.useState(0),Z=l.useRef([]),oe=l.useRef({}),[xe,ce]=l.useState([]),[ae,fe]=l.useState(null),[_,re]=l.useState([]),[L,C]=l.useState(!0),[H,ue]=l.useState(null),[G,je]=l.useState(null),[Ae,qe]=l.useState(null),[Je,Oe]=l.useState(0),[kr,ze]=l.useState(""),Ye=l.useCallback(async M=>{const K=await fetch(...mt("status",M)),J=await K.json().catch(()=>({}));if(!M?.aborted){if(!K.ok)throw new Error(J.error??t("vm.err.status",{code:K.status}));return a(J),m(null),J}},[]),Rt=l.useCallback(async M=>{const K=await fetch(...mt("local-vms",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.inventory",{code:K.status}));const Q=J;y(Q.instances),k(Q.maxInstances),O(Q.available?null:Za(Q.problem)??t("vm.err.runtimeUnavailable")),I(null)},[]),Xe=l.useCallback(async M=>{const K=await fetch(...mt("cloud",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.cloudInventory",{code:K.status}));const Q=J,ge=cm(Q,Z.current,oe.current);oe.current=ge.overrides,Z.current=ge.instances,ne(ge.instances),S(Q.configured===!0),$(Q.available||!Q.configured?null:Q.problem??t("vm.err.cloudUnavailable")),B(null)},[]),Tt=l.useCallback(async M=>{const K=await fetch(...mt("vps",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.vpsInventory",{code:K.status}));const Q=J;ce(Array.isArray(Q.instances)?Q.instances:[]),fe(Q.configured===!0),re(Array.isArray(Q.vpsAliases)?Q.vpsAliases:[]),je(Q.available||!Q.configured?null:Q.problem??t("vm.err.vpsUnavailable")),ue(null)},[]);l.useEffect(()=>{if(s)return;let M=!0,K,J;const Q=async()=>{J=new AbortController;try{await Ye(J.signal)}catch(ge){M&&!(ge instanceof DOMException&&ge.name==="AbortError")&&(a(null),m(ge instanceof Error?ge.message:String(ge)))}finally{M&&(r(!1),K=window.setTimeout(()=>{Q()},5e3))}};return Q(),()=>{M=!1,J?.abort(),K!==void 0&&window.clearTimeout(K)}},[s,Ye,g]),l.useEffect(()=>{if(n?.mode!=="per-bot"){y([]),N(!1),I(null),O(null);return}const M=new AbortController;return N(!0),Rt(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||I(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||N(!1)}),()=>M.abort()},[P,Rt,n?.mode]),l.useEffect(()=>{const M=new AbortController;return ee(!0),Xe(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||$(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||ee(!1)}),()=>M.abort()},[ie,Xe]),l.useEffect(()=>{const M=new AbortController;return C(!0),Tt(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||je(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||C(!1)}),()=>M.abort()},[Tt,Je]);const Bt=async(M,K)=>{const J=await fetch(`/api/local-computer/${M}`,{method:"POST",headers:{"content-type":"application/json"},body:"{}",signal:K}),Q=await J.json().catch(()=>({})),ge={pull:"vm.err.prepare",run:"vm.err.create",start:"vm.err.start",stop:"vm.err.stop",remove:"vm.deleteError"};if(!J.ok)throw new Error(Q.error??t(ge[M]));return K.throwIfAborted(),a(Q),Q},$s=M=>window.ogb?.confirm?window.ogb.confirm(M):window.confirm(M),De=async M=>{if(c!==null||d.current)return;const K=new AbortController;d.current=K,o(M),m(null);try{if(M==="remove"&&!await $s(t("vm.confirm.deleteShared"))||M==="recreate"&&!await $s(t("vm.confirm.recreate")))return;let J;if(M==="recreate"?(await Bt("remove",K.signal),J=await Bt("run",K.signal)):J=await Bt(M,K.signal),(M==="run"||M==="start"||M==="recreate")&&(J=await Qc(J,async()=>await Ye(K.signal)??J,K.signal),!J.ready))throw new Error(J.problem??t("vm.err.start"));await Ye(),ze(M==="remove"?t("vm.announce.deleted"):M==="stop"?t("vm.announce.stopped"):t("vm.announce.updated"))}catch(J){if(K.signal.aborted)return;m(J instanceof Error?J.message:String(J))}finally{d.current=null,K.signal.aborted||o(null)}},Hs=async(M,K)=>{x(!0),m(null);try{const J=await fetch("/api/config",{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({localVm:{mode:M,maxInstances:K}})}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Error(Q.error??t("vm.policyError"));a(ge=>ge&&{...ge,mode:M,max_instances:K}),await Ye()}catch(J){m(J instanceof Error?J.message:String(J))}finally{x(!1)}},Nr=async M=>{const K=await fetch("/api/config",{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({localVm:{idleTimeoutMinutes:M}})}),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.idle.error"));a(Q=>Q&&{...Q,idle_timeout_ms:M*6e4})},wr=async M=>{if(!M.managed){I(t("vm.unmanagedError"));return}const K=Qt(mm(M),J=>window.confirm(J));if(K){A(M.botId),I(null);try{const J=await fetch(...K),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Error(Q.error??t("vm.deleteError"));await Rt(),ze(t("vm.announce.deletedBot",{name:M.name}))}catch(J){I(J instanceof Error?J.message:String(J))}finally{A(null)}}},Ws=async(M,K)=>{const J=Qt(pm(M,K),Q=>window.confirm(Q));if(J){le({boxId:K.boxId,action:M}),B(null),ze("");try{const Q=await fetch(...J),ge=await Q.json().catch(()=>({}));if(!Q.ok)throw new Error(ge.error??t(M==="delete"?"vm.cloud.deleteError":"vm.cloud.sleepError"));const zt=M==="delete"&&ge?.pending===!0;oe.current={...oe.current,[K.boxId]:M==="delete"?zt?"deleting":"deleted":"sleeping"};const Mt=Ai(Z.current,Z.current,oe.current);oe.current=Mt.overrides,Z.current=Mt.instances,ne(Mt.instances);const _e=K.orphaned?t("vm.announce.orphanCloud"):t("vm.confirm.ownedCloud",{name:K.ownerName??""});if(ze(zt?`${_e}: ${t("vm.state.removing")}.`:t(M==="delete"?"vm.announce.cloudDeleted":"vm.announce.cloudSleeping",{subject:_e})),zt){for(const Ce of sm){await nm(Ce);try{await Xe()}catch{}if(oe.current[K.boxId]!=="deleting"){ze(t("vm.announce.cloudDeleted",{subject:_e}));return}}const Ke={...oe.current};delete Ke[K.boxId],oe.current=Ke;const dt=Z.current.map(Ce=>Ce.boxId===K.boxId?{...Ce,state:K.state}:Ce);Z.current=dt,ne(dt);try{await Xe(),Z.current.some(Ce=>Ce.boxId===K.boxId)||ze(t("vm.announce.cloudDeleted",{subject:_e}))}catch(Ce){const Cr=Ce instanceof Error?Ce.message:String(Ce);B(`${_e}: ${t("vm.state.removing")}. ${Cr}`)}return}try{await Xe()}catch(Ke){const dt=Ke instanceof Error?Ke.message:String(Ke);B(t(M==="delete"?"vm.cloud.deletedRefreshError":"vm.cloud.sleepRefreshError",{subject:_e,detail:dt}))}}catch(Q){B(Q instanceof Error?Q.message:String(Q))}finally{le(null)}}},Sr=async M=>{const K=Ms(M.name),J=Qt(xm(M),Q=>window.confirm(Q));if(J){qe(M.name),ue(null);try{const Q=await fetch(...J),ge=await Q.json().catch(()=>({}));if(!Q.ok)throw new Error(ge.error??t("vm.vpsRemoveError"));await Tt(),ze(t("vm.announce.vpsRemoved",{subject:M.orphaned?t("vm.announce.orphanVps",{id:K}):t("vm.confirm.ownedVps",{name:M.ownerName??""})}))}catch(Q){ue(Q instanceof Error?Q.message:String(Q))}finally{qe(null)}}},Ie=n?.commands,ct=n?.ready===!0,Gs=n?.container!=="missing",Vs=!!(Gs&&(!n?.imageMatches||!n?.managed||n?.network==="unsafe"||n?.security==="unsafe"||n?.persistence==="unsafe")),qs=!i&&!n,Js=n?.platform==="darwin"?t("vm.host.mac"):t("vm.host.computer"),ke=n?.mode==="per-bot",Lt=ke&&n?.runtime==="container",Ot=ke?!!(n?.daemonUp&&n?.image&&!Lt):ct;return e.jsxs(e.Fragment,{children:[e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:kr}),e.jsx(gm,{instances:se,configured:X,loading:q,pending:te,error:T,unavailableReason:R,onRefresh:()=>D(M=>M+1),onSleep:M=>{Ws("sleep",M)},onDelete:M=>{Ws("delete",M)}}),e.jsx(tm,{instances:xe,configured:ae,aliases:_,loading:L,removingName:Ae,error:H,unavailableReason:G,onRefresh:()=>Oe(M=>M+1),onRemove:M=>{Sr(M)}}),e.jsx(Xc,{}),!s&&e.jsxs(e.Fragment,{children:[e.jsxs(Y,{title:t("vm.main.title"),subtitle:ke?t("vm.main.perBotSubtitle",{host:Js}):t("vm.main.sharedSubtitle",{host:Js}),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{"aria-live":"polite",className:z("flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[13px]",Ot?"bg-success/15 text-success":"bg-control text-ink-secondary"),children:[i?e.jsx(V,{size:12,className:"animate-spin"}):Ot?e.jsx(he,{size:12}):e.jsx(Cl,{size:9}),i?t("common.checking"):qs?t("vm.main.statusUnavailable"):ke&&Ot?t("vm.main.readyPerBot"):Lt?t("vm.main.perBotUnsupported"):ct?t("vm.main.ready"):n?.problem??t("vm.main.notReady")]}),e.jsxs("button",{onClick:()=>{r(!0),h(M=>M+1),F(M=>M+1)},disabled:i||c!==null,className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1 text-[13px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12})," ",t("vm.main.recheck")]}),ct&&!ke&&e.jsxs("a",{href:n?.viewer_url??Ie?.view,target:"_blank",rel:"noreferrer",className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1 text-[13px] text-ink hover:bg-control",children:[e.jsx(ot,{size:12})," ",t("vm.main.watch")]})]}),u&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:u})]}),e.jsxs(Y,{title:t("vm.isolation.title"),subtitle:t("vm.isolation.subtitle"),children:[e.jsx("div",{className:"flex overflow-hidden rounded-lg border border-hairline/40",children:["shared","per-bot"].map((M,K)=>e.jsx("button",{type:"button",disabled:!n||p,onClick:()=>{Hs(M,n?.max_instances??2)},className:z("flex-1 px-3 py-2 text-[13px] disabled:opacity-50",K>0&&"border-l border-hairline/40",n?.mode===M?"bg-control text-ink":"text-ink-secondary hover:text-ink"),children:M==="shared"?t("vm.isolation.shared"):t("vm.isolation.perBot")},M))}),ke&&e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[13px] text-ink",children:t("vm.isolation.max")}),e.jsx("div",{className:"text-[12px] text-ink-secondary",children:t("vm.isolation.maxDetail")})]}),e.jsx(pe,{size:"sm","aria-label":t("vm.isolation.maxAria"),value:n?.max_instances??2,disabled:!n||p,onChange:M=>{Hs(n?.mode??"shared",Number(M.target.value))},children:[1,2,3,4,5,6,7,8].map(M=>e.jsx("option",{value:M,children:M},M))})]}),e.jsx(ym,{minutes:n?Math.round(n.idle_timeout_ms/6e4):fm,disabled:!n||p,onSave:Nr}),p&&e.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-[12px] text-ink-secondary",children:[e.jsx(V,{size:12,className:"animate-spin"})," ",t("vm.saving")]})]}),e.jsx(Y,{title:t("vm.setup.title"),subtitle:t("vm.setup.subtitle"),children:e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs(pt,{n:1,title:t("vm.setup.step1"),done:!!n?.runtime,children:[e.jsx("div",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("vm.setup.step1Detail")}),Ie?.install?e.jsx(et,{command:Ie.install}):e.jsx("a",{href:"https://podman.io/docs/installation",target:"_blank",rel:"noreferrer",className:"text-[13px] text-accent hover:underline",children:t("vm.setup.podmanGuide")})]}),e.jsx(pt,{n:2,title:n?.runtime&&!n.daemonUp?t("vm.setup.step2Open",{runtime:n.runtime}):t("vm.setup.step2"),done:!!n?.daemonUp,children:n?.runtime?Ie?.runtimeStart?e.jsx(et,{command:Ie.runtimeStart}):e.jsx("div",{className:"text-[13px] text-ink-secondary",children:t("vm.setup.step2Detail")}):null}),e.jsxs(pt,{n:3,title:t("vm.setup.step3"),done:!!n?.image,children:[n?.daemonUp&&e.jsx($e,{action:"pull",pending:c,onClick:()=>{De("pull")},children:t("vm.setup.prepare")}),Ie?.pull&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer",children:t("vm.setup.showPull")}),e.jsx("div",{className:"mt-2",children:e.jsx(et,{command:Ie.pull})})]})]}),e.jsxs(pt,{n:4,title:ke?t("vm.setup.step4PerBot"):Vs?t("vm.setup.step4Recreate"):t("vm.setup.step4"),done:!ke&&ct,children:[ke?e.jsx("div",{className:"text-[13px] leading-relaxed text-ink-secondary",children:Lt?t("vm.setup.applePort"):t("vm.setup.perBotHint")}):Vs?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex gap-2 text-[13px] text-warning",children:[e.jsx(Te,{size:15,className:"mt-0.5 shrink-0"}),e.jsx("span",{children:n?.problem})]}),n?.image?e.jsxs($e,{action:"recreate",pending:c,onClick:()=>{De("recreate")},danger:!0,children:[e.jsx(El,{size:13})," ",t("vm.setup.recreate")]}):e.jsx("div",{className:"text-[13px] text-ink-secondary",children:t("vm.setup.prepareFirst")})]}):n?.container==="stopped"?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t(n.stop_reason==="idle"?"vm.stopped.idle":"vm.stopped.detail")}),e.jsx($e,{action:"start",pending:c,onClick:()=>{De("start")},children:t("vm.setup.start")})]}):n?.container==="running"?e.jsxs("div",{className:"flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.setup.waiting")]}):n?.image?e.jsxs(e.Fragment,{children:[e.jsx($e,{action:"run",pending:c,onClick:()=>{De("run")},children:t("vm.setup.start")}),e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("vm.setup.idleHint")})]}):null,Ie?.run&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer",children:t("vm.setup.showCommand")}),e.jsx("div",{className:"mt-2",children:e.jsx(et,{command:Ie.run})})]})]})]})}),ke&&e.jsx(hm,{instances:b,maxInstances:f||n?.max_instances||2,loading:E,deletingBotId:v,error:w,unavailableReason:j,onRefresh:()=>F(M=>M+1),onDelete:M=>{wr(M)}}),qs&&e.jsx(Y,{children:e.jsxs("div",{className:"flex gap-2 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:15,className:"mt-0.5 shrink-0 text-warning"}),e.jsx("span",{children:t("vm.inspectFailed")})]})}),e.jsxs(Y,{title:t("vm.safety.title"),subtitle:ke?t("vm.safety.perBot",{path:n?.workspace_guest_path??"/home/cua/workspace"}):t("vm.safety.shared",{path:n?.workspace_guest_path??"/home/cua/workspace"}),children:[Gs&&e.jsxs("div",{className:"flex flex-wrap gap-2",children:[n?.container==="running"&&e.jsxs($e,{action:"stop",pending:c,onClick:()=>{De("stop")},children:[e.jsx(Al,{size:12})," ",t("vm.safety.stop")]}),e.jsxs($e,{action:"remove",pending:c,onClick:()=>{De("remove")},danger:!0,children:[e.jsx(we,{size:12})," ",ke?t("vm.safety.deleteLegacy"):t("vm.safety.deleteVm")]})]}),e.jsxs("div",{className:"mt-3 break-all text-[11px] text-ink-secondary",children:[t("vm.safety.workspace",{path:n?.workspace_path??t("vm.safety.notCreated"),driver:n?.driver_version??"0.37.0",image:n?.image_ref??t("vm.safety.notPrepared")}),n?.base_image_ref?e.jsxs(e.Fragment,{children:[" · ",t("vm.safety.baseImage",{image:n.base_image_ref})]}):null]})]})]})]})}function Ti(s){return t("pairing.worksOnceUntil",{time:Er(s)})}function us(s,n=Date.now()){const a=Math.max(0,Math.floor((n-s)/6e4));return a<1?t("remote.serverPairing.justNow"):a<60?t("remote.serverPairing.minutesAgo",{minutes:a}):a<1440?t("remote.serverPairing.hoursAgo",{hours:Math.round(a/60)}):t("remote.serverPairing.daysAgo",{days:Math.round(a/1440)})}const vm="/api/team/phone-pairing",Bn="/api/team/phones",jm=4e3;function km(s){return`${s.label} · ${s.email}`}function Nm({team:s,blocked:n}){const[a,i]=l.useState(null),[r,c]=l.useState(null),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(null),[g,h]=l.useState(()=>Date.now()),b=N=>x(t("remote.serverPairing.error",{error:N instanceof Error?N.message:String(N)}));async function y(){try{const N=await U(Bn);c(Array.isArray(N?.phones)?N.phones:[]),d(typeof N?.current=="string"?N.current:null)}catch(N){b(N)}}l.useEffect(()=>{y()},[]);const f=a?a.expiresAt<=g:!1;l.useEffect(()=>{if(!a)return;const N=setInterval(()=>h(Date.now()),15e3);return()=>clearInterval(N)},[a]),l.useEffect(()=>{if(!a||f)return;const N=setInterval(()=>{y()},jm);return()=>clearInterval(N)},[a,f]);async function k(){m(!0),x(null);try{i(await U(vm,{method:"POST",body:"{}"})),h(Date.now())}catch(N){b(N)}finally{m(!1)}}async function E(N){x(null);try{await U(`${Bn}/${encodeURIComponent(N)}`,{method:"DELETE"})}catch(w){b(w)}await y()}return e.jsxs(Y,{title:t("teamPhone.title"),subtitle:t("teamPhone.subtitle",{team:s}),children:[e.jsx("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:e.jsx("button",{type:"button","data-phone-pairing-action":!0,onClick:()=>{k()},disabled:u||!!n,title:n??void 0,className:"ui-button ui-button-primary",children:u?t("remote.serverPairing.creating"):t("remote.serverPairing.create")})}),n?e.jsx("p",{role:"status","data-team-phone-blocked":!0,className:"mt-3 text-[13px] text-ink-secondary",children:n}):null,a?e.jsx("div",{"data-team-phone-code":!0,className:"mt-4 rounded-lg border border-hairline/40 bg-inset p-4",children:f?e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("remote.serverPairing.expired")}):e.jsxs("div",{className:"flex flex-wrap items-start gap-5",children:[a.url?e.jsx("div",{className:"rounded-md bg-white p-2",children:e.jsx(La,{value:a.url,size:160,level:"M",bgColor:"#ffffff",fgColor:"#111111"})}):null,e.jsxs("div",{className:"min-w-[200px] flex-1",children:[e.jsx("div",{className:"font-mono text-[18px] tracking-[0.14em] text-ink",children:a.code}),e.jsx("div",{className:"mt-1 text-[13px] text-ink-secondary",children:Ti(a.expiresAt)}),a.url?null:e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:a.hint??t("remote.serverPairing.noLink")})]})]})}):null,e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:t("teamPhone.stays",{team:s})}),r?e.jsxs("div",{"data-team-phones":!0,children:[e.jsx("div",{className:"mt-5 text-[13px] font-medium text-ink",children:t("remote.serverPairing.devices")}),r.length===0?e.jsx("p",{className:"mt-1 text-[13px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):e.jsx("ul",{className:"mt-1 divide-y divide-hairline/40",children:r.map(N=>e.jsxs("li",{"data-team-phone":N.id,className:"flex flex-wrap items-center justify-between gap-2 py-2 text-[13px]",children:[e.jsxs("span",{className:"text-ink",children:[km(N),e.jsxs("span",{className:"text-ink-secondary",children:[" · ",t("remote.serverPairing.seen",{when:us(N.lastSeenAt,g)}),N.id===o?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),N.id===o?null:e.jsx("button",{type:"button","data-team-phone-remove":!0,onClick:()=>{E(N.id)},className:"ui-button",children:t("teamPhone.remove")})]},N.id))})]}):null,p?e.jsx("p",{className:"mt-3 text-[13px] text-danger",children:p}):null]})}function wm({saved:s,onSaved:n,className:a}){const[i,r]=l.useState(s),[c,o]=l.useState(!1),[d,u]=l.useState(null);l.useEffect(()=>r(s),[s]);async function m(){const p=i.trim();if(!(c||p===s)){o(!0),u(null);try{const x=await U("/api/config",{method:"PATCH",body:JSON.stringify({computerName:p})});n(x.computerName??p)}catch(x){u(t("remote.computerName.error",{error:x instanceof Error?x.message:String(x)}))}finally{o(!1)}}}return e.jsxs("div",{"data-computer-name":!0,className:z("flex flex-col gap-1",a),children:[e.jsx("label",{htmlFor:"computer-name",className:"text-[13px] font-medium text-ink",children:t("remote.computerName.title")}),e.jsx("input",{id:"computer-name",value:i,disabled:c,placeholder:t("remote.computerName.placeholder"),"aria-describedby":"computer-name-help",onChange:p=>r(p.target.value),onBlur:()=>{m()},onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()},className:"w-full max-w-xs rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),e.jsx("p",{id:"computer-name-help",className:"text-[12px] leading-4 text-ink-secondary",children:t("remote.computerName.help")}),d?e.jsx("p",{role:"alert",className:"text-[12px] leading-4 text-danger",children:d}):null]})}function st(s){return td(s)}function Sm(s){return s?.kind==="session"&&!s.scopes.includes("admin")?"chat-only":null}function Cm(s,n){return n?s.filter(a=>a.scopes.includes("admin")):s}const Em="ui-button ui-button-primary",Ln="ui-button";function Am({initialSession:s=null,initialPairingCodes:n=!0,cloudHome:a=!1,focusRequest:i=0,team:r,teamPhoneBlocked:c=null,simple:o=!1,reveal:d=!0}){const[u,m]=l.useState(s),[p,x]=l.useState(n),[g,h]=l.useState(null),[b,y]=l.useState("admin"),[f,k]=l.useState(null),[E,N]=l.useState([]),[w,I]=l.useState(null),[j,O]=l.useState(!1),[v,A]=l.useState("idle"),[P,F]=l.useState(null),[se,ne]=l.useState(()=>Date.now()),X=l.useRef(null),S=l.useRef(0);async function q(){try{const D=await U("/api/auth/sessions");N(Array.isArray(D?.sessions)?D.sessions:[]),I(typeof D?.current=="string"?D.current:null)}catch(D){F(t("remote.serverPairing.error",{error:D instanceof Error?D.message:String(D)}))}}if(l.useEffect(()=>{ei().then(D=>{m(D),st(D)&&q(),(D.kind==="loopback"||D.kind==="session")&&U("/api/config").then(Z=>{x(ti(Z).pairingCodes),st(D)&&h(typeof Z?.computerName=="string"?Z.computerName:"")}).catch(()=>{})})},[]),l.useEffect(()=>{i?S.current!==i&&ed(X.current)&&(S.current=i):S.current=0},[i,u]),l.useEffect(()=>{if(!f)return;const D=setInterval(()=>ne(Date.now()),15e3);return()=>clearInterval(D)},[f]),r&&u?.kind==="session"&&u.team)return e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsx(Nm,{team:r,blocked:c})});if(!st(u))return Sm(u)!=="chat-only"?null:e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsx(Y,{title:t("remote.serverPairing.title"),subtitle:t(p?"remote.serverPairing.subtitle":"remote.serverPairing.portalSubtitle"),children:e.jsx("p",{"data-server-pairing-chat-only":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t(p?"remote.serverPairing.chatOnly":"remote.serverPairing.portalChatOnly")})})});const ee=f?f.expiresAt<=se:!1,T=Cm(E,a);async function B(){O(!0),F(null),A("idle");try{const D=await U("/api/auth/pairing",{method:"POST",body:JSON.stringify({scopes:b==="admin"||a?["admin","client"]:["client"]})});k(D),ne(Date.now())}catch(D){F(t("remote.serverPairing.error",{error:D instanceof Error?D.message:String(D)}))}finally{O(!1)}}async function R(D){F(null);try{await U(`/api/auth/sessions/${encodeURIComponent(D)}`,{method:"DELETE"}),await q()}catch(Z){F(t("remote.serverPairing.error",{error:Z instanceof Error?Z.message:String(Z)}))}}async function $(){if(!f?.url)return;const D=await Oc(f.url);D!=="empty"&&A(D)}const te=p&&f?e.jsx("div",{className:"mt-4 rounded-lg border border-hairline/40 bg-inset p-4",children:ee?e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("remote.serverPairing.expired")}):e.jsxs("div",{className:"flex flex-wrap items-start gap-5",children:[f.url?e.jsx("div",{className:"rounded-md bg-white p-2",children:e.jsx(La,{value:f.url,size:160,level:"M",bgColor:"#ffffff",fgColor:"#111111"})}):null,e.jsxs("div",{className:"min-w-[200px] flex-1",children:[e.jsx("div",{className:"font-mono text-[18px] tracking-[0.14em] text-ink",children:f.code}),e.jsx("div",{className:"mt-1 text-[13px] text-ink-secondary",children:Ti(f.expiresAt)}),f.url?e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[e.jsx("code",{className:"break-all text-[12px] text-ink-secondary",children:f.url}),e.jsx("button",{type:"button",onClick:()=>{$()},className:Ln,children:t(v==="copied"?"remote.serverPairing.copied":v==="failed"?"common.copyFailed":"remote.serverPairing.copyLink")})]}):e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:f.hint??t("remote.serverPairing.noLink")})]})]})}):null,le=D=>p&&!a&&g!==null?e.jsx(wm,{saved:g,onSaved:h,className:D}):null,ie=D=>t(D.scopes.includes("admin")?"remote.serverPairing.scope.admin":"remote.serverPairing.scope.client");return o?e.jsxs("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"flex scroll-mt-4 flex-col gap-1.5 focus:outline-none",children:[e.jsxs("div",{"data-settings-rows":"",className:z(Oa,"flex flex-col"),children:[le("px-4 py-2.5"),e.jsx(de,{title:t("settings.simple.computer.pair"),subtitle:p?a?t("remote.serverPairing.cloudPersonal"):void 0:t("remote.serverPairing.portal"),children:p?e.jsxs("div",{className:"flex items-center gap-2",children:[a?null:e.jsxs(pe,{variant:"ghost",value:b,"aria-label":t("remote.serverPairing.title"),onChange:D=>y(D.target.value==="client"?"client":"admin"),children:[e.jsx("option",{value:"admin",children:t("remote.serverPairing.scope.admin")}),e.jsx("option",{value:"client",children:t("remote.serverPairing.scope.client")})]}),e.jsx("button",{type:"button","data-phone-pairing-action":d?"":void 0,onClick:()=>{B()},disabled:j,className:"ui-button",children:j?t("remote.serverPairing.creating"):t("settings.simple.computer.createCode")})]}):null}),te?e.jsx("div",{className:"px-4 pb-2.5 [&>div]:mt-0",children:te}):null,T.length===0?e.jsx("p",{className:"px-4 py-2.5 text-[13px] leading-[18px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):T.map(D=>e.jsxs("div",{className:"flex min-h-11 flex-wrap items-center gap-x-5 gap-y-2 px-4 py-2.5",children:[e.jsxs("span",{className:"min-w-[min(100%,15rem)] flex-1 text-[14px] leading-5 text-ink",children:[D.label,e.jsxs("span",{className:"text-ink-secondary",children:[" · ",ie(D)," · ",t("remote.serverPairing.seen",{when:us(D.lastSeenAt,se)}),D.id===w?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),D.id===w?null:e.jsx("button",{type:"button",onClick:()=>{R(D.id)},className:"ui-button ml-auto shrink-0",children:t("remote.serverPairing.signOut")})]},D.id))]}),P?e.jsx("p",{className:"pl-4 text-[12px] leading-4 text-danger",children:P}):null]}):e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsxs(Y,{title:t("remote.serverPairing.title"),subtitle:t(p?"remote.serverPairing.subtitle":"remote.serverPairing.portalSubtitle"),children:[p&&a?e.jsx("p",{"data-server-pairing-personal":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t("remote.serverPairing.cloudPersonal")}):null,le("mt-3"),p?e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:[a?null:e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-[13px] text-ink",children:[e.jsx("input",{type:"radio",name:"server-pairing-scope",checked:b==="admin",onChange:()=>y("admin")}),t("remote.serverPairing.scope.admin")]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-[13px] text-ink",children:[e.jsx("input",{type:"radio",name:"server-pairing-scope",checked:b==="client",onChange:()=>y("client")}),t("remote.serverPairing.scope.client")]})]}),e.jsx("button",{type:"button","data-phone-pairing-action":d?"":void 0,onClick:()=>{B()},disabled:j,className:Em,children:j?t("remote.serverPairing.creating"):t("remote.serverPairing.create")})]}):e.jsx("p",{"data-server-pairing-portal":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t("remote.serverPairing.portal")}),te,e.jsx("div",{className:"mt-5 text-[13px] font-medium text-ink",children:t(p?"remote.serverPairing.devices":"remote.serverPairing.portalDevices")}),T.length===0?e.jsx("p",{className:"mt-1 text-[13px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):e.jsx("ul",{className:"mt-1 divide-y divide-hairline/40",children:T.map(D=>e.jsxs("li",{className:"flex flex-wrap items-center justify-between gap-2 py-2 text-[13px]",children:[e.jsxs("span",{className:"text-ink",children:[D.label,D.email?e.jsxs("span",{className:"text-ink-secondary",children:[" · ",D.email]}):null,e.jsxs("span",{className:"text-ink-secondary",children:[" · ",D.scopes.includes("admin")?t("remote.serverPairing.scope.admin"):t("remote.serverPairing.scope.client")," · ",t("remote.serverPairing.seen",{when:us(D.lastSeenAt,se)}),D.id===w?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),D.id===w?null:e.jsx("button",{type:"button",onClick:()=>{R(D.id)},className:Ln,children:t("remote.serverPairing.signOut")})]},D.id))}),P?e.jsx("p",{className:"mt-3 text-[13px] text-danger",children:P}):null]})})}function Im({profileEmail:s="",focusRequest:n=0,simple:a=!1}){return e.jsx(Il,{})}function Pm(s){const n=s.trim().toLowerCase();return!n||/\s/.test(n)?null:n.startsWith("@")?/^@[^@\s]+\.[^@\s]+$/.test(n)?n:null:/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(n)?n:null}function On(s,n,a){const i=s.admins.filter(c=>c!==n),r=s.members.filter(c=>c!==n);return a==="admin"?{admins:[...i,n],members:r}:{admins:i,members:[...r,n]}}function Rm(s,n){return{admins:s.admins.filter(a=>a!==n),members:s.members.filter(a=>a!==n)}}function zn(s,n){const a=s.replace(/\/+$/,"");return n.startsWith("@")?`${a}/pair`:`${a}/pair?email=${encodeURIComponent(n)}`}function Tm(s,n,a){const i=[],r=new Set,c=(o,d)=>{const u=o.trim().toLowerCase();if(!u||r.has(u))return;r.add(u);const m=n.filter(x=>x.email?.toLowerCase()===u),p=a.find(x=>x.key===`user:${u}`);i.push({entry:u,role:d,isDomain:u.startsWith("@"),lastSeenAt:m.length?Math.max(...m.map(x=>x.lastSeenAt)):null,devices:m.length,turns:p?.turns??0,costUsd:p?.costUsd??null,...nt(p?.estimatedUsd)&&p.estimatedUsd>0?{estimated:!0}:{}})};for(const o of s.admins)c(o,"admin");for(const o of s.members)c(o,"member");return i}function Bm(s,n){const a=new Map;for(const i of s){const r=i.email?.trim().toLowerCase();r&&a.set(r,[...a.get(r)??[],i])}return[...a.entries()].map(([i,r])=>{const c=n.find(o=>o.key===`user:${i}`);return{entry:i,role:r.some(o=>o.scopes?.includes("admin"))?"admin":"member",isDomain:!1,lastSeenAt:Math.max(...r.map(o=>o.lastSeenAt)),devices:r.length,turns:c?.turns??0,costUsd:c?.costUsd??null}}).sort((i,r)=>i.role===r.role?i.entry.localeCompare(r.entry):i.role==="admin"?-1:1)}function Lm(s,n=Date.now()){return s===null?t("people.never"):n-s<1440*6e4?t("people.today"):new Date(s).toISOString().slice(0,10)}function Bi({people:s,busy:n,onRole:a,onRemove:i,onLink:r,readOnly:c=!1}){if(s.length===0)return e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t(c?"people.portal.empty":"people.empty")});const o="grid grid-cols-[1fr_auto_auto_auto_auto] items-center gap-x-4";return e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("div",{className:z(o,"border-b border-hairline/40 pb-2 text-[12px] font-medium uppercase tracking-wide text-ink-secondary"),children:[e.jsx("span",{children:t("people.colPerson")}),e.jsx("span",{children:t("people.colRole")}),e.jsx("span",{className:"text-right",children:t("people.colLastSeen")}),e.jsx("span",{className:"text-right",children:t("people.colMonth")}),e.jsx("span",{})]}),s.map(d=>e.jsxs("div",{className:z(o,"border-b border-hairline/20 py-2 text-[13px]"),children:[e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-ink",children:d.isDomain?t("people.everyoneAt",{domain:d.entry.slice(1)}):d.entry}),d.devices>0&&e.jsx("span",{className:"block text-[12px] text-ink-secondary",children:t("people.devices",{count:String(d.devices)})})]}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px] font-medium",d.role==="admin"?"bg-accent/15 text-accent":"bg-control text-ink-secondary"),children:d.role==="admin"?t("people.roleAdmin"):t("people.roleMember")}),e.jsx("span",{className:"text-right tabular-nums text-ink-secondary",children:d.isDomain?"—":Lm(d.lastSeenAt)}),e.jsx("span",{className:"text-right tabular-nums text-ink",title:t("people.turns",{turns:String(d.turns)}),children:nt(d.costUsd)?`${d.estimated?"~":""}${at(d.costUsd)}`:"—"}),c?e.jsx("span",{}):e.jsxs("span",{className:"flex items-center justify-end gap-2 text-[12px]",children:[e.jsx("button",{type:"button",disabled:n,onClick:()=>r(d),"aria-label":t("people.link"),title:t("people.link"),className:"rounded-md p-1 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:e.jsx(Pl,{size:13})}),e.jsx("button",{type:"button",disabled:n,onClick:()=>a(d,d.role==="admin"?"member":"admin"),className:"text-ink-secondary hover:text-ink disabled:opacity-50",children:d.role==="admin"?t("people.makeMember"):t("people.makeAdmin")}),e.jsx("button",{type:"button",disabled:n,onClick:()=>i(d),className:"text-danger hover:underline disabled:opacity-50",children:t("people.remove")})]})]},d.entry))]})}function Li({link:s}){const{state:n,copy:a}=As(s);return e.jsxs("div",{className:"mt-3 rounded-lg border border-hairline/40 bg-inset p-3 text-[13px]",children:[e.jsx("div",{className:"mb-1 text-ink-secondary",children:t("people.link")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"min-w-0 flex-1 select-all break-all text-ink",children:s}),e.jsxs("button",{type:"button",onClick:a,className:"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[12px] text-ink-secondary hover:bg-control hover:text-ink",children:[n==="copied"?e.jsx(he,{size:13,className:"text-success"}):n==="failed"?e.jsx(Le,{size:13,className:"text-danger"}):e.jsx(Ya,{size:13}),t(n==="copied"?"people.copied":n==="failed"?"common.copyFailed":"people.copy")]})]}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("people.linkHint")})]})}function Om({peopleUrl:s,people:n}){const a=()=>{};return e.jsxs(Y,{title:t("people.title"),subtitle:t("people.portal.subtitle"),children:[e.jsxs("div",{"data-people-portal":!0,className:"flex flex-col gap-3 text-[13px] leading-relaxed text-ink-secondary",children:[e.jsx("p",{children:t("people.portal.managed")}),s&&e.jsxs("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"flex w-fit items-center gap-2 rounded-lg bg-control px-3 py-2 font-medium text-ink hover:bg-control/70",children:[t("people.portal.open")," ",e.jsx(ot,{size:14,"aria-hidden":"true"})]})]}),e.jsx("div",{className:"mt-4",children:e.jsx(Bi,{people:n,busy:!1,readOnly:!0,onRole:a,onRemove:a,onLink:a})}),e.jsx("p",{className:"mt-3 text-[12px] leading-relaxed text-ink-secondary",children:t("people.portal.note")})]})}function Oi({simple:s=!1,startOpen:n=!1}){const[a,i]=l.useState(n),[r,c]=l.useState(!1),[o,d]=l.useState(null),[u,m]=l.useState(null),[p,x]=l.useState(null),[g,h]=l.useState([]),[b,y]=l.useState(typeof window<"u"?window.location.origin:""),[f,k]=l.useState(null),[E,N]=l.useState(""),[w,I]=l.useState("member"),[j,O]=l.useState(null),[v,A]=l.useState(!1),[P,F]=l.useState(!1),[se,ne]=l.useState(null),X=l.useCallback(async()=>{F(!0),ne(null);try{const[B,R,$,te,le]=await Promise.all([U("/api/config"),U("/api/auth/sessions").catch(()=>({sessions:[]})),U("/api/usage?groupBy=user").catch(()=>({groups:[]})),U("/api/settings/custom-domain").catch(()=>null),fetch("/.well-known/openmausbot/environment").then(xe=>xe.ok?xe.json():null).catch(()=>null)]),ie={admins:Array.isArray(B?.signIn?.admins)?B.signIn.admins:[],members:Array.isArray(B?.signIn?.members)?B.signIn.members:[]},D=ti(B);m(D),x(ie);const Z=Array.isArray(R?.sessions)?R.sessions:[],oe=Array.isArray($?.groups)?$.groups:[];h(D.authority==="portal"?Bm(Z,oe):Tm(ie,Z,oe)),typeof te?.publicUrl=="string"&&te.publicUrl&&y(te.publicUrl),k(le?.capabilities?.emailSignIn===!0?!0:le?!1:null)}catch(B){ne(B instanceof Error?B.message:String(B))}finally{F(!1)}},[]);l.useEffect(()=>{ei().then(B=>{d(B),st(B)&&X()})},[X]);const S=async B=>{A(!0),ne(null);try{await U("/api/config",{method:"PUT",body:JSON.stringify({signIn:B})}),await X()}catch(R){ne(R instanceof Error?R.message:String(R))}finally{A(!1)}},q=async()=>{if(c(!0),!p||v)return;const B=Pm(E);if(!B){ne(t("remote.signInAccess.invalid"));return}await S(On(p,B,w)),N(""),O(zn(b,B))};if(!st(o))return null;const ee=u?.authority==="portal"?e.jsx(Om,{peopleUrl:u.peopleUrl,people:g}):null,T=e.jsxs(e.Fragment,{children:[f===!1&&(!s||r)&&e.jsx("p",{className:"mb-3 rounded-lg border border-warning/25 bg-warning/5 px-3 py-2 text-[13px] text-ink-secondary",children:t(u?.pairingCodes===!1?"people.portalSignIn":"people.notHosted")}),e.jsxs("form",{className:"flex flex-wrap items-center gap-2",onSubmit:B=>{B.preventDefault(),q()},children:[e.jsx("input",{value:E,onChange:B=>N(B.target.value),placeholder:t("remote.signInAccess.placeholder"),"aria-label":t("people.inviteEmail"),disabled:v,className:"min-w-[16rem] flex-1 rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none disabled:opacity-50"}),e.jsxs(pe,{value:w,onChange:B=>I(B.target.value),"aria-label":t("people.colRole"),disabled:v,children:[e.jsx("option",{value:"member",children:t("people.roleMember")}),e.jsx("option",{value:"admin",children:t("people.roleAdmin")})]}),e.jsxs("button",{type:"submit",disabled:v||!E.trim(),className:"ui-button ui-button-primary",children:[v?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(Se,{size:13}),t("people.invite")]}),e.jsx("button",{type:"button",onClick:()=>{X()},disabled:P||v,"aria-label":t("people.refresh"),title:t("people.refresh"),className:"rounded-md p-1.5 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:e.jsx(Ne,{size:13,className:z(P&&"animate-spin")})})]}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("people.inviteHint")}),j&&e.jsx(Li,{link:j}),se&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:se}),e.jsx("div",{className:"mt-4",children:e.jsx(Bi,{people:g,busy:v,onRole:(B,R)=>{p&&S(On(p,B.entry,R))},onRemove:B=>{p&&S(Rm(p,B.entry))},onLink:B=>O(zn(b,B.entry))})}),!s&&e.jsx("p",{className:"mt-3 text-[12px] leading-relaxed text-ink-secondary",children:t("people.note")})]});return s?e.jsxs("div",{"data-people-summary":"",children:[e.jsxs("div",{role:"group","aria-label":t("people.title"),className:"flex min-w-0 items-center gap-3 px-4 py-[13px]",children:[e.jsx("span",{"aria-hidden":"true",className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-ink/[0.06] text-ink-secondary",children:e.jsx(vt,{size:20})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[14px] leading-5 text-ink",children:t("people.title")}),e.jsx("div",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t("settings.simple.people")})]}),e.jsx("button",{type:"button","aria-expanded":a,className:"ui-button shrink-0",onClick:()=>i(!a),children:a?t("common.done"):t("settings.simple.people.invite")})]}),a&&e.jsx("div",{className:"px-3.5 pb-3.5 pt-1",children:ee??T})]}):ee??e.jsx(Y,{title:t("people.title"),subtitle:t("people.subtitle"),children:T})}const Zt="rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none [color-scheme:dark]";function zm({entry:s}){const[n,a]=l.useState(!1),i=s.type==="admin"&&(s.changed?.length||s.before||s.after);return e.jsx("li",{className:"border-b border-hairline/20 py-2 text-[13px]","data-activity-entry":s.type,children:e.jsxs("div",{className:"grid grid-cols-[auto_1fr] items-start gap-x-3",children:[e.jsx("time",{className:"whitespace-nowrap tabular-nums text-ink-secondary",dateTime:s.at,children:new Date(s.at).toLocaleString(js())}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-2",children:[e.jsx("span",{className:"font-medium text-ink",children:ld(s.who)}),e.jsx("span",{className:"min-w-0 break-words text-ink",children:od(s)})]}),s.type==="approval"&&s.summary&&e.jsx("div",{className:"mt-0.5 truncate text-[12px] text-ink-secondary",children:Rl(s.summaryCode,s.summary,s.summaryParams)}),i&&e.jsxs("button",{type:"button",onClick:()=>a(!n),"aria-expanded":n,className:"cursor-pointer mt-0.5 flex items-center gap-1 text-[12px] text-ink-secondary hover:text-ink",children:[e.jsx(Is,{size:12,className:z("transition-transform",n&&"rotate-90")}),t("activity.changed",{paths:(s.changed??[]).join(", ")||"—"})]}),i&&n&&s.type==="admin"&&e.jsxs("dl",{className:"mt-1 grid grid-cols-[auto_1fr_1fr] gap-x-3 gap-y-0.5 rounded-lg bg-inset p-2 text-[12px]",children:[e.jsx("dt",{}),e.jsx("dd",{className:"text-ink-secondary",children:t("activity.before")}),e.jsx("dd",{className:"text-ink-secondary",children:t("activity.after")}),(s.changed??Object.keys({...s.before,...s.after})).map(r=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"font-mono text-ink-secondary",children:r}),e.jsx("dd",{className:"min-w-0 break-all font-mono text-ink",children:vn(s.before?.[r])}),e.jsx("dd",{className:"min-w-0 break-all font-mono text-ink",children:vn(s.after?.[r])})]},r))]})]})]})})}function zi(){const[s,n]=l.useState({who:"",what:"all",from:"",to:""}),[a,i]=l.useState([]),[r,c]=l.useState(0),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(null),g=id(s),h=l.useCallback(async()=>{m(!0),x(null);try{const y=await U(`/api/admin-activity${g}`);i(y.entries),c(y.total),d(y.retentionDays)}catch(y){x(y instanceof Error?y.message:String(y))}finally{m(!1)}},[g]);l.useEffect(()=>{const y=window.setTimeout(()=>{h()},250);return()=>window.clearTimeout(y)},[h]);const b=y=>n(f=>({...f,...y}));return e.jsxs(Y,{title:t("activity.title"),subtitle:t("activity.subtitle",{days:String(o??180)}),children:[e.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.who"),e.jsx("input",{value:s.who,onChange:y=>b({who:y.target.value}),placeholder:t("activity.whoPlaceholder"),className:z(Zt,"w-44")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.what"),e.jsx(pe,{value:s.what,onChange:y=>b({what:y.target.value}),children:rd.map(y=>e.jsx("option",{value:y,children:t(`activity.what.${y}`)},y))})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.from"),e.jsx("input",{type:"date",value:s.from,max:s.to||void 0,onChange:y=>b({from:y.target.value}),className:Zt})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.to"),e.jsx("input",{type:"date",value:s.to,min:s.from||void 0,onChange:y=>b({to:y.target.value}),className:Zt})]}),e.jsx("button",{type:"button",onClick:()=>{h()},disabled:u,"aria-label":t("activity.refresh"),title:t("activity.refresh"),className:"cursor-pointer rounded-md p-2 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:u?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(Ne,{size:14})}),e.jsxs("a",{href:`/api/admin-activity.csv${g}`,download:!0,className:"ui-button hover:bg-raised-hover",children:[e.jsx(We,{size:13,"aria-hidden":"true"}),t("activity.export")]})]}),p&&e.jsx("p",{role:"alert",className:"mt-3 text-[13px] text-danger",children:t("activity.error",{message:p})}),!p&&a.length===0&&!u&&e.jsx("p",{className:"mt-4 text-[13px] text-ink-secondary",children:t("activity.empty")}),a.length>0&&e.jsx("ul",{className:"mt-3 flex flex-col",children:a.map((y,f)=>e.jsx(zm,{entry:y},`${y.at}-${f}`))}),r>a.length&&e.jsx("p",{className:"mt-3 text-[12px] text-ink-secondary",children:t("activity.more",{shown:String(a.length),total:String(r)})})]})}const Mn=4,Us="flex w-full min-w-0 items-center gap-3 px-3 py-2 text-start",Fs="flex flex-col divide-y divide-hairline/30 overflow-hidden rounded-xl border border-hairline/40 bg-card",Mm=s=>s.filter(n=>!n.hidden&&!n.defaultBot?.person).sort((n,a)=>n.name.localeCompare(a.name)),Mi=(s,n)=>Et(s)===n||Ua(At(s),n)!=="none",Ui=(s,n)=>{const a=za(s,n);return a?t("lookedAfter.line",{name:a.name}):t("lookedAfter.nobody")},Un=(s,...n)=>n.some(a=>a?.toLowerCase().includes(s));function Um(){const{state:s}=W(),n=Tl(),a=Bl(),i=l.useRef(null),[r,c]=l.useState("bot"),[o,d]=l.useState(""),[u,m]=l.useState(null),[p,x]=l.useState(null),g=l.useRef(null),[h,b]=l.useState(null),[y,f]=l.useState(""),k=l.useCallback(()=>b(null),[]);if(l.useEffect(()=>{p||!g.current||([...i.current?.querySelectorAll("[data-access-person]")??[]].find(v=>v.dataset.accessPerson===g.current)?.focus(),g.current=null)},[p]),!n||!a)return null;const E=n.people.filter(v=>v.role==="member").sort((v,A)=>v.name.localeCompare(A.name)),N=Mm(s.bots),w=u?N.find(v=>v.id===u):void 0,I=p?E.find(v=>v.email===p):void 0,j=o.trim().toLowerCase(),O=async(v,A,P)=>{f("");const F=At(v);try{await ln(v.id,A),b({botId:v.id,before:F,after:A,text:P})}catch(se){f(se instanceof Error?se.message:String(se))}};return e.jsxs("div",{ref:i,className:"flex min-w-0 flex-col gap-3","data-access-overview":!0,children:[I?e.jsx(Km,{person:I,bots:N.filter(v=>Mi(v,I.email)),team:n,teamName:a,apply:O,onBack:()=>{g.current=I.email,x(null)}}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"ps-4 text-[13px] leading-relaxed text-ink-secondary",children:t("botAccess.overview.introUse",{team:a})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative min-w-[180px] flex-1",children:[e.jsx(lt,{size:14,"aria-hidden":"true",className:"pointer-events-none absolute start-2.5 top-1/2 -translate-y-1/2 text-ink-secondary"}),e.jsx("input",{type:"search",value:o,"data-access-search":!0,"aria-label":t(r==="bot"?"botAccess.overview.searchBots":"botAccess.overview.searchPeople"),placeholder:t(r==="bot"?"botAccess.overview.searchBots":"botAccess.overview.searchPeople"),onChange:v=>d(v.target.value),onKeyDown:v=>{v.key==="Escape"&&o&&(v.preventDefault(),d(""))},className:"w-full rounded-lg border border-hairline/50 bg-transparent py-1.5 pe-2.5 ps-8 text-[13px] text-ink placeholder:text-ink-secondary focus:border-focus focus:outline-none"})]}),e.jsx("div",{role:"group","aria-label":t("botAccess.overview.listBy"),className:"flex shrink-0 rounded-full bg-raised/70 p-0.5",children:["bot","person"].map(v=>e.jsx("button",{type:"button","aria-pressed":r===v,"data-access-listing":v,onClick:()=>{c(v),d("")},className:z("rounded-full px-3 py-1 text-[13px] leading-[18px]",r===v?"bg-menu font-medium text-ink shadow-sm":"text-ink-secondary hover:text-ink"),children:t(v==="bot"?"botAccess.overview.byBot":"botAccess.overview.byPerson")},v))})]}),r==="bot"?e.jsx(Fm,{bots:N.filter(v=>!j||Un(j,v.name,za(v,n)?.name,Et(v)??void 0)),anyBots:N.length>0,team:n,onOpen:m}):e.jsx(_m,{people:E.filter(v=>!j||Un(j,v.name,v.email)),anyPeople:E.length>0,bots:N,onOpen:x}),e.jsx("p",{className:"ps-4 text-[12px] text-ink-secondary",children:t("botAccess.admins")})]}),y&&e.jsx("p",{role:"alert",className:"text-[13px] text-danger",children:y}),w&&e.jsx(Ll,{bot:w,teamName:a,onClose:()=>m(null),onChanged:v=>b({botId:w.id,...v})}),h&&e.jsx(Ol,{text:h.text,onUndo:()=>ln(h.botId,h.before),onDone:k},`${h.botId}:${h.text}:${JSON.stringify(h.after)}`)]})}function Fm({bots:s,anyBots:n,team:a,onOpen:i}){return n?s.length?e.jsx("ul",{className:Fs,children:s.map(r=>{const c=At(r),o=Et(r);return e.jsx("li",{className:"min-w-0",children:e.jsxs("button",{type:"button","aria-haspopup":"dialog","data-access-row":r.id,onClick:()=>i(r.id),className:z(Us,"hover:bg-ink/[0.06] focus-visible:bg-ink/[0.06] focus-visible:outline-none"),children:[e.jsx(Pt,{bot:r,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:r.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:Ui(r,a)})]}),e.jsx("span",{className:"min-w-0 max-w-[40%] truncate text-[13px] text-ink-secondary","data-access-summary":!0,children:c.everyone==="none"?t("botAccess.onlyAdded"):t("botAccess.overview.everyoneUses")}),e.jsx(Dm,{entries:Object.keys(c.people).filter(d=>d!==o),team:a})]})},r.id)})}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noBotMatch")}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noBots")})}function Dm({entries:s,team:n}){if(!s.length)return null;const a=s.map(r=>Ml(r,n)).join(", "),i=s.length-Mn;return e.jsxs("span",{role:"img","aria-label":a,title:a,"data-access-stack":s.length,className:"flex shrink-0 -space-x-0.5 rtl:space-x-reverse",children:[s.slice(0,Mn).map(r=>e.jsx("span",{className:"flex rounded-full ring-2 ring-card",children:e.jsx(Ul,{person:Fl(r,n),size:22})},r)),i>0&&e.jsxs("span",{className:"flex h-[22px] min-w-[22px] items-center justify-center rounded-full bg-card px-1 text-[11px] font-medium text-ink-secondary ring-2 ring-card",children:["+",i]})]})}function _m({people:s,anyPeople:n,bots:a,onOpen:i}){return n?s.length?e.jsx("ul",{className:Fs,children:s.map(r=>{const c=a.filter(o=>Mi(o,r.email)).length;return e.jsx("li",{className:"min-w-0",children:e.jsxs("button",{type:"button","data-access-person":r.email,onClick:()=>i(r.email),className:z(Us,"hover:bg-ink/[0.06] focus-visible:bg-ink/[0.06] focus-visible:outline-none"),children:[e.jsx(Ma,{person:r,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:r.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:r.email})]}),e.jsx("span",{className:"shrink-0 text-[13px] text-ink-secondary",children:c===1?t("botAccess.overview.botCount.one"):t("botAccess.overview.botCount.other",{count:c})})]})},r.email)})}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.noMatch")}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noPeople")})}function Km({person:s,bots:n,team:a,teamName:i,apply:r,onBack:c}){return e.jsxs(e.Fragment,{children:[e.jsx("div",{children:e.jsxs("button",{type:"button",autoFocus:!0,"data-access-back":!0,onClick:c,className:"-ms-2 flex items-center gap-1 rounded-md px-2 py-1 text-[13px] text-ink-secondary hover:bg-ink/[0.06] hover:text-ink",children:[e.jsx(Ar,{size:14,"aria-hidden":"true",className:"rtl:-scale-x-100"}),t("botAccess.overview.allPeople")]})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-3 px-3",children:[e.jsx(Ma,{person:s,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] font-medium leading-[18px] text-ink",children:s.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:s.email})]})]}),n.length===0?e.jsx("p",{className:"px-3 text-[13px] text-ink-secondary",children:t("botAccess.overview.noBotsForPerson",{name:s.name})}):e.jsx("ul",{className:Fs,children:n.map(o=>e.jsx($m,{bot:o,person:s,team:a,teamName:i,apply:r},o.id))})]})}function $m({bot:s,person:n,team:a,teamName:i,apply:r}){const c=At(s),o=Et(s)===n.email,d=c.people[n.email],u=Ua(c,n.email);return e.jsxs("li",{className:Us,"data-access-person-bot":s.id,children:[e.jsx(Pt,{bot:s,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:s.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:!d&&!o&&u===c.everyone?t("botAccess.everyoneUse",{team:i}):Ui(s,a)})]}),e.jsx("span",{className:"min-w-0 shrink-0 text-[13px] text-ink-secondary",children:o?e.jsx("span",{className:"px-2",children:t("lookedAfter.badge")}):d?e.jsx("button",{type:"button","data-access-remove":s.id,"aria-label":t("botAccess.overview.removeFrom",{name:n.name,bot:s.name}),onClick:()=>{r(s,zl(c,n.email,null),t("botAccess.overview.toastRemoved",{name:n.name,bot:s.name}))},className:"rounded-md px-2 py-1 hover:bg-ink/[0.06] hover:text-ink",children:t("botAccess.remove")}):null})]})}function Hm(s){const n=s.trim();if(!n||/[\s\\?#@%]/.test(n))return null;try{const a=new URL(n.includes("://")?n:`https://${n}`),i=a.hostname.replace(/\.$/,"");return a.protocol!=="https:"||a.port||a.pathname!=="/"||!i.includes(".")||i.length>253||/^[\d.]+$/.test(i)||!i.split(".").every(r=>/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(r))||/(?:^|\.)(?:localhost|local|internal|invalid|test)$/.test(i)?null:i}catch{return null}}function Wm({domain:s,serverIpv4:n}){const a=Hm(s);if(!a)return e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("settings.domain.enterDomain")});const i=[[t("settings.domain.recordType"),"A"],[t("settings.domain.recordName"),a],[t("settings.domain.recordValue"),n]];return e.jsxs("section",{"aria-label":t("settings.domain.dnsRecord"),className:"space-y-2 rounded-lg border border-hairline/50 p-3",children:[e.jsx("p",{className:"text-[12px] font-medium text-ink",children:t("settings.domain.dnsRecord")}),e.jsx("dl",{className:"space-y-2",children:i.map(([r,c])=>e.jsxs("div",{className:"grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2",children:[e.jsx("dt",{className:"text-[12px] text-ink-secondary",children:r}),e.jsx("dd",{className:"min-w-0",children:c?e.jsx(et,{command:c,copyLabel:t("settings.domain.copyField",{field:r})},c):e.jsx("p",{className:"text-[12px] text-warning",children:t("settings.domain.missingIp")})})]},r))}),e.jsx("p",{className:"text-[12px] leading-relaxed text-ink-secondary",children:t("settings.domain.recordHint")})]})}function Gm(s){return`bots.example.com {
1
+ import{c as rt,r as l,j as e,t,a as z,S as lt,f as he,p as ys,g as vs,a8 as Er,X as Le,i as js,C as Ar,a9 as ja,L as yt,aK as Ir,aT as Pr,a0 as Rr,B as Tr,b as Be,aU as Br,aV as Lr,aW as Ys,ao as Xs,aX as Or,ap as zr,aY as Mr,aZ as Ur,a3 as Fr,G as Dr,a_ as _r,a$ as ks,b0 as Kr,b1 as $r,b2 as Qs,b3 as Ns,l as Hr,b4 as Wr,m as Zs,b5 as ka,d as Gr,b6 as Vr,q as qr,b7 as Jr,o as Yr,as as Xr,b8 as en,ar as Qr,b9 as Zr,ba as tn,bb as sn,bc as nn,bd as el,be as tl,ac as sl,bf as nl,bg as al}from"./styles-C2_XZv1s.js";import{bO as wt,u as W,S as me,n as U,D as pe,cL as il,cH as Na,T as we,gX as Re,eJ as Ge,gY as rl,a0 as Te,eH as ll,eI as ol,gZ as ns,g_ as tt,g$ as wa,h0 as ws,h1 as Ss,h2 as cl,d$ as an,h3 as Sa,h4 as Ca,h5 as dl,h6 as ul,h7 as ml,bM as de,bZ as Y,e7 as as,eG as pl,h8 as Ea,h9 as bt,ha as St,hb as Aa,hc as Ia,hd as Pe,he as Fe,hf as xl,hg as gl,hh as hl,hi as fl,hj as bl,C as Ve,hk as Pa,hl as yl,hm as vl,hn as Ra,ho as Ta,hp as be,hq as ye,dn as rn,hr as Ct,hs as jl,ht as kl,hu as Nl,hv as wl,hw as Sl,gQ as Ba,bt as Cl,hx as et,W as El,dG as Al,Q as La,hy as Oa,hz as Il,aQ as vt,fs as nt,ft as at,hA as Pl,P as We,r as Rl,cj as Tl,gF as Bl,hB as Et,hC as za,hD as Ll,hE as Ol,hF as ln,hG as Ma,hH as At,hI as Ua,hJ as zl,hK as Ml,hL as Ul,hM as Fl,G as Dl,hN as _l,hO as it,ee as It,hP as Kl,hQ as $l,hR as Hl,hS as Wl,fA as Gl,hT as on,hU as Vl,hV as ql,K as Jl,hW as cn,hX as Yl,ec as Fa,hY as Xl,hZ as Ql,h_ as Zl,h$ as eo,i0 as to,i1 as so,i2 as Da,i3 as no,i4 as ao,i5 as io,i6 as ro,i7 as lo,i8 as oo,i9 as _a,ia as co,ib as uo,dM as mo,ic as po,e8 as xo,id as go,ie as ho,ig as fo,c as bo,ih as dn,ii as yo,ij as un,l as vo,ik as jo,il as ko,im as No,bG as wo,io as So,ip as Co,iq as Eo,ir as Ao,is as Ka,fq as Qe,it as Io,fp as Po,iu as $a,iv as Ro,iw as Ha,ix as To,iy as mn,iz as Bo,iA as Lo,iB as Oo,iC as zo,iD as Mo,iE as Uo,iF as Fo,iG as Do,iH as Cs,iI as _o,fg as Wa,m as Ko,iJ as $o,iK as Ho,iL as pn,iM as Wo,iN as Go,iO as xn,iP as Vo,bj as qo,iQ as Jo,iR as Yo,iS as Xo,iT as Qo,iU as Zo,iV as gn,iW as ec,by as Es,iX as tc,bz as sc,iY as nc,iZ as ac,i_ as ic,i$ as rc,j0 as lc,j1 as oc,j2 as cc,j3 as dc,j4 as hn,gt as uc,j5 as mc,j6 as pc,j7 as Ga,j8 as xc,j9 as gc,ja as hc,jb as Va,jc as qa,jd as Ja,je as fc,jf as bc,jg as yc,d4 as vc,I as jc,jh as kc,eB as Nc,bX as fn,ji as bn,e_ as yn,d_ as wc,a2 as Sc,aC as Cc,jj as Ec,jk as Ac,jl as Ic}from"./App-BWtQhGWp.js";import{L as V,P as Se,z as ot,E as Pc,M as Rc,ak as Tc,a0 as Bc,X as Lc,K as Oc,x as As,C as Ya,B as Pt,al as zc,am as Mc,an as Uc,d as Xa,r as Fc,A as Dc,U as Qa,c as _c,ao as Kc,ap as $c,N as Hc,ac as Wc,aq as Gc,b as Vc,y as qc,V as Jc,O as Ut}from"./PlacesRail-PP97GpM6.js";import{C as Is,a as Yc,R as Ne}from"./MenuMotion-CSgaJLc2.js";import{l as Za,M as Xc,w as Qc}from"./MacLocalControl-BKDzplO2.js";import{Q as Zc}from"./VisibilitySection-DH0WrBCn.js";import{r as ei,a as ti,b as ed,i as td,C as sd,c as nd,p as ad}from"./index-BSrb6nsc.js";import{c as id,A as rd,w as ld,d as od,e as vn}from"./activity-BdRjGS2C.js";import{U as si,R as ni,B as ai,S as ii,a as ri,D as li,T as oi,C as ci,L as is,b as di,F as ui,A as rs,E as cd,c as dd,P as ud,d as md,e as pd,N as xd}from"./NewBotDialog-BtvoCpqN.js";import{a as gd,u as hd,C as mi,b as fd,P as bd}from"./ProIntroduction-C-7uexIW.js";import{M as pi}from"./monitor-DuYHWIyw.js";import{C as yd}from"./coins-BHKpT34i.js";import"./org-library-BLD6YHcM.js";import"./package-format-72bbOy2w.js";import"./mcp-servers-DXFuhTlS.js";import"./WorksOnGrid-CboITAAs.js";import"./new-bot-TwOnvVO1.js";import"./RoutinesPage-ZdFTYQc-.js";import"./remote-desktop-DDRRx8uY.js";import"./team-share-Dpu1nJNz.js";import"./BrowserProfilesManager-D9JsCp1k.js";import"./SignedInSites-CyWcDbLW.js";const vd=[["path",{d:"M12 13v8l-4-4",key:"1f5nwf"}],["path",{d:"m12 21 4-4",key:"1lfcce"}],["path",{d:"M4.393 15.269A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.436 8.284",key:"ui1hmy"}]],jd=rt("cloud-download",vd);const kd=[["path",{d:"M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z",key:"e79jfc"}],["circle",{cx:"13.5",cy:"6.5",r:".5",fill:"currentColor",key:"1okk4w"}],["circle",{cx:"17.5",cy:"10.5",r:".5",fill:"currentColor",key:"f64h9f"}],["circle",{cx:"6.5",cy:"12.5",r:".5",fill:"currentColor",key:"qy21gx"}],["circle",{cx:"8.5",cy:"7.5",r:".5",fill:"currentColor",key:"fotxhn"}]],Nd=rt("palette",kd);const wd=[["path",{d:"M15 12h-5",key:"r7krc0"}],["path",{d:"M15 8h-5",key:"1khuty"}],["path",{d:"M19 17V5a2 2 0 0 0-2-2H4",key:"zz82l3"}],["path",{d:"M8 21h12a2 2 0 0 0 2-2v-1a1 1 0 0 0-1-1H11a1 1 0 0 0-1 1v1a2 2 0 1 1-4 0V5a2 2 0 1 0-4 0v2a1 1 0 0 0 1 1h3",key:"1ph1d7"}]],Sd=rt("scroll-text",wd);const Cd=[["path",{d:"M12 19h8",key:"baeox8"}],["path",{d:"m4 17 6-6-6-6",key:"1yngyt"}]],Ed=rt("terminal",Cd);const Ad=[["path",{d:"m19 5 3-3",key:"yk6iyv"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m12 6 6 6 2.3-2.3a2.4 2.4 0 0 0 0-3.4l-2.6-2.6a2.4 2.4 0 0 0-3.4 0Z",key:"1snsnr"}]],Id=rt("unplug",Ad);function Ps(s){return s.filter(n=>n.driverKind==="openai-compat"&&n.instanceId.startsWith("openai-compat-"))}const ls="limix.settings.size",Pd=640,Rd=460,Ft=()=>typeof window<"u"&&window.innerWidth>=768;function Dt(s,n,a){const i=Math.max(320,window.innerWidth-32),r=Math.max(320,window.innerHeight-96);s.style.width=`${Math.round(Math.min(Math.max(n,Math.min(Pd,i)),i))}px`,s.style.height=`${Math.round(Math.min(Math.max(a,Math.min(Rd,r)),r))}px`}function Td(s){s.style.width="",s.style.height="";try{window.localStorage.removeItem(ls)}catch{}}const Bd=[{sx:1,sy:0,cls:"right-0 top-4 bottom-4 w-1.5",cursor:"cursor-ew-resize"},{sx:-1,sy:0,cls:"left-0 top-4 bottom-4 w-1.5",cursor:"cursor-ew-resize"},{sx:0,sy:1,cls:"bottom-0 left-4 right-4 h-1.5",cursor:"cursor-ns-resize"},{sx:0,sy:-1,cls:"top-0 left-4 right-4 h-1.5",cursor:"cursor-ns-resize"},{sx:1,sy:1,cls:"bottom-0 right-0 h-4 w-4",cursor:"cursor-nwse-resize"},{sx:-1,sy:1,cls:"bottom-0 left-0 h-4 w-4",cursor:"cursor-nesw-resize"}];function Ld(){const s=l.useRef(null);l.useEffect(()=>{const a=s.current?.parentElement;if(!a)return;if(a.style.maxWidth="100%",a.style.maxHeight="100%",Ft())try{const r=JSON.parse(window.localStorage.getItem(ls)??"null");r&&typeof r.w=="number"&&typeof r.h=="number"&&Dt(a,r.w,r.h)}catch{}const i=()=>{a.style.width&&(Ft()?Dt(a,a.offsetWidth,a.offsetHeight):(a.style.width="",a.style.height=""))};return window.addEventListener("resize",i),()=>window.removeEventListener("resize",i)},[]);const n=a=>i=>{const r=s.current?.parentElement;if(!r||!Ft())return;i.preventDefault();const c=i.clientX,o=i.clientY,d=r.offsetWidth,u=r.offsetHeight,m=x=>Dt(r,d+a.sx*(x.clientX-c)*2,u+a.sy*(x.clientY-o)*2),p=()=>{window.removeEventListener("pointermove",m);try{window.localStorage.setItem(ls,JSON.stringify({w:r.offsetWidth,h:r.offsetHeight}))}catch{}};window.addEventListener("pointermove",m),window.addEventListener("pointerup",p,{once:!0})};return e.jsx("span",{ref:s,className:"contents",children:Bd.map(a=>e.jsx("span",{"aria-hidden":"true",title:"Kéo để đổi kích thước (bấm đúp để đặt lại)",className:`absolute z-20 hidden touch-none md:block ${a.cls} ${a.cursor}`,onPointerDown:n(a),onDoubleClick:()=>{const i=s.current?.parentElement;i&&Td(i)}},`${a.sx}${a.sy}`))})}function ve({children:s,note:n="settings.adminOnly.change"}){return wt()===!1?e.jsx("p",{"data-admin-only":!0,className:"text-[13px] text-ink-secondary",children:t(n)}):s}function Rs(s,n,a="start",i=0){const r=n.getBoundingClientRect().top-s.getBoundingClientRect().top+s.scrollTop;s.scrollTop=Math.max(0,a==="center"?r-(s.clientHeight-(n.offsetHeight??0))/2:r-i)}function Od(s){for(let n=s.parentElement;n;n=n.parentElement){const a=getComputedStyle(n).overflowY;if((a==="auto"||a==="scroll")&&n.scrollHeight>n.clientHeight)return n}return null}function zd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(null),o=s.config?.tts?.everyReply===!0,d=()=>{i(!0),c(null),U("/api/config",{method:"PUT",body:JSON.stringify({tts:{everyReply:!o}})}).then(u=>n({type:"configStatus",config:u})).catch(u=>c(u.message)).finally(()=>i(!1))};return e.jsxs("div",{"data-voice-every-reply":!0,className:"flex items-center justify-between gap-4 px-3 py-2.5",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[14px] font-medium leading-5 text-ink",children:t("voice.everyReply")}),e.jsx("div",{className:"mt-0.5 text-[12px] leading-4 text-ink-secondary",children:t("voice.everyReply.allHelp")}),r&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:r})]}),e.jsx(me,{checked:o,disabled:a,"aria-label":t("voice.everyReply"),onClick:d})]})}function _t(s){return[...new Set(s.split(/[,,、\s]+/).map(n=>n.trim()).filter(Boolean))]}const Ue=z(Re,"font-sans"),Md=[5,10,20,30,60],Kt="ui-icon-button shrink-0 hover:text-ink",$t={name:"Google Gemini",url:"https://generativelanguage.googleapis.com/v1beta/openai"},os={count:64,length:200},Ud=s=>s.length<=os.count&&s.every(n=>n.length<=os.length),cs=(s,n)=>U(`/api/instances/${encodeURIComponent(s)}`,{method:"PATCH",body:JSON.stringify(n)});function xi({server:s,disabled:n,onPick:a}){return e.jsxs(pe,{size:"sm",className:"shrink-0",value:s.replyWaitMinutes??"",onChange:i=>a(i.target.value?Number(i.target.value):null),disabled:n,"aria-label":t("apiInstances.replyWaitFor",{name:s.displayName}),title:t("apiInstances.replyWaitHint"),children:[e.jsx("option",{value:"",children:t("apiInstances.replyWaitDefault")}),[...new Set([...Md,...s.replyWaitMinutes?[s.replyWaitMinutes]:[]])].sort((i,r)=>i-r).map(i=>e.jsx("option",{value:i,children:t("apiInstances.replyWaitMinutes",{minutes:String(i)})},i))]})}function Fd(){const{state:s,dispatch:n,refreshInstances:a}=W(),[i,r]=l.useState(!1),[c,o]=l.useState(null),d=s.instances.find(m=>m.instanceId==="openaiCompat"&&m.driverKind==="openai-compat");if(!d||!s.config?.openaiCompat?.url)return null;const u=m=>{i||(r(!0),o(null),cs(d.instanceId,{replyWaitMinutes:m}).then(async({instances:p})=>{Array.isArray(p)?n({type:"instances",instances:p}):await a({reportErrors:!0})}).catch(p=>o(p.message||t("apiInstances.failed"))).finally(()=>r(!1)))};return e.jsxs("div",{className:"flex flex-col gap-1",children:[e.jsx(xi,{server:d,disabled:i,onPick:u}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.replyWaitHint")}),c&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:c})]})}function Dd(){const{state:s}=W();return e.jsx(_d,{servers:Ps(s.instances)})}function _d({servers:s}){const{dispatch:n,refreshInstances:a}=W(),[i,r]=l.useState(""),[c,o]=l.useState(""),[d,u]=l.useState(""),[m,p]=l.useState(""),[x,g]=l.useState(null),[h,b]=l.useState(null),[y,f]=l.useState(null),[k,E]=l.useState(""),N=!!(i.trim()&&c.trim()&&d.trim()),w=(j,O,v,A)=>{x||(g(j),b(null),O().then(async({instances:P})=>{Array.isArray(P)?n({type:"instances",instances:P}):await a({reportErrors:!0}),v?.()}).catch(P=>b({text:P.message||t("apiInstances.failed"),at:A})).finally(()=>g(null)))},I=()=>N&&w("add",()=>U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:i.trim(),url:c.trim(),key:d.trim(),..._t(m).length?{models:_t(m)}:{}})}).then(j=>(Ge("custom_endpoint","settings","unverified"),j),j=>{throw Ge("custom_endpoint","settings","error"),j}),()=>{r(""),o(""),u(""),p("")});return e.jsxs("div",{"data-api-keys-other":!0,children:[e.jsx("div",{className:"mb-0.5 text-[13px] leading-[18px] text-ink",children:t("apiInstances.title")}),e.jsx("p",{className:"mb-2 text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.subtitle")}),s.length===0&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.empty")}),s.map(j=>e.jsxs("div",{className:"mb-1.5 rounded-lg border border-hairline/60 bg-inset px-3 py-1.5",children:[e.jsxs("div",{className:"flex items-center justify-between gap-2",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[12px] text-ink",children:j.displayName}),j.url&&e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",children:j.url})]}),e.jsx(xi,{server:j,disabled:x!==null,onPick:O=>w("other",()=>cs(j.instanceId,{replyWaitMinutes:O}))}),e.jsx("button",{type:"button",onClick:()=>{E((j.managedModels??[]).join(", ")),f(y===j.instanceId?null:j.instanceId),b(null)},disabled:x!==null,"aria-label":t("apiInstances.editModels",{name:j.displayName}),"aria-expanded":y===j.instanceId,title:t("apiInstances.editModels",{name:j.displayName}),className:Kt,children:e.jsx(il,{size:13,"aria-hidden":"true"})}),e.jsx("button",{type:"button",onClick:()=>w("other",()=>U(`/api/instances/${encodeURIComponent(j.instanceId)}/refresh-models`,{method:"POST"})),disabled:x!==null,"aria-label":t("apiInstances.refreshModels",{name:j.displayName}),title:t("apiInstances.refreshModels",{name:j.displayName}),className:Kt,children:e.jsx(Na,{size:13,"aria-hidden":"true"})}),e.jsx("button",{type:"button",onClick:()=>w("other",()=>U(`/api/instances/${encodeURIComponent(j.instanceId)}`,{method:"DELETE"})),disabled:x!==null,"aria-label":t("apiInstances.remove",{name:j.displayName}),title:t("apiInstances.remove",{name:j.displayName}),className:`${Kt} hover:bg-danger/10 hover:text-danger`,children:e.jsx(we,{size:13,"aria-hidden":"true"})})]}),y===j.instanceId&&e.jsxs("div",{className:"mt-1.5 flex flex-col gap-1.5",children:[e.jsx("input",{value:k,onChange:O=>E(O.target.value),placeholder:t("apiInstances.models"),"aria-label":t("apiInstances.modelsFor",{name:j.displayName}),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.editModelsHint")}),e.jsxs("div",{className:"flex gap-1.5",children:[e.jsx("button",{type:"button",onClick:()=>{const O=_t(k);if(!Ud(O)){b({text:t("apiInstances.modelsLimit",os),at:j.instanceId});return}w("other",()=>cs(j.instanceId,{models:O}),()=>f(null),j.instanceId)},disabled:x!==null,className:"ui-button",children:t("common.save")}),e.jsx("button",{type:"button",onClick:()=>f(null),disabled:x!==null,className:"ui-button",children:t("common.cancel")})]}),h?.at===j.instanceId&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:h.text})]})]},j.instanceId)),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsx("button",{type:"button",onClick:()=>{r($t.name),o($t.url)},disabled:x!==null,className:"ui-button self-start",children:t("apiInstances.geminiPreset")}),c.trim()===$t.url&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.geminiKeyHint")}),e.jsx("input",{value:i,onChange:j=>r(j.target.value),placeholder:t("apiInstances.name"),"aria-label":t("apiInstances.name"),spellCheck:!1,disabled:x!==null,className:Ue}),e.jsx("input",{type:"url",value:c,onChange:j=>o(j.target.value),placeholder:"https://api.example.com/v1","aria-label":t("apiInstances.url"),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("input",{type:"password",value:d,onChange:j=>u(j.target.value),placeholder:t("apiInstances.key"),"aria-label":t("apiInstances.key"),autoComplete:"off",disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("input",{value:m,onChange:j=>p(j.target.value),placeholder:t("apiInstances.models"),"aria-label":t("apiInstances.models"),spellCheck:!1,disabled:x!==null,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("apiInstances.modelsHint")}),e.jsxs("button",{type:"button",onClick:I,disabled:x!==null||!N,className:"ui-button self-start",children:[x==="add"?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),x==="add"?t("apiInstances.adding"):t("apiInstances.add")]})]}),h&&!h.at&&e.jsx("div",{className:"mt-1 text-[12px] text-danger",children:h.text})]})}const Kd="lm-studio";function $d(s){const n=s.trim();if(!/^[1-9]\d{0,4}$/.test(n))return null;const a=Number(n);return a>65535?null:`http://127.0.0.1:${a}/v1`}function Hd({heading:s=!0}={}){const{state:n,dispatch:a,refreshInstances:i}=W(),r=Ps(n.instances),[c,o]=l.useState("1234"),[d,u]=l.useState(""),[m,p]=l.useState(!1),[x,g]=l.useState(null),h=$d(c),b=!!(h&&r.some(f=>f.url===h)),y=()=>{m||!h||b||(p(!0),g(null),U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:"LM Studio",url:h,key:d.trim()||Kd,catalog:"lmstudio"})}).then(async f=>{Ge("custom_endpoint","settings","unverified"),Array.isArray(f.instances)?a({type:"instances",instances:f.instances}):await i({reportErrors:!0}),u("")},f=>{Ge("custom_endpoint","settings","error"),g(f instanceof Error&&f.message?f.message:t("apiInstances.failed"))}).finally(()=>p(!1)))};return e.jsxs("div",{className:z(s&&"rounded-lg border border-hairline/40 bg-inset px-3 py-2"),children:[s&&e.jsx("div",{className:"text-[13px] text-ink",children:t("lmStudio.title")}),e.jsx("p",{className:z("text-[12px] leading-4 text-ink-secondary",s&&"mt-1"),children:t("lmStudio.desc")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] leading-4 text-ink-secondary",children:[t("lmStudio.port"),e.jsx("input",{inputMode:"numeric",value:c,onChange:f=>o(f.target.value),"aria-label":t("lmStudio.port"),spellCheck:!1,disabled:m,className:z(Ue,"font-mono")})]}),e.jsx("input",{type:"password",value:d,onChange:f=>u(f.target.value),placeholder:t("lmStudio.token"),"aria-label":t("lmStudio.token"),autoComplete:"off",disabled:m,className:z(Ue,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("lmStudio.tokenHint")}),h&&e.jsx("p",{className:"truncate font-mono text-[12px] leading-4 text-ink-secondary",children:h}),e.jsxs("button",{type:"button",onClick:y,disabled:m||!h||b,className:"ui-button self-start",children:[m?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),m?t("lmStudio.adding"):t("lmStudio.add")]}),b&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("lmStudio.added")})]}),x&&e.jsx("div",{className:"mt-1 text-[12px] text-danger",children:x})]})}const Wd="ollama",Gd="https://ollama.com/download",Vd=s=>`${s.replace(/\/+$/,"")}/v1`,qd=(s,n)=>s?.trim().replace(/\/+$/,"")===n;function Jd({visible:s}){const{state:n,dispatch:a,refreshInstances:i}=W(),[r,c]=l.useState(""),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(!1),[g,h]=l.useState(null),b=l.useRef(0),y=l.useRef(!1),f=l.useCallback(I=>{const j=++b.current;m(!0),h(null),U(`/api/instances/ollama${I?`?url=${encodeURIComponent(I)}`:""}`).then(O=>{j===b.current&&d(O.status)}).catch(O=>{j===b.current&&(d(null),h(O.message||t("apiInstances.failed")))}).finally(()=>{j===b.current&&m(!1)})},[]);l.useEffect(()=>{!s||y.current||(y.current=!0,f(""))},[s,f]);const k=o?Vd(o.url):null,E=!!(k&&(Ps(n.instances).some(I=>I.url===k)||qd(n.config?.openaiCompat?.url,k))),N=!!(k&&!E&&!p&&!u&&(o?.state==="ready"||o?.state==="no-models")),w=()=>{!N||!k||(x(!0),h(null),U("/api/instances/openai-compat",{method:"POST",body:JSON.stringify({displayName:"Ollama",url:k,key:Wd,catalog:"ollama"})}).then(async I=>{Ge("custom_endpoint","settings","unverified"),Array.isArray(I.instances)?a({type:"instances",instances:I.instances}):await i({reportErrors:!0})},I=>{Ge("custom_endpoint","settings","error"),h(I instanceof Error&&I.message?I.message:t("apiInstances.failed"))}).finally(()=>x(!1)))};return e.jsxs("div",{"data-ollama-server":!0,children:[e.jsx("div",{role:"status","aria-live":"polite",children:u?e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] leading-4 text-ink-secondary",children:[e.jsx(V,{size:12,className:"animate-spin","aria-hidden":"true"}),t("ollama.checking")]}):o&&e.jsx(rl,{status:o})}),!u&&o?.state==="not-running"&&e.jsx("a",{href:Gd,target:"_blank",rel:"noopener noreferrer",className:"mt-1 inline-block text-[12px] font-medium text-accent-text hover:underline",children:t("ollama.download")}),e.jsxs("div",{className:"mt-2 flex flex-col gap-1.5",children:[e.jsx("input",{type:"url",value:r,onChange:I=>c(I.target.value),onKeyDown:I=>{I.key==="Enter"&&f(r.trim())},placeholder:"http://127.0.0.1:11434","aria-label":t("ollama.address"),spellCheck:!1,disabled:p,className:z(Re,"font-mono")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("ollama.addressHint")}),e.jsxs("div",{className:"flex flex-wrap gap-1.5",children:[e.jsxs("button",{type:"button",onClick:w,disabled:!N,className:"ui-button",children:[p?e.jsx(V,{size:12,"aria-hidden":"true",className:"animate-spin"}):e.jsx(Se,{size:12,"aria-hidden":"true"}),p?t("ollama.adding"):t("ollama.add")]}),e.jsxs("button",{type:"button",onClick:()=>f(r.trim()),disabled:u||p,className:"ui-button",children:[e.jsx(Na,{size:12,"aria-hidden":"true"}),t("common.checkAgain")]})]}),E&&e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("ollama.added")})]}),g&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:g})]})}function Yd(){const{state:s,dispatch:n}=W(),a=s.config?.opencodeGo?.providerKeys??[],[i,r]=l.useState(""),[c,o]=l.useState(""),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(null),h=d||m!==null,b=(k,E)=>U("/api/config",{method:"PUT",body:JSON.stringify({opencodeGo:{providerKeys:{[k]:E}}})}).then(N=>n({type:"configStatus",config:N})),y=()=>{const k=i.trim().toUpperCase(),E=ll(c);if(!(h||!k||!E)){if(!ol(E)){g(t("keys.notAKey"));return}u(!0),g(null),b(k,E).then(()=>{r(""),o("")}).catch(N=>g(N.message)).finally(()=>u(!1))}},f=k=>{h||(p(k),g(null),b(k,"").catch(E=>g(E.message)).finally(()=>p(null)))};return e.jsxs("div",{"data-opencode-provider-keys":!0,className:"flex flex-col gap-2",children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.opencode.otherProviders.hint")}),s.config?.cloudHome!==!0&&e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.opencode.providersHint").split("{command}").flatMap((k,E)=>E===0?[k]:[e.jsx("code",{className:"font-mono",children:"opencode auth login"},E),k])}),a.map(k=>e.jsxs("div",{"data-opencode-provider-key":k,className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:z(Re,"block flex-1 truncate text-ink"),children:k}),e.jsx("button",{type:"button",onClick:()=>f(k),disabled:h,"aria-label":t("keys.opencode.otherProviders.removeAria",{name:k}),className:"ui-button shrink-0",children:m===k?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):t("keys.row.remove")})]},k)),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{type:"text",value:i,onChange:k=>{g(null),r(k.target.value)},onKeyDown:k=>k.key==="Enter"&&y(),disabled:h,placeholder:"VENICE_API_KEY","aria-label":t("keys.opencode.otherProviders.name"),autoComplete:"off",spellCheck:!1,className:z(Re,"w-auto min-w-[min(100%,10rem)] flex-1 uppercase placeholder:normal-case")}),e.jsx("input",{type:"password",value:c,onChange:k=>{g(null),o(k.target.value)},onKeyDown:k=>k.key==="Enter"&&y(),disabled:h,placeholder:t("keys.opencode.otherProviders.keyPlaceholder"),"aria-label":t("keys.opencode.otherProviders.key"),autoComplete:"off",className:z(Re,"w-auto min-w-[min(100%,10rem)] flex-1")}),e.jsx("button",{type:"button",onClick:y,disabled:h||!i.trim()||!c.trim(),className:"ui-button ui-button-primary shrink-0",children:d?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):t("common.save")})]}),x&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:x})]})}function Xd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(null);if(!s.config?.anthropic?.configured)return null;const o=s.config.anthropic.everyClaudeBot===!0,d=()=>{a||(i(!0),c(null),U("/api/config",{method:"PUT",body:JSON.stringify({anthropic:{everyClaudeBot:!o}})}).then(u=>n({type:"configStatus",config:u})).catch(u=>c(u.message)).finally(()=>i(!1)))};return e.jsxs("div",{"data-anthropic-every-claude-bot":!0,className:"flex flex-col gap-1.5",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("keys.anthropic.everyBot")}),e.jsx("div",{className:"text-[12px] leading-4 text-ink-secondary",children:o?t("keys.anthropic.everyBotOn"):t("keys.anthropic.everyBotOff")})]}),e.jsx(me,{checked:o,disabled:a,onClick:d,"aria-label":t("keys.anthropic.everyBot")})]}),o&&e.jsxs("p",{className:"flex gap-1.5 text-[12px] leading-4 text-warning",children:[e.jsx(Te,{size:13,className:"mt-px shrink-0","aria-hidden":"true"}),e.jsx("span",{children:t("keys.anthropic.warning")})]}),r&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:r})]})}function Qd(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(""),[r,c]=l.useState(!1),[o,d]=l.useState(null),u=!!s.config?.vps?.configured,m=!a.trim()&&u;l.useEffect(()=>{i(s.config?.vps?.sshAlias??"")},[s.config?.vps?.sshAlias]);const p=()=>{r||!a.trim()&&!u||(c(!0),d(null),U("/api/config",{method:"PUT",body:JSON.stringify({vps:{sshAlias:a.trim()}})}).then(x=>{n({type:"configStatus",config:x}),i(x.vps?.sshAlias??"")}).catch(x=>d(x.message)).finally(()=>c(!1)))};return e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsxs("p",{className:"text-[12px] leading-4 text-ink-secondary",children:[t("keys.vps.descBefore"),e.jsx("a",{href:"https://github.com/milind-soni/OpenMausBot/blob/main/docs/byo-vps.md",target:"_blank",rel:"noopener noreferrer",className:"text-accent-text hover:underline",children:t("keys.vps.descLink")}),t("keys.vps.descAfter")]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("input",{type:"text","data-key-input":!0,value:a,onChange:x=>i(x.target.value),onKeyDown:x=>x.key==="Enter"&&p(),placeholder:"my-vps","aria-label":t("keys.vps.aria"),autoComplete:"off",spellCheck:!1,className:z(Re,"w-auto min-w-[min(100%,12rem)] flex-1")}),e.jsx("button",{type:"button",onClick:p,disabled:r||!a.trim()&&!u||a.trim()===(s.config?.vps?.sshAlias??""),className:z("ui-button shrink-0",!m&&"ui-button-primary"),title:m?t("keys.vps.removeAlias"):void 0,children:r?e.jsx(V,{size:13,className:"animate-spin","aria-hidden":"true"}):m?t("keys.row.remove"):t("common.save")})]}),o&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:o})]})}function Zd(){const{state:s,dispatch:n}=W(),a=s.config?.openaiCompat?.url??"",[i,r]=l.useState(a),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=l.useRef(!1);l.useEffect(()=>{r(a)},[a]);const p=i.trim()!==a,x=()=>{m.current||!p||(m.current=!0,o(!0),u(null),U("/api/config",{method:"PUT",body:JSON.stringify({openaiCompat:{url:i.trim()}})}).then(g=>n({type:"configStatus",config:g})).catch(g=>u(g.message)).finally(()=>{m.current=!1,o(!1)}))};return e.jsxs("div",{className:"flex flex-col gap-1.5",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("keys.openaiCompat.url")}),e.jsxs("div",{className:"relative",children:[e.jsx("input",{type:"url",value:i,onChange:g=>r(g.target.value),onBlur:x,onKeyDown:g=>g.key==="Enter"&&x(),placeholder:"https://api.groq.com/openai/v1","aria-label":t("keys.openaiCompat.url"),spellCheck:!1,className:z(Re,"pr-8")}),c&&e.jsx(V,{size:13,"aria-hidden":"true",className:"absolute right-2.5 top-1/2 -translate-y-1/2 animate-spin text-ink-secondary"})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("keys.openaiCompat.urlHint")}),d&&e.jsx("div",{role:"alert",className:"text-[12px] leading-4 text-danger",children:d})]})}const eu="rounded-xl bg-card in-data-[settings-look=simple]:rounded-[12px] in-data-[settings-look=simple]:border-[0.5px] in-data-[settings-look=simple]:border-(--settings-edge) in-data-[settings-look=simple]:bg-menu",tu=1600,su={opencodeProviders:()=>e.jsx(Yd,{}),ollama:s=>e.jsx(Jd,{visible:s}),lmStudio:()=>e.jsx(Hd,{heading:!1}),vps:()=>e.jsx(Qd,{})},nu={anthropic:()=>e.jsx(Xd,{}),openaiCompat:()=>e.jsxs(e.Fragment,{children:[e.jsx(Zd,{}),e.jsx(Fd,{}),e.jsx(Dd,{})]}),box:()=>e.jsx(ml,{}),liveKey:()=>e.jsx(ul,{})};function gi(s,n){if(s.kind==="uses")return!1;const a=Ss(s,n);return a.configured||a.included===!0}function au({entry:s,visible:n}){const{state:a}=W(),i=l.useId(),c=Ss(s,a.config).configured?{tone:"ok",text:t("keys.connected")}:null;return e.jsxs("div",{"data-key-row":s.id,role:"group","aria-labelledby":i,className:Sa,children:[e.jsx(Ca,{entry:s,status:c,titleId:i}),e.jsx("div",{className:"flex flex-col gap-2 pl-8",children:su[s.id]?.(n)})]})}function iu({entry:s}){const{state:n,dispatch:a}=W(),i=l.useId(),r=s.opens,c=Ss(s,n.config),o=c.configured?{tone:"ok",text:t("keys.connected")}:null;return e.jsxs("div",{"data-key-row":s.id,role:"group","aria-labelledby":i,className:Sa,children:[e.jsx(Ca,{entry:s,status:o,titleId:i}),e.jsxs("div",{className:"flex flex-col gap-2 pl-8",children:[c.configured&&e.jsx("div",{className:"flex",children:e.jsx(dl,{saved:c,label:t(s.labelKey)})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-x-3 gap-y-2",children:[s.whereKey&&e.jsx("span",{className:"min-w-0 flex-1 text-[12px] leading-4 text-ink-secondary",children:t(s.whereKey)}),r&&e.jsx("button",{type:"button","data-key-open":!0,className:"ui-button shrink-0",onClick:()=>a({type:"toggleAppSettings",open:!0,section:r}),children:t("keys.row.open")})]})]})]})}function ru({entry:s,visible:n}){return s.kind==="uses"&&s.uses?e.jsx(an,{id:s.uses,row:s.id}):s.kind==="panel"?e.jsx(au,{entry:s,visible:n}):s.kind==="elsewhere"?e.jsx(iu,{entry:s}):e.jsx(an,{id:s.id,children:nu[s.id]?.()})}function lu({id:s,rows:n,open:a,onToggle:i}){const{state:r}=W(),c=ns.find(m=>m.id===s),o=l.useId(),d=l.useId(),u=n.filter(m=>gi(m,r.config)).length;return e.jsxs("section",{"data-keys-section":s,"aria-labelledby":o,className:eu,children:[e.jsxs("button",{type:"button","aria-expanded":a,"aria-controls":d,onClick:i,className:"flex w-full cursor-pointer items-center gap-3 rounded-[inherit] px-4 py-2.5 text-left focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-focus/60",children:[e.jsxs("span",{className:"flex min-w-0 flex-1 flex-col gap-0.5",children:[e.jsx("span",{id:o,className:"text-[14px] font-medium leading-5 text-ink",children:t(c.titleKey)}),e.jsx("span",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t(c.purposeKey)})]}),u>0&&e.jsx("span",{className:"shrink-0 text-[12px] leading-4 text-ink-secondary",children:t("keys.section.connected",{count:u})}),e.jsx(Is,{size:14,"aria-hidden":"true",className:z("shrink-0 text-ink-secondary transition-transform motion-reduce:transition-none",a&&"rotate-90")})]}),e.jsxs("div",{id:d,hidden:!a,className:"flex flex-col gap-0.5 border-t border-hairline/40 px-1 py-1.5 in-data-[settings-look=simple]:border-t-[0.5px] in-data-[settings-look=simple]:border-(--settings-edge)",children:[n.map(m=>e.jsx(ru,{entry:m,visible:a},m.id)),s==="voice"&&e.jsx(zd,{})]})]})}function ou(s,n,a){const i=n.row?s?.querySelector(`[data-key-row="${n.row}"]`):s?.querySelector(`[data-keys-section="${a}"]`);if(!i||i.closest("[hidden]"))return!1;const r=Od(i);return r&&Rs(r,i,n.row?"center":"start",16),n.row&&(i.querySelector("[data-key-input], [data-key-replace], [data-key-own], [data-key-open], input, button")?.focus({preventScroll:!0}),i.setAttribute("data-key-highlight",""),window.setTimeout(()=>i.removeAttribute("data-key-highlight"),tu)),!0}function cu(){const{state:s}=W(),[n,a]=l.useState(""),[i,r]=l.useState(()=>new Set(ns.filter(x=>x.id==="ai"||tt.some(g=>g.section===x.id&&gi(g,s.config))).map(x=>x.id))),c=l.useRef(null),o=wa(),d=n.trim().toLowerCase();l.useEffect(()=>{if(!o)return;const x=tt.find(y=>y.id===o.row)?.section??"ai";a(""),r(y=>y.has(x)?y:new Set([...y,x]));let g=0,h=0;const b=()=>{ou(c.current,o,x)||++h>60?cl(o):g=window.requestAnimationFrame(b)};return g=window.requestAnimationFrame(b),()=>window.cancelAnimationFrame(g)},[o]);const u=s.config?.live?.provider==="azure",m=tt.filter(x=>ws(x,d)&&!(u&&x.id==="liveCalls")),p=ns.flatMap(x=>{const g=m.filter(h=>h.section===x.id);return g.length>0?[{id:x.id,rows:g}]:[]});return e.jsxs("div",{ref:c,"data-keys-page":!0,className:"flex flex-col gap-4",children:[e.jsx("p",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t("settings.connections.subtitle")}),e.jsxs("div",{className:"flex h-8 items-center gap-2 rounded-lg bg-ink/[0.05] px-[9px] focus-within:ring-2 focus-within:ring-focus/60",children:[e.jsx(lt,{size:15,"aria-hidden":"true",className:"shrink-0 text-ink-secondary"}),e.jsx("input",{"data-keys-search":!0,type:"text",value:n,onChange:x=>a(x.target.value),onKeyDown:x=>{x.key!=="Escape"||!n||(x.preventDefault(),x.stopPropagation(),a(""))},placeholder:t("keys.search.placeholder"),"aria-label":t("keys.search.aria"),autoComplete:"off",spellCheck:!1,className:"w-full min-w-0 bg-transparent text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"})]}),p.length===0?e.jsx("p",{"data-keys-empty":!0,className:"px-1 text-[13px] leading-[18px] text-ink-secondary",children:t("keys.search.none",{query:n.trim()})}):p.map(({id:x,rows:g})=>e.jsx(lu,{id:x,rows:g,open:d!==""||i.has(x),onToggle:()=>r(h=>{const b=new Set(h);return b.has(x)?b.delete(x):b.add(x),b})},x))]})}function hi({simple:s=!1}){return null}function fi({simple:s=!1}){const n=window.ogb?.openAtLogin,[a,i]=l.useState(null),[r,c]=l.useState(!1),[o,d]=l.useState(!1);if(l.useEffect(()=>{let m=!0;return n?.state().then(p=>{m&&i(p)}).catch(()=>{}),()=>{m=!1}},[n]),!n||!a?.available)return null;const u=m=>{c(!0),d(!1),n.set(m).then(i,()=>d(!0)).finally(()=>c(!1))};return e.jsx(de,{title:t("settings.openAtLogin.title"),subtitle:t(s?"settings.simple.openAtLogin":"settings.openAtLogin.subtitle"),message:o?e.jsx("span",{role:"alert",className:"text-danger",children:t("settings.openAtLogin.failed")}):void 0,children:e.jsx(me,{checked:a.on,disabled:r,"aria-label":t("settings.openAtLogin.title"),onClick:()=>u(!a.on)})})}function du(s=typeof window>"u"?void 0:window.ogb){return s?.platform==="darwin"&&s.talkShortcut?["talk","voice","shortcut","hotkey","hold to talk","push to talk","quick asks"]:[]}function bi(){const s=window.ogb?.talkShortcut,[n,a]=l.useState(null),[i,r]=l.useState(!1),[c,o]=l.useState(!1);if(l.useEffect(()=>{let x=!0;return s?.state().then(g=>{x&&a(g)}).catch(()=>{}),()=>{x=!1}},[s]),!s||!n?.available)return null;const d=n.keys.find(x=>x.id===n.key)?.label??"",u=x=>{r(!0),o(!1),s.set(x).then(a,()=>o(!0)).finally(()=>r(!1))},m=c?t("settings.talk.failed"):n.enabled&&n.taken?t("settings.talk.taken",{key:d}):null,p=e.jsxs(e.Fragment,{children:[n.enabled&&e.jsx(pe,{size:"sm",className:"w-full max-w-[240px]",value:n.key,disabled:i,"aria-label":t("settings.talk.keyAria"),onChange:x=>u({key:x.target.value}),children:n.keys.map(x=>e.jsx("option",{value:x.id,children:x.label},x.id))}),m&&e.jsx("div",{role:"alert",className:n.enabled?"mt-2 text-danger":"text-danger",children:m})]});return e.jsx(de,{title:t("settings.talk.title"),subtitle:t("settings.talk.subtitle",{key:d}),message:n.enabled||m?p:null,children:e.jsx(me,{checked:n.enabled,disabled:i,"aria-label":t("settings.talk.aria"),onClick:()=>u({enabled:!n.enabled})})})}const Ht=s=>s===0||s>=1024*1024?`${Math.round(s/(1024*1024))} MB`:`${Math.ceil(s/1024)} KB`;function yi(){const[s,n]=l.useState(null),[a,i]=l.useState(!1),[r,c]=l.useState(!1),[o,d]=l.useState(null);if(l.useEffect(()=>{let m=!0;return U("/api/attachment-storage").then(p=>{m&&n(p)}).catch(()=>{}),()=>{m=!1}},[]),!s)return null;const u=async()=>{c(!0),d(null);try{const m=await U("/api/attachment-storage",{method:"POST"});n(m);const p=t("settings.attachments.cleared",{count:m.removed,freed:Ht(m.freedBytes)});d(m.failed>0?{kind:"error",message:`${p} ${t("settings.attachments.failed",{count:m.failed})}`}:{kind:"success",message:p})}catch(m){d({kind:"error",message:m instanceof Error?m.message:String(m)})}finally{c(!1),i(!1)}};return e.jsx(de,{title:t("settings.attachments.title"),subtitle:e.jsxs(e.Fragment,{children:[e.jsx("span",{"data-attachments-used":!0,className:"block",children:t("settings.attachments.used",{used:Ht(s.usedBytes),max:Ht(s.maxBytes)})}),e.jsx("span",{className:"block",children:t(a?"settings.attachments.confirmText":"settings.attachments.help")})]}),message:o&&e.jsx("p",{role:o.kind==="error"?"alert":"status",className:z(o.kind==="error"?"text-danger":"text-success"),children:o.message}),children:e.jsx("div",{className:"flex flex-wrap gap-2",children:a?e.jsxs(e.Fragment,{children:[e.jsx("button",{type:"button",onClick:()=>i(!1),disabled:r,className:"ui-button",children:t("settings.attachments.cancel")}),e.jsx("button",{type:"button",onClick:()=>{u()},disabled:r,className:"ui-button text-danger",children:r?t("settings.attachments.clearing"):t("settings.attachments.confirm")})]}):e.jsx("button",{type:"button",onClick:()=>{d(null),i(!0)},className:"ui-button",children:t("settings.attachments.clear")})})})}function vi({simple:s=!1}){const[n,a]=l.useState(!1),[i,r]=l.useState(null),[c,o]=l.useState(null),d=async()=>{if(!(!window.ogb?.exportDiagnostics||n)){a(!0),r(null);try{const p=await window.ogb.exportDiagnostics();p&&r({kind:"success",message:t("settings.diagnostics.saved",{path:p})})}catch(p){r({kind:"error",message:p instanceof Error?p.message:String(p)})}finally{a(!1)}}},u=async()=>{if(window.ogb?.openLogsFolder){r(null);try{const p=await window.ogb.openLogsFolder();o(p.folder),p.opened||r({kind:"error",message:t("settings.diagnostics.openFailed",{folder:p.folder})})}catch(p){r({kind:"error",message:p instanceof Error?p.message:String(p)})}}},m=!!window.ogb?.exportDiagnostics;return e.jsx(de,{title:t("settings.diagnostics.title"),subtitle:t(s?"settings.simple.diagnostics":"settings.diagnostics.subtitle"),message:e.jsxs(e.Fragment,{children:[c&&i?.kind!=="error"&&e.jsx("p",{role:"status","data-logs-folder":!0,className:"break-all text-ink-secondary",children:t("settings.diagnostics.logsAt",{folder:c})}),i&&e.jsx("p",{role:i.kind==="error"?"alert":"status",className:z("break-all",i.kind==="error"?"text-danger":"text-success"),children:i.message}),e.jsx("p",{"data-logs-help":!0,className:"text-ink-tertiary",children:t(m?"settings.diagnostics.logsHelp":"settings.diagnostics.elsewhere")})]}),children:m&&e.jsxs("div",{className:"flex flex-wrap gap-2",children:[window.ogb?.openLogsFolder&&e.jsx("button",{type:"button",onClick:()=>{u()},className:"ui-button",children:t("settings.diagnostics.openLogs")}),e.jsx("button",{onClick:()=>{d()},disabled:n,"aria-label":t("settings.diagnostics.aria"),className:"ui-button",children:n?t("settings.diagnostics.exporting"):t("settings.diagnostics.export")})]})})}const uu="https://dash.cloudflare.com/profile/api-tokens",mu=/^[0-9a-f]{32}$/i,jn="w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none";function pu({failureText:s}){const{state:n,dispatch:a}=W(),i=n.config?.helpers,r=i?.own.workersAi===!0,c=i?.workersAiAccountId??"",[o,d]=l.useState(null),[u,m]=l.useState(""),[p,x]=l.useState(!1),[g,h]=l.useState(!1),[b,y]=l.useState(null),[f,k]=l.useState(null),E=(o??c).trim(),N=u.trim(),w=!N&&r&&o===null,I=o!==null&&E!==c,j=A=>a({type:"configStatus",config:A}),O=async()=>{if(!(p||!N&&!r&&!I)){if(N&&!mu.test(E))return y(t("decider.workersAi.needsAccount"));x(!0),y(null),k(null);try{(I||N&&!c)&&j(await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{workersAiAccountId:E}})})),(N||w)&&j(window.ogb?.setCredential?await window.ogb.setCredential("workersAiToken",N):await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{workersAiToken:N}})})),m(""),d(null)}catch(A){y(A instanceof Error?A.message:String(A))}finally{x(!1)}}},v=async()=>{if(!(g||p||!N&&!r)){h(!0),k(null),y(null);try{const A=await U("/api/decider/test",{method:"POST",body:JSON.stringify({provider:"workersai",...N?{key:N,accountId:E}:{}})}),P=A.extraction?[t(A.extraction.ok?"decider.test.extractionOk":"decider.test.extractionFailed")]:[];k(A.ok?{ok:A.extraction?.ok!==!1,text:[t("decider.workersAi.test.ok",{ms:String(A.latencyMs)}),...P].join(" ")}:{ok:!1,text:s(A)})}catch(A){k({ok:!1,text:A instanceof Error?A.message:String(A)})}finally{h(!1)}}};return e.jsxs(Y,{title:t("decider.workersAi.title"),children:[e.jsx("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:t("decider.workersAi.detail")}),r&&e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-success",children:[e.jsx("span",{className:"size-1.5 rounded-full bg-success"}),e.jsx("span",{children:t("decider.status.connected")})]}),e.jsxs("div",{className:"flex flex-col gap-2",children:[e.jsx("input",{type:"text","data-testid":"workers-ai-account",value:o??c,onChange:A=>{k(null),y(null),d(A.target.value)},disabled:p,placeholder:t("decider.workersAi.accountIdPlaceholder"),"aria-label":t("decider.workersAi.accountId"),autoComplete:"off",spellCheck:!1,className:jn}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password","data-testid":"workers-ai-token",value:u,onChange:A=>{k(null),y(null),m(A.target.value)},onKeyDown:A=>A.key==="Enter"&&void O(),disabled:p,placeholder:r?t("keys.replace"):t("decider.workersAi.tokenPlaceholder"),"aria-label":t("decider.workersAi.token"),autoComplete:"off",spellCheck:!1,className:jn}),e.jsx("button",{type:"button","data-testid":"workers-ai-save",onClick:()=>{O()},disabled:p||!N&&!r&&!I,title:w?t("keys.removeKey"):t("common.save"),className:z("flex w-[72px] shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control py-2 text-[13px] hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",w?"text-danger":"text-ink"),children:p?e.jsx(V,{size:13,className:"animate-spin"}):w?t("keys.clear"):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})}),e.jsx("button",{type:"button","data-testid":"workers-ai-test",onClick:()=>{v()},disabled:g||p||!N&&!r,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:g?t("keys.testing"):t("keys.test")})]})]}),b&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:b}),f&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",f.ok?"text-success":"text-danger"),children:f.text}),e.jsxs("a",{href:uu,target:"_blank",rel:"noopener noreferrer",className:"mt-2 inline-flex cursor-pointer items-center gap-1 text-[12px] text-accent hover:underline",children:[t("decider.workersAi.getKey"),e.jsx(ot,{size:11,"aria-hidden":"true"})]})]})}const xu={jev:"https://typesafe.ai",openrouter:"https://openrouter.ai/keys"},gu=1500,Ts={rejected:"decider.error.rejected",unreachable:"decider.error.unreachable",timeout:"decider.error.timeout",rate_limited:"decider.error.rateLimited",overloaded:"decider.error.overloaded",malformed:"decider.error.malformed",no_key:"decider.error.noKey",misconfigured:"decider.error.misconfigured"},kn={rejected:"decider.included.error.rejected",rate_limited:"decider.included.error.limited"},hu={...Ts,rejected:"decider.openrouter.error.rejected",unreachable:"decider.openrouter.error.unreachable",timeout:"decider.openrouter.error.timeout",rate_limited:"decider.openrouter.error.rateLimited",overloaded:"decider.openrouter.error.overloaded",malformed:"decider.openrouter.error.malformed"},fu={...Ts,rejected:"decider.workersAi.error.rejected",unreachable:"decider.workersAi.error.unreachable",timeout:"decider.workersAi.error.timeout",rate_limited:"decider.workersAi.error.rateLimited",overloaded:"decider.workersAi.error.overloaded",malformed:"decider.workersAi.error.malformed"},Wt={jev:"decider.status.byJev",workersai:"decider.status.byWorkersAi",openrouter:"decider.status.byOpenRouter"};function bu(s){const n=s?.decider,a=s?.helpers?.extraction,i=n?.configured?n.included?t("decider.status.byCloud"):t(Wt[n.provider]??Wt.jev):t("decider.status.notSetUp"),r=a?.provider?a.included?t("decider.status.byCloud"):t(Wt[a.provider]):t("decider.status.notSetUp");return t("decider.status.line",{decisions:i,extraction:r})}function Nn(s,n=!1,a="jev"){if(a==="workersai"){if(s.reason==="http_error")return t("decider.workersAi.error.http",{status:String(s.status??"?")});const r=fu[s.reason];return r?t(r):t("decider.error.other")}if(a==="openrouter"){if(s.reason==="http_error"&&s.status===402)return t("decider.openrouter.error.credits");if(s.reason==="http_error")return t("decider.openrouter.error.http",{status:String(s.status??"?")});const r=hu[s.reason];return r?t(r):t("decider.error.other")}if(n&&s.reason==="http_error"&&s.status===402)return t("decider.included.error.subscription");if(n&&kn[s.reason])return t(kn[s.reason]);if(s.reason==="http_error")return t("decider.error.http",{status:String(s.status??"?")});const i=Ts[s.reason];return i?t(i):t("decider.error.other")}const yu=["decider.jobs.browserClicks","decider.jobs.toolSelection","decider.jobs.placement"];function vu(){const{state:s,dispatch:n}=W(),a=s.config?.decider,i=a?.provider==="openrouter"?"openrouter":"jev",r=i==="openrouter",c=a?.configured??!1,o=c&&a?.included===!0,d=r&&c&&a?.keySource==="shared",u=r&&a?.sharedKey===!0,m=c&&!o&&!d,p=a?.enabled??!1,x=a?.jobs.roomRouting??!0,[g,h]=l.useState(""),[b,y]=l.useState(!1),[f,k]=l.useState(!1),[E,N]=l.useState(!1),[w,I]=l.useState(null),[j,O]=l.useState(null),[v,A]=l.useState(null),P=g.trim(),F=!P&&m,se=!r||o?null:d?"decider.openrouter.status.sharedHint":c?u?"decider.openrouter.status.ownFallbackHint":null:"decider.openrouter.status.notConnectedHint",ne=T=>n({type:"configStatus",config:T}),X=async T=>{if(!f){k(!0),I(null);try{ne(await U("/api/config",{method:"PUT",body:JSON.stringify({decider:T})}))}catch(B){I(B instanceof Error?B.message:String(B))}finally{k(!1)}}};l.useEffect(()=>{if(!r||v)return;let T=!1;return U("/api/decider/models").then(B=>{T||A(B)},()=>{}),()=>{T=!0}},[r,v]);const S=T=>{h(""),O(null),X(T)},q=async()=>{if(!(b||!P&&!m)){y(!0),I(null),O(null);try{const T=window.ogb?.setCredential?await window.ogb.setCredential(r?"openrouterDeciderKey":"jevApiKey",P):await U("/api/config",{method:"PUT",body:JSON.stringify({decider:{[r?"openrouterKey":"key"]:P}})});ne(T),h("")}catch(T){I(T instanceof Error?T.message:String(T))}finally{y(!1)}}},ee=async()=>{if(E||b||!P&&!c)return;N(!0),O(null),I(null);const T=!P&&o,B=!P&&d;try{const R=await U("/api/decider/test",{method:"POST",body:JSON.stringify(P?{key:P}:{})});O(R.ok?{ok:!0,text:r?[t(B?"decider.openrouter.test.okShared":"decider.openrouter.test.ok",{ms:String(R.latencyMs)}),...R.latencyMs>gu?[t("decider.test.slow")]:[]].join(" "):t("decider.test.ok",{ms:String(R.latencyMs)})}:{ok:!1,text:Nn(R,T,i)})}catch(R){O({ok:!1,text:R instanceof Error?R.message:String(R)})}finally{N(!1)}};return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"space-y-2 px-4",children:[e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("decider.intro")}),e.jsx("p",{role:"status","data-testid":"helpers-status",className:"text-[13px] font-medium text-ink",children:bu(s.config)})]}),e.jsx(pu,{failureText:T=>Nn(T,!1,"workersai")}),e.jsx(de,{title:t("decider.provider.label"),children:e.jsxs(pe,{className:"w-48","data-testid":"decider-provider",value:i,onChange:T=>S({provider:T.target.value==="openrouter"?"openrouter":"jev"}),disabled:f||!s.config,"aria-label":t("decider.provider.label"),children:[e.jsx("option",{value:"jev",children:t("decider.provider.jev")}),e.jsx("option",{value:"openrouter",children:t("decider.provider.openrouter")})]})}),r&&e.jsx(de,{title:t("decider.model.label"),subtitle:v?.source==="builtin"?t("decider.model.builtinNote"):void 0,children:e.jsxs(pe,{className:"w-64 max-w-full","data-testid":"decider-model",value:a?.model??"",onChange:T=>S({openrouterModel:T.target.value,openrouterApi:v?.models.find(B=>B.id===T.target.value)?.api??"chat"}),disabled:f,"aria-label":t("decider.model.label"),children:[a?.model&&!v?.models.some(T=>T.id===a.model)&&e.jsx("option",{value:a.model,children:a.model}),["recommended","more"].map(T=>{const B=v?.models.filter(R=>R.group===T)??[];return B.length>0&&e.jsx("optgroup",{label:t(T==="recommended"?"decider.model.recommended":"decider.model.more"),children:B.map(R=>e.jsx("option",{value:R.id,children:R.name},R.id))},T)})]})}),e.jsx(de,{title:t(r?"decider.openrouter.master":"decider.master"),subtitle:c?void 0:t(r?"decider.masterNeedsKey.openrouter":"decider.masterNeedsKey"),children:e.jsx(me,{"data-testid":"decider-master","aria-label":t(r?"decider.openrouter.master":"decider.master"),checked:p,disabled:!c||f||!s.config,onClick:()=>{X({enabled:!p})},className:"cursor-pointer"})}),e.jsxs(Y,{title:t(r?"decider.openrouter.key.label":"decider.key.label"),children:[e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx("span",{className:z("size-1.5 rounded-full",c?"bg-success":"bg-raised-hover")}),e.jsx("span",{className:c?"text-success":void 0,children:o?t("keys.includedWithCloudPro"):d?t("decider.openrouter.status.shared"):c?t(u?"decider.openrouter.status.own":"decider.status.connected"):t("decider.status.notConnected")})]}),se&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[t(se),!m&&e.jsxs(e.Fragment,{children:[" ",e.jsx("button",{type:"button","data-testid":"decider-manage-keys",onClick:()=>n(as("openrouter")),className:"cursor-pointer text-accent hover:underline",children:t("decider.openrouter.key.manageLink")})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password",value:g,onChange:T=>{O(null),I(null),h(T.target.value)},onKeyDown:T=>T.key==="Enter"&&void q(),disabled:b,placeholder:m?t("keys.replace"):t(d?"decider.openrouter.key.overridePlaceholder":r?"decider.openrouter.key.placeholder":"decider.key.placeholder"),"aria-label":t(r?"decider.openrouter.key.label":"decider.key.label"),autoComplete:"off",spellCheck:!1,className:"w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),e.jsx("button",{type:"button","data-testid":"decider-save",onClick:()=>{q()},disabled:b||!P&&!m,title:F?t("keys.removeKey"):t("common.save"),className:z("flex w-[72px] shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control py-2 text-[13px] hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",F?"text-danger":"text-ink"),children:b?e.jsx(V,{size:13,className:"animate-spin"}):F?t("keys.clear"):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})}),e.jsx("button",{type:"button","data-testid":"decider-test",onClick:()=>{ee()},disabled:E||b||!P&&!c,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:E?t("keys.testing"):t("keys.test")})]}),w&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:w}),j&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",j.ok?"text-success":"text-danger"),children:j.text}),!d&&e.jsxs("a",{href:xu[i],target:"_blank",rel:"noopener noreferrer",className:"mt-2 inline-flex cursor-pointer items-center gap-1 text-[12px] text-accent hover:underline",children:[t(r?"decider.openrouter.key.getKey":"decider.key.getKey"),e.jsx(ot,{size:11,"aria-hidden":"true"})]})]}),e.jsx(Y,{title:t("decider.jobs.title"),children:e.jsxs("ul",{className:"flex flex-col",children:[e.jsxs("li",{className:"flex items-start justify-between gap-4 py-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"text-[13px] font-medium text-ink",children:t("decider.jobs.roomRouting")}),e.jsx("div",{className:"mt-0.5 text-[12px] leading-relaxed text-ink-secondary",children:t("decider.jobs.roomRoutingDetail")})]}),e.jsx(me,{"data-testid":"decider-job-roomRouting","aria-label":t("decider.jobs.roomRouting"),checked:p&&x,disabled:!p||f,onClick:()=>{X({jobs:{roomRouting:!x}})},className:"cursor-pointer"})]}),yu.map(T=>e.jsxs("li",{"data-testid":"decider-coming-soon","aria-disabled":"true",className:"flex items-center justify-between gap-4 border-t border-hairline/40 py-2 opacity-50",children:[e.jsx("span",{className:"text-[13px] text-ink-secondary",children:t(T)}),e.jsx("span",{className:"rounded bg-control px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-ink-secondary",children:t("decider.jobs.comingSoon")})]},T))]})})]})}const ju=["openai","xai","gemini","openrouter","custom"],ku=4,ji={openai:"gpt-image-2",xai:"grok-imagine-image-2.0",gemini:"gemini-2.5-flash-image",openrouter:"google/gemini-2.5-flash-image",custom:""},Nu={openai:[{id:"gpt-image-2",name:"GPT Image 2"},{id:"gpt-image-1",name:"GPT Image 1"},{id:"gpt-image-1-mini",name:"GPT Image 1 Mini"}],xai:[{id:"grok-imagine-image-2.0",name:"Grok Imagine Image 2.0"}],gemini:[{id:"gemini-2.5-flash-image",name:"Nano Banana (Gemini 2.5 Flash Image)"}],openrouter:[{id:"google/gemini-2.5-flash-image",name:"Google: Nano Banana (Gemini 2.5 Flash Image)"},{id:"google/gemini-3.1-flash-image",name:"Google: Nano Banana 2 (Gemini 3.1 Flash Image)"},{id:"google/gemini-3-pro-image",name:"Google: Nano Banana Pro (Gemini 3 Pro Image)"},{id:"openai/gpt-image-2",name:"OpenAI: GPT Image 2"},{id:"black-forest-labs/flux-3-image",name:"Black Forest Labs: FLUX 3 Image"},{id:"bytedance-seed/seedream-5-0-pro",name:"ByteDance Seed: Seedream 5.0 Pro"},{id:"x-ai/grok-imagine-image-2.0",name:"xAI: Grok Imagine Image 2.0"},{id:"qwen/qwen-image-3",name:"Qwen: Qwen Image 3"}],custom:[]};function wu(s){const n="Use an HTTPS API base URL, or HTTP for a local router, without passwords, query parameters or fragments";let a;try{a=new URL(s.trim())}catch{throw new Error(n)}if(s.length>2048||a.username||a.password||a.search||a.hash)throw new Error(n);const i=a.hostname.toLowerCase(),r=/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.exec(i),c=i==="localhost"||i.endsWith(".localhost")||i.endsWith(".local")||i==="host.docker.internal"||i==="host.containers.internal"||i==="[::1]"||/^\[f[cd][0-9a-f]{2}:/.test(i)||r&&(Number(r[1])===127||Number(r[1])===10||Number(r[1])===192&&Number(r[2])===168||Number(r[1])===172&&Number(r[2])>=16&&Number(r[2])<=31);if(a.protocol!=="https:"&&!(a.protocol==="http:"&&c))throw new Error(n);if(r&&(Number(r[1])===0||Number(r[1])===169&&Number(r[2])===254))throw new Error(n);return a.pathname=a.pathname.replace(/\/+$/,"").replace(/\/images\/generations$/,""),a.toString().replace(/\/+$/,"")}const jt={openai:"OpenAI",xai:"Grok (xAI)",gemini:"Gemini",openrouter:"OpenRouter",custom:"Custom"},Su={openai:{credential:"openaiImageApiKey",patch:s=>({imageGen:{key:s}}),label:"imageGen.key.openai"},gemini:{credential:"geminiImageApiKey",patch:s=>({imageGen:{geminiKey:s}}),label:"imageGen.key.gemini"},custom:{credential:"customImageApiKey",patch:s=>({imageGen:{customApiKey:s}}),label:"imageGen.key.custom"}},Cu={xai:{label:"imageGen.key.xai",note:"imageGen.key.sharedXai"},openrouter:{label:"imageGen.key.openrouter",note:"imageGen.key.sharedOpenrouter"}},wn={openai:"https://platform.openai.com/api-keys",gemini:"https://aistudio.google.com/apikey",xai:"https://console.x.ai",openrouter:"https://openrouter.ai/keys"},ds="w-full min-w-0 rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none disabled:opacity-50",Sn="flex shrink-0 cursor-pointer items-center justify-center gap-1.5 rounded-lg bg-control px-3 py-2 text-[13px] text-ink hover:bg-raised-hover disabled:cursor-not-allowed disabled:opacity-50",Gt="\0other";function Eu(s,n){return n.ok?n.freeTier?{ok:!1,text:t("imageGen.test.noCredit")}:{ok:!0,text:t(s==="openrouter"?"imageGen.test.okOpenrouter":"imageGen.test.ok")}:n.reason==="model_missing"?{ok:!1,text:t("imageGen.test.modelMissing",{model:n.model})}:n.reason==="rejected"?{ok:!1,text:t("imageGen.test.rejected")}:n.reason==="unreachable"?{ok:!1,text:t("imageGen.test.unreachable")}:n.reason==="no_key"?{ok:!1,text:t("imageGen.key.missing")}:n.reason==="no_url"?{ok:!1,text:t("imageGen.test.noUrl")}:{ok:!1,text:t("imageGen.test.unexpected")}}function Au(s,n){return n==="openai"?s?.openaiConfigured===!0:n==="xai"?s?.xaiConfigured===!0:n==="gemini"?s?.geminiConfigured===!0:n==="openrouter"?s?.openrouterConfigured===!0:s?.customKeyConfigured===!0}function Iu(){const{state:s,dispatch:n}=W(),a=s.config?.imageGen,i=a?.primary??{provider:a?.provider??"openai",model:a?.model??ji.openai,configured:a?.configured===!0},r=a?.fallback??null,[c,o]=l.useState(!1),[d,u]=l.useState(null),[m,p]=l.useState(null),x=i.provider==="openrouter"||r?.provider==="openrouter";l.useEffect(()=>{if(!x||m)return;let y=!1;return U("/api/images/openrouter-models").then(f=>{y||p(Array.isArray(f?.models)?f:{source:"builtin",models:[]})},()=>{y||p({source:"builtin",models:[]})}),()=>{y=!0}},[x,m]);const g=async y=>{o(!0),u(null);try{const f=await U("/api/config",{method:"PUT",body:JSON.stringify(y)});n({type:"configStatus",config:f})}catch(f){u(f instanceof Error?f.message:String(f))}finally{o(!1)}},h=(y,f)=>{if(y==="fallback"&&f==="")return void g({imageGen:{fallback:null}});const k=f,E=y==="primary"&&r?.provider===k;g({imageGen:{[y]:{provider:k},...E?{fallback:null}:{}}})},b=[i.provider,...r?[r.provider]:[]].filter((y,f,k)=>k.indexOf(y)===f);return e.jsxs(e.Fragment,{children:[e.jsxs("section",{className:"space-y-2 px-4",children:[e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("imageGen.intro")}),e.jsxs("p",{role:"status","data-testid":"image-gen-status",className:"flex items-center gap-2 text-[13px] font-medium text-ink",children:[e.jsx("span",{className:z("size-1.5 shrink-0 rounded-full",a?.ready?i.configured?"bg-success":"bg-warning":"bg-raised-hover")}),a?.ready?i.configured?t("imageGen.status.ready",{provider:jt[i.provider]}):t("imageGen.status.backupOnly",{provider:jt[r.provider]}):t("imageGen.status.notReady")]})]}),e.jsx(Cn,{slot:"primary",provider:i.provider,model:i.model,configured:i.configured,openrouterModels:m,disabled:c||!s.config,onProvider:h,onModel:y=>{g({imageGen:{primary:{provider:i.provider,model:y}}})}}),e.jsx(Cn,{slot:"fallback",provider:r?.provider??null,model:r?.model??"",configured:r?.configured===!0,exclude:i.provider,openrouterModels:m,disabled:c||!s.config,onProvider:h,onModel:y=>r&&void g({imageGen:{fallback:{provider:r.provider,model:y}}})}),e.jsx(de,{title:t("imageGen.maxPerTurn.label"),subtitle:t("imageGen.maxPerTurn.help"),children:e.jsx(pe,{className:"w-20","data-testid":"image-gen-max",value:String(a?.maxPerTurn??ku),onChange:y=>{g({imageGen:{maxPerTurn:Number(y.target.value)}})},disabled:c||!s.config,"aria-label":t("imageGen.maxPerTurn.label"),children:Array.from({length:10},(y,f)=>f+1).map(y=>e.jsx("option",{value:y,children:y},y))})}),d&&e.jsx("p",{role:"alert",className:"px-4 text-[12px] text-danger",children:d}),b.map(y=>e.jsx(Ru,{provider:y,status:a},y))]})}function Cn({slot:s,provider:n,model:a,configured:i,exclude:r,openrouterModels:c,disabled:o,onProvider:d,onModel:u}){const m=t(s==="primary"?"imageGen.primary.label":"imageGen.fallback.label");return e.jsxs(e.Fragment,{children:[e.jsx(de,{title:m,subtitle:n&&!i?t(n==="custom"?"imageGen.slot.needsConnection":"imageGen.slot.needsKey"):t(s==="primary"?"imageGen.primary.help":"imageGen.fallback.help"),children:e.jsxs(pe,{className:"w-48","data-testid":`image-gen-${s}`,value:n??"",onChange:p=>d(s,p.target.value),disabled:o,"aria-label":m,children:[s==="fallback"&&e.jsx("option",{value:"",children:t("imageGen.fallback.none")}),ju.filter(p=>p!==r).map(p=>e.jsx("option",{value:p,children:jt[p]},p))]})}),n&&e.jsx(Pu,{slot:s,slotLabel:m,provider:n,model:a,openrouterModels:c,disabled:o,onModel:u})]})}function Pu({slot:s,slotLabel:n,provider:a,model:i,openrouterModels:r,disabled:c,onModel:o}){const[d,u]=l.useState(null),p=(a==="openrouter"&&r?.source==="openrouter"?r.models:null)??Nu[a].map(b=>({...b,group:"recommended"})),x=d!==null||p.length===0,g=()=>{d!==null&&(u(null),d.trim()&&d.trim()!==i&&o(d.trim()))},h=b=>{if(b===Gt)return u(i);u(null),o(b)};return e.jsx(de,{title:t("decider.model.label"),subtitle:a==="openrouter"&&r?.source==="builtin"?t("decider.model.builtinNote"):void 0,children:e.jsxs("div",{className:"flex flex-wrap items-center justify-end gap-2",children:[p.length>0&&e.jsxs(pe,{className:"w-64 max-w-full","data-testid":`image-gen-${s}-model`,value:x?Gt:i,onChange:b=>h(b.target.value),disabled:c,"aria-label":t("imageGen.model.label",{slot:n}),children:[i&&!p.some(b=>b.id===i)&&e.jsx("option",{value:i,children:i}),["recommended","more"].map(b=>{const y=p.filter(f=>f.group===b);return y.length>0&&e.jsx("optgroup",{label:t(b==="recommended"?"decider.model.recommended":"decider.model.more"),children:y.map(f=>e.jsx("option",{value:f.id,children:f.name},f.id))},b)}),e.jsx("option",{value:Gt,children:t("imageGen.model.other")})]}),x&&e.jsx("input",{value:d??i,onChange:b=>u(b.target.value),onBlur:g,onKeyDown:b=>b.key==="Enter"&&g(),disabled:c,placeholder:ji[a]||t("imageGen.model.placeholder"),"aria-label":t("imageGen.model.idLabel",{slot:n}),autoComplete:"off",spellCheck:!1,className:z(ds,"w-64 max-w-full")})]})})}function Ru({provider:s,status:n}){const{dispatch:a}=W(),[i,r]=l.useState(""),[c,o]=l.useState(null),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(!1),[h,b]=l.useState(null),y=s==="openrouter"?[n?.primary,n?.fallback].filter(P=>P?.provider===s).map(P=>P?.model).join(" "):"",f=h?.models===y?h:null,k=P=>b(P&&{...P,models:y}),E=Au(n,s),N=s==="openai"||s==="gemini"||s==="custom"?Su[s]:null,w=s==="xai"||s==="openrouter"?Cu[s]:null,I=c??n?.customUrl??"",j=async P=>{u(!0),p(null),k(null);try{a({type:"configStatus",config:await P()}),r(""),o(null)}catch(F){p(F instanceof Error?F.message:String(F))}finally{u(!1)}},O=P=>j(async()=>s==="xai"||s==="openrouter"?pl(s,P,!1):window.ogb?.setCredential&&N?window.ogb.setCredential(N.credential,P):U("/api/config",{method:"PUT",body:JSON.stringify(N.patch(P))})),v=()=>j(async()=>{const P=I.trim()?wu(I.trim()):"";return U("/api/config",{method:"PUT",body:JSON.stringify({imageGen:{customUrl:P}})})}),A=async()=>{g(!0),k(null);try{k(Eu(s,await U("/api/images/test",{method:"POST",body:JSON.stringify({provider:s})})))}catch(P){k({ok:!1,text:P instanceof Error?P.message:String(P)})}finally{g(!1)}};return e.jsxs(Y,{title:jt[s],children:[e.jsx(Tu,{configured:E,optional:s==="custom"}),w&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[t(w.note)," ",e.jsx("button",{type:"button",onClick:()=>a({type:"toggleAppSettings",open:!0,section:"connections"}),className:"cursor-pointer text-accent hover:underline",children:t("imageGen.key.manage")})]}),s==="custom"&&e.jsxs("div",{className:"mb-2 flex gap-2",children:[e.jsx("input",{type:"url",value:I,onChange:P=>o(P.target.value),onKeyDown:P=>P.key==="Enter"&&void v(),disabled:d,placeholder:"http://127.0.0.1:4000/v1","aria-label":t("imageGen.custom.url"),autoComplete:"off",className:ds}),e.jsxs("button",{type:"button",onClick:()=>{v()},disabled:d||c===null,className:Sn,children:[d?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(he,{size:13}),t("common.save")]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{type:"password",value:i,onChange:P=>r(P.target.value),onKeyDown:P=>P.key==="Enter"&&i.trim()&&void O(i.trim()),disabled:d,placeholder:E?t("keys.replace"):t("imageGen.key.paste"),"aria-label":t((N??w).label),autoComplete:"off",spellCheck:!1,className:ds}),e.jsxs("button",{type:"button",onClick:()=>{O(i.trim())},disabled:d||!i.trim(),className:Sn,children:[d?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(he,{size:13}),t("common.save")]}),E&&e.jsx("button",{type:"button",onClick:()=>{A()},disabled:x||d,className:"flex shrink-0 cursor-pointer items-center justify-center rounded-lg border border-hairline/40 px-3 py-2 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:cursor-not-allowed disabled:opacity-50",children:x?t("keys.testing"):t("keys.test")})]}),f&&e.jsx("p",{role:"status",className:z("mt-1 text-[12px]",f.ok?"text-success":"text-danger"),children:f.text}),e.jsxs("div",{className:"mt-2 flex items-center justify-between gap-2 text-[12px] text-ink-secondary",children:[wn[s]?e.jsx("a",{href:wn[s],target:"_blank",rel:"noreferrer",className:"text-accent hover:underline",children:t("imageGen.key.get")}):e.jsx("span",{children:t("imageGen.custom.help",{app:ys()})}),E&&e.jsx("button",{type:"button",onClick:()=>{O("")},disabled:d,className:"cursor-pointer hover:text-danger disabled:opacity-50",children:t("keys.removeKey")})]}),m&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:m})]})}function Tu({configured:s,optional:n=!1}){return e.jsxs("div",{role:"status",className:"mb-2 flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx("span",{className:z("size-1.5 rounded-full",s?"bg-success":"bg-raised-hover")}),e.jsx("span",{className:s?"text-success":void 0,children:t(s?"imageGen.key.saved":n?"imageGen.key.optional":"imageGen.key.missing")})]})}function Vt(s){if(s.readOnly||s.trialCredit||s.access==="custom"||s.access==="api")return null;if(s.driverKind==="claudeAgent")return"claude";const n=s.authentication?.method;return s.snapshot.chatgptPlan===!0||(n==="device-code"||n==="browser-pkce")&&Ea(s.driverKind)==="codex"?"chatgpt":null}function Bs(s){return s.snapshot.state!=="available"?"unavailable":s.snapshot.authenticated===!0?"signedIn":s.snapshot.authenticated===!1?"signedOut":"unknown"}const Ls={claude:{title:"accounts.claude",add:"accounts.addClaude",removeBody:"accounts.removeBodyClaude"},chatgpt:{title:"accounts.chatgpt",add:"accounts.addChatgpt",removeBody:"accounts.removeBodyChatgpt"}};function Bu(s,n){return{signOut:Bs(n)==="signedIn"&&n.authentication?.signOut===!0&&n.snapshot.account?.method!=="api-key",remove:s==="claude"?n.instanceId!=="claude"&&n.claudeAccount?.isDefault!==!0:n.instanceId.startsWith("chatgpt-")}}function ki(s){return s.some(Pe)}function Lu(s,n){const a=n.filter(o=>Bs(o)==="signedIn"),i=ki(n),r=n.some(o=>o.snapshot.state==="available"),c=n.length>1?t("accounts.count",{count:String(n.length),signedIn:String(a.length)}):a[0]?.snapshot.account?.email??bl(n[0]);return{title:t(Ls[s].title),subtitle:c,ready:i,status:i?t("onboarding.engines.ready"):r?t("model.signInRequired"):t("onboarding.engines.needsSetup"),action:i?t("engines.library.manage"):r?t("accounts.signIn"):t("engines.library.setup")}}function Ou({group:s,instance:n,onRename:a}){const{state:i,dispatch:r,refreshInstances:c}=W(),[o,d]=l.useState(!1),[u,m]=l.useState(null),[p,x]=l.useState(!1),[g,h]=l.useState(null),b=l.useRef(null),{signOut:y,remove:f}=Bu(s,n),k=i.bots.filter(w=>w.modelSelection.instanceId===n.instanceId).length;l.useEffect(()=>{if(!o)return;const w=j=>{j.key==="Escape"&&(j.stopPropagation(),d(!1))},I=j=>{j.target instanceof Node&&!b.current?.contains(j.target)&&d(!1)};return window.addEventListener("keydown",w,!0),window.addEventListener("pointerdown",I),()=>{window.removeEventListener("keydown",w,!0),window.removeEventListener("pointerdown",I)}},[o]);const E=async w=>{m(null),x(!0),h(null);try{const I=`/api/instances/${encodeURIComponent(n.instanceId)}${w==="signOut"?"/auth/sign-out":""}`,{instances:j}=await U(I,w==="signOut"?{method:"POST"}:{method:"DELETE"});Array.isArray(j)?r({type:"instances",instances:j}):await c().catch(()=>{})}catch(I){h(I instanceof Error?I.message:String(I))}finally{x(!1)}},N="ui-menu-row w-full text-left disabled:cursor-not-allowed disabled:opacity-50";return e.jsxs("div",{ref:b,className:"relative flex items-center gap-1",children:[f&&e.jsx("button",{type:"button",disabled:p||k>0,onClick:()=>m("remove"),title:k>0?t("accounts.inUse",{count:String(k)}):void 0,className:"rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:t("accounts.remove")}),e.jsx("button",{type:"button",onClick:()=>d(w=>!w),disabled:p,"aria-haspopup":"menu","aria-expanded":o,"aria-label":t("accounts.menu",{name:Fe(n)}),className:"flex size-8 items-center justify-center rounded-lg text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent disabled:opacity-50",children:p?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(Pc,{size:16})}),o&&e.jsxs("div",{role:"menu",className:z("absolute right-0 top-full z-40 mt-1 w-[220px] overflow-hidden text-[13px]",Rc),children:[e.jsx("button",{type:"button",role:"menuitem",className:z(N,"text-ink"),onClick:()=>{d(!1),a()},children:t("accounts.rename")}),y&&e.jsx("button",{type:"button",role:"menuitem",className:z(N,"text-ink"),onClick:()=>{d(!1),m("signOut")},children:t("accounts.signOut")}),f&&k>0&&e.jsx("p",{className:"px-3 pb-1 pt-0.5 text-[11px] leading-snug text-ink-secondary",children:t("accounts.inUse",{count:String(k)})})]}),g&&e.jsx("p",{role:"alert",className:"absolute right-0 top-full z-30 mt-1 w-[260px] rounded-lg bg-card p-2 text-[12px] text-danger shadow-lg",children:g}),e.jsx(Ve,{open:u==="signOut",title:t("accounts.signOutTitle",{name:Fe(n)}),body:t("accounts.signOutBody"),confirmLabel:t("accounts.signOut"),onCancel:()=>m(null),onConfirm:()=>{E("signOut")}}),e.jsx(Ve,{open:u==="remove",title:t("accounts.removeTitle",{name:Fe(n)}),body:t(Ls[s].removeBody),confirmLabel:t("accounts.remove"),tone:"neutral",onCancel:()=>m(null),onConfirm:()=>{E("remove")}})]})}function zu({instance:s,onDone:n}){const{dispatch:a}=W(),[i,r]=l.useState(Fe(s)),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=async()=>{const p=i.trim();if(!p||p===Fe(s))return n();o(!0),u(null);try{const{instances:x}=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({displayName:p})});Array.isArray(x)&&a({type:"instances",instances:x}),n()}catch(x){u(x instanceof Error?x.message:String(x))}finally{o(!1)}};return e.jsxs("form",{className:"flex min-w-0 flex-1 flex-col gap-1",onSubmit:p=>{p.preventDefault(),m()},children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsx("input",{value:i,onChange:p=>r(p.target.value),maxLength:80,autoFocus:!0,disabled:c,"aria-label":t("accounts.nameLabel"),onKeyDown:p=>{p.key==="Escape"&&(p.stopPropagation(),n())},className:"min-w-0 flex-1 rounded-lg border border-hairline/40 bg-inset px-2.5 py-1.5 text-[13px] text-ink outline-none focus:border-accent-border disabled:opacity-50"}),e.jsx("button",{type:"submit",disabled:c||!i.trim(),className:"rounded-lg bg-raised px-3 py-1.5 text-[12px] font-medium text-ink hover:bg-raised-hover disabled:opacity-50",children:c?e.jsx(V,{size:13,className:"animate-spin"}):t("common.save")}),e.jsx("button",{type:"button",onClick:n,disabled:c,className:"rounded-lg px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control",children:t("common.cancel")})]}),d&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:d})]})}function Mu({group:s,instance:n,signingIn:a,onSignIn:i,onSignInDone:r}){const[c,o]=l.useState(!1),d=Bs(n),u=n.snapshot.account,m=n.snapshot.authenticationUnavailableReason,p=m&&d!=="signedIn"?m:d==="signedIn"?u?.method==="api-key"?t("accounts.apiKey"):[u?.email,u?.organization].filter(Boolean).join(" · ")||t("accounts.signedIn"):d==="signedOut"?t("accounts.notSignedIn"):d==="unknown"?t("accounts.unknown"):n.snapshot.reason??t("onboarding.engines.needsSetup");return e.jsxs("li",{"data-account":n.instanceId,"data-account-state":d,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsx("span",{"aria-hidden":"true",className:z("flex size-6 shrink-0 items-center justify-center rounded-full",d==="signedIn"?"bg-success/15 text-success":"bg-control text-ink-secondary"),children:d==="signedIn"?e.jsx(he,{size:13}):e.jsx("span",{className:z("size-1.5 rounded-full",d==="signedOut"?"bg-warning":"bg-ink-tertiary")})}),c?e.jsx(zu,{instance:n,onDone:()=>o(!1)}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:Fe(n),children:Fe(n)}),e.jsx("div",{className:"truncate text-[12px] text-ink-secondary",title:p,children:p})]}),d!=="signedIn"&&d!=="unavailable"&&!m&&!a&&e.jsx("button",{type:"button",onClick:i,className:z("shrink-0 rounded-lg px-3 py-1.5 text-[12px] font-semibold",d==="signedOut"?"bg-accent text-white hover:brightness-110":"bg-control text-ink hover:bg-raised-hover"),children:t("accounts.signIn")}),e.jsx(Ou,{group:s,instance:n,onRename:()=>o(!0)})]})]}),a&&e.jsx("div",{className:"pl-9",children:s==="claude"?e.jsxs(e.Fragment,{children:[e.jsx(xl,{instanceId:n.instanceId,autoStart:!0,onDone:r}),n.claudeAccount?.signInCommand&&e.jsxs("details",{className:"mt-2 text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer select-none hover:text-ink",children:t("engineSetup.preferTerminal")}),e.jsx(gl,{command:n.claudeAccount.signInCommand,actionLabel:t("engineSetup.openSignIn"),compact:!0})]})]}):e.jsx(hl,{instanceId:n.instanceId,provider:"codex",browserPkce:n.authentication?.method==="browser-pkce",autoStart:!0,onDone:r})}),s==="chatgpt"&&d==="signedIn"&&n.snapshot.chatgptPlan&&e.jsx("div",{className:"pl-9",children:e.jsx(fl,{instanceId:n.instanceId,welcome:!1})})]})}function Ni({label:s,endpoint:n,extra:a,folder:i=!1,describedBy:r,onAdded:c}){const{dispatch:o}=W(),[d,u]=l.useState(!1),[m,p]=l.useState(""),[x,g]=l.useState(""),[h,b]=l.useState(!1),[y,f]=l.useState(null),k=async()=>{if(!(h||!m.trim())){b(!0),f(null);try{const E={displayName:m.trim(),...a,...i&&x.trim()?{configDir:x.trim()}:{}},N=await U(n,{method:"POST",body:JSON.stringify(E)});Array.isArray(N.instances)&&o({type:"instances",instances:N.instances}),u(!1),p(""),g(""),typeof N.instanceId=="string"&&c(N.instanceId)}catch(E){f(E instanceof Error?E.message:String(E))}finally{b(!1)}}};return d?e.jsxs("form",{"data-add-account":n,className:"space-y-2.5 rounded-xl border border-hairline/50 bg-app p-3",onSubmit:E=>{E.preventDefault(),k()},children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("accounts.nameLabel"),e.jsx("input",{value:m,onChange:E=>p(E.target.value),placeholder:t("accounts.namePlaceholder"),maxLength:80,autoFocus:!0,required:!0,disabled:h,"aria-describedby":r,className:"rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] font-normal text-ink outline-none focus:border-accent-border disabled:opacity-50"})]}),i&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer select-none hover:text-ink",children:t("accounts.folderToggle")}),e.jsx("input",{value:x,onChange:E=>g(E.target.value),placeholder:"~/.claude-work",maxLength:4096,spellCheck:!1,disabled:h,"aria-label":t("accounts.folderToggle"),className:"mt-2 w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12px] text-ink outline-none focus:border-accent-border disabled:opacity-50"}),e.jsx("p",{className:"mt-1 leading-relaxed",children:t("accounts.folderHint")})]}),y&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:y}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:()=>{u(!1),f(null)},disabled:h,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:h||!m.trim(),className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[h&&e.jsx(V,{size:13,className:"animate-spin"}),t("accounts.addSubmit")]})]})]}):e.jsxs("button",{type:"button",onClick:()=>u(!0),"aria-describedby":r,className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),s]})}function Uu({group:s,accounts:n,advanced:a,bare:i=!1}){const[r,c]=l.useState(null),o=n[0],d=n.some(p=>p.snapshot.state==="available"),u=n.find(p=>p.policy)?.policy,m=l.useId();return e.jsxs(bt,{instance:o,summary:Lu(s,n),bare:i,children:[u&&e.jsxs("p",{className:"mb-3 text-[12px] leading-relaxed text-ink-secondary",children:[e.jsx("span",{className:"font-medium text-ink",children:t("policy.managedBy",{organization:u.organizationName})})," · ",u.reason]}),d?e.jsxs("div",{className:"space-y-2",children:[e.jsx("ul",{"data-accounts":s,className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:n.map(p=>e.jsx(Mu,{group:s,instance:p,signingIn:r===p.instanceId,onSignIn:()=>c(p.instanceId),onSignInDone:()=>c(x=>x===p.instanceId?null:x)},p.instanceId))}),!o.snapshot.authenticationUnavailableReason&&e.jsxs(e.Fragment,{children:[e.jsx(Ni,{label:t(Ls[s].add),endpoint:`/api/instances/${s}-accounts`,folder:s==="claude",describedBy:s==="chatgpt"?m:void 0,onAdded:c}),s==="chatgpt"&&e.jsx("p",{id:m,className:"px-2 text-[12px] leading-relaxed text-ink-secondary",children:t("accounts.addChatgptWorkspaceNote")})]})]}):e.jsx(St,{instance:o,unframed:!0}),o.snapshot.update&&e.jsx(Aa,{update:o.snapshot.update,instance:o,className:"mt-3",quiet:!0}),o.snapshot.warning&&e.jsx(Ia,{warning:o.snapshot.warning,className:"mt-3"}),a]})}const Fu={claude:{url:"https://api.anthropic.com",model:"deepseek-chat"},codex:{url:"https://api.openai.com/v1",model:""}},ut=z(Re,"font-sans"),Du={name:"",url:"",token:"",model:""},_u=s=>({name:s.displayName,url:(s.claudeEndpoint??s.codexEndpoint)?.baseUrl??"",token:"",model:""});function En({instance:s,engine:n,onDone:a}){const{dispatch:i}=W(),r=Fu[n],[c,o]=l.useState(s?_u(s):Du),[d,u]=l.useState(!1),[m,p]=l.useState(null),x=b=>({value:c[b],onChange:y=>o(f=>({...f,[b]:y.target.value})),spellCheck:!1,disabled:d}),g=!!(c.name.trim()&&(c.url.trim()||n==="codex")&&(s||c.token.trim())),h=async()=>{if(d||!g)return;u(!0),p(null);const b={displayName:c.name.trim(),baseUrl:c.url.trim()||r.url,...c.token.trim()?{token:c.token.trim()}:{},...c.model.trim()?{model:c.model.trim()}:{}};try{const y=s?await U(`/api/instances/${encodeURIComponent(s.instanceId)}/${n}-endpoint`,{method:"PATCH",body:JSON.stringify(b)}):await U(`/api/instances/${n}-endpoint`,{method:"POST",body:JSON.stringify(b)});Array.isArray(y.instances)&&i({type:"instances",instances:y.instances}),a()}catch(y){p(y instanceof Error&&y.message?y.message:t("claudeEndpoints.failed"))}finally{u(!1)}};return e.jsxs("form",{"data-claude-endpoint-form":n==="claude"?s?.instanceId??"new":void 0,"data-codex-endpoint-form":n==="codex"?s?.instanceId??"new":void 0,className:"flex flex-col gap-2 rounded-xl border border-hairline/50 bg-inset p-3",onSubmit:b=>{b.preventDefault(),h()},children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t(n==="codex"?"agentEndpoints.responses":"agentEndpoints.messages")}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.name"),e.jsx("input",{...x("name"),maxLength:80,autoFocus:!0,"aria-label":t("claudeEndpoints.name"),className:ut})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.baseUrl"),e.jsx("input",{...x("url"),type:"url",maxLength:2048,placeholder:r.url,"aria-label":t("claudeEndpoints.baseUrl"),className:z(ut,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.token"),e.jsx("input",{...x("token"),type:"password",maxLength:4096,autoComplete:"off","aria-label":t("claudeEndpoints.token"),className:z(ut,"font-mono"),placeholder:s?t("claudeEndpoints.tokenKeep"):""})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeEndpoints.model"),e.jsx("input",{...x("model"),maxLength:160,placeholder:r.model,"aria-label":t("claudeEndpoints.model"),className:z(ut,"font-mono")})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeEndpoints.modelHint")}),m&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:m}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:a,disabled:d,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:d||!g,className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[d&&e.jsx(V,{size:13,className:"animate-spin"}),t("common.save")]})]})]})}function Ku({instance:s,onEdit:n}){const{state:a,dispatch:i}=W(),[r,c]=l.useState(!1),[o,d]=l.useState(!1),[u,m]=l.useState(null),p=a.bots.filter(h=>h.modelSelection.instanceId===s.instanceId||h.fallback?.some(b=>b.instanceId===s.instanceId)||h.tasks?.some(b=>b.modelSelection?.instanceId===s.instanceId)).length,x=s.claudeEndpoint??s.codexEndpoint,g=async()=>{c(!1),d(!0),m(null);try{const h=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"DELETE"});Array.isArray(h.instances)&&i({type:"instances",instances:h.instances})}catch(h){m(h instanceof Error?h.message:String(h))}finally{d(!1)}};return e.jsxs("li",{"data-claude-endpoint":s.claudeEndpoint?s.instanceId:void 0,"data-codex-endpoint":s.codexEndpoint?s.instanceId:void 0,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:s.displayName,children:s.displayName}),e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",title:x?.baseUrl,children:x?.baseUrl})]}),e.jsx("button",{type:"button",onClick:n,disabled:o,className:"shrink-0 rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:t("claudeEndpoints.edit")}),e.jsx("button",{type:"button",disabled:o||p>0,onClick:()=>c(!0),title:p>0?t("accounts.inUse",{count:String(p)}):t("accounts.remove"),"aria-label":t("claudeEndpoints.remove",{name:s.displayName}),className:"flex size-8 shrink-0 items-center justify-center rounded-lg text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:o?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(we,{size:14})})]}),u&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:u}),e.jsx(Ve,{open:r,title:t("accounts.removeTitle",{name:s.displayName}),body:t("claudeEndpoints.removeBody"),confirmLabel:t("accounts.remove"),tone:"neutral",pending:o,onCancel:()=>c(!1),onConfirm:()=>{g()}})]})}function wi({engine:s}){const{state:n}=W(),a=n.instances.filter(c=>s==="claude"?c.claudeEndpoint:c.codexEndpoint),[i,r]=l.useState(null);return e.jsxs("div",{"data-claude-endpoints":s==="claude"?"":void 0,"data-codex-endpoints":s==="codex"?"":void 0,className:"mt-3 space-y-2",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t(s==="claude"?"claudeEndpoints.title":"agentEndpoints.codexTitle")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t(s==="claude"?"claudeEndpoints.hint":"agentEndpoints.codexHint")}),a.length===0?e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeEndpoints.empty")}):e.jsx("ul",{className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:a.map(c=>i===c.instanceId?e.jsx("li",{className:"p-3",children:e.jsx(En,{engine:s,instance:c,onDone:()=>r(null)})},c.instanceId):e.jsx(Ku,{instance:c,onEdit:()=>r(c.instanceId)},c.instanceId))}),i==="new"?e.jsx(En,{engine:s,onDone:()=>r(null)}):e.jsxs("button",{type:"button",onClick:()=>r("new"),className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),t("claudeEndpoints.add")]})]})}function qt(){return e.jsx(wi,{engine:"claude"})}function Jt(){return e.jsx(wi,{engine:"codex"})}const Ze=z(Re,"font-sans"),$u={opusModel:"global.anthropic.claude-opus-5-5",sonnetModel:"global.anthropic.claude-sonnet-5-5",haikuModel:"global.anthropic.claude-haiku-5-5",smallFastModel:"global.anthropic.claude-haiku-5-5"},An=["opusModel","sonnetModel","haikuModel","smallFastModel"],Hu={name:"Claude on Bedrock",awsProfile:"default",awsRegion:"",model:"",opusModel:"",sonnetModel:"",haikuModel:"",smallFastModel:""},Wu=s=>{const n=s.claudeBedrock;return{name:s.displayName,awsProfile:n?.awsProfile||"default",awsRegion:n?.awsRegion??"",model:n?.model??"",opusModel:n?.opusModel??"",sonnetModel:n?.sonnetModel??"",haikuModel:n?.haikuModel??"",smallFastModel:n?.smallFastModel??""}},In={opusModel:"claudeBedrock.opus",sonnetModel:"claudeBedrock.sonnet",haikuModel:"claudeBedrock.haiku",smallFastModel:"claudeBedrock.smallFast"};function Pn({instance:s,onDone:n}){const{dispatch:a}=W(),[i,r]=l.useState(s?Wu(s):Hu),[c,o]=l.useState(!1),[d,u]=l.useState(null),m=g=>({value:i[g],onChange:h=>r(b=>({...b,[g]:h.target.value})),spellCheck:!1,disabled:c}),p=!!(i.name.trim()&&i.awsProfile.trim()&&i.awsRegion.trim()&&i.model.trim()),x=async()=>{if(c||!p)return;o(!0),u(null);const g={displayName:i.name.trim(),awsProfile:i.awsProfile.trim(),awsRegion:i.awsRegion.trim(),model:i.model.trim(),...Object.fromEntries(An.map(h=>[h,i[h].trim()]))};try{const h=s?await U(`/api/instances/${encodeURIComponent(s.instanceId)}/claude-bedrock`,{method:"PATCH",body:JSON.stringify(g)}):await U("/api/instances/claude-bedrock",{method:"POST",body:JSON.stringify(g)});Array.isArray(h.instances)&&a({type:"instances",instances:h.instances}),n()}catch(h){u(h instanceof Error&&h.message?h.message:t("claudeBedrock.failed"))}finally{o(!1)}};return e.jsxs("form",{"data-claude-bedrock-form":s?.instanceId??"new",className:"flex flex-col gap-2 rounded-xl border border-hairline/50 bg-inset p-3",onSubmit:g=>{g.preventDefault(),x()},children:[e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.awsHint")}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.name"),e.jsx("input",{...m("name"),maxLength:80,autoFocus:!0,"aria-label":t("claudeBedrock.name"),className:Ze})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.profile"),e.jsx("input",{...m("awsProfile"),maxLength:128,placeholder:"default","aria-label":t("claudeBedrock.profile"),className:z(Ze,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.region"),e.jsx("input",{...m("awsRegion"),maxLength:32,placeholder:"us-east-1","aria-label":t("claudeBedrock.region"),className:z(Ze,"font-mono")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t("claudeBedrock.model"),e.jsx("input",{...m("model"),maxLength:160,placeholder:"global.anthropic.claude-sonnet-5-5","aria-label":t("claudeBedrock.model"),className:z(Ze,"font-mono")})]}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.modelHint")}),e.jsxs("details",{className:"rounded-lg border border-hairline/40 px-2.5 py-2",children:[e.jsx("summary",{className:"cursor-pointer text-[12px] font-medium text-ink-secondary outline-none hover:text-ink",children:t("claudeBedrock.tiers")}),e.jsx("div",{className:"mt-2 flex flex-col gap-2",children:An.map(g=>e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] font-medium text-ink",children:[t(In[g]),e.jsx("input",{...m(g),maxLength:160,placeholder:$u[g],"aria-label":t(In[g]),className:z(Ze,"font-mono")})]},g))})]}),d&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:d}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{type:"button",onClick:n,disabled:c,className:"rounded-lg px-3 py-1.5 text-[12px] text-ink-secondary hover:bg-control disabled:opacity-50",children:t("common.cancel")}),e.jsxs("button",{type:"submit",disabled:c||!p,className:"flex items-center gap-1.5 rounded-lg bg-accent px-3 py-1.5 text-[12px] font-semibold text-white hover:brightness-110 disabled:opacity-50",children:[c&&e.jsx(V,{size:13,className:"animate-spin"}),t("common.save")]})]})]})}function Gu({instance:s,onEdit:n}){const{state:a,dispatch:i}=W(),[r,c]=l.useState(!1),[o,d]=l.useState(!1),[u,m]=l.useState(null),p=a.bots.filter(h=>h.modelSelection.instanceId===s.instanceId||h.fallback?.some(b=>b.instanceId===s.instanceId)||h.tasks?.some(b=>b.modelSelection?.instanceId===s.instanceId)).length,x=s.claudeBedrock,g=async()=>{c(!1),d(!0),m(null);try{const h=await U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"DELETE"});Array.isArray(h.instances)&&i({type:"instances",instances:h.instances})}catch(h){m(h instanceof Error?h.message:String(h))}finally{d(!1)}};return e.jsxs("li",{"data-claude-bedrock":s.instanceId,className:"px-3 py-2.5",children:[e.jsxs("div",{className:"flex min-h-9 items-center gap-3",children:[e.jsx(Pa,{preset:"aws",size:16,className:"shrink-0"}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[13px] font-medium text-ink",title:s.displayName,children:s.displayName}),e.jsx("div",{className:"truncate font-mono text-[11px] text-ink-secondary",children:t("claudeBedrock.rowSubtitle",{profile:x?.awsProfile??"",region:x?.awsRegion??""})})]}),e.jsx("button",{type:"button",onClick:n,disabled:o,className:"shrink-0 rounded-lg px-2.5 py-1.5 text-[12px] font-medium text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:t("claudeBedrock.edit")}),e.jsx("button",{type:"button",disabled:o||p>0,onClick:()=>c(!0),title:p>0?t("accounts.inUse",{count:String(p)}):t("accounts.remove"),"aria-label":t("claudeBedrock.remove",{name:s.displayName}),className:"flex size-8 shrink-0 items-center justify-center rounded-lg text-danger hover:bg-danger/10 disabled:cursor-not-allowed disabled:opacity-50",children:o?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(we,{size:14})})]}),u&&e.jsx("p",{role:"alert",className:"mt-1 text-[12px] text-danger",children:u}),e.jsx(Ve,{open:r,title:t("accounts.removeTitle",{name:s.displayName}),body:t("claudeBedrock.removeBody"),confirmLabel:t("accounts.remove"),tone:"neutral",pending:o,onCancel:()=>c(!1),onConfirm:()=>{g()}})]})}function Yt(){const{state:s}=W(),n=s.instances.filter(r=>r.claudeBedrock),[a,i]=l.useState(null);return e.jsxs("div",{"data-claude-bedrock-endpoints":"",className:"mt-3 space-y-2",children:[e.jsx("div",{className:"text-[13px] leading-[18px] text-ink",children:t("claudeBedrock.title")}),e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.hint")}),n.length===0?e.jsx("p",{className:"text-[12px] leading-4 text-ink-secondary",children:t("claudeBedrock.empty")}):e.jsx("ul",{className:"divide-y divide-hairline/40 rounded-xl border border-hairline/50 bg-panel/40",children:n.map(r=>a===r.instanceId?e.jsx("li",{className:"p-3",children:e.jsx(Pn,{instance:r,onDone:()=>i(null)})},r.instanceId):e.jsx(Gu,{instance:r,onEdit:()=>i(r.instanceId)},r.instanceId))}),a==="new"?e.jsx(Pn,{onDone:()=>i(null)}):e.jsxs("button",{type:"button",onClick:()=>i("new"),className:"flex min-h-8 w-fit items-center gap-1.5 rounded-lg px-2 py-1.5 text-[13px] font-medium text-ink-secondary outline-none hover:bg-control hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:[e.jsx(Se,{size:14}),t("claudeBedrock.add")]})]})}function Rn(s){const n=s/1048576;return n<1?t("engines.freeSpace.underOneMb"):n<1024?`${Math.round(n)} MB`:`${(n/1024).toFixed(1)} GB`}function Vu({instance:s,initial:n={kind:"idle"}}){const[a,i]=l.useState(n),[r,c]=l.useState(null),o=`/api/instances/${encodeURIComponent(s.instanceId)}/leftover-files`,d=async()=>{c(null),i({kind:"scanning"});try{const p=await U(o);i(p.folders>0?{kind:"found",bytes:p.bytes,complete:p.complete}:{kind:"none"})}catch(p){c(p instanceof Error?p.message:String(p)),i({kind:"idle"})}},u=async()=>{c(null),i({kind:"deleting"});try{const p=await U(`${o}/remove`,{method:"POST",body:JSON.stringify({})});i({kind:"done",freedBytes:p.freedBytes,remaining:p.remaining})}catch(p){c(p instanceof Error?p.message:String(p)),i({kind:"idle"})}},m=a.kind==="scanning"||a.kind==="deleting";return e.jsxs("section",{className:"mt-3 rounded-xl border border-hairline/40 px-3 py-2.5","aria-label":t("engines.freeSpace.title"),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(Tc,{size:13,"aria-hidden":"true",className:"shrink-0 text-ink-secondary"}),e.jsx("span",{className:"text-[12px] font-medium text-ink",children:t("engines.freeSpace.title")}),e.jsx("span",{className:"flex-1"}),(a.kind==="idle"||a.kind==="none"||a.kind==="done"||m)&&e.jsxs("button",{type:"button",onClick:()=>{d()},disabled:m,className:"flex shrink-0 items-center gap-1 rounded-lg border border-hairline/40 px-3 py-1 text-[12px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:[m&&e.jsx(V,{size:12,className:"animate-spin"}),t("engines.freeSpace.action")]})]}),e.jsx("p",{className:"mt-1.5 text-[12px] leading-relaxed text-ink-secondary",children:t("engines.freeSpace.intro")}),a.kind==="scanning"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.scanning")}),a.kind==="deleting"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.deleting")}),a.kind==="none"&&e.jsx("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.freeSpace.none")}),a.kind==="found"&&e.jsxs("div",{className:"mt-2 flex flex-wrap items-center gap-2",children:[e.jsx("p",{role:"status",className:"flex-1 text-[12px] text-ink",children:t(a.complete?"engines.freeSpace.found":"engines.freeSpace.foundAtLeast",{size:Rn(a.bytes)})}),e.jsx("button",{type:"button",onClick:()=>i({kind:"idle"}),className:"rounded-lg px-3 py-1 text-[12px] text-ink-secondary hover:bg-raised/50 hover:text-ink",children:t("common.cancel")}),e.jsx("button",{type:"button",onClick:()=>{u()},className:"rounded-lg bg-raised px-3 py-1 text-[12px] text-ink hover:bg-raised-hover",children:t("engines.freeSpace.delete")})]}),a.kind==="done"&&e.jsxs("p",{role:"status",className:"mt-2 text-[12px] text-ink-secondary",children:[(a.freedBytes>0||a.remaining===0)&&e.jsxs("span",{className:"text-success",children:[t("engines.freeSpace.freed",{size:Rn(a.freedBytes)})," "]}),a.remaining>0&&t("engines.freeSpace.someLeft")]}),r&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:r})]})}const Xt=[60,120,180,360,720];function Si(){const{state:s,dispatch:n}=W(),[a,i]=l.useState(!1),[r,c]=l.useState(""),o=l.useRef(!1),d=s.config?.cacheKeepWarm;if(!d)return null;const u=async p=>{if(!o.current){o.current=!0,i(!0),c("");try{const x=await U("/api/config",{method:"PUT",body:JSON.stringify({cacheKeepWarm:{enabled:p.enabled,windowMinutes:p.windowMinutes}})});n({type:"configStatus",config:x})}catch(x){c(x instanceof Error?x.message:t("settings.keepWarm.error"))}finally{o.current=!1,i(!1)}}},m=Xt.includes(d.windowMinutes)?[...Xt]:[...Xt,d.windowMinutes].sort((p,x)=>p-x);return e.jsxs(Y,{title:t("settings.keepWarm.title"),subtitle:t("settings.keepWarm.subtitle"),children:[e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[e.jsx("label",{htmlFor:"cache-keepwarm-enabled",className:"text-[13px] font-medium text-ink",children:t("settings.keepWarm.enable")}),e.jsx(me,{id:"cache-keepwarm-enabled",checked:d.enabled,disabled:a,"aria-describedby":"cache-keepwarm-help cache-keepwarm-cost",onClick:()=>{u({...d,enabled:!d.enabled})}})]}),e.jsx("p",{id:"cache-keepwarm-help",className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("settings.keepWarm.help")}),e.jsx("p",{id:"cache-keepwarm-cost",className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("settings.keepWarm.cost")}),e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-4",children:[e.jsx("label",{htmlFor:"cache-keepwarm-window",className:"text-[13px] font-medium text-ink",children:t("settings.keepWarm.window")}),e.jsx(pe,{id:"cache-keepwarm-window",value:d.windowMinutes,disabled:a||!d.enabled,onChange:p=>{u({...d,windowMinutes:Number(p.target.value)})},children:m.map(p=>e.jsx("option",{value:p,children:t("settings.keepWarm.hours",{hours:Number((p/60).toFixed(2))})},p))})]}),a&&e.jsx("span",{role:"status",className:"sr-only",children:t("settings.threads.saving")}),r&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:r})]})}function qu({instance:s,cliDefault:n,onClose:a,onSaved:i}){const[r,c]=l.useState(s.cliCandidates??null),[o,d]=l.useState(""),[u,m]=l.useState(s.cli&&!(s.cliCandidates??[]).includes(s.cli)?s.cli:""),[p,x]=l.useState(!1),[g,h]=l.useState(null),[b,y]=l.useState(!1),[f,k]=l.useState(null),E=l.useRef(!1);l.useEffect(()=>{E.current||(E.current=!0,U(`/api/cli-candidates?name=${encodeURIComponent(n??"")}`).then(({candidates:v})=>{c(v),s.cli&&(v.includes(s.cli)?d(s.cli):m(s.cli))}).catch(()=>c(v=>v??[])))},[n,s.cli]);const N=u.trim()||o,w=N!==(s.cli??""),I=p||b;l.useEffect(()=>{h(null)},[N]);const j=()=>{if(I||!N||!w)return;y(!0),k(null);const v=N;U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({cli:v})}).then(()=>Promise.resolve(i()).catch(()=>{})).then(a).catch(A=>k(A.message)).finally(()=>y(!1))},O=()=>{I||!N||!w||(x(!0),k(null),U("/api/cli-test",{method:"POST",body:JSON.stringify({cli:N,driver:s.driverKind})}).then(v=>{h(v),v.ok&&j()}).catch(v=>k(v.message)).finally(()=>x(!1)))};return e.jsxs("div",{className:"mt-2.5 flex flex-col gap-2",children:[r!==null&&r.length>0&&e.jsxs(pe,{className:"w-full font-mono",value:u.trim()?"":o,onChange:v=>{d(v.target.value),m("")},"aria-label":t("engines.detectedAria",{name:s.displayName}),disabled:I,children:[e.jsx("option",{value:"",children:t("engines.selectBinary")}),r.map(v=>e.jsx("option",{value:v,children:v},v))]}),e.jsx("input",{type:"text",value:u,onChange:v=>m(v.target.value),onKeyDown:v=>{v.key==="Enter"&&(v.preventDefault(),!(!N||!w)&&O())},placeholder:r?.length?t("engines.manualPath"):"/absolute/path/to/cli","aria-label":t("engines.customAria",{name:s.displayName}),spellCheck:!1,disabled:I,className:"w-full rounded-lg border border-hairline/40 bg-inset px-3 py-2 font-mono text-[12px] text-ink placeholder:font-sans placeholder:text-ink-secondary focus:outline-none disabled:opacity-50"}),g&&!g.ok&&g.message&&e.jsxs("div",{role:"alert",className:"flex gap-1.5 rounded-lg border border-warning/25 bg-warning/10 px-2.5 py-2 text-[12px] leading-relaxed text-warning",children:[e.jsx(Te,{size:13,className:"mt-0.5 shrink-0"}),e.jsx("span",{children:t("engines.testFailed",{message:g.message})})]}),g?.ok&&g.version&&e.jsx("div",{className:"text-[12px] text-success",children:t("engines.testPassed",{version:g.version})}),f&&e.jsx("div",{role:"alert",className:"text-[12px] text-danger",children:f}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx("button",{onClick:a,disabled:I,className:"rounded-lg px-3 py-1.5 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:t("common.cancel")}),g&&!g.ok?e.jsxs(e.Fragment,{children:[e.jsx("button",{onClick:()=>h(null),disabled:I,className:"rounded-lg px-3 py-1.5 text-[13px] text-ink-secondary hover:bg-raised/50 hover:text-ink disabled:opacity-50",children:t("engines.editPath")}),e.jsx("button",{onClick:()=>j(),disabled:I,className:"flex items-center gap-1.5 rounded-lg bg-raised px-3 py-1.5 text-[13px] text-danger hover:bg-raised-hover disabled:opacity-50",children:b?e.jsx(V,{size:13,className:"animate-spin"}):t("engines.saveAnyway")})]}):e.jsx("button",{onClick:O,disabled:I||!N||!w,className:z("flex w-[72px] items-center justify-center gap-1.5 rounded-lg py-1.5 text-[13px]","bg-raised text-ink hover:bg-raised-hover","disabled:cursor-not-allowed disabled:opacity-50"),children:I?e.jsx(V,{size:13,className:"animate-spin"}):e.jsxs(e.Fragment,{children:[e.jsx(he,{size:13}),t("common.save")]})})]})]})}function Ci({instance:s}){const{refreshInstances:n}=W(),[a,i]=l.useState(!1),r=Yc(a),[c,o]=l.useState(!1),[d,u]=l.useState(!1),[m,p]=l.useState(null),[x,g]=l.useState(null),h=l.useRef(null);l.useEffect(()=>{h.current!==null&&h.current!==s.cli&&i(!1),h.current=s.cli??null},[s.cli]);const b=()=>{c||d||(o(!0),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({cli:""})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(k=>g(k.message)).finally(()=>o(!1)))},y=()=>{c||d||(o(!0),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}`,{method:"PATCH",body:JSON.stringify({hidden:!0})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(k=>g(k.message)).finally(()=>o(!1)))},f=()=>{c||d||(u(!0),p(null),g(null),U(`/api/instances/${encodeURIComponent(s.instanceId)}/claude-update`,{method:"POST",body:JSON.stringify({})}).then(async({version:k})=>{p(k),await Promise.resolve(n()).catch(()=>{})}).catch(k=>g(k.message)).finally(()=>u(!1)))};return e.jsxs("details",{className:"mt-4 border-t border-hairline/40 pt-3",children:[e.jsx("summary",{className:"cursor-pointer rounded-md py-1 text-[12px] font-medium text-ink-secondary outline-none hover:text-ink focus-visible:ring-2 focus-visible:ring-accent",children:t("engines.library.advanced")}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("engines.footer")}),e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2 text-[13px]",children:[s.cli?e.jsx("span",{className:"w-full break-all font-mono text-[12px] text-ink-secondary",title:s.cli,children:s.cli}):s.cliDefault&&e.jsx("span",{className:"break-all font-mono text-[11px] text-ink-secondary",children:s.cliDefault}),s.snapshot.version&&e.jsx("span",{className:"break-all text-[11px] text-ink-secondary",title:s.snapshot.version,children:s.snapshot.version}),e.jsx("span",{className:"flex-1"}),s.driverKind==="claudeAgent"&&e.jsxs("button",{onClick:f,disabled:c||d,className:"flex shrink-0 items-center gap-1 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:[d?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(Ne,{size:12}),d?t("engines.updating"):t("engines.updateClaude")]}),s.cli&&e.jsx("button",{onClick:b,disabled:c||d,className:"shrink-0 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:c?t("engines.resetting"):t("engines.reset")}),e.jsx("button",{type:"button","data-hide-engine":s.instanceId,onClick:y,disabled:c||d,title:t("engines.hideHint"),className:"shrink-0 text-[12px] text-ink-secondary hover:text-ink disabled:opacity-50",children:t("engines.hide")}),e.jsx("button",{onClick:()=>i(k=>!k),disabled:d,"aria-expanded":a,className:z("shrink-0 rounded-lg border border-hairline/40 px-3 py-1 text-[12px]",a?"bg-accent/15 text-accent":"text-ink-secondary hover:bg-raised/50 hover:text-ink","disabled:opacity-50"),children:t("engines.setCli")})]}),m&&e.jsx("div",{role:"status",className:"mt-1 text-[12px] text-success",children:t("engines.claudeUpdated",{version:m})}),x&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:x}),r.shown&&e.jsx("div",{className:r.className,...r.exitProps,children:e.jsx(qu,{instance:s,cliDefault:s.cliDefault,onClose:()=>i(!1),onSaved:n})})]})}function Tn({instance:s,action:n}){const{state:a,dispatch:i,refreshInstances:r}=W(),[c,o]=l.useState(!1),[d,u]=l.useState(!1),[m,p]=l.useState(null),x=n==="remove",g=x?a.bots.filter(y=>y.modelSelection.instanceId===s.instanceId).length:0,h=t(x?"accounts.remove":"accounts.signOut"),b=async()=>{o(!1),u(!0),p(null);try{const y=`/api/instances/${encodeURIComponent(s.instanceId)}${x?"":"/auth/sign-out"}`,{instances:f}=await U(y,{method:x?"DELETE":"POST"});Array.isArray(f)?i({type:"instances",instances:f}):await r()}catch(y){p(y instanceof Error?y.message:String(y))}finally{u(!1)}};return e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("button",{type:"button",disabled:d||g>0,onClick:()=>o(!0),className:z("rounded-lg px-2.5 py-1.5 text-[12px] font-medium disabled:cursor-not-allowed disabled:opacity-50",x?"text-danger hover:bg-danger/10":"text-ink-secondary hover:bg-raised hover:text-ink"),children:d?e.jsx(V,{size:13,className:"animate-spin"}):h}),g>0&&e.jsx("p",{className:"text-[11px] text-ink-secondary",children:t("accounts.inUse",{count:String(g)})})]}),m&&e.jsx("p",{role:"alert",className:"text-[12px] text-danger",children:m}),e.jsx(Ve,{open:c,title:t(x?"accounts.removeTitle":"accounts.signOutTitle",{name:s.displayName}),body:t(x?"accounts.removeBodyAntigravity":"accounts.signOutBody"),confirmLabel:h,tone:"neutral",pending:d,onCancel:()=>{d||o(!1)},onConfirm:()=>{b()}})]})}function Ju({source:s}){const{state:n}=W(),[a,i]=l.useState(null),r=a?n.instances.find(c=>c.instanceId===a&&c.snapshot.authenticated!==!0):void 0;return e.jsxs(e.Fragment,{children:[e.jsx(Ni,{label:t("engineSetup.antigravity.addAccount"),endpoint:"/api/instances/antigravity-accounts",extra:{sourceInstanceId:s.instanceId},onAdded:i}),r&&e.jsx("div",{"data-antigravity-added":r.instanceId,children:e.jsx(St,{instance:r,unframed:!0})})]})}function Yu({instance:s,bare:n=!1}){const a=s.policy&&e.jsxs("p",{className:"mb-2 text-[12px] leading-relaxed text-ink-secondary",children:[e.jsx("span",{className:"font-medium text-ink",children:t("policy.managedBy",{organization:s.policy.organizationName})})," · ",s.policy.reason]});return s.trialCredit?e.jsx(bt,{instance:s,bare:n,children:e.jsx("p",{"data-trial-credit":s.trialCredit,className:"text-[13px] leading-relaxed text-ink-secondary",children:t(s.trialCredit==="used_up"?"engines.trialCreditUsedUp":s.trialCredit==="ended"?"engines.trialCreditEnded":Pe(s)?"engines.trialCredit":"engines.trialCreditOwn")})}):s.readOnly?e.jsxs(bt,{instance:s,bare:n,children:[a,e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("organization.managedEngine")}),!Pe(s)&&e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:t("organization.engineUnavailable")})]}):e.jsxs(bt,{instance:s,bare:n,children:[a,!Pe(s)&&e.jsx(St,{instance:s,intent:s.access==="custom"?"inject":"cloud",description:s.codexEndpoint?t("agentEndpoints.codexHint"):void 0,unframed:!0}),Pe(s)&&e.jsx(kl,{instance:s,className:"mt-3"}),Pe(s)&&s.serverKind==="ollama"&&e.jsx(Nl,{instance:s,className:"mt-3"}),Pe(s)&&e.jsx(wl,{instance:s,className:"mt-3"}),s.snapshot.update&&e.jsx(Aa,{update:s.snapshot.update,instance:s,className:"mt-3",quiet:!0}),s.snapshot.warning&&e.jsx(Ia,{warning:s.snapshot.warning,className:"mt-3"}),Pe(s)&&s.snapshot.authenticated===!0&&(s.authentication?.method==="device-code"?e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] text-success",children:[e.jsx(he,{size:13}),t(Sl[Ea(s.driverKind)].connectedAccount)]}):s.authentication?.method==="paste-code"&&e.jsxs("p",{className:"flex items-center gap-1.5 text-[12px] text-success",children:[e.jsx(he,{size:13}),t("engineSetup.claude.connectedAccount")]})),s.freeUpSpace&&e.jsx(Vu,{instance:s}),s.driverKind==="antigravityAgent"&&e.jsxs("div",{className:"mt-3 space-y-3",children:[s.snapshot.authenticated&&e.jsx("p",{className:"break-words text-[12px] text-ink-secondary",children:s.snapshot.account?.email??t("engineSetup.antigravity.emailUnavailable")}),e.jsx(Ju,{source:s}),s.snapshot.authenticated===!0&&s.authentication?.signOut===!0&&e.jsx(Tn,{instance:s,action:"signOut"}),s.instanceId.startsWith("antigravity-")&&e.jsx(Tn,{instance:s,action:"remove"})]}),e.jsx(Ci,{instance:s})]})}function Xu(s,n){return n?s.snapshot.authenticated===!0&&s.snapshot.account?.email?s.snapshot.account.email:t("onboarding.engines.ready"):s.snapshot.ollama?jl(s.snapshot.ollama):s.snapshot.state==="available"&&s.snapshot.authenticated===!1?t("model.signInRequired"):t("onboarding.engines.needsSetup")}function Qu({rows:s,isReady:n,renderEngine:a,more:i}){const[r,c]=l.useState(null),o=s.filter(u=>n(u)||u.authentication!==void 0),d=s.filter(u=>!o.includes(u));return e.jsxs(e.Fragment,{children:[e.jsx(be,{label:t("settings.simple.ai.yours"),actions:e.jsx(Ra,{}),children:e.jsx(ye,{children:o.map(u=>{const m=n(u),p=r===u.instanceId;return e.jsxs("div",{"data-simple-engine":u.instanceId,className:"group",children:[e.jsxs("div",{className:"flex min-h-11 flex-wrap items-center gap-x-5 gap-y-2 px-4 py-2.5",children:[e.jsxs("span",{className:"flex min-w-[min(100%,15rem)] flex-1 items-center gap-3",children:[e.jsx(rn,{instance:u,size:14,subtle:!0}),e.jsxs("span",{className:"flex min-w-0 flex-col gap-0.5",children:[e.jsx("span",{className:"truncate text-[14px] leading-5 text-ink",children:u.displayName}),e.jsx("span",{className:"truncate text-[13px] leading-[18px] text-ink-secondary",children:Xu(u,m)})]})]}),e.jsx("button",{type:"button","aria-expanded":p,className:"ui-button ml-auto shrink-0",onClick:()=>c(p?null:u.instanceId),children:t(p?"common.done":m?"settings.simple.ai.manage":"settings.simple.ai.setUp")})]}),p&&e.jsx("div",{className:"px-4 pb-3",children:a(u,!0)})]},u.instanceId)})})}),d.length>0&&e.jsx(Ct,{title:t("settings.simple.ai.more",{count:String(d.length)}),trailing:e.jsx("span",{"aria-hidden":"true",className:"flex items-center -space-x-1",children:d.slice(0,4).map(u=>e.jsx("span",{className:"flex size-[18px] items-center justify-center rounded-full bg-menu",children:e.jsx(rn,{instance:u,size:14,subtle:!0})},u.instanceId))}),...i,children:e.jsx(Ta,{instances:d,isReady:n,renderEngine:u=>a(u)})})]})}function Zu(){const{state:s,refreshInstances:n}=W(),[a,i]=l.useState([]),[r,c]=l.useState(null),[o,d]=l.useState(null);if(l.useEffect(()=>{let m=!0;return U("/api/instances/hidden").then(p=>{m&&i(Array.isArray(p?.instances)?p.instances:[])}).catch(()=>{}),()=>{m=!1}},[s.instances]),a.length===0)return null;const u=m=>{c(m),d(null),U(`/api/instances/${encodeURIComponent(m)}`,{method:"PATCH",body:JSON.stringify({hidden:!1})}).then(()=>Promise.resolve(n()).catch(()=>{})).catch(p=>d(p.message)).finally(()=>c(null))};return e.jsxs("details",{"data-hidden-engines":!0,className:"px-4",children:[e.jsx("summary",{className:"cursor-pointer text-[13px] font-medium text-ink-secondary hover:text-ink",children:t("engines.hiddenTitle",{count:String(a.length)})}),e.jsx("p",{className:"mt-2 text-[12px] text-ink-secondary",children:t("engines.hiddenHint")}),e.jsx("div",{className:"mt-2 flex flex-col gap-1.5",children:a.map(m=>e.jsxs("div",{className:"flex items-center justify-between gap-3 rounded-lg border border-hairline/40 bg-inset px-3 py-2",children:[e.jsx("span",{className:"min-w-0 truncate text-[13px] text-ink",children:m.displayName}),e.jsx("button",{type:"button","data-unhide-engine":m.instanceId,disabled:r!==null,onClick:()=>u(m.instanceId),className:"shrink-0 text-[12px] font-medium text-accent hover:underline disabled:opacity-50",children:r===m.instanceId?t("engines.unhiding"):t("engines.unhide")})]},m.instanceId))}),o&&e.jsx("div",{role:"alert",className:"mt-1 text-[12px] text-danger",children:o})]})}function Ei({simple:s=!1,more:n}){const{state:a}=W();l.useEffect(()=>yl,[]);const i=a.instances.filter(g=>g.readOnly||g.cli!==void 0||g.cliDefault!==void 0||g.snapshot.state==="unavailable"||vl(g)||g.claudeEndpoint!==void 0||g.claudeBedrock!==void 0||g.codexEndpoint!==void 0),r=new Map;for(const g of i){const h=Vt(g);h&&r.set(h,[...r.get(h)??[],g])}const c=g=>{const h=Vt(g);return h&&r.get(h)?.[0]===g?h:null},o=i.filter(g=>!Vt(g)||c(g)),d=o.length>0&&o.every(g=>g.readOnly),u=!r.has("chatgpt")&&!d,m=!r.has("claude")&&!d,p=g=>{const h=c(g);return h?ki(r.get(h)):Pe(g)},x=(g,h=!1)=>{const b=c(g);return b?e.jsx(Uu,{group:b,accounts:r.get(b),bare:h,advanced:e.jsxs(e.Fragment,{children:[b==="claude"?e.jsxs(e.Fragment,{children:[e.jsx(qt,{}),e.jsx(Yt,{})]}):e.jsx(Jt,{}),e.jsx(Ci,{instance:g})]})}):e.jsx(Yu,{instance:g,bare:h})};return s&&n?e.jsxs(e.Fragment,{children:[e.jsx(Qu,{rows:o,isReady:p,renderEngine:x,more:n}),m&&e.jsxs("div",{className:"px-4",children:[e.jsx(qt,{}),e.jsx(Yt,{})]}),u&&e.jsx("div",{className:"px-4",children:e.jsx(Jt,{})})]}):e.jsxs("div",{className:"flex min-w-0 flex-col gap-6 pb-2",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"min-w-0 flex-1 basis-60 space-y-2 px-4",children:[e.jsx("h1",{className:"text-[22px] font-semibold tracking-tight text-ink",children:t("settings.engines.title")}),e.jsx("p",{className:"mt-2 max-w-lg text-[13px] leading-relaxed text-ink-secondary",children:t("engines.library.intro")})]}),e.jsx(Ra,{})]}),e.jsx(Ta,{instances:o,isReady:p,renderEngine:x}),m&&e.jsxs("div",{className:"px-4",children:[e.jsx(qt,{}),e.jsx(Yt,{})]}),u&&e.jsx("div",{className:"px-4",children:e.jsx(Jt,{})}),e.jsx(Zu,{}),e.jsx(Si,{})]})}const em={status:"/api/local-computer","local-vms":"/api/local-computer/instances",cloud:"/api/computers/boxes",vps:"/api/computers/vps"};function mt(s,n){return[em[s],{signal:n}]}function Os(s,n){return[s,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(n)}]}function tm({instances:s,configured:n,aliases:a,loading:i,removingName:r,error:c,unavailableReason:o,onRefresh:d,onRemove:u}){return e.jsxs(Y,{title:t("vm.vps.title"),subtitle:t("vm.vps.subtitle"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:n===!0?t("vm.vps.sshHost",{alias:a.join(", ")||t("vm.vps.configuredFallback")}):n===!1?e.jsxs(e.Fragment,{children:[t("vm.vps.needsAlias")," ",e.jsx(Ba,{id:"vps"})]}):t("vm.vps.refreshHint")}),e.jsxs("button",{type:"button",onClick:d,disabled:i||r!==null,"aria-label":t("vm.vps.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(i&&"animate-spin")})," ",t("vm.refresh")]})]}),c&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:c}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:i?t("vm.vps.checking"):o?t("vm.vps.unavailable",{reason:o}):n===!1?t("vm.vps.notConfigured"):s.length===1?t("vm.vps.foundOne"):t("vm.vps.foundMany",{count:s.length})}),!(n===!1&&!i&&!o)&&e.jsxs("div",{"aria-busy":i||r!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:[o&&s.length>0&&e.jsxs("div",{className:"flex items-center gap-2 border-b border-hairline/35 px-3 py-2.5 text-[12px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",o]}),i&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.vps.checkingList")]}):o&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",o]}):n===!1?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Bc,{size:14,className:"shrink-0"})," ",t("vm.vps.notConfigured")]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.vps.noneFound")}):s.map((m,p)=>{const x=um(m),g=zs(x),h=r===m.name,b=Ms(m.name);return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",p>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:m.orphaned?t("vm.vps.orphan",{id:b}):m.ownerName}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",m.inUse||x==="running"?"bg-success/15 text-success":x==="stopped"||x==="paused"?"bg-control text-ink-secondary":"bg-warning/15 text-warning"),children:g}),a.length>1&&e.jsx("span",{className:"rounded-full bg-control px-2 py-0.5 font-mono text-[11px] text-ink-secondary",children:m.vpsAlias})]}),e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:m.orphaned?t("vm.owner.gone"):t("vm.owner.owned")}),m.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.vps.stopFirst")})]}),e.jsxs("button",{type:"button",onClick:()=>u(m),disabled:i||m.inUse||r!==null,"aria-busy":h||void 0,title:t("vm.vps.removeTitle"),className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[h?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("vm.vps.remove")]})]},`${m.vpsAlias??""}:${m.name}`)})]})]})}const sm=[1e3,2e3,4e3];function nm(s){return new Promise(n=>window.setTimeout(n,s))}const am={auto:"vm.dest.auto",cloud:"place.cloud",vm:"vm.dest.vm",local:"vm.dest.local",browser:"vm.dest.browser",off:"vm.dest.off"},im={unmanaged:"vm.state.notManaged","in-use":"vm.state.inUse",stopped:"vm.state.stopped",running:"vm.state.running",attention:"vm.state.attention",sleeping:"vm.state.sleeping","going-to-sleep":"vm.state.goingToSleep",starting:"vm.state.starting",restarting:"vm.state.restarting",removing:"vm.state.removing",paused:"vm.state.paused"};function zs(s){return t(im[s])}function rm(s){return s.managed?s.inUse?"in-use":s.container==="stopped"?"stopped":s.ready?"running":"attention":"unmanaged"}function lm(s){return zs(rm(s))}function om(s){return s.inUse?"in-use":s.state==="removing"?"removing":s.state==="archived"?"sleeping":s.state==="archiving"?"going-to-sleep":["idle","ready","running"].includes(s.state)?"running":["init","provisioning","provisioned","cloning"].includes(s.state)?"starting":"attention"}function Ai(s,n,a){const i={...a},r=new Set(s.map(o=>o.boxId)),c=s.flatMap(o=>{const d=a[o.boxId];return d==="deleted"?[]:d==="deleting"?[{...o,state:"removing"}]:d!=="sleeping"?[o]:o.state==="archived"?(delete i[o.boxId],[o]):[{...o,state:"archived"}]});for(const o of n)a[o.boxId]!=="sleeping"||r.has(o.boxId)||c.push({...o,state:"archived"});for(const[o,d]of Object.entries(a))(d==="deleted"||d==="deleting")&&!r.has(o)&&delete i[o];return{instances:c,overrides:i}}function cm(s,n,a){return s.configured!==!0||s.available!==!0?{instances:n,overrides:{...a}}:Ai(Array.isArray(s.instances)?s.instances:[],n,a)}function dm(s){return["idle","ready","running"].includes(s.state)}function um(s){return s.inUse?"in-use":s.state==="running"?"running":s.state==="restarting"?"restarting":s.state==="removing"?"removing":["created","exited"].includes(s.state)?"stopped":s.state==="paused"?"paused":"attention"}function Ms(s){const n=/-([a-f0-9]{12})$/i.exec(s)?.[1];return n?n.slice(-8).toLowerCase():"unknown"}function mm(s){return{confirmation:t("vm.confirm.deleteBotVm",{name:s.name}),request:Os(`/api/bots/${s.botId}/local-computer/remove`,{})}}function pm(s,n){return{confirmation:s==="delete"?t("vm.confirm.deleteCloud",{subject:n.orphaned?t("vm.confirm.orphanCloud"):t("vm.confirm.ownedCloud",{name:n.ownerName??""})}):null,request:Os(`/api/computers/boxes/${encodeURIComponent(n.boxId)}/${s}`,s==="delete"?{confirmName:n.name}:{})}}function xm(s){const n=Ms(s.name);return{confirmation:t("vm.confirm.removeVps",{subject:s.orphaned?t("vm.confirm.orphanVps",{id:n}):t("vm.confirm.ownedVps",{name:s.ownerName??""})}),request:Os(`/api/computers/vps/${encodeURIComponent(s.name)}/remove`,{confirmName:s.name,alias:s.vpsAlias})}}function Qt(s,n){return s.confirmation!==null&&!n(s.confirmation)?null:s.request}function gm({instances:s,configured:n,loading:a,pending:i,error:r,unavailableReason:c,onRefresh:o,onSleep:d,onDelete:u}){return e.jsxs(Y,{title:t("vm.cloud.title"),subtitle:t("vm.cloud.subtitle"),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:n===!0?t("vm.cloud.includesOrphans"):n===!1?e.jsxs(e.Fragment,{children:[t("vm.cloud.needsKey")," ",e.jsx(Ba,{id:"box"})]}):t("vm.cloud.refreshHint")}),e.jsxs("button",{type:"button",onClick:o,disabled:a||i!==null,"aria-label":t("vm.cloud.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(a&&"animate-spin")})," ",t("vm.refresh")]})]}),r&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:r}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:a?t("vm.cloud.checking"):c?t("vm.cloud.unavailable",{reason:c}):n===!1?t("vm.cloud.notConnected"):s.length===1?t("vm.cloud.foundOne"):t("vm.cloud.foundMany",{count:s.length})}),!(n===!1&&!a&&!c)&&e.jsx("div",{"aria-busy":a||i!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:a&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.cloud.checkingList")]}):c?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",c]}):n===!1?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(vs,{size:14,className:"shrink-0"})," ",t("vm.cloud.notConnected")]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.cloud.noneFound")}):s.map((m,p)=>{const x=om(m),g=zs(x),h=i?.boxId===m.boxId,b=dm(m),y=x==="removing";return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",p>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:m.orphaned?t("vm.cloud.orphan"):t("vm.cloud.ofBot",{name:m.ownerName??""})}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",m.inUse||x==="running"?"bg-success/15 text-success":x==="sleeping"||x==="going-to-sleep"?"bg-control text-ink-secondary":"bg-warning/15 text-warning"),children:g})]}),e.jsx("div",{className:"mt-1 break-all text-[12px] text-ink-secondary",children:m.orphaned?t("vm.owner.gone"):t("vm.cloud.machineId",{id:m.name})}),m.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.cloud.stopFirst")})]}),e.jsxs("div",{className:"flex shrink-0 items-center gap-1.5",children:[e.jsxs("button",{type:"button",onClick:()=>d(m),disabled:a||m.inUse||i!==null||!b,"aria-busy":h&&i?.action==="sleep"?!0:void 0,title:b?t("vm.cloud.sleepTitle"):t("vm.cloud.sleepBlocked",{state:g.toLowerCase()}),className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:cursor-not-allowed disabled:opacity-40",children:[h&&i?.action==="sleep"?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(Lc,{size:12}),t("vm.cloud.sleep")]}),e.jsxs("button",{type:"button",onClick:()=>u(m),disabled:a||m.inUse||i!==null||y,"aria-busy":h&&i?.action==="delete"?!0:void 0,title:t("vm.cloud.deleteTitle"),className:"flex items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[h&&i?.action==="delete"?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("common.delete")]})]})]},m.boxId)})})]})}function hm({instances:s,maxInstances:n,loading:a,deletingBotId:i,error:r,unavailableReason:c,onRefresh:o,onDelete:d}){return e.jsxs(Y,{title:t("vm.perBot.title"),subtitle:t("vm.perBot.subtitle",{count:c?t("vm.perBot.inventoryUnavailable"):t("vm.perBot.created",{count:s.length,max:n})}),children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsx("div",{className:"text-[12px] text-ink-secondary",children:t("vm.perBot.deleteHint")}),e.jsxs("button",{type:"button",onClick:o,disabled:a||i!==null,"aria-label":t("vm.perBot.refreshAria"),className:"flex shrink-0 items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1.5 text-[12px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12,className:z(a&&"animate-spin")})," ",t("vm.refresh")]})]}),r&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:r}),e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:a?t("vm.perBot.checking"):c?t("vm.perBot.unavailable",{reason:c}):s.length===1?t("vm.perBot.foundOne"):t("vm.perBot.foundMany",{count:s.length})}),e.jsx("div",{"aria-busy":a||i!==null,className:"mt-3 overflow-hidden rounded-xl border border-hairline/40",children:a&&s.length===0?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.perBot.checkingList")]}):c?e.jsxs("div",{className:"flex items-center gap-2 px-3 py-4 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:14,className:"shrink-0 text-warning"})," ",c]}):s.length===0?e.jsx("div",{className:"px-3 py-4 text-[13px] text-ink-secondary",children:t("vm.perBot.none")}):s.map((u,m)=>{const p=lm(u),x=i===u.botId,g=u.managed===!0;return e.jsxs("div",{className:z("flex items-start justify-between gap-3 px-3 py-3",m>0&&"border-t border-hairline/35"),children:[e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{className:"truncate text-[14px] font-medium text-ink",children:u.name}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px]",g?u.inUse||u.ready?"bg-success/15 text-success":u.container==="stopped"?"bg-control text-ink-secondary":"bg-warning/15 text-warning":"bg-warning/15 text-warning"),children:p})]}),e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.perBot.destination",{destination:t(am[u.destination])})}),!g&&e.jsx("div",{className:"mt-1 text-[12px] text-warning",children:t("vm.perBot.unmanaged")}),g&&u.problem&&!u.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-warning",children:Za(u.problem)}),g&&u.inUse&&e.jsx("div",{className:"mt-1 text-[12px] text-ink-secondary",children:t("vm.perBot.stopFirst")})]}),g&&e.jsxs("button",{type:"button",onClick:()=>d(u),disabled:a||u.inUse||i!==null,"aria-busy":x||void 0,title:u.inUse?t("vm.perBot.deleteBlocked"):t("vm.perBot.deleteTitle",{name:u.name}),className:"flex shrink-0 items-center gap-1.5 rounded-lg bg-danger/10 px-2.5 py-1.5 text-[12px] font-medium text-danger hover:bg-danger/15 disabled:cursor-not-allowed disabled:opacity-40",children:[x?e.jsx(V,{size:12,className:"animate-spin"}):e.jsx(we,{size:12}),t("common.delete")]})]},u.botId)})})]})}function pt({n:s,title:n,done:a,children:i}){return e.jsxs("div",{className:"flex gap-3",children:[e.jsx("div",{className:z("mt-0.5 flex size-5 shrink-0 items-center justify-center rounded-full text-[11px]",a?"bg-success/20 text-success":"border border-hairline/50 text-ink-secondary"),children:a?e.jsx(he,{size:12}):s}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:z("text-[14px]",a?"text-ink-secondary line-through":"text-ink"),children:n}),!a&&i&&e.jsx("div",{className:"mt-2 flex flex-col items-start gap-2 [&>*]:max-w-full",children:i})]})]})}function $e({action:s,pending:n,children:a,onClick:i,danger:r=!1}){return e.jsxs("button",{onClick:i,"aria-busy":n===s,disabled:n!==null,className:z("flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-[13px] font-medium disabled:opacity-50",r?"bg-danger/15 text-danger hover:bg-danger/20":"bg-accent text-white hover:brightness-110"),children:[n===s&&e.jsx(V,{size:13,className:"animate-spin"}),a]})}const Ii=5,Pi=1440,fm=480;function bm(s){const n=s.trim();if(!/^\d+$/.test(n))return null;const a=Number(n);return a>=Ii&&a<=Pi?a:null}function ym({minutes:s,disabled:n,onSave:a}){const[i,r]=l.useState(String(s)),[c,o]=l.useState(!1),[d,u]=l.useState(""),[m,p]=l.useState(!1);l.useEffect(()=>{c||r(String(s))},[s,c]);const x=async()=>{if(!c||m)return;const g=bm(i);if(g===null){u(t("vm.idle.range"));return}p(!0);try{await a(g),r(String(g)),o(!1),u("")}catch(h){u(h instanceof Error?h.message:t("vm.idle.error"))}finally{p(!1)}};return e.jsxs("div",{className:"mt-3",children:[e.jsxs("div",{className:"flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"local-vm-idle-timeout",className:"text-[13px] text-ink",children:t("vm.idle.label")}),e.jsx("div",{id:"local-vm-idle-timeout-help",className:"text-[12px] text-ink-secondary",children:t("vm.idle.detail")})]}),e.jsxs("div",{className:z("flex w-[150px] shrink-0 items-center rounded-lg border bg-control",d?"border-danger/60":"border-hairline/40 focus-within:border-focus"),children:[e.jsx("input",{id:"local-vm-idle-timeout",type:"number",min:Ii,max:Pi,step:1,inputMode:"numeric",value:i,disabled:n||m,"aria-invalid":!!d,"aria-describedby":d?"local-vm-idle-timeout-error local-vm-idle-timeout-help":"local-vm-idle-timeout-help",onChange:g=>{r(g.target.value),o(!0),u("")},onBlur:()=>{x()},onKeyDown:g=>{g.key==="Enter"&&g.currentTarget.blur()},className:"min-w-0 flex-1 bg-transparent px-2.5 py-1.5 text-[13px] tabular-nums text-ink focus:outline-none disabled:opacity-50"}),e.jsx("span",{className:"pr-2.5 text-[13px] text-ink-secondary",children:t("vm.idle.minutes")})]})]}),d?e.jsx("p",{id:"local-vm-idle-timeout-error",role:"alert",className:"mt-1.5 text-[12px] text-danger",children:d}):null]})}function Ri(){const s=W().state.config?.cloudHome===!0,[n,a]=l.useState(null),[i,r]=l.useState(!0),[c,o]=l.useState(null),d=l.useRef(null);l.useEffect(()=>()=>d.current?.abort(),[]);const[u,m]=l.useState(null),[p,x]=l.useState(!1),[g,h]=l.useState(0),[b,y]=l.useState([]),[f,k]=l.useState(2),[E,N]=l.useState(!1),[w,I]=l.useState(null),[j,O]=l.useState(null),[v,A]=l.useState(null),[P,F]=l.useState(0),[se,ne]=l.useState([]),[X,S]=l.useState(null),[q,ee]=l.useState(!0),[T,B]=l.useState(null),[R,$]=l.useState(null),[te,le]=l.useState(null),[ie,D]=l.useState(0),Z=l.useRef([]),oe=l.useRef({}),[xe,ce]=l.useState([]),[ae,fe]=l.useState(null),[_,re]=l.useState([]),[L,C]=l.useState(!0),[H,ue]=l.useState(null),[G,je]=l.useState(null),[Ae,qe]=l.useState(null),[Je,Oe]=l.useState(0),[kr,ze]=l.useState(""),Ye=l.useCallback(async M=>{const K=await fetch(...mt("status",M)),J=await K.json().catch(()=>({}));if(!M?.aborted){if(!K.ok)throw new Error(J.error??t("vm.err.status",{code:K.status}));return a(J),m(null),J}},[]),Rt=l.useCallback(async M=>{const K=await fetch(...mt("local-vms",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.inventory",{code:K.status}));const Q=J;y(Q.instances),k(Q.maxInstances),O(Q.available?null:Za(Q.problem)??t("vm.err.runtimeUnavailable")),I(null)},[]),Xe=l.useCallback(async M=>{const K=await fetch(...mt("cloud",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.cloudInventory",{code:K.status}));const Q=J,ge=cm(Q,Z.current,oe.current);oe.current=ge.overrides,Z.current=ge.instances,ne(ge.instances),S(Q.configured===!0),$(Q.available||!Q.configured?null:Q.problem??t("vm.err.cloudUnavailable")),B(null)},[]),Tt=l.useCallback(async M=>{const K=await fetch(...mt("vps",M)),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.err.vpsInventory",{code:K.status}));const Q=J;ce(Array.isArray(Q.instances)?Q.instances:[]),fe(Q.configured===!0),re(Array.isArray(Q.vpsAliases)?Q.vpsAliases:[]),je(Q.available||!Q.configured?null:Q.problem??t("vm.err.vpsUnavailable")),ue(null)},[]);l.useEffect(()=>{if(s)return;let M=!0,K,J;const Q=async()=>{J=new AbortController;try{await Ye(J.signal)}catch(ge){M&&!(ge instanceof DOMException&&ge.name==="AbortError")&&(a(null),m(ge instanceof Error?ge.message:String(ge)))}finally{M&&(r(!1),K=window.setTimeout(()=>{Q()},5e3))}};return Q(),()=>{M=!1,J?.abort(),K!==void 0&&window.clearTimeout(K)}},[s,Ye,g]),l.useEffect(()=>{if(n?.mode!=="per-bot"){y([]),N(!1),I(null),O(null);return}const M=new AbortController;return N(!0),Rt(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||I(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||N(!1)}),()=>M.abort()},[P,Rt,n?.mode]),l.useEffect(()=>{const M=new AbortController;return ee(!0),Xe(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||$(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||ee(!1)}),()=>M.abort()},[ie,Xe]),l.useEffect(()=>{const M=new AbortController;return C(!0),Tt(M.signal).catch(K=>{K instanceof DOMException&&K.name==="AbortError"||je(K instanceof Error?K.message:String(K))}).finally(()=>{M.signal.aborted||C(!1)}),()=>M.abort()},[Tt,Je]);const Bt=async(M,K)=>{const J=await fetch(`/api/local-computer/${M}`,{method:"POST",headers:{"content-type":"application/json"},body:"{}",signal:K}),Q=await J.json().catch(()=>({})),ge={pull:"vm.err.prepare",run:"vm.err.create",start:"vm.err.start",stop:"vm.err.stop",remove:"vm.deleteError"};if(!J.ok)throw new Error(Q.error??t(ge[M]));return K.throwIfAborted(),a(Q),Q},$s=M=>window.ogb?.confirm?window.ogb.confirm(M):window.confirm(M),De=async M=>{if(c!==null||d.current)return;const K=new AbortController;d.current=K,o(M),m(null);try{if(M==="remove"&&!await $s(t("vm.confirm.deleteShared"))||M==="recreate"&&!await $s(t("vm.confirm.recreate")))return;let J;if(M==="recreate"?(await Bt("remove",K.signal),J=await Bt("run",K.signal)):J=await Bt(M,K.signal),(M==="run"||M==="start"||M==="recreate")&&(J=await Qc(J,async()=>await Ye(K.signal)??J,K.signal),!J.ready))throw new Error(J.problem??t("vm.err.start"));await Ye(),ze(M==="remove"?t("vm.announce.deleted"):M==="stop"?t("vm.announce.stopped"):t("vm.announce.updated"))}catch(J){if(K.signal.aborted)return;m(J instanceof Error?J.message:String(J))}finally{d.current=null,K.signal.aborted||o(null)}},Hs=async(M,K)=>{x(!0),m(null);try{const J=await fetch("/api/config",{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({localVm:{mode:M,maxInstances:K}})}),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Error(Q.error??t("vm.policyError"));a(ge=>ge&&{...ge,mode:M,max_instances:K}),await Ye()}catch(J){m(J instanceof Error?J.message:String(J))}finally{x(!1)}},Nr=async M=>{const K=await fetch("/api/config",{method:"PATCH",headers:{"content-type":"application/json"},body:JSON.stringify({localVm:{idleTimeoutMinutes:M}})}),J=await K.json().catch(()=>({}));if(!K.ok)throw new Error(J.error??t("vm.idle.error"));a(Q=>Q&&{...Q,idle_timeout_ms:M*6e4})},wr=async M=>{if(!M.managed){I(t("vm.unmanagedError"));return}const K=Qt(mm(M),J=>window.confirm(J));if(K){A(M.botId),I(null);try{const J=await fetch(...K),Q=await J.json().catch(()=>({}));if(!J.ok)throw new Error(Q.error??t("vm.deleteError"));await Rt(),ze(t("vm.announce.deletedBot",{name:M.name}))}catch(J){I(J instanceof Error?J.message:String(J))}finally{A(null)}}},Ws=async(M,K)=>{const J=Qt(pm(M,K),Q=>window.confirm(Q));if(J){le({boxId:K.boxId,action:M}),B(null),ze("");try{const Q=await fetch(...J),ge=await Q.json().catch(()=>({}));if(!Q.ok)throw new Error(ge.error??t(M==="delete"?"vm.cloud.deleteError":"vm.cloud.sleepError"));const zt=M==="delete"&&ge?.pending===!0;oe.current={...oe.current,[K.boxId]:M==="delete"?zt?"deleting":"deleted":"sleeping"};const Mt=Ai(Z.current,Z.current,oe.current);oe.current=Mt.overrides,Z.current=Mt.instances,ne(Mt.instances);const _e=K.orphaned?t("vm.announce.orphanCloud"):t("vm.confirm.ownedCloud",{name:K.ownerName??""});if(ze(zt?`${_e}: ${t("vm.state.removing")}.`:t(M==="delete"?"vm.announce.cloudDeleted":"vm.announce.cloudSleeping",{subject:_e})),zt){for(const Ce of sm){await nm(Ce);try{await Xe()}catch{}if(oe.current[K.boxId]!=="deleting"){ze(t("vm.announce.cloudDeleted",{subject:_e}));return}}const Ke={...oe.current};delete Ke[K.boxId],oe.current=Ke;const dt=Z.current.map(Ce=>Ce.boxId===K.boxId?{...Ce,state:K.state}:Ce);Z.current=dt,ne(dt);try{await Xe(),Z.current.some(Ce=>Ce.boxId===K.boxId)||ze(t("vm.announce.cloudDeleted",{subject:_e}))}catch(Ce){const Cr=Ce instanceof Error?Ce.message:String(Ce);B(`${_e}: ${t("vm.state.removing")}. ${Cr}`)}return}try{await Xe()}catch(Ke){const dt=Ke instanceof Error?Ke.message:String(Ke);B(t(M==="delete"?"vm.cloud.deletedRefreshError":"vm.cloud.sleepRefreshError",{subject:_e,detail:dt}))}}catch(Q){B(Q instanceof Error?Q.message:String(Q))}finally{le(null)}}},Sr=async M=>{const K=Ms(M.name),J=Qt(xm(M),Q=>window.confirm(Q));if(J){qe(M.name),ue(null);try{const Q=await fetch(...J),ge=await Q.json().catch(()=>({}));if(!Q.ok)throw new Error(ge.error??t("vm.vpsRemoveError"));await Tt(),ze(t("vm.announce.vpsRemoved",{subject:M.orphaned?t("vm.announce.orphanVps",{id:K}):t("vm.confirm.ownedVps",{name:M.ownerName??""})}))}catch(Q){ue(Q instanceof Error?Q.message:String(Q))}finally{qe(null)}}},Ie=n?.commands,ct=n?.ready===!0,Gs=n?.container!=="missing",Vs=!!(Gs&&(!n?.imageMatches||!n?.managed||n?.network==="unsafe"||n?.security==="unsafe"||n?.persistence==="unsafe")),qs=!i&&!n,Js=n?.platform==="darwin"?t("vm.host.mac"):t("vm.host.computer"),ke=n?.mode==="per-bot",Lt=ke&&n?.runtime==="container",Ot=ke?!!(n?.daemonUp&&n?.image&&!Lt):ct;return e.jsxs(e.Fragment,{children:[e.jsx("p",{role:"status","aria-live":"polite","aria-atomic":"true",className:"sr-only",children:kr}),e.jsx(gm,{instances:se,configured:X,loading:q,pending:te,error:T,unavailableReason:R,onRefresh:()=>D(M=>M+1),onSleep:M=>{Ws("sleep",M)},onDelete:M=>{Ws("delete",M)}}),e.jsx(tm,{instances:xe,configured:ae,aliases:_,loading:L,removingName:Ae,error:H,unavailableReason:G,onRefresh:()=>Oe(M=>M+1),onRemove:M=>{Sr(M)}}),e.jsx(Xc,{}),!s&&e.jsxs(e.Fragment,{children:[e.jsxs(Y,{title:t("vm.main.title"),subtitle:ke?t("vm.main.perBotSubtitle",{host:Js}):t("vm.main.sharedSubtitle",{host:Js}),children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("span",{"aria-live":"polite",className:z("flex items-center gap-1.5 rounded-full px-2.5 py-1 text-[13px]",Ot?"bg-success/15 text-success":"bg-control text-ink-secondary"),children:[i?e.jsx(V,{size:12,className:"animate-spin"}):Ot?e.jsx(he,{size:12}):e.jsx(Cl,{size:9}),i?t("common.checking"):qs?t("vm.main.statusUnavailable"):ke&&Ot?t("vm.main.readyPerBot"):Lt?t("vm.main.perBotUnsupported"):ct?t("vm.main.ready"):n?.problem??t("vm.main.notReady")]}),e.jsxs("button",{onClick:()=>{r(!0),h(M=>M+1),F(M=>M+1)},disabled:i||c!==null,className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1 text-[13px] text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-40",children:[e.jsx(Ne,{size:12})," ",t("vm.main.recheck")]}),ct&&!ke&&e.jsxs("a",{href:n?.viewer_url??Ie?.view,target:"_blank",rel:"noreferrer",className:"flex items-center gap-1.5 rounded-lg border border-hairline/40 px-2.5 py-1 text-[13px] text-ink hover:bg-control",children:[e.jsx(ot,{size:12})," ",t("vm.main.watch")]})]}),u&&e.jsx("div",{role:"alert",className:"mt-3 rounded-lg bg-danger/10 px-3 py-2 text-[12px] text-danger",children:u})]}),e.jsxs(Y,{title:t("vm.isolation.title"),subtitle:t("vm.isolation.subtitle"),children:[e.jsx("div",{className:"flex overflow-hidden rounded-lg border border-hairline/40",children:["shared","per-bot"].map((M,K)=>e.jsx("button",{type:"button",disabled:!n||p,onClick:()=>{Hs(M,n?.max_instances??2)},className:z("flex-1 px-3 py-2 text-[13px] disabled:opacity-50",K>0&&"border-l border-hairline/40",n?.mode===M?"bg-control text-ink":"text-ink-secondary hover:text-ink"),children:M==="shared"?t("vm.isolation.shared"):t("vm.isolation.perBot")},M))}),ke&&e.jsxs("div",{className:"mt-3 flex items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-[13px] text-ink",children:t("vm.isolation.max")}),e.jsx("div",{className:"text-[12px] text-ink-secondary",children:t("vm.isolation.maxDetail")})]}),e.jsx(pe,{size:"sm","aria-label":t("vm.isolation.maxAria"),value:n?.max_instances??2,disabled:!n||p,onChange:M=>{Hs(n?.mode??"shared",Number(M.target.value))},children:[1,2,3,4,5,6,7,8].map(M=>e.jsx("option",{value:M,children:M},M))})]}),e.jsx(ym,{minutes:n?Math.round(n.idle_timeout_ms/6e4):fm,disabled:!n||p,onSave:Nr}),p&&e.jsxs("div",{className:"mt-2 flex items-center gap-1.5 text-[12px] text-ink-secondary",children:[e.jsx(V,{size:12,className:"animate-spin"})," ",t("vm.saving")]})]}),e.jsx(Y,{title:t("vm.setup.title"),subtitle:t("vm.setup.subtitle"),children:e.jsxs("div",{className:"flex flex-col gap-4",children:[e.jsxs(pt,{n:1,title:t("vm.setup.step1"),done:!!n?.runtime,children:[e.jsx("div",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("vm.setup.step1Detail")}),Ie?.install?e.jsx(et,{command:Ie.install}):e.jsx("a",{href:"https://podman.io/docs/installation",target:"_blank",rel:"noreferrer",className:"text-[13px] text-accent hover:underline",children:t("vm.setup.podmanGuide")})]}),e.jsx(pt,{n:2,title:n?.runtime&&!n.daemonUp?t("vm.setup.step2Open",{runtime:n.runtime}):t("vm.setup.step2"),done:!!n?.daemonUp,children:n?.runtime?Ie?.runtimeStart?e.jsx(et,{command:Ie.runtimeStart}):e.jsx("div",{className:"text-[13px] text-ink-secondary",children:t("vm.setup.step2Detail")}):null}),e.jsxs(pt,{n:3,title:t("vm.setup.step3"),done:!!n?.image,children:[n?.daemonUp&&e.jsx($e,{action:"pull",pending:c,onClick:()=>{De("pull")},children:t("vm.setup.prepare")}),Ie?.pull&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer",children:t("vm.setup.showPull")}),e.jsx("div",{className:"mt-2",children:e.jsx(et,{command:Ie.pull})})]})]}),e.jsxs(pt,{n:4,title:ke?t("vm.setup.step4PerBot"):Vs?t("vm.setup.step4Recreate"):t("vm.setup.step4"),done:!ke&&ct,children:[ke?e.jsx("div",{className:"text-[13px] leading-relaxed text-ink-secondary",children:Lt?t("vm.setup.applePort"):t("vm.setup.perBotHint")}):Vs?e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex gap-2 text-[13px] text-warning",children:[e.jsx(Te,{size:15,className:"mt-0.5 shrink-0"}),e.jsx("span",{children:n?.problem})]}),n?.image?e.jsxs($e,{action:"recreate",pending:c,onClick:()=>{De("recreate")},danger:!0,children:[e.jsx(El,{size:13})," ",t("vm.setup.recreate")]}):e.jsx("div",{className:"text-[13px] text-ink-secondary",children:t("vm.setup.prepareFirst")})]}):n?.container==="stopped"?e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t(n.stop_reason==="idle"?"vm.stopped.idle":"vm.stopped.detail")}),e.jsx($e,{action:"start",pending:c,onClick:()=>{De("start")},children:t("vm.setup.start")})]}):n?.container==="running"?e.jsxs("div",{className:"flex items-center gap-2 text-[13px] text-ink-secondary",children:[e.jsx(V,{size:13,className:"animate-spin"})," ",t("vm.setup.waiting")]}):n?.image?e.jsxs(e.Fragment,{children:[e.jsx($e,{action:"run",pending:c,onClick:()=>{De("run")},children:t("vm.setup.start")}),e.jsx("p",{className:"text-[13px] leading-relaxed text-ink-secondary",children:t("vm.setup.idleHint")})]}):null,Ie?.run&&e.jsxs("details",{className:"text-[12px] text-ink-secondary",children:[e.jsx("summary",{className:"cursor-pointer",children:t("vm.setup.showCommand")}),e.jsx("div",{className:"mt-2",children:e.jsx(et,{command:Ie.run})})]})]})]})}),ke&&e.jsx(hm,{instances:b,maxInstances:f||n?.max_instances||2,loading:E,deletingBotId:v,error:w,unavailableReason:j,onRefresh:()=>F(M=>M+1),onDelete:M=>{wr(M)}}),qs&&e.jsx(Y,{children:e.jsxs("div",{className:"flex gap-2 text-[13px] text-ink-secondary",children:[e.jsx(Te,{size:15,className:"mt-0.5 shrink-0 text-warning"}),e.jsx("span",{children:t("vm.inspectFailed")})]})}),e.jsxs(Y,{title:t("vm.safety.title"),subtitle:ke?t("vm.safety.perBot",{path:n?.workspace_guest_path??"/home/cua/workspace"}):t("vm.safety.shared",{path:n?.workspace_guest_path??"/home/cua/workspace"}),children:[Gs&&e.jsxs("div",{className:"flex flex-wrap gap-2",children:[n?.container==="running"&&e.jsxs($e,{action:"stop",pending:c,onClick:()=>{De("stop")},children:[e.jsx(Al,{size:12})," ",t("vm.safety.stop")]}),e.jsxs($e,{action:"remove",pending:c,onClick:()=>{De("remove")},danger:!0,children:[e.jsx(we,{size:12})," ",ke?t("vm.safety.deleteLegacy"):t("vm.safety.deleteVm")]})]}),e.jsxs("div",{className:"mt-3 break-all text-[11px] text-ink-secondary",children:[t("vm.safety.workspace",{path:n?.workspace_path??t("vm.safety.notCreated"),driver:n?.driver_version??"0.37.0",image:n?.image_ref??t("vm.safety.notPrepared")}),n?.base_image_ref?e.jsxs(e.Fragment,{children:[" · ",t("vm.safety.baseImage",{image:n.base_image_ref})]}):null]})]})]})]})}function Ti(s){return t("pairing.worksOnceUntil",{time:Er(s)})}function us(s,n=Date.now()){const a=Math.max(0,Math.floor((n-s)/6e4));return a<1?t("remote.serverPairing.justNow"):a<60?t("remote.serverPairing.minutesAgo",{minutes:a}):a<1440?t("remote.serverPairing.hoursAgo",{hours:Math.round(a/60)}):t("remote.serverPairing.daysAgo",{days:Math.round(a/1440)})}const vm="/api/team/phone-pairing",Bn="/api/team/phones",jm=4e3;function km(s){return`${s.label} · ${s.email}`}function Nm({team:s,blocked:n}){const[a,i]=l.useState(null),[r,c]=l.useState(null),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(null),[g,h]=l.useState(()=>Date.now()),b=N=>x(t("remote.serverPairing.error",{error:N instanceof Error?N.message:String(N)}));async function y(){try{const N=await U(Bn);c(Array.isArray(N?.phones)?N.phones:[]),d(typeof N?.current=="string"?N.current:null)}catch(N){b(N)}}l.useEffect(()=>{y()},[]);const f=a?a.expiresAt<=g:!1;l.useEffect(()=>{if(!a)return;const N=setInterval(()=>h(Date.now()),15e3);return()=>clearInterval(N)},[a]),l.useEffect(()=>{if(!a||f)return;const N=setInterval(()=>{y()},jm);return()=>clearInterval(N)},[a,f]);async function k(){m(!0),x(null);try{i(await U(vm,{method:"POST",body:"{}"})),h(Date.now())}catch(N){b(N)}finally{m(!1)}}async function E(N){x(null);try{await U(`${Bn}/${encodeURIComponent(N)}`,{method:"DELETE"})}catch(w){b(w)}await y()}return e.jsxs(Y,{title:t("teamPhone.title"),subtitle:t("teamPhone.subtitle",{team:s}),children:[e.jsx("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:e.jsx("button",{type:"button","data-phone-pairing-action":!0,onClick:()=>{k()},disabled:u||!!n,title:n??void 0,className:"ui-button ui-button-primary",children:u?t("remote.serverPairing.creating"):t("remote.serverPairing.create")})}),n?e.jsx("p",{role:"status","data-team-phone-blocked":!0,className:"mt-3 text-[13px] text-ink-secondary",children:n}):null,a?e.jsx("div",{"data-team-phone-code":!0,className:"mt-4 rounded-lg border border-hairline/40 bg-inset p-4",children:f?e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("remote.serverPairing.expired")}):e.jsxs("div",{className:"flex flex-wrap items-start gap-5",children:[a.url?e.jsx("div",{className:"rounded-md bg-white p-2",children:e.jsx(La,{value:a.url,size:160,level:"M",bgColor:"#ffffff",fgColor:"#111111"})}):null,e.jsxs("div",{className:"min-w-[200px] flex-1",children:[e.jsx("div",{className:"font-mono text-[18px] tracking-[0.14em] text-ink",children:a.code}),e.jsx("div",{className:"mt-1 text-[13px] text-ink-secondary",children:Ti(a.expiresAt)}),a.url?null:e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:a.hint??t("remote.serverPairing.noLink")})]})]})}):null,e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:t("teamPhone.stays",{team:s})}),r?e.jsxs("div",{"data-team-phones":!0,children:[e.jsx("div",{className:"mt-5 text-[13px] font-medium text-ink",children:t("remote.serverPairing.devices")}),r.length===0?e.jsx("p",{className:"mt-1 text-[13px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):e.jsx("ul",{className:"mt-1 divide-y divide-hairline/40",children:r.map(N=>e.jsxs("li",{"data-team-phone":N.id,className:"flex flex-wrap items-center justify-between gap-2 py-2 text-[13px]",children:[e.jsxs("span",{className:"text-ink",children:[km(N),e.jsxs("span",{className:"text-ink-secondary",children:[" · ",t("remote.serverPairing.seen",{when:us(N.lastSeenAt,g)}),N.id===o?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),N.id===o?null:e.jsx("button",{type:"button","data-team-phone-remove":!0,onClick:()=>{E(N.id)},className:"ui-button",children:t("teamPhone.remove")})]},N.id))})]}):null,p?e.jsx("p",{className:"mt-3 text-[13px] text-danger",children:p}):null]})}function wm({saved:s,onSaved:n,className:a}){const[i,r]=l.useState(s),[c,o]=l.useState(!1),[d,u]=l.useState(null);l.useEffect(()=>r(s),[s]);async function m(){const p=i.trim();if(!(c||p===s)){o(!0),u(null);try{const x=await U("/api/config",{method:"PATCH",body:JSON.stringify({computerName:p})});n(x.computerName??p)}catch(x){u(t("remote.computerName.error",{error:x instanceof Error?x.message:String(x)}))}finally{o(!1)}}}return e.jsxs("div",{"data-computer-name":!0,className:z("flex flex-col gap-1",a),children:[e.jsx("label",{htmlFor:"computer-name",className:"text-[13px] font-medium text-ink",children:t("remote.computerName.title")}),e.jsx("input",{id:"computer-name",value:i,disabled:c,placeholder:t("remote.computerName.placeholder"),"aria-describedby":"computer-name-help",onChange:p=>r(p.target.value),onBlur:()=>{m()},onKeyDown:p=>{p.key==="Enter"&&p.currentTarget.blur()},className:"w-full max-w-xs rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none"}),e.jsx("p",{id:"computer-name-help",className:"text-[12px] leading-4 text-ink-secondary",children:t("remote.computerName.help")}),d?e.jsx("p",{role:"alert",className:"text-[12px] leading-4 text-danger",children:d}):null]})}function st(s){return td(s)}function Sm(s){return s?.kind==="session"&&!s.scopes.includes("admin")?"chat-only":null}function Cm(s,n){return n?s.filter(a=>a.scopes.includes("admin")):s}const Em="ui-button ui-button-primary",Ln="ui-button";function Am({initialSession:s=null,initialPairingCodes:n=!0,cloudHome:a=!1,focusRequest:i=0,team:r,teamPhoneBlocked:c=null,simple:o=!1,reveal:d=!0}){const[u,m]=l.useState(s),[p,x]=l.useState(n),[g,h]=l.useState(null),[b,y]=l.useState("admin"),[f,k]=l.useState(null),[E,N]=l.useState([]),[w,I]=l.useState(null),[j,O]=l.useState(!1),[v,A]=l.useState("idle"),[P,F]=l.useState(null),[se,ne]=l.useState(()=>Date.now()),X=l.useRef(null),S=l.useRef(0);async function q(){try{const D=await U("/api/auth/sessions");N(Array.isArray(D?.sessions)?D.sessions:[]),I(typeof D?.current=="string"?D.current:null)}catch(D){F(t("remote.serverPairing.error",{error:D instanceof Error?D.message:String(D)}))}}if(l.useEffect(()=>{ei().then(D=>{m(D),st(D)&&q(),(D.kind==="loopback"||D.kind==="session")&&U("/api/config").then(Z=>{x(ti(Z).pairingCodes),st(D)&&h(typeof Z?.computerName=="string"?Z.computerName:"")}).catch(()=>{})})},[]),l.useEffect(()=>{i?S.current!==i&&ed(X.current)&&(S.current=i):S.current=0},[i,u]),l.useEffect(()=>{if(!f)return;const D=setInterval(()=>ne(Date.now()),15e3);return()=>clearInterval(D)},[f]),r&&u?.kind==="session"&&u.team)return e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsx(Nm,{team:r,blocked:c})});if(!st(u))return Sm(u)!=="chat-only"?null:e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsx(Y,{title:t("remote.serverPairing.title"),subtitle:t(p?"remote.serverPairing.subtitle":"remote.serverPairing.portalSubtitle"),children:e.jsx("p",{"data-server-pairing-chat-only":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t(p?"remote.serverPairing.chatOnly":"remote.serverPairing.portalChatOnly")})})});const ee=f?f.expiresAt<=se:!1,T=Cm(E,a);async function B(){O(!0),F(null),A("idle");try{const D=await U("/api/auth/pairing",{method:"POST",body:JSON.stringify({scopes:b==="admin"||a?["admin","client"]:["client"]})});k(D),ne(Date.now())}catch(D){F(t("remote.serverPairing.error",{error:D instanceof Error?D.message:String(D)}))}finally{O(!1)}}async function R(D){F(null);try{await U(`/api/auth/sessions/${encodeURIComponent(D)}`,{method:"DELETE"}),await q()}catch(Z){F(t("remote.serverPairing.error",{error:Z instanceof Error?Z.message:String(Z)}))}}async function $(){if(!f?.url)return;const D=await Oc(f.url);D!=="empty"&&A(D)}const te=p&&f?e.jsx("div",{className:"mt-4 rounded-lg border border-hairline/40 bg-inset p-4",children:ee?e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("remote.serverPairing.expired")}):e.jsxs("div",{className:"flex flex-wrap items-start gap-5",children:[f.url?e.jsx("div",{className:"rounded-md bg-white p-2",children:e.jsx(La,{value:f.url,size:160,level:"M",bgColor:"#ffffff",fgColor:"#111111"})}):null,e.jsxs("div",{className:"min-w-[200px] flex-1",children:[e.jsx("div",{className:"font-mono text-[18px] tracking-[0.14em] text-ink",children:f.code}),e.jsx("div",{className:"mt-1 text-[13px] text-ink-secondary",children:Ti(f.expiresAt)}),f.url?e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-2",children:[e.jsx("code",{className:"break-all text-[12px] text-ink-secondary",children:f.url}),e.jsx("button",{type:"button",onClick:()=>{$()},className:Ln,children:t(v==="copied"?"remote.serverPairing.copied":v==="failed"?"common.copyFailed":"remote.serverPairing.copyLink")})]}):e.jsx("p",{className:"mt-3 text-[13px] text-ink-secondary",children:f.hint??t("remote.serverPairing.noLink")})]})]})}):null,le=D=>p&&!a&&g!==null?e.jsx(wm,{saved:g,onSaved:h,className:D}):null,ie=D=>t(D.scopes.includes("admin")?"remote.serverPairing.scope.admin":"remote.serverPairing.scope.client");return o?e.jsxs("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"flex scroll-mt-4 flex-col gap-1.5 focus:outline-none",children:[e.jsxs("div",{"data-settings-rows":"",className:z(Oa,"flex flex-col"),children:[le("px-4 py-2.5"),e.jsx(de,{title:t("settings.simple.computer.pair"),subtitle:p?a?t("remote.serverPairing.cloudPersonal"):void 0:t("remote.serverPairing.portal"),children:p?e.jsxs("div",{className:"flex items-center gap-2",children:[a?null:e.jsxs(pe,{variant:"ghost",value:b,"aria-label":t("remote.serverPairing.title"),onChange:D=>y(D.target.value==="client"?"client":"admin"),children:[e.jsx("option",{value:"admin",children:t("remote.serverPairing.scope.admin")}),e.jsx("option",{value:"client",children:t("remote.serverPairing.scope.client")})]}),e.jsx("button",{type:"button","data-phone-pairing-action":d?"":void 0,onClick:()=>{B()},disabled:j,className:"ui-button",children:j?t("remote.serverPairing.creating"):t("settings.simple.computer.createCode")})]}):null}),te?e.jsx("div",{className:"px-4 pb-2.5 [&>div]:mt-0",children:te}):null,T.length===0?e.jsx("p",{className:"px-4 py-2.5 text-[13px] leading-[18px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):T.map(D=>e.jsxs("div",{className:"flex min-h-11 flex-wrap items-center gap-x-5 gap-y-2 px-4 py-2.5",children:[e.jsxs("span",{className:"min-w-[min(100%,15rem)] flex-1 text-[14px] leading-5 text-ink",children:[D.label,e.jsxs("span",{className:"text-ink-secondary",children:[" · ",ie(D)," · ",t("remote.serverPairing.seen",{when:us(D.lastSeenAt,se)}),D.id===w?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),D.id===w?null:e.jsx("button",{type:"button",onClick:()=>{R(D.id)},className:"ui-button ml-auto shrink-0",children:t("remote.serverPairing.signOut")})]},D.id))]}),P?e.jsx("p",{className:"pl-4 text-[12px] leading-4 text-danger",children:P}):null]}):e.jsx("div",{ref:X,tabIndex:-1,"data-phone-pairing":"server",className:"scroll-mt-4 rounded-xl focus:outline-none",children:e.jsxs(Y,{title:t("remote.serverPairing.title"),subtitle:t(p?"remote.serverPairing.subtitle":"remote.serverPairing.portalSubtitle"),children:[p&&a?e.jsx("p",{"data-server-pairing-personal":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t("remote.serverPairing.cloudPersonal")}):null,le("mt-3"),p?e.jsxs("div",{className:"mt-3 flex flex-wrap items-center gap-3",children:[a?null:e.jsxs(e.Fragment,{children:[e.jsxs("label",{className:"flex items-center gap-1.5 text-[13px] text-ink",children:[e.jsx("input",{type:"radio",name:"server-pairing-scope",checked:b==="admin",onChange:()=>y("admin")}),t("remote.serverPairing.scope.admin")]}),e.jsxs("label",{className:"flex items-center gap-1.5 text-[13px] text-ink",children:[e.jsx("input",{type:"radio",name:"server-pairing-scope",checked:b==="client",onChange:()=>y("client")}),t("remote.serverPairing.scope.client")]})]}),e.jsx("button",{type:"button","data-phone-pairing-action":d?"":void 0,onClick:()=>{B()},disabled:j,className:Em,children:j?t("remote.serverPairing.creating"):t("remote.serverPairing.create")})]}):e.jsx("p",{"data-server-pairing-portal":!0,className:"mt-3 text-[13px] text-ink-secondary",children:t("remote.serverPairing.portal")}),te,e.jsx("div",{className:"mt-5 text-[13px] font-medium text-ink",children:t(p?"remote.serverPairing.devices":"remote.serverPairing.portalDevices")}),T.length===0?e.jsx("p",{className:"mt-1 text-[13px] text-ink-secondary",children:t("remote.serverPairing.noDevices")}):e.jsx("ul",{className:"mt-1 divide-y divide-hairline/40",children:T.map(D=>e.jsxs("li",{className:"flex flex-wrap items-center justify-between gap-2 py-2 text-[13px]",children:[e.jsxs("span",{className:"text-ink",children:[D.label,D.email?e.jsxs("span",{className:"text-ink-secondary",children:[" · ",D.email]}):null,e.jsxs("span",{className:"text-ink-secondary",children:[" · ",D.scopes.includes("admin")?t("remote.serverPairing.scope.admin"):t("remote.serverPairing.scope.client")," · ",t("remote.serverPairing.seen",{when:us(D.lastSeenAt,se)}),D.id===w?` · ${t("remote.serverPairing.thisBrowser")}`:""]})]}),D.id===w?null:e.jsx("button",{type:"button",onClick:()=>{R(D.id)},className:Ln,children:t("remote.serverPairing.signOut")})]},D.id))}),P?e.jsx("p",{className:"mt-3 text-[13px] text-danger",children:P}):null]})})}function Im({profileEmail:s="",focusRequest:n=0,simple:a=!1}){return e.jsx(Il,{})}function Pm(s){const n=s.trim().toLowerCase();return!n||/\s/.test(n)?null:n.startsWith("@")?/^@[^@\s]+\.[^@\s]+$/.test(n)?n:null:/^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(n)?n:null}function On(s,n,a){const i=s.admins.filter(c=>c!==n),r=s.members.filter(c=>c!==n);return a==="admin"?{admins:[...i,n],members:r}:{admins:i,members:[...r,n]}}function Rm(s,n){return{admins:s.admins.filter(a=>a!==n),members:s.members.filter(a=>a!==n)}}function zn(s,n){const a=s.replace(/\/+$/,"");return n.startsWith("@")?`${a}/pair`:`${a}/pair?email=${encodeURIComponent(n)}`}function Tm(s,n,a){const i=[],r=new Set,c=(o,d)=>{const u=o.trim().toLowerCase();if(!u||r.has(u))return;r.add(u);const m=n.filter(x=>x.email?.toLowerCase()===u),p=a.find(x=>x.key===`user:${u}`);i.push({entry:u,role:d,isDomain:u.startsWith("@"),lastSeenAt:m.length?Math.max(...m.map(x=>x.lastSeenAt)):null,devices:m.length,turns:p?.turns??0,costUsd:p?.costUsd??null,...nt(p?.estimatedUsd)&&p.estimatedUsd>0?{estimated:!0}:{}})};for(const o of s.admins)c(o,"admin");for(const o of s.members)c(o,"member");return i}function Bm(s,n){const a=new Map;for(const i of s){const r=i.email?.trim().toLowerCase();r&&a.set(r,[...a.get(r)??[],i])}return[...a.entries()].map(([i,r])=>{const c=n.find(o=>o.key===`user:${i}`);return{entry:i,role:r.some(o=>o.scopes?.includes("admin"))?"admin":"member",isDomain:!1,lastSeenAt:Math.max(...r.map(o=>o.lastSeenAt)),devices:r.length,turns:c?.turns??0,costUsd:c?.costUsd??null}}).sort((i,r)=>i.role===r.role?i.entry.localeCompare(r.entry):i.role==="admin"?-1:1)}function Lm(s,n=Date.now()){return s===null?t("people.never"):n-s<1440*6e4?t("people.today"):new Date(s).toISOString().slice(0,10)}function Bi({people:s,busy:n,onRole:a,onRemove:i,onLink:r,readOnly:c=!1}){if(s.length===0)return e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t(c?"people.portal.empty":"people.empty")});const o="grid grid-cols-[1fr_auto_auto_auto_auto] items-center gap-x-4";return e.jsxs("div",{className:"flex flex-col",children:[e.jsxs("div",{className:z(o,"border-b border-hairline/40 pb-2 text-[12px] font-medium uppercase tracking-wide text-ink-secondary"),children:[e.jsx("span",{children:t("people.colPerson")}),e.jsx("span",{children:t("people.colRole")}),e.jsx("span",{className:"text-right",children:t("people.colLastSeen")}),e.jsx("span",{className:"text-right",children:t("people.colMonth")}),e.jsx("span",{})]}),s.map(d=>e.jsxs("div",{className:z(o,"border-b border-hairline/20 py-2 text-[13px]"),children:[e.jsxs("span",{className:"min-w-0",children:[e.jsx("span",{className:"block truncate text-ink",children:d.isDomain?t("people.everyoneAt",{domain:d.entry.slice(1)}):d.entry}),d.devices>0&&e.jsx("span",{className:"block text-[12px] text-ink-secondary",children:t("people.devices",{count:String(d.devices)})})]}),e.jsx("span",{className:z("rounded-full px-2 py-0.5 text-[11px] font-medium",d.role==="admin"?"bg-accent/15 text-accent":"bg-control text-ink-secondary"),children:d.role==="admin"?t("people.roleAdmin"):t("people.roleMember")}),e.jsx("span",{className:"text-right tabular-nums text-ink-secondary",children:d.isDomain?"—":Lm(d.lastSeenAt)}),e.jsx("span",{className:"text-right tabular-nums text-ink",title:t("people.turns",{turns:String(d.turns)}),children:nt(d.costUsd)?`${d.estimated?"~":""}${at(d.costUsd)}`:"—"}),c?e.jsx("span",{}):e.jsxs("span",{className:"flex items-center justify-end gap-2 text-[12px]",children:[e.jsx("button",{type:"button",disabled:n,onClick:()=>r(d),"aria-label":t("people.link"),title:t("people.link"),className:"rounded-md p-1 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:e.jsx(Pl,{size:13})}),e.jsx("button",{type:"button",disabled:n,onClick:()=>a(d,d.role==="admin"?"member":"admin"),className:"text-ink-secondary hover:text-ink disabled:opacity-50",children:d.role==="admin"?t("people.makeMember"):t("people.makeAdmin")}),e.jsx("button",{type:"button",disabled:n,onClick:()=>i(d),className:"text-danger hover:underline disabled:opacity-50",children:t("people.remove")})]})]},d.entry))]})}function Li({link:s}){const{state:n,copy:a}=As(s);return e.jsxs("div",{className:"mt-3 rounded-lg border border-hairline/40 bg-inset p-3 text-[13px]",children:[e.jsx("div",{className:"mb-1 text-ink-secondary",children:t("people.link")}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("code",{className:"min-w-0 flex-1 select-all break-all text-ink",children:s}),e.jsxs("button",{type:"button",onClick:a,className:"flex shrink-0 items-center gap-1 rounded-md px-2 py-1 text-[12px] text-ink-secondary hover:bg-control hover:text-ink",children:[n==="copied"?e.jsx(he,{size:13,className:"text-success"}):n==="failed"?e.jsx(Le,{size:13,className:"text-danger"}):e.jsx(Ya,{size:13}),t(n==="copied"?"people.copied":n==="failed"?"common.copyFailed":"people.copy")]})]}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("people.linkHint")})]})}function Om({peopleUrl:s,people:n}){const a=()=>{};return e.jsxs(Y,{title:t("people.title"),subtitle:t("people.portal.subtitle"),children:[e.jsxs("div",{"data-people-portal":!0,className:"flex flex-col gap-3 text-[13px] leading-relaxed text-ink-secondary",children:[e.jsx("p",{children:t("people.portal.managed")}),s&&e.jsxs("a",{href:s,target:"_blank",rel:"noopener noreferrer",className:"flex w-fit items-center gap-2 rounded-lg bg-control px-3 py-2 font-medium text-ink hover:bg-control/70",children:[t("people.portal.open")," ",e.jsx(ot,{size:14,"aria-hidden":"true"})]})]}),e.jsx("div",{className:"mt-4",children:e.jsx(Bi,{people:n,busy:!1,readOnly:!0,onRole:a,onRemove:a,onLink:a})}),e.jsx("p",{className:"mt-3 text-[12px] leading-relaxed text-ink-secondary",children:t("people.portal.note")})]})}function Oi({simple:s=!1,startOpen:n=!1}){const[a,i]=l.useState(n),[r,c]=l.useState(!1),[o,d]=l.useState(null),[u,m]=l.useState(null),[p,x]=l.useState(null),[g,h]=l.useState([]),[b,y]=l.useState(typeof window<"u"?window.location.origin:""),[f,k]=l.useState(null),[E,N]=l.useState(""),[w,I]=l.useState("member"),[j,O]=l.useState(null),[v,A]=l.useState(!1),[P,F]=l.useState(!1),[se,ne]=l.useState(null),X=l.useCallback(async()=>{F(!0),ne(null);try{const[B,R,$,te,le]=await Promise.all([U("/api/config"),U("/api/auth/sessions").catch(()=>({sessions:[]})),U("/api/usage?groupBy=user").catch(()=>({groups:[]})),U("/api/settings/custom-domain").catch(()=>null),fetch("/.well-known/openmausbot/environment").then(xe=>xe.ok?xe.json():null).catch(()=>null)]),ie={admins:Array.isArray(B?.signIn?.admins)?B.signIn.admins:[],members:Array.isArray(B?.signIn?.members)?B.signIn.members:[]},D=ti(B);m(D),x(ie);const Z=Array.isArray(R?.sessions)?R.sessions:[],oe=Array.isArray($?.groups)?$.groups:[];h(D.authority==="portal"?Bm(Z,oe):Tm(ie,Z,oe)),typeof te?.publicUrl=="string"&&te.publicUrl&&y(te.publicUrl),k(le?.capabilities?.emailSignIn===!0?!0:le?!1:null)}catch(B){ne(B instanceof Error?B.message:String(B))}finally{F(!1)}},[]);l.useEffect(()=>{ei().then(B=>{d(B),st(B)&&X()})},[X]);const S=async B=>{A(!0),ne(null);try{await U("/api/config",{method:"PUT",body:JSON.stringify({signIn:B})}),await X()}catch(R){ne(R instanceof Error?R.message:String(R))}finally{A(!1)}},q=async()=>{if(c(!0),!p||v)return;const B=Pm(E);if(!B){ne(t("remote.signInAccess.invalid"));return}await S(On(p,B,w)),N(""),O(zn(b,B))};if(!st(o))return null;const ee=u?.authority==="portal"?e.jsx(Om,{peopleUrl:u.peopleUrl,people:g}):null,T=e.jsxs(e.Fragment,{children:[f===!1&&(!s||r)&&e.jsx("p",{className:"mb-3 rounded-lg border border-warning/25 bg-warning/5 px-3 py-2 text-[13px] text-ink-secondary",children:t(u?.pairingCodes===!1?"people.portalSignIn":"people.notHosted")}),e.jsxs("form",{className:"flex flex-wrap items-center gap-2",onSubmit:B=>{B.preventDefault(),q()},children:[e.jsx("input",{value:E,onChange:B=>N(B.target.value),placeholder:t("remote.signInAccess.placeholder"),"aria-label":t("people.inviteEmail"),disabled:v,className:"min-w-[16rem] flex-1 rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none disabled:opacity-50"}),e.jsxs(pe,{value:w,onChange:B=>I(B.target.value),"aria-label":t("people.colRole"),disabled:v,children:[e.jsx("option",{value:"member",children:t("people.roleMember")}),e.jsx("option",{value:"admin",children:t("people.roleAdmin")})]}),e.jsxs("button",{type:"submit",disabled:v||!E.trim(),className:"ui-button ui-button-primary",children:[v?e.jsx(V,{size:13,className:"animate-spin"}):e.jsx(Se,{size:13}),t("people.invite")]}),e.jsx("button",{type:"button",onClick:()=>{X()},disabled:P||v,"aria-label":t("people.refresh"),title:t("people.refresh"),className:"rounded-md p-1.5 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:e.jsx(Ne,{size:13,className:z(P&&"animate-spin")})})]}),e.jsx("p",{className:"mt-2 text-[12px] leading-relaxed text-ink-secondary",children:t("people.inviteHint")}),j&&e.jsx(Li,{link:j}),se&&e.jsx("p",{role:"alert",className:"mt-2 text-[12px] text-danger",children:se}),e.jsx("div",{className:"mt-4",children:e.jsx(Bi,{people:g,busy:v,onRole:(B,R)=>{p&&S(On(p,B.entry,R))},onRemove:B=>{p&&S(Rm(p,B.entry))},onLink:B=>O(zn(b,B.entry))})}),!s&&e.jsx("p",{className:"mt-3 text-[12px] leading-relaxed text-ink-secondary",children:t("people.note")})]});return s?e.jsxs("div",{"data-people-summary":"",children:[e.jsxs("div",{role:"group","aria-label":t("people.title"),className:"flex min-w-0 items-center gap-3 px-4 py-[13px]",children:[e.jsx("span",{"aria-hidden":"true",className:"flex size-11 shrink-0 items-center justify-center rounded-full bg-ink/[0.06] text-ink-secondary",children:e.jsx(vt,{size:20})}),e.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsx("div",{className:"truncate text-[14px] leading-5 text-ink",children:t("people.title")}),e.jsx("div",{className:"text-[13px] leading-[18px] text-ink-secondary",children:t("settings.simple.people")})]}),e.jsx("button",{type:"button","aria-expanded":a,className:"ui-button shrink-0",onClick:()=>i(!a),children:a?t("common.done"):t("settings.simple.people.invite")})]}),a&&e.jsx("div",{className:"px-3.5 pb-3.5 pt-1",children:ee??T})]}):ee??e.jsx(Y,{title:t("people.title"),subtitle:t("people.subtitle"),children:T})}const Zt="rounded-lg border border-hairline/40 bg-inset px-3 py-2 text-[13px] text-ink placeholder:text-ink-secondary focus:outline-none [color-scheme:dark]";function zm({entry:s}){const[n,a]=l.useState(!1),i=s.type==="admin"&&(s.changed?.length||s.before||s.after);return e.jsx("li",{className:"border-b border-hairline/20 py-2 text-[13px]","data-activity-entry":s.type,children:e.jsxs("div",{className:"grid grid-cols-[auto_1fr] items-start gap-x-3",children:[e.jsx("time",{className:"whitespace-nowrap tabular-nums text-ink-secondary",dateTime:s.at,children:new Date(s.at).toLocaleString(js())}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-baseline gap-x-2",children:[e.jsx("span",{className:"font-medium text-ink",children:ld(s.who)}),e.jsx("span",{className:"min-w-0 break-words text-ink",children:od(s)})]}),s.type==="approval"&&s.summary&&e.jsx("div",{className:"mt-0.5 truncate text-[12px] text-ink-secondary",children:Rl(s.summaryCode,s.summary,s.summaryParams)}),i&&e.jsxs("button",{type:"button",onClick:()=>a(!n),"aria-expanded":n,className:"cursor-pointer mt-0.5 flex items-center gap-1 text-[12px] text-ink-secondary hover:text-ink",children:[e.jsx(Is,{size:12,className:z("transition-transform",n&&"rotate-90")}),t("activity.changed",{paths:(s.changed??[]).join(", ")||"—"})]}),i&&n&&s.type==="admin"&&e.jsxs("dl",{className:"mt-1 grid grid-cols-[auto_1fr_1fr] gap-x-3 gap-y-0.5 rounded-lg bg-inset p-2 text-[12px]",children:[e.jsx("dt",{}),e.jsx("dd",{className:"text-ink-secondary",children:t("activity.before")}),e.jsx("dd",{className:"text-ink-secondary",children:t("activity.after")}),(s.changed??Object.keys({...s.before,...s.after})).map(r=>e.jsxs("div",{className:"contents",children:[e.jsx("dt",{className:"font-mono text-ink-secondary",children:r}),e.jsx("dd",{className:"min-w-0 break-all font-mono text-ink",children:vn(s.before?.[r])}),e.jsx("dd",{className:"min-w-0 break-all font-mono text-ink",children:vn(s.after?.[r])})]},r))]})]})]})})}function zi(){const[s,n]=l.useState({who:"",what:"all",from:"",to:""}),[a,i]=l.useState([]),[r,c]=l.useState(0),[o,d]=l.useState(null),[u,m]=l.useState(!1),[p,x]=l.useState(null),g=id(s),h=l.useCallback(async()=>{m(!0),x(null);try{const y=await U(`/api/admin-activity${g}`);i(y.entries),c(y.total),d(y.retentionDays)}catch(y){x(y instanceof Error?y.message:String(y))}finally{m(!1)}},[g]);l.useEffect(()=>{const y=window.setTimeout(()=>{h()},250);return()=>window.clearTimeout(y)},[h]);const b=y=>n(f=>({...f,...y}));return e.jsxs(Y,{title:t("activity.title"),subtitle:t("activity.subtitle",{days:String(o??180)}),children:[e.jsxs("div",{className:"flex flex-wrap items-end gap-2",children:[e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.who"),e.jsx("input",{value:s.who,onChange:y=>b({who:y.target.value}),placeholder:t("activity.whoPlaceholder"),className:z(Zt,"w-44")})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.what"),e.jsx(pe,{value:s.what,onChange:y=>b({what:y.target.value}),children:rd.map(y=>e.jsx("option",{value:y,children:t(`activity.what.${y}`)},y))})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.from"),e.jsx("input",{type:"date",value:s.from,max:s.to||void 0,onChange:y=>b({from:y.target.value}),className:Zt})]}),e.jsxs("label",{className:"flex flex-col gap-1 text-[12px] text-ink-secondary",children:[t("activity.to"),e.jsx("input",{type:"date",value:s.to,min:s.from||void 0,onChange:y=>b({to:y.target.value}),className:Zt})]}),e.jsx("button",{type:"button",onClick:()=>{h()},disabled:u,"aria-label":t("activity.refresh"),title:t("activity.refresh"),className:"cursor-pointer rounded-md p-2 text-ink-secondary hover:bg-control hover:text-ink disabled:opacity-50",children:u?e.jsx(V,{size:14,className:"animate-spin"}):e.jsx(Ne,{size:14})}),e.jsxs("a",{href:`/api/admin-activity.csv${g}`,download:!0,className:"ui-button hover:bg-raised-hover",children:[e.jsx(We,{size:13,"aria-hidden":"true"}),t("activity.export")]})]}),p&&e.jsx("p",{role:"alert",className:"mt-3 text-[13px] text-danger",children:t("activity.error",{message:p})}),!p&&a.length===0&&!u&&e.jsx("p",{className:"mt-4 text-[13px] text-ink-secondary",children:t("activity.empty")}),a.length>0&&e.jsx("ul",{className:"mt-3 flex flex-col",children:a.map((y,f)=>e.jsx(zm,{entry:y},`${y.at}-${f}`))}),r>a.length&&e.jsx("p",{className:"mt-3 text-[12px] text-ink-secondary",children:t("activity.more",{shown:String(a.length),total:String(r)})})]})}const Mn=4,Us="flex w-full min-w-0 items-center gap-3 px-3 py-2 text-start",Fs="flex flex-col divide-y divide-hairline/30 overflow-hidden rounded-xl border border-hairline/40 bg-card",Mm=s=>s.filter(n=>!n.hidden&&!n.defaultBot?.person).sort((n,a)=>n.name.localeCompare(a.name)),Mi=(s,n)=>Et(s)===n||Ua(At(s),n)!=="none",Ui=(s,n)=>{const a=za(s,n);return a?t("lookedAfter.line",{name:a.name}):t("lookedAfter.nobody")},Un=(s,...n)=>n.some(a=>a?.toLowerCase().includes(s));function Um(){const{state:s}=W(),n=Tl(),a=Bl(),i=l.useRef(null),[r,c]=l.useState("bot"),[o,d]=l.useState(""),[u,m]=l.useState(null),[p,x]=l.useState(null),g=l.useRef(null),[h,b]=l.useState(null),[y,f]=l.useState(""),k=l.useCallback(()=>b(null),[]);if(l.useEffect(()=>{p||!g.current||([...i.current?.querySelectorAll("[data-access-person]")??[]].find(v=>v.dataset.accessPerson===g.current)?.focus(),g.current=null)},[p]),!n||!a)return null;const E=n.people.filter(v=>v.role==="member").sort((v,A)=>v.name.localeCompare(A.name)),N=Mm(s.bots),w=u?N.find(v=>v.id===u):void 0,I=p?E.find(v=>v.email===p):void 0,j=o.trim().toLowerCase(),O=async(v,A,P)=>{f("");const F=At(v);try{await ln(v.id,A),b({botId:v.id,before:F,after:A,text:P})}catch(se){f(se instanceof Error?se.message:String(se))}};return e.jsxs("div",{ref:i,className:"flex min-w-0 flex-col gap-3","data-access-overview":!0,children:[I?e.jsx(Km,{person:I,bots:N.filter(v=>Mi(v,I.email)),team:n,teamName:a,apply:O,onBack:()=>{g.current=I.email,x(null)}}):e.jsxs(e.Fragment,{children:[e.jsx("p",{className:"ps-4 text-[13px] leading-relaxed text-ink-secondary",children:t("botAccess.overview.introUse",{team:a})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs("div",{className:"relative min-w-[180px] flex-1",children:[e.jsx(lt,{size:14,"aria-hidden":"true",className:"pointer-events-none absolute start-2.5 top-1/2 -translate-y-1/2 text-ink-secondary"}),e.jsx("input",{type:"search",value:o,"data-access-search":!0,"aria-label":t(r==="bot"?"botAccess.overview.searchBots":"botAccess.overview.searchPeople"),placeholder:t(r==="bot"?"botAccess.overview.searchBots":"botAccess.overview.searchPeople"),onChange:v=>d(v.target.value),onKeyDown:v=>{v.key==="Escape"&&o&&(v.preventDefault(),d(""))},className:"w-full rounded-lg border border-hairline/50 bg-transparent py-1.5 pe-2.5 ps-8 text-[13px] text-ink placeholder:text-ink-secondary focus:border-focus focus:outline-none"})]}),e.jsx("div",{role:"group","aria-label":t("botAccess.overview.listBy"),className:"flex shrink-0 rounded-full bg-raised/70 p-0.5",children:["bot","person"].map(v=>e.jsx("button",{type:"button","aria-pressed":r===v,"data-access-listing":v,onClick:()=>{c(v),d("")},className:z("rounded-full px-3 py-1 text-[13px] leading-[18px]",r===v?"bg-menu font-medium text-ink shadow-sm":"text-ink-secondary hover:text-ink"),children:t(v==="bot"?"botAccess.overview.byBot":"botAccess.overview.byPerson")},v))})]}),r==="bot"?e.jsx(Fm,{bots:N.filter(v=>!j||Un(j,v.name,za(v,n)?.name,Et(v)??void 0)),anyBots:N.length>0,team:n,onOpen:m}):e.jsx(_m,{people:E.filter(v=>!j||Un(j,v.name,v.email)),anyPeople:E.length>0,bots:N,onOpen:x}),e.jsx("p",{className:"ps-4 text-[12px] text-ink-secondary",children:t("botAccess.admins")})]}),y&&e.jsx("p",{role:"alert",className:"text-[13px] text-danger",children:y}),w&&e.jsx(Ll,{bot:w,teamName:a,onClose:()=>m(null),onChanged:v=>b({botId:w.id,...v})}),h&&e.jsx(Ol,{text:h.text,onUndo:()=>ln(h.botId,h.before),onDone:k},`${h.botId}:${h.text}:${JSON.stringify(h.after)}`)]})}function Fm({bots:s,anyBots:n,team:a,onOpen:i}){return n?s.length?e.jsx("ul",{className:Fs,children:s.map(r=>{const c=At(r),o=Et(r);return e.jsx("li",{className:"min-w-0",children:e.jsxs("button",{type:"button","aria-haspopup":"dialog","data-access-row":r.id,onClick:()=>i(r.id),className:z(Us,"hover:bg-ink/[0.06] focus-visible:bg-ink/[0.06] focus-visible:outline-none"),children:[e.jsx(Pt,{bot:r,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:r.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:Ui(r,a)})]}),e.jsx("span",{className:"min-w-0 max-w-[40%] truncate text-[13px] text-ink-secondary","data-access-summary":!0,children:c.everyone==="none"?t("botAccess.onlyAdded"):t("botAccess.overview.everyoneUses")}),e.jsx(Dm,{entries:Object.keys(c.people).filter(d=>d!==o),team:a})]})},r.id)})}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noBotMatch")}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noBots")})}function Dm({entries:s,team:n}){if(!s.length)return null;const a=s.map(r=>Ml(r,n)).join(", "),i=s.length-Mn;return e.jsxs("span",{role:"img","aria-label":a,title:a,"data-access-stack":s.length,className:"flex shrink-0 -space-x-0.5 rtl:space-x-reverse",children:[s.slice(0,Mn).map(r=>e.jsx("span",{className:"flex rounded-full ring-2 ring-card",children:e.jsx(Ul,{person:Fl(r,n),size:22})},r)),i>0&&e.jsxs("span",{className:"flex h-[22px] min-w-[22px] items-center justify-center rounded-full bg-card px-1 text-[11px] font-medium text-ink-secondary ring-2 ring-card",children:["+",i]})]})}function _m({people:s,anyPeople:n,bots:a,onOpen:i}){return n?s.length?e.jsx("ul",{className:Fs,children:s.map(r=>{const c=a.filter(o=>Mi(o,r.email)).length;return e.jsx("li",{className:"min-w-0",children:e.jsxs("button",{type:"button","data-access-person":r.email,onClick:()=>i(r.email),className:z(Us,"hover:bg-ink/[0.06] focus-visible:bg-ink/[0.06] focus-visible:outline-none"),children:[e.jsx(Ma,{person:r,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:r.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:r.email})]}),e.jsx("span",{className:"shrink-0 text-[13px] text-ink-secondary",children:c===1?t("botAccess.overview.botCount.one"):t("botAccess.overview.botCount.other",{count:c})})]})},r.email)})}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.noMatch")}):e.jsx("p",{className:"text-[13px] text-ink-secondary",children:t("botAccess.overview.noPeople")})}function Km({person:s,bots:n,team:a,teamName:i,apply:r,onBack:c}){return e.jsxs(e.Fragment,{children:[e.jsx("div",{children:e.jsxs("button",{type:"button",autoFocus:!0,"data-access-back":!0,onClick:c,className:"-ms-2 flex items-center gap-1 rounded-md px-2 py-1 text-[13px] text-ink-secondary hover:bg-ink/[0.06] hover:text-ink",children:[e.jsx(Ar,{size:14,"aria-hidden":"true",className:"rtl:-scale-x-100"}),t("botAccess.overview.allPeople")]})}),e.jsxs("div",{className:"flex min-w-0 items-center gap-3 px-3",children:[e.jsx(Ma,{person:s,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] font-medium leading-[18px] text-ink",children:s.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:s.email})]})]}),n.length===0?e.jsx("p",{className:"px-3 text-[13px] text-ink-secondary",children:t("botAccess.overview.noBotsForPerson",{name:s.name})}):e.jsx("ul",{className:Fs,children:n.map(o=>e.jsx($m,{bot:o,person:s,team:a,teamName:i,apply:r},o.id))})]})}function $m({bot:s,person:n,team:a,teamName:i,apply:r}){const c=At(s),o=Et(s)===n.email,d=c.people[n.email],u=Ua(c,n.email);return e.jsxs("li",{className:Us,"data-access-person-bot":s.id,children:[e.jsx(Pt,{bot:s,size:32}),e.jsxs("span",{className:"min-w-0 flex-1",children:[e.jsx("span",{className:"block truncate text-[14px] leading-[18px] text-ink",children:s.name}),e.jsx("span",{className:"block truncate text-[12px] leading-4 text-ink-secondary",children:!d&&!o&&u===c.everyone?t("botAccess.everyoneUse",{team:i}):Ui(s,a)})]}),e.jsx("span",{className:"min-w-0 shrink-0 text-[13px] text-ink-secondary",children:o?e.jsx("span",{className:"px-2",children:t("lookedAfter.badge")}):d?e.jsx("button",{type:"button","data-access-remove":s.id,"aria-label":t("botAccess.overview.removeFrom",{name:n.name,bot:s.name}),onClick:()=>{r(s,zl(c,n.email,null),t("botAccess.overview.toastRemoved",{name:n.name,bot:s.name}))},className:"rounded-md px-2 py-1 hover:bg-ink/[0.06] hover:text-ink",children:t("botAccess.remove")}):null})]})}function Hm(s){const n=s.trim();if(!n||/[\s\\?#@%]/.test(n))return null;try{const a=new URL(n.includes("://")?n:`https://${n}`),i=a.hostname.replace(/\.$/,"");return a.protocol!=="https:"||a.port||a.pathname!=="/"||!i.includes(".")||i.length>253||/^[\d.]+$/.test(i)||!i.split(".").every(r=>/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(r))||/(?:^|\.)(?:localhost|local|internal|invalid|test)$/.test(i)?null:i}catch{return null}}function Wm({domain:s,serverIpv4:n}){const a=Hm(s);if(!a)return e.jsx("p",{className:"text-[12px] text-ink-secondary",children:t("settings.domain.enterDomain")});const i=[[t("settings.domain.recordType"),"A"],[t("settings.domain.recordName"),a],[t("settings.domain.recordValue"),n]];return e.jsxs("section",{"aria-label":t("settings.domain.dnsRecord"),className:"space-y-2 rounded-lg border border-hairline/50 p-3",children:[e.jsx("p",{className:"text-[12px] font-medium text-ink",children:t("settings.domain.dnsRecord")}),e.jsx("dl",{className:"space-y-2",children:i.map(([r,c])=>e.jsxs("div",{className:"grid grid-cols-[80px_minmax(0,1fr)] items-center gap-2",children:[e.jsx("dt",{className:"text-[12px] text-ink-secondary",children:r}),e.jsx("dd",{className:"min-w-0",children:c?e.jsx(et,{command:c,copyLabel:t("settings.domain.copyField",{field:r})},c):e.jsx("p",{className:"text-[12px] text-warning",children:t("settings.domain.missingIp")})})]},r))}),e.jsx("p",{className:"text-[12px] leading-relaxed text-ink-secondary",children:t("settings.domain.recordHint")})]})}function Gm(s){return`bots.example.com {
2
2
  handle /hooks/* {
3
3
  reverse_proxy 127.0.0.1:${s.webhookPort}
4
4
  }