@runeya/runeya 2.0.151 → 2.0.153

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/agent/index.js +9 -7
  2. package/agent/index.js.map +1 -1
  3. package/agent-manager-SF4CAJJC.js +13 -0
  4. package/chat-Z7SFBEXS.js +28 -0
  5. package/{chunk-ANZF5NLB.js → chunk-26Q43CB2.js} +2 -2
  6. package/{chunk-IOPX7MWA.js → chunk-2DIW5EUT.js} +6 -6
  7. package/{chunk-ZRMLIQZL.js → chunk-3C3R5ZVX.js} +2 -2
  8. package/{chunk-I2EXJ2GI.js → chunk-3O54EIGT.js} +4 -4
  9. package/{chunk-KTRL6RDH.js → chunk-DTRZ5ZN7.js} +5 -5
  10. package/{chunk-3FSQ45SW.js → chunk-EUTW2S4P.js} +87 -16
  11. package/chunk-EUTW2S4P.js.map +1 -0
  12. package/{chunk-NVU7QNZO.js → chunk-MGKGIHT4.js} +2 -4
  13. package/{chunk-NVU7QNZO.js.map → chunk-MGKGIHT4.js.map} +1 -1
  14. package/{chunk-FYAKLTSY.js → chunk-PU6REPMY.js} +5 -5
  15. package/{chunk-FYAKLTSY.js.map → chunk-PU6REPMY.js.map} +1 -1
  16. package/{chunk-NKOG7375.js → chunk-QD2OVLK4.js} +2 -2
  17. package/{chunk-7O54TV2Y.js → chunk-QJSIN26R.js} +45 -38
  18. package/chunk-QJSIN26R.js.map +1 -0
  19. package/{chunk-3JIJSGQW.js → chunk-R4SKU6AO.js} +10 -12
  20. package/chunk-R4SKU6AO.js.map +1 -0
  21. package/{chunk-OCIKN4BK.js → chunk-RVZATF7R.js} +8 -8
  22. package/chunk-RVZATF7R.js.map +1 -0
  23. package/{chunk-YTO4O3UK.js → chunk-TBNCGMDM.js} +5 -5
  24. package/{companion-2YZZSKX5.js → companion-ZDEGNZ2G.js} +11 -9
  25. package/{desktop-installer-page-526XOYLO.js → desktop-installer-page-TBKSXVFD.js} +3 -3
  26. package/{desktop-launcher-WJPN6SPV.js → desktop-launcher-WBYP3KTF.js} +3 -3
  27. package/{environment-resolver-I6KF27QP.js → environment-resolver-R2GH6QOX.js} +6 -6
  28. package/{external-XHTD2IGX.js → external-UJ46WKBL.js} +3 -3
  29. package/index.js +15 -15
  30. package/index.js.map +1 -1
  31. package/{install-gate-VIJIEVF2.js → install-gate-TSCXUCYE.js} +2 -2
  32. package/mcp-server/external.js +7 -6
  33. package/mcp-server/external.js.map +1 -1
  34. package/mcp-server/index.js +7 -6
  35. package/mcp-server/index.js.map +1 -1
  36. package/package.json +1 -1
  37. package/{project-store-GONXVR2N.js → project-store-GBKM34QP.js} +7 -7
  38. package/settings-manager-VSOC3XGI.js +10 -0
  39. package/{src-QMPTXT7D.js → src-6WZKSNN7.js} +2 -2
  40. package/{src-ZDXFSJMJ.js → src-NWPED6TK.js} +33 -39
  41. package/src-NWPED6TK.js.map +1 -0
  42. package/{vault-resolver-MX7WFBJ5.js → vault-resolver-GGHULMG6.js} +3 -3
  43. package/web/assets/{AgentScalarChatInterface.vue-DXbf1TAm.js → AgentScalarChatInterface.vue-CEMnvqfq.js} +1 -1
  44. package/web/assets/{AgentTerminalPage-CgsW_pEb.js → AgentTerminalPage-qQ96vm5Y.js} +1 -1
  45. package/web/assets/{AiChatModals-DLTvqUBK.js → AiChatModals-BsfKdbEA.js} +1 -1
  46. package/web/assets/{AppLayout-BlhwflMq.css → AppLayout-Djk3-XbN.css} +1 -1
  47. package/web/assets/AppLayout-f0_BsXSc.js +1 -0
  48. package/web/assets/{AuditPage-HMNBcG9E.js → AuditPage-B-pCRqXH.js} +1 -1
  49. package/web/assets/CloudAccountPage-C7aV6M8U.js +1 -0
  50. package/web/assets/{CloudAccountPage-Ctf2gtpm.css → CloudAccountPage-CYcW_3tO.css} +1 -1
  51. package/web/assets/{CloudMessagingPage-Csbnn-Zm.js → CloudMessagingPage-BTc8xbjF.js} +1 -1
  52. package/web/assets/{DashboardPage-BeCmdPlp.js → DashboardPage-CF7GLFlx.js} +1 -1
  53. package/web/assets/{DirectoryPickerDialog-DpUZT_4M.js → DirectoryPickerDialog-bKqIFy8e.js} +1 -1
  54. package/web/assets/{EditorIcon-CcU8Z46_.js → EditorIcon-DksI79ZN.js} +1 -1
  55. package/web/assets/EnvironmentForm-BnTLokUw.css +1 -0
  56. package/web/assets/{EnvironmentForm-ypeBVGl-.js → EnvironmentForm-kOyM5xTa.js} +1 -1
  57. package/web/assets/{EnvironmentFormPage-B1gVyMWV.js → EnvironmentFormPage-DfNI6meL.js} +1 -1
  58. package/web/assets/{EnvironmentListPage-CdE-ksue.js → EnvironmentListPage-C1VLgeeP.js} +1 -1
  59. package/web/assets/{FlagChip-maG1f7pl.js → FlagChip-DjC14z4J.js} +1 -1
  60. package/web/assets/{KanbanBoardPage-_E6xalsS.js → KanbanBoardPage-Bl6UnQ6P.js} +3 -3
  61. package/web/assets/KanbanBoardPage-Cmu4Je4N.css +1 -0
  62. package/web/assets/{KanbanListPage-BigioApQ.css → KanbanListPage-DCK-N3nw.css} +1 -1
  63. package/web/assets/{KanbanListPage-DkjiefP8.js → KanbanListPage-Dly6XiRC.js} +1 -1
  64. package/web/assets/{LaunchProjectPage-C4kuqyMZ.js → LaunchProjectPage-DCrKSY8v.js} +1 -1
  65. package/web/assets/{LaunchServicesPage-s8HZF2aU.js → LaunchServicesPage-Bl1pjfYH.js} +1 -1
  66. package/web/assets/{LaunchShell-GWtn69Hh.js → LaunchShell-BcbfPDdc.js} +1 -1
  67. package/web/assets/{LogViewer-B0XUfzs3.js → LogViewer-C_XcH7Oe.js} +1 -1
  68. package/web/assets/{OrgKeyPrompt-Ch8jziJJ.js → OrgKeyPrompt-BK6gkvaO.js} +1 -1
  69. package/web/assets/{ProcessControls-bZbJJjkv.js → ProcessControls-BbRdiZsD.js} +1 -1
  70. package/web/assets/ProcessDetailPage-B7bD2jmj.css +1 -0
  71. package/web/assets/ProcessDetailPage-W7S7ogas.js +1 -0
  72. package/web/assets/{ProcessMetrics-D-rQkzqK.js → ProcessMetrics-C_7_boMv.js} +1 -1
  73. package/web/assets/{ProjectCreateDialog-KjvGUZnr.js → ProjectCreateDialog-q_39qiPd.js} +1 -1
  74. package/web/assets/{ProjectLocationGate-DFe2hgxM.js → ProjectLocationGate-BFvdSy-B.js} +1 -1
  75. package/web/assets/{ProjectPublishDialog-BgPH5gGM.js → ProjectPublishDialog-DAJAvDTT.js} +1 -1
  76. package/web/assets/{RandomJobTestPage-Bv3l2Trh.js → RandomJobTestPage-A-I7cImN.js} +1 -1
  77. package/web/assets/{ScenarioEditorPage-BtKSjE2X.css → ScenarioEditorPage-BwLBCVeS.css} +1 -1
  78. package/web/assets/ScenarioEditorPage-DXw4bCxb.js +14 -0
  79. package/web/assets/{SendToChatDialog-CkWcPSvZ.js → SendToChatDialog-CbhE2WYO.js} +1 -1
  80. package/web/assets/{ServiceControlsBar-VywLkYdH.js → ServiceControlsBar-CudCeQql.js} +1 -1
  81. package/web/assets/ServiceDetailPage-DQvL-VOx.js +2 -0
  82. package/web/assets/{ServiceDetailPage-CM5uzqpI.css → ServiceDetailPage-DuXvqXk4.css} +1 -1
  83. package/web/assets/{ServiceFormPage-v9c7DVdv.js → ServiceFormPage-0qXPeqrh.js} +1 -1
  84. package/web/assets/{SettingsPage-CetQ42p1.js → SettingsPage-Bjn4bKPP.js} +7 -7
  85. package/web/assets/{SettingsPage-B951NEBm.css → SettingsPage-NpFX7FAy.css} +1 -1
  86. package/web/assets/{UnlockPage-CZMvcAl1.js → UnlockPage-CtvaQt45.js} +1 -1
  87. package/web/assets/{VaultMigrationPage-CeX0mpxh.js → VaultMigrationPage-DtoAlng4.js} +1 -1
  88. package/web/assets/{VersionBadge-DDmZ4Dhc.js → VersionBadge-CiBz82BB.js} +1 -1
  89. package/web/assets/{WikiPage-3puq_dIL.js → WikiPage-cuKigw_5.js} +1 -1
  90. package/web/assets/{WikiView-J4U7er--.js → WikiView-BW-B83LB.js} +1 -1
  91. package/web/assets/{add-scalar-classes-B7027Ds2.js → add-scalar-classes-BPTxQDQd.js} +1 -1
  92. package/web/assets/{agent.store-CAhnz7FI.js → agent.store-DumNiX1X.js} +1 -1
  93. package/web/assets/{auth-DEwzvqNZ.js → auth-Qa1l14iV.js} +2 -2
  94. package/web/assets/{cloud-chat.store-Dw5IpDzc.js → cloud-chat.store-TYR1_27Z.js} +1 -1
  95. package/web/assets/{cloud-client-BmRvC15v.js → cloud-client-CdOqrdP_.js} +2 -2
  96. package/web/assets/{cloud-session-CxfJk0xr.js → cloud-session-Dd7b9wxV.js} +2 -2
  97. package/web/assets/dist-C9Qdh18x.js +1 -0
  98. package/web/assets/i18n-DipCGVKv.js +1 -0
  99. package/web/assets/{index-DSYMPMcP.js → index-BCU69ZHl.js} +7 -7
  100. package/web/assets/{index-CnXzQkLZ.css → index-Ck_3m_I9.css} +1 -1
  101. package/web/assets/{modal-CWJFP30c.js → modal-BgrgFhyC.js} +1 -1
  102. package/web/assets/notification.store-D2olEA0V.js +1 -0
  103. package/web/assets/{project-launch.store-_peuBwFo.js → project-launch.store-MX5LzgIm.js} +1 -1
  104. package/web/assets/{project.store-eANeFYaH.js → project.store-BFwiDQ1X.js} +1 -1
  105. package/web/assets/{scenario.store-C1Yj7c6l.js → scenario.store-C8kW-yTN.js} +1 -1
  106. package/web/assets/{service.store-Ck2_TmTB.js → service.store-B0Ass90H.js} +1 -1
  107. package/web/assets/{settings-scope-GiU9Nkh7.js → settings-scope-D0hzzuyq.js} +1 -1
  108. package/web/assets/settings.store-B9Kp0l1G.js +1 -0
  109. package/web/assets/{src-Bfb0PBSC.css → src-CfDz-9Q6.css} +1 -1
  110. package/web/assets/{src-DOcCcTQv.js → src-Ck_MutzB.js} +1 -1
  111. package/web/assets/{src-BsRUOIiC.js → src-DITmhvGS.js} +1 -1
  112. package/web/assets/src-DOziuDw8.css +1 -0
  113. package/web/assets/src-DnjsM9el.js +1960 -0
  114. package/web/assets/{trpc-Deb6EPHJ.js → trpc-BvrR5qP9.js} +3 -3
  115. package/web/assets/{useCloudOrg-7IK98BjW.js → useCloudOrg-2vv5fVV6.js} +1 -1
  116. package/web/assets/{useEnvVarAutocomplete-lfgStLwz.js → useEnvVarAutocomplete-VVX3MC62.js} +1 -1
  117. package/web/assets/{useEnvVarAutocomplete-B-LJ9dBm.css → useEnvVarAutocomplete-gV2loQYv.css} +1 -1
  118. package/web/assets/{useProjectCatalog-J40rgwRP.js → useProjectCatalog-DsVvtBzo.js} +1 -1
  119. package/web/assets/{useProjectCloudOrg-zePV-ihH.js → useProjectCloudOrg-wv-RfsmO.js} +1 -1
  120. package/web/assets/{useServiceUrlHost-BWtmwnoK.js → useServiceUrlHost-C4Evrede.js} +1 -1
  121. package/web/index.html +19 -19
  122. package/agent-manager-2KTEZXRO.js +0 -13
  123. package/chat-N2AYGN7I.js +0 -28
  124. package/chunk-3FSQ45SW.js.map +0 -1
  125. package/chunk-3JIJSGQW.js.map +0 -1
  126. package/chunk-7O54TV2Y.js.map +0 -1
  127. package/chunk-DA2DZBTL.js +0 -43
  128. package/chunk-DA2DZBTL.js.map +0 -1
  129. package/chunk-OCIKN4BK.js.map +0 -1
  130. package/mcp-ready-TAPBAOZY.js +0 -9
  131. package/settings-manager-QOLMKVP2.js +0 -10
  132. package/src-ZDXFSJMJ.js.map +0 -1
  133. package/vault-resolver-MX7WFBJ5.js.map +0 -1
  134. package/web/assets/AppLayout-BFCPOgV1.js +0 -1
  135. package/web/assets/CloudAccountPage-DXMDa3Zw.js +0 -1
  136. package/web/assets/EnvironmentForm-Do3i-fOk.css +0 -1
  137. package/web/assets/KanbanBoardPage-Bb_8xU-I.css +0 -1
  138. package/web/assets/ProcessDetailPage-CJcIxbLm.css +0 -1
  139. package/web/assets/ProcessDetailPage-Cy_9S9z8.js +0 -1
  140. package/web/assets/ScenarioEditorPage-DMZ_67kP.js +0 -14
  141. package/web/assets/ServiceDetailPage-C-RIYfjD.js +0 -2
  142. package/web/assets/dist-B6L3Jwj-.js +0 -1
  143. package/web/assets/i18n-BNITS3xi.js +0 -1
  144. package/web/assets/notification.store-C1JOcW8z.js +0 -1
  145. package/web/assets/settings.store-C6T1P_cU.js +0 -1
  146. package/web/assets/src-Dbg3CMY2.css +0 -1
  147. package/web/assets/src-Ip9ugq4e.js +0 -1960
  148. /package/{agent-manager-2KTEZXRO.js.map → agent-manager-SF4CAJJC.js.map} +0 -0
  149. /package/{chat-N2AYGN7I.js.map → chat-Z7SFBEXS.js.map} +0 -0
  150. /package/{chunk-ANZF5NLB.js.map → chunk-26Q43CB2.js.map} +0 -0
  151. /package/{chunk-IOPX7MWA.js.map → chunk-2DIW5EUT.js.map} +0 -0
  152. /package/{chunk-ZRMLIQZL.js.map → chunk-3C3R5ZVX.js.map} +0 -0
  153. /package/{chunk-I2EXJ2GI.js.map → chunk-3O54EIGT.js.map} +0 -0
  154. /package/{chunk-KTRL6RDH.js.map → chunk-DTRZ5ZN7.js.map} +0 -0
  155. /package/{chunk-NKOG7375.js.map → chunk-QD2OVLK4.js.map} +0 -0
  156. /package/{chunk-YTO4O3UK.js.map → chunk-TBNCGMDM.js.map} +0 -0
  157. /package/{companion-2YZZSKX5.js.map → companion-ZDEGNZ2G.js.map} +0 -0
  158. /package/{desktop-installer-page-526XOYLO.js.map → desktop-installer-page-TBKSXVFD.js.map} +0 -0
  159. /package/{desktop-launcher-WJPN6SPV.js.map → desktop-launcher-WBYP3KTF.js.map} +0 -0
  160. /package/{environment-resolver-I6KF27QP.js.map → environment-resolver-R2GH6QOX.js.map} +0 -0
  161. /package/{external-XHTD2IGX.js.map → external-UJ46WKBL.js.map} +0 -0
  162. /package/{install-gate-VIJIEVF2.js.map → install-gate-TSCXUCYE.js.map} +0 -0
  163. /package/{mcp-ready-TAPBAOZY.js.map → project-store-GBKM34QP.js.map} +0 -0
  164. /package/{project-store-GONXVR2N.js.map → settings-manager-VSOC3XGI.js.map} +0 -0
  165. /package/{settings-manager-QOLMKVP2.js.map → src-6WZKSNN7.js.map} +0 -0
  166. /package/{src-QMPTXT7D.js.map → vault-resolver-GGHULMG6.js.map} +0 -0
