@runeya/runeya 2.0.144 → 2.0.145
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.
- package/agent/index.js +7 -1
- package/agent/index.js.map +1 -1
- package/agent-manager-THV3LJOF.js +11 -0
- package/{chat-X3X527EX.js → chat-XYCHMTFE.js} +9 -9
- package/{chunk-7HIPFSOA.js → chunk-57P45FNY.js} +11 -3
- package/chunk-57P45FNY.js.map +1 -0
- package/{chunk-UR3HL373.js → chunk-FE53XX4M.js} +8 -8
- package/{chunk-IXO5KIO5.js → chunk-KS7A5CTW.js} +12 -1
- package/{chunk-IXO5KIO5.js.map → chunk-KS7A5CTW.js.map} +1 -1
- package/{chunk-XAFOP677.js → chunk-MZSDTA4A.js} +480 -233
- package/chunk-MZSDTA4A.js.map +1 -0
- package/{chunk-7L6AQUBR.js → chunk-NCO4OOYT.js} +6 -2
- package/{chunk-7L6AQUBR.js.map → chunk-NCO4OOYT.js.map} +1 -1
- package/{chunk-P73PTVII.js → chunk-ONVAH65J.js} +103 -33
- package/chunk-ONVAH65J.js.map +1 -0
- package/{chunk-NSS47H26.js → chunk-Q4RPY3VW.js} +330 -74
- package/chunk-Q4RPY3VW.js.map +1 -0
- package/{chunk-GXE5TLLJ.js → chunk-QF56Z6LI.js} +17 -17
- package/{companion-2LHKU577.js → companion-HBYSY2D5.js} +11 -7
- package/{desktop-installer-page-6JDSXK2E.js → desktop-installer-page-I5FHFDES.js} +11 -8
- package/desktop-installer-page-I5FHFDES.js.map +1 -0
- package/{desktop-launcher-YPNRQMIS.js → desktop-launcher-GD4QPM66.js} +3 -3
- package/index.js +25 -12
- package/index.js.map +1 -1
- package/{install-gate-2NNH7RM2.js → install-gate-JAEK4BDZ.js} +2 -2
- package/mcp-server/index.js +7 -1
- package/mcp-server/index.js.map +1 -1
- package/package.json +1 -1
- package/settings-manager-QVQRJO6V.js +10 -0
- package/src-DCCEUWE6.js +385 -0
- package/{src-5TEXF3SU.js → src-IODFUZ7A.js} +100 -59
- package/src-IODFUZ7A.js.map +1 -0
- package/{vault-resolver-VK6W5J6W.js → vault-resolver-PN3TYCLJ.js} +3 -2
- package/vault-resolver-PN3TYCLJ.js.map +1 -0
- package/web/assets/{AgentScalarChatInterface.vue-B-SjOsdj.js → AgentScalarChatInterface.vue-npQgDxeP.js} +1 -1
- package/web/assets/{AgentTerminalPage-JzC8DUgu.js → AgentTerminalPage-BTH3yCS2.js} +1 -1
- package/web/assets/{AiChatModals-D1928AxG.js → AiChatModals-It9jnB26.js} +1 -1
- package/web/assets/AppLayout-BTg2CADo.js +1 -0
- package/web/assets/{AppLayout-8sBPr3od.css → AppLayout-tsw5Ow0w.css} +1 -1
- package/web/assets/{AuditPage-BZIJ3_Kr.js → AuditPage-2PKKGLZs.js} +1 -1
- package/web/assets/{CloudAccountPage-DBv470sT.js → CloudAccountPage-CHL61gLe.js} +1 -1
- package/web/assets/{CloudMessagingPage-qCI8-UDL.js → CloudMessagingPage-cgKnABPH.js} +1 -1
- package/web/assets/DashboardPage-CRntTMKY.js +1 -0
- package/web/assets/{DashboardPage-D9-PpC3F.css → DashboardPage-FvNuC_e4.css} +1 -1
- package/web/assets/{DirectoryPickerDialog-B5DvDfQP.js → DirectoryPickerDialog-DCyhT3-W.js} +1 -1
- package/web/assets/{EnvironmentForm-Bw8Djnqm.js → EnvironmentForm-C96PFWRE.js} +1 -1
- package/web/assets/{EnvironmentFormPage-B59uiYtp.js → EnvironmentFormPage-ChorAd63.js} +1 -1
- package/web/assets/{EnvironmentListPage-W9zLDZAg.js → EnvironmentListPage-Dw9ziaI8.js} +1 -1
- package/web/assets/KanbanBoardPage-BZHbEj-q.js +4 -0
- package/web/assets/KanbanBoardPage-eHmsrFGA.css +1 -0
- package/web/assets/{KanbanListPage-Bn9k8Rpc.js → KanbanListPage-B0jlfKqs.js} +1 -1
- package/web/assets/{LaunchProjectPage-Dc7v1UjQ.js → LaunchProjectPage-BVs1JwbV.js} +1 -1
- package/web/assets/LaunchServicesPage-DoLDPqQq.css +1 -0
- package/web/assets/LaunchServicesPage-PBYJly9N.js +1 -0
- package/web/assets/{LaunchShell-LonTJpb3.js → LaunchShell-CGNYr-do.js} +1 -1
- package/web/assets/{LogViewer-DkuqWYkQ.js → LogViewer-BDObx29F.js} +1 -1
- package/web/assets/{OrgKeyPrompt-By1VjlSN.js → OrgKeyPrompt-BbcwiwGw.js} +1 -1
- package/web/assets/{ProcessControls-C0skzKGL.js → ProcessControls-DY0HTKde.js} +1 -1
- package/web/assets/{ProcessDetailPage-BvPX6z_X.js → ProcessDetailPage-BZ9kIQqn.js} +1 -1
- package/web/assets/{ProjectCreateDialog-C4o9u15L.js → ProjectCreateDialog-C1wVDPcK.js} +1 -1
- package/web/assets/{ProjectLocationGate-BJ1CSQt0.js → ProjectLocationGate-bUd_tFpI.js} +1 -1
- package/web/assets/{ProjectPublishDialog-Cp-zXdGm.js → ProjectPublishDialog-APUS1WEN.js} +1 -1
- package/web/assets/{RandomJobTestPage-DF4a1U13.js → RandomJobTestPage-BFNC827R.js} +1 -1
- package/web/assets/ScenarioEditorPage-DFVsMVu5.js +14 -0
- package/web/assets/{SendToChatDialog-Dg2SHkVD.js → SendToChatDialog-QHIkxNio.js} +1 -1
- package/web/assets/{ServiceControlsBar-q2VHWaxK.js → ServiceControlsBar-_UQXb6g0.js} +1 -1
- package/web/assets/ServiceDetailPage-DGIXgHwR.js +2 -0
- package/web/assets/{ServiceFormPage-tT_n7WUy.js → ServiceFormPage-RliAfS3_.js} +1 -1
- package/web/assets/SettingsPage-BSSHxxjM.js +2086 -0
- package/web/assets/{SettingsPage-aGSxZw1n.css → SettingsPage-W8YszhUL.css} +1 -1
- package/web/assets/{UnlockPage-BKAdMJkb.js → UnlockPage-17EgfpJs.js} +1 -1
- package/web/assets/{VaultMigrationPage-D9KUTTss.js → VaultMigrationPage-DeMxpXXJ.js} +1 -1
- package/web/assets/{VersionBadge-moKP5bAv.js → VersionBadge-DBquJl76.js} +1 -1
- package/web/assets/{WikiPage-hLUndDxo.js → WikiPage-GtwpJPqf.js} +1 -1
- package/web/assets/{WikiView-rrjXRR72.js → WikiView-BqaqxMxW.js} +1 -1
- package/web/assets/{add-scalar-classes-CBfRr8B2.js → add-scalar-classes-DhSSqZ5l.js} +2 -2
- package/web/assets/{agent.store-B3dVemmT.js → agent.store-Co44dMZf.js} +1 -1
- package/web/assets/app-mode-BVpTuh0i.js +1 -0
- package/web/assets/auth-Bk1GP5sB.js +2 -0
- package/web/assets/{cloud-chat.store-Wg1poFem.js → cloud-chat.store-CadB14dZ.js} +1 -1
- package/web/assets/{cloud-client-DQlUaoAw.js → cloud-client-0zD_NI6q.js} +2 -2
- package/web/assets/{cloud-session-DRUqcSGP.js → cloud-session-Cjw54Y--.js} +2 -2
- package/web/assets/dist-N4nrnbnA.js +1 -0
- package/web/assets/{editor.store-SoH48ux2.js → editor.store-DmM6ZlTm.js} +1 -1
- package/web/assets/i18n-8FjeJaKW.js +1 -0
- package/web/assets/{index-D_x2s8Ut.js → index-B9DJf2V0.js} +101 -101
- package/web/assets/{index-C_JV7fYy.css → index-teBqdnuv.css} +1 -1
- package/web/assets/{modal-CpsVK_dA.js → modal-UK8xRSnh.js} +1 -1
- package/web/assets/{project-launch.store-C3fZeRGb.js → project-launch.store-B5nhdGdh.js} +1 -1
- package/web/assets/{project.store-BEk4fciH.js → project.store-Bm2JWNbd.js} +1 -1
- package/web/assets/{scenario.store-D-JrRiVO.js → scenario.store-88w6P6s2.js} +2 -2
- package/web/assets/{service.store-B5uYZtyM.js → service.store-XS50iGKo.js} +1 -1
- package/web/assets/{settings-scope-Blnwj3rR.js → settings-scope-CKPq86HZ.js} +1 -1
- package/web/assets/{settings.store-Bo3FYs1o.js → settings.store-BCJ0LJQA.js} +1 -1
- package/web/assets/src-BDZKZr9n.css +1 -0
- package/web/assets/{src-DValZNJU.js → src-Cgix2VOi.js} +5 -5
- package/web/assets/{src-CAwAaB5j.js → src-DBipSD56.js} +1 -1
- package/web/assets/{trpc-DbsE5GvQ.js → trpc-CfuFkKgp.js} +3 -3
- package/web/assets/{useCloudOrg-DygUBG1a.js → useCloudOrg-J8DAnocE.js} +1 -1
- package/web/assets/{useEnvVarAutocomplete-DmYNOXgd.js → useEnvVarAutocomplete-C6zOXYqi.js} +1 -1
- package/web/assets/{useProjectCatalog-D2mHB7dg.js → useProjectCatalog-BB5IR6o8.js} +1 -1
- package/web/assets/{useProjectCloudOrg-avTCVold.js → useProjectCloudOrg-BnlKts7x.js} +1 -1
- package/web/assets/{useServiceUrlHost-Q3fzGox3.js → useServiceUrlHost-hKbKtPMu.js} +1 -1
- package/web/assets/{vue-draggable-plus-WgrMXXmE.js → vue-draggable-plus-D5ni4jMk.js} +1 -1
- package/web/index.html +19 -18
- package/agent-manager-M4NA5YFD.js +0 -11
- package/chunk-7HIPFSOA.js.map +0 -1
- package/chunk-NSS47H26.js.map +0 -1
- package/chunk-P73PTVII.js.map +0 -1
- package/chunk-XAFOP677.js.map +0 -1
- package/desktop-installer-page-6JDSXK2E.js.map +0 -1
- package/settings-manager-32SVMAFN.js +0 -10
- package/src-5TEXF3SU.js.map +0 -1
- package/web/assets/AppLayout-CVQIBYqg.js +0 -1
- package/web/assets/DashboardPage-D0UZM0mr.js +0 -1
- package/web/assets/KanbanBoardPage-DRACMk_D.css +0 -1
- package/web/assets/KanbanBoardPage-DwPqoJDJ.js +0 -4
- package/web/assets/LaunchServicesPage-CXUS9O3y.js +0 -1
- package/web/assets/LaunchServicesPage-DJDIN8HU.css +0 -1
- package/web/assets/ScenarioEditorPage-Dl-gEkJI.js +0 -14
- package/web/assets/ServiceDetailPage-CJ8WaFod.js +0 -2
- package/web/assets/SettingsPage-CWakkv0V.js +0 -2086
- package/web/assets/auth-BCrvnP1U.js +0 -2
- package/web/assets/dist-DoChtT9t.js +0 -1
- package/web/assets/i18n-BszFg0ko.js +0 -1
- package/web/assets/src-DuBXN1hu.css +0 -1
- /package/{agent-manager-M4NA5YFD.js.map → agent-manager-THV3LJOF.js.map} +0 -0
- /package/{chat-X3X527EX.js.map → chat-XYCHMTFE.js.map} +0 -0
- /package/{chunk-UR3HL373.js.map → chunk-FE53XX4M.js.map} +0 -0
- /package/{chunk-GXE5TLLJ.js.map → chunk-QF56Z6LI.js.map} +0 -0
- /package/{companion-2LHKU577.js.map → companion-HBYSY2D5.js.map} +0 -0
- /package/{desktop-launcher-YPNRQMIS.js.map → desktop-launcher-GD4QPM66.js.map} +0 -0
- /package/{install-gate-2NNH7RM2.js.map → install-gate-JAEK4BDZ.js.map} +0 -0
- /package/{settings-manager-32SVMAFN.js.map → settings-manager-QVQRJO6V.js.map} +0 -0
- /package/{vault-resolver-VK6W5J6W.js.map → src-DCCEUWE6.js.map} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
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{F as b,I as x}from"./floating-ui.dom-DWhsZyqT.js";import{B as S,D as C,E as w,H as T,J as E,O as D,P as O,S as k,U as A,W as j,Y as M,_ as N,b as P,dt as F,ft as I,g as L,h as R,i as ee,j as te,k as z,l as B,m as ne,mt as V,n as re,o as H,p as U,q as ie,r as W,v as G,x as K,y as q,z as J}from"./src--GO-VSJ0.js";import{n as Y}from"./project-launch.store-C3fZeRGb.js";import{g as ae,h as X}from"./useApi-s_02lHjl-DZYO2tHU.js";import{t as oe}from"./vue-router-fin80h5W.js";import{a as Z,n as se,r as Q}from"./trpc-DbsE5GvQ.js";import{n as ce,r as le}from"./project.store-BEk4fciH.js";import{n as ue}from"./error-DpF7X5iu.js";import{n as de}from"./AiChatModals-D1928AxG.js";import{n as $,t as fe}from"./vue-draggable-plus-WgrMXXmE.js";import{t as pe}from"./useAiChatDrawer-D_ofn8Eo.js";import{f as me,r as he,u as ge}from"./dist-DoChtT9t.js";import{t as _e}from"./service.store-B5uYZtyM.js";import{t as ve}from"./agent.store-B3dVemmT.js";import{r as ye}from"./process-BWkHpZOM.js";import{c as be}from"./index-D_x2s8Ut.js";import{t as xe}from"./ServiceControlsBar-q2VHWaxK.js";import{t as Se}from"./uuid-XipkJWQw.js";import{i as Ce,n as we,r as Te,t as Ee}from"./useEnvVarAutocomplete-DmYNOXgd.js";import{t as De}from"./ProcessMetrics-Crlfkelj.js";import{t as Oe}from"./LogViewer-DkuqWYkQ.js";import{t as ke}from"./settings.store-Bo3FYs1o.js";import{t as Ae}from"./WikiView-rrjXRR72.js";var je={key:0,class:`log-details`},Me={class:`log-details__section`},Ne={class:`log-details__label`},Pe={class:`log-details__value log-details__value--box`},Fe={class:`log-details__section`},Ie={class:`log-details__label`},Le={class:`log-details__value log-details__value--box log-details__value--code`},Re={class:`log-details__section`},ze={class:`log-details__label`},Be={class:`log-details__value log-details__value--box`},Ve={class:`log-details__process`},He={class:`log-details__section`},Ue={class:`log-details__label`},We={class:`log-details__value log-details__value--box`},Ge={key:0,class:`log-details__section`},Ke={class:`log-details__label`},qe={class:`log-details__value log-details__value--box log-details__value--code`,"data-testid":`log-details-cwd`},Je={class:`log-details__section`},Ye={class:`log-details__label`},Xe={class:`log-details__value log-details__value--box`},Ze={key:1,class:`log-details__section`},Qe={class:`log-details__label`},$e={class:`log-details__value log-details__value--box`},et={key:2,class:`log-details__section`},tt={class:`log-details__label`},nt={class:`log-details__value log-details__value--box log-details__value--code`},rt=I(f({__name:`LogDetailsDrawer`,props:{visible:{type:Boolean},log:{}},emits:[`update:visible`,`view-process`],setup(t,{emit:r}){let i=t,{t:s}=V(),c=be(),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(H),{visible:t.visible,position:`right`,header:e(s)(`logDetails.header`),style:{width:`440px`},"onUpdate:visible":x},{default:h(()=>[t.log?(p(),o(`div`,je,[a(`div`,Me,[a(`div`,Ne,g(e(s)(`logDetails.type`)),1),a(`div`,Pe,g(f.value),1)]),a(`div`,Fe,[a(`div`,Ie,g(e(s)(`logDetails.rawMessage`)),1),a(`div`,Le,g(t.log.raw),1)]),a(`div`,Re,[a(`div`,ze,g(e(s)(`logDetails.serviceId`)),1),a(`div`,Be,[a(`div`,Ve,[a(`span`,null,g(t.log.processId),1),n(e(F),{label:e(s)(`logDetails.viewProcess`),icon:`ti ti-external-link`,size:`small`,variant:`outlined`,onClick:b},null,8,[`label`])])])]),a(`div`,He,[a(`div`,Ue,g(e(s)(`logDetails.pid`)),1),a(`div`,We,g(m.value),1)]),_.value?(p(),o(`div`,Ge,[a(`div`,Ke,g(e(s)(`logDetails.cwd`)),1),a(`div`,qe,g(_.value),1)])):y(``,!0),a(`div`,Je,[a(`div`,Ye,g(e(s)(`logDetails.timestamp`)),1),a(`div`,Xe,g(u.value),1)]),t.log.stream?(p(),o(`div`,Ze,[a(`div`,Qe,g(e(s)(`logDetails.stream`)),1),a(`div`,$e,g(t.log.stream),1)])):y(``,!0),t.log.metadata&&Object.keys(t.log.metadata).length>0?(p(),o(`div`,et,[a(`div`,tt,g(e(s)(`logDetails.metadata`)),1),a(`div`,nt,g(JSON.stringify(t.log.metadata,null,2)),1)])):y(``,!0)])):y(``,!0)]),_:1},8,[`visible`,`header`]))}}),[[`__scopeId`,`data-v-b2c352ef`]]),it=500,at=5,ot=he;function st(e){return e+Math.random()*e*.3}function ct(e,n){let r=t([]),a=t(!1),o=null,s=0,c=null,l=se(()=>{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>it&&(t=t.slice(t.length-it)),r.value=t}function x(){e.value&&n.value&&(a.value=!0,o=Q.process.onLog.subscribe({agentId:e.value,processId:n.value},{onData(e){let t=e;if(s=0,Z(`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>=at){console.warn(`[useLogStream] Max retries (${at}) reached`),Z(`disconnected`);return}Z(`reconnecting`);let e=st(ot*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 Q.process.logs.query({agentId:e.value,processId:n.value});t.length>it&&(t=t.slice(t.length-it)),r.value=t,Z(`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 lt={class:`service-terminal__toolbar`},ut={class:`service-terminal__toolbar-left`},dt={key:0,class:`pid-option`},ft={key:1,class:`pid-option`},pt={key:0,class:`ti ti-circle-filled pid-status-icon pid-status-icon--active`,style:{"margin-right":`0.5rem`}},mt={key:1,class:`ti ti-circle-filled pid-status-icon pid-status-icon--stopped`,style:{"margin-right":`0.5rem`}},ht={class:`pid-option`},gt={key:0,class:`ti ti-list`,style:{"margin-right":`0.5rem`}},_t=[`title`],vt=[`title`],yt={class:`service-terminal__toolbar-right`},bt={class:`service-terminal__content`,"data-testid":`service-terminal-content`},xt={key:1,class:`service-terminal__shortcuts`},St={class:`service-terminal__command-input`},Ct={class:`service-terminal__bottom`},wt=`runeya_command_history_`,Tt=50,Et=I(f({__name:`ServiceTerminal`,props:{service:{},processes:{}},setup(r){let{t:f}=V(),b=r,x=d(()=>b.processes.find(e=>e.state===`running`||e.state===`starting`)??b.processes[0]??null),S=d(()=>x.value?.agentId??``),C=d(()=>x.value?.id??``),w=O(),{logs:T,isStreaming:E,start:D,stop:j,receivedPerSec:M,flushedPerSec:N,startStats:P,stopStats:I}=ct(S,C),L=t(!1);i(L,e=>{e?P():I()});function R(e){e.ctrlKey&&e.shiftKey&&(e.key===`*`||e.key===`µ`)&&(e.preventDefault(),L.value=!L.value)}let te=d(()=>{let e=new Map;return T.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())}),z=d(()=>be.value===`all`?T.value:T.value.filter(e=>e.pid===be.value)),B=d(()=>te.value.filter(e=>e.isActive).length),ne=d(()=>{let e=[{label:f(`serviceTerminal.allProcesses`),value:`all`,badge:B.value>0?`${B.value} ${f(`serviceTerminal.active`)}`:void 0,isActive:void 0}];return te.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 Q.process.clearLogBuffer.mutate({agentId:x.value.agentId,processId:x.value.id}),T.value=[]}catch(e){w.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=ye(b.service,x.value),n=x.value?.id??b.service.id;if(!t){w.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}if(U.value.has(e.id)){try{await Q.process.cancelShortcut.mutate({agentId:t,processId:n,shortcutId:e.id})}catch{}return}U.value=new Set([...U.value,e.id]);try{await Q.process.executeShortcut.mutate({agentId:t,processId:n,shortcut:e})}catch(e){w.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),K=d(()=>G.value.size>0),q=t(null),J=t([]),Y=t(-1),ae=`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(`,`),X=t([]);function oe(e){let t=e.query.toLowerCase().trim();if(!t||!W.value.trim()){X.value=[];return}let n=[...J.value.slice().reverse(),...ae],r=new Set;X.value=n.filter(e=>!r.has(e)&&(r.add(e),e.toLowerCase().includes(t))).slice(0,10)}function Z(){try{let e=localStorage.getItem(wt+b.service.id);e&&(J.value=JSON.parse(e))}catch{J.value=[]}}function se(){try{localStorage.setItem(wt+b.service.id,JSON.stringify(J.value))}catch{}}function ce(e){J.value[J.value.length-1]!==e&&(J.value=[...J.value,e],J.value.length>Tt&&(J.value=J.value.slice(-50)),se())}async function le(){let e=ye(b.service,x.value),t=x.value?.id??b.service.id;if(e)try{await Q.process.cancelAdHocCommand.mutate({agentId:e,processId:t})}catch{}}async function ue(){if(!W.value.trim())return;let e=ye(b.service,x.value),t=x.value?.id??b.service.id;if(!e){w.add({severity:`warn`,summary:f(`serviceTerminal.noAgent`),detail:f(`serviceTerminal.noAgentDesc`),life:3e3});return}let n=Se(),r=W.value.trim();ce(r),W.value=``,X.value=[],Y.value=-1,G.value=new Set([...G.value,n]);try{await Q.process.executeAdHocCommand.mutate({agentId:e,processId:t,command:r,commandId:n})}catch(e){w.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 de(e){if(e.key===`Enter`&&!e.shiftKey){e.preventDefault(),ue();return}if(e.key===`ArrowUp`){if(e.preventDefault(),J.value.length===0)return;Y.value===-1?Y.value=J.value.length-1:Y.value>0&&Y.value--,W.value=J.value[Y.value]||``}else if(e.key===`ArrowDown`){if(e.preventDefault(),Y.value===-1)return;Y.value<J.value.length-1?(Y.value++,W.value=J.value[Y.value]||``):(Y.value=-1,W.value=``)}}function $(){if(T.value.length===0)return;let e=T.value.map(e=>`[${new Date(e.timestamp).toISOString()}] ${e.level.toUpperCase().padEnd(5)} ${e.message}`),t=new Blob([e.join(`
|
|
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 fe=t(0),pe=0,me=null,he=null;i(x,e=>{if(!e||e.state!==`running`&&e.state!==`starting`){me&&=(clearInterval(me),null),he=null,fe.value=e?.uptime??0;return}let t=e.uptime??0;e.id!==he&&(me&&=(clearInterval(me),null),he=e.id,pe=e.startedAt?new Date(e.startedAt).getTime():Date.now()-t,fe.value=Date.now()-pe,me=setInterval(()=>{fe.value=Date.now()-pe},1e3))},{immediate:!0});let ge=t(!0),_e=t(null),ve=t(!1),be=t(`all`),Ce=t(!1);function we(){Ce.value=!Ce.value}c(()=>{Z(),x.value&&D(),window.addEventListener(`keydown`,R)}),u(()=>{j(),window.removeEventListener(`keydown`,R),me&&clearInterval(me)});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){_e.value=e,ve.value=!0}function De(e){ve.value=!1,w.add({severity:`info`,summary:`Process`,detail:`Process ID: ${e}`,life:3e3})}return(t,i)=>(p(),o(`div`,{class:l([`service-terminal`,{"service-terminal--fullscreen":Ce.value}]),"data-testid":`service-terminal`},[Ce.value?(p(),v(xe,{key:0,service:r.service,processes:r.processes},null,8,[`service`,`processes`])):y(``,!0),a(`div`,lt,[a(`div`,ut,[n(e(F),{label:e(f)(`serviceTerminal.logs`),severity:ge.value?`primary`:`secondary`,variant:`text`,size:`small`,onClick:i[0]||=e=>ge.value=!0},null,8,[`label`,`severity`]),n(e(k),{modelValue:be.value,"onUpdate:modelValue":i[1]||=e=>be.value=e,options:ne.value,"option-label":`label`,"option-value":`value`,class:`service-terminal__pid-selector`,size:`small`},{value:h(t=>[t.value===`all`?(p(),o(`div`,dt,[i[5]||=a(`i`,{class:`ti ti-list`,style:{"margin-right":`0.5rem`}},null,-1),a(`span`,null,g(e(f)(`serviceTerminal.allProcesses`)),1),B.value>0?(p(),v(e(A),{key:0,value:`${B.value} ${e(f)(`serviceTerminal.active`)}`,severity:`secondary`,class:`pid-badge`},null,8,[`value`])):y(``,!0)])):(p(),o(`div`,ft,[ne.value.find(e=>e.value===t.value)?.isActive?(p(),o(`i`,pt)):(p(),o(`i`,mt)),a(`span`,null,`PID: `+g(t.value),1)]))]),option:h(t=>[a(`div`,ht,[t.option.value===`all`?(p(),o(`i`,gt)):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,_t)):(p(),o(`i`,{key:2,class:`ti ti-circle-filled pid-status-icon pid-status-icon--stopped`,title:e(f)(`serviceTerminal.stopped`)},null,8,vt)),a(`span`,null,g(t.option.label),1),t.option.badge?(p(),v(e(A),{key:3,value:t.option.badge,severity:`secondary`,class:`pid-badge`},null,8,[`value`])):y(``,!0)])]),_:1},8,[`modelValue`,`options`])]),a(`div`,yt,[n(e(F),{icon:Ce.value?`ti ti-minimize`:`ti ti-maximize`,variant:`text`,rounded:``,size:`small`,title:Ce.value?e(f)(`serviceTerminal.exitFullscreen`):e(f)(`serviceTerminal.fullscreen`),onClick:we},null,8,[`icon`,`title`]),n(e(F),{icon:`ti ti-download`,variant:`text`,rounded:``,size:`small`,title:e(f)(`serviceTerminal.downloadLogs`),disabled:e(T).length===0,onClick:$},null,8,[`title`,`disabled`]),n(e(F),{icon:`ti ti-trash`,variant:`text`,rounded:``,size:`small`,title:e(f)(`serviceTerminal.clearLogs`),disabled:e(T).length===0,onClick:re},null,8,[`title`,`disabled`])])]),a(`div`,bt,[n(Oe,{logs:z.value,loading:!1,"received-per-sec":e(M),"flushed-per-sec":e(N),"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`,xt,[(p(!0),o(m,null,s(H.value,t=>(p(),v(e(F),{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`,St,[i[6]||=a(`span`,{class:`service-terminal__prompt`,"data-testid":`terminal-prompt`},`>`,-1),n(e(ee),{ref_key:`adHocCommandInput`,ref:q,modelValue:W.value,"onUpdate:modelValue":i[2]||=e=>W.value=e,suggestions:X.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(ye)(b.service,x.value),"data-testid":`terminal-command-input`,onComplete:oe,onKeydown:de},null,8,[`modelValue`,`suggestions`,`placeholder`,`aria-label`,`disabled`]),n(e(F),{icon:K.value?`ti ti-player-stop`:`ti ti-player-play`,severity:K.value?`danger`:void 0,size:`small`,"data-testid":`terminal-run-btn`,disabled:!e(ye)(b.service,x.value)||!W.value.trim()&&!K.value,onClick:i[3]||=e=>K.value?le():ue()},null,8,[`icon`,`severity`,`disabled`])]),a(`div`,Ct,[x.value?(p(),v(e(A),{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(A),{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(A),{key:2,icon:`ti ti-clock`,value:Te(fe.value/1e3),severity:`secondary`,class:`service-terminal__pill`},null,8,[`value`])):y(``,!0)]),n(rt,{visible:ve.value,"onUpdate:visible":i[4]||=e=>ve.value=e,log:_e.value,onViewProcess:De},null,8,[`visible`,`log`])],2))}}),[[`__scopeId`,`data-v-e44dc775`]]),Dt=5,Ot=he;function kt(e){return e+Math.random()*e*.3}function At(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 Q.process.metrics.query({agentId:e.value,processId:n.value});r.value=t}catch(e){console.error(`Failed to fetch initial metrics:`,ue(e))}finally{o.value=!1}f()}}function f(){a.value=!0,s=Q.process.onMetrics.subscribe({agentId:e.value,processId:n.value},{onData(e){c=0,Z(`connected`),r.value=e},onError(e){console.error(`Metrics stream error:`,e),a.value=!1,s=null,p()}})}function p(){if(c>=Dt){console.warn(`Metrics stream: max retries (${Dt}) reached, giving up`),Z(`disconnected`);return}Z(`reconnecting`);let e=kt(Ot*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 jt={class:`service-metrics`,"data-testid":`service-metrics`},Mt={key:1,class:`service-metrics__skeleton`},Nt={class:`metric-skeleton`},Pt={class:`metric-skeleton`},Ft={key:2,class:`service-metrics__no-data`},It={key:1,class:`service-metrics__no-process`},Lt=I(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}=V(),{metrics:h,isLoading:_,start:y,stop:b}=At(s,l);return c(()=>{i.value&&y()}),u(()=>{b()}),(t,r)=>(p(),o(`div`,jt,[i.value?(p(),o(m,{key:0},[e(h)?(p(),v(De,{key:0,cpu:e(h).cpu,memory:e(h).memory},null,8,[`cpu`,`memory`])):e(_)?(p(),o(`div`,Mt,[a(`div`,Nt,[n(e(S),{width:`4rem`,height:`0.75rem`,class:`mb-2`}),n(e(S),{width:`3rem`,height:`1.75rem`,class:`mb-3`}),n(e(S),{width:`100%`,height:`6px`,"border-radius":`4px`})]),a(`div`,Pt,[n(e(S),{width:`4rem`,height:`0.75rem`,class:`mb-2`}),n(e(S),{width:`3rem`,height:`1.75rem`,class:`mb-3`}),n(e(S),{width:`6rem`,height:`0.65rem`})])])):(p(),o(`div`,Ft,g(e(f)(`serviceMetrics.noData`)),1))],64)):(p(),o(`div`,It,[r[0]||=a(`i`,{class:`ti ti-info-circle`},null,-1),a(`span`,null,g(e(f)(`serviceMetrics.notRunning`)),1)]))]))}}),[[`__scopeId`,`data-v-4ff9fccd`]]),Rt=`runeya:debug`;function zt(){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 Bt=zt();if(Bt!==null)try{localStorage.setItem(Rt,String(Bt))}catch{}function Vt(){try{return localStorage.getItem(Rt)===`true`}catch{return!1}}var Ht=t(Vt());function Ut(){function e(){Ht.value=!Ht.value;try{localStorage.setItem(Rt,String(Ht.value))}catch{}}return{isDebug:Ht,toggle:e}}var Wt={class:`config-general`},Gt={class:`config-card`},Kt={class:`config-card__header`},qt={class:`config-card`},Jt={class:`config-card__header`},Yt={class:`config-card__hint`},Xt={class:`config-card`},Zt={class:`config-card`},Qt={class:`config-card__header`},$t={class:`config-card__hint`},en={class:`config-card`},tn={class:`config-card__header`},nn={class:`config-card__hint`},rn={class:`config-card`},an={class:`config-card__header`},on={class:`config-card__hint`},sn={class:`config-card`},cn={class:`config-card__header`},ln={class:`config-card__hint`},un={class:`config-card`},dn={class:`config-card__header`},fn={class:`config-card__hint`},pn={class:`config-card`},mn={class:`config-card__header`},hn={class:`config-card__hint`},gn={class:`config-card__hint`},_n={class:`config-card`},vn={class:`config-card__header`},yn={class:`config-card__hint`},bn={class:`config-meta`},xn={class:`config-card config-card--inline`},Sn={class:`config-card__header`},Cn={class:`config-card config-card--inline`},wn={class:`config-card__header`},Tn=150,En=I(f({__name:`ServiceConfigGeneral`,props:{service:{}},emits:[`save`],setup(c,{emit:l}){let{t:u}=V(),f=_e(),h=ce(),_=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 S(e){let t=e.target;y(`groups`,t.value),t.value=``,_.value=[]}function C(e,t){let n=e.target;n&&typeof n.value==`string`&&n.value.trim()&&setTimeout(()=>{y(t,n.value),n.value=``},Tn)}let w=c,T=l,D=d(()=>h.projects.find(e=>e.serviceIds.includes(w.service.id)&&(e.orgId??null)===(w.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:w.service.name,cwd:w.service.cwd??``,ports:(w.service.ports??[]).map(String),groups:[...w.service.groups??[]],description:w.service.description??``,docsPath:w.service.docsPath??``,url:w.service.url??``,openapiUrl:w.service.openapiUrl??``,gitRemote:w.service.git?.remote??``,gitHome:w.service.git?.home??``,autoRestart:w.service.autoRestart,clearLogsOnStart:w.service.clearLogsOnStart??!1}),j=t(k(w.service.meta));i(()=>w.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},j.value=k(e.meta)});function M(){j.value=[...j.value,{key:``,value:``}]}function N(e){j.value=j.value.filter((t,n)=>n!==e)}function P(e,t,n){j.value=j.value.map((r,i)=>i===e?{...r,[t]:n}:r)}function I(){let e={};for(let{key:t,value:n}of j.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(()=>{T(`save`,I()),L=null},150)}return(t,i)=>(p(),o(`div`,Wt,[a(`div`,Gt,[a(`div`,Kt,[i[14]||=a(`i`,{class:`ti ti-tag`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.name`)),1)]),n(e(E),{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`,qt,[a(`div`,Jt,[i[15]||=a(`i`,{class:`ti ti-folder`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.workingDirectory`)),1)]),n(e(E),{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`,Yt,g(e(u)(`serviceConfigGeneral.cwdHint`)),1)]),a(`div`,Xt,[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(E),{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`,Zt,[a(`div`,Qt,[i[18]||=a(`i`,{class:`ti ti-world`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.ports`)),1)]),n(e(ee),{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=>C(e,`ports`)},null,8,[`modelValue`,`placeholder`]),a(`small`,$t,g(e(u)(`serviceConfigGeneral.portsHint`)),1)]),a(`div`,en,[a(`div`,tn,[i[19]||=a(`i`,{class:`ti ti-layout-grid`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.groups`)),1)]),n(e(ee),{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(S,[`enter`]),onBlur:i[6]||=e=>C(e,`groups`)},null,8,[`modelValue`,`suggestions`,`placeholder`]),a(`small`,nn,g(e(u)(`serviceConfigGeneral.groupsHint`)),1)]),a(`div`,rn,[a(`div`,an,[i[20]||=a(`i`,{class:`ti ti-info-circle`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.description`)),1)]),n(e(ie),{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`,on,g(e(u)(`serviceConfigGeneral.descriptionHint`)),1)]),a(`div`,sn,[a(`div`,cn,[i[21]||=a(`i`,{class:`ti ti-external-link`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.url`)),1)]),n(e(E),{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`,ln,g(e(u)(`serviceConfigGeneral.urlHint`)),1)]),a(`div`,un,[a(`div`,dn,[i[22]||=a(`i`,{class:`ti ti-book`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.openapiUrl`)),1)]),n(e(E),{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`,fn,g(e(u)(`serviceConfigGeneral.openapiUrlHint`)),1)]),a(`div`,pn,[a(`div`,mn,[i[23]||=a(`i`,{class:`ti ti-brand-github`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.git`)),1)]),n(e(E),{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`,hn,g(e(u)(`serviceConfigGeneral.gitRemoteHint`)),1),n(e(E),{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`,gn,g(e(u)(`serviceConfigGeneral.gitHomeHint`)),1)]),a(`div`,_n,[a(`div`,vn,[i[24]||=a(`i`,{class:`ti ti-hash`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.meta`)),1)]),a(`small`,yn,g(e(u)(`serviceConfigGeneral.metaHint`)),1),a(`div`,bn,[(p(!0),o(m,null,s(j.value,(t,r)=>(p(),o(`div`,{key:r,class:`config-meta__row`},[n(e(E),{"model-value":t.key,placeholder:e(u)(`serviceConfigGeneral.metaKeyPlaceholder`),class:`config-meta__input`,"onUpdate:modelValue":e=>P(r,`key`,e),onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(E),{"model-value":t.value,placeholder:e(u)(`serviceConfigGeneral.metaValuePlaceholder`),class:`config-meta__input config-meta__input--wide`,"onUpdate:modelValue":e=>P(r,`value`,e),onBlur:R,onKeydown:b(x(R,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{N(r),R()}},null,8,[`onClick`])]))),128)),n(e(F),{label:e(u)(`serviceConfigGeneral.addEntry`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,class:`config-meta__add`,onClick:M},null,8,[`label`])])]),a(`div`,xn,[a(`div`,Sn,[i[25]||=a(`i`,{class:`ti ti-refresh`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.autoRestart`)),1)]),n(e(z),{modelValue:A.value.autoRestart,"onUpdate:modelValue":i[12]||=e=>A.value.autoRestart=e,onChange:R},null,8,[`modelValue`])]),a(`div`,Cn,[a(`div`,wn,[i[26]||=a(`i`,{class:`ti ti-trash`},null,-1),a(`span`,null,g(e(u)(`serviceConfigGeneral.clearLogs`)),1)]),n(e(z),{modelValue:A.value.clearLogsOnStart,"onUpdate:modelValue":i[13]||=e=>A.value.clearLogsOnStart=e,onChange:R},null,8,[`modelValue`])])]))}}),[[`__scopeId`,`data-v-2ad058bc`]]),Dn={class:`docker-config`},On={class:`docker-config__section`},kn={for:`docker-mode-image`,class:`docker-config__section-title`},An={class:`docker-config__mode-option`},jn={class:`docker-config__mode-option`},Mn={key:0,class:`docker-config__section`},Nn={for:`docker-image`,class:`docker-config__label`},Pn={class:`docker-config__section`},Fn={class:`docker-config__section`},In={for:`docker-build-context`,class:`docker-config__label`},Ln={class:`docker-config__section`},Rn={for:`docker-add-build-arg`,class:`docker-config__label`},zn={class:`docker-config__kv-list`},Bn={class:`docker-config__section`},Vn={for:`docker-target-stage`,class:`docker-config__label`},Hn={class:`docker-config__section`},Un={for:`docker-user`,class:`docker-config__section-title`},Wn={class:`docker-config__section`},Gn={for:`docker-user`,class:`docker-config__label`},Kn={class:`docker-config__section`},qn={for:`docker-network-mode`,class:`docker-config__label`},Jn={key:2,class:`docker-config__section`},Yn={for:`docker-add-port`,class:`docker-config__label`},Xn={class:`docker-config__list`},Zn={class:`docker-config__section`},Qn={for:`docker-add-volume`,class:`docker-config__label`},$n={class:`docker-config__checkbox-row`},er={for:`mountRootpath`,class:`docker-config__checkbox-label`},tr={class:`docker-config__list`},nr={class:`docker-config__section`},rr={class:`docker-config__checkbox-row`},ir={for:`useNativeCommand`,class:`docker-config__checkbox-label`},ar={key:0,class:`docker-config__shell-row`},or={for:`docker-native-shell`,class:`docker-config__label`},sr={class:`docker-config__hint`},cr={class:`docker-config__mode-option`},lr={class:`docker-config__mode-option`},ur={class:`docker-config__section`},dr={for:`docker-entrypoint`,class:`docker-config__label`},fr={class:`docker-config__section`},pr={for:`docker-command`,class:`docker-config__label`},mr={class:`docker-config__section`},hr={for:`docker-add-bootstrap`,class:`docker-config__section-title`},gr={class:`docker-config__hint-inline`},_r={class:`docker-config__bootstrap-row`},vr={class:`docker-config__bootstrap-field`},yr=[`for`],br={class:`docker-config__bootstrap-field`},xr=[`for`],Sr={class:`docker-config__bootstrap-field docker-config__bootstrap-field--wide`},Cr=[`for`],wr={class:`docker-config__bootstrap-field`},Tr=[`for`],Er={class:`docker-config__bootstrap-actions`},Dr={class:`docker-config__section`},Or=I(f({__name:`ServiceConfigDocker`,props:{service:{}},emits:[`save`],setup(i,{emit:c}){let{t:l}=V(),u=i,d=c,f=u.service.dockerConfig??{},_=t(f.dockerfile?`build`:`image`),S=t(f.image??``),T=t(f.dockerfile??``),O=t(f.buildContext??``),A=t(Object.entries(f.buildArgs??{}).map(([e,t])=>({key:e,value:t}))),j=t(f.targetStage??``),N=t(f.networkMode??`host`),P=t([...f.ports??[]]),I=t([...f.volumes??[]]),L=t(f.mountRootpath??!1),R=t(f.entrypoint??``),ee=t(f.command??``),te=t(f.user??``),z=t(f.useNativeCommand??!1),B=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(){A.value=[...A.value,{key:``,value:``}]}function G(e){A.value=A.value.filter((t,n)=>n!==e)}function K(e,t,n){A.value=A.value.map((r,i)=>i===e?{...r,[t]:n}:r)}function q(){P.value=[...P.value,``]}function Y(e){P.value=P.value.filter((t,n)=>n!==e)}function ae(e,t){P.value=P.value.map((n,r)=>r===e?t:n)}function X(){I.value=[...I.value,``]}function oe(e){I.value=I.value.filter((t,n)=>n!==e)}function Z(e,t){I.value=I.value.map((n,r)=>r===e?t:n)}function se(){H.value=[...H.value,{id:Se(),label:`Bootstrap`,entrypoint:`/bin/sh`,command:`-c ""`,user:void 0}]}function Q(e){H.value=H.value.filter((t,n)=>n!==e)}function ce(e,t,n){H.value=H.value.map((r,i)=>i===e?{...r,[t]:n===``?void 0:n}:r)}function le(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 ue=null;function $(){ue&&clearTimeout(ue),ue=setTimeout(()=>{let e={};for(let{key:t,value:n}of A.value)t.trim()&&(e[t.trim()]=n);d(`save`,{image:_.value===`image`&&S.value||void 0,dockerfile:_.value===`build`&&T.value||void 0,buildContext:O.value||void 0,buildArgs:e,targetStage:j.value||void 0,networkMode:N.value,ports:P.value.filter(Boolean),volumes:I.value.filter(Boolean),mountRootpath:L.value,entrypoint:R.value||void 0,command:ee.value||void 0,user:te.value||void 0,useNativeCommand:z.value,nativeCommandMode:B.value,nativeShell:ne.value,bootstrapCommands:H.value}),ue=null},150)}function fe(e){Q(e),$()}function pe(e,t){le(e,t),$()}function me(e){G(e),$()}function he(e){Y(e),$()}function ge(e){oe(e),$()}return(t,i)=>(p(),o(`div`,Dn,[a(`div`,On,[a(`label`,kn,g(e(l)(`serviceConfigDocker.imageSource`)),1),n(e(C),{modelValue:_.value,"onUpdate:modelValue":i[0]||=e=>_.value=e,class:`docker-config__mode-toggle`,orientation:`horizontal`,onChange:$},{default:h(()=>[a(`label`,An,[n(e(w),{"input-id":`docker-mode-image`,value:`image`}),r(` `+g(e(l)(`serviceConfigDocker.pullImage`)),1)]),a(`label`,jn,[n(e(w),{value:`build`}),r(` `+g(e(l)(`serviceConfigDocker.buildDockerfile`)),1)])]),_:1},8,[`modelValue`])]),_.value===`image`?(p(),o(`div`,Mn,[a(`label`,Nn,g(e(l)(`serviceConfigDocker.image`)),1),n(e(E),{id:`docker-image`,modelValue:S.value,"onUpdate:modelValue":i[1]||=e=>S.value=e,placeholder:e(l)(`serviceConfigDocker.imagePlaceholder`),class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])):y(``,!0),_.value===`build`?(p(),o(m,{key:1},[a(`div`,Pn,[i[16]||=a(`label`,{for:`docker-dockerfile-btn`,class:`docker-config__label`},`Dockerfile`,-1),n(e(F),{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(M),{visible:U.value,"onUpdate:visible":i[5]||=e=>U.value=e,header:e(l)(`serviceConfigDocker.editDockerfile`),modal:``,style:{width:`800px`}},{footer:h(()=>[n(e(F),{label:e(l)(`serviceConfigDocker.closeDockerfile`),icon:`ti ti-x`,onClick:i[4]||=()=>{U.value=!1,$()}},null,8,[`label`])]),default:h(()=>[n(de,{modelValue:T.value,"onUpdate:modelValue":i[3]||=e=>T.value=e,language:`dockerfile`,style:{height:`400px`}},null,8,[`modelValue`])]),_:1},8,[`visible`,`header`])]),a(`div`,Fn,[a(`label`,In,g(e(l)(`serviceConfigDocker.buildContext`)),1),n(e(E),{id:`docker-build-context`,modelValue:O.value,"onUpdate:modelValue":i[6]||=e=>O.value=e,placeholder:`.`,class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,Ln,[a(`label`,Rn,g(e(l)(`serviceConfigDocker.buildArgs`)),1),a(`div`,zn,[(p(!0),o(m,null,s(A.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__kv-row`},[n(e(E),{"model-value":t.key,placeholder:e(l)(`serviceConfigDocker.argNamePlaceholder`),class:`docker-config__kv-input`,"onUpdate:modelValue":e=>K(r,`key`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(E),{"model-value":t.value,placeholder:e(l)(`serviceConfigDocker.argValuePlaceholder`),class:`docker-config__kv-input`,"onUpdate:modelValue":e=>K(r,`value`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>me(r)},null,8,[`onClick`])]))),128)),n(e(F),{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`,Bn,[a(`label`,Vn,g(e(l)(`serviceConfigDocker.targetStage`)),1),n(e(E),{id:`docker-target-stage`,modelValue:j.value,"onUpdate:modelValue":i[7]||=e=>j.value=e,placeholder:e(l)(`serviceConfigDocker.targetStagePlaceholder`),class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])],64)):y(``,!0),n(e(J)),a(`div`,Hn,[a(`label`,Un,g(e(l)(`serviceConfigDocker.runtimeConfig`)),1)]),a(`div`,Wn,[a(`label`,Gn,g(e(l)(`serviceConfigDocker.userGroup`)),1),n(e(E),{id:`docker-user`,modelValue:te.value,"onUpdate:modelValue":i[8]||=e=>te.value=e,placeholder:e(l)(`serviceConfigDocker.userGroupHint`),class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),a(`div`,Kn,[a(`label`,qn,g(e(l)(`serviceConfigDocker.networkMode`)),1),n(e(k),{"input-id":`docker-network-mode`,modelValue:N.value,"onUpdate:modelValue":i[9]||=e=>N.value=e,options:ie,"option-label":`label`,"option-value":`value`,class:`docker-config__select`,onChange:$},null,8,[`modelValue`])]),N.value===`bridge`?(p(),o(`div`,Jn,[a(`label`,Yn,g(e(l)(`serviceConfigDocker.portMappings`)),1),a(`div`,Xn,[(p(!0),o(m,null,s(P.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__list-row`},[n(e(E),{"model-value":t,placeholder:e(l)(`serviceConfigDocker.portPlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>ae(r,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>he(r)},null,8,[`onClick`])]))),128)),n(e(F),{id:`docker-add-port`,label:e(l)(`serviceConfigDocker.addPort`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:q},null,8,[`label`])])])):y(``,!0),a(`div`,Zn,[a(`label`,Qn,g(e(l)(`serviceConfigDocker.volumes`)),1),a(`div`,$n,[n(e(D),{modelValue:L.value,"onUpdate:modelValue":i[10]||=e=>L.value=e,binary:!0,"input-id":`mountRootpath`,onChange:$},null,8,[`modelValue`]),a(`label`,er,g(e(l)(`serviceConfigDocker.autoMount`)),1)]),a(`div`,tr,[(p(!0),o(m,null,s(I.value,(t,r)=>(p(),o(`div`,{key:r,class:`docker-config__list-row`},[n(e(E),{"model-value":t,placeholder:e(l)(`serviceConfigDocker.volumePlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>Z(r,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`]),n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>ge(r)},null,8,[`onClick`])]))),128)),n(e(F),{id:`docker-add-volume`,label:e(l)(`serviceConfigDocker.addVolume`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:X},null,8,[`label`])])]),n(e(J)),a(`div`,nr,[a(`div`,rr,[n(e(D),{modelValue:z.value,"onUpdate:modelValue":i[11]||=e=>z.value=e,binary:!0,"input-id":`useNativeCommand`,onChange:$},null,8,[`modelValue`]),a(`label`,ir,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),z.value?(p(),o(`div`,ar,[a(`label`,or,g(e(l)(`serviceConfigDocker.shell`)),1),n(e(k),{"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:$},null,8,[`modelValue`,`placeholder`]),a(`span`,sr,[r(g(e(l)(`serviceConfigDocker.shellHint`))+` (`,1),i[17]||=a(`code`,null,`shell -c '...'`,-1),i[18]||=r(`)`,-1)])])):y(``,!0),z.value?(p(),v(e(C),{key:1,modelValue:B.value,"onUpdate:modelValue":i[13]||=e=>B.value=e,class:`docker-config__mode-toggle docker-config__mode-toggle--indented`,onChange:$},{default:h(()=>[a(`label`,cr,[n(e(w),{value:`isolated`}),r(` `+g(e(l)(`serviceConfigDocker.isolated`)),1)]),a(`label`,lr,[n(e(w),{value:`shared`}),r(` `+g(e(l)(`serviceConfigDocker.shared`)),1)])]),_:1},8,[`modelValue`])):y(``,!0)]),z.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`,ur,[a(`label`,dr,g(e(l)(`serviceConfigDocker.entrypoint`)),1),n(e(E),{id:`docker-entrypoint`,modelValue:R.value,"onUpdate:modelValue":i[14]||=e=>R.value=e,placeholder:e(l)(`serviceConfigDocker.entrypointPlaceholder`),class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])]),a(`div`,fr,[a(`label`,pr,g(e(l)(`serviceConfigDocker.cmdOverride`)),1),n(e(E),{id:`docker-command`,modelValue:ee.value,"onUpdate:modelValue":i[15]||=e=>ee.value=e,placeholder:e(l)(`serviceConfigDocker.cmdPlaceholder`),class:`docker-config__input`,onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`placeholder`,`onKeydown`])])],64)),n(e(J)),a(`div`,mr,[a(`label`,hr,[r(g(e(l)(`serviceConfigDocker.bootstrapCommands`))+` `,1),a(`span`,gr,` — `+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`,_r,[a(`div`,vr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-label-${r}`},`Label`,8,yr),n(e(E),{id:`docker-bootstrap-label-${r}`,"model-value":t.label,placeholder:e(l)(`serviceConfigDocker.bootstrapLabelPlaceholder`),class:`docker-config__input`,"onUpdate:modelValue":e=>ce(r,`label`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,br,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-entrypoint-${r}`},`Entrypoint`,8,xr),n(e(E),{id:`docker-bootstrap-entrypoint-${r}`,"model-value":t.entrypoint??``,placeholder:`/bin/sh`,class:`docker-config__input`,"onUpdate:modelValue":e=>ce(r,`entrypoint`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Sr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-command-${r}`},`Command`,8,Cr),n(e(E),{id:`docker-bootstrap-command-${r}`,"model-value":t.command,placeholder:`-c "npm install"`,class:`docker-config__input`,"onUpdate:modelValue":e=>ce(r,`command`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,wr,[a(`label`,{class:`docker-config__label`,for:`docker-bootstrap-user-${r}`},`User:Group`,8,Tr),n(e(E),{id:`docker-bootstrap-user-${r}`,"model-value":t.user??``,placeholder:e(l)(`serviceConfigDocker.userGroupHint`),class:`docker-config__input`,"onUpdate:modelValue":e=>ce(r,`user`,e),onBlur:$,onKeydown:b(x($,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Er,[n(e(F),{icon:`ti ti-arrow-up`,variant:`text`,rounded:``,size:`small`,disabled:r===0,onClick:e=>pe(r,-1)},null,8,[`disabled`,`onClick`]),n(e(F),{icon:`ti ti-arrow-down`,variant:`text`,rounded:``,size:`small`,disabled:r===H.value.length-1,onClick:e=>pe(r,1)},null,8,[`disabled`,`onClick`]),n(e(F),{icon:`ti ti-x`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>fe(r)},null,8,[`onClick`])])])]))),128)),a(`div`,Dr,[n(e(F),{id:`docker-add-bootstrap`,label:e(l)(`serviceConfigDocker.addBootstrapCommand`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:se},null,8,[`label`])])]))}}),[[`__scopeId`,`data-v-1a62039a`]]),kr={class:`config-commands`},Ar={class:`config-commands__execution`},jr={class:`config-card config-card--execution`},Mr={class:`config-card__header`},Nr={class:`config-card__hint`},Pr={class:`config-card config-card--execution`},Fr={class:`config-card__header`},Ir={key:0,class:`runner-option`},Lr={class:`runner-option`},Rr={class:`config-commands__tab-content`},zr={key:0,class:`config-commands__empty`},Br={class:`config-commands__row`},Vr={class:`config-commands__field`},Hr=[`for`],Ur={class:`config-commands__field config-commands__field--wide`},Wr=[`for`],Gr={class:`config-commands__field`},Kr=[`for`],qr={class:`config-commands__actions-cell`},Jr={class:`config-commands__footer`},Yr={class:`config-commands__tab-content`},Xr=`__inherit__`,Zr=I(f({__name:`ServiceConfigCommands`,props:{service:{}},emits:[`save`,`dockerSave`],setup(r,{emit:c}){let u=r,f=c,{t:_}=V(),v=ve(),S=null,C=t({agentId:u.service.agentId??Xr,runner:u.service.runner});i(()=>u.service,e=>{C.value={agentId:e.agentId??Xr,runner:e.runner}});let w=d(()=>[{label:_(`serviceConfigCommands.native`),value:`native`,icon:`ti ti-device-desktop`},{label:_(`serviceConfigCommands.docker`),value:`docker`,icon:`ti ti-box`}]),T=d(()=>w.value.find(e=>e.value===C.value.runner)?.icon??`ti ti-box`),D=d(()=>[{label:_(`serviceForm.agentInherit`),value:Xr},...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=>{S||(O.value=[...e.commands??[]])});function A(){O.value=[...O.value,{id:Se(),label:``,command:``,cwd:void 0,shell:!0}]}function j(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 I(){S&&clearTimeout(S),S=setTimeout(()=>{f(`save`,{agentId:C.value.agentId===Xr?null:C.value.agentId||null,runner:C.value.runner,commands:O.value}),S=null},150)}function L(e){f(`dockerSave`,e)}function R(e){j(e),I()}return(t,i)=>(p(),o(`div`,kr,[a(`div`,Ar,[a(`div`,jr,[a(`div`,Mr,[i[2]||=a(`i`,{class:`ti ti-server`},null,-1),a(`span`,null,g(e(_)(`serviceConfigCommands.agent`)),1)]),n(e(k),{modelValue:C.value.agentId,"onUpdate:modelValue":i[0]||=e=>C.value.agentId=e,options:D.value,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:I},null,8,[`modelValue`,`options`]),a(`small`,Nr,g(e(_)(`serviceForm.agentHintEdit`)),1)]),a(`div`,Pr,[a(`div`,Fr,[a(`i`,{class:l(T.value)},null,2),a(`span`,null,g(e(_)(`serviceConfigCommands.runner`)),1)]),n(e(k),{modelValue:C.value.runner,"onUpdate:modelValue":i[1]||=e=>C.value.runner=e,options:w.value,"option-label":`label`,"option-value":`value`,class:`config-card__input`,onChange:I},{value:h(e=>[e.value?(p(),o(`div`,Ir,[a(`i`,{class:l(w.value.find(t=>t.value===e.value)?.icon)},null,2),a(`span`,null,g(w.value.find(t=>t.value===e.value)?.label),1)])):y(``,!0)]),option:h(e=>[a(`div`,Lr,[a(`i`,{class:l(e.option.icon)},null,2),a(`span`,null,g(e.option.label),1)])]),_:1},8,[`modelValue`,`options`])])]),n(e(K),{value:`0`},{default:h(()=>[n(e(P),null,{default:h(()=>[n(e(q),{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(q),{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(G),null,{default:h(()=>[n(e(N),{value:`0`},{default:h(()=>[a(`div`,Rr,[O.value.length===0?(p(),o(`div`,zr,[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`,Br,[a(`div`,Vr,[a(`label`,{class:`config-commands__label`,for:`cmd-label-${r}`},g(e(_)(`serviceConfigCommands.labelPlaceholder`)),9,Hr),n(e(E),{id:`cmd-label-${r}`,"model-value":t.label,placeholder:e(_)(`serviceConfigCommands.labelPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>M(r,`label`,e),onBlur:I,onKeydown:b(x(I,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Ur,[a(`label`,{class:`config-commands__label`,for:`cmd-command-${r}`},g(e(_)(`serviceConfigCommands.commandPlaceholder`)),9,Wr),n(e(E),{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:I,onKeydown:b(x(I,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,Gr,[a(`label`,{class:`config-commands__label`,for:`cmd-cwd-${r}`},`Working Dir (optional)`,8,Kr),n(e(E),{id:`cmd-cwd-${r}`,"model-value":t.cwd??``,placeholder:e(_)(`serviceConfigCommands.cwdPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>M(r,`cwd`,e),onBlur:I,onKeydown:b(x(I,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,qr,[n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>R(r)},null,8,[`onClick`])])])]))),128)),a(`div`,Jr,[n(e(F),{label:e(_)(`serviceConfigCommands.addCommand`),icon:`ti ti-plus`,severity:`secondary`,variant:`outlined`,size:`small`,onClick:A},null,8,[`label`])])])]),_:1}),n(e(N),{value:`1`},{default:h(()=>[a(`div`,Yr,[n(Or,{service:r.service,onSave:L},null,8,[`service`])])]),_:1})]),_:1})]),_:1})]))}}),[[`__scopeId`,`data-v-4820790b`]]),Qr={class:`config-env`,"data-testid":`config-env`},$r={key:0,class:`active-env-display`},ei={class:`active-env-label`},ti={key:1,class:`inheritance-toggle`},ni={class:`inheritance-label`},ri={class:`inherited-header`},ii={class:`inherited-row-key`},ai={class:`preview-key`},oi={class:`value-row`},si=[`onClick`],ci=[`onClick`],li={key:0,class:`secret-mask`},ui={key:1,class:`preview-value`},di={class:`config-env__header`},fi={class:`config-env__title`},pi={class:`config-env__actions`},mi={key:3,class:`variables-view`},hi={key:0},gi={key:1,class:`empty-state`},_i={class:`inherited-header`},vi={class:`passthrough-info`},yi={class:`preview-key`},bi={key:0,class:`preview-value`},xi={key:1,class:`passthrough-undefined`},Si={key:4,class:`empty-state`},Ci={key:5,class:`empty-state`},wi={class:`editor-container`},Ti={key:0,class:`editor-env-banner`},Ei={class:`editor-env-text`},Di={class:`editor-section`,"data-testid":`variables-editor`},Oi={key:0,class:`loading-container`},ki={key:1,class:`preview-container`},Ai={class:`preview-info`},ji={class:`preview-key`},Mi={class:`value-row`},Ni=[`onClick`],Pi=[`onClick`],Fi={key:0,class:`secret-mask`},Ii={key:1,class:`preview-value`},Li=I(f({__name:`ServiceConfigEnv`,props:{service:{},projectId:{},activeEnvironmentId:{}},setup(s){let u=s,{t:f}=V(),m=O(),_=te(),b=le(),S=ce(),C=Y(),w=be(),E=d(()=>S.getByRef({id:u.projectId,orgId:C.activeOrgId})?.activeEnvironmentId??null),D=d(()=>b.findServiceEnvironment(u.service.id,E.value??``)),k=t(!1),j=t(!1),N=t(!1),P=t(!1),I=t(null),ee=t(null),{suggestions:B,meta:H,search:ie}=Ee(()=>ee.value??I.value),G=t(new Set);function K(e){let t=new Set(G.value);t.has(e)?t.delete(e):t.add(e),G.value=t}let q=t(null);function J(e,t){navigator.clipboard.writeText(t),q.value=e,setTimeout(()=>{q.value===e&&(q.value=null)},1500)}let ae=t({}),X=t(!1),{values:oe,agentEntry:Z,urlHost:se}=we({projectId:()=>u.projectId,environmentId:()=>E.value,agentId:()=>ye(u.service)??void 0}),ue=d(()=>{let e={...oe.value};Object.assign(e,ge(u.service.ports)),e[`service.NAME`]=u.service.name,e[`service.ID`]=u.service.id,Object.assign(e,me(u.service,se.value)),u.service.url&&(e[`service.BASE_URL`]=u.service.url);let t=de(Z.value?.status?.cwd,Z.value?.status?.home);return t&&(e[`service.CWD`]=t),e});function de(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 $=d(()=>Z.value?.config.passthroughEnv??[]),fe=d(()=>$.value.length>0);async function pe(){let e=ye(u.service);if(!e||!fe.value){ae.value={};return}X.value=!0;try{ae.value=await Q.agent.getPassthroughEnv.query({id:e})}catch{ae.value={}}finally{X.value=!1}}let he=d(()=>$.value.map(e=>({name:e,value:ae.value[e]??null}))),_e=d(()=>!D.value||!E.value?!0:D.value.parentIds?.includes(E.value)??!0);async function ve(e){if(D.value&&E.value){P.value=!0;try{await b.update({id:D.value.id,parentIds:e?[E.value]:[]}),await je()}catch(e){m.add({severity:`error`,summary:f(`serviceConfigEnv.error`),detail:e.message??f(`serviceConfigEnv.failedToUpdateInheritance`),life:5e3})}finally{P.value=!1}}}let xe=d(()=>{let e=S.getByRef({id:u.projectId,orgId:C.activeOrgId});return e?.activeEnvironmentId?b.getById(e.activeEnvironmentId):null});function Se(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 De=d(()=>I.value?Se(I.value.variables):[]),Oe=d(()=>{if(!D.value||!I.value?.sources)return De.value;let e=D.value.id;return De.value.filter(t=>I.value.sources[t.variableId]?.environmentId===e)}),ke=d(()=>{if(!D.value||!I.value?.sources)return[];let e=D.value.id;return De.value.filter(t=>I.value.sources[t.variableId]?.environmentId!==e)}),Ae=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 je(){if(D.value)try{I.value=await b.resolve(D.value.id)}catch(e){console.error(`Failed to resolve environment:`,e)}}async function Me(){if(E.value)try{ee.value=await b.resolve(E.value)}catch{}}async function Ne(){N.value=!0;try{await Ie(),await je(),j.value=!0}catch(e){m.add({severity:`error`,summary:f(`serviceConfigEnv.error`),detail:e.message??f(`serviceConfigEnv.failedToLoadPreview`),life:5e3})}finally{N.value=!1}}let Pe=d(()=>I.value?Object.entries(I.value.env).map(([e,t])=>({key:e,value:Object.entries(ue.value).reduce((e,[t,n])=>e.replaceAll(`{{${t}}}`,n),t)})):[]);function Fe(e,t){return t?`***`:e.length>50?e.substring(0,47)+`...`:e}async function Ie(){if(D.value)return D.value;if(!E.value)return null;let e=xe.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:E.value,parentIds:[E.value],variables:{}}),D.value):null}let Le=d(()=>{let e=w.getByService(u.service.id);return e.length>0?e[0]:null}),Re=d(()=>{let e=Le.value?.state;return e===`running`||e===`errored`});async function ze(){await Ie(),k.value=!0,await Promise.all([je(),Me()])}function Be(){if(k.value=!1,!Re.value||!Le.value)return;let e=Le.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=ye(u.service);if(!t)return;e===`restart`?(await w.restart(t,u.service.id),m.add({severity:`success`,summary:f(`serviceConfigEnv.serviceRestarted`),life:3e3})):(await w.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??f(`serviceConfigEnv.failedToAction`,{action:e}),life:5e3})}}})}return i(xe,async e=>{e&&await Promise.all([je(),Me()])}),i(()=>ye(u.service),()=>{pe()}),c(async()=>{u.projectId&&await b.fetchAll(u.projectId),await Promise.all([je(),Me(),pe()])}),(t,i)=>(p(),o(`div`,Qr,[E.value?(p(),o(`div`,$r,[a(`span`,ei,g(e(f)(`serviceConfigEnv.activeEnvironment`)),1),n(Ce,{"environment-id":E.value},null,8,[`environment-id`])])):y(``,!0),D.value&&xe.value?(p(),o(`div`,ti,[n(e(z),{"model-value":_e.value,disabled:P.value,"onUpdate:modelValue":ve},null,8,[`model-value`,`disabled`]),a(`span`,ni,g(_e.value?e(f)(`serviceConfigEnv.inheritsFrom`,{name:xe.value.name}):e(f)(`serviceConfigEnv.isolated`,{name:xe.value.name})),1)])):y(``,!0),ke.value.length>0?(p(),v(e(L),{key:2,class:`inherited-accordion`},{default:h(()=>[n(e(R),{value:`inherited`},{default:h(()=>[n(e(ne),null,{default:h(()=>[a(`span`,ri,[i[6]||=a(`i`,{class:`ti ti-arrow-down-left`},null,-1),r(` `+g(e(f)(`serviceConfigEnv.inheritedVars`))+` `,1),n(e(A),{value:String(ke.value.length),severity:`secondary`,rounded:``},null,8,[`value`])])]),_:1}),n(e(U),null,{default:h(()=>[n(e(re),{value:ke.value,size:`small`,"show-headers":!1},{default:h(()=>[n(e(W),{style:{width:`35%`}},{body:h(({data:e})=>[a(`div`,ii,[a(`code`,ai,g(e.key),1),Ae.value[e.variableId]?(p(),v(Ce,{key:0,"environment-id":Ae.value[e.variableId].environmentId,class:`source-badge`},null,8,[`environment-id`])):y(``,!0)])]),_:1}),n(e(W),{style:{width:`65%`}},{body:h(({data:e})=>[a(`span`,oi,[a(`span`,{class:`value-actions`,onClick:i[0]||=x(()=>{},[`stop`])},[e.slot.isSecret?(p(),o(`i`,{key:0,class:l([G.value.has(e.variableId)?`ti ti-eye-off`:`ti ti-eye`,`action-icon`]),onClick:t=>K(e.variableId)},null,10,si)):y(``,!0),a(`i`,{class:l([q.value===e.variableId?`ti ti-check`:`ti ti-copy`,`action-icon`]),onClick:t=>J(e.variableId,e.slot.pre+e.slot.value+e.slot.post)},null,10,ci)]),e.slot.isSecret&&!G.value.has(e.variableId)?(p(),o(`span`,li,`***`)):(p(),o(`code`,ui,g(e.slot.pre)+g(e.slot.value)+g(e.slot.post),1))])]),_:1})]),_:1},8,[`value`])]),_:1})]),_:1})]),_:1})):y(``,!0),a(`div`,di,[a(`h3`,fi,g(e(f)(`serviceConfigEnv.envVars`)),1),a(`div`,pi,[n(e(F),{label:e(f)(`serviceConfigEnv.editVariables`),icon:`ti ti-pencil`,size:`small`,variant:`outlined`,"data-testid":`env-edit-btn`,disabled:!E.value,onClick:ze},null,8,[`label`,`disabled`]),n(e(F),{label:e(f)(`serviceConfigEnv.preview`),icon:`ti ti-eye`,size:`small`,variant:`outlined`,severity:`secondary`,loading:N.value,disabled:!E.value,"data-testid":`env-preview-btn`,onClick:Ne},null,8,[`label`,`loading`,`disabled`])])]),D.value?(p(),o(`div`,mi,[Oe.value.length>0?(p(),o(`div`,hi,[n(Te,{"environment-id":D.value.id,sources:Ae.value,"resolved-env":{...ee.value?.env??{},...I.value?.env??{}},"service-builtins":ue.value,editable:!1,"show-overrides":!0,"show-override-badge":!0,"show-delete":!1,"show-add-button":!1,onVariablesChanged:je},null,8,[`environment-id`,`sources`,`resolved-env`,`service-builtins`])])):(p(),o(`div`,gi,[a(`p`,null,g(e(f)(`serviceConfigEnv.noVarsConfigured`)),1)])),fe.value?(p(),v(e(L),{key:2,class:`inherited-accordion`},{default:h(()=>[n(e(R),{value:`passthrough`},{default:h(()=>[n(e(ne),null,{default:h(()=>[a(`span`,_i,[i[7]||=a(`i`,{class:`ti ti-world`},null,-1),r(` `+g(e(f)(`agentPage.passthrough.titleShort`))+` `,1),n(e(A),{value:String($.value.length),severity:`secondary`,rounded:``},null,8,[`value`])])]),_:1}),n(e(U),null,{default:h(()=>[a(`p`,vi,g(e(f)(`serviceConfigEnv.passthroughInfo`)),1),X.value?(p(),v(e(T),{key:0,style:{width:`24px`,height:`24px`}})):(p(),v(e(re),{key:1,value:he.value,stripedRows:``,size:`small`},{default:h(()=>[n(e(W),{field:`name`,header:e(f)(`common.key`),style:{width:`35%`}},{body:h(({data:e})=>[a(`code`,yi,g(e.name),1)]),_:1},8,[`header`]),n(e(W),{header:e(f)(`common.value`),style:{width:`65%`}},{body:h(({data:t})=>[t.value===null?(p(),o(`span`,xi,g(e(f)(`serviceConfigEnv.undefined`)),1)):(p(),o(`span`,bi,g(t.value),1))]),_:1},8,[`header`])]),_:1},8,[`value`]))]),_:1})]),_:1})]),_:1})):y(``,!0)])):E.value?(p(),o(`div`,Ci,[a(`p`,null,g(e(f)(`serviceConfigEnv.noVarsConfigured`)),1)])):(p(),o(`div`,Si,[a(`p`,null,g(e(f)(`serviceConfigEnv.noActiveEnv`)),1)])),n(e(M),{visible:k.value,header:e(f)(`serviceConfigEnv.editVarsHeader`),style:{width:`900px`},maximizable:``,modal:``,"onUpdate:visible":i[2]||=e=>{e||Be()}},{footer:h(()=>[n(e(F),{label:e(f)(`actions.close`),icon:`ti ti-x`,onClick:i[1]||=e=>Be()},null,8,[`label`])]),default:h(()=>[a(`div`,wi,[E.value?(p(),o(`div`,Ti,[a(`span`,Ei,g(e(f)(`serviceConfigEnv.editingVarsFor`,{name:s.service.name||s.service.id})),1),n(Ce,{"environment-id":E.value},null,8,[`environment-id`])])):y(``,!0),a(`div`,Di,[D.value?(p(),v(Te,{key:0,"environment-id":D.value.id,editable:!0,sources:Ae.value,"autocomplete-enabled":!0,"autocomplete-suggestions":e(B),"autocomplete-meta":e(H),"resolved-env":{...ee.value?.env??{},...I.value?.env??{}},"service-builtins":ue.value,"show-overrides":!0,onVariablesChanged:je,"show-delete":!0,"show-add-button":!0,onAutocompleteSearch:e(ie)},null,8,[`environment-id`,`sources`,`autocomplete-suggestions`,`autocomplete-meta`,`resolved-env`,`service-builtins`,`onAutocompleteSearch`])):y(``,!0)])])]),_:1},8,[`visible`,`header`]),n(e(M),{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(F),{label:e(f)(`actions.close`),icon:`ti ti-x`,onClick:i[4]||=e=>j.value=!1},null,8,[`label`])]),default:h(()=>[N.value?(p(),o(`div`,Oi,[n(e(T))])):I.value?(p(),o(`div`,ki,[a(`p`,Ai,g(e(f)(`serviceConfigEnv.injectedVarsInfo`)),1),n(e(re),{value:Pe.value,stripedRows:``,size:`small`,rows:15,paginator:Pe.value.length>15},{default:h(()=>[n(e(W),{field:`key`,header:e(f)(`common.key`),style:{width:`35%`}},{body:h(({data:e})=>[a(`code`,ji,g(e.key),1)]),_:1},8,[`header`]),n(e(W),{header:e(f)(`common.value`),style:{width:`65%`}},{body:h(({data:e})=>[a(`span`,Mi,[a(`span`,{class:`value-actions`,onClick:i[3]||=x(()=>{},[`stop`])},[I.value.envSecrets.includes(e.key)?(p(),o(`i`,{key:0,class:l([G.value.has(`preview:`+e.key)?`ti ti-eye-off`:`ti ti-eye`,`action-icon`]),onClick:t=>K(`preview:`+e.key)},null,10,Ni)):y(``,!0),a(`i`,{class:l([q.value===`preview:`+e.key?`ti ti-check`:`ti ti-copy`,`action-icon`]),onClick:t=>J(`preview:`+e.key,e.value)},null,10,Pi)]),I.value.envSecrets.includes(e.key)&&!G.value.has(`preview:`+e.key)?(p(),o(`span`,Fi,`***`)):(p(),o(`span`,Ii,g(Fe(e.value,!1)),1))])]),_:1},8,[`header`])]),_:1},8,[`value`,`paginator`])])):y(``,!0)]),_:1},8,[`visible`,`header`])]))}}),[[`__scopeId`,`data-v-c7f150f3`]]),Ri={class:`config-health`},zi={class:`config-card config-card--inline`},Bi={class:`config-card__header`},Vi={class:`config-card`},Hi={class:`config-card__header`},Ui={class:`config-card`},Wi={class:`config-card__header`},Gi={class:`config-card`},Ki={class:`config-card__header`},qi={class:`config-card`},Ji={class:`config-card__header`},Yi={key:1,class:`config-card`},Xi={class:`config-card__header`},Zi={class:`config-card__hint`},Qi={class:`config-card`},$i={class:`config-card__header`},ea={class:`config-card`},ta={class:`config-card__header`},na={class:`config-card`},ra={class:`config-card__header`},ia={class:`config-card`},aa={class:`config-card__header`},oa=I(f({__name:`ServiceConfigHealthCheck`,props:{service:{}},emits:[`save`],setup(r,{emit:s}){let c=r,l=s,{t:u}=V(),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 S(){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`,Ri,[a(`div`,zi,[a(`div`,Bi,[r[10]||=a(`i`,{class:`ti ti-heart`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.enable`)),1)]),n(e(z),{modelValue:d.value,"onUpdate:modelValue":r[0]||=e=>d.value=e,onChange:S},null,8,[`modelValue`])]),d.value?(p(),o(m,{key:0},[a(`div`,Vi,[a(`div`,Hi,[r[11]||=a(`i`,{class:`ti ti-settings`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.type`)),1)]),n(e(k),{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:S},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`,Ui,[a(`div`,Wi,[r[13]||=a(`i`,{class:`ti ti-link`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.path`)),1)]),n(e(E),{modelValue:f.value.path,"onUpdate:modelValue":r[2]||=e=>f.value.path=e,class:`config-card__input`,placeholder:`/health`,onBlur:S,onKeydown:b(x(S,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,Gi,[a(`div`,Ki,[r[14]||=a(`i`,{class:`ti ti-directions`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.method`)),1)]),n(e(k),{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:S},null,8,[`modelValue`])]),a(`div`,qi,[a(`div`,Ji,[r[15]||=a(`i`,{class:`ti ti-circle-check`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.expectedStatus`)),1)]),n(e(B),{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:S,onKeydown:b(x(S,[`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`,Yi,[a(`div`,Xi,[r[17]||=a(`i`,{class:`ti ti-code`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.command`)),1)]),n(e(ie),{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:S},null,8,[`modelValue`]),a(`small`,Zi,g(e(u)(`serviceConfigHealthCheck.commandHint`)),1)])):y(``,!0),a(`div`,Qi,[a(`div`,$i,[r[18]||=a(`i`,{class:`ti ti-hourglass`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.initialDelay`)),1)]),n(e(B),{modelValue:f.value.initialDelay,"onUpdate:modelValue":r[6]||=e=>f.value.initialDelay=e,class:`config-card__input`,"use-grouping":!1,min:0,onBlur:S,onKeydown:b(x(S,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`]),r[19]||=a(`small`,{class:`config-card__hint`},`Wait before first health check (ms)`,-1)]),a(`div`,ea,[a(`div`,ta,[r[20]||=a(`i`,{class:`ti ti-clock`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.interval`)),1)]),n(e(B),{modelValue:f.value.interval,"onUpdate:modelValue":r[7]||=e=>f.value.interval=e,class:`config-card__input`,"use-grouping":!1,min:1e3,onBlur:S,onKeydown:b(x(S,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,na,[a(`div`,ra,[r[21]||=a(`i`,{class:`ti ti-stopwatch`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.timeout`)),1)]),n(e(B),{modelValue:f.value.timeout,"onUpdate:modelValue":r[8]||=e=>f.value.timeout=e,class:`config-card__input`,"use-grouping":!1,min:500,onBlur:S,onKeydown:b(x(S,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),a(`div`,ia,[a(`div`,aa,[r[22]||=a(`i`,{class:`ti ti-rotate`},null,-1),a(`span`,null,g(e(u)(`serviceConfigHealthCheck.retries`)),1)]),n(e(B),{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:S,onKeydown:b(x(S,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])],64)):y(``,!0)]))}}),[[`__scopeId`,`data-v-956bcc34`]]),sa={class:`config-shortcuts`},ca={key:0,class:`config-shortcuts__empty`},la={class:`config-shortcuts__row`},ua={class:`config-shortcuts__field`},da=[`for`],fa={class:`config-shortcuts__field config-shortcuts__field--wide`},pa=[`for`],ma={class:`config-shortcuts__field`},ha=[`for`],ga={class:`config-shortcuts__actions-cell`},_a={class:`config-shortcuts__footer`},va=I(f({__name:`ServiceConfigShortcuts`,props:{service:{}},emits:[`save`],setup(r,{emit:c}){let l=r,{t:u}=V(),d=c,f=t([...l.service.shortcuts??[]]),h=null;i(()=>l.service,e=>{h||(f.value=[...e.shortcuts??[]])});function _(){f.value=[...f.value,{id:Se(),label:``,command:``,cwd:void 0}]}function v(e){f.value=f.value.filter((t,n)=>n!==e)}function S(e,t,n){f.value=f.value.map((r,i)=>i===e?{...r,[t]:n||void 0}:r)}function C(){h&&clearTimeout(h),h=setTimeout(()=>{d(`save`,f.value),h=null},150)}function w(e){v(e),C()}return(t,r)=>(p(),o(`div`,sa,[f.value.length===0?(p(),o(`div`,ca,[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`,la,[a(`div`,ua,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-label-${r}`},g(e(u)(`serviceConfigShortcuts.label`)),9,da),n(e(E),{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=>S(r,`label`,e),onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,fa,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-command-${r}`},g(e(u)(`serviceConfigShortcuts.command`)),9,pa),n(e(E),{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=>S(r,`command`,e),onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,ma,[a(`label`,{class:`config-shortcuts__label`,for:`shortcut-cwd-${r}`},g(e(u)(`serviceConfigShortcuts.workingDir`)),9,ha),n(e(E),{id:`shortcut-cwd-${r}`,"model-value":t.cwd??``,placeholder:e(u)(`serviceConfigShortcuts.cwdPlaceholder`),class:`config-card__input`,"onUpdate:modelValue":e=>S(r,`cwd`,e),onBlur:C,onKeydown:b(x(C,[`prevent`]),[`enter`])},null,8,[`id`,`model-value`,`placeholder`,`onUpdate:modelValue`,`onKeydown`])]),a(`div`,ga,[n(e(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:e=>w(r)},null,8,[`onClick`])])])]))),128)),a(`div`,_a,[n(e(F),{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`]]),ya={class:`config-log-parsers`},ba={class:`config-card`},xa={class:`config-card__header`},Sa={class:`config-card__hint`},Ca={class:`config-card`},wa={class:`config-card__header`},Ta={class:`config-card__header-hint`},Ea={class:`config-log-parsers__order`},Da={class:`config-log-parsers__name`},Oa={key:1,class:`config-log-parsers__empty`},ka={class:`config-log-parsers__add-row`},Aa={class:`config-log-parsers__footer`},ja=I(f({__name:`ServiceConfigLogs`,props:{service:{}},emits:[`save`],setup(l,{emit:f}){let _=l,b=f,x=ae(),{t:S}=V(),C=ke(),w=t([..._.service.parserIds??[]]);i(()=>_.service,e=>{w.value=[...e.parserIds??[]]});let T=d(()=>[...C.parsers].filter(e=>e.enabled).sort((e,t)=>e.name.localeCompare(t.name))),E=d(()=>T.value.filter(e=>!w.value.includes(e.id))),D=t(w.value.map(e=>C.parsers.find(t=>t.id===e)).filter(e=>e!==void 0));i(w,e=>{let t=D.value.filter(t=>e.includes(t.id)),n=e.filter(e=>!t.find(t=>t.id===e)).map(e=>C.parsers.find(t=>t.id===e)).filter(e=>e!==void 0);D.value=[...t,...n]}),i(()=>C.parsers,()=>{let e=w.value;D.value=e.map(e=>C.parsers.find(t=>t.id===e)).filter(e=>e!==void 0)});let O=t(null);function j(e){if(!e)return;let t=C.parsers.find(t=>t.id===e);t&&(w.value=[...w.value,e],D.value=[...D.value,t],O.value=null,P())}function M(e){w.value=w.value.filter(t=>t!==e),D.value=D.value.filter(t=>t.id!==e),P()}function N(){w.value=D.value.map(e=>e.id),P()}function P(){b(`save`,{parserIds:D.value.map(e=>e.id)})}return c(()=>{C.fetchParsers(),C.subscribeParsers()}),u(()=>{C.unsubscribeParsers()}),(t,i)=>(p(),o(`div`,ya,[a(`div`,ba,[a(`div`,xa,[i[3]||=a(`i`,{class:`ti ti-code`},null,-1),a(`span`,null,g(e(S)(`serviceConfigLogs.jsParsers`)),1)]),a(`small`,Sa,g(e(S)(`serviceConfigLogs.jsParsersHint`)),1)]),a(`div`,Ca,[a(`div`,wa,[i[4]||=a(`i`,{class:`ti ti-arrows-sort`},null,-1),a(`span`,null,g(e(S)(`serviceConfigLogs.executionOrder`)),1),a(`small`,Ta,g(e(S)(`serviceConfigLogs.executionOrderHint`)),1)]),D.value.length>0?(p(),v(e(fe),{key:0,modelValue:D.value,"onUpdate:modelValue":i[0]||=e=>D.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(D.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`,Ea,g(s+1),1),a(`span`,Da,g(t.name),1),t.builtin?(p(),v(e(A),{key:0,severity:`secondary`,class:`config-log-parsers__builtin-badge`},{default:h(()=>[r(g(e(S)(`serviceConfigLogs.builtin`)),1)]),_:1})):y(``,!0),t.enabled?y(``,!0):(p(),v(e(A),{key:1,severity:`warn`,class:`config-log-parsers__disabled-badge`},{default:h(()=>[r(g(e(S)(`serviceConfigLogs.disabled`)),1)]),_:1})),n(e(F),{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),D.value.length===0?(p(),o(`div`,Oa,g(e(S)(`serviceConfigLogs.empty`)),1)):y(``,!0),a(`div`,ka,[n(e(k),{modelValue:O.value,"onUpdate:modelValue":[i[1]||=e=>O.value=e,j],options:E.value,"option-label":`name`,"option-value":`id`,placeholder:e(S)(`serviceConfigLogs.addParser`),class:`config-log-parsers__add-select`,loading:e(C).loading,disabled:E.value.length===0},{option:h(({option:t})=>[a(`span`,null,g(t.name),1),t.builtin?(p(),v(e(A),{key:0,severity:`secondary`,class:`ml-2`,style:{"font-size":`0.65rem`,padding:`0.1rem 0.35rem`}},{default:h(()=>[r(g(e(S)(`serviceConfigLogs.builtin`)),1)]),_:1})):y(``,!0)]),_:1},8,[`modelValue`,`options`,`placeholder`,`loading`,`disabled`])])]),a(`div`,Aa,[n(e(F),{label:e(S)(`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`]]),Ma={class:`config-log-sources`},Na={class:`config-card`},Pa={class:`config-card__header`},Fa={class:`config-card__hint`},Ia={key:0,class:`config-card config-card--list`},La={class:`source-row__info`},Ra={class:`source-row__type`},za={class:`source-row__label`},Ba={class:`source-row__actions`},Va={key:1,class:`config-log-sources__empty`},Ha={class:`config-log-sources__footer`},Ua={class:`dialog-form`},Wa={class:`dialog-form__field`},Ga={for:`lsrc-type`,class:`dialog-form__label`},Ka={class:`dialog-form__field`},qa={for:`lsrc-path-file`,class:`dialog-form__label`},Ja={class:`dialog-form__field`},Ya={for:`lsrc-encoding-file`,class:`dialog-form__label`},Xa={class:`dialog-form__field dialog-form__field--row`},Za={for:`lsrc-startFromEnd-file`,class:`dialog-form__label`},Qa={class:`dialog-form__field dialog-form__field--row`},$a={for:`lsrc-createIfNotExists-file`,class:`dialog-form__label`},eo={class:`dialog-form__field`},to={for:`lsrc-connectionString-mongo`,class:`dialog-form__label`},no={class:`dialog-form__row`},ro={class:`dialog-form__field`},io={class:`dialog-form__field`},ao={class:`dialog-form__row`},oo={class:`dialog-form__field`},so={class:`dialog-form__field`},co={class:`dialog-form__field`},lo={class:`dialog-form__row`},uo={class:`dialog-form__field dialog-form__field--grow`},fo={class:`dialog-form__field dialog-form__field--port`},po={class:`dialog-form__row`},mo={class:`dialog-form__field`},ho={class:`dialog-form__field`},go={class:`dialog-form__row`},_o={class:`dialog-form__field`},vo={class:`dialog-form__field`},yo={class:`dialog-form__row`},bo={class:`dialog-form__field`},xo={class:`dialog-form__field`},So={class:`dialog-form__row`},Co={class:`dialog-form__field`},wo={class:`dialog-form__field`},To={class:`dialog-form__field`},Eo={key:3,class:`dialog-form__hint-block`},Do=I(f({__name:`ServiceConfigLogSources`,props:{service:{}},emits:[`save`],setup(c,{emit:u}){let{t:d}=V(),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 S=t(!1),C=t(null),w=t(b(`console`));function T(){C.value=null,w.value=b(`file`),S.value=!0}function D(e){C.value=e,w.value={...x.value[e]},S.value=!0}function O(e){w.value=b(e)}function A(){C.value===null?x.value=[...x.value,{...w.value}]:x.value=x.value.map((e,t)=>t===C.value?{...w.value}:e),S.value=!1,_(`save`,{logSources:x.value})}function j(e){x.value=x.value.filter((t,n)=>n!==e),_(`save`,{logSources:x.value})}function N(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 P(e){return e===`console`?`ti-terminal-2`:e===`file`?`ti-file`:`ti-database`}return(t,i)=>(p(),o(`div`,Ma,[a(`div`,Na,[a(`div`,Pa,[i[23]||=a(`i`,{class:`ti ti-inbox`},null,-1),a(`span`,null,g(e(d)(`serviceConfigLogSources.title`)),1)]),a(`small`,Fa,g(e(d)(`serviceConfigLogSources.hint`)),1)]),x.value.length>0?(p(),o(`div`,Ia,[(p(!0),o(m,null,s(x.value,(t,r)=>(p(),o(`div`,{key:r,class:`source-row`},[a(`i`,{class:l(`ti ${P(t.type)} source-row__icon`)},null,2),a(`div`,La,[a(`span`,Ra,g(t.type),1),a(`span`,za,g(N(t)),1)]),a(`div`,Ba,[n(e(F),{icon:`ti ti-pencil`,variant:`text`,size:`small`,severity:`secondary`,onClick:e=>D(r)},null,8,[`onClick`]),n(e(F),{icon:`ti ti-trash`,variant:`text`,size:`small`,severity:`danger`,onClick:e=>j(r)},null,8,[`onClick`])])]))),128))])):(p(),o(`div`,Va,[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`,Ha,[n(e(F),{label:e(d)(`serviceConfigLogSources.addSource`),icon:`ti ti-plus`,size:`small`,onClick:T},null,8,[`label`])]),n(e(M),{visible:S.value,"onUpdate:visible":i[22]||=e=>S.value=e,header:C.value===null?e(d)(`serviceConfigLogSources.addDialog`):e(d)(`serviceConfigLogSources.editDialog`),modal:``,style:{width:`520px`}},{footer:h(()=>[n(e(F),{label:e(d)(`serviceConfigLogSources.cancel`),severity:`secondary`,variant:`outlined`,onClick:i[21]||=e=>S.value=!1},null,8,[`label`]),n(e(F),{label:C.value===null?e(d)(`serviceConfigLogSources.add`):e(d)(`serviceConfigLogSources.save`),icon:`ti ti-check`,onClick:A},null,8,[`label`])]),default:h(()=>[a(`div`,Ua,[a(`div`,Wa,[a(`label`,Ga,g(e(d)(`serviceConfigLogSources.type`)),1),n(e(k),{"input-id":`lsrc-type`,"model-value":w.value.type,options:v,"option-label":`label`,"option-value":`value`,class:`dialog-form__input`,"onUpdate:modelValue":O},null,8,[`model-value`])]),w.value.type===`file`?(p(),o(m,{key:0},[a(`div`,Ka,[a(`label`,qa,[r(g(e(d)(`serviceConfigLogSources.path`))+` `,1),i[25]||=a(`span`,{class:`dialog-form__required`},`*`,-1)]),n(e(E),{id:`lsrc-path-file`,modelValue:w.value.path,"onUpdate:modelValue":i[0]||=e=>w.value.path=e,class:`dialog-form__input`,placeholder:`/var/log/app.log`},null,8,[`modelValue`])]),a(`div`,Ja,[a(`label`,Ya,g(e(d)(`serviceConfigLogSources.encoding`)),1),n(e(E),{id:`lsrc-encoding-file`,modelValue:w.value.encoding,"onUpdate:modelValue":i[1]||=e=>w.value.encoding=e,class:`dialog-form__input`,placeholder:`utf-8`},null,8,[`modelValue`])]),a(`div`,Xa,[a(`label`,Za,g(e(d)(`serviceConfigLogSources.startFromEnd`)),1),n(e(z),{"input-id":`lsrc-startFromEnd-file`,modelValue:w.value.startFromEnd,"onUpdate:modelValue":i[2]||=e=>w.value.startFromEnd=e},null,8,[`modelValue`])]),a(`div`,Qa,[a(`label`,$a,g(e(d)(`serviceConfigLogSources.createIfNotExists`)),1),n(e(z),{"input-id":`lsrc-createIfNotExists-file`,modelValue:w.value.createIfNotExists,"onUpdate:modelValue":i[3]||=e=>w.value.createIfNotExists=e},null,8,[`modelValue`])])],64)):w.value.type===`mongo`?(p(),o(m,{key:1},[a(`div`,eo,[a(`label`,to,[r(g(e(d)(`serviceConfigLogSources.connectionString`))+` `,1),i[26]||=a(`span`,{class:`dialog-form__required`},`*`,-1)]),n(e(E),{id:`lsrc-connectionString-mongo`,modelValue:w.value.connectionString,"onUpdate:modelValue":i[4]||=e=>w.value.connectionString=e,class:`dialog-form__input`,placeholder:`mongodb://user:pass@host:27017`,type:`password`,autocomplete:`off`},null,8,[`modelValue`])]),a(`div`,no,[a(`div`,ro,[i[27]||=a(`label`,{for:`lsrc-database-mongo`,class:`dialog-form__label`},[r(`Database `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-database-mongo`,modelValue:w.value.database,"onUpdate:modelValue":i[5]||=e=>w.value.database=e,class:`dialog-form__input`,placeholder:`mydb`},null,8,[`modelValue`])]),a(`div`,io,[i[28]||=a(`label`,{for:`lsrc-collection-mongo`,class:`dialog-form__label`},[r(`Collection `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-collection-mongo`,modelValue:w.value.collection,"onUpdate:modelValue":i[6]||=e=>w.value.collection=e,class:`dialog-form__input`,placeholder:`logs`},null,8,[`modelValue`])])]),a(`div`,ao,[a(`div`,oo,[i[29]||=a(`label`,{for:`lsrc-timestampField-mongo`,class:`dialog-form__label`},`Timestamp field`,-1),n(e(E),{id:`lsrc-timestampField-mongo`,modelValue:w.value.timestampField,"onUpdate:modelValue":i[7]||=e=>w.value.timestampField=e,class:`dialog-form__input`,placeholder:`timestamp`},null,8,[`modelValue`])]),a(`div`,so,[i[30]||=a(`label`,{for:`lsrc-messageField-mongo`,class:`dialog-form__label`},`Message field`,-1),n(e(E),{id:`lsrc-messageField-mongo`,modelValue:w.value.messageField,"onUpdate:modelValue":i[8]||=e=>w.value.messageField=e,class:`dialog-form__input`,placeholder:`message`},null,8,[`modelValue`])])]),a(`div`,co,[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(E),{id:`lsrc-levelField-mongo`,modelValue:w.value.levelField,"onUpdate:modelValue":i[9]||=e=>w.value.levelField=e,class:`dialog-form__input`,placeholder:`level`},null,8,[`modelValue`])])],64)):w.value.type===`mysql`?(p(),o(m,{key:2},[a(`div`,lo,[a(`div`,uo,[i[32]||=a(`label`,{for:`lsrc-host-mysql`,class:`dialog-form__label`},[r(`Host `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-host-mysql`,modelValue:w.value.host,"onUpdate:modelValue":i[10]||=e=>w.value.host=e,class:`dialog-form__input`,placeholder:`localhost`},null,8,[`modelValue`])]),a(`div`,fo,[i[33]||=a(`label`,{for:`lsrc-port-mysql`,class:`dialog-form__label`},`Port`,-1),n(e(B),{"input-id":`lsrc-port-mysql`,modelValue:w.value.port,"onUpdate:modelValue":i[11]||=e=>w.value.port=e,min:1,max:65535,class:`dialog-form__input`},null,8,[`modelValue`])])]),a(`div`,po,[a(`div`,mo,[i[34]||=a(`label`,{for:`lsrc-user-mysql`,class:`dialog-form__label`},[r(`User `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-user-mysql`,modelValue:w.value.user,"onUpdate:modelValue":i[12]||=e=>w.value.user=e,class:`dialog-form__input`,placeholder:`root`},null,8,[`modelValue`])]),a(`div`,ho,[i[35]||=a(`label`,{for:`lsrc-password-mysql`,class:`dialog-form__label`},`Password`,-1),n(e(E),{id:`lsrc-password-mysql`,modelValue:w.value.password,"onUpdate:modelValue":i[13]||=e=>w.value.password=e,class:`dialog-form__input`,type:`password`,autocomplete:`new-password`},null,8,[`modelValue`])])]),a(`div`,go,[a(`div`,_o,[i[36]||=a(`label`,{for:`lsrc-database-mysql`,class:`dialog-form__label`},[r(`Database `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-database-mysql`,modelValue:w.value.database,"onUpdate:modelValue":i[14]||=e=>w.value.database=e,class:`dialog-form__input`,placeholder:`app_db`},null,8,[`modelValue`])]),a(`div`,vo,[i[37]||=a(`label`,{for:`lsrc-table-mysql`,class:`dialog-form__label`},[r(`Table `),a(`span`,{class:`dialog-form__required`},`*`)],-1),n(e(E),{id:`lsrc-table-mysql`,modelValue:w.value.table,"onUpdate:modelValue":i[15]||=e=>w.value.table=e,class:`dialog-form__input`,placeholder:`logs`},null,8,[`modelValue`])])]),a(`div`,yo,[a(`div`,bo,[i[38]||=a(`label`,{for:`lsrc-timestampColumn-mysql`,class:`dialog-form__label`},`Timestamp column`,-1),n(e(E),{id:`lsrc-timestampColumn-mysql`,modelValue:w.value.timestampColumn,"onUpdate:modelValue":i[16]||=e=>w.value.timestampColumn=e,class:`dialog-form__input`,placeholder:`created_at`},null,8,[`modelValue`])]),a(`div`,xo,[i[39]||=a(`label`,{for:`lsrc-messageColumn-mysql`,class:`dialog-form__label`},`Message column`,-1),n(e(E),{id:`lsrc-messageColumn-mysql`,modelValue:w.value.messageColumn,"onUpdate:modelValue":i[17]||=e=>w.value.messageColumn=e,class:`dialog-form__input`,placeholder:`message`},null,8,[`modelValue`])])]),a(`div`,So,[a(`div`,Co,[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(E),{id:`lsrc-levelColumn-mysql`,modelValue:w.value.levelColumn,"onUpdate:modelValue":i[18]||=e=>w.value.levelColumn=e,class:`dialog-form__input`,placeholder:`level`},null,8,[`modelValue`])]),a(`div`,wo,[i[41]||=a(`label`,{for:`lsrc-pollIntervalMs-mysql`,class:`dialog-form__label`},`Poll interval (ms)`,-1),n(e(B),{"input-id":`lsrc-pollIntervalMs-mysql`,modelValue:w.value.pollIntervalMs,"onUpdate:modelValue":i[19]||=e=>w.value.pollIntervalMs=e,min:500,max:6e4,class:`dialog-form__input`},null,8,[`modelValue`])])]),a(`div`,To,[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(E),{id:`lsrc-query-mysql`,modelValue:w.value.query,"onUpdate:modelValue":i[20]||=e=>w.value.query=e,class:`dialog-form__input`,placeholder:`SELECT * FROM logs WHERE created_at > ? ORDER BY id ASC`},null,8,[`modelValue`])])],64)):w.value.type===`console`?(p(),o(`small`,Eo,`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-bc1e3496`]]),Oo={class:`config-traefik`},ko={class:`traefik-entry__fields`},Ao=I(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=ye(d.service);if(!e)return;let t=await Q.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`,Oo,[_.value===!1?(p(),v(e(j),{key:0,severity:`warn`},{default:h(()=>[i[1]||=r(` Traefik n'est pas activé. Configurez-le dans `,-1),n(e(oe),{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`,ko,[n(e(E),{"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(B),{"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(F),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,size:`small`,onClick:e=>w(r)},null,8,[`onClick`])])]))),128)),n(e(F),{icon:`ti ti-plus`,label:`Ajouter une URL`,size:`small`,variant:`outlined`,onClick:C})]))}}),[[`__scopeId`,`data-v-37776b09`]]),jo={class:`config-view`,"data-testid":`config-view`},Mo={class:`config-view__header`},No={class:`config-view__title`},Po={class:`config-view__actions`},Fo=I(f({__name:`ServiceConfigView`,props:{service:{},projectId:{}},emits:[`remove-service`],setup(t,{emit:r}){let i=t,s=r,{t:c}=V(),l=_e(),u=ce(),f=Y(),{isDebug:m}=Ut(),_=X(),v=ae(),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 S=d(()=>u.getByRef({id:i.projectId,orgId:f.activeOrgId})?.activeEnvironmentId);async function C(e,t){await t()?m.value&&console.debug(`[autosave] ${e} saved`):console.error(`[autosave] ${e} failed:`,l.error??`Save failed`)}async function w(e){await C(`General`,()=>l.update(i.service.id,e))}async function T(e){await C(`Commands`,()=>l.update(i.service.id,e))}async function E(e){await C(`Health check`,()=>l.update(i.service.id,{healthCheck:e??null}))}async function D(e){await C(`Shortcuts`,()=>l.update(i.service.id,{shortcuts:e}))}async function O(e){await C(`Docker`,()=>l.update(i.service.id,{dockerConfig:e}))}async function k(e){await C(`Log parsers`,()=>l.update(i.service.id,e))}async function A(e){await C(`Log sources`,()=>l.update(i.service.id,e))}async function j(e){await C(`Traefik`,()=>l.update(i.service.id,e))}function M(){s(`remove-service`,i.service.id)}return(r,i)=>(p(),o(`div`,jo,[a(`div`,Mo,[a(`h2`,No,g(e(c)(`serviceConfigView.title`)),1),a(`div`,Po,[n(e(F),{label:e(c)(`serviceConfigView.remove`),icon:`ti ti-trash`,severity:`danger`,size:`small`,variant:`outlined`,onClick:M},null,8,[`label`])])]),n(e(K),{value:b.value,class:`config-view__tabs`,"onUpdate:value":x},{default:h(()=>[n(e(P),null,{default:h(()=>[n(e(q),{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(q),{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(q),{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(q),{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(q),{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(q),{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(q),{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(q),{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(G),null,{default:h(()=>[n(e(N),{value:`general`},{default:h(()=>[n(En,{service:t.service,onSave:w},null,8,[`service`])]),_:1}),n(e(N),{value:`commands`},{default:h(()=>[n(Zr,{service:t.service,onSave:T,onDockerSave:O},null,8,[`service`])]),_:1}),n(e(N),{value:`shortcuts`,"data-testid":`tabpanel-shortcuts`},{default:h(()=>[n(va,{service:t.service,onSave:D},null,8,[`service`])]),_:1}),n(e(N),{value:`env`},{default:h(()=>[n(Li,{service:t.service,"project-id":t.projectId,"active-environment-id":S.value},null,8,[`service`,`project-id`,`active-environment-id`])]),_:1}),n(e(N),{value:`health`},{default:h(()=>[n(oa,{service:t.service,onSave:E},null,8,[`service`])]),_:1}),n(e(N),{value:`log-parsers`,"data-testid":`tabpanel-log-parsers`},{default:h(()=>[n(ja,{service:t.service,onSave:k},null,8,[`service`])]),_:1}),n(e(N),{value:`log-sources`},{default:h(()=>[n(Do,{service:t.service,onSave:A},null,8,[`service`])]),_:1}),n(e(N),{value:`traefik`},{default:h(()=>[n(Ao,{service:t.service,onSave:j},null,8,[`service`])]),_:1})]),_:1})]),_:1},8,[`value`])]))}}),[[`__scopeId`,`data-v-204a6ce7`]]),Io={key:0,class:`service-detail`},Lo={key:1,class:`service-detail__not-found`},Ro={key:2,class:`service-detail__not-found`},zo=I(f({__name:`ServiceDetailPage`,setup(n){let r=X(),s=ae(),c=O(),l=te(),{t:f}=V(),m=_e(),h=be(),_=ce(),{setServiceContext:b}=pe(),x=d(()=>r.params.id);i(x,e=>b(e),{immediate:!0}),u(()=>b(null));let S=d(()=>{let e=r.params.tab;return e===`terminal`||e===`metrics`||e===`config`||e===`git`||e===`wiki`?e:`terminal`}),C=t(null),w=t(!1),T=d(()=>m.getById(x.value)||(C.value?.id===x.value?C.value:null));i(x,async e=>{if(C.value=null,e&&!m.getById(e)){w.value=!0;try{C.value=await m.fetchOne(e)}finally{w.value=!1}}},{immediate:!0});let E=d(()=>h.getByService(x.value)),D=d(()=>_.currentProject?.id??``);function k(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)=>T.value?(p(),o(`div`,Io,[S.value===`terminal`?(p(),v(Et,{key:`terminal-`+x.value,service:T.value,processes:E.value},null,8,[`service`,`processes`])):S.value===`metrics`?(p(),v(Lt,{key:`metrics-`+x.value,service:T.value,processes:E.value},null,8,[`service`,`processes`])):S.value===`config`?(p(),v(Fo,{key:`config-`+x.value,service:T.value,"project-id":D.value,onRemoveService:k},null,8,[`service`,`project-id`])):S.value===`git`?(p(),v($,{key:`git-`+x.value,"service-id":x.value},null,8,[`service-id`])):S.value===`wiki`?(p(),v(Ae,{key:`wiki-`+x.value,scope:`service:${x.value}`},null,8,[`scope`])):y(``,!0)])):w.value?(p(),o(`div`,Lo)):(p(),o(`div`,Ro,[a(`p`,null,g(e(f)(`serviceDetail.notFound`)),1)]))}}),[[`__scopeId`,`data-v-ac012903`]]);export{zo as default};
|