@runeya/runeya 2.0.147 → 2.0.149

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 (153) hide show
  1. package/agent/index.js +29 -2
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-5VR5TDBZ.js +13 -0
  4. package/chat-EMWEVXGR.js +28 -0
  5. package/{chunk-4LJQIQMN.js → chunk-3RCVOPTL.js} +2 -2
  6. package/{chunk-WDHLEO5S.js → chunk-64FCYYAB.js} +5 -5
  7. package/{chunk-7QXP4FXD.js → chunk-76D52RTB.js} +6 -6
  8. package/{chunk-DFPZ4MTI.js → chunk-AZSHM3NM.js} +4 -4
  9. package/{chunk-4D3GCBPO.js → chunk-HRNYFWGP.js} +5 -5
  10. package/{chunk-MZSDTA4A.js → chunk-LJ7KLYFQ.js} +59 -3
  11. package/chunk-LJ7KLYFQ.js.map +1 -0
  12. package/{chunk-6IBPK6UE.js → chunk-OPVJAPUF.js} +2 -2
  13. package/{chunk-VPSQJOSN.js → chunk-SHSWOE5S.js} +2 -2
  14. package/{chunk-57P45FNY.js → chunk-T6Y5KICH.js} +2 -2
  15. package/{chunk-5XG3X2TM.js → chunk-UEK7QFWY.js} +6 -6
  16. package/{chunk-JNK6H5KH.js → chunk-UJ2OHNEN.js} +12 -12
  17. package/{chunk-2NE52CL5.js → chunk-XQGABRZY.js} +23 -22
  18. package/chunk-XQGABRZY.js.map +1 -0
  19. package/{chunk-NPMSBYXC.js → chunk-ZVXPGKK5.js} +4 -4
  20. package/{companion-XKMNRIJB.js → companion-H24L2MGY.js} +9 -9
  21. package/{desktop-installer-page-I5FHFDES.js → desktop-installer-page-V2NXWT43.js} +3 -3
  22. package/{desktop-launcher-GD4QPM66.js → desktop-launcher-46OJ5NAA.js} +3 -3
  23. package/{environment-resolver-ZDTF3MHI.js → environment-resolver-SY36Q67E.js} +6 -6
  24. package/{external-NMKQPROK.js → external-NPJBOEYV.js} +3 -3
  25. package/index.js +12 -12
  26. package/{install-gate-OJJEUU4E.js → install-gate-6KHRGTTC.js} +2 -2
  27. package/mcp-server/external.js +29 -2
  28. package/mcp-server/external.js.map +1 -1
  29. package/mcp-server/index.js +29 -2
  30. package/mcp-server/index.js.map +1 -1
  31. package/package.json +1 -1
  32. package/{project-store-FLXTAD3J.js → project-store-BYAE4SVZ.js} +7 -7
  33. package/settings-manager-GIRMJQKL.js +10 -0
  34. package/{src-DCCEUWE6.js → src-AAOVGV5C.js} +6 -2
  35. package/{src-KWO3CKZU.js → src-OENXLZKQ.js} +1304 -244
  36. package/src-OENXLZKQ.js.map +1 -0
  37. package/{vault-resolver-E7KPKA5C.js → vault-resolver-B6BCVP47.js} +3 -3
  38. package/web/assets/{AgentScalarChatInterface.vue-DKBinB_l.js → AgentScalarChatInterface.vue-YCBDhPTj.js} +1 -1
  39. package/web/assets/{AgentTerminalPage-CixU7x6O.js → AgentTerminalPage-BSeo7WB7.js} +1 -1
  40. package/web/assets/AiChatModals-BgZ3L5A7.js +4 -0
  41. package/web/assets/AiChatModals-BmWxg-Sr.css +1 -0
  42. package/web/assets/{AppLayout-At9wk0sx.js → AppLayout-Ds1L1Mir.js} +1 -1
  43. package/web/assets/{AuditPage-BkqbHxjY.js → AuditPage-i2k_iiea.js} +1 -1
  44. package/web/assets/{CloudAccountPage-D5C2SCS9.js → CloudAccountPage-DjCOwzkz.js} +1 -1
  45. package/web/assets/{CloudMessagingPage-Bi57GGHO.js → CloudMessagingPage-D7Xde0YP.js} +1 -1
  46. package/web/assets/{DashboardPage-dEQop9ql.js → DashboardPage-CxmCDaFn.js} +1 -1
  47. package/web/assets/{DirectoryPickerDialog-DIMSeDhw.js → DirectoryPickerDialog-IXy2Cylp.js} +1 -1
  48. package/web/assets/{EditorIcon-W3Szca4J.js → EditorIcon-CcU8Z46_.js} +1 -1
  49. package/web/assets/{EnvironmentForm-C5emavNh.js → EnvironmentForm-B5S5hkZH.js} +1 -1
  50. package/web/assets/{EnvironmentFormPage-BIoy8fsW.js → EnvironmentFormPage-B68x1h6h.js} +1 -1
  51. package/web/assets/{EnvironmentListPage-BDYeh7XF.js → EnvironmentListPage-Cm85L1Cy.js} +1 -1
  52. package/web/assets/{FlagChip-DPtIBCjQ.js → FlagChip-maG1f7pl.js} +1 -1
  53. package/web/assets/KanbanBoardPage-Bb_8xU-I.css +1 -0
  54. package/web/assets/KanbanBoardPage-FlQC9xsU.js +4 -0
  55. package/web/assets/{KanbanListPage-DbXONxfC.js → KanbanListPage-Df4Z4Y8g.js} +1 -1
  56. package/web/assets/{LaunchProjectPage-Cg92hHwQ.js → LaunchProjectPage-B9s8MPOR.js} +1 -1
  57. package/web/assets/{LaunchServicesPage-CO8gOB9D.js → LaunchServicesPage-r43I_lWM.js} +1 -1
  58. package/web/assets/{LaunchShell-CDb21ihZ.js → LaunchShell-DtBjvLt-.js} +1 -1
  59. package/web/assets/{LogViewer-DsusKk2b.js → LogViewer-D2s-OyaX.js} +1 -1
  60. package/web/assets/{OrgKeyPrompt-CX9K7r9I.js → OrgKeyPrompt-DoIyrK0q.js} +1 -1
  61. package/web/assets/{ProcessControls-TEZutuxq.js → ProcessControls-CbBxTuHk.js} +1 -1
  62. package/web/assets/{ProcessDetailPage-Cj23FECq.js → ProcessDetailPage-BMTTtFB3.js} +1 -1
  63. package/web/assets/{ProcessMetrics-1P6iE2Il.js → ProcessMetrics-D-rQkzqK.js} +1 -1
  64. package/web/assets/{ProjectCreateDialog-D3aMWKfw.js → ProjectCreateDialog-DxsMuH_r.js} +1 -1
  65. package/web/assets/{ProjectLocationGate-DU0Jj8Nw.js → ProjectLocationGate-B_nzC6RT.js} +1 -1
  66. package/web/assets/{ProjectPublishDialog-D7sNKei3.js → ProjectPublishDialog-DpC8VIH7.js} +1 -1
  67. package/web/assets/{RandomJobTestPage-DQUMRHyf.js → RandomJobTestPage-Y77cBJR3.js} +1 -1
  68. package/web/assets/ScenarioEditorPage-BJaQ6iY1.js +14 -0
  69. package/web/assets/ScenarioEditorPage-BtKSjE2X.css +1 -0
  70. package/web/assets/{SendToChatDialog-BdWKjYmv.js → SendToChatDialog-CmsSEeFx.js} +1 -1
  71. package/web/assets/{ServiceControlsBar-B_J5m-Kc.js → ServiceControlsBar--VyfFz0G.js} +1 -1
  72. package/web/assets/{ServiceDetailPage-DhJcjFfY.js → ServiceDetailPage-C2Wavjac.js} +1 -1
  73. package/web/assets/{ServiceFormPage-fp8NCHSv.js → ServiceFormPage-BipwEBSc.js} +1 -1
  74. package/web/assets/{SettingsPage-NH2fQap4.css → SettingsPage-B951NEBm.css} +1 -1
  75. package/web/assets/{SettingsPage-s28BodWe.js → SettingsPage-Dul95AO1.js} +40 -40
  76. package/web/assets/{UnlockPage-BXXIPHW_.js → UnlockPage-DQBjRGHA.js} +1 -1
  77. package/web/assets/{VaultMigrationPage-BfNuKtkJ.js → VaultMigrationPage-kFPC7EU7.js} +1 -1
  78. package/web/assets/{VersionBadge-CW7czacg.js → VersionBadge-C0vc7eEJ.js} +1 -1
  79. package/web/assets/{WikiPage-BiwpCM3E.js → WikiPage-K6muETXh.js} +1 -1
  80. package/web/assets/{WikiView-CMch_06Z.js → WikiView-DZCXplGL.js} +1 -1
  81. package/web/assets/{add-scalar-classes-Ckanjq1h.js → add-scalar-classes-DT2FcA3X.js} +1 -1
  82. package/web/assets/{agent.store-piokQ9Dt.js → agent.store-DfMGUOUY.js} +1 -1
  83. package/web/assets/{auth-BT_jf-5e.js → auth-DSz8t1M_.js} +2 -2
  84. package/web/assets/{cloud-chat.store-CDKh4tIy.js → cloud-chat.store-WzurTZAg.js} +1 -1
  85. package/web/assets/{cloud-client-CzPdZLDq.js → cloud-client-BDyxOUmg.js} +2 -2
  86. package/web/assets/{cloud-session-BYfn6YM4.js → cloud-session-Chc6UTc4.js} +2 -2
  87. package/web/assets/composables-DguCUR3O.js +1 -0
  88. package/web/assets/dist-DTLmCuqE.js +1 -0
  89. package/web/assets/i18n-D3P4ZExP.js +1 -0
  90. package/web/assets/index-CnXzQkLZ.css +1 -0
  91. package/web/assets/{index-Ci2CNnit.js → index-CzGU0RCX.js} +6 -6
  92. package/web/assets/{modal-iRaP1izE.js → modal-B5BRgeuI.js} +1 -1
  93. package/web/assets/{notification.store-CvvuTBVz.js → notification.store-DEv3Bnn0.js} +1 -1
  94. package/web/assets/{project-launch.store-CTmbl8UY.js → project-launch.store-B5OL69Kk.js} +1 -1
  95. package/web/assets/{project.store-CNC6_4r4.js → project.store-CSuUie96.js} +1 -1
  96. package/web/assets/scenario.store-DdZT8Es0.js +7 -0
  97. package/web/assets/{service.store-B40U4QzI.js → service.store-CaPqbX9_.js} +1 -1
  98. package/web/assets/{settings-scope-CyWMCjRY.js → settings-scope-C4xy-LPU.js} +1 -1
  99. package/web/assets/{settings.store-Dw6bAoWE.js → settings.store-C7hBumKk.js} +1 -1
  100. package/web/assets/{src-DtCW_XCh.js → src-BlNaHk0H.js} +1 -1
  101. package/web/assets/src-D9TuCwn8.js +1960 -0
  102. package/web/assets/{src-DIBHat7I.js → src-DOcCcTQv.js} +1 -1
  103. package/web/assets/{src-CcvmgMAA.css → src-Dbg3CMY2.css} +1 -1
  104. package/web/assets/src-wUE_ebXd.css +1 -0
  105. package/web/assets/{trpc-BAZGRZBD.js → trpc-BVA95nUx.js} +3 -3
  106. package/web/assets/{useCloudOrg-EnXFBwt1.js → useCloudOrg-Cgj6WMpr.js} +1 -1
  107. package/web/assets/{useEnvVarAutocomplete-BxJh2Lw0.js → useEnvVarAutocomplete-DQdDjrRd.js} +1 -1
  108. package/web/assets/{useProjectCatalog-BrvUGv9A.js → useProjectCatalog-Dn7sBOL8.js} +1 -1
  109. package/web/assets/{useProjectCloudOrg-Czxlg00k.js → useProjectCloudOrg-r-olF7jJ.js} +1 -1
  110. package/web/assets/{useServiceUrlHost-Szz9y3rh.js → useServiceUrlHost-DP-_dCQG.js} +1 -1
  111. package/web/index.html +20 -20
  112. package/agent-manager-46C4NIQ2.js +0 -13
  113. package/chat-CMNDMXIP.js +0 -28
  114. package/chunk-2NE52CL5.js.map +0 -1
  115. package/chunk-MZSDTA4A.js.map +0 -1
  116. package/settings-manager-XPLBO35P.js +0 -10
  117. package/src-KWO3CKZU.js.map +0 -1
  118. package/web/assets/AiChatModals-BvGUd-QD.css +0 -1
  119. package/web/assets/AiChatModals-C-hXImkO.js +0 -4
  120. package/web/assets/KanbanBoardPage-BlCcjBwV.js +0 -4
  121. package/web/assets/KanbanBoardPage-eHmsrFGA.css +0 -1
  122. package/web/assets/ScenarioEditorPage-BSjSX4bw.css +0 -1
  123. package/web/assets/ScenarioEditorPage-DvCdcY9m.js +0 -14
  124. package/web/assets/composables-DiiOYol8.js +0 -1
  125. package/web/assets/dist-N4nrnbnA.js +0 -1
  126. package/web/assets/i18n-D0FT7rCj.js +0 -1
  127. package/web/assets/index-3LTzgeU-.css +0 -1
  128. package/web/assets/scenario.store-BIFQPXgl.js +0 -7
  129. package/web/assets/src-CrNi4Pjg.js +0 -1960
  130. package/web/assets/src-g1DRo8xZ.css +0 -1
  131. /package/{agent-manager-46C4NIQ2.js.map → agent-manager-5VR5TDBZ.js.map} +0 -0
  132. /package/{chat-CMNDMXIP.js.map → chat-EMWEVXGR.js.map} +0 -0
  133. /package/{chunk-4LJQIQMN.js.map → chunk-3RCVOPTL.js.map} +0 -0
  134. /package/{chunk-WDHLEO5S.js.map → chunk-64FCYYAB.js.map} +0 -0
  135. /package/{chunk-7QXP4FXD.js.map → chunk-76D52RTB.js.map} +0 -0
  136. /package/{chunk-DFPZ4MTI.js.map → chunk-AZSHM3NM.js.map} +0 -0
  137. /package/{chunk-4D3GCBPO.js.map → chunk-HRNYFWGP.js.map} +0 -0
  138. /package/{chunk-6IBPK6UE.js.map → chunk-OPVJAPUF.js.map} +0 -0
  139. /package/{chunk-VPSQJOSN.js.map → chunk-SHSWOE5S.js.map} +0 -0
  140. /package/{chunk-57P45FNY.js.map → chunk-T6Y5KICH.js.map} +0 -0
  141. /package/{chunk-5XG3X2TM.js.map → chunk-UEK7QFWY.js.map} +0 -0
  142. /package/{chunk-JNK6H5KH.js.map → chunk-UJ2OHNEN.js.map} +0 -0
  143. /package/{chunk-NPMSBYXC.js.map → chunk-ZVXPGKK5.js.map} +0 -0
  144. /package/{companion-XKMNRIJB.js.map → companion-H24L2MGY.js.map} +0 -0
  145. /package/{desktop-installer-page-I5FHFDES.js.map → desktop-installer-page-V2NXWT43.js.map} +0 -0
  146. /package/{desktop-launcher-GD4QPM66.js.map → desktop-launcher-46OJ5NAA.js.map} +0 -0
  147. /package/{environment-resolver-ZDTF3MHI.js.map → environment-resolver-SY36Q67E.js.map} +0 -0
  148. /package/{external-NMKQPROK.js.map → external-NPJBOEYV.js.map} +0 -0
  149. /package/{install-gate-OJJEUU4E.js.map → install-gate-6KHRGTTC.js.map} +0 -0
  150. /package/{project-store-FLXTAD3J.js.map → project-store-BYAE4SVZ.js.map} +0 -0
  151. /package/{settings-manager-XPLBO35P.js.map → settings-manager-GIRMJQKL.js.map} +0 -0
  152. /package/{src-DCCEUWE6.js.map → src-AAOVGV5C.js.map} +0 -0
  153. /package/{vault-resolver-E7KPKA5C.js.map → vault-resolver-B6BCVP47.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{B as e,C as t}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as n,E as r,Ht as i,_ as a,b as o,bt as s,ct as c,en as l,ft as u,g as d,k as f,mt as p,o as m,qt as h,rn as g,tt as _,v,y}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as b,w as x}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as S}from"./vue-i18n-o7yraQpR.js";import{n as C}from"./project-launch.store-CTmbl8UY.js";import{g as w,h as T}from"./useApi-s_02lHjl-DZYO2tHU.js";import{t as E}from"./vue-router-fin80h5W.js";import{B as D,D as O,E as k,H as A,J as j,O as M,P as N,S as P,U as F,W as I,Y as L,_ as R,b as ee,dt as z,ft as B,g as V,h as te,i as ne,j as re,k as H,l as U,m as ie,n as W,o as G,p as ae,q as oe,r as K,v as q,x as se,y as J,z as ce}from"./src-DIBHat7I.js";import{a as Y,n as le,r as X}from"./trpc-BAZGRZBD.js";import{n as ue,r as de}from"./project.store-CNC6_4r4.js";import{n as Z,r as Q}from"./error-DpF7X5iu.js";import{n as fe}from"./AiChatModals-C-hXImkO.js";import{t as pe}from"./useAiChatDrawer-D_ofn8Eo.js";import{a as me,h as he,p as ge}from"./dist-N4nrnbnA.js";import{t as _e}from"./service.store-B40U4QzI.js";import{t as ve}from"./agent.store-piokQ9Dt.js";import{r as $}from"./process-BWkHpZOM.js";import{L as ye,R as be,c as xe}from"./index-Ci2CNnit.js";import{t as Se}from"./ServiceControlsBar-B_J5m-Kc.js";import{t as Ce}from"./uuid-XipkJWQw.js";import{i as we,n as Te,r as Ee,t as De}from"./useEnvVarAutocomplete-BxJh2Lw0.js";import{t as Oe}from"./ProcessMetrics-1P6iE2Il.js";import{t as ke}from"./LogViewer-DsusKk2b.js";import{t as Ae}from"./settings.store-Dw6bAoWE.js";import{t as je}from"./WikiView-CMch_06Z.js";var Me={key:0,class:`log-details`},Ne={class:`log-details__section`},Pe={class:`log-details__label`},Fe={class:`log-details__value log-details__value--box`},Ie={class:`log-details__section`},Le={class:`log-details__label`},Re={class:`log-details__value log-details__value--box log-details__value--code`},ze={class:`log-details__section`},Be={class:`log-details__label`},Ve={class:`log-details__value log-details__value--box`},He={class:`log-details__process`},Ue={class:`log-details__section`},We={class:`log-details__label`},Ge={class:`log-details__value log-details__value--box`},Ke={key:0,class:`log-details__section`},qe={class:`log-details__label`},Je={class:`log-details__value log-details__value--box log-details__value--code`,"data-testid":`log-details-cwd`},Ye={class:`log-details__section`},Xe={class:`log-details__label`},Ze={class:`log-details__value log-details__value--box`},Qe={key:1,class:`log-details__section`},$e={class:`log-details__label`},et={class:`log-details__value log-details__value--box`},tt={key:2,class:`log-details__section`},nt={class:`log-details__label`},rt={class:`log-details__value log-details__value--box log-details__value--code`},it=B(f({__name:`LogDetailsDrawer`,props:{visible:{type:Boolean},log:{}},emits:[`update:visible`,`view-process`],setup(t,{emit:r}){let i=t,{t:s}=S(),c=xe(),l=r,u=d(()=>{if(!i.log)return``;let e=new Date(i.log.timestamp);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)} ${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}),f=d(()=>i.log?i.log.level.charAt(0).toUpperCase()+i.log.level.slice(1):``),m=d(()=>!i.log||i.log.pid==null?s(`logDetails.notAvailable`):String(i.log.pid)),_=d(()=>i.log?c.getByService(i.log.processId)[0]?.cwd??null:null);function b(){i.log&&l(`view-process`,i.log.processId)}function x(){l(`update:visible`,!1)}return(r,i)=>(p(),v(e(G),{visible:t.visible,position:`right`,header:e(s)(`logDetails.header`),style:{width:`440px`},"onUpdate:visible":x},{default:h(()=>[t.log?(p(),o(`div`,Me,[a(`div`,Ne,[a(`div`,Pe,g(e(s)(`logDetails.type`)),1),a(`div`,Fe,g(f.value),1)]),a(`div`,Ie,[a(`div`,Le,g(e(s)(`logDetails.rawMessage`)),1),a(`div`,Re,g(t.log.raw),1)]),a(`div`,ze,[a(`div`,Be,g(e(s)(`logDetails.serviceId`)),1),a(`div`,Ve,[a(`div`,He,[a(`span`,null,g(t.log.processId),1),n(e(z),{label:e(s)(`logDetails.viewProcess`),icon:`ti ti-external-link`,size:`small`,variant:`outlined`,onClick:b},null,8,[`label`])])])]),a(`div`,Ue,[a(`div`,We,g(e(s)(`logDetails.pid`)),1),a(`div`,Ge,g(m.value),1)]),_.value?(p(),o(`div`,Ke,[a(`div`,qe,g(e(s)(`logDetails.cwd`)),1),a(`div`,Je,g(_.value),1)])):y(``,!0),a(`div`,Ye,[a(`div`,Xe,g(e(s)(`logDetails.timestamp`)),1),a(`div`,Ze,g(u.value),1)]),t.log.stream?(p(),o(`div`,Qe,[a(`div`,$e,g(e(s)(`logDetails.stream`)),1),a(`div`,et,g(t.log.stream),1)])):y(``,!0),t.log.metadata&&Object.keys(t.log.metadata).length>0?(p(),o(`div`,tt,[a(`div`,nt,g(e(s)(`logDetails.metadata`)),1),a(`div`,rt,g(JSON.stringify(t.log.metadata,null,2)),1)])):y(``,!0)])):y(``,!0)]),_:1},8,[`visible`,`header`]))}}),[[`__scopeId`,`data-v-b2c352ef`]]),at=500,ot=5,st=me;function ct(e){return e+Math.random()*e*.3}function lt(e,n){let r=t([]),a=t(!1),o=null,s=0,c=null,l=le(()=>{s=0,a.value||C()}),d=[],f=null,p=t(0),m=t(0),h=0,g=0,_=null;function v(){_||=setInterval(()=>{p.value=h,m.value=g,h=0,g=0},1e3)}function y(){_&&=(clearInterval(_),null),p.value=0,m.value=0,h=0,g=0}function b(){if(f=null,d.length===0)return;let e=d;d=[],g+=e.length;let t=[...r.value,...e];t.length>at&&(t=t.slice(t.length-at)),r.value=t}function x(){e.value&&n.value&&(a.value=!0,o=X.process.onLog.subscribe({agentId:e.value,processId:n.value},{onData(e){let t=e;if(s=0,Y(`connected`),t.some(e=>e.__clearLogBuffer)){r.value=[],d=[];return}h+=t.length,d.push(...t),f===null&&(f=requestAnimationFrame(b))},onError(e){console.error(`[useLogStream] Subscription error:`,e.message),a.value=!1,o=null,S()}}))}function S(){if(s>=ot){console.warn(`[useLogStream] Max retries (${ot}) reached`),Y(`disconnected`);return}Y(`reconnecting`);let e=ct(st*2**s);s++,c=setTimeout(()=>{c=null,C()},e)}async function C(){if(!a.value&&e.value&&n.value){s=0;try{let t=await X.process.logs.query({agentId:e.value,processId:n.value});t.length>at&&(t=t.slice(t.length-at)),r.value=t,Y(`connected`)}catch{}x()}}function w(){c&&=(clearTimeout(c),null),f!==null&&(cancelAnimationFrame(f),f=null),d=[],y(),o&&=(o.unsubscribe(),null),a.value=!1,s=0,r.value=[]}return i([e,n],([e,t],[n,r])=>{(e!==n||t!==r)&&(a.value&&w(),C())}),u(()=>{l(),w()}),{logs:r,isStreaming:a,start:C,stop:w,receivedPerSec:p,flushedPerSec:m,startStats:v,stopStats:y}}var ut={class:`service-terminal__toolbar`},dt={class:`service-terminal__toolbar-left`},ft={key:0,class:`pid-option`},pt={key:1,class:`pid-option`},mt={key:0,class:`ti ti-circle-filled pid-status-icon pid-status-icon--active`,style:{"margin-right":`0.5rem`}},ht={key:1,class:`ti ti-circle-filled pid-status-icon pid-status-icon--stopped`,style:{"margin-right":`0.5rem`}},gt={class:`pid-option`},_t={key:0,class:`ti ti-list`,style:{"margin-right":`0.5rem`}},vt=[`title`],yt=[`title`],bt={class:`service-terminal__toolbar-right`},xt={class:`service-terminal__content`,"data-testid":`service-terminal-content`},St={key:1,class:`service-terminal__shortcuts`},Ct={class:`service-terminal__command-input`},wt={class:`service-terminal__bottom`},Tt=`runeya_command_history_`,Et=50,Dt=B(f({__name:`ServiceTerminal`,props:{service:{},processes:{}},setup(r){let{t:f}=S(),b=r,x=d(()=>b.processes.find(e=>e.state===`running`||e.state===`starting`)??b.processes[0]??null),C=d(()=>x.value?.agentId??``),w=d(()=>x.value?.id??``),T=N(),{logs:E,isStreaming:D,start:O,stop:k,receivedPerSec:A,flushedPerSec:j,startStats:M,stopStats:I}=lt(C,w),L=t(!1);i(L,e=>{e?M():I()});function R(e){e.ctrlKey&&e.shiftKey&&(e.key===`*`||e.key===`µ`)&&(e.preventDefault(),L.value=!L.value)}let ee=d(()=>{let e=new Map;return E.value.forEach(t=>{if(t.pid!=null){let n=e.get(t.pid);if(n)n.lastSeen=new Date(Math.max(n.lastSeen.getTime(),new Date(t.timestamp).getTime())),n.logCount++;else{let n=b.processes.find(e=>e.pid===t.pid&&(e.state===`running`||e.state===`starting`));e.set(t.pid,{pid:t.pid,lastSeen:new Date(t.timestamp),logCount:1,isActive:!!n})}}}),Array.from(e.values()).sort((e,t)=>t.lastSeen.getTime()-e.lastSeen.getTime())}),B=d(()=>be.value===`all`?E.value:E.value.filter(e=>e.pid===be.value)),V=d(()=>ee.value.filter(e=>e.isActive).length),te=d(()=>{let e=[{label:f(`serviceTerminal.allProcesses`),value:`all`,badge:V.value>0?`${V.value} ${f(`serviceTerminal.active`)}`:void 0,isActive:void 0}];return ee.value.forEach(({pid:t,logCount:n,isActive:r})=>{e.push({label:`PID: ${t}`,value:t,badge:`${n} logs`,isActive:r})}),e});d(()=>b.processes.filter(e=>e.state===`running`).length);async function re(){if(x.value)try{await X.process.clearLogBuffer.mutate({agentId:x.value.agentId,processId:x.value.id}),E.value=[]}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.error`),detail:e.message??f(`serviceTerminal.failedToClearLogs`),life:5e3})}}let H=d(()=>b.service.shortcuts??[]),U=t(new Set);async function ie(e){let t=$(b.service,x.value),n=x.value?.id??b.service.id;if(!t){T.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}if(U.value.has(e.id)){try{await X.process.cancelShortcut.mutate({agentId:t,processId:n,shortcutId:e.id})}catch{}return}U.value=new Set([...U.value,e.id]);try{await X.process.executeShortcut.mutate({agentId:t,processId:n,shortcut:e})}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.shortcutFailed`),detail:e.message??f(`serviceTerminal.shortcutFailed`),life:5e3})}finally{let t=new Set(U.value);t.delete(e.id),U.value=t}}let W=t(``),G=t(new Set),ae=d(()=>G.value.size>0),oe=t(null),K=t([]),q=t(-1),se=`ls,ls -la,ls -lh,pwd,echo,echo $PWD,cat,cat package.json,grep,find,find . -name,ps,ps aux,top,htop,df -h,du -sh,tail,tail -f,tail -n 100,head,head -n 20,wc -l,curl,wget,git status,git log,git diff,git branch,npm run,npm install,npm test,npm start,yarn,yarn install,yarn test,yarn build,docker ps,docker logs,docker exec,env,printenv,whoami,hostname,date,uptime`.split(`,`),J=t([]);function ce(e){let t=e.query.toLowerCase().trim();if(!t||!W.value.trim()){J.value=[];return}let n=[...K.value.slice().reverse(),...se],r=new Set;J.value=n.filter(e=>!r.has(e)&&(r.add(e),e.toLowerCase().includes(t))).slice(0,10)}function Y(){try{let e=localStorage.getItem(Tt+b.service.id);e&&(K.value=JSON.parse(e))}catch{K.value=[]}}function le(){try{localStorage.setItem(Tt+b.service.id,JSON.stringify(K.value))}catch{}}function ue(e){K.value[K.value.length-1]!==e&&(K.value=[...K.value,e],K.value.length>Et&&(K.value=K.value.slice(-50)),le())}async function de(){let e=$(b.service,x.value),t=x.value?.id??b.service.id;if(e)try{await X.process.cancelAdHocCommand.mutate({agentId:e,processId:t})}catch{}}async function Z(){if(!W.value.trim())return;let e=$(b.service,x.value),t=x.value?.id??b.service.id;if(!e){T.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}let n=Ce(),r=W.value.trim();ue(r),W.value=``,J.value=[],q.value=-1,G.value=new Set([...G.value,n]);try{await X.process.executeAdHocCommand.mutate({agentId:e,processId:t,command:r,commandId:n})}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.commandFailed`),detail:e.message??f(`serviceTerminal.commandFailed`),life:5e3})}finally{let e=new Set(G.value);e.delete(n),G.value=e,_(()=>{document.querySelector(`.service-terminal__input`)?.focus()})}}function Q(e){if(e.key===`Enter`&&!e.shiftKey){e.preventDefault(),Z();return}if(e.key===`ArrowUp`){if(e.preventDefault(),K.value.length===0)return;q.value===-1?q.value=K.value.length-1:q.value>0&&q.value--,W.value=K.value[q.value]||``}else if(e.key===`ArrowDown`){if(e.preventDefault(),q.value===-1)return;q.value<K.value.length-1?(q.value++,W.value=K.value[q.value]||``):(q.value=-1,W.value=``)}}function fe(){if(E.value.length===0)return;let e=E.value.map(e=>`[${new Date(e.timestamp).toISOString()}] ${e.level.toUpperCase().padEnd(5)} ${e.message}`),t=new Blob([e.join(`
1
+ import{B as e,C as t}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as n,E as r,Ht as i,_ as a,b as o,bt as s,ct as c,en as l,ft as u,g as d,k as f,mt as p,o as m,qt as h,rn as g,tt as _,v,y}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as b,w as x}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as S}from"./vue-i18n-o7yraQpR.js";import{n as C}from"./project-launch.store-B5OL69Kk.js";import{g as w,h as T}from"./useApi-s_02lHjl-DZYO2tHU.js";import{t as E}from"./vue-router-fin80h5W.js";import{B as D,D as O,E as k,H as A,J as j,O as M,P as N,S as P,U as F,W as I,Y as L,_ as R,b as ee,dt as z,ft as B,g as V,h as te,i as ne,j as re,k as H,l as U,m as ie,n as W,o as G,p as ae,q as oe,r as K,v as q,x as se,y as J,z as ce}from"./src-DOcCcTQv.js";import{a as Y,n as le,r as X}from"./trpc-BVA95nUx.js";import{n as ue,r as de}from"./project.store-CSuUie96.js";import{n as Z,r as Q}from"./error-DpF7X5iu.js";import{n as fe}from"./AiChatModals-BgZ3L5A7.js";import{t as pe}from"./useAiChatDrawer-D_ofn8Eo.js";import{a as me,g as he,m as ge}from"./dist-DTLmCuqE.js";import{t as _e}from"./service.store-CaPqbX9_.js";import{t as ve}from"./agent.store-DfMGUOUY.js";import{r as $}from"./process-BWkHpZOM.js";import{L as ye,R as be,c as xe}from"./index-CzGU0RCX.js";import{t as Se}from"./ServiceControlsBar--VyfFz0G.js";import{t as Ce}from"./uuid-XipkJWQw.js";import{i as we,n as Te,r as Ee,t as De}from"./useEnvVarAutocomplete-DQdDjrRd.js";import{t as Oe}from"./ProcessMetrics-D-rQkzqK.js";import{t as ke}from"./LogViewer-D2s-OyaX.js";import{t as Ae}from"./settings.store-C7hBumKk.js";import{t as je}from"./WikiView-DZCXplGL.js";var Me={key:0,class:`log-details`},Ne={class:`log-details__section`},Pe={class:`log-details__label`},Fe={class:`log-details__value log-details__value--box`},Ie={class:`log-details__section`},Le={class:`log-details__label`},Re={class:`log-details__value log-details__value--box log-details__value--code`},ze={class:`log-details__section`},Be={class:`log-details__label`},Ve={class:`log-details__value log-details__value--box`},He={class:`log-details__process`},Ue={class:`log-details__section`},We={class:`log-details__label`},Ge={class:`log-details__value log-details__value--box`},Ke={key:0,class:`log-details__section`},qe={class:`log-details__label`},Je={class:`log-details__value log-details__value--box log-details__value--code`,"data-testid":`log-details-cwd`},Ye={class:`log-details__section`},Xe={class:`log-details__label`},Ze={class:`log-details__value log-details__value--box`},Qe={key:1,class:`log-details__section`},$e={class:`log-details__label`},et={class:`log-details__value log-details__value--box`},tt={key:2,class:`log-details__section`},nt={class:`log-details__label`},rt={class:`log-details__value log-details__value--box log-details__value--code`},it=B(f({__name:`LogDetailsDrawer`,props:{visible:{type:Boolean},log:{}},emits:[`update:visible`,`view-process`],setup(t,{emit:r}){let i=t,{t:s}=S(),c=xe(),l=r,u=d(()=>{if(!i.log)return``;let e=new Date(i.log.timestamp);return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,`0`)}-${String(e.getDate()).padStart(2,`0`)} ${String(e.getHours()).padStart(2,`0`)}:${String(e.getMinutes()).padStart(2,`0`)}:${String(e.getSeconds()).padStart(2,`0`)}`}),f=d(()=>i.log?i.log.level.charAt(0).toUpperCase()+i.log.level.slice(1):``),m=d(()=>!i.log||i.log.pid==null?s(`logDetails.notAvailable`):String(i.log.pid)),_=d(()=>i.log?c.getByService(i.log.processId)[0]?.cwd??null:null);function b(){i.log&&l(`view-process`,i.log.processId)}function x(){l(`update:visible`,!1)}return(r,i)=>(p(),v(e(G),{visible:t.visible,position:`right`,header:e(s)(`logDetails.header`),style:{width:`440px`},"onUpdate:visible":x},{default:h(()=>[t.log?(p(),o(`div`,Me,[a(`div`,Ne,[a(`div`,Pe,g(e(s)(`logDetails.type`)),1),a(`div`,Fe,g(f.value),1)]),a(`div`,Ie,[a(`div`,Le,g(e(s)(`logDetails.rawMessage`)),1),a(`div`,Re,g(t.log.raw),1)]),a(`div`,ze,[a(`div`,Be,g(e(s)(`logDetails.serviceId`)),1),a(`div`,Ve,[a(`div`,He,[a(`span`,null,g(t.log.processId),1),n(e(z),{label:e(s)(`logDetails.viewProcess`),icon:`ti ti-external-link`,size:`small`,variant:`outlined`,onClick:b},null,8,[`label`])])])]),a(`div`,Ue,[a(`div`,We,g(e(s)(`logDetails.pid`)),1),a(`div`,Ge,g(m.value),1)]),_.value?(p(),o(`div`,Ke,[a(`div`,qe,g(e(s)(`logDetails.cwd`)),1),a(`div`,Je,g(_.value),1)])):y(``,!0),a(`div`,Ye,[a(`div`,Xe,g(e(s)(`logDetails.timestamp`)),1),a(`div`,Ze,g(u.value),1)]),t.log.stream?(p(),o(`div`,Qe,[a(`div`,$e,g(e(s)(`logDetails.stream`)),1),a(`div`,et,g(t.log.stream),1)])):y(``,!0),t.log.metadata&&Object.keys(t.log.metadata).length>0?(p(),o(`div`,tt,[a(`div`,nt,g(e(s)(`logDetails.metadata`)),1),a(`div`,rt,g(JSON.stringify(t.log.metadata,null,2)),1)])):y(``,!0)])):y(``,!0)]),_:1},8,[`visible`,`header`]))}}),[[`__scopeId`,`data-v-b2c352ef`]]),at=500,ot=5,st=me;function ct(e){return e+Math.random()*e*.3}function lt(e,n){let r=t([]),a=t(!1),o=null,s=0,c=null,l=le(()=>{s=0,a.value||C()}),d=[],f=null,p=t(0),m=t(0),h=0,g=0,_=null;function v(){_||=setInterval(()=>{p.value=h,m.value=g,h=0,g=0},1e3)}function y(){_&&=(clearInterval(_),null),p.value=0,m.value=0,h=0,g=0}function b(){if(f=null,d.length===0)return;let e=d;d=[],g+=e.length;let t=[...r.value,...e];t.length>at&&(t=t.slice(t.length-at)),r.value=t}function x(){e.value&&n.value&&(a.value=!0,o=X.process.onLog.subscribe({agentId:e.value,processId:n.value},{onData(e){let t=e;if(s=0,Y(`connected`),t.some(e=>e.__clearLogBuffer)){r.value=[],d=[];return}h+=t.length,d.push(...t),f===null&&(f=requestAnimationFrame(b))},onError(e){console.error(`[useLogStream] Subscription error:`,e.message),a.value=!1,o=null,S()}}))}function S(){if(s>=ot){console.warn(`[useLogStream] Max retries (${ot}) reached`),Y(`disconnected`);return}Y(`reconnecting`);let e=ct(st*2**s);s++,c=setTimeout(()=>{c=null,C()},e)}async function C(){if(!a.value&&e.value&&n.value){s=0;try{let t=await X.process.logs.query({agentId:e.value,processId:n.value});t.length>at&&(t=t.slice(t.length-at)),r.value=t,Y(`connected`)}catch{}x()}}function w(){c&&=(clearTimeout(c),null),f!==null&&(cancelAnimationFrame(f),f=null),d=[],y(),o&&=(o.unsubscribe(),null),a.value=!1,s=0,r.value=[]}return i([e,n],([e,t],[n,r])=>{(e!==n||t!==r)&&(a.value&&w(),C())}),u(()=>{l(),w()}),{logs:r,isStreaming:a,start:C,stop:w,receivedPerSec:p,flushedPerSec:m,startStats:v,stopStats:y}}var ut={class:`service-terminal__toolbar`},dt={class:`service-terminal__toolbar-left`},ft={key:0,class:`pid-option`},pt={key:1,class:`pid-option`},mt={key:0,class:`ti ti-circle-filled pid-status-icon pid-status-icon--active`,style:{"margin-right":`0.5rem`}},ht={key:1,class:`ti ti-circle-filled pid-status-icon pid-status-icon--stopped`,style:{"margin-right":`0.5rem`}},gt={class:`pid-option`},_t={key:0,class:`ti ti-list`,style:{"margin-right":`0.5rem`}},vt=[`title`],yt=[`title`],bt={class:`service-terminal__toolbar-right`},xt={class:`service-terminal__content`,"data-testid":`service-terminal-content`},St={key:1,class:`service-terminal__shortcuts`},Ct={class:`service-terminal__command-input`},wt={class:`service-terminal__bottom`},Tt=`runeya_command_history_`,Et=50,Dt=B(f({__name:`ServiceTerminal`,props:{service:{},processes:{}},setup(r){let{t:f}=S(),b=r,x=d(()=>b.processes.find(e=>e.state===`running`||e.state===`starting`)??b.processes[0]??null),C=d(()=>x.value?.agentId??``),w=d(()=>x.value?.id??``),T=N(),{logs:E,isStreaming:D,start:O,stop:k,receivedPerSec:A,flushedPerSec:j,startStats:M,stopStats:I}=lt(C,w),L=t(!1);i(L,e=>{e?M():I()});function R(e){e.ctrlKey&&e.shiftKey&&(e.key===`*`||e.key===`µ`)&&(e.preventDefault(),L.value=!L.value)}let ee=d(()=>{let e=new Map;return E.value.forEach(t=>{if(t.pid!=null){let n=e.get(t.pid);if(n)n.lastSeen=new Date(Math.max(n.lastSeen.getTime(),new Date(t.timestamp).getTime())),n.logCount++;else{let n=b.processes.find(e=>e.pid===t.pid&&(e.state===`running`||e.state===`starting`));e.set(t.pid,{pid:t.pid,lastSeen:new Date(t.timestamp),logCount:1,isActive:!!n})}}}),Array.from(e.values()).sort((e,t)=>t.lastSeen.getTime()-e.lastSeen.getTime())}),B=d(()=>be.value===`all`?E.value:E.value.filter(e=>e.pid===be.value)),V=d(()=>ee.value.filter(e=>e.isActive).length),te=d(()=>{let e=[{label:f(`serviceTerminal.allProcesses`),value:`all`,badge:V.value>0?`${V.value} ${f(`serviceTerminal.active`)}`:void 0,isActive:void 0}];return ee.value.forEach(({pid:t,logCount:n,isActive:r})=>{e.push({label:`PID: ${t}`,value:t,badge:`${n} logs`,isActive:r})}),e});d(()=>b.processes.filter(e=>e.state===`running`).length);async function re(){if(x.value)try{await X.process.clearLogBuffer.mutate({agentId:x.value.agentId,processId:x.value.id}),E.value=[]}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.error`),detail:e.message??f(`serviceTerminal.failedToClearLogs`),life:5e3})}}let H=d(()=>b.service.shortcuts??[]),U=t(new Set);async function ie(e){let t=$(b.service,x.value),n=x.value?.id??b.service.id;if(!t){T.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}if(U.value.has(e.id)){try{await X.process.cancelShortcut.mutate({agentId:t,processId:n,shortcutId:e.id})}catch{}return}U.value=new Set([...U.value,e.id]);try{await X.process.executeShortcut.mutate({agentId:t,processId:n,shortcut:e})}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.shortcutFailed`),detail:e.message??f(`serviceTerminal.shortcutFailed`),life:5e3})}finally{let t=new Set(U.value);t.delete(e.id),U.value=t}}let W=t(``),G=t(new Set),ae=d(()=>G.value.size>0),oe=t(null),K=t([]),q=t(-1),se=`ls,ls -la,ls -lh,pwd,echo,echo $PWD,cat,cat package.json,grep,find,find . -name,ps,ps aux,top,htop,df -h,du -sh,tail,tail -f,tail -n 100,head,head -n 20,wc -l,curl,wget,git status,git log,git diff,git branch,npm run,npm install,npm test,npm start,yarn,yarn install,yarn test,yarn build,docker ps,docker logs,docker exec,env,printenv,whoami,hostname,date,uptime`.split(`,`),J=t([]);function ce(e){let t=e.query.toLowerCase().trim();if(!t||!W.value.trim()){J.value=[];return}let n=[...K.value.slice().reverse(),...se],r=new Set;J.value=n.filter(e=>!r.has(e)&&(r.add(e),e.toLowerCase().includes(t))).slice(0,10)}function Y(){try{let e=localStorage.getItem(Tt+b.service.id);e&&(K.value=JSON.parse(e))}catch{K.value=[]}}function le(){try{localStorage.setItem(Tt+b.service.id,JSON.stringify(K.value))}catch{}}function ue(e){K.value[K.value.length-1]!==e&&(K.value=[...K.value,e],K.value.length>Et&&(K.value=K.value.slice(-50)),le())}async function de(){let e=$(b.service,x.value),t=x.value?.id??b.service.id;if(e)try{await X.process.cancelAdHocCommand.mutate({agentId:e,processId:t})}catch{}}async function Z(){if(!W.value.trim())return;let e=$(b.service,x.value),t=x.value?.id??b.service.id;if(!e){T.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}let n=Ce(),r=W.value.trim();ue(r),W.value=``,J.value=[],q.value=-1,G.value=new Set([...G.value,n]);try{await X.process.executeAdHocCommand.mutate({agentId:e,processId:t,command:r,commandId:n})}catch(e){T.add({severity:`error`,summary:f(`serviceTerminal.commandFailed`),detail:e.message??f(`serviceTerminal.commandFailed`),life:5e3})}finally{let e=new Set(G.value);e.delete(n),G.value=e,_(()=>{document.querySelector(`.service-terminal__input`)?.focus()})}}function Q(e){if(e.key===`Enter`&&!e.shiftKey){e.preventDefault(),Z();return}if(e.key===`ArrowUp`){if(e.preventDefault(),K.value.length===0)return;q.value===-1?q.value=K.value.length-1:q.value>0&&q.value--,W.value=K.value[q.value]||``}else if(e.key===`ArrowDown`){if(e.preventDefault(),q.value===-1)return;q.value<K.value.length-1?(q.value++,W.value=K.value[q.value]||``):(q.value=-1,W.value=``)}}function fe(){if(E.value.length===0)return;let e=E.value.map(e=>`[${new Date(e.timestamp).toISOString()}] ${e.level.toUpperCase().padEnd(5)} ${e.message}`),t=new Blob([e.join(`
2
2
  `)],{type:`text/plain`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${b.service.name}-${new Date().toISOString().slice(0,19).replaceAll(`:`,`-`)}.log`,document.body.appendChild(r),r.click(),document.body.removeChild(r),URL.revokeObjectURL(n)}let pe=t(0),me=0,he=null,ge=null;i(x,e=>{if(!e||e.state!==`running`&&e.state!==`starting`){he&&=(clearInterval(he),null),ge=null,pe.value=e?.uptime??0;return}let t=e.uptime??0;e.id!==ge&&(he&&=(clearInterval(he),null),ge=e.id,me=e.startedAt?new Date(e.startedAt).getTime():Date.now()-t,pe.value=Date.now()-me,he=setInterval(()=>{pe.value=Date.now()-me},1e3))},{immediate:!0});let _e=t(!0),ve=t(null),ye=t(!1),be=t(`all`),xe=t(!1);function we(){xe.value=!xe.value}c(()=>{Y(),x.value&&O(),window.addEventListener(`keydown`,R)}),u(()=>{k(),window.removeEventListener(`keydown`,R),he&&clearInterval(he)});function Te(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}function Ee(e){ve.value=e,ye.value=!0}function De(e){ye.value=!1,T.add({severity:`info`,summary:`Process`,detail:`Process ID: ${e}`,life:3e3})}return(t,i)=>(p(),o(`div`,{class:l([`service-terminal`,{"service-terminal--fullscreen":xe.value}]),"data-testid":`service-terminal`},[xe.value?(p(),v(Se,{key:0,service:r.service,processes:r.processes},null,8,[`service`,`processes`])):y(``,!0),a(`div`,ut,[a(`div`,dt,[n(e(z),{label:e(f)(`serviceTerminal.logs`),severity:_e.value?`primary`:`secondary`,variant:`text`,size:`small`,onClick:i[0]||=e=>_e.value=!0},null,8,[`label`,`severity`]),n(e(P),{modelValue:be.value,"onUpdate:modelValue":i[1]||=e=>be.value=e,options:te.value,"option-label":`label`,"option-value":`value`,class:`service-terminal__pid-selector`,size:`small`},{value:h(t=>[t.value===`all`?(p(),o(`div`,ft,[i[5]||=a(`i`,{class:`ti ti-list`,style:{"margin-right":`0.5rem`}},null,-1),a(`span`,null,g(e(f)(`serviceTerminal.allProcesses`)),1),V.value>0?(p(),v(e(F),{key:0,value:`${V.value} ${e(f)(`serviceTerminal.active`)}`,severity:`secondary`,class:`pid-badge`},null,8,[`value`])):y(``,!0)])):(p(),o(`div`,pt,[te.value.find(e=>e.value===t.value)?.isActive?(p(),o(`i`,mt)):(p(),o(`i`,ht)),a(`span`,null,`PID: `+g(t.value),1)]))]),option:h(t=>[a(`div`,gt,[t.option.value===`all`?(p(),o(`i`,_t)):t.option.isActive?(p(),o(`i`,{key:1,class:`ti ti-circle-filled pid-status-icon pid-status-icon--active`,title:e(f)(`serviceTerminal.running`)},null,8,vt)):(p(),o(`i`,{key:2,class:`ti ti-circle-filled pid-status-icon pid-status-icon--stopped`,title:e(f)(`serviceTerminal.stopped`)},null,8,yt)),a(`span`,null,g(t.option.label),1),t.option.badge?(p(),v(e(F),{key:3,value:t.option.badge,severity:`secondary`,class:`pid-badge`},null,8,[`value`])):y(``,!0)])]),_:1},8,[`modelValue`,`options`])]),a(`div`,bt,[n(e(z),{icon:xe.value?`ti ti-minimize`:`ti ti-maximize`,variant:`text`,rounded:``,size:`small`,title:xe.value?e(f)(`serviceTerminal.exitFullscreen`):e(f)(`serviceTerminal.fullscreen`),onClick:we},null,8,[`icon`,`title`]),n(e(z),{icon:`ti ti-download`,variant:`text`,rounded:``,size:`small`,title:e(f)(`serviceTerminal.downloadLogs`),disabled:e(E).length===0,onClick:fe},null,8,[`title`,`disabled`]),n(e(z),{icon:`ti ti-trash`,variant:`text`,rounded:``,size:`small`,title:e(f)(`serviceTerminal.clearLogs`),disabled:e(E).length===0,onClick:re},null,8,[`title`,`disabled`])])]),a(`div`,xt,[n(ke,{logs:B.value,loading:!1,"received-per-sec":e(A),"flushed-per-sec":e(j),"show-stats":L.value,"service-label":b.service.label||b.service.name,onLogClick:Ee},null,8,[`logs`,`received-per-sec`,`flushed-per-sec`,`show-stats`,`service-label`])]),H.value.length>0?(p(),o(`div`,St,[(p(!0),o(m,null,s(H.value,t=>(p(),v(e(z),{key:t.id,label:t.label||t.command,"data-shortcut-id":t.id,class:`shortcut-badge`,icon:U.value.has(t.id)?`ti ti-player-stop`:`ti ti-player-play`,size:`small`,variant:U.value.has(t.id)?`filled`:`outlined`,severity:U.value.has(t.id)?`danger`:void 0,onClick:e=>ie(t)},null,8,[`label`,`data-shortcut-id`,`icon`,`variant`,`severity`,`onClick`]))),128))])):y(``,!0),a(`div`,Ct,[i[6]||=a(`span`,{class:`service-terminal__prompt`,"data-testid":`terminal-prompt`},`>`,-1),n(e(ne),{ref_key:`adHocCommandInput`,ref:oe,modelValue:W.value,"onUpdate:modelValue":i[2]||=e=>W.value=e,suggestions:J.value,class:`service-terminal__autocomplete`,size:`small`,"input-class":`service-terminal__input`,placeholder:e(f)(`serviceTerminal.enterCommand`),"aria-label":e(f)(`serviceTerminal.enterCommand`),disabled:!e($)(b.service,x.value),"data-testid":`terminal-command-input`,onComplete:ce,onKeydown:Q},null,8,[`modelValue`,`suggestions`,`placeholder`,`aria-label`,`disabled`]),n(e(z),{icon:ae.value?`ti ti-player-stop`:`ti ti-player-play`,severity:ae.value?`danger`:void 0,size:`small`,"data-testid":`terminal-run-btn`,disabled:!e($)(b.service,x.value)||!W.value.trim()&&!ae.value,onClick:i[3]||=e=>ae.value?de():Z()},null,8,[`icon`,`severity`,`disabled`])]),a(`div`,wt,[x.value?(p(),v(e(F),{key:0,icon:`ti ti-server`,value:x.value.agentId.slice(0,8),severity:`secondary`,class:`service-terminal__pill`},null,8,[`value`])):y(``,!0),r.service.cwd?(p(),v(e(F),{key:1,icon:`ti ti-folder`,value:r.service.cwd,severity:`secondary`,class:`service-terminal__pill`},null,8,[`value`])):y(``,!0),x.value&&(x.value.state===`running`||x.value.state===`starting`)?(p(),v(e(F),{key:2,icon:`ti ti-clock`,value:Te(pe.value/1e3),severity:`secondary`,class:`service-terminal__pill`},null,8,[`value`])):y(``,!0)]),n(it,{visible:ye.value,"onUpdate:visible":i[4]||=e=>ye.value=e,log:ve.value,onViewProcess:De},null,8,[`visible`,`log`])],2))}}),[[`__scopeId`,`data-v-e44dc775`]]),Ot=5,kt=me;function At(e){return e+Math.random()*e*.3}function jt(e,n){let r=t(null),a=t(!1),o=t(!1),s=null,c=0,l=null;async function d(){if(!a.value){o.value=!0;try{let t=await X.process.metrics.query({agentId:e.value,processId:n.value});r.value=t}catch(e){console.error(`Failed to fetch initial metrics:`,Z(e))}finally{o.value=!1}f()}}function f(){a.value=!0,s=X.process.onMetrics.subscribe({agentId:e.value,processId:n.value},{onData(e){c=0,Y(`connected`),r.value=e},onError(e){console.error(`Metrics stream error:`,e),a.value=!1,s=null,p()}})}function p(){if(c>=Ot){console.warn(`Metrics stream: max retries (${Ot}) reached, giving up`),Y(`disconnected`);return}Y(`reconnecting`);let e=At(kt*2**c);c++,l=setTimeout(()=>{l=null,f()},e)}function m(){l&&=(clearTimeout(l),null),s&&=(s.unsubscribe(),null),a.value=!1,c=0}return i([e,n],([e,t],[n,r])=>{(e!==n||t!==r)&&a.value&&(m(),d())}),u(()=>{m()}),{metrics:r,isStreaming:a,isLoading:o,start:d,stop:m}}var Mt={class:`service-metrics`,"data-testid":`service-metrics`},Nt={key:1,class:`service-metrics__skeleton`},Pt={class:`metric-skeleton`},Ft={class:`metric-skeleton`},It={key:2,class:`service-metrics__no-data`},Lt={key:1,class:`service-metrics__no-process`},Rt=B(f({__name:`ServiceMetrics`,props:{service:{},processes:{}},setup(t){let r=t,i=d(()=>r.processes.find(e=>e.state===`running`||e.state===`starting`)??r.processes[0]??null),s=d(()=>i.value?.agentId??``),l=d(()=>i.value?.id??``),{t:f}=S(),{metrics:h,isLoading:_,start:y,stop:b}=jt(s,l);return c(()=>{i.value&&y()}),u(()=>{b()}),(t,r)=>(p(),o(`div`,Mt,[i.value?(p(),o(m,{key:0},[e(h)?(p(),v(Oe,{key:0,cpu:e(h).cpu,memory:e(h).memory},null,8,[`cpu`,`memory`])):e(_)?(p(),o(`div`,Nt,[a(`div`,Pt,[n(e(D),{width:`4rem`,height:`0.75rem`,class:`mb-2`}),n(e(D),{width:`3rem`,height:`1.75rem`,class:`mb-3`}),n(e(D),{width:`100%`,height:`6px`,"border-radius":`4px`})]),a(`div`,Ft,[n(e(D),{width:`4rem`,height:`0.75rem`,class:`mb-2`}),n(e(D),{width:`3rem`,height:`1.75rem`,class:`mb-3`}),n(e(D),{width:`6rem`,height:`0.65rem`})])])):(p(),o(`div`,It,g(e(f)(`serviceMetrics.noData`)),1))],64)):(p(),o(`div`,Lt,[r[0]||=a(`i`,{class:`ti ti-info-circle`},null,-1),a(`span`,null,g(e(f)(`serviceMetrics.notRunning`)),1)]))]))}}),[[`__scopeId`,`data-v-4ff9fccd`]]),zt=`runeya:debug`;function Bt(){if(typeof window>`u`)return null;let e=new URLSearchParams(window.location.search).get(`debug`);return e===`1`||e===`true`?!0:e===`0`||e===`false`?!1:null}var Vt=Bt();if(Vt!==null)try{localStorage.setItem(zt,String(Vt))}catch{}function Ht(){try{return localStorage.getItem(zt)===`true`}catch{return!1}}var Ut=t(Ht());function Wt(){function e(){Ut.value=!Ut.value;try{localStorage.setItem(zt,String(Ut.value))}catch{}}return{isDebug:Ut,toggle:e}}var Gt={class:`config-general`},Kt={class:`config-card`},qt={class:`config-card__header`},Jt={class:`config-card`},Yt={class:`config-card__header`},Xt={class:`config-card__hint`},Zt={class:`config-card`},Qt={class:`config-card`},$t={class:`config-card__header`},en={class:`config-card__hint`},tn={class:`config-card`},nn={class:`config-card__header`},rn={class:`config-card__hint`},an={class:`config-card`},on={class:`config-card__header`},sn={class:`config-card__hint`},cn={class:`config-card`},ln={class:`config-card__header`},un={class:`config-card__hint`},dn={class:`config-card`},fn={class:`config-card__header`},pn={class:`config-card__hint`},mn={class:`config-card`},hn={class:`config-card__header`},gn={class:`config-card__hint`},_n={class:`config-card__hint`},vn={class:`config-card`},yn={class:`config-card__header`},bn={class:`config-card__hint`},xn={class:`config-meta`},Sn={class:`config-card config-card--inline`},Cn={class:`config-card__header`},wn={class:`config-card config-card--inline`},Tn={class:`config-card__header`},En=150,Dn=B(f({__name:`ServiceConfigGeneral`,props:{service:{}},emits:[`save`],setup(c,{emit:l}){let{t:u}=S(),f=_e(),h=ue(),_=t([]);function v(e){let t=e.query.trim().toLowerCase(),n=new Set(A.value.groups);_.value=O.value.filter(e=>!n.has(e)&&(!t||e.toLowerCase().includes(t)))}function y(e,t){let n=t.trim();if(n){if(e===`ports`){let e=Number(n);if(!Number.isInteger(e)||e<1||e>65535||A.value.ports.includes(String(e)))return;A.value.ports=[...A.value.ports,String(e)]}else{if(A.value.groups.includes(n))return;A.value.groups=[...A.value.groups,n]}R()}}function C(e){let t=e.target;y(`groups`,t.value),t.value=``,_.value=[]}function w(e,t){let n=e.target;n&&typeof n.value==`string`&&n.value.trim()&&setTimeout(()=>{y(t,n.value),n.value=``},En)}let T=c,E=l,D=d(()=>h.projects.find(e=>e.serviceIds.includes(T.service.id)&&(e.orgId??null)===(T.service.orgId??null))??null),O=d(()=>{let e=D.value;if(!e)return[];let t=new Set;for(let n of e.serviceIds)for(let e of f.getById(n)?.groups??[])t.add(e);return[...t].sort((e,t)=>e.localeCompare(t))});function k(e){return Object.entries(e??{}).map(([e,t])=>({key:e,value:t}))}let A=t({name:T.service.name,cwd:T.service.cwd??``,ports:(T.service.ports??[]).map(String),groups:[...T.service.groups??[]],description:T.service.description??``,docsPath:T.service.docsPath??``,url:T.service.url??``,openapiUrl:T.service.openapiUrl??``,gitRemote:T.service.git?.remote??``,gitHome:T.service.git?.home??``,autoRestart:T.service.autoRestart,clearLogsOnStart:T.service.clearLogsOnStart??!1}),M=t(k(T.service.meta));i(()=>T.service,e=>{A.value={name:e.name,cwd:e.cwd??``,ports:(e.ports??[]).map(String),groups:[...e.groups??[]],description:e.description??``,docsPath:e.docsPath??``,url:e.url??``,openapiUrl:e.openapiUrl??``,gitRemote:e.git?.remote??``,gitHome:e.git?.home??``,autoRestart:e.autoRestart,clearLogsOnStart:e.clearLogsOnStart??!1},M.value=k(e.meta)});function N(){M.value=[...M.value,{key:``,value:``}]}function P(e){M.value=M.value.filter((t,n)=>n!==e)}function F(e,t,n){M.value=M.value.map((r,i)=>i===e?{...r,[t]:n}:r)}function I(){let e={};for(let{key:t,value:n}of M.value){let r=t.trim();r&&(e[r]=n)}return{name:A.value.name,cwd:A.value.cwd||null,ports:A.value.ports.map(Number).filter(e=>e>0&&e<=65535),groups:A.value.groups,description:A.value.description,docsPath:A.value.docsPath??``,url:A.value.url,openapiUrl:A.value.openapiUrl,git:A.value.gitRemote||A.value.gitHome?{remote:A.value.gitRemote||void 0,home:A.value.gitHome||void 0}:null,autoRestart:A.value.autoRestart,clearLogsOnStart:A.value.clearLogsOnStart,meta:Object.keys(e).length>0?e:null}}let L=null;function R(){L&&clearTimeout(L),L=setTimeout(()=>{E(`save`,I()),L=null},150)}return(t,i)=>(p(),o(`div`,Gt,[a(`div`,Kt,[a(`div`,qt,[i[14]||=a(`i`,{class:`ti ti-tag`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.name`)),1)]),n(e(j),{modelValue:A.value.name,"onUpdate:modelValue":i[0]||=e=>A.value.name=e,class:`config-card__input`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,Jt,[a(`div`,Yt,[i[15]||=a(`i`,{class:`ti ti-folder`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.workingDirectory`)),1)]),n(e(j),{modelValue:A.value.cwd,"onUpdate:modelValue":i[1]||=e=>A.value.cwd=e,class:`config-card__input`,placeholder:`.`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),a(`small`,Xt,g(e(u)(`serviceConfigGeneral.cwdHint`)),1)]),a(`div`,Zt,[i[16]||=a(`div`,{class:`config-card__header`},[a(`i`,{class:`ti ti-file-pencil`}),a(`span`,null,`Dossier de documentation (wiki)`)],-1),n(e(j),{modelValue:A.value.docsPath,"onUpdate:modelValue":i[2]||=e=>A.value.docsPath=e,class:`config-card__input`,placeholder:`(défaut : même que cwd)`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),i[17]||=a(`small`,{class:`config-card__hint`},[r(` Chemin relatif au cwd du service (ex. `),a(`code`,null,`docs`),r(`) ou absolu. Si vide, utilise le cwd. `)],-1)]),a(`div`,Qt,[a(`div`,$t,[i[18]||=a(`i`,{class:`ti ti-world`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.ports`)),1)]),n(e(ne),{modelValue:A.value.ports,"onUpdate:modelValue":i[3]||=e=>A.value.ports=e,multiple:``,typeahead:!1,class:`config-card__input`,placeholder:e(u)(`serviceConfigGeneral.portsPlaceholder`),onChange:R,onBlur:i[4]||=e=>w(e,`ports`)},null,8,[`modelValue`,`placeholder`]),a(`small`,en,g(e(u)(`serviceConfigGeneral.portsHint`)),1)]),a(`div`,tn,[a(`div`,nn,[i[19]||=a(`i`,{class:`ti ti-layout-grid`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.groups`)),1)]),n(e(ne),{modelValue:A.value.groups,"onUpdate:modelValue":i[5]||=e=>A.value.groups=e,multiple:``,suggestions:_.value,"complete-on-focus":!0,class:`config-card__input`,placeholder:e(u)(`serviceConfigGeneral.groupsPlaceholder`),onComplete:v,onChange:R,onKeydown:b(C,[`enter`]),onBlur:i[6]||=e=>w(e,`groups`)},null,8,[`modelValue`,`suggestions`,`placeholder`]),a(`small`,rn,g(e(u)(`serviceConfigGeneral.groupsHint`)),1)]),a(`div`,an,[a(`div`,on,[i[20]||=a(`i`,{class:`ti ti-info-circle`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.description`)),1)]),n(e(oe),{modelValue:A.value.description,"onUpdate:modelValue":i[7]||=e=>A.value.description=e,class:`config-card__input`,rows:2,onBlur:R},null,8,[`modelValue`]),a(`small`,sn,g(e(u)(`serviceConfigGeneral.descriptionHint`)),1)]),a(`div`,cn,[a(`div`,ln,[i[21]||=a(`i`,{class:`ti ti-external-link`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.url`)),1)]),n(e(j),{modelValue:A.value.url,"onUpdate:modelValue":i[8]||=e=>A.value.url=e,class:`config-card__input`,placeholder:`https://...`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),a(`small`,un,g(e(u)(`serviceConfigGeneral.urlHint`)),1)]),a(`div`,dn,[a(`div`,fn,[i[22]||=a(`i`,{class:`ti ti-book`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.openapiUrl`)),1)]),n(e(j),{modelValue:A.value.openapiUrl,"onUpdate:modelValue":i[9]||=e=>A.value.openapiUrl=e,class:`config-card__input`,placeholder:`https://.../swagger.json`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),a(`small`,pn,g(e(u)(`serviceConfigGeneral.openapiUrlHint`)),1)]),a(`div`,mn,[a(`div`,hn,[i[23]||=a(`i`,{class:`ti ti-brand-github`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.git`)),1)]),n(e(j),{modelValue:A.value.gitRemote,"onUpdate:modelValue":i[10]||=e=>A.value.gitRemote=e,class:`config-card__input`,placeholder:`git@github.com:org/repo.git`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),a(`small`,gn,g(e(u)(`serviceConfigGeneral.gitRemoteHint`)),1),n(e(j),{modelValue:A.value.gitHome,"onUpdate:modelValue":i[11]||=e=>A.value.gitHome=e,class:`config-card__input`,style:{"margin-top":`0.5rem`},placeholder:`https://github.com/org/repo`,onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),a(`small`,_n,g(e(u)(`serviceConfigGeneral.gitHomeHint`)),1)]),a(`div`,vn,[a(`div`,yn,[i[24]||=a(`i`,{class:`ti ti-hash`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.meta`)),1)]),a(`small`,bn,g(e(u)(`serviceConfigGeneral.metaHint`)),1),a(`div`,xn,[(p(!0),o(m,null,s(M.value,(t,r)=>(p(),o(`div`,{key:r,class:`config-meta__row`},[n(e(j),{"model-value":t.key,placeholder:e(u)(`serviceConfigGeneral.metaKeyPlaceholder`),class:`config-meta__input`,"onUpdate:modelValue":e=>F(r,`key`,e),onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(j),{"model-value":t.value,placeholder:e(u)(`serviceConfigGeneral.metaValuePlaceholder`),class:`config-meta__input config-meta__input--wide`,"onUpdate:modelValue":e=>F(r,`value`,e),onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{P(r),R()}},null,8,[`onClick`])]))),128)),n(e(z),{label:e(u)(`serviceConfigGeneral.addEntry`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,class:`config-meta__add`,onClick:N},null,8,[`label`])])]),a(`div`,Sn,[a(`div`,Cn,[i[25]||=a(`i`,{class:`ti ti-refresh`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.autoRestart`)),1)]),n(e(H),{modelValue:A.value.autoRestart,"onUpdate:modelValue":i[12]||=e=>A.value.autoRestart=e,onChange:R},null,8,[`modelValue`])]),a(`div`,wn,[a(`div`,Tn,[i[26]||=a(`i`,{class:`ti ti-trash`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.clearLogs`)),1)]),n(e(H),{modelValue:A.value.clearLogsOnStart,"onUpdate:modelValue":i[13]||=e=>A.value.clearLogsOnStart=e,onChange:R},null,8,[`modelValue`])])]))}}),[[`__scopeId`,`data-v-2ad058bc`]]),On={class:`docker-config`},kn={class:`docker-config__section`},An={for:`docker-mode-image`,class:`docker-config__section-title`},jn={class:`docker-config__mode-option`},Mn={class:`docker-config__mode-option`},Nn={key:0,class:`docker-config__section`},Pn={for:`docker-image`,class:`docker-config__label`},Fn={class:`docker-config__section`},In={class:`docker-config__section`},Ln={for:`docker-build-context`,class:`docker-config__label`},Rn={class:`docker-config__section`},zn={for:`docker-add-build-arg`,class:`docker-config__label`},Bn={class:`docker-config__kv-list`},Vn={class:`docker-config__section`},Hn={for:`docker-target-stage`,class:`docker-config__label`},Un={class:`docker-config__section`},Wn={for:`docker-user`,class:`docker-config__section-title`},Gn={class:`docker-config__section`},Kn={for:`docker-user`,class:`docker-config__label`},qn={class:`docker-config__section`},Jn={for:`docker-network-mode`,class:`docker-config__label`},Yn={key:2,class:`docker-config__section`},Xn={for:`docker-add-port`,class:`docker-config__label`},Zn={class:`docker-config__list`},Qn={class:`docker-config__section`},$n={for:`docker-add-volume`,class:`docker-config__label`},er={class:`docker-config__checkbox-row`},tr={for:`mountRootpath`,class:`docker-config__checkbox-label`},nr={class:`docker-config__list`},rr={class:`docker-config__section`},ir={class:`docker-config__checkbox-row`},ar={for:`useNativeCommand`,class:`docker-config__checkbox-label`},or={key:0,class:`docker-config__shell-row`},sr={for:`docker-native-shell`,class:`docker-config__label`},cr={class:`docker-config__hint`},lr={class:`docker-config__mode-option`},ur={class:`docker-config__mode-option`},dr={class:`docker-config__section`},fr={for:`docker-entrypoint`,class:`docker-config__label`},pr={class:`docker-config__section`},mr={for:`docker-command`,class:`docker-config__label`},hr={class:`docker-config__section`},gr={for:`docker-add-bootstrap`,class:`docker-config__section-title`},_r={class:`docker-config__hint-inline`},vr={class:`docker-config__bootstrap-row`},yr={class:`docker-config__bootstrap-field`},br=[`for`],xr={class:`docker-config__bootstrap-field`},Sr=[`for`],Cr={class:`docker-config__bootstrap-field docker-config__bootstrap-field--wide`},wr=[`for`],Tr={class:`docker-config__bootstrap-field`},Er=[`for`],Dr={class:`docker-config__bootstrap-actions`},Or={class:`docker-config__section`},kr=B(f({__name:`ServiceConfigDocker`,props:{service:{}},emits:[`save`],setup(i,{emit:c}){let{t:l}=S(),u=i,d=c,f=u.service.dockerConfig??{},_=t(f.dockerfile?`build`:`image`),C=t(f.image??``),w=t(f.dockerfile??``),T=t(f.buildContext??``),E=t(Object.entries(f.buildArgs??{}).map(([e,t])=>({key:e,value:t}))),D=t(f.targetStage??``),A=t(f.networkMode??`host`),N=t([...f.ports??[]]),F=t([...f.volumes??[]]),I=t(f.mountRootpath??!1),R=t(f.entrypoint??``),ee=t(f.command??``),B=t(f.user??``),V=t(f.useNativeCommand??!1),te=t(f.nativeCommandMode??`isolated`),ne=t(f.nativeShell??`sh`),re=[{label:`sh (POSIX)`,value:`sh`},{label:`bash`,value:`bash`},{label:`zsh`,value:`zsh`},{label:`ash (Alpine)`,value:`ash`}],H=t([...f.bootstrapCommands??[]]),U=t(!1),ie=[{label:`Host (--network host)`,value:`host`},{label:`Bridge`,value:`bridge`}];function W(){E.value=[...E.value,{key:``,value:``}]}function G(e){E.value=E.value.filter((t,n)=>n!==e)}function ae(e,t,n){E.value=E.value.map((r,i)=>i===e?{...r,[t]:n}:r)}function oe(){N.value=[...N.value,``]}function K(e){N.value=N.value.filter((t,n)=>n!==e)}function q(e,t){N.value=N.value.map((n,r)=>r===e?t:n)}function se(){F.value=[...F.value,``]}function J(e){F.value=F.value.filter((t,n)=>n!==e)}function Y(e,t){F.value=F.value.map((n,r)=>r===e?t:n)}function le(){H.value=[...H.value,{id:Ce(),label:`Bootstrap`,entrypoint:`/bin/sh`,command:`-c ""`,user:void 0}]}function X(e){H.value=H.value.filter((t,n)=>n!==e)}function ue(e,t,n){H.value=H.value.map((r,i)=>i===e?{...r,[t]:n===``?void 0:n}:r)}function de(e,t){let n=[...H.value],r=e+t;r<0||r>=n.length||([n[e],n[r]]=[n[r],n[e]],H.value=n)}let Z=null;function Q(){Z&&clearTimeout(Z),Z=setTimeout(()=>{let e={};for(let{key:t,value:n}of E.value)t.trim()&&(e[t.trim()]=n);d(`save`,{image:_.value===`image`&&C.value||void 0,dockerfile:_.value===`build`&&w.value||void 0,buildContext:T.value||void 0,buildArgs:e,targetStage:D.value||void 0,networkMode:A.value,ports:N.value.filter(Boolean),volumes:F.value.filter(Boolean),mountRootpath:I.value,entrypoint:R.value||void 0,command:ee.value||void 0,user:B.value||void 0,useNativeCommand:V.value,nativeCommandMode:te.value,nativeShell:ne.value,bootstrapCommands:H.value}),Z=null},150)}function pe(e){X(e),Q()}function me(e,t){de(e,t),Q()}function he(e){G(e),Q()}function ge(e){K(e),Q()}function _e(e){J(e),Q()}return(t,i)=>(p(),o(`div`,On,[a(`div`,kn,[a(`label`,An,g(e(l)(`serviceConfigDocker.imageSource`)),1),n(e(O),{modelValue:_.value,"onUpdate:modelValue":i[0]||=e=>_.value=e,class:`docker-config__mode-toggle`,orientation:`horizontal`,onChange:Q},{default:h(()=>[a(`label`,jn,[n(e(k),{"input-id":`docker-mode-image`,value:`image`}),r(` `+g(e(l)(`serviceConfigDocker.pullImage`)),1)]),a(`label`,Mn,[n(e(k),{value:`build`}),r(` `+g(e(l)(`serviceConfigDocker.buildDockerfile`)),1)])]),_:1},8,[`modelValue`])]),_.value===`image`?(p(),o(`div`,Nn,[a(`label`,Pn,g(e(l)(`serviceConfigDocker.image`)),1),n(e(j),{id:`docker-image`,modelValue:C.value,"onUpdate:modelValue":i[1]||=e=>C.value=e,placeholder:e(l)(`serviceConfigDocker.imagePlaceholder`),class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])):y(``,!0),_.value===`build`?(p(),o(m,{key:1},[a(`div`,Fn,[i[16]||=a(`label`,{for:`docker-dockerfile-btn`,class:`docker-config__label`},`Dockerfile`,-1),n(e(z),{id:`docker-dockerfile-btn`,label:e(l)(`serviceConfigDocker.editDockerfile`),icon:`ti ti-file-pencil`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:i[2]||=e=>U.value=!0},null,8,[`label`]),n(e(L),{visible:U.value,"onUpdate:visible":i[5]||=e=>U.value=e,header:e(l)(`serviceConfigDocker.editDockerfile`),modal:``,style:{width:`800px`}},{footer:h(()=>[n(e(z),{label:e(l)(`serviceConfigDocker.closeDockerfile`),icon:`ti ti-x`,onClick:i[4]||=()=>{U.value=!1,Q()}},null,8,[`label`])]),default:h(()=>[n(fe,{modelValue:w.value,"onUpdate:modelValue":i[3]||=e=>w.value=e,language:`dockerfile`,style:{height:`400px`}},null,8,[`modelValue`])]),_:1},8,[`visible`,`header`])]),a(`div`,In,[a(`label`,Ln,g(e(l)(`serviceConfigDocker.buildContext`)),1),n(e(j),{id:`docker-build-context`,modelValue:T.value,"onUpdate:modelValue":i[6]||=e=>T.value=e,placeholder:`.`,class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,Rn,[a(`label`,zn,g(e(l)(`serviceConfigDocker.buildArgs`)),1),a(`div`,Bn,[(p(!0),o(m,null,s(E.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__kv-row`},[n(e(j),{"model-value":t.key,placeholder:e(l)(`serviceConfigDocker.argNamePlaceholder`),class:`docker-config__kv-input`,"onUpdate:modelValue":e=>ae(r,`key`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(j),{"model-value":t.value,placeholder:e(l)(`serviceConfigDocker.argValuePlaceholder`),class:`docker-config__kv-input`,"onUpdate:modelValue":e=>ae(r,`value`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>he(r)},null,8,[`onClick`])]))),128)),n(e(z),{id:`docker-add-build-arg`,label:e(l)(`serviceConfigDocker.addBuildArg`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:W},null,8,[`label`])])]),a(`div`,Vn,[a(`label`,Hn,g(e(l)(`serviceConfigDocker.targetStage`)),1),n(e(j),{id:`docker-target-stage`,modelValue:D.value,"onUpdate:modelValue":i[7]||=e=>D.value=e,placeholder:e(l)(`serviceConfigDocker.targetStagePlaceholder`),class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])],64)):y(``,!0),n(e(ce)),a(`div`,Un,[a(`label`,Wn,g(e(l)(`serviceConfigDocker.runtimeConfig`)),1)]),a(`div`,Gn,[a(`label`,Kn,g(e(l)(`serviceConfigDocker.userGroup`)),1),n(e(j),{id:`docker-user`,modelValue:B.value,"onUpdate:modelValue":i[8]||=e=>B.value=e,placeholder:e(l)(`serviceConfigDocker.userGroupHint`),class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),a(`div`,qn,[a(`label`,Jn,g(e(l)(`serviceConfigDocker.networkMode`)),1),n(e(P),{"input-id":`docker-network-mode`,modelValue:A.value,"onUpdate:modelValue":i[9]||=e=>A.value=e,options:ie,"option-label":`label`,"option-value":`value`,class:`docker-config__select`,onChange:Q},null,8,[`modelValue`])]),A.value===`bridge`?(p(),o(`div`,Yn,[a(`label`,Xn,g(e(l)(`serviceConfigDocker.portMappings`)),1),a(`div`,Zn,[(p(!0),o(m,null,s(N.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__list-row`},[n(e(j),{"model-value":t,placeholder:e(l)(`serviceConfigDocker.portPlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>q(r,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>ge(r)},null,8,[`onClick`])]))),128)),n(e(z),{id:`docker-add-port`,label:e(l)(`serviceConfigDocker.addPort`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:oe},null,8,[`label`])])])):y(``,!0),a(`div`,Qn,[a(`label`,$n,g(e(l)(`serviceConfigDocker.volumes`)),1),a(`div`,er,[n(e(M),{modelValue:I.value,"onUpdate:modelValue":i[10]||=e=>I.value=e,binary:!0,"input-id":`mountRootpath`,onChange:Q},null,8,[`modelValue`]),a(`label`,tr,g(e(l)(`serviceConfigDocker.autoMount`)),1)]),a(`div`,nr,[(p(!0),o(m,null,s(F.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__list-row`},[n(e(j),{"model-value":t,placeholder:e(l)(`serviceConfigDocker.volumePlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>Y(r,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>_e(r)},null,8,[`onClick`])]))),128)),n(e(z),{id:`docker-add-volume`,label:e(l)(`serviceConfigDocker.addVolume`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:se},null,8,[`label`])])]),n(e(ce)),a(`div`,rr,[a(`div`,ir,[n(e(M),{modelValue:V.value,"onUpdate:modelValue":i[11]||=e=>V.value=e,binary:!0,"input-id":`useNativeCommand`,onChange:Q},null,8,[`modelValue`]),a(`label`,ar,g(e(l)(`serviceConfigDocker.runNative`)),1)]),i[19]||=a(`span`,{class:`docker-config__hint`},` When enabled, the service command is executed directly inside the container (ignores CMD override below). `,-1),V.value?(p(),o(`div`,or,[a(`label`,sr,g(e(l)(`serviceConfigDocker.shell`)),1),n(e(P),{"input-id":`docker-native-shell`,modelValue:ne.value,"onUpdate:modelValue":i[12]||=e=>ne.value=e,options:re,"option-label":`label`,"option-value":`value`,class:`docker-config__select docker-config__select--small`,editable:``,placeholder:e(l)(`serviceConfigDocker.shellPlaceholder`),onChange:Q},null,8,[`modelValue`,`placeholder`]),a(`span`,cr,[r(g(e(l)(`serviceConfigDocker.shellHint`))+` (`,1),i[17]||=a(`code`,null,`shell -c '...'`,-1),i[18]||=r(`)`,-1)])])):y(``,!0),V.value?(p(),v(e(O),{key:1,modelValue:te.value,"onUpdate:modelValue":i[13]||=e=>te.value=e,class:`docker-config__mode-toggle docker-config__mode-toggle--indented`,onChange:Q},{default:h(()=>[a(`label`,lr,[n(e(k),{value:`isolated`}),r(` `+g(e(l)(`serviceConfigDocker.isolated`)),1)]),a(`label`,ur,[n(e(k),{value:`shared`}),r(` `+g(e(l)(`serviceConfigDocker.shared`)),1)])]),_:1},8,[`modelValue`])):y(``,!0)]),V.value?y(``,!0):(p(),o(m,{key:3},[i[20]||=a(`div`,{class:`docker-config__section`},[a(`label`,{for:`docker-entrypoint`,class:`docker-config__section-title`},`Override`)],-1),a(`div`,dr,[a(`label`,fr,g(e(l)(`serviceConfigDocker.entrypoint`)),1),n(e(j),{id:`docker-entrypoint`,modelValue:R.value,"onUpdate:modelValue":i[14]||=e=>R.value=e,placeholder:e(l)(`serviceConfigDocker.entrypointPlaceholder`),class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),a(`div`,pr,[a(`label`,mr,g(e(l)(`serviceConfigDocker.cmdOverride`)),1),n(e(j),{id:`docker-command`,modelValue:ee.value,"onUpdate:modelValue":i[15]||=e=>ee.value=e,placeholder:e(l)(`serviceConfigDocker.cmdPlaceholder`),class:`docker-config__input`,onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])],64)),n(e(ce)),a(`div`,hr,[a(`label`,gr,[r(g(e(l)(`serviceConfigDocker.bootstrapCommands`))+` `,1),a(`span`,_r,` — `+g(e(l)(`serviceConfigDocker.bootstrapCommandsHint`)),1)])]),(p(!0),o(m,null,s(H.value,(t,r)=>(p(),o(`div`,{key:t.id,class:`docker-config__bootstrap-card`},[a(`div`,vr,[a(`div`,yr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-label-${r}`},`Label`,8,br),n(e(j),{id:`docker-bootstrap-label-${r}`,"model-value":t.label,placeholder:e(l)(`serviceConfigDocker.bootstrapLabelPlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>ue(r,`label`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,xr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-entrypoint-${r}`},`Entrypoint`,8,Sr),n(e(j),{id:`docker-bootstrap-entrypoint-${r}`,"model-value":t.entrypoint??``,placeholder:`/bin/sh`,class:`docker-config__input`,"onUpdate:modelValue":e=>ue(r,`entrypoint`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Cr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-command-${r}`},`Command`,8,wr),n(e(j),{id:`docker-bootstrap-command-${r}`,"model-value":t.command,placeholder:`-c "npm install"`,class:`docker-config__input`,"onUpdate:modelValue":e=>ue(r,`command`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Tr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-user-${r}`},`User:Group`,8,Er),n(e(j),{id:`docker-bootstrap-user-${r}`,"model-value":t.user??``,placeholder:e(l)(`serviceConfigDocker.userGroupHint`),class:`docker-config__input`,"onUpdate:modelValue":e=>ue(r,`user`,e),onBlur:Q,onKeydown:b(x(Q,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Dr,[n(e(z),{icon:`ti ti-arrow-up`,variant:`text`,rounded:``,size:`small`,disabled:r===0,onClick:e=>me(r,-1)},null,8,[`disabled`,`onClick`]),n(e(z),{icon:`ti ti-arrow-down`,variant:`text`,rounded:``,size:`small`,disabled:r===H.value.length-1,onClick:e=>me(r,1)},null,8,[`disabled`,`onClick`]),n(e(z),{icon:`ti ti-x`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>pe(r)},null,8,[`onClick`])])])]))),128)),a(`div`,Or,[n(e(z),{id:`docker-add-bootstrap`,label:e(l)(`serviceConfigDocker.addBootstrapCommand`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:le},null,8,[`label`])])]))}}),[[`__scopeId`,`data-v-1a62039a`]]),Ar={class:`config-commands`},jr={class:`config-commands__execution`},Mr={class:`config-card config-card--execution`},Nr={class:`config-card__header`},Pr={class:`config-card__hint`},Fr={class:`config-card config-card--execution`},Ir={class:`config-card__header`},Lr={key:0,class:`runner-option`},Rr={class:`runner-option`},zr={class:`config-commands__tab-content`},Br={key:0,class:`config-commands__empty`},Vr={class:`config-commands__row`},Hr={class:`config-commands__field`},Ur=[`for`],Wr={class:`config-commands__field config-commands__field--wide`},Gr=[`for`],Kr={class:`config-commands__field`},qr=[`for`],Jr={class:`config-commands__actions-cell`},Yr={class:`config-commands__footer`},Xr={class:`config-commands__tab-content`},Zr=`__inherit__`,Qr=B(f({__name:`ServiceConfigCommands`,props:{service:{}},emits:[`save`,`dockerSave`],setup(r,{emit:c}){let u=r,f=c,{t:_}=S(),v=ve(),C=null,w=t({agentId:u.service.agentId??Zr,runner:u.service.runner});i(()=>u.service,e=>{w.value={agentId:e.agentId??Zr,runner:e.runner}});let T=d(()=>[{label:_(`serviceConfigCommands.native`),value:`native`,icon:`ti ti-device-desktop`},{label:_(`serviceConfigCommands.docker`),value:`docker`,icon:`ti ti-box`}]),E=d(()=>T.value.find(e=>e.value===w.value.runner)?.icon??`ti ti-box`),D=d(()=>[{label:_(`serviceForm.agentInherit`),value:Zr},...v.agents.map(e=>({label:`${e.config.name} (${e.status.connected?_(`serviceConfigCommands.online`):_(`serviceConfigCommands.offline`)})`,value:e.config.id}))]),O=t([...u.service.commands??[]]);i(()=>u.service,e=>{C||(O.value=[...e.commands??[]])});function k(){O.value=[...O.value,{id:Ce(),label:``,command:``,cwd:void 0,shell:!0}]}function A(e){O.value=O.value.filter((t,n)=>n!==e)}function M(e,t,n){O.value=O.value.map((r,i)=>i===e?{...r,[t]:n===``?void 0:n}:r)}function N(){C&&clearTimeout(C),C=setTimeout(()=>{f(`save`,{agentId:w.value.agentId===Zr?null:w.value.agentId||null,runner:w.value.runner,commands:O.value}),C=null},150)}function F(e){f(`dockerSave`,e)}function I(e){A(e),N()}return(t,i)=>(p(),o(`div`,Ar,[a(`div`,jr,[a(`div`,Mr,[a(`div`,Nr,[i[2]||=a(`i`,{class:`ti ti-server`},null,-1),a(`span`,null,g(e(_)(`serviceConfigCommands.agent`)),1)]),n(e(P),{modelValue:w.value.agentId,"onUpdate:modelValue":i[0]||=e=>w.value.agentId=e,options:D.value,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:N},null,8,[`modelValue`,`options`]),a(`small`,Pr,g(e(_)(`serviceForm.agentHintEdit`)),1)]),a(`div`,Fr,[a(`div`,Ir,[a(`i`,{class:l(E.value)},null,2),a(`span`,null,g(e(_)(`serviceConfigCommands.runner`)),1)]),n(e(P),{modelValue:w.value.runner,"onUpdate:modelValue":i[1]||=e=>w.value.runner=e,options:T.value,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:N},{value:h(e=>[e.value?(p(),o(`div`,Lr,[a(`i`,{class:l(T.value.find(t=>t.value===e.value)?.icon)},null,2),a(`span`,null,g(T.value.find(t=>t.value===e.value)?.label),1)])):y(``,!0)]),option:h(e=>[a(`div`,Rr,[a(`i`,{class:l(e.option.icon)},null,2),a(`span`,null,g(e.option.label),1)])]),_:1},8,[`modelValue`,`options`])])]),n(e(se),{value:`0`},{default:h(()=>[n(e(ee),null,{default:h(()=>[n(e(J),{value:`0`},{default:h(()=>[i[3]||=a(`i`,{class:`ti ti-device-desktop tab-icon`},null,-1),a(`span`,null,g(e(_)(`serviceConfigCommands.native`)),1)]),_:1}),n(e(J),{value:`1`},{default:h(()=>[i[4]||=a(`i`,{class:`ti ti-box tab-icon`},null,-1),a(`span`,null,g(e(_)(`serviceConfigCommands.docker`)),1)]),_:1})]),_:1}),n(e(q),null,{default:h(()=>[n(e(R),{value:`0`},{default:h(()=>[a(`div`,zr,[O.value.length===0?(p(),o(`div`,Br,[a(`p`,null,g(e(_)(`serviceConfigCommands.noCommands`)),1)])):y(``,!0),(p(!0),o(m,null,s(O.value,(t,r)=>(p(),o(`div`,{key:t.id,class:`config-card`},[a(`div`,Vr,[a(`div`,Hr,[a(`label`,{class:`config-commands__label`,for:`cmd-label-${r}`},g(e(_)(`serviceConfigCommands.labelPlaceholder`)),9,Ur),n(e(j),{id:`cmd-label-${r}`,"model-value":t.label,placeholder:e(_)(`serviceConfigCommands.labelPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>M(r,`label`,e),onBlur:N,onKeydown:b(x(N,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Wr,[a(`label`,{class:`config-commands__label`,for:`cmd-command-${r}`},g(e(_)(`serviceConfigCommands.commandPlaceholder`)),9,Gr),n(e(j),{id:`cmd-command-${r}`,"model-value":t.command,placeholder:`e.g. npm start`,class:`config-card__input`,"onUpdate:modelValue":e=>M(r,`command`,e),onBlur:N,onKeydown:b(x(N,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Kr,[a(`label`,{class:`config-commands__label`,for:`cmd-cwd-${r}`},`Working Dir (optional)`,8,qr),n(e(j),{id:`cmd-cwd-${r}`,"model-value":t.cwd??``,placeholder:e(_)(`serviceConfigCommands.cwdPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>M(r,`cwd`,e),onBlur:N,onKeydown:b(x(N,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Jr,[n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>I(r)},null,8,[`onClick`])])])]))),128)),a(`div`,Yr,[n(e(z),{label:e(_)(`serviceConfigCommands.addCommand`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:k},null,8,[`label`])])])]),_:1}),n(e(R),{value:`1`},{default:h(()=>[a(`div`,Xr,[n(kr,{service:r.service,onSave:F},null,8,[`service`])])]),_:1})]),_:1})]),_:1})]))}}),[[`__scopeId`,`data-v-4820790b`]]),$r={class:`config-env`,"data-testid":`config-env`},ei={key:0,class:`active-env-display`},ti={class:`active-env-label`},ni={key:1,class:`inheritance-toggle`},ri={class:`inheritance-label`},ii={class:`inherited-header`},ai={class:`inherited-row-key`},oi={class:`preview-key`},si={class:`value-row`},ci=[`onClick`],li=[`onClick`],ui={key:0,class:`secret-mask`},di={key:1,class:`preview-value`},fi={class:`config-env__header`},pi={class:`config-env__title`},mi={class:`config-env__actions`},hi={key:3,class:`variables-view`},gi={key:0},_i={key:1,class:`empty-state`},vi={class:`inherited-header`},yi={class:`passthrough-info`},bi={class:`preview-key`},xi={key:0,class:`preview-value`},Si={key:1,class:`passthrough-undefined`},Ci={key:4,class:`empty-state`},wi={key:5,class:`empty-state`},Ti={class:`editor-container`},Ei={key:0,class:`editor-env-banner`},Di={class:`editor-env-text`},Oi={class:`editor-section`,"data-testid":`variables-editor`},ki={key:0,class:`loading-container`},Ai={key:1,class:`preview-container`},ji={class:`preview-info`},Mi={class:`preview-key`},Ni={class:`value-row`},Pi=[`onClick`],Fi=[`onClick`],Ii={key:0,class:`secret-mask`},Li={key:1,class:`preview-value`},Ri=B(f({__name:`ServiceConfigEnv`,props:{service:{},projectId:{},activeEnvironmentId:{}},setup(s){let u=s,{t:f}=S(),m=N(),_=re(),b=de(),w=ue(),T=C(),E=xe(),D=d(()=>w.getByRef({id:u.projectId,orgId:T.activeOrgId})?.activeEnvironmentId??null),O=d(()=>b.findServiceEnvironment(u.service.id,D.value??``)),k=t(!1),j=t(!1),M=t(!1),P=t(!1),I=t(null),R=t(null),{suggestions:ee,meta:B,search:ne}=De(()=>R.value??I.value),U=t(new Set);function G(e){let t=new Set(U.value);t.has(e)?t.delete(e):t.add(e),U.value=t}let oe=t(null);function q(e,t){navigator.clipboard.writeText(t),oe.value=e,setTimeout(()=>{oe.value===e&&(oe.value=null)},1500)}let se=t({}),J=t(!1),{values:ce,agentEntry:Y,urlHost:le}=Te({projectId:()=>u.projectId,environmentId:()=>D.value,agentId:()=>$(u.service)??void 0}),Z=d(()=>{let e={...ce.value};Object.assign(e,ge(u.service.ports)),e[`service.NAME`]=u.service.name,e[`service.ID`]=u.service.id,Object.assign(e,he(u.service,le.value)),u.service.url&&(e[`service.BASE_URL`]=u.service.url);let t=fe(Y.value?.status?.cwd,Y.value?.status?.home);return t&&(e[`service.CWD`]=t),e});function fe(e,t){let n=(u.service.resolvedCwd??u.service.cwd??``).trim();return n?n.startsWith(`~/`)&&t?t+n.slice(1):n.includes(`$`)?null:n.startsWith(`/`)||/^[A-Za-z]:[\\/]/.test(n)?n:null:e??null}let pe=d(()=>Y.value?.config.passthroughEnv??[]),me=d(()=>pe.value.length>0);async function _e(){let e=$(u.service);if(!e||!me.value){se.value={};return}J.value=!0;try{se.value=await X.agent.getPassthroughEnv.query({id:e})}catch{se.value={}}finally{J.value=!1}}let ve=d(()=>pe.value.map(e=>({name:e,value:se.value[e]??null}))),ye=d(()=>!O.value||!D.value?!0:O.value.parentIds?.includes(D.value)??!0);async function be(e){if(O.value&&D.value){P.value=!0;try{await b.update({id:O.value.id,parentIds:e?[D.value]:[]}),await Me()}catch(e){m.add({severity:`error`,summary:f(`serviceConfigEnv.error`),detail:e.message??f(`serviceConfigEnv.failedToUpdateInheritance`),life:5e3})}finally{P.value=!1}}}let Se=d(()=>{let e=w.getByRef({id:u.projectId,orgId:T.activeOrgId});return e?.activeEnvironmentId?b.getById(e.activeEnvironmentId):null});function Ce(e){return!e||typeof e!=`object`?[]:Object.entries(e).map(([e,t])=>({variableId:e,key:t.key||e,slot:{value:t.value?.value??``,pre:t.value?.pre??``,post:t.value?.post??``,isSecret:t.value?.isSecret??!1}}))}let Oe=d(()=>I.value?Ce(I.value.variables):[]),ke=d(()=>{if(!O.value||!I.value?.sources)return Oe.value;let e=O.value.id;return Oe.value.filter(t=>I.value.sources[t.variableId]?.environmentId===e)}),Ae=d(()=>{if(!O.value||!I.value?.sources)return[];let e=O.value.id;return Oe.value.filter(t=>I.value.sources[t.variableId]?.environmentId!==e)}),je=d(()=>{if(!I.value?.sources)return{};let e={};for(let[t,n]of Object.entries(I.value.sources))e[t]={environmentId:n.environmentId,overridden:n.overridden,...n.resolvedFrom?{resolvedFrom:n.resolvedFrom}:{},...n.overriddenBy?{overriddenBy:n.overriddenBy}:{}};return e});async function Me(){if(O.value)try{I.value=await b.resolve(O.value.id)}catch(e){console.error(`Failed to resolve environment:`,e)}}async function Ne(){if(D.value)try{R.value=await b.resolve(D.value)}catch{}}async function Pe(){M.value=!0;try{await Le(),await Me(),j.value=!0}catch(e){m.add({severity:`error`,summary:f(`serviceConfigEnv.error`),detail:e.message??f(`serviceConfigEnv.failedToLoadPreview`),life:5e3})}finally{M.value=!1}}let Fe=d(()=>I.value?Object.entries(I.value.env).map(([e,t])=>({key:e,value:Object.entries(Z.value).reduce((e,[t,n])=>e.replaceAll(`{{${t}}}`,n),t)})):[]);function Ie(e,t){return t?`***`:e.length>50?e.substring(0,47)+`...`:e}async function Le(){if(O.value)return O.value;if(!D.value)return null;let e=Se.value;return e?(await b.create({name:`${u.service.name??u.service.id} — ${e.name}`,projectId:u.projectId,scope:`service`,reference:u.service.id,activateOn:D.value,parentIds:[D.value],variables:{}}),O.value):null}let Re=d(()=>{let e=E.getByService(u.service.id);return e.length>0?e[0]:null}),ze=d(()=>{let e=Re.value?.state;return e===`running`||e===`errored`});async function Be(){await Le(),k.value=!0,await Promise.all([Me(),Ne()])}function Ve(){if(k.value=!1,!ze.value||!Re.value)return;let e=Re.value.state===`running`?`restart`:`start`,t=u.service.name||u.service.id;_.require({message:f(e===`restart`?`serviceConfigEnv.restartConfirmMsg`:`serviceConfigEnv.startConfirmMsg`,{name:t}),header:f(e===`restart`?`serviceConfigEnv.restartTitle`:`serviceConfigEnv.startTitle`),icon:`ti ti-refresh`,acceptLabel:f(e===`restart`?`serviceConfigEnv.restartTitle`:`actions.start`),rejectLabel:f(`serviceConfigEnv.notNow`),accept:async()=>{try{let t=$(u.service);if(!t)return;e===`restart`?(await E.restart(t,u.service.id),m.add({severity:`success`,summary:f(`serviceConfigEnv.serviceRestarted`),life:3e3})):(await E.start(t,u.service.id),m.add({severity:`success`,summary:f(`serviceConfigEnv.serviceStarted`),life:3e3}))}catch(t){m.add({severity:`error`,summary:f(`serviceConfigEnv.error`),detail:t?.message?Q(t,f):f(`serviceConfigEnv.failedToAction`,{action:e}),life:5e3})}}})}return i(Se,async e=>{e&&await Promise.all([Me(),Ne()])}),i(()=>$(u.service),()=>{_e()}),c(async()=>{u.projectId&&await b.fetchAll(u.projectId),await Promise.all([Me(),Ne(),_e()])}),(t,i)=>(p(),o(`div`,$r,[D.value?(p(),o(`div`,ei,[a(`span`,ti,g(e(f)(`serviceConfigEnv.activeEnvironment`)),1),n(we,{"environment-id":D.value},null,8,[`environment-id`])])):y(``,!0),O.value&&Se.value?(p(),o(`div`,ni,[n(e(H),{"model-value":ye.value,disabled:P.value,"onUpdate:modelValue":be},null,8,[`model-value`,`disabled`]),a(`span`,ri,g(ye.value?e(f)(`serviceConfigEnv.inheritsFrom`,{name:Se.value.name}):e(f)(`serviceConfigEnv.isolated`,{name:Se.value.name})),1)])):y(``,!0),Ae.value.length>0?(p(),v(e(V),{key:2,class:`inherited-accordion`},{default:h(()=>[n(e(te),{value:`inherited`},{default:h(()=>[n(e(ie),null,{default:h(()=>[a(`span`,ii,[i[6]||=a(`i`,{class:`ti ti-arrow-down-left`},null,-1),r(` `+g(e(f)(`serviceConfigEnv.inheritedVars`))+` `,1),n(e(F),{value:String(Ae.value.length),severity:`secondary`,rounded:``},null,8,[`value`])])]),_:1}),n(e(ae),null,{default:h(()=>[n(e(W),{value:Ae.value,size:`small`,"show-headers":!1},{default:h(()=>[n(e(K),{style:{width:`35%`}},{body:h(({data:e})=>[a(`div`,ai,[a(`code`,oi,g(e.key),1),je.value[e.variableId]?(p(),v(we,{key:0,"environment-id":je.value[e.variableId].environmentId,class:`source-badge`},null,8,[`environment-id`])):y(``,!0)])]),_:1}),n(e(K),{style:{width:`65%`}},{body:h(({data:e})=>[a(`span`,si,[a(`span`,{class:`value-actions`,onClick:i[0]||=x(()=>{},[`stop`])},[e.slot.isSecret?(p(),o(`i`,{key:0,class:l([U.value.has(e.variableId)?`ti ti-eye-off`:`ti ti-eye`,`action-icon`]),onClick:t=>G(e.variableId)},null,10,ci)):y(``,!0),a(`i`,{class:l([oe.value===e.variableId?`ti ti-check`:`ti ti-copy`,`action-icon`]),onClick:t=>q(e.variableId,e.slot.pre+e.slot.value+e.slot.post)},null,10,li)]),e.slot.isSecret&&!U.value.has(e.variableId)?(p(),o(`span`,ui,`***`)):(p(),o(`code`,di,g(e.slot.pre)+g(e.slot.value)+g(e.slot.post),1))])]),_:1})]),_:1},8,[`value`])]),_:1})]),_:1})]),_:1})):y(``,!0),a(`div`,fi,[a(`h3`,pi,g(e(f)(`serviceConfigEnv.envVars`)),1),a(`div`,mi,[n(e(z),{label:e(f)(`serviceConfigEnv.editVariables`),icon:`ti ti-pencil`,size:`small`,variant:`outlined`,"data-testid":`env-edit-btn`,disabled:!D.value,onClick:Be},null,8,[`label`,`disabled`]),n(e(z),{label:e(f)(`serviceConfigEnv.preview`),icon:`ti ti-eye`,size:`small`,variant:`outlined`,severity:`secondary`,loading:M.value,disabled:!D.value,"data-testid":`env-preview-btn`,onClick:Pe},null,8,[`label`,`loading`,`disabled`])])]),O.value?(p(),o(`div`,hi,[ke.value.length>0?(p(),o(`div`,gi,[n(Ee,{"environment-id":O.value.id,sources:je.value,"resolved-env":{...R.value?.env??{},...I.value?.env??{}},"service-builtins":Z.value,editable:!1,"show-overrides":!0,"show-override-badge":!0,"show-delete":!1,"show-add-button":!1,onVariablesChanged:Me},null,8,[`environment-id`,`sources`,`resolved-env`,`service-builtins`])])):(p(),o(`div`,_i,[a(`p`,null,g(e(f)(`serviceConfigEnv.noVarsConfigured`)),1)])),me.value?(p(),v(e(V),{key:2,class:`inherited-accordion`},{default:h(()=>[n(e(te),{value:`passthrough`},{default:h(()=>[n(e(ie),null,{default:h(()=>[a(`span`,vi,[i[7]||=a(`i`,{class:`ti ti-world`},null,-1),r(` `+g(e(f)(`agentPage.passthrough.titleShort`))+` `,1),n(e(F),{value:String(pe.value.length),severity:`secondary`,rounded:``},null,8,[`value`])])]),_:1}),n(e(ae),null,{default:h(()=>[a(`p`,yi,g(e(f)(`serviceConfigEnv.passthroughInfo`)),1),J.value?(p(),v(e(A),{key:0,style:{width:`24px`,height:`24px`}})):(p(),v(e(W),{key:1,value:ve.value,stripedRows:``,size:`small`},{default:h(()=>[n(e(K),{field:`name`,header:e(f)(`common.key`),style:{width:`35%`}},{body:h(({data:e})=>[a(`code`,bi,g(e.name),1)]),_:1},8,[`header`]),n(e(K),{header:e(f)(`common.value`),style:{width:`65%`}},{body:h(({data:t})=>[t.value===null?(p(),o(`span`,Si,g(e(f)(`serviceConfigEnv.undefined`)),1)):(p(),o(`span`,xi,g(t.value),1))]),_:1},8,[`header`])]),_:1},8,[`value`]))]),_:1})]),_:1})]),_:1})):y(``,!0)])):D.value?(p(),o(`div`,wi,[a(`p`,null,g(e(f)(`serviceConfigEnv.noVarsConfigured`)),1)])):(p(),o(`div`,Ci,[a(`p`,null,g(e(f)(`serviceConfigEnv.noActiveEnv`)),1)])),n(e(L),{visible:k.value,header:e(f)(`serviceConfigEnv.editVarsHeader`),style:{width:`900px`},maximizable:``,modal:``,"onUpdate:visible":i[2]||=e=>{e||Ve()}},{footer:h(()=>[n(e(z),{label:e(f)(`actions.close`),icon:`ti ti-x`,onClick:i[1]||=e=>Ve()},null,8,[`label`])]),default:h(()=>[a(`div`,Ti,[D.value?(p(),o(`div`,Ei,[a(`span`,Di,g(e(f)(`serviceConfigEnv.editingVarsFor`,{name:s.service.name||s.service.id})),1),n(we,{"environment-id":D.value},null,8,[`environment-id`])])):y(``,!0),a(`div`,Oi,[O.value?(p(),v(Ee,{key:0,"environment-id":O.value.id,editable:!0,sources:je.value,"autocomplete-enabled":!0,"autocomplete-suggestions":e(ee),"autocomplete-meta":e(B),"resolved-env":{...R.value?.env??{},...I.value?.env??{}},"service-builtins":Z.value,"show-overrides":!0,onVariablesChanged:Me,"show-delete":!0,"show-add-button":!0,onAutocompleteSearch:e(ne)},null,8,[`environment-id`,`sources`,`autocomplete-suggestions`,`autocomplete-meta`,`resolved-env`,`service-builtins`,`onAutocompleteSearch`])):y(``,!0)])])]),_:1},8,[`visible`,`header`]),n(e(L),{visible:j.value,"onUpdate:visible":i[5]||=e=>j.value=e,header:e(f)(`serviceConfigEnv.previewHeader`),style:{width:`700px`},modal:``,"dismissable-mask":``,"data-testid":`env-preview-dialog`},{footer:h(()=>[n(e(z),{label:e(f)(`actions.close`),icon:`ti ti-x`,onClick:i[4]||=e=>j.value=!1},null,8,[`label`])]),default:h(()=>[M.value?(p(),o(`div`,ki,[n(e(A))])):I.value?(p(),o(`div`,Ai,[a(`p`,ji,g(e(f)(`serviceConfigEnv.injectedVarsInfo`)),1),n(e(W),{value:Fe.value,stripedRows:``,size:`small`,rows:15,paginator:Fe.value.length>15},{default:h(()=>[n(e(K),{field:`key`,header:e(f)(`common.key`),style:{width:`35%`}},{body:h(({data:e})=>[a(`code`,Mi,g(e.key),1)]),_:1},8,[`header`]),n(e(K),{header:e(f)(`common.value`),style:{width:`65%`}},{body:h(({data:e})=>[a(`span`,Ni,[a(`span`,{class:`value-actions`,onClick:i[3]||=x(()=>{},[`stop`])},[I.value.envSecrets.includes(e.key)?(p(),o(`i`,{key:0,class:l([U.value.has(`preview:`+e.key)?`ti ti-eye-off`:`ti ti-eye`,`action-icon`]),onClick:t=>G(`preview:`+e.key)},null,10,Pi)):y(``,!0),a(`i`,{class:l([oe.value===`preview:`+e.key?`ti ti-check`:`ti ti-copy`,`action-icon`]),onClick:t=>q(`preview:`+e.key,e.value)},null,10,Fi)]),I.value.envSecrets.includes(e.key)&&!U.value.has(`preview:`+e.key)?(p(),o(`span`,Ii,`***`)):(p(),o(`span`,Li,g(Ie(e.value,!1)),1))])]),_:1},8,[`header`])]),_:1},8,[`value`,`paginator`])])):y(``,!0)]),_:1},8,[`visible`,`header`])]))}}),[[`__scopeId`,`data-v-28ad0a54`]]),zi={class:`config-health`},Bi={class:`config-card config-card--inline`},Vi={class:`config-card__header`},Hi={class:`config-card`},Ui={class:`config-card__header`},Wi={class:`config-card`},Gi={class:`config-card__header`},Ki={class:`config-card`},qi={class:`config-card__header`},Ji={class:`config-card`},Yi={class:`config-card__header`},Xi={key:1,class:`config-card`},Zi={class:`config-card__header`},Qi={class:`config-card__hint`},$i={class:`config-card`},ea={class:`config-card__header`},ta={class:`config-card`},na={class:`config-card__header`},ra={class:`config-card`},ia={class:`config-card__header`},aa={class:`config-card`},oa={class:`config-card__header`},sa=B(f({__name:`ServiceConfigHealthCheck`,props:{service:{}},emits:[`save`],setup(r,{emit:s}){let c=r,l=s,{t:u}=S(),d=t(!!c.service.healthCheck),f=t({type:c.service.healthCheck?.type??`http`,path:c.service.healthCheck?.path??`/health`,interval:c.service.healthCheck?.interval??3e4,timeout:c.service.healthCheck?.timeout??5e3,retries:c.service.healthCheck?.retries??3,method:c.service.healthCheck?.method??`GET`,expectedStatus:c.service.healthCheck?.expectedStatus??200,initialDelay:c.service.healthCheck?.initialDelay??5e3,command:c.service.healthCheck?.command??``}),h=[{label:`HTTP Request`,value:`http`},{label:`Command`,value:`command`}],_=[{label:`GET`,value:`GET`},{label:`HEAD`,value:`HEAD`},{label:`POST`,value:`POST`},{label:`PUT`,value:`PUT`}];i(()=>c.service,e=>{d.value=!!e.healthCheck,f.value={type:e.healthCheck?.type??`http`,path:e.healthCheck?.path??`/health`,interval:e.healthCheck?.interval??3e4,timeout:e.healthCheck?.timeout??5e3,retries:e.healthCheck?.retries??3,method:e.healthCheck?.method??`GET`,expectedStatus:e.healthCheck?.expectedStatus??200,initialDelay:e.healthCheck?.initialDelay??5e3,command:e.healthCheck?.command??``}});let v=null;function C(){v&&clearTimeout(v),v=setTimeout(()=>{if(!d.value)l(`save`,void 0);else{if(f.value.type===`http`&&!f.value.path?.trim()||f.value.type===`command`&&!f.value.command?.trim())return;l(`save`,{type:f.value.type,path:f.value.path,method:f.value.method,expectedStatus:f.value.expectedStatus,command:f.value.command||void 0,interval:f.value.interval,timeout:f.value.timeout,retries:f.value.retries,initialDelay:f.value.initialDelay})}v=null},150)}return(t,r)=>(p(),o(`div`,zi,[a(`div`,Bi,[a(`div`,Vi,[r[10]||=a(`i`,{class:`ti ti-heart`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.enable`)),1)]),n(e(H),{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,onChange:C},null,8,[`modelValue`])]),d.value?(p(),o(m,{key:0},[a(`div`,Hi,[a(`div`,Ui,[r[11]||=a(`i`,{class:`ti ti-settings`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.type`)),1)]),n(e(P),{modelValue:f.value.type,"onUpdate:modelValue":r[1]||=e=>f.value.type=e,options:h,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:C},null,8,[`modelValue`]),r[12]||=a(`small`,{class:`config-card__hint`},`HTTP checks a URL endpoint; Command runs a shell command (exit 0 = healthy)`,-1)]),f.value.type===`http`?(p(),o(m,{key:0},[a(`div`,Wi,[a(`div`,Gi,[r[13]||=a(`i`,{class:`ti ti-link`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.path`)),1)]),n(e(j),{modelValue:f.value.path,"onUpdate:modelValue":r[2]||=e=>f.value.path=e,class:`config-card__input`,placeholder:`/health`,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,Ki,[a(`div`,qi,[r[14]||=a(`i`,{class:`ti ti-directions`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.method`)),1)]),n(e(P),{modelValue:f.value.method,"onUpdate:modelValue":r[3]||=e=>f.value.method=e,options:_,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:C},null,8,[`modelValue`])]),a(`div`,Ji,[a(`div`,Yi,[r[15]||=a(`i`,{class:`ti ti-circle-check`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.expectedStatus`)),1)]),n(e(U),{modelValue:f.value.expectedStatus,"onUpdate:modelValue":r[4]||=e=>f.value.expectedStatus=e,class:`config-card__input`,"use-grouping":!1,min:100,max:599,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),r[16]||=a(`small`,{class:`config-card__hint`},`HTTP status code to expect (default 200)`,-1)])],64)):y(``,!0),f.value.type===`command`?(p(),o(`div`,Xi,[a(`div`,Zi,[r[17]||=a(`i`,{class:`ti ti-code`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.command`)),1)]),n(e(oe),{modelValue:f.value.command,"onUpdate:modelValue":r[5]||=e=>f.value.command=e,class:`config-card__input`,rows:`2`,placeholder:`curl -sf http://localhost:3000/health`,"auto-resize":``,onBlur:C},null,8,[`modelValue`]),a(`small`,Qi,g(e(u)(`serviceConfigHealthCheck.commandHint`)),1)])):y(``,!0),a(`div`,$i,[a(`div`,ea,[r[18]||=a(`i`,{class:`ti ti-hourglass`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.initialDelay`)),1)]),n(e(U),{modelValue:f.value.initialDelay,"onUpdate:modelValue":r[6]||=e=>f.value.initialDelay=e,class:`config-card__input`,"use-grouping":!1,min:0,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),r[19]||=a(`small`,{class:`config-card__hint`},`Wait before first health check (ms)`,-1)]),a(`div`,ta,[a(`div`,na,[r[20]||=a(`i`,{class:`ti ti-clock`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.interval`)),1)]),n(e(U),{modelValue:f.value.interval,"onUpdate:modelValue":r[7]||=e=>f.value.interval=e,class:`config-card__input`,"use-grouping":!1,min:1e3,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,ra,[a(`div`,ia,[r[21]||=a(`i`,{class:`ti ti-stopwatch`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.timeout`)),1)]),n(e(U),{modelValue:f.value.timeout,"onUpdate:modelValue":r[8]||=e=>f.value.timeout=e,class:`config-card__input`,"use-grouping":!1,min:500,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,aa,[a(`div`,oa,[r[22]||=a(`i`,{class:`ti ti-rotate`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.retries`)),1)]),n(e(U),{modelValue:f.value.retries,"onUpdate:modelValue":r[9]||=e=>f.value.retries=e,class:`config-card__input`,"use-grouping":!1,min:0,max:10,onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])],64)):y(``,!0)]))}}),[[`__scopeId`,`data-v-956bcc34`]]),ca={class:`config-shortcuts`},la={key:0,class:`config-shortcuts__empty`},ua={class:`config-shortcuts__row`},da={class:`config-shortcuts__field`},fa=[`for`],pa={class:`config-shortcuts__field config-shortcuts__field--wide`},ma=[`for`],ha={class:`config-shortcuts__field`},ga=[`for`],_a={class:`config-shortcuts__actions-cell`},va={class:`config-shortcuts__footer`},ya=B(f({__name:`ServiceConfigShortcuts`,props:{service:{}},emits:[`save`],setup(r,{emit:c}){let l=r,{t:u}=S(),d=c,f=t([...l.service.shortcuts??[]]),h=null;i(()=>l.service,e=>{h||(f.value=[...e.shortcuts??[]])});function _(){f.value=[...f.value,{id:Ce(),label:``,command:``,cwd:void 0}]}function v(e){f.value=f.value.filter((t,n)=>n!==e)}function C(e,t,n){f.value=f.value.map((r,i)=>i===e?{...r,[t]:n||void 0}:r)}function w(){h&&clearTimeout(h),h=setTimeout(()=>{d(`save`,f.value),h=null},150)}function T(e){v(e),w()}return(t,r)=>(p(),o(`div`,ca,[f.value.length===0?(p(),o(`div`,la,[a(`p`,null,g(e(u)(`serviceConfigShortcuts.empty`)),1)])):y(``,!0),(p(!0),o(m,null,s(f.value,(t,r)=>(p(),o(`div`,{key:t.id,class:`config-card`},[a(`div`,ua,[a(`div`,da,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-label-${r}`},g(e(u)(`serviceConfigShortcuts.label`)),9,fa),n(e(j),{id:`shortcut-label-${r}`,"model-value":t.label,placeholder:e(u)(`serviceConfigShortcuts.labelPlaceholder`),class:`config-card__input`,"data-testid":`shortcut-label-input`,"onUpdate:modelValue":e=>C(r,`label`,e),onBlur:w,onKeydown:b(x(w,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,pa,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-command-${r}`},g(e(u)(`serviceConfigShortcuts.command`)),9,ma),n(e(j),{id:`shortcut-command-${r}`,"model-value":t.command,placeholder:e(u)(`serviceConfigShortcuts.commandPlaceholder`),class:`config-card__input`,"data-testid":`shortcut-command-input`,"onUpdate:modelValue":e=>C(r,`command`,e),onBlur:w,onKeydown:b(x(w,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,ha,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-cwd-${r}`},g(e(u)(`serviceConfigShortcuts.workingDir`)),9,ga),n(e(j),{id:`shortcut-cwd-${r}`,"model-value":t.cwd??``,placeholder:e(u)(`serviceConfigShortcuts.cwdPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>C(r,`cwd`,e),onBlur:w,onKeydown:b(x(w,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,_a,[n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>T(r)},null,8,[`onClick`])])])]))),128)),a(`div`,va,[n(e(z),{label:e(u)(`serviceConfigShortcuts.addShortcut`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,"data-testid":`add-shortcut-btn`,onClick:_},null,8,[`label`])])]))}}),[[`__scopeId`,`data-v-cbad556b`]]),ba={class:`config-log-parsers`},xa={class:`config-card`},Sa={class:`config-card__header`},Ca={class:`config-card__hint`},wa={class:`config-card`},Ta={class:`config-card__header`},Ea={class:`config-card__header-hint`},Da={class:`config-log-parsers__order`},Oa={class:`config-log-parsers__name`},ka={key:1,class:`config-log-parsers__empty`},Aa={class:`config-log-parsers__add-row`},ja={class:`config-log-parsers__footer`},Ma=B(f({__name:`ServiceConfigLogs`,props:{service:{}},emits:[`save`],setup(l,{emit:f}){let _=l,b=f,x=w(),{t:C}=S(),T=Ae(),E=t([..._.service.parserIds??[]]);i(()=>_.service,e=>{E.value=[...e.parserIds??[]]});let D=d(()=>[...T.parsers].filter(e=>e.enabled).sort((e,t)=>e.name.localeCompare(t.name))),O=d(()=>D.value.filter(e=>!E.value.includes(e.id))),k=t(E.value.map(e=>T.parsers.find(t=>t.id===e)).filter(e=>e!==void 0));i(E,e=>{let t=k.value.filter(t=>e.includes(t.id)),n=e.filter(e=>!t.find(t=>t.id===e)).map(e=>T.parsers.find(t=>t.id===e)).filter(e=>e!==void 0);k.value=[...t,...n]}),i(()=>T.parsers,()=>{let e=E.value;k.value=e.map(e=>T.parsers.find(t=>t.id===e)).filter(e=>e!==void 0)});let A=t(null);function j(e){if(!e)return;let t=T.parsers.find(t=>t.id===e);t&&(E.value=[...E.value,e],k.value=[...k.value,t],A.value=null,I())}function M(e){E.value=E.value.filter(t=>t!==e),k.value=k.value.filter(t=>t.id!==e),I()}function N(){E.value=k.value.map(e=>e.id),I()}function I(){b(`save`,{parserIds:k.value.map(e=>e.id)})}return c(()=>{T.fetchParsers(),T.subscribeParsers()}),u(()=>{T.unsubscribeParsers()}),(t,i)=>(p(),o(`div`,ba,[a(`div`,xa,[a(`div`,Sa,[i[3]||=a(`i`,{class:`ti ti-code`},null,-1),a(`span`,null,g(e(C)(`serviceConfigLogs.jsParsers`)),1)]),a(`small`,Ca,g(e(C)(`serviceConfigLogs.jsParsersHint`)),1)]),a(`div`,wa,[a(`div`,Ta,[i[4]||=a(`i`,{class:`ti ti-arrows-sort`},null,-1),a(`span`,null,g(e(C)(`serviceConfigLogs.executionOrder`)),1),a(`small`,Ea,g(e(C)(`serviceConfigLogs.executionOrderHint`)),1)]),k.value.length>0?(p(),v(e(ye),{key:0,modelValue:k.value,"onUpdate:modelValue":i[0]||=e=>k.value=e,animation:150,handle:`.drag-handle`,class:`config-log-parsers__drag-list`,"data-testid":`log-parsers-drag-list`,onEnd:N},{default:h(()=>[(p(!0),o(m,null,s(k.value,(t,s)=>(p(),o(`div`,{key:t.id,class:`config-log-parsers__drag-row`,"data-testid":`log-parsers-drag-row`},[i[5]||=a(`span`,{class:`drag-handle`,"data-testid":`drag-handle`},[a(`i`,{class:`ti ti-menu-2`})],-1),a(`span`,Da,g(s+1),1),a(`span`,Oa,g(t.name),1),t.builtin?(p(),v(e(F),{key:0,severity:`secondary`,class:`config-log-parsers__builtin-badge`},{default:h(()=>[r(g(e(C)(`serviceConfigLogs.builtin`)),1)]),_:1})):y(``,!0),t.enabled?y(``,!0):(p(),v(e(F),{key:1,severity:`warn`,class:`config-log-parsers__disabled-badge`},{default:h(()=>[r(g(e(C)(`serviceConfigLogs.disabled`)),1)]),_:1})),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,size:`small`,class:`config-log-parsers__delete`,onClick:e=>M(t.id)},null,8,[`onClick`])]))),128))]),_:1},8,[`modelValue`])):y(``,!0),k.value.length===0?(p(),o(`div`,ka,g(e(C)(`serviceConfigLogs.empty`)),1)):y(``,!0),a(`div`,Aa,[n(e(P),{modelValue:A.value,"onUpdate:modelValue":[i[1]||=e=>A.value=e,j],options:O.value,"option-label":`name`,"option-value":`id`,placeholder:e(C)(`serviceConfigLogs.addParser`),class:`config-log-parsers__add-select`,loading:e(T).loading,disabled:O.value.length===0},{option:h(({option:t})=>[a(`span`,null,g(t.name),1),t.builtin?(p(),v(e(F),{key:0,severity:`secondary`,class:`ml-2`,style:{"font-size":`0.65rem`,padding:`0.1rem 0.35rem`}},{default:h(()=>[r(g(e(C)(`serviceConfigLogs.builtin`)),1)]),_:1})):y(``,!0)]),_:1},8,[`modelValue`,`options`,`placeholder`,`loading`,`disabled`])])]),a(`div`,ja,[n(e(z),{label:e(C)(`serviceConfigLogs.manageParsers`),icon:`ti ti-settings`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:i[2]||=t=>e(x).push({name:`settings`,query:{section:`parsers`}})},null,8,[`label`])])]))}}),[[`__scopeId`,`data-v-b8de20cf`]]),Na={class:`config-log-sources`},Pa={class:`config-card`},Fa={class:`config-card__header`},Ia={class:`config-card__hint`},La={key:0,class:`config-card config-card--list`},Ra={class:`source-row__info`},za={class:`source-row__type`},Ba={class:`source-row__label`},Va={class:`source-row__actions`},Ha={key:1,class:`config-log-sources__empty`},Ua={class:`config-log-sources__footer`},Wa={class:`dialog-form`},Ga={class:`dialog-form__field`},Ka={for:`lsrc-type`,class:`dialog-form__label`},qa={class:`dialog-form__field`},Ja={for:`lsrc-path-file`,class:`dialog-form__label`},Ya={class:`dialog-form__field`},Xa={for:`lsrc-encoding-file`,class:`dialog-form__label`},Za={class:`dialog-form__field dialog-form__field--row`},Qa={for:`lsrc-startFromEnd-file`,class:`dialog-form__label`},$a={class:`dialog-form__field dialog-form__field--row`},eo={for:`lsrc-createIfNotExists-file`,class:`dialog-form__label`},to={class:`dialog-form__field`},no={for:`lsrc-connectionString-mongo`,class:`dialog-form__label`},ro={class:`dialog-form__row`},io={class:`dialog-form__field`},ao={class:`dialog-form__field`},oo={class:`dialog-form__row`},so={class:`dialog-form__field`},co={class:`dialog-form__field`},lo={class:`dialog-form__field`},uo={class:`dialog-form__row`},fo={class:`dialog-form__field dialog-form__field--grow`},po={class:`dialog-form__field dialog-form__field--port`},mo={class:`dialog-form__row`},ho={class:`dialog-form__field`},go={class:`dialog-form__field`},_o={class:`dialog-form__row`},vo={class:`dialog-form__field`},yo={class:`dialog-form__field`},bo={class:`dialog-form__row`},xo={class:`dialog-form__field`},So={class:`dialog-form__field`},Co={class:`dialog-form__row`},wo={class:`dialog-form__field`},To={class:`dialog-form__field`},Eo={class:`dialog-form__field`},Do={key:3,class:`dialog-form__hint-block`},Oo=B(f({__name:`ServiceConfigLogSources`,props:{service:{}},emits:[`save`],setup(c,{emit:u}){let{t:d}=S(),f=c,_=u,v=[{label:`Console (stdout/stderr)`,value:`console`,icon:`ti-terminal-2`},{label:`File`,value:`file`,icon:`ti-file`},{label:`MongoDB`,value:`mongo`,icon:`ti-database`},{label:`MySQL`,value:`mysql`,icon:`ti-database`}];function b(e){return e===`console`?{type:`console`}:e===`file`?{type:`file`,path:``,encoding:`utf-8`,startFromEnd:!0,createIfNotExists:!1}:e===`mongo`?{type:`mongo`,connectionString:``,database:``,collection:``,timestampField:`timestamp`,messageField:`message`}:{type:`mysql`,host:`localhost`,port:3306,user:``,password:``,database:``,table:``,timestampColumn:`created_at`,messageColumn:`message`,pollIntervalMs:2e3}}let x=t([...f.service.logSources??[]]);i(()=>f.service.logSources,e=>{x.value=[...e??[]]});let C=t(!1),w=t(null),T=t(b(`console`));function E(){w.value=null,T.value=b(`file`),C.value=!0}function D(e){w.value=e,T.value={...x.value[e]},C.value=!0}function O(e){T.value=b(e)}function k(){w.value===null?x.value=[...x.value,{...T.value}]:x.value=x.value.map((e,t)=>t===w.value?{...T.value}:e),C.value=!1,_(`save`,{logSources:x.value})}function A(e){x.value=x.value.filter((t,n)=>n!==e),_(`save`,{logSources:x.value})}function M(e){return e.type===`console`?`Console`:e.type===`file`?e.path||`(no path)`:e.type===`mongo`?e.database?`mongo/${e.database}/${e.collection}`:`(not configured)`:e.type===`mysql`?e.database?`mysql/${e.host}/${e.database}/${e.table}`:`(not configured)`:e.type}function N(e){return e===`console`?`ti-terminal-2`:e===`file`?`ti-file`:`ti-database`}return(t,i)=>(p(),o(`div`,Na,[a(`div`,Pa,[a(`div`,Fa,[i[23]||=a(`i`,{class:`ti ti-inbox`},null,-1),a(`span`,null,g(e(d)(`serviceConfigLogSources.title`)),1)]),a(`small`,Ia,g(e(d)(`serviceConfigLogSources.hint`)),1)]),x.value.length>0?(p(),o(`div`,La,[(p(!0),o(m,null,s(x.value,(t,r)=>(p(),o(`div`,{key:r,class:`source-row`},[a(`i`,{class:l(`ti ${N(t.type)} source-row__icon`)},null,2),a(`div`,Ra,[a(`span`,za,g(t.type),1),a(`span`,Ba,g(M(t)),1)]),a(`div`,Va,[n(e(z),{icon:`ti ti-pencil`,variant:`text`,size:`small`,severity:`secondary`,onClick:e=>D(r)},null,8,[`onClick`]),n(e(z),{icon:`ti ti-trash`,variant:`text`,size:`small`,severity:`danger`,onClick:e=>A(r)},null,8,[`onClick`])])]))),128))])):(p(),o(`div`,Ha,[i[24]||=a(`i`,{class:`ti ti-inbox config-log-sources__empty-icon`},null,-1),a(`p`,null,g(e(d)(`serviceConfigLogSources.empty`)),1),a(`small`,null,g(e(d)(`serviceConfigLogSources.emptyHint`)),1)])),a(`div`,Ua,[n(e(z),{label:e(d)(`serviceConfigLogSources.addSource`),icon:`ti ti-plus`,size:`small`,onClick:E},null,8,[`label`])]),n(e(L),{visible:C.value,"onUpdate:visible":i[22]||=e=>C.value=e,header:w.value===null?e(d)(`serviceConfigLogSources.addDialog`):e(d)(`serviceConfigLogSources.editDialog`),modal:``,style:{width:`520px`}},{footer:h(()=>[n(e(z),{label:e(d)(`serviceConfigLogSources.cancel`),severity:`secondary`,variant:`outlined`,onClick:i[21]||=e=>C.value=!1},null,8,[`label`]),n(e(z),{label:w.value===null?e(d)(`serviceConfigLogSources.add`):e(d)(`serviceConfigLogSources.save`),icon:`ti ti-check`,onClick:k},null,8,[`label`])]),default:h(()=>[a(`div`,Wa,[a(`div`,Ga,[a(`label`,Ka,g(e(d)(`serviceConfigLogSources.type`)),1),n(e(P),{"input-id":`lsrc-type`,"model-value":T.value.type,options:v,"option-label":`label`,"option-value":`value`,class:`dialog-form__input`,"onUpdate:modelValue":O},null,8,[`model-value`])]),T.value.type===`file`?(p(),o(m,{key:0},[a(`div`,qa,[a(`label`,Ja,[r(g(e(d)(`serviceConfigLogSources.path`))+` `,1),i[25]||=a(`span`,{class:`dialog-form__required`},`*`,-1)]),n(e(j),{id:`lsrc-path-file`,modelValue:T.value.path,"onUpdate:modelValue":i[0]||=e=>T.value.path=e,class:`dialog-form__input`,placeholder:`logs/app.log`},null,8,[`modelValue`])]),a(`div`,Ya,[a(`label`,Xa,g(e(d)(`serviceConfigLogSources.encoding`)),1),n(e(j),{id:`lsrc-encoding-file`,modelValue:T.value.encoding,"onUpdate:modelValue":i[1]||=e=>T.value.encoding=e,class:`dialog-form__input`,placeholder:`utf-8`},null,8,[`modelValue`])]),a(`div`,Za,[a(`label`,Qa,g(e(d)(`serviceConfigLogSources.startFromEnd`)),1),n(e(H),{"input-id":`lsrc-startFromEnd-file`,modelValue:T.value.startFromEnd,"onUpdate:modelValue":i[2]||=e=>T.value.startFromEnd=e},null,8,[`modelValue`])]),a(`div`,$a,[a(`label`,eo,g(e(d)(`serviceConfigLogSources.createIfNotExists`)),1),n(e(H),{"input-id":`lsrc-createIfNotExists-file`,modelValue:T.value.createIfNotExists,"onUpdate:modelValue":i[3]||=e=>T.value.createIfNotExists=e},null,8,[`modelValue`])])],64)):T.value.type===`mongo`?(p(),o(m,{key:1},[a(`div`,to,[a(`label`,no,[r(g(e(d)(`serviceConfigLogSources.connectionString`))+` `,1),i[26]||=a(`span`,{class:`dialog-form__required`},`*`,-1)]),n(e(j),{id:`lsrc-connectionString-mongo`,modelValue:T.value.connectionString,"onUpdate:modelValue":i[4]||=e=>T.value.connectionString=e,class:`dialog-form__input`,placeholder:`mongodb://user:pass@host:27017`,type:`password`,autocomplete:`off`},null,8,[`modelValue`])]),a(`div`,ro,[a(`div`,io,[i[27]||=a(`label`,{for:`lsrc-database-mongo`,class:`dialog-form__label`},[r(`Database `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-database-mongo`,modelValue:T.value.database,"onUpdate:modelValue":i[5]||=e=>T.value.database=e,class:`dialog-form__input`,placeholder:`mydb`},null,8,[`modelValue`])]),a(`div`,ao,[i[28]||=a(`label`,{for:`lsrc-collection-mongo`,class:`dialog-form__label`},[r(`Collection `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-collection-mongo`,modelValue:T.value.collection,"onUpdate:modelValue":i[6]||=e=>T.value.collection=e,class:`dialog-form__input`,placeholder:`logs`},null,8,[`modelValue`])])]),a(`div`,oo,[a(`div`,so,[i[29]||=a(`label`,{for:`lsrc-timestampField-mongo`,class:`dialog-form__label`},`Timestamp field`,-1),n(e(j),{id:`lsrc-timestampField-mongo`,modelValue:T.value.timestampField,"onUpdate:modelValue":i[7]||=e=>T.value.timestampField=e,class:`dialog-form__input`,placeholder:`timestamp`},null,8,[`modelValue`])]),a(`div`,co,[i[30]||=a(`label`,{for:`lsrc-messageField-mongo`,class:`dialog-form__label`},`Message field`,-1),n(e(j),{id:`lsrc-messageField-mongo`,modelValue:T.value.messageField,"onUpdate:modelValue":i[8]||=e=>T.value.messageField=e,class:`dialog-form__input`,placeholder:`message`},null,8,[`modelValue`])])]),a(`div`,lo,[i[31]||=a(`label`,{for:`lsrc-levelField-mongo`,class:`dialog-form__label`},[r(`Level field `),a(`span`,{class:`dialog-form__hint`},`(optional)`)],-1),n(e(j),{id:`lsrc-levelField-mongo`,modelValue:T.value.levelField,"onUpdate:modelValue":i[9]||=e=>T.value.levelField=e,class:`dialog-form__input`,placeholder:`level`},null,8,[`modelValue`])])],64)):T.value.type===`mysql`?(p(),o(m,{key:2},[a(`div`,uo,[a(`div`,fo,[i[32]||=a(`label`,{for:`lsrc-host-mysql`,class:`dialog-form__label`},[r(`Host `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-host-mysql`,modelValue:T.value.host,"onUpdate:modelValue":i[10]||=e=>T.value.host=e,class:`dialog-form__input`,placeholder:`localhost`},null,8,[`modelValue`])]),a(`div`,po,[i[33]||=a(`label`,{for:`lsrc-port-mysql`,class:`dialog-form__label`},`Port`,-1),n(e(U),{"input-id":`lsrc-port-mysql`,modelValue:T.value.port,"onUpdate:modelValue":i[11]||=e=>T.value.port=e,min:1,max:65535,class:`dialog-form__input`},null,8,[`modelValue`])])]),a(`div`,mo,[a(`div`,ho,[i[34]||=a(`label`,{for:`lsrc-user-mysql`,class:`dialog-form__label`},[r(`User `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-user-mysql`,modelValue:T.value.user,"onUpdate:modelValue":i[12]||=e=>T.value.user=e,class:`dialog-form__input`,placeholder:`root`},null,8,[`modelValue`])]),a(`div`,go,[i[35]||=a(`label`,{for:`lsrc-password-mysql`,class:`dialog-form__label`},`Password`,-1),n(e(j),{id:`lsrc-password-mysql`,modelValue:T.value.password,"onUpdate:modelValue":i[13]||=e=>T.value.password=e,class:`dialog-form__input`,type:`password`,autocomplete:`new-password`},null,8,[`modelValue`])])]),a(`div`,_o,[a(`div`,vo,[i[36]||=a(`label`,{for:`lsrc-database-mysql`,class:`dialog-form__label`},[r(`Database `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-database-mysql`,modelValue:T.value.database,"onUpdate:modelValue":i[14]||=e=>T.value.database=e,class:`dialog-form__input`,placeholder:`app_db`},null,8,[`modelValue`])]),a(`div`,yo,[i[37]||=a(`label`,{for:`lsrc-table-mysql`,class:`dialog-form__label`},[r(`Table `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(j),{id:`lsrc-table-mysql`,modelValue:T.value.table,"onUpdate:modelValue":i[15]||=e=>T.value.table=e,class:`dialog-form__input`,placeholder:`logs`},null,8,[`modelValue`])])]),a(`div`,bo,[a(`div`,xo,[i[38]||=a(`label`,{for:`lsrc-timestampColumn-mysql`,class:`dialog-form__label`},`Timestamp column`,-1),n(e(j),{id:`lsrc-timestampColumn-mysql`,modelValue:T.value.timestampColumn,"onUpdate:modelValue":i[16]||=e=>T.value.timestampColumn=e,class:`dialog-form__input`,placeholder:`created_at`},null,8,[`modelValue`])]),a(`div`,So,[i[39]||=a(`label`,{for:`lsrc-messageColumn-mysql`,class:`dialog-form__label`},`Message column`,-1),n(e(j),{id:`lsrc-messageColumn-mysql`,modelValue:T.value.messageColumn,"onUpdate:modelValue":i[17]||=e=>T.value.messageColumn=e,class:`dialog-form__input`,placeholder:`message`},null,8,[`modelValue`])])]),a(`div`,Co,[a(`div`,wo,[i[40]||=a(`label`,{for:`lsrc-levelColumn-mysql`,class:`dialog-form__label`},[r(`Level column `),a(`span`,{class:`dialog-form__hint`},`(optional)`)],-1),n(e(j),{id:`lsrc-levelColumn-mysql`,modelValue:T.value.levelColumn,"onUpdate:modelValue":i[18]||=e=>T.value.levelColumn=e,class:`dialog-form__input`,placeholder:`level`},null,8,[`modelValue`])]),a(`div`,To,[i[41]||=a(`label`,{for:`lsrc-pollIntervalMs-mysql`,class:`dialog-form__label`},`Poll interval (ms)`,-1),n(e(U),{"input-id":`lsrc-pollIntervalMs-mysql`,modelValue:T.value.pollIntervalMs,"onUpdate:modelValue":i[19]||=e=>T.value.pollIntervalMs=e,min:500,max:6e4,class:`dialog-form__input`},null,8,[`modelValue`])])]),a(`div`,Eo,[i[42]||=a(`label`,{for:`lsrc-query-mysql`,class:`dialog-form__label`},[r(`Custom query `),a(`span`,{class:`dialog-form__hint`},[r(`(optional, must include `),a(`code`,null,`WHERE … > ?`),r(`)`)])],-1),n(e(j),{id:`lsrc-query-mysql`,modelValue:T.value.query,"onUpdate:modelValue":i[20]||=e=>T.value.query=e,class:`dialog-form__input`,placeholder:`SELECT * FROM logs WHERE created_at > ? ORDER BY id ASC`},null,8,[`modelValue`])])],64)):T.value.type===`console`?(p(),o(`small`,Do,`The console source captures stdout/stderr and is always active. Adding it here has no effect unless you want to track it explicitly.`)):y(``,!0)])]),_:1},8,[`visible`,`header`])]))}}),[[`__scopeId`,`data-v-122cf0a9`]]),ko={class:`config-traefik`},Ao={class:`traefik-entry__fields`},jo=B(f({__name:`ServiceConfigTraefik`,props:{service:{}},emits:[`save`],setup(l,{emit:u}){let d=l,f=u,g=t([...d.service.localUrls??[]]),_=t(null);c(async()=>{let e=$(d.service);if(!e)return;let t=await X.settings.getAgentTraefikConfig.query({agentId:e});_.value=t.enabled});let S=null;i(()=>d.service,e=>{S||(g.value=[...e.localUrls??[]])});function C(){g.value=[...g.value,{url:``,port:3e3}]}function w(e){g.value=g.value.filter((t,n)=>n!==e),D()}function T(e,t,n){g.value=g.value.map((r,i)=>i===e?{...r,[t]:n}:r)}function D(){S&&clearTimeout(S),S=setTimeout(()=>{f(`save`,{localUrls:g.value.filter(e=>e.url.trim())}),S=null},150)}return(t,i)=>(p(),o(`div`,ko,[_.value===!1?(p(),v(e(I),{key:0,severity:`warn`},{default:h(()=>[i[1]||=r(` Traefik n'est pas activé. Configurez-le dans `,-1),n(e(E),{to:{name:`settings`,query:{section:`agents`}}},{default:h(()=>[...i[0]||=[r(`Paramètres → Agents`,-1)]]),_:1}),i[2]||=r(` (bouton Traefik sur la ligne de l'agent) pour que ces URLs soient actives. `,-1)]),_:1})):y(``,!0),(p(!0),o(m,null,s(g.value,(t,r)=>(p(),o(`div`,{key:r,class:`traefik-entry`},[a(`div`,Ao,[n(e(j),{"model-value":t.url,class:`traefik-entry__url`,placeholder:`mon-app.local.mondomaine.com`,"onUpdate:modelValue":e=>T(r,`url`,e),onBlur:D,onKeydown:b(x(D,[`prevent`]),[`enter`])},null,8,[`model-value`,`onUpdate:modelValue`,`onKeydown`]),n(e(U),{"model-value":t.port,class:`traefik-entry__port`,min:1,max:65535,"use-grouping":!1,placeholder:`3000`,"onUpdate:modelValue":e=>{T(r,`port`,e??3e3),D()}},null,8,[`model-value`,`onUpdate:modelValue`]),n(e(z),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,size:`small`,onClick:e=>w(r)},null,8,[`onClick`])])]))),128)),n(e(z),{icon:`ti ti-plus`,label:`Ajouter une URL`,size:`small`,variant:`outlined`,onClick:C})]))}}),[[`__scopeId`,`data-v-37776b09`]]),Mo={class:`config-view`,"data-testid":`config-view`},No={class:`config-view__header`},Po={class:`config-view__title`},Fo={class:`config-view__actions`},Io=B(f({__name:`ServiceConfigView`,props:{service:{},projectId:{}},emits:[`remove-service`],setup(t,{emit:r}){let i=t,s=r,{t:c}=S(),l=_e(),u=ue(),f=C(),{isDebug:m}=Wt(),_=T(),v=w(),y=[`general`,`commands`,`shortcuts`,`env`,`health`,`log-parsers`,`log-sources`,`traefik`],b=d(()=>{let e=_.query.configTab;return y.includes(e)?e:`general`});function x(e){v.replace({query:{..._.query,configTab:e}})}let E=d(()=>u.getByRef({id:i.projectId,orgId:f.activeOrgId})?.activeEnvironmentId);async function D(e,t){await t()?m.value&&console.debug(`[autosave] ${e} saved`):console.error(`[autosave] ${e} failed:`,l.error??`Save failed`)}async function O(e){await D(`General`,()=>l.update(i.service.id,e))}async function k(e){await D(`Commands`,()=>l.update(i.service.id,e))}async function A(e){await D(`Health check`,()=>l.update(i.service.id,{healthCheck:e??null}))}async function j(e){await D(`Shortcuts`,()=>l.update(i.service.id,{shortcuts:e}))}async function M(e){await D(`Docker`,()=>l.update(i.service.id,{dockerConfig:e}))}async function N(e){await D(`Log parsers`,()=>l.update(i.service.id,e))}async function P(e){await D(`Log sources`,()=>l.update(i.service.id,e))}async function F(e){await D(`Traefik`,()=>l.update(i.service.id,e))}function I(){s(`remove-service`,i.service.id)}return(r,i)=>(p(),o(`div`,Mo,[a(`div`,No,[a(`h2`,Po,g(e(c)(`serviceConfigView.title`)),1),a(`div`,Fo,[n(e(z),{label:e(c)(`serviceConfigView.remove`),icon:`ti ti-trash`,severity:`danger`,size:`small`,variant:`outlined`,onClick:I},null,8,[`label`])])]),n(e(se),{value:b.value,class:`config-view__tabs`,"onUpdate:value":x},{default:h(()=>[n(e(ee),null,{default:h(()=>[n(e(J),{value:`general`,"data-testid":`tab-config`},{default:h(()=>[i[0]||=a(`i`,{class:`ti ti-settings tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabGeneral`)),1)]),_:1}),n(e(J),{value:`commands`,"data-testid":`tab-commands`},{default:h(()=>[i[1]||=a(`i`,{class:`ti ti-code tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabCommands`)),1)]),_:1}),n(e(J),{value:`shortcuts`,"data-testid":`tab-shortcuts`},{default:h(()=>[i[2]||=a(`i`,{class:`ti ti-bolt tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabShortcuts`)),1)]),_:1}),n(e(J),{value:`env`,"data-testid":`tab-env`},{default:h(()=>[i[3]||=a(`i`,{class:`ti ti-database tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabEnvironment`)),1)]),_:1}),n(e(J),{value:`health`},{default:h(()=>[i[4]||=a(`i`,{class:`ti ti-heart tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabHealthCheck`)),1)]),_:1}),n(e(J),{value:`log-parsers`,"data-testid":`tab-log-parsers`},{default:h(()=>[i[5]||=a(`i`,{class:`ti ti-list tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabLogParsers`)),1)]),_:1}),n(e(J),{value:`log-sources`},{default:h(()=>[i[6]||=a(`i`,{class:`ti ti-inbox tab-icon`},null,-1),a(`span`,null,g(e(c)(`serviceConfigView.tabLogSources`)),1)]),_:1}),n(e(J),{value:`traefik`},{default:h(()=>[...i[7]||=[a(`i`,{class:`ti ti-server tab-icon`},null,-1),a(`span`,null,`Traefik`,-1)]]),_:1})]),_:1}),n(e(q),null,{default:h(()=>[n(e(R),{value:`general`},{default:h(()=>[n(Dn,{service:t.service,onSave:O},null,8,[`service`])]),_:1}),n(e(R),{value:`commands`},{default:h(()=>[n(Qr,{service:t.service,onSave:k,onDockerSave:M},null,8,[`service`])]),_:1}),n(e(R),{value:`shortcuts`,"data-testid":`tabpanel-shortcuts`},{default:h(()=>[n(ya,{service:t.service,onSave:j},null,8,[`service`])]),_:1}),n(e(R),{value:`env`},{default:h(()=>[n(Ri,{service:t.service,"project-id":t.projectId,"active-environment-id":E.value},null,8,[`service`,`project-id`,`active-environment-id`])]),_:1}),n(e(R),{value:`health`},{default:h(()=>[n(sa,{service:t.service,onSave:A},null,8,[`service`])]),_:1}),n(e(R),{value:`log-parsers`,"data-testid":`tabpanel-log-parsers`},{default:h(()=>[n(Ma,{service:t.service,onSave:N},null,8,[`service`])]),_:1}),n(e(R),{value:`log-sources`},{default:h(()=>[n(Oo,{service:t.service,onSave:P},null,8,[`service`])]),_:1}),n(e(R),{value:`traefik`},{default:h(()=>[n(jo,{service:t.service,onSave:F},null,8,[`service`])]),_:1})]),_:1})]),_:1},8,[`value`])]))}}),[[`__scopeId`,`data-v-204a6ce7`]]),Lo={key:0,class:`service-detail`},Ro={key:1,class:`service-detail__not-found`},zo={key:2,class:`service-detail__not-found`},Bo=B(f({__name:`ServiceDetailPage`,setup(n){let r=T(),s=w(),c=N(),l=re(),{t:f}=S(),m=_e(),h=xe(),_=ue(),{setServiceContext:b}=pe(),x=d(()=>r.params.id);i(x,e=>b(e),{immediate:!0}),u(()=>b(null));let C=d(()=>{let e=r.params.tab;return e===`terminal`||e===`metrics`||e===`config`||e===`git`||e===`wiki`?e:`terminal`}),E=t(null),D=t(!1),O=d(()=>m.getById(x.value)||(E.value?.id===x.value?E.value:null));i(x,async e=>{if(E.value=null,e&&!m.getById(e)){D.value=!0;try{E.value=await m.fetchOne(e)}finally{D.value=!1}}},{immediate:!0});let k=d(()=>h.getByService(x.value)),A=d(()=>_.currentProject?.id??``);function j(e){let t=m.getById(e);l.require({message:f(`serviceDetail.deleteConfirmMessage`,{name:t?.name??e}),header:f(`serviceDetail.deleteConfirmHeader`),icon:`ti ti-alert-triangle`,rejectLabel:f(`actions.cancel`),acceptLabel:f(`actions.delete`),acceptProps:{severity:`danger`},accept:async()=>{await m.remove(e)&&(c.add({severity:`success`,summary:f(`serviceDetail.removed`),detail:f(`serviceDetail.deleted`),life:3e3}),s.push(`/`))}})}return(t,n)=>O.value?(p(),o(`div`,Lo,[C.value===`terminal`?(p(),v(Dt,{key:`terminal-`+x.value,service:O.value,processes:k.value},null,8,[`service`,`processes`])):C.value===`metrics`?(p(),v(Rt,{key:`metrics-`+x.value,service:O.value,processes:k.value},null,8,[`service`,`processes`])):C.value===`config`?(p(),v(Io,{key:`config-`+x.value,service:O.value,"project-id":A.value,onRemoveService:j},null,8,[`service`,`project-id`])):C.value===`git`?(p(),v(be,{key:`git-`+x.value,"service-id":x.value},null,8,[`service-id`])):C.value===`wiki`?(p(),v(je,{key:`wiki-`+x.value,scope:`service:${x.value}`},null,8,[`scope`])):y(``,!0)])):D.value?(p(),o(`div`,Ro)):(p(),o(`div`,zo,[a(`p`,null,g(e(f)(`serviceDetail.notFound`)),1)]))}}),[[`__scopeId`,`data-v-ac012903`]]);export{Bo as default};
@@ -1 +1 @@
1
- import{B as e,C as t,x as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as r,_ as i,b as a,bt as o,ct as ee,g as s,k as c,mt as l,o as u,qt as te,rn as d,y as f}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as p,w as m}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as ne}from"./vue-i18n-o7yraQpR.js";import{n as re}from"./project-launch.store-CTmbl8UY.js";import{g as ie,h as ae}from"./useApi-s_02lHjl-DZYO2tHU.js";import{F as oe,H as se,J as h,P as ce,S as g,dt as _,ft as v,i as le,k as ue,l as y,z as b}from"./src-DIBHat7I.js";import{r as x}from"./trpc-BAZGRZBD.js";import{n as de}from"./project.store-CNC6_4r4.js";import{n as S}from"./error-DpF7X5iu.js";import{t as fe}from"./service.store-B40U4QzI.js";import{t as pe}from"./agent.store-piokQ9Dt.js";import{c as me}from"./index-Ci2CNnit.js";var he={class:`service-form-page`},ge={class:`page-header`},_e={key:0,class:`restart-banner`},ve={key:1,class:`loading-container`},ye={class:`form-section`},be={class:`form-group`},C={for:`svc-project`},w={class:`form-hint`},T={class:`form-group`},E={for:`svc-agent`},D={class:`form-hint`},O={class:`form-group`},k={for:`svc-name`},A={class:`form-hint`},j={class:`form-actions`},M={class:`form-section`},N={class:`form-row`},xe={class:`form-group flex-1`},Se={for:`svc-name-edit`},Ce={class:`form-group`,style:{width:`160px`}},we={for:`svc-runner`},Te={class:`form-group`},Ee={for:`svc-agent-edit`},De={class:`form-hint`},Oe={class:`form-row`},ke={class:`form-group flex-1`},Ae={for:`svc-cwd`},je={class:`form-group`,style:{"min-width":`200px`}},Me={for:`svc-ports`},Ne={class:`form-group switch-group`},Pe={for:`svc-autorestart`},P={class:`form-section`},Fe={class:`section-header`},Ie={key:0,class:`empty-env`},Le={class:`form-group`},Re={for:`hc-path`},ze={class:`form-row`},Be={class:`form-group flex-1`},Ve={for:`hc-interval`},He={class:`form-group flex-1`},Ue={for:`hc-timeout`},We={class:`form-group flex-1`},Ge={for:`hc-retries`},F=`__inherit__`,I=v(c({__name:`ServiceFormPage`,props:{id:{}},setup(c){let v=c,I=ie(),Ke=ae(),L=ce(),R=de(),z=fe(),B=pe(),V=re(),qe=me(),{t:H}=ne(),U=s(()=>!!v.id),W=s(()=>Ke.query.projectId),G=t(!1),K=t(!1),q=t(null),J=t(null),Y=t(!1),X=n({projectId:``,agentId:F,name:``,cwd:``,ports:[],runner:`native`,autoRestart:!1,healthCheck:{enabled:!1,path:``,interval:3e4,timeout:5e3,retries:3}}),Z=t([]),Je=[{label:`Native`,value:`native`},{label:`Docker`,value:`docker`}],Ye=s(()=>R.projects.map(e=>({label:e.name,value:e.id}))),Q=s(()=>[{label:H(`serviceForm.agentInherit`),value:F},...B.agents.map(e=>({label:`${e.config.name} ${e.status.connected?`(Online)`:`(Offline)`}`,value:e.config.id}))]);function Xe(){Z.value=[...Z.value,{key:``,value:``,isSecret:!1}]}function Ze(e){Z.value=Z.value.filter((t,n)=>n!==e)}function Qe(){let e={},t=!1;for(let n of Z.value){let r=n.key.trim();r&&(e[r]={value:{value:n.value,pre:``,post:``,isSecret:n.isSecret}},t=!0)}return t?e:void 0}async function $e(){if(v.id){G.value=!0;try{let e=await x.service.get.query({id:v.id});X.agentId=e.agentId??F,X.name=e.name,X.cwd=e.cwd??``,X.ports=(e.ports??[]).map(String),X.runner=e.runner,X.autoRestart=e.autoRestart,e.healthCheck&&(X.healthCheck.enabled=!0,X.healthCheck.path=e.healthCheck.path,X.healthCheck.interval=e.healthCheck.interval,X.healthCheck.timeout=e.healthCheck.timeout,X.healthCheck.retries=e.healthCheck.retries),e.variables&&typeof e.variables==`object`&&Object.keys(e.variables).length>0&&(Z.value=Object.entries(e.variables).map(([e,t])=>{let n=t;return{key:e,value:n.value.value??``,isSecret:n.value.isSecret??!1}}))}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToLoad`),life:5e3}),I.back()}finally{G.value=!1}}}async function $(){if(U.value&&v.id&&!K.value&&!G.value){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}K.value=!0;try{let e={agentId:X.agentId===F?null:X.agentId||null,name:X.name.trim(),cwd:X.cwd.trim()||void 0,ports:X.ports.map(Number).filter(e=>e>0&&e<=65535),runner:X.runner,autoRestart:X.autoRestart,variables:Qe(),healthCheck:X.healthCheck.enabled?{path:X.healthCheck.path,interval:X.healthCheck.interval,timeout:X.healthCheck.timeout,retries:X.healthCheck.retries}:void 0};(await x.service.update.mutate({id:v.id,...e}))?.stoppedForAgentChange?(q.value=e.agentId,J.value=v.id,L.add({severity:`warn`,summary:H(`serviceForm.saved`),detail:H(`serviceForm.agentChangedServiceStopped`),life:4e3})):L.add({severity:`success`,summary:H(`serviceForm.saved`),life:1500})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}}async function et(){if(q.value&&J.value){Y.value=!0;try{await qe.start(q.value,J.value),q.value=null,J.value=null,L.add({severity:`success`,summary:H(`serviceForm.restarted`),life:2e3})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e),life:5e3})}finally{Y.value=!1}}}async function tt(){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}if(!X.projectId){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.projectRequired`),life:3e3});return}K.value=!0;try{let e=R.getByRef({id:X.projectId,orgId:V.activeOrgId})??R.getById(X.projectId),t=await z.create({name:X.name.trim(),...X.agentId&&X.agentId!==F?{agentId:X.agentId}:{},projectId:X.projectId,orgId:e?.orgId??null});if(!t)throw Error(z.error??`Failed to create service`);await R.addService(e??{id:X.projectId},t.id),L.add({severity:`success`,summary:H(`serviceForm.serviceCreated`),detail:H(`serviceForm.configureAfterCreate`),life:3e3}),I.push({name:`service-detail`,params:{id:t.id,tab:`config`}})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}return ee(async()=>{await Promise.all([R.fetchAll(),B.fetchAll()]),W.value?X.projectId=W.value:!X.projectId&&V.activeProjectId&&(X.projectId=V.activeProjectId),U.value&&await $e()}),(t,n)=>(l(),a(`div`,he,[i(`div`,ge,[r(e(_),{icon:`ti ti-arrow-left`,severity:`secondary`,variant:`text`,rounded:``,onClick:n[0]||=t=>e(I).back()}),i(`h1`,null,d(U.value?e(H)(`serviceForm.editTitle`):e(H)(`serviceForm.createTitle`)),1)]),J.value?(l(),a(`div`,_e,[i(`span`,null,d(e(H)(`serviceForm.agentChangedServiceStopped`)),1),r(e(_),{label:e(H)(`serviceForm.restartNow`),icon:`ti ti-player-play`,severity:`warn`,size:`small`,loading:Y.value,onClick:et},null,8,[`label`,`loading`]),r(e(_),{icon:`ti ti-x`,severity:`secondary`,variant:`text`,rounded:``,size:`small`,onClick:n[1]||=e=>{J.value=null,q.value=null}})])):f(``,!0),G.value?(l(),a(`div`,ve,[r(e(se))])):(l(),a(`form`,{key:2,class:`service-form`,onSubmit:m(tt,[`prevent`])},[U.value?(l(),a(u,{key:1},[i(`div`,M,[i(`div`,N,[i(`div`,xe,[i(`label`,Se,d(e(H)(`serviceForm.nameLabelShort`)),1),r(e(h),{id:`svc-name-edit`,modelValue:X.name,"onUpdate:modelValue":n[6]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,Ce,[i(`label`,we,d(e(H)(`serviceForm.runnerLabel`)),1),r(e(g),{id:`svc-runner`,modelValue:X.runner,"onUpdate:modelValue":n[7]||=e=>X.runner=e,options:Je,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`])])]),i(`div`,Te,[i(`label`,Ee,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent-edit`,modelValue:X.agentId,"onUpdate:modelValue":n[8]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`,`options`]),i(`small`,De,d(e(H)(`serviceForm.agentHintEdit`)),1)]),i(`div`,Oe,[i(`div`,ke,[i(`label`,Ae,d(e(H)(`serviceForm.cwdLabel`)),1),r(e(h),{id:`svc-cwd`,modelValue:X.cwd,"onUpdate:modelValue":n[9]||=e=>X.cwd=e,placeholder:`.`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,je,[i(`label`,Me,d(e(H)(`serviceForm.portsLabel`)),1),r(e(le),{inputId:`svc-ports`,modelValue:X.ports,"onUpdate:modelValue":n[10]||=e=>X.ports=e,multiple:``,typeahead:!1,placeholder:e(H)(`serviceForm.portsPlaceholder`),class:`w-full`,onChange:$},null,8,[`modelValue`,`placeholder`])])]),i(`div`,Ne,[r(e(ue),{modelValue:X.autoRestart,"onUpdate:modelValue":n[11]||=e=>X.autoRestart=e,inputId:`svc-autorestart`,onChange:$},null,8,[`modelValue`]),i(`label`,Pe,d(e(H)(`serviceForm.autoRestart`)),1)])]),r(e(b)),i(`div`,P,[i(`div`,Fe,[i(`h3`,null,d(e(H)(`serviceForm.envVars`)),1),r(e(_),{label:e(H)(`serviceForm.addEnvVar`),icon:`ti ti-plus`,severity:`secondary`,size:`small`,onClick:Xe},null,8,[`label`])]),Z.value.length===0?(l(),a(`div`,Ie,[i(`small`,null,d(e(H)(`serviceForm.noEnvVars`)),1)])):f(``,!0),(l(!0),a(u,null,o(Z.value,(t,o)=>(l(),a(`div`,{key:o,class:`env-row`},[r(e(h),{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:`KEY`,class:`env-key`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),n[17]||=i(`span`,{class:`env-eq`},`=`,-1),r(e(h),{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:`value`,class:`env-value`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),r(e(_),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{Ze(o),$()}},null,8,[`onClick`])]))),128))]),r(e(b)),r(e(oe),{legend:e(H)(`serviceForm.healthCheck`),toggleable:!0,collapsed:!X.healthCheck.enabled,onToggle:n[16]||=e=>{X.healthCheck.enabled=!e.value,$()}},{default:te(()=>[i(`div`,Le,[i(`label`,Re,d(e(H)(`serviceForm.healthCheckPath`)),1),r(e(h),{id:`hc-path`,modelValue:X.healthCheck.path,"onUpdate:modelValue":n[12]||=e=>X.healthCheck.path=e,placeholder:`/health`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,ze,[i(`div`,Be,[i(`label`,Ve,d(e(H)(`serviceForm.interval`)),1),r(e(y),{id:`hc-interval`,modelValue:X.healthCheck.interval,"onUpdate:modelValue":n[13]||=e=>X.healthCheck.interval=e,min:1e3,step:1e3,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,He,[i(`label`,Ue,d(e(H)(`serviceForm.timeout`)),1),r(e(y),{id:`hc-timeout`,modelValue:X.healthCheck.timeout,"onUpdate:modelValue":n[14]||=e=>X.healthCheck.timeout=e,min:500,step:500,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,We,[i(`label`,Ge,d(e(H)(`serviceForm.retries`)),1),r(e(y),{id:`hc-retries`,modelValue:X.healthCheck.retries,"onUpdate:modelValue":n[15]||=e=>X.healthCheck.retries=e,min:0,max:20,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])])]),_:1},8,[`legend`,`collapsed`]),r(e(b))],64)):(l(),a(u,{key:0},[i(`div`,ye,[i(`div`,be,[i(`label`,C,d(e(H)(`serviceForm.projectLabel`)),1),r(e(g),{id:`svc-project`,modelValue:X.projectId,"onUpdate:modelValue":n[2]||=e=>X.projectId=e,options:Ye.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.projectPlaceholder`),class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,w,d(e(H)(`serviceForm.projectHint`)),1)]),i(`div`,T,[i(`label`,E,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent`,modelValue:X.agentId,"onUpdate:modelValue":n[3]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.agentInherit`),"show-clear":``,class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,D,d(e(H)(`serviceForm.agentHint`)),1)]),i(`div`,O,[i(`label`,k,d(e(H)(`serviceForm.nameLabel`)),1),r(e(h),{id:`svc-name`,modelValue:X.name,"onUpdate:modelValue":n[4]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`},null,8,[`modelValue`]),i(`small`,A,d(e(H)(`serviceForm.nameConfigHint`)),1)])]),r(e(b)),i(`div`,j,[r(e(_),{label:e(H)(`serviceForm.cancel`),severity:`secondary`,variant:`text`,onClick:n[5]||=t=>e(I).back()},null,8,[`label`]),r(e(_),{label:e(H)(`serviceForm.create`),icon:`ti ti-check`,loading:K.value,type:`submit`},null,8,[`label`,`loading`])])],64))],32))]))}}),[[`__scopeId`,`data-v-d66dd220`]]);export{I as default};
1
+ import{B as e,C as t,x as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as r,_ as i,b as a,bt as o,ct as ee,g as s,k as c,mt as l,o as u,qt as te,rn as d,y as f}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as p,w as m}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as ne}from"./vue-i18n-o7yraQpR.js";import{n as re}from"./project-launch.store-B5OL69Kk.js";import{g as ie,h as ae}from"./useApi-s_02lHjl-DZYO2tHU.js";import{F as oe,H as se,J as h,P as ce,S as g,dt as _,ft as v,i as le,k as ue,l as y,z as b}from"./src-DOcCcTQv.js";import{r as x}from"./trpc-BVA95nUx.js";import{n as de}from"./project.store-CSuUie96.js";import{n as S}from"./error-DpF7X5iu.js";import{t as fe}from"./service.store-CaPqbX9_.js";import{t as pe}from"./agent.store-DfMGUOUY.js";import{c as me}from"./index-CzGU0RCX.js";var he={class:`service-form-page`},ge={class:`page-header`},_e={key:0,class:`restart-banner`},ve={key:1,class:`loading-container`},ye={class:`form-section`},be={class:`form-group`},C={for:`svc-project`},w={class:`form-hint`},T={class:`form-group`},E={for:`svc-agent`},D={class:`form-hint`},O={class:`form-group`},k={for:`svc-name`},A={class:`form-hint`},j={class:`form-actions`},M={class:`form-section`},N={class:`form-row`},xe={class:`form-group flex-1`},Se={for:`svc-name-edit`},Ce={class:`form-group`,style:{width:`160px`}},we={for:`svc-runner`},Te={class:`form-group`},Ee={for:`svc-agent-edit`},De={class:`form-hint`},Oe={class:`form-row`},ke={class:`form-group flex-1`},Ae={for:`svc-cwd`},je={class:`form-group`,style:{"min-width":`200px`}},Me={for:`svc-ports`},Ne={class:`form-group switch-group`},Pe={for:`svc-autorestart`},P={class:`form-section`},Fe={class:`section-header`},Ie={key:0,class:`empty-env`},Le={class:`form-group`},Re={for:`hc-path`},ze={class:`form-row`},Be={class:`form-group flex-1`},Ve={for:`hc-interval`},He={class:`form-group flex-1`},Ue={for:`hc-timeout`},We={class:`form-group flex-1`},Ge={for:`hc-retries`},F=`__inherit__`,I=v(c({__name:`ServiceFormPage`,props:{id:{}},setup(c){let v=c,I=ie(),Ke=ae(),L=ce(),R=de(),z=fe(),B=pe(),V=re(),qe=me(),{t:H}=ne(),U=s(()=>!!v.id),W=s(()=>Ke.query.projectId),G=t(!1),K=t(!1),q=t(null),J=t(null),Y=t(!1),X=n({projectId:``,agentId:F,name:``,cwd:``,ports:[],runner:`native`,autoRestart:!1,healthCheck:{enabled:!1,path:``,interval:3e4,timeout:5e3,retries:3}}),Z=t([]),Je=[{label:`Native`,value:`native`},{label:`Docker`,value:`docker`}],Ye=s(()=>R.projects.map(e=>({label:e.name,value:e.id}))),Q=s(()=>[{label:H(`serviceForm.agentInherit`),value:F},...B.agents.map(e=>({label:`${e.config.name} ${e.status.connected?`(Online)`:`(Offline)`}`,value:e.config.id}))]);function Xe(){Z.value=[...Z.value,{key:``,value:``,isSecret:!1}]}function Ze(e){Z.value=Z.value.filter((t,n)=>n!==e)}function Qe(){let e={},t=!1;for(let n of Z.value){let r=n.key.trim();r&&(e[r]={value:{value:n.value,pre:``,post:``,isSecret:n.isSecret}},t=!0)}return t?e:void 0}async function $e(){if(v.id){G.value=!0;try{let e=await x.service.get.query({id:v.id});X.agentId=e.agentId??F,X.name=e.name,X.cwd=e.cwd??``,X.ports=(e.ports??[]).map(String),X.runner=e.runner,X.autoRestart=e.autoRestart,e.healthCheck&&(X.healthCheck.enabled=!0,X.healthCheck.path=e.healthCheck.path,X.healthCheck.interval=e.healthCheck.interval,X.healthCheck.timeout=e.healthCheck.timeout,X.healthCheck.retries=e.healthCheck.retries),e.variables&&typeof e.variables==`object`&&Object.keys(e.variables).length>0&&(Z.value=Object.entries(e.variables).map(([e,t])=>{let n=t;return{key:e,value:n.value.value??``,isSecret:n.value.isSecret??!1}}))}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToLoad`),life:5e3}),I.back()}finally{G.value=!1}}}async function $(){if(U.value&&v.id&&!K.value&&!G.value){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}K.value=!0;try{let e={agentId:X.agentId===F?null:X.agentId||null,name:X.name.trim(),cwd:X.cwd.trim()||void 0,ports:X.ports.map(Number).filter(e=>e>0&&e<=65535),runner:X.runner,autoRestart:X.autoRestart,variables:Qe(),healthCheck:X.healthCheck.enabled?{path:X.healthCheck.path,interval:X.healthCheck.interval,timeout:X.healthCheck.timeout,retries:X.healthCheck.retries}:void 0};(await x.service.update.mutate({id:v.id,...e}))?.stoppedForAgentChange?(q.value=e.agentId,J.value=v.id,L.add({severity:`warn`,summary:H(`serviceForm.saved`),detail:H(`serviceForm.agentChangedServiceStopped`),life:4e3})):L.add({severity:`success`,summary:H(`serviceForm.saved`),life:1500})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}}async function et(){if(q.value&&J.value){Y.value=!0;try{await qe.start(q.value,J.value),q.value=null,J.value=null,L.add({severity:`success`,summary:H(`serviceForm.restarted`),life:2e3})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e),life:5e3})}finally{Y.value=!1}}}async function tt(){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}if(!X.projectId){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.projectRequired`),life:3e3});return}K.value=!0;try{let e=R.getByRef({id:X.projectId,orgId:V.activeOrgId})??R.getById(X.projectId),t=await z.create({name:X.name.trim(),...X.agentId&&X.agentId!==F?{agentId:X.agentId}:{},projectId:X.projectId,orgId:e?.orgId??null});if(!t)throw Error(z.error??`Failed to create service`);await R.addService(e??{id:X.projectId},t.id),L.add({severity:`success`,summary:H(`serviceForm.serviceCreated`),detail:H(`serviceForm.configureAfterCreate`),life:3e3}),I.push({name:`service-detail`,params:{id:t.id,tab:`config`}})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}return ee(async()=>{await Promise.all([R.fetchAll(),B.fetchAll()]),W.value?X.projectId=W.value:!X.projectId&&V.activeProjectId&&(X.projectId=V.activeProjectId),U.value&&await $e()}),(t,n)=>(l(),a(`div`,he,[i(`div`,ge,[r(e(_),{icon:`ti ti-arrow-left`,severity:`secondary`,variant:`text`,rounded:``,onClick:n[0]||=t=>e(I).back()}),i(`h1`,null,d(U.value?e(H)(`serviceForm.editTitle`):e(H)(`serviceForm.createTitle`)),1)]),J.value?(l(),a(`div`,_e,[i(`span`,null,d(e(H)(`serviceForm.agentChangedServiceStopped`)),1),r(e(_),{label:e(H)(`serviceForm.restartNow`),icon:`ti ti-player-play`,severity:`warn`,size:`small`,loading:Y.value,onClick:et},null,8,[`label`,`loading`]),r(e(_),{icon:`ti ti-x`,severity:`secondary`,variant:`text`,rounded:``,size:`small`,onClick:n[1]||=e=>{J.value=null,q.value=null}})])):f(``,!0),G.value?(l(),a(`div`,ve,[r(e(se))])):(l(),a(`form`,{key:2,class:`service-form`,onSubmit:m(tt,[`prevent`])},[U.value?(l(),a(u,{key:1},[i(`div`,M,[i(`div`,N,[i(`div`,xe,[i(`label`,Se,d(e(H)(`serviceForm.nameLabelShort`)),1),r(e(h),{id:`svc-name-edit`,modelValue:X.name,"onUpdate:modelValue":n[6]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,Ce,[i(`label`,we,d(e(H)(`serviceForm.runnerLabel`)),1),r(e(g),{id:`svc-runner`,modelValue:X.runner,"onUpdate:modelValue":n[7]||=e=>X.runner=e,options:Je,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`])])]),i(`div`,Te,[i(`label`,Ee,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent-edit`,modelValue:X.agentId,"onUpdate:modelValue":n[8]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`,`options`]),i(`small`,De,d(e(H)(`serviceForm.agentHintEdit`)),1)]),i(`div`,Oe,[i(`div`,ke,[i(`label`,Ae,d(e(H)(`serviceForm.cwdLabel`)),1),r(e(h),{id:`svc-cwd`,modelValue:X.cwd,"onUpdate:modelValue":n[9]||=e=>X.cwd=e,placeholder:`.`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,je,[i(`label`,Me,d(e(H)(`serviceForm.portsLabel`)),1),r(e(le),{inputId:`svc-ports`,modelValue:X.ports,"onUpdate:modelValue":n[10]||=e=>X.ports=e,multiple:``,typeahead:!1,placeholder:e(H)(`serviceForm.portsPlaceholder`),class:`w-full`,onChange:$},null,8,[`modelValue`,`placeholder`])])]),i(`div`,Ne,[r(e(ue),{modelValue:X.autoRestart,"onUpdate:modelValue":n[11]||=e=>X.autoRestart=e,inputId:`svc-autorestart`,onChange:$},null,8,[`modelValue`]),i(`label`,Pe,d(e(H)(`serviceForm.autoRestart`)),1)])]),r(e(b)),i(`div`,P,[i(`div`,Fe,[i(`h3`,null,d(e(H)(`serviceForm.envVars`)),1),r(e(_),{label:e(H)(`serviceForm.addEnvVar`),icon:`ti ti-plus`,severity:`secondary`,size:`small`,onClick:Xe},null,8,[`label`])]),Z.value.length===0?(l(),a(`div`,Ie,[i(`small`,null,d(e(H)(`serviceForm.noEnvVars`)),1)])):f(``,!0),(l(!0),a(u,null,o(Z.value,(t,o)=>(l(),a(`div`,{key:o,class:`env-row`},[r(e(h),{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:`KEY`,class:`env-key`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),n[17]||=i(`span`,{class:`env-eq`},`=`,-1),r(e(h),{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:`value`,class:`env-value`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),r(e(_),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{Ze(o),$()}},null,8,[`onClick`])]))),128))]),r(e(b)),r(e(oe),{legend:e(H)(`serviceForm.healthCheck`),toggleable:!0,collapsed:!X.healthCheck.enabled,onToggle:n[16]||=e=>{X.healthCheck.enabled=!e.value,$()}},{default:te(()=>[i(`div`,Le,[i(`label`,Re,d(e(H)(`serviceForm.healthCheckPath`)),1),r(e(h),{id:`hc-path`,modelValue:X.healthCheck.path,"onUpdate:modelValue":n[12]||=e=>X.healthCheck.path=e,placeholder:`/health`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,ze,[i(`div`,Be,[i(`label`,Ve,d(e(H)(`serviceForm.interval`)),1),r(e(y),{id:`hc-interval`,modelValue:X.healthCheck.interval,"onUpdate:modelValue":n[13]||=e=>X.healthCheck.interval=e,min:1e3,step:1e3,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,He,[i(`label`,Ue,d(e(H)(`serviceForm.timeout`)),1),r(e(y),{id:`hc-timeout`,modelValue:X.healthCheck.timeout,"onUpdate:modelValue":n[14]||=e=>X.healthCheck.timeout=e,min:500,step:500,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,We,[i(`label`,Ge,d(e(H)(`serviceForm.retries`)),1),r(e(y),{id:`hc-retries`,modelValue:X.healthCheck.retries,"onUpdate:modelValue":n[15]||=e=>X.healthCheck.retries=e,min:0,max:20,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])])]),_:1},8,[`legend`,`collapsed`]),r(e(b))],64)):(l(),a(u,{key:0},[i(`div`,ye,[i(`div`,be,[i(`label`,C,d(e(H)(`serviceForm.projectLabel`)),1),r(e(g),{id:`svc-project`,modelValue:X.projectId,"onUpdate:modelValue":n[2]||=e=>X.projectId=e,options:Ye.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.projectPlaceholder`),class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,w,d(e(H)(`serviceForm.projectHint`)),1)]),i(`div`,T,[i(`label`,E,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent`,modelValue:X.agentId,"onUpdate:modelValue":n[3]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.agentInherit`),"show-clear":``,class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,D,d(e(H)(`serviceForm.agentHint`)),1)]),i(`div`,O,[i(`label`,k,d(e(H)(`serviceForm.nameLabel`)),1),r(e(h),{id:`svc-name`,modelValue:X.name,"onUpdate:modelValue":n[4]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`},null,8,[`modelValue`]),i(`small`,A,d(e(H)(`serviceForm.nameConfigHint`)),1)])]),r(e(b)),i(`div`,j,[r(e(_),{label:e(H)(`serviceForm.cancel`),severity:`secondary`,variant:`text`,onClick:n[5]||=t=>e(I).back()},null,8,[`label`]),r(e(_),{label:e(H)(`serviceForm.create`),icon:`ti ti-check`,loading:K.value,type:`submit`},null,8,[`label`,`loading`])])],64))],32))]))}}),[[`__scopeId`,`data-v-d66dd220`]]);export{I as default};
@@ -1 +1 @@
1
- .traefik-settings[data-v-dbbd59b3]{box-sizing:border-box;flex-direction:column;gap:1rem;width:100%;min-width:0;display:flex}.traefik-settings[data-v-dbbd59b3] input,.traefik-settings[data-v-dbbd59b3] .r-input,.traefik-settings[data-v-dbbd59b3] .r-select,.traefik-settings[data-v-dbbd59b3] .r-autocomplete,.traefik-settings[data-v-dbbd59b3] .r-password{box-sizing:border-box;width:100%;max-width:100%}.traefik-row[data-v-dbbd59b3]{justify-content:space-between;align-items:center;display:flex}.traefik-field[data-v-dbbd59b3]{flex-direction:column;gap:.4rem;display:flex}.traefik-field label[data-v-dbbd59b3]{font-size:.875rem;font-weight:500}.traefik-field small[data-v-dbbd59b3]{color:var(--r-text-muted);font-size:.75rem}.credential-row[data-v-dbbd59b3]{align-items:center;gap:.5rem;min-width:0;display:flex}.credential-key[data-v-dbbd59b3]{flex:0 0 160px;min-width:0}.credential-value[data-v-dbbd59b3]{flex:1;min-width:0}.credential-value[data-v-dbbd59b3] .r-password,.credential-value[data-v-dbbd59b3] .r-password input{width:100%}.traefik-ports[data-v-dbbd59b3]{gap:1rem;display:flex}.traefik-field--small[data-v-dbbd59b3]{flex:1}.hint-ok[data-v-dbbd59b3]{color:var(--r-green-500);font-size:.8rem;font-weight:400}.traefik-actions[data-v-dbbd59b3]{align-self:flex-end;gap:.5rem;display:flex}.traefik-renewal-notice[data-v-dbbd59b3]{background:color-mix(in srgb, var(--r-blue-500) 10%, transparent);border:1px solid color-mix(in srgb, var(--r-blue-500) 30%, transparent);color:var(--r-blue-300);align-items:flex-start;gap:.6rem;padding:.75rem;font-size:.875rem;display:flex}.traefik-validation[data-v-dbbd59b3]{border:1px solid var(--r-border);flex-direction:column;gap:.4rem;padding:.75rem;display:flex}.validation-item[data-v-dbbd59b3]{align-items:center;gap:.5rem;font-size:.875rem;display:flex}.validation-item--ok[data-v-dbbd59b3]{color:var(--r-green-500)}.validation-item--fail[data-v-dbbd59b3]{color:var(--r-red-500)}.traefik-logs[data-v-dbbd59b3],.traefik-config-files[data-v-dbbd59b3]{border:1px solid var(--r-border);overflow:hidden}.config-tabs[data-v-dbbd59b3]{gap:.25rem;display:flex}.config-tab[data-v-dbbd59b3]{cursor:pointer;color:var(--r-text-muted);background:0 0;border:none;padding:.2rem .6rem;font-size:.8rem}.config-tab--active[data-v-dbbd59b3]{background:var(--r-primary);color:var(--r-primary-contrast)}.traefik-logs-header[data-v-dbbd59b3]{background:var(--r-bg-hover);justify-content:space-between;align-items:center;padding:.4rem .75rem;font-size:.8rem;font-weight:600;display:flex}.logs-live[data-v-dbbd59b3]{color:var(--r-green-400);font-size:.7rem;animation:1.2s ease-in-out infinite blink-dbbd59b3}@keyframes blink-dbbd59b3{0%,to{opacity:1}50%{opacity:.3}}.traefik-logs-content[data-v-dbbd59b3]{white-space:pre-wrap;word-break:break-all;background:var(--r-surface-900,#1a1a1a);max-height:300px;color:var(--r-surface-100,#f0f0f0);margin:0;padding:.75rem;font-family:monospace;font-size:.75rem;overflow-y:auto}.traefik-dialog-layout[data-v-6b2d251e]{grid-template-columns:1fr 1fr;gap:1.5rem;min-height:0;display:grid}.traefik-dialog-left[data-v-6b2d251e]{min-width:0;max-height:80vh;padding-right:.5rem;overflow-y:auto}.traefik-dialog-right[data-v-6b2d251e]{flex-direction:column;gap:.5rem;min-width:0;max-height:80vh;display:flex}.fs-header[data-v-6b2d251e]{color:var(--r-text-muted);border-bottom:1px solid var(--r-border);justify-content:space-between;align-items:center;padding:.25rem 0;font-size:.75rem;font-weight:600;display:flex}.fs-tree[data-v-6b2d251e]{flex-direction:column;gap:1px;display:flex}.fs-entry[data-v-6b2d251e]{cursor:pointer;text-align:left;color:var(--r-text);background:0 0;border:none;align-items:center;gap:.4rem;width:100%;padding:.3rem .5rem;font-size:.8rem;display:flex}.fs-entry[data-v-6b2d251e]:hover{background:var(--r-bg-hover)}.fs-entry--active[data-v-6b2d251e]{background:color-mix(in srgb, var(--r-primary) 15%, transparent);color:var(--r-primary)}.fs-icon[data-v-6b2d251e]{opacity:.6;flex-shrink:0;font-size:.75rem}.fs-dir[data-v-6b2d251e]{opacity:.5;font-size:.7rem}.fs-name[data-v-6b2d251e]{font-weight:500}.fs-empty[data-v-6b2d251e]{color:var(--r-text-muted);padding:.5rem;font-size:.8rem;font-style:italic}.fs-content[data-v-6b2d251e]{white-space:pre-wrap;word-break:break-all;background:var(--r-surface-900,#1a1a1a);color:var(--r-surface-100,#f0f0f0);border:1px solid var(--r-border);flex:1;margin:0;padding:.75rem;font-family:monospace;font-size:.72rem;overflow-y:auto}.agent-page[data-v-0cafa443]{max-width:1200px;margin:0 auto;padding:1.5rem}.page-header[data-v-0cafa443]{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.page-header h1[data-v-0cafa443]{margin:0;font-size:1.75rem;font-weight:700}.loading-container[data-v-0cafa443],.error-container[data-v-0cafa443],.empty-container[data-v-0cafa443]{color:var(--r-text-muted);flex-direction:column;align-items:center;gap:.75rem;padding:3rem 0;display:flex}.agent-name[data-v-0cafa443]{align-items:center;gap:.5rem;font-weight:500;display:flex}.agent-url[data-v-0cafa443]{background:var(--r-bg-hover);border-radius:4px;padding:.15rem .4rem;font-family:Fira Code,Cascadia Code,monospace;font-size:.8rem}.runner-tags[data-v-0cafa443]{flex-wrap:wrap;gap:.3rem;display:flex}.action-grid[data-v-0cafa443]{grid-template-columns:repeat(2,auto);gap:0;width:fit-content;display:grid}@media (width<=768px){[data-v-0cafa443] .hide-on-mobile{display:none!important}[data-v-0cafa443] .r-datatable__header-content{white-space:nowrap}.agent-url[data-v-0cafa443]{word-break:break-all;white-space:normal}}.text-muted[data-v-0cafa443]{color:var(--r-text-muted)}.form-group[data-v-0cafa443]{margin-bottom:1rem}.form-group label[data-v-0cafa443]{margin-bottom:.4rem;font-size:.875rem;font-weight:500;display:block}.form-hint[data-v-0cafa443]{color:var(--r-text-muted);font-size:.78rem}.test-connection[data-v-0cafa443]{align-items:center;gap:.75rem;display:flex}.w-full[data-v-0cafa443]{width:100%}.passthrough-description[data-v-0cafa443]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem;line-height:1.4}.passthrough-list[data-v-0cafa443]{flex-direction:column;gap:.25rem;margin-bottom:.75rem;display:flex}.passthrough-item[data-v-0cafa443]{background:var(--r-bg-hover);border-radius:6px;justify-content:space-between;align-items:center;padding:.3rem .5rem;display:flex}.passthrough-item-info[data-v-0cafa443]{align-items:center;gap:.4rem;min-width:0;display:flex;overflow:hidden}.passthrough-item code[data-v-0cafa443]{flex-shrink:0;font-family:Fira Code,Cascadia Code,monospace;font-size:.85rem}.passthrough-value[data-v-0cafa443]{color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;font-family:Fira Code,Cascadia Code,monospace;font-size:.8rem;overflow:hidden}.passthrough-undefined[data-v-0cafa443]{color:var(--r-orange-500);font-size:.78rem;font-style:italic}.passthrough-unsaved[data-v-0cafa443]{color:var(--r-text-muted);font-size:.78rem;font-style:italic}.passthrough-empty[data-v-0cafa443]{margin-bottom:.75rem;font-size:.85rem}.passthrough-add[data-v-0cafa443]{align-items:center;gap:.5rem;display:flex}.passthrough-add-input[data-v-0cafa443]{flex:1}.passthrough-error[data-v-0cafa443]{color:var(--r-red-500);margin-top:.25rem;font-size:.78rem;display:block}.api-keys-page[data-v-3638081a]{max-width:860px;padding:1.5rem}.api-keys-page__header[data-v-3638081a]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.api-keys-page__header h1[data-v-3638081a]{margin:0;font-size:1.5rem;font-weight:600}.api-keys-page__subtitle[data-v-3638081a]{color:var(--r-text-muted);flex:1;margin:0;font-size:.875rem}.api-keys-page__empty[data-v-3638081a]{color:var(--r-text-muted);padding:2rem 0;font-size:.9rem}.api-keys-card[data-v-3638081a]{max-width:680px}.api-keys-list[data-v-3638081a]{flex-direction:column;gap:.5rem;display:flex}.api-key-card[data-v-3638081a]{border:1px solid var(--r-border);background:var(--r-bg);padding:.5rem .75rem;position:relative}.api-key-card__body[data-v-3638081a]{min-width:0}.api-key-card__name[data-v-3638081a]{align-items:center;gap:.5rem;margin-bottom:.2rem;padding-right:5rem;font-weight:500;display:flex}.api-key-card__meta[data-v-3638081a]{color:var(--r-text-muted);margin-bottom:.4rem;font-size:.8rem}.api-key-card__url-row[data-v-3638081a]{align-items:center;gap:.4rem;display:flex}.api-key-card__url[data-v-3638081a]{min-width:0;color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.75rem;overflow:hidden}.api-key-card__actions[data-v-3638081a]{gap:.3rem;display:flex;position:absolute;top:.5rem;right:.5rem}.badge[data-v-3638081a]{text-transform:uppercase;border-radius:4px;padding:.1rem .4rem;font-size:.7rem;font-weight:600}.badge--info[data-v-3638081a]{background:var(--r-blue-100);color:var(--r-blue-700)}.api-key-form[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:10px;max-width:600px;padding:1.5rem}.api-key-form h2[data-v-3638081a]{margin:0 0 1.25rem;font-size:1.1rem}.form-field[data-v-3638081a]{margin-bottom:1.25rem}.form-field>label[data-v-3638081a]:first-child{margin-bottom:.5rem;font-size:.875rem;font-weight:600;display:block}.form-hint[data-v-3638081a]{color:var(--r-text-muted);margin-top:.4rem;font-size:.75rem}.radio-group[data-v-3638081a]{flex-direction:column;gap:.4rem;display:flex}.radio-label[data-v-3638081a]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;font-size:.875rem;display:flex}.svc-list-container[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:8px;margin-bottom:.5rem;overflow:hidden}.svc-list-search[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);align-items:center;gap:.5rem;padding:.4rem .75rem;display:flex}.svc-list-search__icon[data-v-3638081a]{color:var(--r-text-muted);flex-shrink:0;font-size:.75rem}.svc-list-search__input[data-v-3638081a]{box-shadow:none;color:var(--r-text);background:0 0;border:none;outline:none;flex:1;padding:0;font-size:.85rem}.svc-list-search__input[data-v-3638081a]::placeholder{color:var(--r-text-muted)}.svc-list-search__clear[data-v-3638081a]{cursor:pointer;color:var(--r-text-muted);background:0 0;border:none;align-items:center;padding:0;font-size:.75rem;display:flex}.svc-list-search__clear[data-v-3638081a]:hover{color:var(--r-text)}.svc-list-scroll[data-v-3638081a]{max-height:360px;overflow-y:auto}.svc-list-empty[data-v-3638081a]{margin:0;padding:.75rem}.svc-perm-row[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);overflow:hidden}.svc-perm-row[data-v-3638081a]:last-child{border-bottom:none}.svc-perm-row__header[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:.4rem .75rem;display:flex}.svc-perm-row__header[data-v-3638081a]:hover{background:var(--runeya-sidebar-hover)}.svc-chevron[data-v-3638081a]{color:var(--r-text-muted);font-size:.7rem;transition:transform .15s}.svc-perm-summary[data-v-3638081a]{color:var(--r-text-muted);margin-left:.3rem;font-size:.75rem;font-weight:400}.svc-perm-row__name[data-v-3638081a]{align-items:center;gap:.4rem;font-size:.875rem;font-weight:600;display:flex}.svc-perm-row__actions[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);flex-wrap:wrap;gap:.35rem;padding:.5rem .75rem;display:flex}.action-chip--sub[data-v-3638081a]{opacity:.85;margin-left:.25rem;font-size:.72rem}.action-chip--sub.flag-chip--on[data-v-3638081a]{background:var(--r-primary-400,var(--r-primary))}.svc-perm-row__envs[data-v-3638081a]{flex-direction:column;gap:.35rem;padding:.5rem .75rem;display:flex}.env-perm-row[data-v-3638081a]{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.env-perm-row__name[data-v-3638081a]{color:var(--r-text-muted);align-items:center;gap:.3rem;min-width:8rem;font-size:.8rem;display:flex}.env-add-row[data-v-3638081a]{margin-top:.25rem}.svc-add-row[data-v-3638081a]{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.5rem;display:flex}.import-modal__body[data-v-3638081a]{flex-direction:column;gap:1rem;padding:.25rem 0;display:flex}.import-modal__desc[data-v-3638081a]{color:var(--r-text-muted);margin:0;font-size:.875rem}.import-section[data-v-3638081a]{flex-direction:column;gap:.4rem;display:flex}.import-section__label[data-v-3638081a]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;font-weight:600}.form-actions[data-v-3638081a]{justify-content:space-between;align-items:center;gap:.75rem;margin-top:1.5rem;display:flex}.form-actions__right[data-v-3638081a]{gap:.75rem;display:flex}.btn--renew[data-v-3638081a]{color:var(--r-text-muted);font-size:.8rem}.btn--renew[data-v-3638081a]:hover:not(:disabled){color:var(--r-text)}.api-key-card__skill[data-v-3638081a]{margin-top:.6rem}.skill-toggle[data-v-3638081a]{color:var(--r-text-muted);gap:.35rem}.skill-toggle[data-v-3638081a]:hover{color:var(--r-text)}.skill-panel[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:6px;margin-top:.5rem;overflow:hidden}.skill-panel__tools[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);flex-wrap:wrap;gap:.35rem;padding:.5rem .75rem;display:flex}.skill-tool-btn[data-v-3638081a]{border:1px solid var(--runeya-border);color:var(--r-text-muted);cursor:pointer;background:0 0;border-radius:20px;padding:.2rem .6rem;font-size:.72rem;transition:all .12s}.skill-tool-btn[data-v-3638081a]:hover{background:var(--runeya-sidebar-hover);color:var(--r-text)}.skill-tool-btn--active[data-v-3638081a]{background:var(--r-primary);color:var(--r-primary-contrast,#fff);border-color:var(--r-primary)}.skill-panel__header[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);justify-content:space-between;align-items:center;padding:.4rem .75rem;display:flex}.skill-panel__btns[data-v-3638081a]{gap:.35rem;display:flex}.skill-panel__hint[data-v-3638081a]{color:var(--r-text-muted);font-size:.75rem}.skill-panel__code[data-v-3638081a]{white-space:pre-wrap;word-break:break-all;color:var(--r-text);max-height:260px;margin:0;padding:.75rem;font-size:.72rem;line-height:1.5;overflow-y:auto}.renew-modal__body[data-v-3638081a]{flex-direction:column;gap:.5rem;padding:.25rem 0;display:flex}.renew-modal__title[data-v-3638081a]{align-items:center;gap:.5rem;font-weight:600;display:flex}.renew-modal__title-icon[data-v-3638081a]{color:var(--r-orange-500,#f97316)}.renew-modal__body p[data-v-3638081a]{margin:0;font-size:.9rem;line-height:1.5}.btn[data-v-3638081a]{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:.4rem;padding:.45rem .9rem;font-size:.875rem;font-weight:500;transition:all .15s;display:inline-flex}.btn[data-v-3638081a]:disabled{opacity:.5;cursor:not-allowed}.btn--primary[data-v-3638081a]{background:var(--r-primary);color:var(--r-primary-contrast,#fff)}.btn--primary[data-v-3638081a]:hover:not(:disabled){filter:brightness(1.1)}.btn--ghost[data-v-3638081a]{color:var(--r-text);border:1px solid var(--runeya-border);background:0 0}.btn--ghost[data-v-3638081a]:hover:not(:disabled){background:var(--runeya-sidebar-hover)}.btn--danger[data-v-3638081a]{color:var(--r-red-500,#ef4444);border:1px solid var(--runeya-border);background:0 0}.btn--danger[data-v-3638081a]:hover:not(:disabled){background:var(--r-red-50,#fef2f2)}.btn--sm[data-v-3638081a]{padding:.3rem .6rem;font-size:.8rem}.btn--xs[data-v-3638081a]{padding:.2rem .4rem;font-size:.75rem}.ai-clients[data-v-d59c38d1]{flex-direction:column;gap:1rem;display:flex}.ai-clients__scope[data-v-d59c38d1]{border:1px solid var(--r-border);background:color-mix(in srgb, var(--r-text) 4%, var(--r-bg));border-radius:8px;flex-direction:column;gap:.75rem;padding:1rem 1.25rem;display:flex}.ai-clients__scope-cols[data-v-d59c38d1]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.ai-clients__scope-head[data-v-d59c38d1]{align-items:center;gap:.375rem;margin:0;font-size:.875rem;font-weight:600;display:flex}.ai-clients__scope-list[data-v-d59c38d1]{color:var(--r-text-muted);margin:.25rem 0 0;padding-left:1.1rem;font-size:.875rem}.ai-clients__scope-list li+li[data-v-d59c38d1]{margin-top:.15rem}.ai-clients__head[data-v-d59c38d1]{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem;display:flex}.ai-clients__title[data-v-d59c38d1]{margin:0;font-size:1rem;font-weight:600}.ai-clients__hint[data-v-d59c38d1],.ai-clients__empty[data-v-d59c38d1]{color:var(--r-text-muted);margin:.25rem 0 0;font-size:.875rem}.ai-clients__list[data-v-d59c38d1]{margin:0;padding:0;list-style:none}.ai-clients__row[data-v-d59c38d1]{border-top:1px solid var(--r-border);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:.75rem 0;display:grid}.ai-clients__row[data-v-d59c38d1]:first-child{border-top:none;padding-top:.25rem}.ai-clients__row[data-v-d59c38d1]:has(>:nth-child(2):last-child){grid-template-columns:minmax(0,1fr) auto}.ai-clients__main[data-v-d59c38d1]{flex-direction:column;gap:.25rem;min-width:0;display:flex}.ai-clients__name[data-v-d59c38d1]{font-weight:600}.ai-clients__meta[data-v-d59c38d1],.ai-clients__meta code[data-v-d59c38d1]{text-overflow:ellipsis;white-space:nowrap;color:var(--r-text-muted);font-size:.8rem;overflow:hidden}.ai-clients__action[data-v-d59c38d1]{justify-content:center;min-width:6.5rem}@media (width<=640px){.ai-clients__scope-cols[data-v-d59c38d1]{grid-template-columns:minmax(0,1fr)}.ai-clients__row[data-v-d59c38d1]{grid-template-columns:minmax(0,1fr) auto}.ai-clients__row>.ai-clients__action[data-v-d59c38d1]{grid-column:1/-1;justify-self:start}}.settings-card[data-v-677de251]{max-width:680px}.cloud-banner[data-v-677de251]{border:1px solid var(--r-primary);background:color-mix(in srgb, var(--r-primary) 8%, transparent);width:100%;max-width:680px;color:var(--r-text);cursor:pointer;text-align:left;font:inherit;border-radius:10px;align-items:center;gap:1rem;margin-bottom:1.25rem;padding:1rem 1.25rem;transition:background .15s,box-shadow .15s;display:flex}.cloud-banner[data-v-677de251]:hover{background:color-mix(in srgb, var(--r-primary) 14%, transparent);box-shadow:0 2px 10px color-mix(in srgb, var(--r-primary) 20%, transparent)}.cloud-banner__icon[data-v-677de251]{color:var(--r-primary);flex-shrink:0;font-size:1.75rem}.cloud-banner__text[data-v-677de251]{flex-direction:column;flex:1;gap:.15rem;min-width:0;display:flex}.cloud-banner__title[data-v-677de251]{font-size:1rem}.cloud-banner__desc[data-v-677de251]{color:var(--r-text-muted);font-size:.85rem}.cloud-banner__action[data-v-677de251]{color:var(--r-primary);white-space:nowrap;flex-shrink:0;align-items:center;gap:.4rem;font-weight:600;display:inline-flex}.setting-row[data-v-677de251]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row[data-v-677de251]:last-child{border-bottom:none}.setting-label[data-v-677de251]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-value[data-v-677de251]{flex:1;align-items:center;gap:.5rem;display:flex}.path-value[data-v-677de251]{word-break:break-all;min-width:0;color:var(--r-text);flex:1;font-size:.85rem}.setting-input[data-v-677de251]{width:100%;max-width:400px}.setting-actions[data-v-677de251]{padding-top:1rem}.launcher-report[data-v-677de251]{background:var(--r-bg);border:1px solid var(--r-border);white-space:pre-wrap;word-break:break-all;border-radius:6px;max-height:260px;margin:0 0 .5rem;padding:.5rem .75rem;font-size:.78rem;overflow:auto}.settings-card[data-v-f376e6ce]{max-width:680px}.notification-groups[data-v-f376e6ce]{flex-direction:column;gap:1rem;display:flex}.notification-group[data-v-f376e6ce]{border:1px solid var(--r-border);background:color-mix(in srgb, var(--r-bg-hover) 35%, transparent);padding:.9rem 1rem}.notification-group__header[data-v-f376e6ce]{justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.35rem;display:flex}.notification-group__collapse-button[data-v-f376e6ce]{appearance:none;text-align:left;cursor:pointer;color:inherit;background:0 0;border:0;flex:1;margin:0;padding:0}.notification-group__title-wrap[data-v-f376e6ce]{align-items:center;gap:.45rem;display:flex}.notification-group__icon[data-v-f376e6ce]{color:var(--r-text-muted);font-size:.9rem}.notification-group__title[data-v-f376e6ce]{margin:0;font-size:.92rem;font-weight:700}.notification-group__chevron[data-v-f376e6ce]{color:var(--r-text-muted);margin-left:auto;font-size:.8rem}.notification-group__desc[data-v-f376e6ce]{color:var(--r-text-muted);margin:.2rem 0 0;font-size:.78rem}.notification-group__actions[data-v-f376e6ce]{flex-shrink:0}.notification-item[data-v-f376e6ce]{border-bottom:1px solid var(--r-border)}.notification-item[data-v-f376e6ce]:last-child,.notification-item .setting-row[data-v-f376e6ce]{border-bottom:none}.setting-row[data-v-f376e6ce]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row--toggle[data-v-f376e6ce]{align-items:center}.setting-label[data-v-f376e6ce]{color:var(--r-text-muted);font-size:.9rem;font-weight:600}.setting-label-group[data-v-f376e6ce]{flex:1;min-width:0}.setting-hint[data-v-f376e6ce]{color:var(--r-text-muted);margin-top:.2rem;font-size:.78rem;display:block}.notification-item__right[data-v-f376e6ce]{flex-shrink:0;align-items:center;gap:.5rem;display:flex}.notification-item__services-toggle[data-v-f376e6ce]{appearance:none;border:1px solid var(--r-border);cursor:pointer;color:var(--r-text-muted);background:0 0;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.78rem;transition:background .15s,color .15s;display:flex}.notification-item__services-toggle[data-v-f376e6ce]:hover{background:var(--r-bg-hover);color:var(--r-text)}.notification-item__services[data-v-f376e6ce]{border-top:1px dashed var(--r-border);flex-direction:column;gap:.4rem;padding:.5rem 0 .75rem 1rem;display:flex}.notification-item__services-empty[data-v-f376e6ce]{color:var(--r-text-muted);margin:0;font-size:.8rem}.notification-item__service-row[data-v-f376e6ce]{justify-content:space-between;align-items:center;padding:.25rem 0;display:flex}.notification-item__service-name[data-v-f376e6ce]{color:var(--r-text);font-size:.85rem}.security-cards[data-v-336d11c8]{flex-direction:column;gap:1rem;display:flex}.settings-card[data-v-336d11c8]{max-width:680px}.card-title[data-v-336d11c8]{align-items:center;gap:.5rem;display:flex}.card-desc[data-v-336d11c8]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.see-cloud[data-v-336d11c8]{padding:0;font-size:.85rem}.foreign-heading[data-v-336d11c8]{word-break:break-all;margin-top:1rem;font-weight:600}.setting-row[data-v-336d11c8]{align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-label[data-v-336d11c8]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.settings-card[data-v-d2f8cc30]{max-width:680px}.card-title[data-v-d2f8cc30]{align-items:center;gap:.5rem;display:flex}.card-desc[data-v-d2f8cc30]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.setting-row[data-v-d2f8cc30]{align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-label[data-v-d2f8cc30]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-input[data-v-d2f8cc30]{width:100%;max-width:400px}.editor-warning[data-v-d2f8cc30]{padding:.5rem 0}.editor-detected[data-v-d2f8cc30]{padding-top:.5rem}.editor-option[data-v-d2f8cc30]{align-items:center;gap:.5rem;display:flex}.hint[data-v-d2f8cc30]{color:var(--r-text-muted);font-size:.78rem}.parsers-scope[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin:0 0 1rem;font-size:.85rem;display:flex}.r-dialog__content.parser-dialog .r-dialog__body{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.settings-card[data-v-0e74635d]{max-width:680px}.card-desc[data-v-0e74635d]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.parsers-loading[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;padding:1rem;font-size:.875rem;display:flex}.parsers-list[data-v-0e74635d]{flex-direction:column;gap:.375rem;display:flex}.parsers-row[data-v-0e74635d]{border:1px solid var(--r-border);background:var(--r-bg);align-items:center;gap:.75rem;padding:.5rem .75rem;display:flex}.parsers-name[data-v-0e74635d]{flex-shrink:0;font-size:.875rem;font-weight:600}.parsers-desc-inline[data-v-0e74635d]{color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.8rem;overflow:hidden}.parsers-icon--on[data-v-0e74635d]{color:var(--r-green-500);justify-content:center;align-items:center;width:2rem;height:2rem;display:flex}.parsers-icon--off[data-v-0e74635d]{color:var(--r-red-500);justify-content:center;align-items:center;width:2rem;height:2rem;display:flex}.parsers-actions[data-v-0e74635d]{align-items:center;gap:.25rem;margin-left:auto;display:flex}.parsers-empty[data-v-0e74635d]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.parser-dialog__layout[data-v-0e74635d]{grid-template-columns:1fr 1fr;align-items:stretch;gap:1.25rem;height:100%;display:grid;overflow:hidden}@media (width<=768px){.parser-dialog__layout[data-v-0e74635d]{grid-template-columns:1fr;height:auto;overflow-y:auto}.dialog-form[data-v-0e74635d]{height:auto;overflow:visible}.dialog-form__field--code[data-v-0e74635d]{min-height:250px}.parser-sim[data-v-0e74635d]{min-height:300px}.parser-sim__body[data-v-0e74635d]{min-height:0}.parser-sim__col--output[data-v-0e74635d]{min-height:150px}}.dialog-form[data-v-0e74635d]{flex-direction:column;gap:1rem;height:100%;display:flex;overflow:auto}.dialog-form__field--code[data-v-0e74635d]{flex:1;min-height:0}.dialog-form__field[data-v-0e74635d]{flex-direction:column;gap:.375rem;display:flex}.dialog-form__label[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.8125rem;font-weight:600;display:flex}.dialog-form__input[data-v-0e74635d]{width:100%}.dialog-form__hint[data-v-0e74635d]{color:var(--r-text-muted);font-size:.78rem}.dialog-form__hint code[data-v-0e74635d]{background:var(--r-bg-hover);border-radius:3px;padding:.125rem .375rem;font-family:Monaco,Menlo,monospace;font-size:.75rem}.dialog-form__switch[data-v-0e74635d]{align-items:center;gap:.5rem;display:flex}.dialog-form__switch-label[data-v-0e74635d]{color:var(--r-text-muted);font-size:.85rem}.dialog-form__templates[data-v-0e74635d]{flex-direction:column;gap:.5rem;display:flex}.dialog-form__templates-label[data-v-0e74635d]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:600}.dialog-form__templates-select[data-v-0e74635d]{width:100%}.dialog-form__ai-btn[data-v-0e74635d]{margin-left:auto}.tpl-option[data-v-0e74635d]{align-items:center;gap:.75rem;display:flex}.tpl-option__icon[data-v-0e74635d]{color:var(--r-primary);flex-shrink:0;font-size:.9rem}.tpl-option__body[data-v-0e74635d]{flex-direction:column;gap:.1rem;display:flex}.tpl-option__name[data-v-0e74635d]{color:var(--r-text);font-size:.8125rem;font-weight:600}.tpl-option__desc[data-v-0e74635d]{color:var(--r-text-muted);font-size:.73rem}.parser-sim[data-v-0e74635d]{border:1px solid var(--r-border);flex-direction:column;height:100%;display:flex;overflow:hidden}.parser-sim__header[data-v-0e74635d]{background:color-mix(in srgb, var(--r-text) 7%, var(--r-bg));border-bottom:1px solid var(--r-border);justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.8125rem;display:flex}.parser-sim__title[data-v-0e74635d]{align-items:center;gap:.4rem;font-weight:600;display:flex}.parser-sim__status[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.3rem;font-size:.75rem;display:flex}.parser-sim__body[data-v-0e74635d]{flex-direction:column;flex:1;gap:0;min-height:0;display:flex}.parser-sim__col[data-v-0e74635d]{flex-direction:column;gap:.25rem;padding:.6rem .75rem;display:flex}.parser-sim__col[data-v-0e74635d]:first-child{border-bottom:1px solid var(--r-border)}.parser-sim__col-label[data-v-0e74635d]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.25rem;font-size:.75rem;font-weight:600}.parser-sim__textarea[data-v-0e74635d]{resize:vertical;border:1px solid var(--r-border-strong,var(--r-border));background:var(--r-bg-field,var(--r-bg));width:100%;min-height:160px;color:var(--r-text,var(--r-text));outline:none;padding:.5rem;font-family:monospace;font-size:.8rem;line-height:1.5}.parser-sim__textarea[data-v-0e74635d]:focus{border-color:var(--r-primary)}.parser-sim__error[data-v-0e74635d]{color:var(--r-red-500,#ef4444);align-items:flex-start;gap:.4rem;padding:.5rem;font-size:.8rem;display:flex}.parser-sim__empty[data-v-0e74635d]{color:var(--r-text-muted);padding:.5rem;font-size:.8rem;font-style:italic}.parser-sim__col--output[data-v-0e74635d]{flex:1;min-height:0;overflow:hidden}.parser-sim__viewer[data-v-0e74635d]{flex:1;height:100%;min-height:0}.parser-ai-prompt[data-v-0e74635d]{flex-direction:column;gap:.75rem;display:flex}.parser-ai-prompt__desc[data-v-0e74635d]{color:var(--r-text-muted);margin:0;font-size:.9rem}.parser-ai-prompt__input[data-v-0e74635d]{resize:vertical;width:100%}.providers-scope[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.4rem;margin:0 0 .9rem;font-size:.8rem;display:flex}.settings-card[data-v-8692bb0c]{max-width:680px}.providers-loading[data-v-8692bb0c],.providers-empty[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.5rem;padding:1rem;font-size:.875rem;display:flex}.ai-providers-list[data-v-8692bb0c]{flex-direction:column;gap:.5rem;display:flex}.ai-provider-row[data-v-8692bb0c]{border:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;transition:border-color .15s;display:flex}.ai-provider-row--active[data-v-8692bb0c]{border-color:var(--r-primary);background:color-mix(in srgb, var(--r-primary) 5%, var(--r-bg))}.ai-provider-info[data-v-8692bb0c]{flex-wrap:wrap;align-items:center;gap:.75rem;min-width:0;display:flex}.ai-provider-name[data-v-8692bb0c]{font-size:.875rem;font-weight:600}.ai-provider-type[data-v-8692bb0c]{color:var(--r-text-muted);font-size:.8125rem}.ai-provider-model[data-v-8692bb0c]{background:var(--r-bg-hover);color:var(--r-text-muted);border-radius:4px;padding:.15rem .4rem;font-size:.75rem}.ai-provider-key[data-v-8692bb0c]{background:var(--r-bg-hover);letter-spacing:.05em;border-radius:4px;padding:.15rem .4rem;font-size:.75rem}.ai-provider-actions[data-v-8692bb0c]{flex-shrink:0;align-items:center;gap:.25rem;display:flex}.ai-provider-badge[data-v-8692bb0c]{color:var(--r-primary);align-items:center;gap:.35rem;padding:.25rem .6rem;font-size:.8rem;font-weight:600;display:inline-flex}.dialog-form[data-v-8692bb0c]{flex-direction:column;gap:1rem;display:flex}.dialog-form__field[data-v-8692bb0c]{flex-direction:column;gap:.375rem;display:flex}.dialog-form__label[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.8125rem;font-weight:600;display:flex}.dialog-form__input[data-v-8692bb0c]{width:100%}.ai-provider-info-block[data-v-8692bb0c]{background:color-mix(in srgb, var(--r-primary) 6%, var(--r-bg));border:1px solid color-mix(in srgb, var(--r-primary) 25%, transparent);flex-direction:column;gap:.5rem;padding:.75rem 1rem;display:flex}.ai-provider-info-block__text[data-v-8692bb0c]{color:var(--r-text);margin:0;font-size:.875rem;line-height:1.5}.ai-provider-info-block__link[data-v-8692bb0c]{color:var(--r-primary);align-items:center;gap:.35rem;font-size:.8125rem;font-weight:500;text-decoration:none;display:inline-flex}.ai-provider-info-block__link[data-v-8692bb0c]:hover{text-decoration:underline}.ai-provider-info-block__models[data-v-8692bb0c]{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.ai-provider-info-block__models-label[data-v-8692bb0c]{color:var(--r-text-muted);font-size:.75rem;font-weight:500}.ai-provider-info-block__model-tag[data-v-8692bb0c]{background:var(--r-bg-hover);border:1px solid var(--r-border);color:var(--r-text-muted);border-radius:4px;padding:.1rem .4rem;font-size:.7rem}.settings-card[data-v-2fb5a15c]{max-width:680px}.companion-settings__row[data-v-2fb5a15c]{align-items:center;gap:.75rem;padding:.4rem 0;display:flex}.companion-settings__row--stack[data-v-2fb5a15c]{flex-wrap:wrap;justify-content:space-between}.companion-settings__label[data-v-2fb5a15c]{font-size:.85rem}.companion-settings__hint[data-v-2fb5a15c]{color:var(--r-text-muted);font-size:.75rem}.companion-settings__actions[data-v-2fb5a15c]{gap:.25rem;display:flex}.companion-settings__editor[data-v-2fb5a15c]{margin-top:.5rem}.companion-settings__textarea[data-v-2fb5a15c]{width:100%;font-family:var(--font-mono,ui-monospace, monospace);font-size:.75rem}.settings-card[data-v-c9c03945]{max-width:680px}.scenario-list[data-v-c9c03945]{flex-direction:column;gap:.5rem;display:flex}.scenario-row[data-v-c9c03945]{border:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem .75rem;display:flex}.scenario-info[data-v-c9c03945]{align-items:center;gap:.75rem;display:flex}.scenario-icon[data-v-c9c03945]{opacity:.7;font-size:1.1rem}.scenario-desc[data-v-c9c03945]{opacity:.6;margin-left:.5rem;font-size:.85rem}.scenario-meta[data-v-c9c03945]{opacity:.5;margin-top:.25rem;font-size:.8rem}.scenario-actions[data-v-c9c03945]{flex-shrink:0;gap:.25rem;display:flex}.scenario-empty[data-v-c9c03945]{text-align:center;opacity:.5;padding:1rem 0}.state[data-v-5b38ad31]{color:var(--r-text-muted);align-items:center;gap:.75rem;font-size:.88rem;display:flex}.settings-card[data-v-3261b86d]{max-width:680px}.setting-row[data-v-3261b86d]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row[data-v-3261b86d]:last-child{border-bottom:none}.setting-label[data-v-3261b86d]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-value[data-v-3261b86d]{flex:1;align-items:center;gap:.5rem;display:flex}.card-title-row[data-v-3261b86d]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.diagnostics[data-v-7cc5031a]{flex-direction:column;gap:2rem;display:flex}.block__header[data-v-7cc5031a]{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.85rem;display:flex}.block__title[data-v-7cc5031a]{margin:0;font-size:1rem;font-weight:600}.block__desc[data-v-7cc5031a]{color:var(--r-text-muted);margin:.2rem 0 0;font-size:.85rem}.empty[data-v-7cc5031a]{text-align:center;color:var(--r-text-muted);margin:0;padding:1.2rem;font-size:.875rem}.instances[data-v-7cc5031a]{border:1px solid var(--r-border);border-radius:8px;margin:0;padding:0;list-style:none;overflow:hidden}.instance[data-v-7cc5031a]{border-bottom:1px solid var(--r-border);grid-template-columns:1fr auto;grid-template-areas:"main action""meta action";align-items:center;gap:.15rem 1rem;padding:.7rem .9rem;display:grid}.instance[data-v-7cc5031a]:last-child{border-bottom:0}.instance__main[data-v-7cc5031a]{grid-area:main;align-items:center;gap:.5rem;font-size:.9rem;font-weight:600;display:flex}.instance__port[data-v-7cc5031a]{align-items:center;gap:.4rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;display:flex}.instance__meta[data-v-7cc5031a]{color:var(--r-text-muted);flex-wrap:wrap;grid-area:meta;align-items:center;gap:.4rem;font-size:.78rem;display:flex}.instance__cwd[data-v-7cc5031a]{text-overflow:ellipsis;white-space:nowrap;max-width:24rem;overflow:hidden}.instance[data-v-7cc5031a] .r-button{grid-area:action}.instance__actions[data-v-7cc5031a]{grid-area:action;align-items:center;gap:.25rem;display:flex}.instance__actions[data-v-7cc5031a] .r-button{grid-area:auto}.tag[data-v-7cc5031a]{border-radius:999px;padding:.1rem .45rem;font-size:.7rem;font-weight:600}.tag--current[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-primary) 16%, transparent);color:var(--r-primary)}.toolbar[data-v-7cc5031a]{flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.6rem;display:flex}.toolbar__source[data-v-7cc5031a]{min-width:9rem}.toolbar__search[data-v-7cc5031a]{flex:10rem;min-width:10rem}.toolbar__toggle[data-v-7cc5031a]{align-items:center;gap:.45rem;font-size:.85rem;display:flex}.toolbar__spacer[data-v-7cc5031a]{flex:auto}.toolbar__actions[data-v-7cc5031a]{flex:none;align-items:center;gap:.25rem;display:flex}.log[data-v-7cc5031a]{background:var(--r-bg);border:1px solid var(--r-border);border-radius:8px;height:26rem;padding:.5rem 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;line-height:1.55;overflow:auto}.log-line[data-v-7cc5031a]{white-space:pre-wrap;word-break:break-word;gap:.6rem;padding:.05rem .8rem;display:flex}.log-line--warn[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-orange-500,#f59e0b) 9%, transparent)}.log-line--error[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-red-500,#ef4444) 11%, transparent)}.log-line__time[data-v-7cc5031a]{color:var(--r-text-muted);opacity:.75;flex:none}.log-line__source[data-v-7cc5031a]{text-transform:uppercase;letter-spacing:.03em;flex:0 0 3.4rem;align-self:center;font-size:.68rem}.log-line__source--server[data-v-7cc5031a]{color:var(--r-primary)}.log-line__source--agent[data-v-7cc5031a]{color:var(--r-text-muted)}.log-line__text[data-v-7cc5031a]{flex:auto}.follow-hint[data-v-7cc5031a]{text-align:center;margin:.4rem 0 0}.api-docs[data-v-a921e175]{flex-direction:column;height:100%;display:flex;overflow:hidden}.api-docs__content[data-v-a921e175]{flex:1;min-height:0;overflow-y:auto}.api-docs__toolbar[data-v-a921e175]{flex-shrink:0;align-items:center;gap:.75rem;padding:.75rem 1rem;display:flex}.api-docs__toolbar-label[data-v-a921e175]{color:var(--r-text-muted);white-space:nowrap;font-size:.875rem;font-weight:500}.settings-page[data-v-39ce45b8]{flex-direction:column;height:100%;display:flex}.settings-layout[data-v-39ce45b8]{flex:1;gap:0;min-height:0;display:flex}.settings-nav[data-v-39ce45b8]{border-right:1px solid var(--r-border);flex-direction:column;flex-shrink:0;gap:.25rem;width:220px;padding:1rem 0;display:flex;overflow-y:auto}.settings-nav__list[data-v-39ce45b8]{flex-direction:column;gap:.125rem;margin:0;padding:0;list-style:none;display:flex}.settings-nav__group[data-v-39ce45b8]{letter-spacing:.06em;text-transform:uppercase;color:var(--r-text-muted);margin:1rem 1.5rem .25rem;font-size:.7rem;font-weight:600}.settings-nav__group[data-v-39ce45b8]:first-child{margin-top:.25rem}.settings-nav__item[data-v-39ce45b8]{cursor:pointer;width:calc(100% - 1rem);font:inherit;text-align:left;color:var(--r-text-muted);transition:background var(--r-duration-base) ease, color var(--r-duration-base) ease;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;align-items:center;gap:.625rem;margin:0 .5rem;padding:.45rem 1rem;font-size:.875rem;display:flex}@media (hover:hover) and (pointer:fine){.settings-nav__item[data-v-39ce45b8]:hover{background:var(--r-bg-hover);color:var(--r-text)}}.settings-nav__item[data-v-39ce45b8]:focus-visible{outline:2px solid var(--r-primary-text);outline-offset:-2px}.settings-nav__item--active[data-v-39ce45b8]{background:color-mix(in srgb, var(--r-primary) 12%, var(--r-bg));color:var(--r-primary-text);font-weight:600}.settings-nav__icon[data-v-39ce45b8]{flex-shrink:0;font-size:1rem}.settings-content[data-v-39ce45b8]{flex:1;min-width:0;padding:1.5rem 2rem;overflow-y:auto}.settings-content[data-v-39ce45b8]>*{max-width:60rem}.settings-content--fullpage[data-v-39ce45b8]>*{max-width:none}.settings-content--fullpage[data-v-39ce45b8]{flex-direction:column;min-height:0;padding:0;display:flex;overflow:hidden}.settings-content--fullpage[data-v-39ce45b8] .api-docs{flex:1;min-height:0}@media (width<=640px){.settings-layout[data-v-39ce45b8]{flex-direction:column}.settings-nav[data-v-39ce45b8]{border-right:none;border-bottom:1px solid var(--r-border);flex-direction:row;align-items:center;width:100%;padding:.5rem 0;position:relative}.settings-nav__list[data-v-39ce45b8]{scrollbar-width:none;flex-direction:row;flex:1;gap:0;padding:0 .25rem;overflow-x:auto}.settings-nav__list[data-v-39ce45b8]::-webkit-scrollbar{display:none}.settings-nav__group[data-v-39ce45b8]{display:none}.settings-nav__item[data-v-39ce45b8]{white-space:nowrap;border-radius:6px;flex-direction:column;flex-shrink:0;gap:.25rem;width:auto;margin:0;padding:.4rem .75rem;font-size:.7rem}.settings-nav__icon[data-v-39ce45b8]{font-size:1rem}.settings-nav__chevron[data-v-39ce45b8]{cursor:pointer;width:2rem;height:2rem;color:var(--r-text-muted);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;transition:background .15s,color .15s;display:flex}.settings-nav__chevron[data-v-39ce45b8]:hover{background:var(--r-bg-hover);color:var(--r-text)}.settings-content[data-v-39ce45b8]{padding:1rem}}@media (width>=641px){.settings-nav__chevron[data-v-39ce45b8]{display:none}}.section-header[data-v-39ce45b8]{margin-bottom:1.5rem}.section-header--has-actions[data-v-39ce45b8]{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.section-header__text[data-v-39ce45b8]{flex:1;min-width:0}.section-header__actions[data-v-39ce45b8]{flex-shrink:0;align-self:center}.section-title[data-v-39ce45b8]{margin:0 0 .25rem;font-size:1.25rem;font-weight:700}.section-desc[data-v-39ce45b8]{color:var(--r-text-muted);margin:0;font-size:.875rem}
1
+ .traefik-settings[data-v-dbbd59b3]{box-sizing:border-box;flex-direction:column;gap:1rem;width:100%;min-width:0;display:flex}.traefik-settings[data-v-dbbd59b3] input,.traefik-settings[data-v-dbbd59b3] .r-input,.traefik-settings[data-v-dbbd59b3] .r-select,.traefik-settings[data-v-dbbd59b3] .r-autocomplete,.traefik-settings[data-v-dbbd59b3] .r-password{box-sizing:border-box;width:100%;max-width:100%}.traefik-row[data-v-dbbd59b3]{justify-content:space-between;align-items:center;display:flex}.traefik-field[data-v-dbbd59b3]{flex-direction:column;gap:.4rem;display:flex}.traefik-field label[data-v-dbbd59b3]{font-size:.875rem;font-weight:500}.traefik-field small[data-v-dbbd59b3]{color:var(--r-text-muted);font-size:.75rem}.credential-row[data-v-dbbd59b3]{align-items:center;gap:.5rem;min-width:0;display:flex}.credential-key[data-v-dbbd59b3]{flex:0 0 160px;min-width:0}.credential-value[data-v-dbbd59b3]{flex:1;min-width:0}.credential-value[data-v-dbbd59b3] .r-password,.credential-value[data-v-dbbd59b3] .r-password input{width:100%}.traefik-ports[data-v-dbbd59b3]{gap:1rem;display:flex}.traefik-field--small[data-v-dbbd59b3]{flex:1}.hint-ok[data-v-dbbd59b3]{color:var(--r-green-500);font-size:.8rem;font-weight:400}.traefik-actions[data-v-dbbd59b3]{align-self:flex-end;gap:.5rem;display:flex}.traefik-renewal-notice[data-v-dbbd59b3]{background:color-mix(in srgb, var(--r-blue-500) 10%, transparent);border:1px solid color-mix(in srgb, var(--r-blue-500) 30%, transparent);color:var(--r-blue-300);align-items:flex-start;gap:.6rem;padding:.75rem;font-size:.875rem;display:flex}.traefik-validation[data-v-dbbd59b3]{border:1px solid var(--r-border);flex-direction:column;gap:.4rem;padding:.75rem;display:flex}.validation-item[data-v-dbbd59b3]{align-items:center;gap:.5rem;font-size:.875rem;display:flex}.validation-item--ok[data-v-dbbd59b3]{color:var(--r-green-500)}.validation-item--fail[data-v-dbbd59b3]{color:var(--r-red-500)}.traefik-logs[data-v-dbbd59b3],.traefik-config-files[data-v-dbbd59b3]{border:1px solid var(--r-border);overflow:hidden}.config-tabs[data-v-dbbd59b3]{gap:.25rem;display:flex}.config-tab[data-v-dbbd59b3]{cursor:pointer;color:var(--r-text-muted);background:0 0;border:none;padding:.2rem .6rem;font-size:.8rem}.config-tab--active[data-v-dbbd59b3]{background:var(--r-primary);color:var(--r-primary-contrast)}.traefik-logs-header[data-v-dbbd59b3]{background:var(--r-bg-hover);justify-content:space-between;align-items:center;padding:.4rem .75rem;font-size:.8rem;font-weight:600;display:flex}.logs-live[data-v-dbbd59b3]{color:var(--r-green-400);font-size:.7rem;animation:1.2s ease-in-out infinite blink-dbbd59b3}@keyframes blink-dbbd59b3{0%,to{opacity:1}50%{opacity:.3}}.traefik-logs-content[data-v-dbbd59b3]{white-space:pre-wrap;word-break:break-all;background:var(--r-surface-900,#1a1a1a);max-height:300px;color:var(--r-surface-100,#f0f0f0);margin:0;padding:.75rem;font-family:monospace;font-size:.75rem;overflow-y:auto}.traefik-dialog-layout[data-v-6b2d251e]{grid-template-columns:1fr 1fr;gap:1.5rem;min-height:0;display:grid}.traefik-dialog-left[data-v-6b2d251e]{min-width:0;max-height:80vh;padding-right:.5rem;overflow-y:auto}.traefik-dialog-right[data-v-6b2d251e]{flex-direction:column;gap:.5rem;min-width:0;max-height:80vh;display:flex}.fs-header[data-v-6b2d251e]{color:var(--r-text-muted);border-bottom:1px solid var(--r-border);justify-content:space-between;align-items:center;padding:.25rem 0;font-size:.75rem;font-weight:600;display:flex}.fs-tree[data-v-6b2d251e]{flex-direction:column;gap:1px;display:flex}.fs-entry[data-v-6b2d251e]{cursor:pointer;text-align:left;color:var(--r-text);background:0 0;border:none;align-items:center;gap:.4rem;width:100%;padding:.3rem .5rem;font-size:.8rem;display:flex}.fs-entry[data-v-6b2d251e]:hover{background:var(--r-bg-hover)}.fs-entry--active[data-v-6b2d251e]{background:color-mix(in srgb, var(--r-primary) 15%, transparent);color:var(--r-primary)}.fs-icon[data-v-6b2d251e]{opacity:.6;flex-shrink:0;font-size:.75rem}.fs-dir[data-v-6b2d251e]{opacity:.5;font-size:.7rem}.fs-name[data-v-6b2d251e]{font-weight:500}.fs-empty[data-v-6b2d251e]{color:var(--r-text-muted);padding:.5rem;font-size:.8rem;font-style:italic}.fs-content[data-v-6b2d251e]{white-space:pre-wrap;word-break:break-all;background:var(--r-surface-900,#1a1a1a);color:var(--r-surface-100,#f0f0f0);border:1px solid var(--r-border);flex:1;margin:0;padding:.75rem;font-family:monospace;font-size:.72rem;overflow-y:auto}.agent-page[data-v-0cafa443]{max-width:1200px;margin:0 auto;padding:1.5rem}.page-header[data-v-0cafa443]{justify-content:space-between;align-items:center;margin-bottom:1.5rem;display:flex}.page-header h1[data-v-0cafa443]{margin:0;font-size:1.75rem;font-weight:700}.loading-container[data-v-0cafa443],.error-container[data-v-0cafa443],.empty-container[data-v-0cafa443]{color:var(--r-text-muted);flex-direction:column;align-items:center;gap:.75rem;padding:3rem 0;display:flex}.agent-name[data-v-0cafa443]{align-items:center;gap:.5rem;font-weight:500;display:flex}.agent-url[data-v-0cafa443]{background:var(--r-bg-hover);border-radius:4px;padding:.15rem .4rem;font-family:Fira Code,Cascadia Code,monospace;font-size:.8rem}.runner-tags[data-v-0cafa443]{flex-wrap:wrap;gap:.3rem;display:flex}.action-grid[data-v-0cafa443]{grid-template-columns:repeat(2,auto);gap:0;width:fit-content;display:grid}@media (width<=768px){[data-v-0cafa443] .hide-on-mobile{display:none!important}[data-v-0cafa443] .r-datatable__header-content{white-space:nowrap}.agent-url[data-v-0cafa443]{word-break:break-all;white-space:normal}}.text-muted[data-v-0cafa443]{color:var(--r-text-muted)}.form-group[data-v-0cafa443]{margin-bottom:1rem}.form-group label[data-v-0cafa443]{margin-bottom:.4rem;font-size:.875rem;font-weight:500;display:block}.form-hint[data-v-0cafa443]{color:var(--r-text-muted);font-size:.78rem}.test-connection[data-v-0cafa443]{align-items:center;gap:.75rem;display:flex}.w-full[data-v-0cafa443]{width:100%}.passthrough-description[data-v-0cafa443]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem;line-height:1.4}.passthrough-list[data-v-0cafa443]{flex-direction:column;gap:.25rem;margin-bottom:.75rem;display:flex}.passthrough-item[data-v-0cafa443]{background:var(--r-bg-hover);border-radius:6px;justify-content:space-between;align-items:center;padding:.3rem .5rem;display:flex}.passthrough-item-info[data-v-0cafa443]{align-items:center;gap:.4rem;min-width:0;display:flex;overflow:hidden}.passthrough-item code[data-v-0cafa443]{flex-shrink:0;font-family:Fira Code,Cascadia Code,monospace;font-size:.85rem}.passthrough-value[data-v-0cafa443]{color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;font-family:Fira Code,Cascadia Code,monospace;font-size:.8rem;overflow:hidden}.passthrough-undefined[data-v-0cafa443]{color:var(--r-orange-500);font-size:.78rem;font-style:italic}.passthrough-unsaved[data-v-0cafa443]{color:var(--r-text-muted);font-size:.78rem;font-style:italic}.passthrough-empty[data-v-0cafa443]{margin-bottom:.75rem;font-size:.85rem}.passthrough-add[data-v-0cafa443]{align-items:center;gap:.5rem;display:flex}.passthrough-add-input[data-v-0cafa443]{flex:1}.passthrough-error[data-v-0cafa443]{color:var(--r-red-500);margin-top:.25rem;font-size:.78rem;display:block}.api-keys-page[data-v-3638081a]{max-width:860px;padding:1.5rem}.api-keys-page__header[data-v-3638081a]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1.5rem;display:flex}.api-keys-page__header h1[data-v-3638081a]{margin:0;font-size:1.5rem;font-weight:600}.api-keys-page__subtitle[data-v-3638081a]{color:var(--r-text-muted);flex:1;margin:0;font-size:.875rem}.api-keys-page__empty[data-v-3638081a]{color:var(--r-text-muted);padding:2rem 0;font-size:.9rem}.api-keys-card[data-v-3638081a]{max-width:680px}.api-keys-list[data-v-3638081a]{flex-direction:column;gap:.5rem;display:flex}.api-key-card[data-v-3638081a]{border:1px solid var(--r-border);background:var(--r-bg);padding:.5rem .75rem;position:relative}.api-key-card__body[data-v-3638081a]{min-width:0}.api-key-card__name[data-v-3638081a]{align-items:center;gap:.5rem;margin-bottom:.2rem;padding-right:5rem;font-weight:500;display:flex}.api-key-card__meta[data-v-3638081a]{color:var(--r-text-muted);margin-bottom:.4rem;font-size:.8rem}.api-key-card__url-row[data-v-3638081a]{align-items:center;gap:.4rem;display:flex}.api-key-card__url[data-v-3638081a]{min-width:0;color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:.75rem;overflow:hidden}.api-key-card__actions[data-v-3638081a]{gap:.3rem;display:flex;position:absolute;top:.5rem;right:.5rem}.badge[data-v-3638081a]{text-transform:uppercase;border-radius:4px;padding:.1rem .4rem;font-size:.7rem;font-weight:600}.badge--info[data-v-3638081a]{background:var(--r-blue-100);color:var(--r-blue-700)}.api-key-form[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:10px;max-width:600px;padding:1.5rem}.api-key-form h2[data-v-3638081a]{margin:0 0 1.25rem;font-size:1.1rem}.form-field[data-v-3638081a]{margin-bottom:1.25rem}.form-field>label[data-v-3638081a]:first-child{margin-bottom:.5rem;font-size:.875rem;font-weight:600;display:block}.form-hint[data-v-3638081a]{color:var(--r-text-muted);margin-top:.4rem;font-size:.75rem}.radio-group[data-v-3638081a]{flex-direction:column;gap:.4rem;display:flex}.radio-label[data-v-3638081a]{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:.5rem;font-size:.875rem;display:flex}.svc-list-container[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:8px;margin-bottom:.5rem;overflow:hidden}.svc-list-search[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);align-items:center;gap:.5rem;padding:.4rem .75rem;display:flex}.svc-list-search__icon[data-v-3638081a]{color:var(--r-text-muted);flex-shrink:0;font-size:.75rem}.svc-list-search__input[data-v-3638081a]{box-shadow:none;color:var(--r-text);background:0 0;border:none;outline:none;flex:1;padding:0;font-size:.85rem}.svc-list-search__input[data-v-3638081a]::placeholder{color:var(--r-text-muted)}.svc-list-search__clear[data-v-3638081a]{cursor:pointer;color:var(--r-text-muted);background:0 0;border:none;align-items:center;padding:0;font-size:.75rem;display:flex}.svc-list-search__clear[data-v-3638081a]:hover{color:var(--r-text)}.svc-list-scroll[data-v-3638081a]{max-height:360px;overflow-y:auto}.svc-list-empty[data-v-3638081a]{margin:0;padding:.75rem}.svc-perm-row[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);overflow:hidden}.svc-perm-row[data-v-3638081a]:last-child{border-bottom:none}.svc-perm-row__header[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;padding:.4rem .75rem;display:flex}.svc-perm-row__header[data-v-3638081a]:hover{background:var(--runeya-sidebar-hover)}.svc-chevron[data-v-3638081a]{color:var(--r-text-muted);font-size:.7rem;transition:transform .15s}.svc-perm-summary[data-v-3638081a]{color:var(--r-text-muted);margin-left:.3rem;font-size:.75rem;font-weight:400}.svc-perm-row__name[data-v-3638081a]{align-items:center;gap:.4rem;font-size:.875rem;font-weight:600;display:flex}.svc-perm-row__actions[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);flex-wrap:wrap;gap:.35rem;padding:.5rem .75rem;display:flex}.action-chip--sub[data-v-3638081a]{opacity:.85;margin-left:.25rem;font-size:.72rem}.action-chip--sub.flag-chip--on[data-v-3638081a]{background:var(--r-primary-400,var(--r-primary))}.svc-perm-row__envs[data-v-3638081a]{flex-direction:column;gap:.35rem;padding:.5rem .75rem;display:flex}.env-perm-row[data-v-3638081a]{flex-wrap:wrap;align-items:center;gap:.35rem;display:flex}.env-perm-row__name[data-v-3638081a]{color:var(--r-text-muted);align-items:center;gap:.3rem;min-width:8rem;font-size:.8rem;display:flex}.env-add-row[data-v-3638081a]{margin-top:.25rem}.svc-add-row[data-v-3638081a]{flex-wrap:wrap;align-items:center;gap:.5rem;margin-top:.5rem;display:flex}.import-modal__body[data-v-3638081a]{flex-direction:column;gap:1rem;padding:.25rem 0;display:flex}.import-modal__desc[data-v-3638081a]{color:var(--r-text-muted);margin:0;font-size:.875rem}.import-section[data-v-3638081a]{flex-direction:column;gap:.4rem;display:flex}.import-section__label[data-v-3638081a]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.8rem;font-weight:600}.form-actions[data-v-3638081a]{justify-content:space-between;align-items:center;gap:.75rem;margin-top:1.5rem;display:flex}.form-actions__right[data-v-3638081a]{gap:.75rem;display:flex}.btn--renew[data-v-3638081a]{color:var(--r-text-muted);font-size:.8rem}.btn--renew[data-v-3638081a]:hover:not(:disabled){color:var(--r-text)}.api-key-card__skill[data-v-3638081a]{margin-top:.6rem}.skill-toggle[data-v-3638081a]{color:var(--r-text-muted);gap:.35rem}.skill-toggle[data-v-3638081a]:hover{color:var(--r-text)}.skill-panel[data-v-3638081a]{border:1px solid var(--runeya-border);border-radius:6px;margin-top:.5rem;overflow:hidden}.skill-panel__tools[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);flex-wrap:wrap;gap:.35rem;padding:.5rem .75rem;display:flex}.skill-tool-btn[data-v-3638081a]{border:1px solid var(--runeya-border);color:var(--r-text-muted);cursor:pointer;background:0 0;border-radius:20px;padding:.2rem .6rem;font-size:.72rem;transition:all .12s}.skill-tool-btn[data-v-3638081a]:hover{background:var(--runeya-sidebar-hover);color:var(--r-text)}.skill-tool-btn--active[data-v-3638081a]{background:var(--r-primary);color:var(--r-primary-contrast,#fff);border-color:var(--r-primary)}.skill-panel__header[data-v-3638081a]{border-bottom:1px solid var(--runeya-border);justify-content:space-between;align-items:center;padding:.4rem .75rem;display:flex}.skill-panel__btns[data-v-3638081a]{gap:.35rem;display:flex}.skill-panel__hint[data-v-3638081a]{color:var(--r-text-muted);font-size:.75rem}.skill-panel__code[data-v-3638081a]{white-space:pre-wrap;word-break:break-all;color:var(--r-text);max-height:260px;margin:0;padding:.75rem;font-size:.72rem;line-height:1.5;overflow-y:auto}.renew-modal__body[data-v-3638081a]{flex-direction:column;gap:.5rem;padding:.25rem 0;display:flex}.renew-modal__title[data-v-3638081a]{align-items:center;gap:.5rem;font-weight:600;display:flex}.renew-modal__title-icon[data-v-3638081a]{color:var(--r-orange-500,#f97316)}.renew-modal__body p[data-v-3638081a]{margin:0;font-size:.9rem;line-height:1.5}.btn[data-v-3638081a]{cursor:pointer;border:none;border-radius:6px;align-items:center;gap:.4rem;padding:.45rem .9rem;font-size:.875rem;font-weight:500;transition:all .15s;display:inline-flex}.btn[data-v-3638081a]:disabled{opacity:.5;cursor:not-allowed}.btn--primary[data-v-3638081a]{background:var(--r-primary);color:var(--r-primary-contrast,#fff)}.btn--primary[data-v-3638081a]:hover:not(:disabled){filter:brightness(1.1)}.btn--ghost[data-v-3638081a]{color:var(--r-text);border:1px solid var(--runeya-border);background:0 0}.btn--ghost[data-v-3638081a]:hover:not(:disabled){background:var(--runeya-sidebar-hover)}.btn--danger[data-v-3638081a]{color:var(--r-red-500,#ef4444);border:1px solid var(--runeya-border);background:0 0}.btn--danger[data-v-3638081a]:hover:not(:disabled){background:var(--r-red-50,#fef2f2)}.btn--sm[data-v-3638081a]{padding:.3rem .6rem;font-size:.8rem}.btn--xs[data-v-3638081a]{padding:.2rem .4rem;font-size:.75rem}.ai-clients[data-v-d59c38d1]{flex-direction:column;gap:1rem;display:flex}.ai-clients__scope[data-v-d59c38d1]{border:1px solid var(--r-border);background:color-mix(in srgb, var(--r-text) 4%, var(--r-bg));border-radius:8px;flex-direction:column;gap:.75rem;padding:1rem 1.25rem;display:flex}.ai-clients__scope-cols[data-v-d59c38d1]{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.25rem;display:grid}.ai-clients__scope-head[data-v-d59c38d1]{align-items:center;gap:.375rem;margin:0;font-size:.875rem;font-weight:600;display:flex}.ai-clients__scope-list[data-v-d59c38d1]{color:var(--r-text-muted);margin:.25rem 0 0;padding-left:1.1rem;font-size:.875rem}.ai-clients__scope-list li+li[data-v-d59c38d1]{margin-top:.15rem}.ai-clients__head[data-v-d59c38d1]{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.75rem;display:flex}.ai-clients__title[data-v-d59c38d1]{margin:0;font-size:1rem;font-weight:600}.ai-clients__hint[data-v-d59c38d1],.ai-clients__empty[data-v-d59c38d1]{color:var(--r-text-muted);margin:.25rem 0 0;font-size:.875rem}.ai-clients__list[data-v-d59c38d1]{margin:0;padding:0;list-style:none}.ai-clients__row[data-v-d59c38d1]{border-top:1px solid var(--r-border);grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:.75rem 0;display:grid}.ai-clients__row[data-v-d59c38d1]:first-child{border-top:none;padding-top:.25rem}.ai-clients__row[data-v-d59c38d1]:has(>:nth-child(2):last-child){grid-template-columns:minmax(0,1fr) auto}.ai-clients__main[data-v-d59c38d1]{flex-direction:column;gap:.25rem;min-width:0;display:flex}.ai-clients__name[data-v-d59c38d1]{font-weight:600}.ai-clients__meta[data-v-d59c38d1],.ai-clients__meta code[data-v-d59c38d1]{text-overflow:ellipsis;white-space:nowrap;color:var(--r-text-muted);font-size:.8rem;overflow:hidden}.ai-clients__action[data-v-d59c38d1]{justify-content:center;min-width:6.5rem}@media (width<=640px){.ai-clients__scope-cols[data-v-d59c38d1]{grid-template-columns:minmax(0,1fr)}.ai-clients__row[data-v-d59c38d1]{grid-template-columns:minmax(0,1fr) auto}.ai-clients__row>.ai-clients__action[data-v-d59c38d1]{grid-column:1/-1;justify-self:start}}.settings-card[data-v-677de251]{max-width:680px}.cloud-banner[data-v-677de251]{border:1px solid var(--r-primary);background:color-mix(in srgb, var(--r-primary) 8%, transparent);width:100%;max-width:680px;color:var(--r-text);cursor:pointer;text-align:left;font:inherit;border-radius:10px;align-items:center;gap:1rem;margin-bottom:1.25rem;padding:1rem 1.25rem;transition:background .15s,box-shadow .15s;display:flex}.cloud-banner[data-v-677de251]:hover{background:color-mix(in srgb, var(--r-primary) 14%, transparent);box-shadow:0 2px 10px color-mix(in srgb, var(--r-primary) 20%, transparent)}.cloud-banner__icon[data-v-677de251]{color:var(--r-primary);flex-shrink:0;font-size:1.75rem}.cloud-banner__text[data-v-677de251]{flex-direction:column;flex:1;gap:.15rem;min-width:0;display:flex}.cloud-banner__title[data-v-677de251]{font-size:1rem}.cloud-banner__desc[data-v-677de251]{color:var(--r-text-muted);font-size:.85rem}.cloud-banner__action[data-v-677de251]{color:var(--r-primary);white-space:nowrap;flex-shrink:0;align-items:center;gap:.4rem;font-weight:600;display:inline-flex}.setting-row[data-v-677de251]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row[data-v-677de251]:last-child{border-bottom:none}.setting-label[data-v-677de251]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-value[data-v-677de251]{flex:1;align-items:center;gap:.5rem;display:flex}.path-value[data-v-677de251]{word-break:break-all;min-width:0;color:var(--r-text);flex:1;font-size:.85rem}.setting-input[data-v-677de251]{width:100%;max-width:400px}.setting-actions[data-v-677de251]{padding-top:1rem}.launcher-report[data-v-677de251]{background:var(--r-bg);border:1px solid var(--r-border);white-space:pre-wrap;word-break:break-all;border-radius:6px;max-height:260px;margin:0 0 .5rem;padding:.5rem .75rem;font-size:.78rem;overflow:auto}.settings-card[data-v-f376e6ce]{max-width:680px}.notification-groups[data-v-f376e6ce]{flex-direction:column;gap:1rem;display:flex}.notification-group[data-v-f376e6ce]{border:1px solid var(--r-border);background:color-mix(in srgb, var(--r-bg-hover) 35%, transparent);padding:.9rem 1rem}.notification-group__header[data-v-f376e6ce]{justify-content:space-between;align-items:flex-start;gap:.75rem;margin-bottom:.35rem;display:flex}.notification-group__collapse-button[data-v-f376e6ce]{appearance:none;text-align:left;cursor:pointer;color:inherit;background:0 0;border:0;flex:1;margin:0;padding:0}.notification-group__title-wrap[data-v-f376e6ce]{align-items:center;gap:.45rem;display:flex}.notification-group__icon[data-v-f376e6ce]{color:var(--r-text-muted);font-size:.9rem}.notification-group__title[data-v-f376e6ce]{margin:0;font-size:.92rem;font-weight:700}.notification-group__chevron[data-v-f376e6ce]{color:var(--r-text-muted);margin-left:auto;font-size:.8rem}.notification-group__desc[data-v-f376e6ce]{color:var(--r-text-muted);margin:.2rem 0 0;font-size:.78rem}.notification-group__actions[data-v-f376e6ce]{flex-shrink:0}.notification-item[data-v-f376e6ce]{border-bottom:1px solid var(--r-border)}.notification-item[data-v-f376e6ce]:last-child,.notification-item .setting-row[data-v-f376e6ce]{border-bottom:none}.setting-row[data-v-f376e6ce]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row--toggle[data-v-f376e6ce]{align-items:center}.setting-label[data-v-f376e6ce]{color:var(--r-text-muted);font-size:.9rem;font-weight:600}.setting-label-group[data-v-f376e6ce]{flex:1;min-width:0}.setting-hint[data-v-f376e6ce]{color:var(--r-text-muted);margin-top:.2rem;font-size:.78rem;display:block}.notification-item__right[data-v-f376e6ce]{flex-shrink:0;align-items:center;gap:.5rem;display:flex}.notification-item__services-toggle[data-v-f376e6ce]{appearance:none;border:1px solid var(--r-border);cursor:pointer;color:var(--r-text-muted);background:0 0;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.78rem;transition:background .15s,color .15s;display:flex}.notification-item__services-toggle[data-v-f376e6ce]:hover{background:var(--r-bg-hover);color:var(--r-text)}.notification-item__services[data-v-f376e6ce]{border-top:1px dashed var(--r-border);flex-direction:column;gap:.4rem;padding:.5rem 0 .75rem 1rem;display:flex}.notification-item__services-empty[data-v-f376e6ce]{color:var(--r-text-muted);margin:0;font-size:.8rem}.notification-item__service-row[data-v-f376e6ce]{justify-content:space-between;align-items:center;padding:.25rem 0;display:flex}.notification-item__service-name[data-v-f376e6ce]{color:var(--r-text);font-size:.85rem}.security-cards[data-v-336d11c8]{flex-direction:column;gap:1rem;display:flex}.settings-card[data-v-336d11c8]{max-width:680px}.card-title[data-v-336d11c8]{align-items:center;gap:.5rem;display:flex}.card-desc[data-v-336d11c8]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.see-cloud[data-v-336d11c8]{padding:0;font-size:.85rem}.foreign-heading[data-v-336d11c8]{word-break:break-all;margin-top:1rem;font-weight:600}.setting-row[data-v-336d11c8]{align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-label[data-v-336d11c8]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.settings-card[data-v-d2f8cc30]{max-width:680px}.card-title[data-v-d2f8cc30]{align-items:center;gap:.5rem;display:flex}.card-desc[data-v-d2f8cc30]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.setting-row[data-v-d2f8cc30]{align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-label[data-v-d2f8cc30]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-input[data-v-d2f8cc30]{width:100%;max-width:400px}.editor-warning[data-v-d2f8cc30]{padding:.5rem 0}.editor-detected[data-v-d2f8cc30]{padding-top:.5rem}.editor-option[data-v-d2f8cc30]{align-items:center;gap:.5rem;display:flex}.hint[data-v-d2f8cc30]{color:var(--r-text-muted);font-size:.78rem}.parsers-scope[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin:0 0 1rem;font-size:.85rem;display:flex}.r-dialog__content.parser-dialog .r-dialog__body{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.settings-card[data-v-0e74635d]{max-width:680px}.card-desc[data-v-0e74635d]{color:var(--r-text-muted);margin:0 0 1rem;font-size:.85rem}.parsers-loading[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;padding:1rem;font-size:.875rem;display:flex}.parsers-list[data-v-0e74635d]{flex-direction:column;gap:.375rem;display:flex}.parsers-row[data-v-0e74635d]{border:1px solid var(--r-border);background:var(--r-bg);align-items:center;gap:.75rem;padding:.5rem .75rem;display:flex}.parsers-name[data-v-0e74635d]{flex-shrink:0;font-size:.875rem;font-weight:600}.parsers-desc-inline[data-v-0e74635d]{color:var(--r-text-muted);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:.8rem;overflow:hidden}.parsers-icon--on[data-v-0e74635d]{color:var(--r-green-500);justify-content:center;align-items:center;width:2rem;height:2rem;display:flex}.parsers-icon--off[data-v-0e74635d]{color:var(--r-red-500);justify-content:center;align-items:center;width:2rem;height:2rem;display:flex}.parsers-actions[data-v-0e74635d]{align-items:center;gap:.25rem;margin-left:auto;display:flex}.parsers-empty[data-v-0e74635d]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.parser-dialog__layout[data-v-0e74635d]{grid-template-columns:1fr 1fr;align-items:stretch;gap:1.25rem;height:100%;display:grid;overflow:hidden}@media (width<=768px){.parser-dialog__layout[data-v-0e74635d]{grid-template-columns:1fr;height:auto;overflow-y:auto}.dialog-form[data-v-0e74635d]{height:auto;overflow:visible}.dialog-form__field--code[data-v-0e74635d]{min-height:250px}.parser-sim[data-v-0e74635d]{min-height:300px}.parser-sim__body[data-v-0e74635d]{min-height:0}.parser-sim__col--output[data-v-0e74635d]{min-height:150px}}.dialog-form[data-v-0e74635d]{flex-direction:column;gap:1rem;height:100%;display:flex;overflow:auto}.dialog-form__field--code[data-v-0e74635d]{flex:1;min-height:0}.dialog-form__field[data-v-0e74635d]{flex-direction:column;gap:.375rem;display:flex}.dialog-form__label[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.8125rem;font-weight:600;display:flex}.dialog-form__input[data-v-0e74635d]{width:100%}.dialog-form__hint[data-v-0e74635d]{color:var(--r-text-muted);font-size:.78rem}.dialog-form__hint code[data-v-0e74635d]{background:var(--r-bg-hover);border-radius:3px;padding:.125rem .375rem;font-family:Monaco,Menlo,monospace;font-size:.75rem}.dialog-form__switch[data-v-0e74635d]{align-items:center;gap:.5rem;display:flex}.dialog-form__switch-label[data-v-0e74635d]{color:var(--r-text-muted);font-size:.85rem}.dialog-form__templates[data-v-0e74635d]{flex-direction:column;gap:.5rem;display:flex}.dialog-form__templates-label[data-v-0e74635d]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:.75rem;font-weight:600}.dialog-form__templates-select[data-v-0e74635d]{width:100%}.dialog-form__ai-btn[data-v-0e74635d]{margin-left:auto}.tpl-option[data-v-0e74635d]{align-items:center;gap:.75rem;display:flex}.tpl-option__icon[data-v-0e74635d]{color:var(--r-primary);flex-shrink:0;font-size:.9rem}.tpl-option__body[data-v-0e74635d]{flex-direction:column;gap:.1rem;display:flex}.tpl-option__name[data-v-0e74635d]{color:var(--r-text);font-size:.8125rem;font-weight:600}.tpl-option__desc[data-v-0e74635d]{color:var(--r-text-muted);font-size:.73rem}.parser-sim[data-v-0e74635d]{border:1px solid var(--r-border);flex-direction:column;height:100%;display:flex;overflow:hidden}.parser-sim__header[data-v-0e74635d]{background:color-mix(in srgb, var(--r-text) 7%, var(--r-bg));border-bottom:1px solid var(--r-border);justify-content:space-between;align-items:center;padding:.5rem .75rem;font-size:.8125rem;display:flex}.parser-sim__title[data-v-0e74635d]{align-items:center;gap:.4rem;font-weight:600;display:flex}.parser-sim__status[data-v-0e74635d]{color:var(--r-text-muted);align-items:center;gap:.3rem;font-size:.75rem;display:flex}.parser-sim__body[data-v-0e74635d]{flex-direction:column;flex:1;gap:0;min-height:0;display:flex}.parser-sim__col[data-v-0e74635d]{flex-direction:column;gap:.25rem;padding:.6rem .75rem;display:flex}.parser-sim__col[data-v-0e74635d]:first-child{border-bottom:1px solid var(--r-border)}.parser-sim__col-label[data-v-0e74635d]{color:var(--r-text-muted);text-transform:uppercase;letter-spacing:.04em;margin-bottom:.25rem;font-size:.75rem;font-weight:600}.parser-sim__textarea[data-v-0e74635d]{resize:vertical;border:1px solid var(--r-border-strong,var(--r-border));background:var(--r-bg-field,var(--r-bg));width:100%;min-height:160px;color:var(--r-text,var(--r-text));outline:none;padding:.5rem;font-family:monospace;font-size:.8rem;line-height:1.5}.parser-sim__textarea[data-v-0e74635d]:focus{border-color:var(--r-primary)}.parser-sim__error[data-v-0e74635d]{color:var(--r-red-500,#ef4444);align-items:flex-start;gap:.4rem;padding:.5rem;font-size:.8rem;display:flex}.parser-sim__empty[data-v-0e74635d]{color:var(--r-text-muted);padding:.5rem;font-size:.8rem;font-style:italic}.parser-sim__col--output[data-v-0e74635d]{flex:1;min-height:0;overflow:hidden}.parser-sim__viewer[data-v-0e74635d]{flex:1;height:100%;min-height:0}.parser-ai-prompt[data-v-0e74635d]{flex-direction:column;gap:.75rem;display:flex}.parser-ai-prompt__desc[data-v-0e74635d]{color:var(--r-text-muted);margin:0;font-size:.9rem}.parser-ai-prompt__input[data-v-0e74635d]{resize:vertical;width:100%}.providers-scope[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.4rem;margin:0 0 .9rem;font-size:.8rem;display:flex}.settings-card[data-v-8692bb0c]{max-width:680px}.providers-loading[data-v-8692bb0c],.providers-empty[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.5rem;padding:1rem;font-size:.875rem;display:flex}.ai-providers-list[data-v-8692bb0c]{flex-direction:column;gap:.5rem;display:flex}.ai-provider-row[data-v-8692bb0c]{border:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;transition:border-color .15s;display:flex}.ai-provider-row--active[data-v-8692bb0c]{border-color:var(--r-primary);background:color-mix(in srgb, var(--r-primary) 5%, var(--r-bg))}.ai-provider-info[data-v-8692bb0c]{flex-wrap:wrap;align-items:center;gap:.75rem;min-width:0;display:flex}.ai-provider-name[data-v-8692bb0c]{font-size:.875rem;font-weight:600}.ai-provider-type[data-v-8692bb0c]{color:var(--r-text-muted);font-size:.8125rem}.ai-provider-model[data-v-8692bb0c]{background:var(--r-bg-hover);color:var(--r-text-muted);border-radius:4px;padding:.15rem .4rem;font-size:.75rem}.ai-provider-key[data-v-8692bb0c]{background:var(--r-bg-hover);letter-spacing:.05em;border-radius:4px;padding:.15rem .4rem;font-size:.75rem}.ai-provider-actions[data-v-8692bb0c]{flex-shrink:0;align-items:center;gap:.25rem;display:flex}.ai-provider-badge[data-v-8692bb0c]{color:var(--r-primary);align-items:center;gap:.35rem;padding:.25rem .6rem;font-size:.8rem;font-weight:600;display:inline-flex}.dialog-form[data-v-8692bb0c]{flex-direction:column;gap:1rem;display:flex}.dialog-form__field[data-v-8692bb0c]{flex-direction:column;gap:.375rem;display:flex}.dialog-form__label[data-v-8692bb0c]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.8125rem;font-weight:600;display:flex}.dialog-form__input[data-v-8692bb0c]{width:100%}.ai-provider-info-block[data-v-8692bb0c]{background:color-mix(in srgb, var(--r-primary) 6%, var(--r-bg));border:1px solid color-mix(in srgb, var(--r-primary) 25%, transparent);flex-direction:column;gap:.5rem;padding:.75rem 1rem;display:flex}.ai-provider-info-block__text[data-v-8692bb0c]{color:var(--r-text);margin:0;font-size:.875rem;line-height:1.5}.ai-provider-info-block__link[data-v-8692bb0c]{color:var(--r-primary);align-items:center;gap:.35rem;font-size:.8125rem;font-weight:500;text-decoration:none;display:inline-flex}.ai-provider-info-block__link[data-v-8692bb0c]:hover{text-decoration:underline}.ai-provider-info-block__models[data-v-8692bb0c]{flex-wrap:wrap;align-items:center;gap:.4rem;display:flex}.ai-provider-info-block__models-label[data-v-8692bb0c]{color:var(--r-text-muted);font-size:.75rem;font-weight:500}.ai-provider-info-block__model-tag[data-v-8692bb0c]{background:var(--r-bg-hover);border:1px solid var(--r-border);color:var(--r-text-muted);border-radius:4px;padding:.1rem .4rem;font-size:.7rem}.settings-card[data-v-2fb5a15c]{max-width:680px}.companion-settings__row[data-v-2fb5a15c]{align-items:center;gap:.75rem;padding:.4rem 0;display:flex}.companion-settings__row--stack[data-v-2fb5a15c]{flex-wrap:wrap;justify-content:space-between}.companion-settings__label[data-v-2fb5a15c]{font-size:.85rem}.companion-settings__hint[data-v-2fb5a15c]{color:var(--r-text-muted);font-size:.75rem}.companion-settings__actions[data-v-2fb5a15c]{gap:.25rem;display:flex}.companion-settings__editor[data-v-2fb5a15c]{margin-top:.5rem}.companion-settings__textarea[data-v-2fb5a15c]{width:100%;font-family:var(--font-mono,ui-monospace, monospace);font-size:.75rem}.settings-card[data-v-b2f796d8]{max-width:680px}.scenario-list[data-v-b2f796d8]{flex-direction:column;gap:.5rem;display:flex}.scenario-row[data-v-b2f796d8]{border:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;gap:.75rem;padding:.5rem .75rem;display:flex}.scenario-info[data-v-b2f796d8]{align-items:center;gap:.75rem;display:flex}.scenario-icon[data-v-b2f796d8]{opacity:.7;font-size:1.1rem}.scenario-desc[data-v-b2f796d8]{opacity:.6;margin-left:.5rem;font-size:.85rem}.scenario-meta[data-v-b2f796d8]{opacity:.5;margin-top:.25rem;font-size:.8rem}.scenario-actions[data-v-b2f796d8]{flex-shrink:0;gap:.25rem;display:flex}.scenario-empty[data-v-b2f796d8]{text-align:center;opacity:.5;padding:1rem 0}.state[data-v-5b38ad31]{color:var(--r-text-muted);align-items:center;gap:.75rem;font-size:.88rem;display:flex}.settings-card[data-v-3261b86d]{max-width:680px}.setting-row[data-v-3261b86d]{border-bottom:1px solid var(--r-border);align-items:flex-start;gap:1rem;padding:.75rem 0;display:flex}.setting-row[data-v-3261b86d]:last-child{border-bottom:none}.setting-label[data-v-3261b86d]{width:140px;color:var(--r-text-muted);flex-shrink:0;padding-top:.25rem;font-size:.9rem;font-weight:600}.setting-value[data-v-3261b86d]{flex:1;align-items:center;gap:.5rem;display:flex}.card-title-row[data-v-3261b86d]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;display:flex}.diagnostics[data-v-7cc5031a]{flex-direction:column;gap:2rem;display:flex}.block__header[data-v-7cc5031a]{justify-content:space-between;align-items:flex-start;gap:1rem;margin-bottom:.85rem;display:flex}.block__title[data-v-7cc5031a]{margin:0;font-size:1rem;font-weight:600}.block__desc[data-v-7cc5031a]{color:var(--r-text-muted);margin:.2rem 0 0;font-size:.85rem}.empty[data-v-7cc5031a]{text-align:center;color:var(--r-text-muted);margin:0;padding:1.2rem;font-size:.875rem}.instances[data-v-7cc5031a]{border:1px solid var(--r-border);border-radius:8px;margin:0;padding:0;list-style:none;overflow:hidden}.instance[data-v-7cc5031a]{border-bottom:1px solid var(--r-border);grid-template-columns:1fr auto;grid-template-areas:"main action""meta action";align-items:center;gap:.15rem 1rem;padding:.7rem .9rem;display:grid}.instance[data-v-7cc5031a]:last-child{border-bottom:0}.instance__main[data-v-7cc5031a]{grid-area:main;align-items:center;gap:.5rem;font-size:.9rem;font-weight:600;display:flex}.instance__port[data-v-7cc5031a]{align-items:center;gap:.4rem;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;display:flex}.instance__meta[data-v-7cc5031a]{color:var(--r-text-muted);flex-wrap:wrap;grid-area:meta;align-items:center;gap:.4rem;font-size:.78rem;display:flex}.instance__cwd[data-v-7cc5031a]{text-overflow:ellipsis;white-space:nowrap;max-width:24rem;overflow:hidden}.instance[data-v-7cc5031a] .r-button{grid-area:action}.instance__actions[data-v-7cc5031a]{grid-area:action;align-items:center;gap:.25rem;display:flex}.instance__actions[data-v-7cc5031a] .r-button{grid-area:auto}.tag[data-v-7cc5031a]{border-radius:999px;padding:.1rem .45rem;font-size:.7rem;font-weight:600}.tag--current[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-primary) 16%, transparent);color:var(--r-primary)}.toolbar[data-v-7cc5031a]{flex-wrap:wrap;align-items:center;gap:.6rem;margin-bottom:.6rem;display:flex}.toolbar__source[data-v-7cc5031a]{min-width:9rem}.toolbar__search[data-v-7cc5031a]{flex:10rem;min-width:10rem}.toolbar__toggle[data-v-7cc5031a]{align-items:center;gap:.45rem;font-size:.85rem;display:flex}.toolbar__spacer[data-v-7cc5031a]{flex:auto}.toolbar__actions[data-v-7cc5031a]{flex:none;align-items:center;gap:.25rem;display:flex}.log[data-v-7cc5031a]{background:var(--r-bg);border:1px solid var(--r-border);border-radius:8px;height:26rem;padding:.5rem 0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.78rem;line-height:1.55;overflow:auto}.log-line[data-v-7cc5031a]{white-space:pre-wrap;word-break:break-word;gap:.6rem;padding:.05rem .8rem;display:flex}.log-line--warn[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-orange-500,#f59e0b) 9%, transparent)}.log-line--error[data-v-7cc5031a]{background:color-mix(in srgb, var(--r-red-500,#ef4444) 11%, transparent)}.log-line__time[data-v-7cc5031a]{color:var(--r-text-muted);opacity:.75;flex:none}.log-line__source[data-v-7cc5031a]{text-transform:uppercase;letter-spacing:.03em;flex:0 0 3.4rem;align-self:center;font-size:.68rem}.log-line__source--server[data-v-7cc5031a]{color:var(--r-primary)}.log-line__source--agent[data-v-7cc5031a]{color:var(--r-text-muted)}.log-line__text[data-v-7cc5031a]{flex:auto}.follow-hint[data-v-7cc5031a]{text-align:center;margin:.4rem 0 0}.api-docs[data-v-a921e175]{flex-direction:column;height:100%;display:flex;overflow:hidden}.api-docs__content[data-v-a921e175]{flex:1;min-height:0;overflow-y:auto}.api-docs__toolbar[data-v-a921e175]{flex-shrink:0;align-items:center;gap:.75rem;padding:.75rem 1rem;display:flex}.api-docs__toolbar-label[data-v-a921e175]{color:var(--r-text-muted);white-space:nowrap;font-size:.875rem;font-weight:500}.settings-page[data-v-39ce45b8]{flex-direction:column;height:100%;display:flex}.settings-layout[data-v-39ce45b8]{flex:1;gap:0;min-height:0;display:flex}.settings-nav[data-v-39ce45b8]{border-right:1px solid var(--r-border);flex-direction:column;flex-shrink:0;gap:.25rem;width:220px;padding:1rem 0;display:flex;overflow-y:auto}.settings-nav__list[data-v-39ce45b8]{flex-direction:column;gap:.125rem;margin:0;padding:0;list-style:none;display:flex}.settings-nav__group[data-v-39ce45b8]{letter-spacing:.06em;text-transform:uppercase;color:var(--r-text-muted);margin:1rem 1.5rem .25rem;font-size:.7rem;font-weight:600}.settings-nav__group[data-v-39ce45b8]:first-child{margin-top:.25rem}.settings-nav__item[data-v-39ce45b8]{cursor:pointer;width:calc(100% - 1rem);font:inherit;text-align:left;color:var(--r-text-muted);transition:background var(--r-duration-base) ease, color var(--r-duration-base) ease;-webkit-user-select:none;user-select:none;background:0 0;border:none;border-radius:6px;align-items:center;gap:.625rem;margin:0 .5rem;padding:.45rem 1rem;font-size:.875rem;display:flex}@media (hover:hover) and (pointer:fine){.settings-nav__item[data-v-39ce45b8]:hover{background:var(--r-bg-hover);color:var(--r-text)}}.settings-nav__item[data-v-39ce45b8]:focus-visible{outline:2px solid var(--r-primary-text);outline-offset:-2px}.settings-nav__item--active[data-v-39ce45b8]{background:color-mix(in srgb, var(--r-primary) 12%, var(--r-bg));color:var(--r-primary-text);font-weight:600}.settings-nav__icon[data-v-39ce45b8]{flex-shrink:0;font-size:1rem}.settings-content[data-v-39ce45b8]{flex:1;min-width:0;padding:1.5rem 2rem;overflow-y:auto}.settings-content[data-v-39ce45b8]>*{max-width:60rem}.settings-content--fullpage[data-v-39ce45b8]>*{max-width:none}.settings-content--fullpage[data-v-39ce45b8]{flex-direction:column;min-height:0;padding:0;display:flex;overflow:hidden}.settings-content--fullpage[data-v-39ce45b8] .api-docs{flex:1;min-height:0}@media (width<=640px){.settings-layout[data-v-39ce45b8]{flex-direction:column}.settings-nav[data-v-39ce45b8]{border-right:none;border-bottom:1px solid var(--r-border);flex-direction:row;align-items:center;width:100%;padding:.5rem 0;position:relative}.settings-nav__list[data-v-39ce45b8]{scrollbar-width:none;flex-direction:row;flex:1;gap:0;padding:0 .25rem;overflow-x:auto}.settings-nav__list[data-v-39ce45b8]::-webkit-scrollbar{display:none}.settings-nav__group[data-v-39ce45b8]{display:none}.settings-nav__item[data-v-39ce45b8]{white-space:nowrap;border-radius:6px;flex-direction:column;flex-shrink:0;gap:.25rem;width:auto;margin:0;padding:.4rem .75rem;font-size:.7rem}.settings-nav__icon[data-v-39ce45b8]{font-size:1rem}.settings-nav__chevron[data-v-39ce45b8]{cursor:pointer;width:2rem;height:2rem;color:var(--r-text-muted);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;transition:background .15s,color .15s;display:flex}.settings-nav__chevron[data-v-39ce45b8]:hover{background:var(--r-bg-hover);color:var(--r-text)}.settings-content[data-v-39ce45b8]{padding:1rem}}@media (width>=641px){.settings-nav__chevron[data-v-39ce45b8]{display:none}}.section-header[data-v-39ce45b8]{margin-bottom:1.5rem}.section-header--has-actions[data-v-39ce45b8]{justify-content:space-between;align-items:flex-start;gap:1rem;display:flex}.section-header__text[data-v-39ce45b8]{flex:1;min-width:0}.section-header__actions[data-v-39ce45b8]{flex-shrink:0;align-self:center}.section-title[data-v-39ce45b8]{margin:0 0 .25rem;font-size:1.25rem;font-weight:700}.section-desc[data-v-39ce45b8]{color:var(--r-text-muted);margin:0;font-size:.875rem}