@@ -1 +1 @@
1
- .log-details[data-v-b2c352ef]{flex-direction:column;gap:1.5rem;display:flex}.log-details__section[data-v-b2c352ef]{flex-direction:column;gap:.5rem;display:flex}.log-details__label[data-v-b2c352ef]{text-transform:uppercase;color:var(--r-primary);letter-spacing:.05em;font-size:.75rem;font-weight:600}.log-details__value[data-v-b2c352ef]{color:var(--r-text);font-size:.875rem}.log-details__value--box[data-v-b2c352ef]{border:1px solid var(--r-border);padding:.75rem}.log-details__value--code[data-v-b2c352ef]{white-space:pre-wrap;word-break:break-word;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.8125rem;line-height:1.5}.log-details__process[data-v-b2c352ef]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.log-details__process span[data-v-b2c352ef]{word-break:break-all;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.8125rem}.service-terminal[data-v-e44dc775]{flex-direction:column;height:100%;display:flex;overflow:hidden}.service-terminal--fullscreen[data-v-e44dc775]{z-index:9999;position:fixed;inset:0}.service-terminal__header[data-v-e44dc775]{border-bottom:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.service-terminal__header-left[data-v-e44dc775]{align-items:center;gap:.625rem;display:flex}.service-terminal__name[data-v-e44dc775]{color:var(--r-text);font-size:1rem;font-weight:600}.service-terminal__state-tag[data-v-e44dc775]{font-size:.75rem}.service-terminal__header-right[data-v-e44dc775]{align-items:center;gap:.5rem;display:flex}.service-terminal__toolbar[data-v-e44dc775]{border-bottom:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;padding:.25rem .5rem;display:flex}.service-terminal__toolbar-left[data-v-e44dc775],.service-terminal__toolbar-right[data-v-e44dc775]{align-items:center;gap:.25rem;display:flex}.service-terminal__content[data-v-e44dc775]{flex:1;min-height:0;overflow:hidden}.service-terminal__shortcuts[data-v-e44dc775]{border-top:1px solid var(--r-border);background:var(--r-bg);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem 1rem;display:flex}.shortcut-badge[data-v-e44dc775]{font-size:.75rem}.service-terminal__command-input[data-v-e44dc775]{border-top:1px solid var(--r-border);background:var(--r-bg);align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.service-terminal__prompt[data-v-e44dc775]{color:var(--r-primary);font-family:Courier New,monospace;font-size:1rem;font-weight:600;line-height:1}.service-terminal__autocomplete[data-v-e44dc775]{flex:1}.service-terminal__autocomplete[data-v-e44dc775] .r-autocomplete__input{width:100%}.service-terminal__input[data-v-e44dc775]{color:var(--r-text);font-family:Courier New,monospace;font-size:.875rem;box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;padding:.5rem 0!important}.service-terminal__input[data-v-e44dc775]::placeholder{color:var(--r-text-muted);font-style:italic}.service-terminal__input[data-v-e44dc775]:disabled{opacity:.5;cursor:not-allowed}.service-terminal__bottom[data-v-e44dc775]{border-top:1px solid var(--r-border);background:var(--r-bg);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.service-terminal__pill[data-v-e44dc775]{text-overflow:ellipsis;max-width:200px;font-size:.75rem;overflow:hidden}.service-terminal__pid-selector[data-v-e44dc775]{min-width:200px}.pid-option[data-v-e44dc775]{align-items:center;gap:.5rem;width:100%;display:flex}.pid-option span[data-v-e44dc775]{flex:1}.pid-badge[data-v-e44dc775]{margin-left:auto;font-size:.625rem}.pid-status-icon[data-v-e44dc775]{margin-right:.5rem;font-size:.5rem}.pid-status-icon--active[data-v-e44dc775]{color:#22c55e}.pid-status-icon--stopped[data-v-e44dc775]{color:#94a3b8}.service-metrics[data-v-4ff9fccd]{flex-direction:column;height:100%;padding:1rem;display:flex;overflow-y:auto}.service-metrics__no-data[data-v-4ff9fccd],.service-metrics__no-process[data-v-4ff9fccd]{color:var(--r-text-muted);justify-content:center;align-items:center;gap:.5rem;padding:3rem;font-size:.9375rem;display:flex}.service-metrics__skeleton[data-v-4ff9fccd]{flex-wrap:wrap;gap:1rem;display:flex}.metric-skeleton[data-v-4ff9fccd]{border:1px solid var(--r-border);background:var(--r-bg);flex:1;min-width:160px;max-width:260px;padding:1rem}.config-general[data-v-7eb739ba]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-7eb739ba]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card--inline[data-v-7eb739ba]{justify-content:space-between;align-items:center;display:flex}.config-card__header[data-v-7eb739ba]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card--inline .config-card__header[data-v-7eb739ba]{margin-bottom:0}.config-card__input[data-v-7eb739ba]{width:100%}.config-card__hint[data-v-7eb739ba]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-meta[data-v-7eb739ba]{flex-direction:column;gap:.5rem;margin-top:.75rem;display:flex}.config-meta__row[data-v-7eb739ba]{align-items:center;gap:.5rem;display:flex}.config-meta__input[data-v-7eb739ba]{flex:1}.config-meta__input--wide[data-v-7eb739ba]{flex:2}.config-meta__add[data-v-7eb739ba]{align-self:flex-start}.docker-config[data-v-1a62039a]{flex-direction:column;gap:.75rem;display:flex}.docker-config__section[data-v-1a62039a]{flex-direction:column;gap:.375rem;display:flex}.docker-config__section-title[data-v-1a62039a]{color:var(--r-text);font-size:.875rem;font-weight:600}.docker-config__label[data-v-1a62039a]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.docker-config__input[data-v-1a62039a]{width:100%;max-width:480px}.docker-config__select[data-v-1a62039a]{width:100%;max-width:320px}.docker-config__mode-toggle.r-radio-group[data-v-1a62039a]{gap:1.5rem;display:flex}.docker-config__mode-toggle--indented.r-radio-group[data-v-1a62039a]{flex-direction:column;gap:.375rem;margin-top:.5rem;padding-left:1.5rem}.docker-config__mode-option[data-v-1a62039a]{cursor:pointer;align-items:center;gap:.375rem;font-size:.875rem;display:flex}.docker-config__kv-list[data-v-1a62039a]{flex-direction:column;gap:.5rem;display:flex}.docker-config__kv-row[data-v-1a62039a]{align-items:center;gap:.5rem;display:flex}.docker-config__kv-input[data-v-1a62039a]{flex:1}.docker-config__list[data-v-1a62039a]{flex-direction:column;gap:.5rem;display:flex}.docker-config__list-row[data-v-1a62039a]{align-items:center;gap:.5rem;display:flex}.docker-config__checkbox-row[data-v-1a62039a]{align-items:center;gap:.5rem;margin-bottom:.25rem;display:flex}.docker-config__checkbox-label[data-v-1a62039a]{cursor:pointer;font-size:.875rem}.docker-config__hint[data-v-1a62039a]{color:var(--r-text-muted);margin-top:.125rem;font-size:.75rem}.docker-config__shell-row[data-v-1a62039a]{flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:.25rem;padding-left:1.5rem;display:flex}.docker-config__shell-row .docker-config__label[data-v-1a62039a]{white-space:nowrap}.docker-config__shell-row .docker-config__hint[data-v-1a62039a]{margin-top:0}.docker-config__select--small[data-v-1a62039a]{max-width:180px}.docker-config__hint code[data-v-1a62039a]{font-family:monospace;font-size:.7rem}.docker-config__hint-inline[data-v-1a62039a]{color:var(--r-text-muted);font-size:.75rem;font-weight:400}.docker-config__bootstrap-card[data-v-1a62039a]{border:1px solid var(--r-border);background:var(--r-bg);padding:.75rem 1rem}.docker-config__bootstrap-row[data-v-1a62039a]{flex-wrap:wrap;align-items:flex-end;gap:.75rem;display:flex}.docker-config__bootstrap-field[data-v-1a62039a]{flex-direction:column;flex:1;gap:.25rem;min-width:120px;display:flex}.docker-config__bootstrap-field--wide[data-v-1a62039a]{flex:2;min-width:200px}.docker-config__bootstrap-actions[data-v-1a62039a]{align-items:center;gap:.125rem;padding-bottom:.125rem;display:flex}.config-commands[data-v-4820790b]{flex-direction:column;gap:.75rem;display:flex}.config-commands__tab-content[data-v-4820790b]{flex-direction:column;gap:.75rem;padding-top:.75rem;display:flex}.config-commands__empty[data-v-4820790b]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.config-card[data-v-4820790b]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__input[data-v-4820790b]{width:100%}.config-commands__row[data-v-4820790b]{align-items:flex-end;gap:.75rem;display:flex}.config-commands__field[data-v-4820790b]{flex-direction:column;flex:1;gap:.25rem;display:flex}.config-commands__field--wide[data-v-4820790b]{flex:2}.config-commands__label[data-v-4820790b]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.config-commands__actions-cell[data-v-4820790b]{align-items:center;padding-bottom:.125rem;display:flex}.config-commands__footer[data-v-4820790b]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.tab-icon[data-v-4820790b]{margin-right:.4rem;font-size:.85rem}.config-commands__execution[data-v-4820790b]{flex-wrap:wrap;align-items:stretch;gap:.75rem;padding-bottom:.25rem;display:flex}.config-card--execution[data-v-4820790b]{flex-direction:column;flex:1;gap:.5rem;min-width:180px;display:flex}.config-card__header[data-v-4820790b]{align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;display:flex}.config-card__hint[data-v-4820790b]{color:var(--r-text-muted);font-size:.78rem}.runner-option[data-v-4820790b]{align-items:center;gap:.5rem;display:flex}.config-env[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.active-env-display[data-v-5a6d4834]{background:var(--r-bg-hover);border-left:3px solid var(--r-primary);border-radius:4px;align-items:center;gap:.5rem;padding:.75rem 1rem;font-size:.875rem;display:flex}.active-env-label[data-v-5a6d4834]{color:var(--r-text-muted);font-weight:600}.inheritance-toggle[data-v-5a6d4834]{background:var(--r-bg-hover);border:1px solid var(--r-border);border-radius:4px;align-items:center;gap:.75rem;padding:.6rem 1rem;font-size:.875rem;display:flex}.inheritance-label[data-v-5a6d4834]{color:var(--r-text)}.config-env__header[data-v-5a6d4834]{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.5rem;display:flex}.config-env__title[data-v-5a6d4834]{color:var(--r-text);flex:1;margin:0;font-size:1rem;font-weight:600}.config-env__actions[data-v-5a6d4834]{align-items:center;gap:.5rem;display:flex}.variables-view[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.inherited-accordion[data-v-5a6d4834]{margin-top:.25rem}.inherited-header[data-v-5a6d4834]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;display:inline-flex}.inherited-header .ti[data-v-5a6d4834]{font-size:.8rem}.empty-state[data-v-5a6d4834]{text-align:center;color:var(--r-text-muted);border:1px dashed var(--r-border);border-radius:4px;padding:2rem}.editor-container[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.editor-env-banner[data-v-5a6d4834]{background:var(--r-bg-hover);color:var(--r-text);border-radius:6px;align-items:center;gap:.4rem;padding:.65rem .85rem;font-size:.85rem;display:flex}.editor-env-text[data-v-5a6d4834]{margin-right:.15rem}.editor-section[data-v-5a6d4834]{flex-direction:column;gap:.75rem;display:flex}.preview-container[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.preview-info[data-v-5a6d4834]{color:var(--r-text-muted);margin:0;font-size:.875rem;font-style:italic}.preview-key[data-v-5a6d4834]{color:var(--r-text);font-family:JetBrains Mono,Fira Code,monospace;font-size:.85rem;font-weight:600}.preview-value[data-v-5a6d4834]{color:var(--r-text);word-break:break-all;font-family:JetBrains Mono,Fira Code,monospace;font-size:.85rem}.loading-container[data-v-5a6d4834]{justify-content:center;padding:2rem;display:flex}[data-v-5a6d4834] .preview-container .r-datatable{margin-top:1rem}.passthrough-info[data-v-5a6d4834]{color:var(--r-text-muted);margin:0 0 .5rem;font-size:.8rem;font-style:italic}.passthrough-undefined[data-v-5a6d4834]{color:var(--r-orange-500);font-size:.85rem;font-style:italic}.inherited-row-key[data-v-5a6d4834]{flex-direction:column;gap:.2rem;display:flex}.source-badge[data-v-5a6d4834]{opacity:.7;font-size:.7rem}.secret-mask[data-v-5a6d4834]{color:var(--r-text-muted,#6b7280);font-size:.85rem;font-style:italic}.value-row[data-v-5a6d4834]{align-items:center;display:inline-flex}.value-actions[data-v-5a6d4834]{flex-shrink:0;align-items:center;gap:.2rem;margin-right:.4rem;display:inline-flex}.action-icon[data-v-5a6d4834]{color:var(--r-text-muted,#9ca3af);cursor:pointer;padding:.15rem;font-size:.75rem;transition:color .15s}.action-icon[data-v-5a6d4834]:hover{color:var(--r-text)}.action-icon.ti-check[data-v-5a6d4834]{color:var(--r-green-500,#22c55e)}.config-health[data-v-956bcc34]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-956bcc34]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card--inline[data-v-956bcc34]{justify-content:space-between;align-items:center;display:flex}.config-card__header[data-v-956bcc34]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card--inline .config-card__header[data-v-956bcc34]{margin-bottom:0}.config-card__input[data-v-956bcc34]{width:100%}.config-card__hint[data-v-956bcc34]{color:var(--r-text-muted);margin-top:.25rem;font-size:.75rem;display:block}.config-shortcuts[data-v-cbad556b]{flex-direction:column;gap:.75rem;display:flex}.config-shortcuts__empty[data-v-cbad556b]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.config-card[data-v-cbad556b]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__input[data-v-cbad556b]{width:100%}.config-shortcuts__row[data-v-cbad556b]{align-items:flex-end;gap:.75rem;display:flex}.config-shortcuts__field[data-v-cbad556b]{flex-direction:column;flex:1;gap:.25rem;display:flex}.config-shortcuts__field--wide[data-v-cbad556b]{flex:2}.config-shortcuts__label[data-v-cbad556b]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.config-shortcuts__actions-cell[data-v-cbad556b]{align-items:center;padding-bottom:.125rem;display:flex}.config-shortcuts__footer[data-v-cbad556b]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.config-log-parsers[data-v-b8de20cf]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-b8de20cf]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__header[data-v-b8de20cf]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card__hint[data-v-b8de20cf]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-card__header-hint[data-v-b8de20cf]{color:var(--r-text-muted);margin-left:auto;font-size:.75rem;font-weight:400}.config-log-parsers__drag-list[data-v-b8de20cf]{flex-direction:column;gap:.375rem;margin-top:.5rem;display:flex}.config-log-parsers__drag-row[data-v-b8de20cf]{border:1px solid var(--r-border);background:var(--r-bg-hover);-webkit-user-select:none;user-select:none;align-items:center;gap:.625rem;padding:.4rem .625rem;display:flex}.drag-handle[data-v-b8de20cf]{cursor:grab;color:var(--r-text-muted);flex-shrink:0}.drag-handle[data-v-b8de20cf]:active{cursor:grabbing}.config-log-parsers__order[data-v-b8de20cf]{text-align:center;width:1.25rem;color:var(--r-text-muted);flex-shrink:0;font-size:.75rem;font-weight:700}.config-log-parsers__name[data-v-b8de20cf]{flex:1;font-size:.875rem;font-weight:500}.config-log-parsers__delete[data-v-b8de20cf]{flex-shrink:0;margin-left:auto}.config-log-parsers__empty[data-v-b8de20cf]{color:var(--r-text-muted);padding:1rem 0 .5rem;font-size:.875rem}.config-log-parsers__add-row[data-v-b8de20cf]{border-top:1px solid var(--r-border);align-items:center;gap:.5rem;margin-top:.75rem;padding-top:.75rem;display:flex}.config-log-parsers__add-select[data-v-b8de20cf]{flex:1}.config-log-parsers__footer[data-v-b8de20cf]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.config-log-sources[data-v-122cf0a9]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-122cf0a9]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__header[data-v-122cf0a9]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card__hint[data-v-122cf0a9]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-card--list[data-v-122cf0a9]{flex-direction:column;gap:.375rem;padding:.5rem;display:flex}.source-row[data-v-122cf0a9]{border:1px solid var(--r-border);background:var(--r-bg-hover);align-items:center;gap:.75rem;padding:.5rem .625rem;display:flex}.source-row__icon[data-v-122cf0a9]{color:var(--r-text-muted);flex-shrink:0}.source-row__info[data-v-122cf0a9]{flex-direction:column;flex:1;gap:.125rem;min-width:0;display:flex}.source-row__type[data-v-122cf0a9]{text-transform:uppercase;color:var(--r-primary);letter-spacing:.04em;font-size:.7rem;font-weight:700}.source-row__label[data-v-122cf0a9]{color:var(--r-text);white-space:nowrap;text-overflow:ellipsis;font-size:.8125rem;overflow:hidden}.source-row__actions[data-v-122cf0a9]{flex-shrink:0;gap:.25rem;display:flex}.config-log-sources__empty[data-v-122cf0a9]{text-align:center;color:var(--r-text-muted);border:1px dashed var(--r-border);padding:2rem;font-size:.875rem}.config-log-sources__empty-icon[data-v-122cf0a9]{opacity:.4;margin-bottom:.5rem;font-size:2rem;display:block}.config-log-sources__empty p[data-v-122cf0a9]{margin:0 0 .25rem}.config-log-sources__footer[data-v-122cf0a9]{justify-content:flex-end;padding-top:.25rem;display:flex}.dialog-form[data-v-122cf0a9]{flex-direction:column;gap:.875rem;padding-top:.25rem;display:flex}.dialog-form__row[data-v-122cf0a9]{gap:.75rem;display:flex}.dialog-form__row .dialog-form__field[data-v-122cf0a9]{flex:1}.dialog-form__field--port[data-v-122cf0a9]{flex:0 0 100px!important}.dialog-form__field--grow[data-v-122cf0a9]{flex:2!important}.dialog-form__field[data-v-122cf0a9]{flex-direction:column;gap:.3rem;display:flex}.dialog-form__field--row[data-v-122cf0a9]{flex-direction:row;justify-content:space-between;align-items:center}.dialog-form__label[data-v-122cf0a9]{color:var(--r-text-muted);font-size:.8rem;font-weight:600}.dialog-form__input[data-v-122cf0a9]{width:100%}.dialog-form__required[data-v-122cf0a9]{color:var(--r-red-500,#ef4444)}.dialog-form__hint[data-v-122cf0a9]{color:var(--r-text-muted);font-size:.75rem;font-weight:400}.dialog-form__hint-block[data-v-122cf0a9]{color:var(--r-text-muted);background:var(--r-bg-hover);padding:.5rem;font-size:.8rem;display:block}.config-traefik[data-v-37776b09]{flex-direction:column;gap:.75rem;padding:1rem 0;display:flex}.traefik-entry[data-v-37776b09]{align-items:center;gap:.5rem;min-width:0;display:flex}.traefik-entry__fields[data-v-37776b09]{flex:1;align-items:center;gap:.5rem;min-width:0;display:flex}.traefik-entry__url[data-v-37776b09]{flex:1;min-width:0}.traefik-entry__port[data-v-37776b09]{flex:0 0 100px}.config-view[data-v-204a6ce7]{flex-direction:column;height:100%;padding:1rem;display:flex;overflow-y:auto}.config-view__header[data-v-204a6ce7]{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.config-view__title[data-v-204a6ce7]{color:var(--r-text);margin:0;font-size:1.125rem;font-weight:600}.config-view__tabs[data-v-204a6ce7]{flex:1}.tab-icon[data-v-204a6ce7]{margin-right:.4rem;font-size:.85rem}.service-detail[data-v-ac012903]{height:100%}.service-detail__not-found[data-v-ac012903]{height:100%;color:var(--r-text-muted);justify-content:center;align-items:center;display:flex}
1
+ .log-details[data-v-b2c352ef]{flex-direction:column;gap:1.5rem;display:flex}.log-details__section[data-v-b2c352ef]{flex-direction:column;gap:.5rem;display:flex}.log-details__label[data-v-b2c352ef]{text-transform:uppercase;color:var(--r-primary);letter-spacing:.05em;font-size:.75rem;font-weight:600}.log-details__value[data-v-b2c352ef]{color:var(--r-text);font-size:.875rem}.log-details__value--box[data-v-b2c352ef]{border:1px solid var(--r-border);padding:.75rem}.log-details__value--code[data-v-b2c352ef]{white-space:pre-wrap;word-break:break-word;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.8125rem;line-height:1.5}.log-details__process[data-v-b2c352ef]{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem;display:flex}.log-details__process span[data-v-b2c352ef]{word-break:break-all;font-family:JetBrains Mono,Fira Code,Consolas,monospace;font-size:.8125rem}.service-terminal[data-v-f6ad7888]{flex-direction:column;height:100%;display:flex;overflow:hidden}.service-terminal--fullscreen[data-v-f6ad7888]{z-index:9999;position:fixed;inset:0}.service-terminal__header[data-v-f6ad7888]{border-bottom:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;padding:.75rem 1rem;display:flex}.service-terminal__header-left[data-v-f6ad7888]{align-items:center;gap:.625rem;display:flex}.service-terminal__name[data-v-f6ad7888]{color:var(--r-text);font-size:1rem;font-weight:600}.service-terminal__state-tag[data-v-f6ad7888]{font-size:.75rem}.service-terminal__header-right[data-v-f6ad7888]{align-items:center;gap:.5rem;display:flex}.service-terminal__toolbar[data-v-f6ad7888]{border-bottom:1px solid var(--r-border);background:var(--r-bg);justify-content:space-between;align-items:center;padding:.25rem .5rem;display:flex}.service-terminal__toolbar-left[data-v-f6ad7888],.service-terminal__toolbar-right[data-v-f6ad7888]{align-items:center;gap:.25rem;display:flex}.service-terminal__content[data-v-f6ad7888]{flex:1;min-height:0;overflow:hidden}.service-terminal__shortcuts[data-v-f6ad7888]{border-top:1px solid var(--r-border);background:var(--r-bg);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.375rem 1rem;display:flex}.shortcut-badge[data-v-f6ad7888]{font-size:.75rem}.service-terminal__command-input[data-v-f6ad7888]{border-top:1px solid var(--r-border);background:var(--r-bg);align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.service-terminal__prompt[data-v-f6ad7888]{color:var(--r-primary);font-family:Courier New,monospace;font-size:1rem;font-weight:600;line-height:1}.service-terminal__autocomplete[data-v-f6ad7888]{flex:1}.service-terminal__autocomplete[data-v-f6ad7888] .r-autocomplete__input{width:100%}.service-terminal__input[data-v-f6ad7888]{color:var(--r-text);font-family:Courier New,monospace;font-size:.875rem;box-shadow:none!important;background:0 0!important;border:none!important;outline:none!important;padding:.5rem 0!important}.service-terminal__input[data-v-f6ad7888]::placeholder{color:var(--r-text-muted);font-style:italic}.service-terminal__input[data-v-f6ad7888]:disabled{opacity:.5;cursor:not-allowed}.service-terminal__bottom[data-v-f6ad7888]{border-top:1px solid var(--r-border);background:var(--r-bg);flex-wrap:wrap;align-items:center;gap:.5rem;padding:.5rem 1rem;display:flex}.service-terminal__pill[data-v-f6ad7888]{text-overflow:ellipsis;max-width:200px;font-size:.75rem;overflow:hidden}.service-terminal__pid-selector[data-v-f6ad7888]{min-width:200px}.pid-option[data-v-f6ad7888]{align-items:center;gap:.5rem;width:100%;display:flex}.pid-option span[data-v-f6ad7888]{flex:1}.pid-badge[data-v-f6ad7888]{margin-left:auto;font-size:.625rem}.pid-status-icon[data-v-f6ad7888]{margin-right:.5rem;font-size:.5rem}.pid-status-icon--active[data-v-f6ad7888]{color:#22c55e}.pid-status-icon--stopped[data-v-f6ad7888]{color:#94a3b8}.service-metrics[data-v-4ff9fccd]{flex-direction:column;height:100%;padding:1rem;display:flex;overflow-y:auto}.service-metrics__no-data[data-v-4ff9fccd],.service-metrics__no-process[data-v-4ff9fccd]{color:var(--r-text-muted);justify-content:center;align-items:center;gap:.5rem;padding:3rem;font-size:.9375rem;display:flex}.service-metrics__skeleton[data-v-4ff9fccd]{flex-wrap:wrap;gap:1rem;display:flex}.metric-skeleton[data-v-4ff9fccd]{border:1px solid var(--r-border);background:var(--r-bg);flex:1;min-width:160px;max-width:260px;padding:1rem}.config-general[data-v-185c896b]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-185c896b]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card--inline[data-v-185c896b]{justify-content:space-between;align-items:center;display:flex}.config-card__header[data-v-185c896b]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card--inline .config-card__header[data-v-185c896b]{margin-bottom:0}.config-card__input[data-v-185c896b]{width:100%}.config-card__hint[data-v-185c896b]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-meta[data-v-185c896b]{flex-direction:column;gap:.5rem;margin-top:.75rem;display:flex}.config-meta__row[data-v-185c896b]{align-items:center;gap:.5rem;display:flex}.config-meta__input[data-v-185c896b]{flex:1}.config-meta__input--wide[data-v-185c896b]{flex:2}.config-meta__add[data-v-185c896b]{align-self:flex-start}.docker-config[data-v-f21b0663]{flex-direction:column;gap:.75rem;display:flex}.docker-config__section[data-v-f21b0663]{flex-direction:column;gap:.375rem;display:flex}.docker-config__section-title[data-v-f21b0663]{color:var(--r-text);font-size:.875rem;font-weight:600}.docker-config__label[data-v-f21b0663]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.docker-config__input[data-v-f21b0663]{width:100%;max-width:480px}.docker-config__select[data-v-f21b0663]{width:100%;max-width:320px}.docker-config__mode-toggle.r-radio-group[data-v-f21b0663]{gap:1.5rem;display:flex}.docker-config__mode-toggle--indented.r-radio-group[data-v-f21b0663]{flex-direction:column;gap:.375rem;margin-top:.5rem;padding-left:1.5rem}.docker-config__mode-option[data-v-f21b0663]{cursor:pointer;align-items:center;gap:.375rem;font-size:.875rem;display:flex}.docker-config__kv-list[data-v-f21b0663]{flex-direction:column;gap:.5rem;display:flex}.docker-config__kv-row[data-v-f21b0663]{align-items:center;gap:.5rem;display:flex}.docker-config__kv-input[data-v-f21b0663]{flex:1}.docker-config__list[data-v-f21b0663]{flex-direction:column;gap:.5rem;display:flex}.docker-config__list-row[data-v-f21b0663]{align-items:center;gap:.5rem;display:flex}.docker-config__checkbox-row[data-v-f21b0663]{align-items:center;gap:.5rem;margin-bottom:.25rem;display:flex}.docker-config__checkbox-label[data-v-f21b0663]{cursor:pointer;font-size:.875rem}.docker-config__hint[data-v-f21b0663]{color:var(--r-text-muted);margin-top:.125rem;font-size:.75rem}.docker-config__shell-row[data-v-f21b0663]{flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:.25rem;padding-left:1.5rem;display:flex}.docker-config__shell-row .docker-config__label[data-v-f21b0663]{white-space:nowrap}.docker-config__shell-row .docker-config__hint[data-v-f21b0663]{margin-top:0}.docker-config__select--small[data-v-f21b0663]{max-width:180px}.docker-config__hint code[data-v-f21b0663]{font-family:monospace;font-size:.7rem}.docker-config__hint-inline[data-v-f21b0663]{color:var(--r-text-muted);font-size:.75rem;font-weight:400}.docker-config__bootstrap-card[data-v-f21b0663]{border:1px solid var(--r-border);background:var(--r-bg);padding:.75rem 1rem}.docker-config__bootstrap-row[data-v-f21b0663]{flex-wrap:wrap;align-items:flex-end;gap:.75rem;display:flex}.docker-config__bootstrap-field[data-v-f21b0663]{flex-direction:column;flex:1;gap:.25rem;min-width:120px;display:flex}.docker-config__bootstrap-field--wide[data-v-f21b0663]{flex:2;min-width:200px}.docker-config__bootstrap-actions[data-v-f21b0663]{align-items:center;gap:.125rem;padding-bottom:.125rem;display:flex}.config-commands[data-v-c90b3f31]{flex-direction:column;gap:.75rem;display:flex}.config-commands__tab-content[data-v-c90b3f31]{flex-direction:column;gap:.75rem;padding-top:.75rem;display:flex}.config-commands__empty[data-v-c90b3f31]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.config-card[data-v-c90b3f31]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__input[data-v-c90b3f31]{width:100%}.config-commands__row[data-v-c90b3f31]{align-items:flex-end;gap:.75rem;display:flex}.config-commands__field[data-v-c90b3f31]{flex-direction:column;flex:1;gap:.25rem;display:flex}.config-commands__field--wide[data-v-c90b3f31]{flex:2}.config-commands__label[data-v-c90b3f31]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.config-commands__actions-cell[data-v-c90b3f31]{align-items:center;padding-bottom:.125rem;display:flex}.config-commands__footer[data-v-c90b3f31]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.tab-icon[data-v-c90b3f31]{margin-right:.4rem;font-size:.85rem}.config-commands__execution[data-v-c90b3f31]{flex-wrap:wrap;align-items:stretch;gap:.75rem;padding-bottom:.25rem;display:flex}.config-card--execution[data-v-c90b3f31]{flex-direction:column;flex:1;gap:.5rem;min-width:180px;display:flex}.config-card__header[data-v-c90b3f31]{align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;display:flex}.config-card__hint[data-v-c90b3f31]{color:var(--r-text-muted);font-size:.78rem}.runner-option[data-v-c90b3f31]{align-items:center;gap:.5rem;display:flex}.config-env[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.active-env-display[data-v-5a6d4834]{background:var(--r-bg-hover);border-left:3px solid var(--r-primary);border-radius:4px;align-items:center;gap:.5rem;padding:.75rem 1rem;font-size:.875rem;display:flex}.active-env-label[data-v-5a6d4834]{color:var(--r-text-muted);font-weight:600}.inheritance-toggle[data-v-5a6d4834]{background:var(--r-bg-hover);border:1px solid var(--r-border);border-radius:4px;align-items:center;gap:.75rem;padding:.6rem 1rem;font-size:.875rem;display:flex}.inheritance-label[data-v-5a6d4834]{color:var(--r-text)}.config-env__header[data-v-5a6d4834]{justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.5rem;display:flex}.config-env__title[data-v-5a6d4834]{color:var(--r-text);flex:1;margin:0;font-size:1rem;font-weight:600}.config-env__actions[data-v-5a6d4834]{align-items:center;gap:.5rem;display:flex}.variables-view[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.inherited-accordion[data-v-5a6d4834]{margin-top:.25rem}.inherited-header[data-v-5a6d4834]{color:var(--r-text-muted);align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;display:inline-flex}.inherited-header .ti[data-v-5a6d4834]{font-size:.8rem}.empty-state[data-v-5a6d4834]{text-align:center;color:var(--r-text-muted);border:1px dashed var(--r-border);border-radius:4px;padding:2rem}.editor-container[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.editor-env-banner[data-v-5a6d4834]{background:var(--r-bg-hover);color:var(--r-text);border-radius:6px;align-items:center;gap:.4rem;padding:.65rem .85rem;font-size:.85rem;display:flex}.editor-env-text[data-v-5a6d4834]{margin-right:.15rem}.editor-section[data-v-5a6d4834]{flex-direction:column;gap:.75rem;display:flex}.preview-container[data-v-5a6d4834]{flex-direction:column;gap:1rem;display:flex}.preview-info[data-v-5a6d4834]{color:var(--r-text-muted);margin:0;font-size:.875rem;font-style:italic}.preview-key[data-v-5a6d4834]{color:var(--r-text);font-family:JetBrains Mono,Fira Code,monospace;font-size:.85rem;font-weight:600}.preview-value[data-v-5a6d4834]{color:var(--r-text);word-break:break-all;font-family:JetBrains Mono,Fira Code,monospace;font-size:.85rem}.loading-container[data-v-5a6d4834]{justify-content:center;padding:2rem;display:flex}[data-v-5a6d4834] .preview-container .r-datatable{margin-top:1rem}.passthrough-info[data-v-5a6d4834]{color:var(--r-text-muted);margin:0 0 .5rem;font-size:.8rem;font-style:italic}.passthrough-undefined[data-v-5a6d4834]{color:var(--r-orange-500);font-size:.85rem;font-style:italic}.inherited-row-key[data-v-5a6d4834]{flex-direction:column;gap:.2rem;display:flex}.source-badge[data-v-5a6d4834]{opacity:.7;font-size:.7rem}.secret-mask[data-v-5a6d4834]{color:var(--r-text-muted,#6b7280);font-size:.85rem;font-style:italic}.value-row[data-v-5a6d4834]{align-items:center;display:inline-flex}.value-actions[data-v-5a6d4834]{flex-shrink:0;align-items:center;gap:.2rem;margin-right:.4rem;display:inline-flex}.action-icon[data-v-5a6d4834]{color:var(--r-text-muted,#9ca3af);cursor:pointer;padding:.15rem;font-size:.75rem;transition:color .15s}.action-icon[data-v-5a6d4834]:hover{color:var(--r-text)}.action-icon.ti-check[data-v-5a6d4834]{color:var(--r-green-500,#22c55e)}.config-health[data-v-956bcc34]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-956bcc34]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card--inline[data-v-956bcc34]{justify-content:space-between;align-items:center;display:flex}.config-card__header[data-v-956bcc34]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card--inline .config-card__header[data-v-956bcc34]{margin-bottom:0}.config-card__input[data-v-956bcc34]{width:100%}.config-card__hint[data-v-956bcc34]{color:var(--r-text-muted);margin-top:.25rem;font-size:.75rem;display:block}.config-shortcuts[data-v-a2fc0ecc]{flex-direction:column;gap:.75rem;display:flex}.config-shortcuts__empty[data-v-a2fc0ecc]{text-align:center;color:var(--r-text-muted);padding:1.5rem;font-size:.875rem}.config-card[data-v-a2fc0ecc]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__input[data-v-a2fc0ecc]{width:100%}.config-shortcuts__row[data-v-a2fc0ecc]{align-items:flex-end;gap:.75rem;display:flex}.config-shortcuts__field[data-v-a2fc0ecc]{flex-direction:column;flex:1;gap:.25rem;display:flex}.config-shortcuts__field--wide[data-v-a2fc0ecc]{flex:2}.config-shortcuts__label[data-v-a2fc0ecc]{color:var(--r-text-muted);font-size:.75rem;font-weight:600}.config-shortcuts__actions-cell[data-v-a2fc0ecc]{align-items:center;padding-bottom:.125rem;display:flex}.config-shortcuts__footer[data-v-a2fc0ecc]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.config-log-parsers[data-v-b8de20cf]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-b8de20cf]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__header[data-v-b8de20cf]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card__hint[data-v-b8de20cf]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-card__header-hint[data-v-b8de20cf]{color:var(--r-text-muted);margin-left:auto;font-size:.75rem;font-weight:400}.config-log-parsers__drag-list[data-v-b8de20cf]{flex-direction:column;gap:.375rem;margin-top:.5rem;display:flex}.config-log-parsers__drag-row[data-v-b8de20cf]{border:1px solid var(--r-border);background:var(--r-bg-hover);-webkit-user-select:none;user-select:none;align-items:center;gap:.625rem;padding:.4rem .625rem;display:flex}.drag-handle[data-v-b8de20cf]{cursor:grab;color:var(--r-text-muted);flex-shrink:0}.drag-handle[data-v-b8de20cf]:active{cursor:grabbing}.config-log-parsers__order[data-v-b8de20cf]{text-align:center;width:1.25rem;color:var(--r-text-muted);flex-shrink:0;font-size:.75rem;font-weight:700}.config-log-parsers__name[data-v-b8de20cf]{flex:1;font-size:.875rem;font-weight:500}.config-log-parsers__delete[data-v-b8de20cf]{flex-shrink:0;margin-left:auto}.config-log-parsers__empty[data-v-b8de20cf]{color:var(--r-text-muted);padding:1rem 0 .5rem;font-size:.875rem}.config-log-parsers__add-row[data-v-b8de20cf]{border-top:1px solid var(--r-border);align-items:center;gap:.5rem;margin-top:.75rem;padding-top:.75rem;display:flex}.config-log-parsers__add-select[data-v-b8de20cf]{flex:1}.config-log-parsers__footer[data-v-b8de20cf]{justify-content:space-between;align-items:center;padding-top:.5rem;display:flex}.config-log-sources[data-v-3dc28b03]{flex-direction:column;gap:.75rem;display:flex}.config-card[data-v-3dc28b03]{border:1px solid var(--r-border);background:var(--r-bg);padding:.875rem 1rem}.config-card__header[data-v-3dc28b03]{color:var(--r-text-muted);align-items:center;gap:.5rem;margin-bottom:.5rem;font-size:.8125rem;font-weight:600;display:flex}.config-card__hint[data-v-3dc28b03]{color:var(--r-text-muted);margin-top:.3rem;font-size:.78rem;display:block}.config-card--list[data-v-3dc28b03]{flex-direction:column;gap:.375rem;padding:.5rem;display:flex}.source-row[data-v-3dc28b03]{border:1px solid var(--r-border);background:var(--r-bg-hover);align-items:center;gap:.75rem;padding:.5rem .625rem;display:flex}.source-row__icon[data-v-3dc28b03]{color:var(--r-text-muted);flex-shrink:0}.source-row__info[data-v-3dc28b03]{flex-direction:column;flex:1;gap:.125rem;min-width:0;display:flex}.source-row__type[data-v-3dc28b03]{text-transform:uppercase;color:var(--r-primary);letter-spacing:.04em;font-size:.7rem;font-weight:700}.source-row__label[data-v-3dc28b03]{color:var(--r-text);white-space:nowrap;text-overflow:ellipsis;font-size:.8125rem;overflow:hidden}.source-row__actions[data-v-3dc28b03]{flex-shrink:0;gap:.25rem;display:flex}.config-log-sources__empty[data-v-3dc28b03]{text-align:center;color:var(--r-text-muted);border:1px dashed var(--r-border);padding:2rem;font-size:.875rem}.config-log-sources__empty-icon[data-v-3dc28b03]{opacity:.4;margin-bottom:.5rem;font-size:2rem;display:block}.config-log-sources__empty p[data-v-3dc28b03]{margin:0 0 .25rem}.config-log-sources__footer[data-v-3dc28b03]{justify-content:flex-end;padding-top:.25rem;display:flex}.dialog-form[data-v-3dc28b03]{flex-direction:column;gap:.875rem;padding-top:.25rem;display:flex}.dialog-form__row[data-v-3dc28b03]{gap:.75rem;display:flex}.dialog-form__row .dialog-form__field[data-v-3dc28b03]{flex:1}.dialog-form__field--port[data-v-3dc28b03]{flex:0 0 100px!important}.dialog-form__field--grow[data-v-3dc28b03]{flex:2!important}.dialog-form__field[data-v-3dc28b03]{flex-direction:column;gap:.3rem;display:flex}.dialog-form__field--row[data-v-3dc28b03]{flex-direction:row;justify-content:space-between;align-items:center}.dialog-form__label[data-v-3dc28b03]{color:var(--r-text-muted);font-size:.8rem;font-weight:600}.dialog-form__input[data-v-3dc28b03]{width:100%}.dialog-form__required[data-v-3dc28b03]{color:var(--r-red-500,#ef4444)}.dialog-form__hint[data-v-3dc28b03]{color:var(--r-text-muted);font-size:.75rem;font-weight:400}.dialog-form__hint-block[data-v-3dc28b03]{color:var(--r-text-muted);background:var(--r-bg-hover);padding:.5rem;font-size:.8rem;display:block}.config-traefik[data-v-20f0ef5a]{flex-direction:column;gap:.75rem;padding:1rem 0;display:flex}.traefik-entry[data-v-20f0ef5a]{align-items:center;gap:.5rem;min-width:0;display:flex}.traefik-entry__fields[data-v-20f0ef5a]{flex:1;align-items:center;gap:.5rem;min-width:0;display:flex}.traefik-entry__url[data-v-20f0ef5a]{flex:1;min-width:0}.traefik-entry__port[data-v-20f0ef5a]{flex:0 0 100px}.config-view[data-v-0526cbd4]{flex-direction:column;height:100%;padding:1rem;display:flex;overflow-y:auto}.config-view__header[data-v-0526cbd4]{justify-content:space-between;align-items:center;margin-bottom:1rem;display:flex}.config-view__title[data-v-0526cbd4]{color:var(--r-text);margin:0;font-size:1.125rem;font-weight:600}.config-view__tabs[data-v-0526cbd4]{flex:1}.tab-icon[data-v-0526cbd4]{margin-right:.4rem;font-size:.85rem}.service-detail[data-v-ac012903]{height:100%}.service-detail__not-found[data-v-ac012903]{height:100%;color:var(--r-text-muted);justify-content:center;align-items:center;display:flex}
@@ -1 +1 @@
1
- import{B as e,C as t,x as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as r,_ as i,b as a,bt as o,ct as ee,g as s,k as c,mt as l,o as u,qt as te,rn as d,y as f}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as p,w as m}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as ne}from"./vue-i18n-o7yraQpR.js";import{n as re}from"./project-launch.store-_peuBwFo.js";import{g as ie,h as ae}from"./useApi-s_02lHjl-DZYO2tHU.js";import{F as oe,H as se,J as h,P as ce,S as g,dt as _,ft as v,i as le,k as ue,l as y,z as b}from"./src-DOcCcTQv.js";import{r as x}from"./trpc-Deb6EPHJ.js";import{n as de}from"./project.store-eANeFYaH.js";import{n as S}from"./error-DpF7X5iu.js";import{t as fe}from"./service.store-Ck2_TmTB.js";import{t as pe}from"./agent.store-CAhnz7FI.js";import{c as me}from"./index-DSYMPMcP.js";var he={class:`service-form-page`},ge={class:`page-header`},_e={key:0,class:`restart-banner`},ve={key:1,class:`loading-container`},ye={class:`form-section`},be={class:`form-group`},C={for:`svc-project`},w={class:`form-hint`},T={class:`form-group`},E={for:`svc-agent`},D={class:`form-hint`},O={class:`form-group`},k={for:`svc-name`},A={class:`form-hint`},j={class:`form-actions`},M={class:`form-section`},N={class:`form-row`},xe={class:`form-group flex-1`},Se={for:`svc-name-edit`},Ce={class:`form-group`,style:{width:`160px`}},we={for:`svc-runner`},Te={class:`form-group`},Ee={for:`svc-agent-edit`},De={class:`form-hint`},Oe={class:`form-row`},ke={class:`form-group flex-1`},Ae={for:`svc-cwd`},je={class:`form-group`,style:{"min-width":`200px`}},Me={for:`svc-ports`},Ne={class:`form-group switch-group`},Pe={for:`svc-autorestart`},P={class:`form-section`},Fe={class:`section-header`},Ie={key:0,class:`empty-env`},Le={class:`form-group`},Re={for:`hc-path`},ze={class:`form-row`},Be={class:`form-group flex-1`},Ve={for:`hc-interval`},He={class:`form-group flex-1`},Ue={for:`hc-timeout`},We={class:`form-group flex-1`},Ge={for:`hc-retries`},F=`__inherit__`,I=v(c({__name:`ServiceFormPage`,props:{id:{}},setup(c){let v=c,I=ie(),Ke=ae(),L=ce(),R=de(),z=fe(),B=pe(),V=re(),qe=me(),{t:H}=ne(),U=s(()=>!!v.id),W=s(()=>Ke.query.projectId),G=t(!1),K=t(!1),q=t(null),J=t(null),Y=t(!1),X=n({projectId:``,agentId:F,name:``,cwd:``,ports:[],runner:`native`,autoRestart:!1,healthCheck:{enabled:!1,path:``,interval:3e4,timeout:5e3,retries:3}}),Z=t([]),Je=[{label:`Native`,value:`native`},{label:`Docker`,value:`docker`}],Ye=s(()=>R.projects.map(e=>({label:e.name,value:e.id}))),Q=s(()=>[{label:H(`serviceForm.agentInherit`),value:F},...B.agents.map(e=>({label:`${e.config.name} ${e.status.connected?`(Online)`:`(Offline)`}`,value:e.config.id}))]);function Xe(){Z.value=[...Z.value,{key:``,value:``,isSecret:!1}]}function Ze(e){Z.value=Z.value.filter((t,n)=>n!==e)}function Qe(){let e={},t=!1;for(let n of Z.value){let r=n.key.trim();r&&(e[r]={value:{value:n.value,pre:``,post:``,isSecret:n.isSecret}},t=!0)}return t?e:void 0}async function $e(){if(v.id){G.value=!0;try{let e=await x.service.get.query({id:v.id});X.agentId=e.agentId??F,X.name=e.name,X.cwd=e.cwd??``,X.ports=(e.ports??[]).map(String),X.runner=e.runner,X.autoRestart=e.autoRestart,e.healthCheck&&(X.healthCheck.enabled=!0,X.healthCheck.path=e.healthCheck.path,X.healthCheck.interval=e.healthCheck.interval,X.healthCheck.timeout=e.healthCheck.timeout,X.healthCheck.retries=e.healthCheck.retries),e.variables&&typeof e.variables==`object`&&Object.keys(e.variables).length>0&&(Z.value=Object.entries(e.variables).map(([e,t])=>{let n=t;return{key:e,value:n.value.value??``,isSecret:n.value.isSecret??!1}}))}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToLoad`),life:5e3}),I.back()}finally{G.value=!1}}}async function $(){if(U.value&&v.id&&!K.value&&!G.value){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}K.value=!0;try{let e={agentId:X.agentId===F?null:X.agentId||null,name:X.name.trim(),cwd:X.cwd.trim()||void 0,ports:X.ports.map(Number).filter(e=>e>0&&e<=65535),runner:X.runner,autoRestart:X.autoRestart,variables:Qe(),healthCheck:X.healthCheck.enabled?{path:X.healthCheck.path,interval:X.healthCheck.interval,timeout:X.healthCheck.timeout,retries:X.healthCheck.retries}:void 0};(await x.service.update.mutate({id:v.id,...e}))?.stoppedForAgentChange?(q.value=e.agentId,J.value=v.id,L.add({severity:`warn`,summary:H(`serviceForm.saved`),detail:H(`serviceForm.agentChangedServiceStopped`),life:4e3})):L.add({severity:`success`,summary:H(`serviceForm.saved`),life:1500})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}}async function et(){if(q.value&&J.value){Y.value=!0;try{await qe.start(q.value,J.value),q.value=null,J.value=null,L.add({severity:`success`,summary:H(`serviceForm.restarted`),life:2e3})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e),life:5e3})}finally{Y.value=!1}}}async function tt(){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}if(!X.projectId){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.projectRequired`),life:3e3});return}K.value=!0;try{let e=R.getByRef({id:X.projectId,orgId:V.activeOrgId})??R.getById(X.projectId),t=await z.create({name:X.name.trim(),...X.agentId&&X.agentId!==F?{agentId:X.agentId}:{},projectId:X.projectId,orgId:e?.orgId??null});if(!t)throw Error(z.error??`Failed to create service`);await R.addService(e??{id:X.projectId},t.id),L.add({severity:`success`,summary:H(`serviceForm.serviceCreated`),detail:H(`serviceForm.configureAfterCreate`),life:3e3}),I.push({name:`service-detail`,params:{id:t.id,tab:`config`}})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}return ee(async()=>{await Promise.all([R.fetchAll(),B.fetchAll()]),W.value?X.projectId=W.value:!X.projectId&&V.activeProjectId&&(X.projectId=V.activeProjectId),U.value&&await $e()}),(t,n)=>(l(),a(`div`,he,[i(`div`,ge,[r(e(_),{icon:`ti ti-arrow-left`,severity:`secondary`,variant:`text`,rounded:``,onClick:n[0]||=t=>e(I).back()}),i(`h1`,null,d(U.value?e(H)(`serviceForm.editTitle`):e(H)(`serviceForm.createTitle`)),1)]),J.value?(l(),a(`div`,_e,[i(`span`,null,d(e(H)(`serviceForm.agentChangedServiceStopped`)),1),r(e(_),{label:e(H)(`serviceForm.restartNow`),icon:`ti ti-player-play`,severity:`warn`,size:`small`,loading:Y.value,onClick:et},null,8,[`label`,`loading`]),r(e(_),{icon:`ti ti-x`,severity:`secondary`,variant:`text`,rounded:``,size:`small`,onClick:n[1]||=e=>{J.value=null,q.value=null}})])):f(``,!0),G.value?(l(),a(`div`,ve,[r(e(se))])):(l(),a(`form`,{key:2,class:`service-form`,onSubmit:m(tt,[`prevent`])},[U.value?(l(),a(u,{key:1},[i(`div`,M,[i(`div`,N,[i(`div`,xe,[i(`label`,Se,d(e(H)(`serviceForm.nameLabelShort`)),1),r(e(h),{id:`svc-name-edit`,modelValue:X.name,"onUpdate:modelValue":n[6]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,Ce,[i(`label`,we,d(e(H)(`serviceForm.runnerLabel`)),1),r(e(g),{id:`svc-runner`,modelValue:X.runner,"onUpdate:modelValue":n[7]||=e=>X.runner=e,options:Je,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`])])]),i(`div`,Te,[i(`label`,Ee,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent-edit`,modelValue:X.agentId,"onUpdate:modelValue":n[8]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`,`options`]),i(`small`,De,d(e(H)(`serviceForm.agentHintEdit`)),1)]),i(`div`,Oe,[i(`div`,ke,[i(`label`,Ae,d(e(H)(`serviceForm.cwdLabel`)),1),r(e(h),{id:`svc-cwd`,modelValue:X.cwd,"onUpdate:modelValue":n[9]||=e=>X.cwd=e,placeholder:`.`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,je,[i(`label`,Me,d(e(H)(`serviceForm.portsLabel`)),1),r(e(le),{inputId:`svc-ports`,modelValue:X.ports,"onUpdate:modelValue":n[10]||=e=>X.ports=e,multiple:``,typeahead:!1,placeholder:e(H)(`serviceForm.portsPlaceholder`),class:`w-full`,onChange:$},null,8,[`modelValue`,`placeholder`])])]),i(`div`,Ne,[r(e(ue),{modelValue:X.autoRestart,"onUpdate:modelValue":n[11]||=e=>X.autoRestart=e,inputId:`svc-autorestart`,onChange:$},null,8,[`modelValue`]),i(`label`,Pe,d(e(H)(`serviceForm.autoRestart`)),1)])]),r(e(b)),i(`div`,P,[i(`div`,Fe,[i(`h3`,null,d(e(H)(`serviceForm.envVars`)),1),r(e(_),{label:e(H)(`serviceForm.addEnvVar`),icon:`ti ti-plus`,severity:`secondary`,size:`small`,onClick:Xe},null,8,[`label`])]),Z.value.length===0?(l(),a(`div`,Ie,[i(`small`,null,d(e(H)(`serviceForm.noEnvVars`)),1)])):f(``,!0),(l(!0),a(u,null,o(Z.value,(t,o)=>(l(),a(`div`,{key:o,class:`env-row`},[r(e(h),{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:`KEY`,class:`env-key`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),n[17]||=i(`span`,{class:`env-eq`},`=`,-1),r(e(h),{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:`value`,class:`env-value`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),r(e(_),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{Ze(o),$()}},null,8,[`onClick`])]))),128))]),r(e(b)),r(e(oe),{legend:e(H)(`serviceForm.healthCheck`),toggleable:!0,collapsed:!X.healthCheck.enabled,onToggle:n[16]||=e=>{X.healthCheck.enabled=!e.value,$()}},{default:te(()=>[i(`div`,Le,[i(`label`,Re,d(e(H)(`serviceForm.healthCheckPath`)),1),r(e(h),{id:`hc-path`,modelValue:X.healthCheck.path,"onUpdate:modelValue":n[12]||=e=>X.healthCheck.path=e,placeholder:`/health`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,ze,[i(`div`,Be,[i(`label`,Ve,d(e(H)(`serviceForm.interval`)),1),r(e(y),{id:`hc-interval`,modelValue:X.healthCheck.interval,"onUpdate:modelValue":n[13]||=e=>X.healthCheck.interval=e,min:1e3,step:1e3,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,He,[i(`label`,Ue,d(e(H)(`serviceForm.timeout`)),1),r(e(y),{id:`hc-timeout`,modelValue:X.healthCheck.timeout,"onUpdate:modelValue":n[14]||=e=>X.healthCheck.timeout=e,min:500,step:500,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,We,[i(`label`,Ge,d(e(H)(`serviceForm.retries`)),1),r(e(y),{id:`hc-retries`,modelValue:X.healthCheck.retries,"onUpdate:modelValue":n[15]||=e=>X.healthCheck.retries=e,min:0,max:20,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])])]),_:1},8,[`legend`,`collapsed`]),r(e(b))],64)):(l(),a(u,{key:0},[i(`div`,ye,[i(`div`,be,[i(`label`,C,d(e(H)(`serviceForm.projectLabel`)),1),r(e(g),{id:`svc-project`,modelValue:X.projectId,"onUpdate:modelValue":n[2]||=e=>X.projectId=e,options:Ye.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.projectPlaceholder`),class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,w,d(e(H)(`serviceForm.projectHint`)),1)]),i(`div`,T,[i(`label`,E,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent`,modelValue:X.agentId,"onUpdate:modelValue":n[3]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.agentInherit`),"show-clear":``,class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,D,d(e(H)(`serviceForm.agentHint`)),1)]),i(`div`,O,[i(`label`,k,d(e(H)(`serviceForm.nameLabel`)),1),r(e(h),{id:`svc-name`,modelValue:X.name,"onUpdate:modelValue":n[4]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`},null,8,[`modelValue`]),i(`small`,A,d(e(H)(`serviceForm.nameConfigHint`)),1)])]),r(e(b)),i(`div`,j,[r(e(_),{label:e(H)(`serviceForm.cancel`),severity:`secondary`,variant:`text`,onClick:n[5]||=t=>e(I).back()},null,8,[`label`]),r(e(_),{label:e(H)(`serviceForm.create`),icon:`ti ti-check`,loading:K.value,type:`submit`},null,8,[`label`,`loading`])])],64))],32))]))}}),[[`__scopeId`,`data-v-d66dd220`]]);export{I as default};
1
+ import{B as e,C as t,x as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as r,_ as i,b as a,bt as o,ct as ee,g as s,k as c,mt as l,o as u,qt as te,rn as d,y as f}from"./runtime-core.esm-bundler-DujKY9QV.js";import{C as p,w as m}from"./runtime-dom.esm-bundler-CyEVRK6B.js";import{n as ne}from"./vue-i18n-o7yraQpR.js";import{n as re}from"./project-launch.store-MX5LzgIm.js";import{g as ie,h as ae}from"./useApi-s_02lHjl-DZYO2tHU.js";import{F as oe,H as se,J as h,P as ce,S as g,dt as _,ft as v,i as le,k as ue,l as y,z as b}from"./src-Ck_MutzB.js";import{r as x}from"./trpc-BvrR5qP9.js";import{n as de}from"./project.store-BFwiDQ1X.js";import{n as S}from"./error-DpF7X5iu.js";import{t as fe}from"./service.store-B0Ass90H.js";import{t as pe}from"./agent.store-DumNiX1X.js";import{c as me}from"./index-BCU69ZHl.js";var he={class:`service-form-page`},ge={class:`page-header`},_e={key:0,class:`restart-banner`},ve={key:1,class:`loading-container`},ye={class:`form-section`},be={class:`form-group`},C={for:`svc-project`},w={class:`form-hint`},T={class:`form-group`},E={for:`svc-agent`},D={class:`form-hint`},O={class:`form-group`},k={for:`svc-name`},A={class:`form-hint`},j={class:`form-actions`},M={class:`form-section`},N={class:`form-row`},xe={class:`form-group flex-1`},Se={for:`svc-name-edit`},Ce={class:`form-group`,style:{width:`160px`}},we={for:`svc-runner`},Te={class:`form-group`},Ee={for:`svc-agent-edit`},De={class:`form-hint`},Oe={class:`form-row`},ke={class:`form-group flex-1`},Ae={for:`svc-cwd`},je={class:`form-group`,style:{"min-width":`200px`}},Me={for:`svc-ports`},Ne={class:`form-group switch-group`},Pe={for:`svc-autorestart`},P={class:`form-section`},Fe={class:`section-header`},Ie={key:0,class:`empty-env`},Le={class:`form-group`},Re={for:`hc-path`},ze={class:`form-row`},Be={class:`form-group flex-1`},Ve={for:`hc-interval`},He={class:`form-group flex-1`},Ue={for:`hc-timeout`},We={class:`form-group flex-1`},Ge={for:`hc-retries`},F=`__inherit__`,I=v(c({__name:`ServiceFormPage`,props:{id:{}},setup(c){let v=c,I=ie(),Ke=ae(),L=ce(),R=de(),z=fe(),B=pe(),V=re(),qe=me(),{t:H}=ne(),U=s(()=>!!v.id),W=s(()=>Ke.query.projectId),G=t(!1),K=t(!1),q=t(null),J=t(null),Y=t(!1),X=n({projectId:``,agentId:F,name:``,cwd:``,ports:[],runner:`native`,autoRestart:!1,healthCheck:{enabled:!1,path:``,interval:3e4,timeout:5e3,retries:3}}),Z=t([]),Je=[{label:`Native`,value:`native`},{label:`Docker`,value:`docker`}],Ye=s(()=>R.projects.map(e=>({label:e.name,value:e.id}))),Q=s(()=>[{label:H(`serviceForm.agentInherit`),value:F},...B.agents.map(e=>({label:`${e.config.name} ${e.status.connected?`(Online)`:`(Offline)`}`,value:e.config.id}))]);function Xe(){Z.value=[...Z.value,{key:``,value:``,isSecret:!1}]}function Ze(e){Z.value=Z.value.filter((t,n)=>n!==e)}function Qe(){let e={},t=!1;for(let n of Z.value){let r=n.key.trim();r&&(e[r]={value:{value:n.value,pre:``,post:``,isSecret:n.isSecret}},t=!0)}return t?e:void 0}async function $e(){if(v.id){G.value=!0;try{let e=await x.service.get.query({id:v.id});X.agentId=e.agentId??F,X.name=e.name,X.cwd=e.cwd??``,X.ports=(e.ports??[]).map(String),X.runner=e.runner,X.autoRestart=e.autoRestart,e.healthCheck&&(X.healthCheck.enabled=!0,X.healthCheck.path=e.healthCheck.path,X.healthCheck.interval=e.healthCheck.interval,X.healthCheck.timeout=e.healthCheck.timeout,X.healthCheck.retries=e.healthCheck.retries),e.variables&&typeof e.variables==`object`&&Object.keys(e.variables).length>0&&(Z.value=Object.entries(e.variables).map(([e,t])=>{let n=t;return{key:e,value:n.value.value??``,isSecret:n.value.isSecret??!1}}))}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToLoad`),life:5e3}),I.back()}finally{G.value=!1}}}async function $(){if(U.value&&v.id&&!K.value&&!G.value){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}K.value=!0;try{let e={agentId:X.agentId===F?null:X.agentId||null,name:X.name.trim(),cwd:X.cwd.trim()||void 0,ports:X.ports.map(Number).filter(e=>e>0&&e<=65535),runner:X.runner,autoRestart:X.autoRestart,variables:Qe(),healthCheck:X.healthCheck.enabled?{path:X.healthCheck.path,interval:X.healthCheck.interval,timeout:X.healthCheck.timeout,retries:X.healthCheck.retries}:void 0};(await x.service.update.mutate({id:v.id,...e}))?.stoppedForAgentChange?(q.value=e.agentId,J.value=v.id,L.add({severity:`warn`,summary:H(`serviceForm.saved`),detail:H(`serviceForm.agentChangedServiceStopped`),life:4e3})):L.add({severity:`success`,summary:H(`serviceForm.saved`),life:1500})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}}async function et(){if(q.value&&J.value){Y.value=!0;try{await qe.start(q.value,J.value),q.value=null,J.value=null,L.add({severity:`success`,summary:H(`serviceForm.restarted`),life:2e3})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e),life:5e3})}finally{Y.value=!1}}}async function tt(){if(!X.name.trim()){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.nameRequired`),life:3e3});return}if(!X.projectId){L.add({severity:`warn`,summary:H(`serviceForm.validation`),detail:H(`serviceForm.projectRequired`),life:3e3});return}K.value=!0;try{let e=R.getByRef({id:X.projectId,orgId:V.activeOrgId})??R.getById(X.projectId),t=await z.create({name:X.name.trim(),...X.agentId&&X.agentId!==F?{agentId:X.agentId}:{},projectId:X.projectId,orgId:e?.orgId??null});if(!t)throw Error(z.error??`Failed to create service`);await R.addService(e??{id:X.projectId},t.id),L.add({severity:`success`,summary:H(`serviceForm.serviceCreated`),detail:H(`serviceForm.configureAfterCreate`),life:3e3}),I.push({name:`service-detail`,params:{id:t.id,tab:`config`}})}catch(e){L.add({severity:`error`,summary:H(`serviceForm.error`),detail:S(e)??H(`serviceForm.failedToSave`),life:5e3})}finally{K.value=!1}}return ee(async()=>{await Promise.all([R.fetchAll(),B.fetchAll()]),W.value?X.projectId=W.value:!X.projectId&&V.activeProjectId&&(X.projectId=V.activeProjectId),U.value&&await $e()}),(t,n)=>(l(),a(`div`,he,[i(`div`,ge,[r(e(_),{icon:`ti ti-arrow-left`,severity:`secondary`,variant:`text`,rounded:``,onClick:n[0]||=t=>e(I).back()}),i(`h1`,null,d(U.value?e(H)(`serviceForm.editTitle`):e(H)(`serviceForm.createTitle`)),1)]),J.value?(l(),a(`div`,_e,[i(`span`,null,d(e(H)(`serviceForm.agentChangedServiceStopped`)),1),r(e(_),{label:e(H)(`serviceForm.restartNow`),icon:`ti ti-player-play`,severity:`warn`,size:`small`,loading:Y.value,onClick:et},null,8,[`label`,`loading`]),r(e(_),{icon:`ti ti-x`,severity:`secondary`,variant:`text`,rounded:``,size:`small`,onClick:n[1]||=e=>{J.value=null,q.value=null}})])):f(``,!0),G.value?(l(),a(`div`,ve,[r(e(se))])):(l(),a(`form`,{key:2,class:`service-form`,onSubmit:m(tt,[`prevent`])},[U.value?(l(),a(u,{key:1},[i(`div`,M,[i(`div`,N,[i(`div`,xe,[i(`label`,Se,d(e(H)(`serviceForm.nameLabelShort`)),1),r(e(h),{id:`svc-name-edit`,modelValue:X.name,"onUpdate:modelValue":n[6]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,Ce,[i(`label`,we,d(e(H)(`serviceForm.runnerLabel`)),1),r(e(g),{id:`svc-runner`,modelValue:X.runner,"onUpdate:modelValue":n[7]||=e=>X.runner=e,options:Je,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`])])]),i(`div`,Te,[i(`label`,Ee,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent-edit`,modelValue:X.agentId,"onUpdate:modelValue":n[8]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,class:`w-full`,onChange:$},null,8,[`modelValue`,`options`]),i(`small`,De,d(e(H)(`serviceForm.agentHintEdit`)),1)]),i(`div`,Oe,[i(`div`,ke,[i(`label`,Ae,d(e(H)(`serviceForm.cwdLabel`)),1),r(e(h),{id:`svc-cwd`,modelValue:X.cwd,"onUpdate:modelValue":n[9]||=e=>X.cwd=e,placeholder:`.`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,je,[i(`label`,Me,d(e(H)(`serviceForm.portsLabel`)),1),r(e(le),{inputId:`svc-ports`,modelValue:X.ports,"onUpdate:modelValue":n[10]||=e=>X.ports=e,multiple:``,typeahead:!1,placeholder:e(H)(`serviceForm.portsPlaceholder`),class:`w-full`,onChange:$},null,8,[`modelValue`,`placeholder`])])]),i(`div`,Ne,[r(e(ue),{modelValue:X.autoRestart,"onUpdate:modelValue":n[11]||=e=>X.autoRestart=e,inputId:`svc-autorestart`,onChange:$},null,8,[`modelValue`]),i(`label`,Pe,d(e(H)(`serviceForm.autoRestart`)),1)])]),r(e(b)),i(`div`,P,[i(`div`,Fe,[i(`h3`,null,d(e(H)(`serviceForm.envVars`)),1),r(e(_),{label:e(H)(`serviceForm.addEnvVar`),icon:`ti ti-plus`,severity:`secondary`,size:`small`,onClick:Xe},null,8,[`label`])]),Z.value.length===0?(l(),a(`div`,Ie,[i(`small`,null,d(e(H)(`serviceForm.noEnvVars`)),1)])):f(``,!0),(l(!0),a(u,null,o(Z.value,(t,o)=>(l(),a(`div`,{key:o,class:`env-row`},[r(e(h),{modelValue:t.key,"onUpdate:modelValue":e=>t.key=e,placeholder:`KEY`,class:`env-key`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),n[17]||=i(`span`,{class:`env-eq`},`=`,-1),r(e(h),{modelValue:t.value,"onUpdate:modelValue":e=>t.value=e,placeholder:`value`,class:`env-value`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onUpdate:modelValue`,`onKeydown`]),r(e(_),{icon:`ti ti-trash`,severity:`danger`,variant:`text`,rounded:``,size:`small`,onClick:()=>{Ze(o),$()}},null,8,[`onClick`])]))),128))]),r(e(b)),r(e(oe),{legend:e(H)(`serviceForm.healthCheck`),toggleable:!0,collapsed:!X.healthCheck.enabled,onToggle:n[16]||=e=>{X.healthCheck.enabled=!e.value,$()}},{default:te(()=>[i(`div`,Le,[i(`label`,Re,d(e(H)(`serviceForm.healthCheckPath`)),1),r(e(h),{id:`hc-path`,modelValue:X.healthCheck.path,"onUpdate:modelValue":n[12]||=e=>X.healthCheck.path=e,placeholder:`/health`,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,ze,[i(`div`,Be,[i(`label`,Ve,d(e(H)(`serviceForm.interval`)),1),r(e(y),{id:`hc-interval`,modelValue:X.healthCheck.interval,"onUpdate:modelValue":n[13]||=e=>X.healthCheck.interval=e,min:1e3,step:1e3,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,He,[i(`label`,Ue,d(e(H)(`serviceForm.timeout`)),1),r(e(y),{id:`hc-timeout`,modelValue:X.healthCheck.timeout,"onUpdate:modelValue":n[14]||=e=>X.healthCheck.timeout=e,min:500,step:500,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])]),i(`div`,We,[i(`label`,Ge,d(e(H)(`serviceForm.retries`)),1),r(e(y),{id:`hc-retries`,modelValue:X.healthCheck.retries,"onUpdate:modelValue":n[15]||=e=>X.healthCheck.retries=e,min:0,max:20,class:`w-full`,onBlur:$,onKeydown:p(m($,[`prevent`]),[`enter`])},null,8,[`modelValue`,`onKeydown`])])])]),_:1},8,[`legend`,`collapsed`]),r(e(b))],64)):(l(),a(u,{key:0},[i(`div`,ye,[i(`div`,be,[i(`label`,C,d(e(H)(`serviceForm.projectLabel`)),1),r(e(g),{id:`svc-project`,modelValue:X.projectId,"onUpdate:modelValue":n[2]||=e=>X.projectId=e,options:Ye.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.projectPlaceholder`),class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,w,d(e(H)(`serviceForm.projectHint`)),1)]),i(`div`,T,[i(`label`,E,d(e(H)(`serviceForm.agentLabel`)),1),r(e(g),{id:`svc-agent`,modelValue:X.agentId,"onUpdate:modelValue":n[3]||=e=>X.agentId=e,options:Q.value,optionLabel:`label`,optionValue:`value`,placeholder:e(H)(`serviceForm.agentInherit`),"show-clear":``,class:`w-full`},null,8,[`modelValue`,`options`,`placeholder`]),i(`small`,D,d(e(H)(`serviceForm.agentHint`)),1)]),i(`div`,O,[i(`label`,k,d(e(H)(`serviceForm.nameLabel`)),1),r(e(h),{id:`svc-name`,modelValue:X.name,"onUpdate:modelValue":n[4]||=e=>X.name=e,placeholder:`my-service`,class:`w-full`},null,8,[`modelValue`]),i(`small`,A,d(e(H)(`serviceForm.nameConfigHint`)),1)])]),r(e(b)),i(`div`,j,[r(e(_),{label:e(H)(`serviceForm.cancel`),severity:`secondary`,variant:`text`,onClick:n[5]||=t=>e(I).back()},null,8,[`label`]),r(e(_),{label:e(H)(`serviceForm.create`),icon:`ti ti-check`,loading:K.value,type:`submit`},null,8,[`label`,`loading`])])],64))],32))]))}}),[[`__scopeId`,`data-v-d66dd220`]]);export{I as default};