@omnitron-dev/omnitron 0.3.5 → 0.4.6

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 (267) hide show
  1. package/README.md +296 -6
  2. package/bin/{pnpmfile-sdk.mjs → pnpmfile-sdk.js} +13 -0
  3. package/bin/sdk.d.ts +19 -0
  4. package/bin/sdk.js +932 -0
  5. package/dist/BUILD.json +2 -2
  6. package/dist/cli/omnitron.js +14 -6
  7. package/dist/cli/omnitron.js.map +1 -1
  8. package/dist/commands/stack.d.ts +2 -5
  9. package/dist/commands/stack.d.ts.map +1 -1
  10. package/dist/commands/stack.js +32 -0
  11. package/dist/commands/stack.js.map +1 -1
  12. package/dist/commands/status.d.ts.map +1 -1
  13. package/dist/commands/status.js +1 -0
  14. package/dist/commands/status.js.map +1 -1
  15. package/dist/daemon/daemon-client.d.ts +3 -15
  16. package/dist/daemon/daemon-client.d.ts.map +1 -1
  17. package/dist/daemon/daemon-client.js +4 -0
  18. package/dist/daemon/daemon-client.js.map +1 -1
  19. package/dist/daemon/daemon.d.ts +5 -11
  20. package/dist/daemon/daemon.d.ts.map +1 -1
  21. package/dist/daemon/daemon.js +28 -42
  22. package/dist/daemon/daemon.js.map +1 -1
  23. package/dist/daemon/daemon.rpc-service.d.ts +3 -15
  24. package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
  25. package/dist/daemon/daemon.rpc-service.js +27 -3
  26. package/dist/daemon/daemon.rpc-service.js.map +1 -1
  27. package/dist/daemon/darwin-owner-evidence.js +1 -1
  28. package/dist/daemon/darwin-owner-evidence.js.map +1 -1
  29. package/dist/daemon/execution-capabilities.d.ts +1 -1
  30. package/dist/daemon/execution-capabilities.d.ts.map +1 -1
  31. package/dist/daemon/execution-capabilities.js +3 -3
  32. package/dist/daemon/execution-capabilities.js.map +1 -1
  33. package/dist/daemon/execution-client.d.ts +4 -0
  34. package/dist/daemon/execution-client.d.ts.map +1 -1
  35. package/dist/daemon/execution-client.js +28 -6
  36. package/dist/daemon/execution-client.js.map +1 -1
  37. package/dist/daemon/execution-host.d.ts +4 -11
  38. package/dist/daemon/execution-host.d.ts.map +1 -1
  39. package/dist/daemon/execution-host.js +3 -9
  40. package/dist/daemon/execution-host.js.map +1 -1
  41. package/dist/daemon/execution-owner.d.ts.map +1 -1
  42. package/dist/daemon/execution-owner.js +2 -16
  43. package/dist/daemon/execution-owner.js.map +1 -1
  44. package/dist/daemon/execution-shutdown.d.ts +1 -1
  45. package/dist/daemon/execution-shutdown.d.ts.map +1 -1
  46. package/dist/daemon/managed-owner-build.d.ts +4 -0
  47. package/dist/daemon/managed-owner-build.d.ts.map +1 -1
  48. package/dist/daemon/managed-owner-build.js +14 -2
  49. package/dist/daemon/managed-owner-build.js.map +1 -1
  50. package/dist/daemon/managed-runtime.js +1 -1
  51. package/dist/daemon/managed-runtime.js.map +1 -1
  52. package/dist/daemon/owner-reconciliation.d.ts.map +1 -1
  53. package/dist/daemon/owner-reconciliation.js +1 -2
  54. package/dist/daemon/owner-reconciliation.js.map +1 -1
  55. package/dist/daemon/system-guardian-cgroup.js +1 -1
  56. package/dist/daemon/system-guardian-cgroup.js.map +1 -1
  57. package/dist/infrastructure/existing-containers.d.ts +25 -0
  58. package/dist/infrastructure/existing-containers.d.ts.map +1 -0
  59. package/dist/infrastructure/existing-containers.js +183 -0
  60. package/dist/infrastructure/existing-containers.js.map +1 -0
  61. package/dist/infrastructure/infrastructure.service.d.ts +14 -1
  62. package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
  63. package/dist/infrastructure/infrastructure.service.js +118 -9
  64. package/dist/infrastructure/infrastructure.service.js.map +1 -1
  65. package/dist/infrastructure/stack-infra-manager.d.ts +8 -2
  66. package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
  67. package/dist/infrastructure/stack-infra-manager.js +46 -9
  68. package/dist/infrastructure/stack-infra-manager.js.map +1 -1
  69. package/dist/monitoring/log-journal.d.ts.map +1 -1
  70. package/dist/monitoring/log-journal.js +1 -2
  71. package/dist/monitoring/log-journal.js.map +1 -1
  72. package/dist/operations.d.ts +1 -0
  73. package/dist/operations.d.ts.map +1 -1
  74. package/dist/operations.js +1 -0
  75. package/dist/operations.js.map +1 -1
  76. package/dist/orchestrator/bootstrap-loader.d.ts +2 -0
  77. package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
  78. package/dist/orchestrator/bootstrap-loader.js +2 -1
  79. package/dist/orchestrator/bootstrap-loader.js.map +1 -1
  80. package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
  81. package/dist/orchestrator/classic-launcher.js +2 -1
  82. package/dist/orchestrator/classic-launcher.js.map +1 -1
  83. package/dist/orchestrator/execution-contract.d.ts +2 -3
  84. package/dist/orchestrator/execution-contract.d.ts.map +1 -1
  85. package/dist/orchestrator/file-watcher.d.ts +11 -23
  86. package/dist/orchestrator/file-watcher.d.ts.map +1 -1
  87. package/dist/orchestrator/file-watcher.js +57 -42
  88. package/dist/orchestrator/file-watcher.js.map +1 -1
  89. package/dist/orchestrator/orchestrator.service.d.ts +10 -5
  90. package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
  91. package/dist/orchestrator/orchestrator.service.js +117 -20
  92. package/dist/orchestrator/orchestrator.service.js.map +1 -1
  93. package/dist/project/bootstrap-metadata.d.ts +1 -1
  94. package/dist/project/bootstrap-metadata.d.ts.map +1 -1
  95. package/dist/project/bootstrap-metadata.js +3 -2
  96. package/dist/project/bootstrap-metadata.js.map +1 -1
  97. package/dist/project/node-stack-stop.d.ts +2 -1
  98. package/dist/project/node-stack-stop.d.ts.map +1 -1
  99. package/dist/project/node-stack-stop.js +5 -1
  100. package/dist/project/node-stack-stop.js.map +1 -1
  101. package/dist/release/closure-library-path.d.ts +8 -2
  102. package/dist/release/closure-library-path.d.ts.map +1 -1
  103. package/dist/release/closure-library-path.js +72 -28
  104. package/dist/release/closure-library-path.js.map +1 -1
  105. package/dist/release/local-installation.d.ts +2 -0
  106. package/dist/release/local-installation.d.ts.map +1 -1
  107. package/dist/release/local-installation.js +1 -1
  108. package/dist/release/local-installation.js.map +1 -1
  109. package/dist/release/portable-archive.d.ts +3 -0
  110. package/dist/release/portable-archive.d.ts.map +1 -1
  111. package/dist/release/portable-archive.js +13 -7
  112. package/dist/release/portable-archive.js.map +1 -1
  113. package/dist/release/registry-framework.d.ts +25 -0
  114. package/dist/release/registry-framework.d.ts.map +1 -1
  115. package/dist/release/registry-framework.js +51 -3
  116. package/dist/release/registry-framework.js.map +1 -1
  117. package/dist/release/target-runtime.d.ts +4 -0
  118. package/dist/release/target-runtime.d.ts.map +1 -1
  119. package/dist/release/target-runtime.js +9 -0
  120. package/dist/release/target-runtime.js.map +1 -1
  121. package/dist/services/host-upgrade.d.ts +2 -0
  122. package/dist/services/host-upgrade.d.ts.map +1 -1
  123. package/dist/services/host-upgrade.js +6 -2
  124. package/dist/services/host-upgrade.js.map +1 -1
  125. package/dist/services/infrastructure.rpc-service.d.ts +8 -0
  126. package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
  127. package/dist/services/infrastructure.rpc-service.js +90 -10
  128. package/dist/services/infrastructure.rpc-service.js.map +1 -1
  129. package/dist/services/kernel-rollout.service.d.ts.map +1 -1
  130. package/dist/services/kernel-rollout.service.js +1 -2
  131. package/dist/services/kernel-rollout.service.js.map +1 -1
  132. package/dist/services/migration-process.d.ts +1 -0
  133. package/dist/services/migration-process.d.ts.map +1 -1
  134. package/dist/services/migration-process.js +4 -2
  135. package/dist/services/migration-process.js.map +1 -1
  136. package/dist/services/pipeline-definition.d.ts.map +1 -1
  137. package/dist/services/pipeline-definition.js +32 -6
  138. package/dist/services/pipeline-definition.js.map +1 -1
  139. package/dist/services/pipeline.service.d.ts +7 -1
  140. package/dist/services/pipeline.service.d.ts.map +1 -1
  141. package/dist/services/pipeline.service.js +106 -13
  142. package/dist/services/pipeline.service.js.map +1 -1
  143. package/dist/services/project.rpc-service.d.ts +6 -5
  144. package/dist/services/project.rpc-service.d.ts.map +1 -1
  145. package/dist/services/project.rpc-service.js +13 -0
  146. package/dist/services/project.rpc-service.js.map +1 -1
  147. package/dist/services/project.service.d.ts +24 -6
  148. package/dist/services/project.service.d.ts.map +1 -1
  149. package/dist/services/project.service.js +327 -59
  150. package/dist/services/project.service.js.map +1 -1
  151. package/dist/services/remote-deployer.service.d.ts.map +1 -1
  152. package/dist/services/remote-deployer.service.js +3 -0
  153. package/dist/services/remote-deployer.service.js.map +1 -1
  154. package/dist/shared/dto/backend.d.ts +3 -0
  155. package/dist/shared/dto/backend.d.ts.map +1 -1
  156. package/dist/shared/dto/backend.js.map +1 -1
  157. package/dist/shared/dto/pipelines.d.ts +54 -5
  158. package/dist/shared/dto/pipelines.d.ts.map +1 -1
  159. package/dist/shared/dto/pipelines.js +0 -7
  160. package/dist/shared/dto/pipelines.js.map +1 -1
  161. package/dist/shared/dto/project.d.ts +60 -0
  162. package/dist/shared/dto/project.d.ts.map +1 -1
  163. package/dist/shared/dto/services.d.ts +26 -17
  164. package/dist/shared/dto/services.d.ts.map +1 -1
  165. package/dist/shared/dto/services.js.map +1 -1
  166. package/dist/workers/system-worker-manager.d.ts +1 -2
  167. package/dist/workers/system-worker-manager.d.ts.map +1 -1
  168. package/dist/workers/system-worker-manager.js +5 -3
  169. package/dist/workers/system-worker-manager.js.map +1 -1
  170. package/package.json +17 -16
  171. package/webapp/dist/BUILD.json +2 -2
  172. package/webapp/dist/assets/{access-DUjabwNX.js → access-B2gXuoMG.js} +1 -1
  173. package/webapp/dist/assets/{access-BvKK9dEv.js → access-I0f72P9m.js} +1 -1
  174. package/webapp/dist/assets/{admin-data-table-BKSDI8sU.js → admin-data-table-CAEL2f-m.js} +1 -1
  175. package/webapp/dist/assets/{alert-uBG6r9NW.js → alert-BdJ2uaY0.js} +1 -1
  176. package/webapp/dist/assets/{alerts-CzN6OqX5.js → alerts-DeVkMXWo.js} +1 -1
  177. package/webapp/dist/assets/{apps-G_Lm6m4F.js → apps-9SuDvyGQ.js} +1 -1
  178. package/webapp/dist/assets/{audit-CLMpdBzG.js → audit-DT8cY7Ys.js} +1 -1
  179. package/webapp/dist/assets/backend-status.store-BbBE9cn8.js +4 -0
  180. package/webapp/dist/assets/{card-DkH32gMY.js → card-DaUEmUI5.js} +1 -1
  181. package/webapp/dist/assets/{chart-BpGXlCJc.js → chart-BKXP2ter.js} +1 -1
  182. package/webapp/dist/assets/{client-DFnuv2z3.js → client-CgyTwq9g.js} +1 -1
  183. package/webapp/dist/assets/{code-editor-DK6Tmmxv.js → code-editor-JVuQ4m-z.js} +1 -1
  184. package/webapp/dist/assets/{comparison-bars-BtC0dHjF.js → comparison-bars-Ds5Dt1oj.js} +1 -1
  185. package/webapp/dist/assets/{confirm-dialog-BbGsAz7_.js → confirm-dialog-BayExVbF.js} +1 -1
  186. package/webapp/dist/assets/{console-keyboard-D3YCA0yU.js → console-keyboard-uSLt92dB.js} +1 -1
  187. package/webapp/dist/assets/{containers-BsFwprq4.js → containers-DkXTgcrY.js} +1 -1
  188. package/webapp/dist/assets/{controls-C5W8gHU4.js → controls-CqeGPnaF.js} +1 -1
  189. package/webapp/dist/assets/{dashboard-BN7rKE5n.js → dashboard-By5yPuOf.js} +1 -1
  190. package/webapp/dist/assets/{dashboard-builder-BXFxWjXP.js → dashboard-builder-C0hvBwkd.js} +1 -1
  191. package/webapp/dist/assets/{deploy-progress-CUUwlYtQ.js → deploy-progress-B39cvvCE.js} +1 -1
  192. package/webapp/dist/assets/{deploy-release-dialog-58lGZDNk.js → deploy-release-dialog-CnzaO_xL.js} +1 -1
  193. package/webapp/dist/assets/{deployments-DEzjHerg.js → deployments-BXP943hA.js} +1 -1
  194. package/webapp/dist/assets/{detail-pXPk4O0E.js → detail-B84RgiOb.js} +1 -1
  195. package/webapp/dist/assets/{detail-Dj3gxaH0.js → detail-CVXDks9-.js} +1 -1
  196. package/webapp/dist/assets/{detail-CBn9pjJU.js → detail-D9DixtaK.js} +1 -1
  197. package/webapp/dist/assets/{empty-content-7jOFhG4C.js → empty-content-eyDOuOVp.js} +1 -1
  198. package/webapp/dist/assets/{error-boundary-CLLI8PWw.js → error-boundary-CQmDr_HS.js} +1 -1
  199. package/webapp/dist/assets/{event-fields-CiyqrRO8.js → event-fields-C7p2a2HY.js} +1 -1
  200. package/webapp/dist/assets/{files-DigwXndm.js → files-BsfGT3t6.js} +2 -2
  201. package/webapp/dist/assets/{icons-OboZgWSt.js → icons-B9Ct8PJ9.js} +1 -1
  202. package/webapp/dist/assets/index-BEfv96EF.js +1 -0
  203. package/webapp/dist/assets/{label-B1SF0RTL.js → label-avMhe08g.js} +1 -1
  204. package/webapp/dist/assets/{log-level-filter-Bcn31D1F.js → log-level-filter-oaUGdbpk.js} +1 -1
  205. package/webapp/dist/assets/{logs-DrsBbLfb.js → logs-iC1OEDv3.js} +1 -1
  206. package/webapp/dist/assets/{metric-chart-M-kI-XOt.js → metric-chart-CSa_qv4F.js} +1 -1
  207. package/webapp/dist/assets/{metrics-D5cDZTEo.js → metrics-CKCmcGKw.js} +1 -1
  208. package/webapp/dist/assets/{mui-Cd711nOk.js → mui-B3fJdIMc.js} +1 -1
  209. package/webapp/dist/assets/{mui-CdB_p2lt.js → mui-Bdr6Ks5j.js} +1 -1
  210. package/webapp/dist/assets/{mui-Db5J-QUd.js → mui-CADnFGCx.js} +1 -1
  211. package/webapp/dist/assets/{mui-AnEgAVjz.js → mui-CMWGTMXv.js} +1 -1
  212. package/webapp/dist/assets/{mui-DyT2n1lx.js → mui-CN3dT7bb.js} +1 -1
  213. package/webapp/dist/assets/{mui-BwsIrivo.js → mui-CPEkFAPo.js} +1 -1
  214. package/webapp/dist/assets/{mui-dLCwWoMw.js → mui-D3qAWvfZ.js} +1 -1
  215. package/webapp/dist/assets/{mui-D5m7fDCh.js → mui-D7tBU80e.js} +1 -1
  216. package/webapp/dist/assets/{mui-59N0OVRa.js → mui-DaJavAoc.js} +1 -1
  217. package/webapp/dist/assets/{mui-BXSXx9c9.js → mui-SNRRJ_vi.js} +1 -1
  218. package/webapp/dist/assets/{nodes-CwwZZuu4.js → nodes-DtLyXH0V.js} +1 -1
  219. package/webapp/dist/assets/{operation-status-Bm1x1wTz.js → operation-status-DHyYOT7G.js} +1 -1
  220. package/webapp/dist/assets/{page-breadcrumbs-fR7Jmpp4.js → page-breadcrumbs-3R8RZ3nA.js} +1 -1
  221. package/webapp/dist/assets/pipelines-Do2NAAqK.js +3 -0
  222. package/webapp/dist/assets/{project.store-DuCgv6Eq.js → project.store-D5IR3fo9.js} +1 -1
  223. package/webapp/dist/assets/{projects-TBAdpCeX.js → projects-BqlGbzeG.js} +1 -1
  224. package/webapp/dist/assets/{realtime.store-hfxZD2DU.js → realtime.store-C8D235-B.js} +1 -1
  225. package/webapp/dist/assets/{release-bits-BJ6i23y0.js → release-bits-IehuBssK.js} +1 -1
  226. package/webapp/dist/assets/{release-build-panel-BNXkwNE1.js → release-build-panel-C48hP_9w.js} +1 -1
  227. package/webapp/dist/assets/{release-deployment-state-gN8ZT3aq.js → release-deployment-state-BfmxZP4Y.js} +1 -1
  228. package/webapp/dist/assets/{releases-CXXKUh-v.js → releases-Cm0RV5Xu.js} +1 -1
  229. package/webapp/dist/assets/{search-input-C0MHI8vO.js → search-input-SWD1dXxD.js} +1 -1
  230. package/webapp/dist/assets/settings-DwuEPQGg.js +1 -0
  231. package/webapp/dist/assets/sign-in-CQ-WeS5A.js +1 -0
  232. package/webapp/dist/assets/{skeleton-BmWDJWF9.js → skeleton-BnVxAoeX.js} +1 -1
  233. package/webapp/dist/assets/{snackbar-DSPmjMyi.js → snackbar-CRX6eqRT.js} +1 -1
  234. package/webapp/dist/assets/{stack-health-status-BIv2C10x.js → stack-health-status-DfErRNb1.js} +1 -1
  235. package/webapp/dist/assets/{stack-start-notice-D-AH_bzn.js → stack-start-notice-NkYDjR-f.js} +1 -1
  236. package/webapp/dist/assets/{stacks-WY_ynkON.js → stacks-BOGCfW90.js} +1 -1
  237. package/webapp/dist/assets/{store-bqUBn2A4.js → store-DtTtbc9H.js} +1 -1
  238. package/webapp/dist/assets/{system-info-DXMwo6gl.js → system-info-Cw-xywgI.js} +1 -1
  239. package/webapp/dist/assets/{table-BOWT6Y9d.js → table-D-so_B1p.js} +1 -1
  240. package/webapp/dist/assets/{table-viewport-Bp4pq-c_.js → table-viewport-DdZ1yAKm.js} +1 -1
  241. package/webapp/dist/assets/{tabs-k5NPGLnJ.js → tabs-DGqBkXh_.js} +1 -1
  242. package/webapp/dist/assets/{terminal-QWBau-Us.js → terminal-Bbl0XNeB.js} +1 -1
  243. package/webapp/dist/assets/{topology-C_Qp1RqW.js → topology-DmrRy7nN.js} +1 -1
  244. package/webapp/dist/assets/{topology-metadata-dialog-BivuU2y6.js → topology-metadata-dialog-Dpfp4YF1.js} +1 -1
  245. package/webapp/dist/assets/{traces-By0rdfDC.js → traces-CKHsOabJ.js} +1 -1
  246. package/webapp/dist/assets/{use-stack-context-8yaHaN8L.js → use-stack-context-BuraYaeY.js} +1 -1
  247. package/webapp/dist/assets/webapp-D8h_eabt.js +35 -0
  248. package/webapp/dist/console-version.json +1 -1
  249. package/webapp/dist/index.html +34 -34
  250. package/webapp/dist/logo.svg +1 -80
  251. package/bin/sdk.d.mts +0 -8
  252. package/bin/sdk.mjs +0 -580
  253. package/dist/monitoring/process-lifetime.d.ts +0 -11
  254. package/dist/monitoring/process-lifetime.d.ts.map +0 -1
  255. package/dist/monitoring/process-lifetime.js +0 -45
  256. package/dist/monitoring/process-lifetime.js.map +0 -1
  257. package/dist/shared/host-boot-identity.d.ts +0 -12
  258. package/dist/shared/host-boot-identity.d.ts.map +0 -1
  259. package/dist/shared/host-boot-identity.js +0 -89
  260. package/dist/shared/host-boot-identity.js.map +0 -1
  261. package/webapp/dist/assets/index-Bo9An3pJ.js +0 -1
  262. package/webapp/dist/assets/omnitron-logo-koMCbsCv.js +0 -1
  263. package/webapp/dist/assets/pipelines-BrfTjf6Y.js +0 -3
  264. package/webapp/dist/assets/settings-B3egRvbI.js +0 -1
  265. package/webapp/dist/assets/sign-in-9q-Nfy83.js +0 -1
  266. package/webapp/dist/assets/webapp-BO_WoB_z.js +0 -35
  267. package/webapp/dist/favicon.png +0 -0
@@ -1 +1 @@
1
- import{i as e,n as t}from"./rolldown-runtime-CNOWq4Kh.js";import{i as n}from"./react-BN8qLIAi.js";import{O as r,g as i,h as a,x as o}from"./client-DFnuv2z3.js";import{n as s,r as c}from"./services-BddvcFi8.js";import{n as l,t as u}from"./react-CEuifcaQ.js";import{a as d,i as f,n as p,o as m,r as h}from"./storage-CKXnhqkt.js";function g(e){let t=/^(.*)-\d{12}-([0-9a-f]{8})-([0-9a-f]{8})(?:-[A-Za-z0-9]{6})?$/.exec(e);return{project:t?.[1]??e,projectCommit:t?.[2]??null,omniCommit:t?.[3]??null}}function ee(e){let t=e.apps.filter(e=>e.status!==`online`).map(e=>`${e.name} (${e.status})`),n=e.apps.length,r=n-t.length,i=e.notUp??[],a=[...new Set([...i,...t.filter(e=>!i.some(t=>t.startsWith(e+`: `)))])];e.status!==`running`&&a.push(`stack state: ${e.status}`);let o=a.length===0?`confirmed`:e.status===`error`?`failed`:`partial`;return{confirmed:o===`confirmed`,outcome:o,online:r,total:n,issues:a}}function _(e){return JSON.stringify([e.project,e.stack,e.node,e.app])}async function v(e,t,n,r,i=3e3){let a=!0,o=!1,s,c=new Map,l=new Map,u=async()=>{let t=!0,d=[];try{let t=await n();if(!a)return;for(let n of t){if(n.project!==e.project||n.stack!==e.stack||!n.operationId||n.releaseId!==e.release)continue;let t=_(n),r=JSON.stringify([n.operationId,n.status,n.progress,n.at,n.message]);o&&c.get(t)!==r&&(d.push(n),l.set(t,n)),c.set(t,r)}o=!0}catch{t=!1}a&&(r([...l.values()].sort((e,t)=>t.at.localeCompare(e.at)),d,t),s=setTimeout(()=>{u()},i))};u();try{return await t()}finally{a=!1,clearTimeout(s)}}function y(e,t,n){let r=[],i=[];for(let a of e){if(!a.project||!a.stack){i.push(a);continue}let e=(t.configurations?.find(e=>e.runtimeProject===a.project))?.stacks[a.stack]??(a.project===t.name?a.stack:void 0);e&&(!n||e===n)&&r.push(a.project===t.name&&a.stack===e?a:{...a,project:t.name,stack:e})}return{transfers:r,unscoped:i}}function b(e){return e?`${e.platform}/${e.arch} · Node ${e.node} · ABI ${e.abi}`:`Target not recorded`}function x(e){let t=e.omni.reproduced,n=t?.packages??e.omni.registry?.packages,r=n?.length??e.builtWith?.packages?.length;return r===void 0?`Framework source not recorded`:`${t?`Reproduced archives`:n?`npm registry`:`Linked checkout`} · ${r} framework package${r===1?``:`s`}`}function te(e){let t=e.length===1?e[0]:null;return t&&t.name===`gates`&&t.status===`not-run`?t:null}function ne(e){if(e.manifestError)return{text:`invalid manifest`,tone:`failed`};if(!e.complete)return{text:`no manifest`,tone:`none`};let t=te(e.gateList);if(t)return{text:/--skip-gates/.test(t.detail??``)?`skipped`:`not run`,tone:`unfinished`};let{total:n,passed:r,failed:i}=e.gates;return n===0?{text:`—`,tone:`none`}:{text:`${r}/${n}`,tone:i>0?`failed`:r<n?`unfinished`:`passed`}}function re(e,t){return e?{known:!0,deployments:t}:{known:!1,why:w}}function ie(e){let t=new Map;for(let n of e)n.release&&t.set(n.release,[...t.get(n.release)??[],n]);return t}function ae(e,t){let n=[e.project===!1?t:null,e.omni===!1?`omni`:null].filter(Boolean),r=[e.project==null?t:null,e.omni==null?`omni`:null].filter(Boolean);return{state:n.length?`missing`:r.length?`unknown`:`recorded`,label:n.length?`Git: unpublished source`:r.length?`Git: unverified`:`Git: publication recorded`,detail:n.length?`This release records unpublished source for ${n.join(` and `)}. Source publication is separate from where applications are deployed or running.`:r.length?`Git publication could not be verified for ${r.join(` and `)} when this release was built. This does not establish that the source is unpublished.`:`This release records both source commits as published at build time. This saved observation does not check current availability or identify running deployments.`}}function S(e,t,n){if(!n.known)return n;let r=t.runtimeScope??{project:e,stack:t.name},i=n.deployments.filter(n=>n.project===e&&n.stack===t.name||n.project===r.project&&n.stack===r.stack);if(i.length===0)return{known:!0,last:null};if(i.some(e=>!Number.isFinite(Date.parse(e.at))))return{known:!1,why:`Deployment history contains an invalid timestamp`};let a=Math.max(...i.map(e=>Date.parse(e.at))),o=i.filter(e=>Date.parse(e.at)===a);return new Set(o.map(e=>JSON.stringify([e.release,e.releaseUnnamed,e.projectCommit,e.omniCommit]))).size>1?{known:!1,why:`Conflicting deployment records have the same timestamp`}:{known:!0,last:o[0]}}function C(e){let t=[],n=new Map,r=new Map,i=(e,i,a=!0)=>{if(a&&e.status===`stopped`)return;let o={app:e.name,node:i,pid:e.pid??null,...typeof e.generation==`string`&&{generation:e.generation}};if(!a||e.status===`unknown`){t.push({...o,state:`unavailable`,reason:`Application inventory unavailable; launch identity is unknown`});return}let s=e.release,c=e.generation!==void 0,l=typeof e.generation==`string`&&e.generation.length>0&&s?.state===`confirmed`&&e.generation===s.launchId,u=Number.isSafeInteger(e.pid)&&e.pid>0,d=c?l&&(e.pid==null||u):u,f=s?.state===`confirmed`?s.consumer:void 0,p=f===void 0||f&&typeof f==`object`&&!Array.isArray(f)&&Object.keys(f).sort().join(`,`)===`app,manifestSha256,releaseId`&&typeof f.releaseId==`string`&&/^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/.test(f.releaseId)&&!f.releaseId.includes(`..`)&&/^[a-f0-9]{64}$/.test(f.manifestSha256)&&f.app===e.name.split(`/`).at(-1);if(s?.state===`confirmed`&&e.status===`online`&&d&&s.basis===`verified-launch`&&typeof s.releaseId==`string`&&s.releaseId.length>0&&/^[a-f0-9]{64}$/.test(s.manifestSha256)&&/^[a-f0-9]{64}$/.test(s.artifactSha256)&&typeof s.launchId==`string`&&s.launchId.length>0&&Number.isFinite(Date.parse(s.observedAt))&&p){t.push({...o,state:`confirmed`,releaseId:s.releaseId,observedAt:s.observedAt,launchId:s.launchId,...f&&{consumer:{...f}}});let e=f??s;n.set(`${e.releaseId}:${e.manifestSha256}`,{releaseId:e.releaseId,manifestSha256:e.manifestSha256});let i=r.get(s.releaseId)??new Set;i.add(s.manifestSha256),r.set(s.releaseId,i)}else s?.state===`modified`?t.push({...o,state:`modified`,...s.releaseId&&{releaseId:s.releaseId},reason:s.reason}):t.push({...o,state:`unreported`,reason:e.status===`online`?s?.state===`confirmed`&&c&&!l?`Application generation is invalid or differs from its launch receipt; request a fresh owner observation`:s?.state===`confirmed`&&!d?`Application is online but its process identity is unavailable; the launch receipt cannot be bound to this instance`:p?s?.state===`unreported`?s.reason:s?`Runtime launch evidence is incomplete or invalid`:`Runtime does not report a verified launch receipt`:`Runtime launch consumer does not match this application or has invalid identity`:`Application is ${e.status}; no active launch is confirmed`})};if(e.type!==`local`&&e.placements?.length)for(let t of e.placements){for(let e of t.apps)i(e.process??{name:e.name,status:t.appsObserved?`stopped`:`unknown`},t.nodeKey,t.appsObserved);!t.appsObserved&&t.apps.length===0&&i({name:`inventory`,status:`unknown`},t.nodeKey,!1)}else{for(let t of e.apps)i(t,null);if(e.type!==`local`)for(let t of e.nodes.filter(e=>!e.connected))i({name:`inventory`,status:`unknown`},`${t.host}:${t.port}`,!1)}let a={verified:t.filter(e=>e.state===`confirmed`).length,total:t.length,releases:[...n.values()],observations:t},o=new Set(a.releases.map(e=>e.releaseId)).size!==n.size||[...r.values()].some(e=>e.size>1);return{runningRelease:t.length===0&&e.status===`stopped`?`not-running`:o||t.some(e=>e.state===`modified`)?`modified`:t.length===0||t.some(e=>e.state!==`confirmed`)?`unreported`:n.size>1?`mixed`:`confirmed`,releaseEvidence:a}}function oe(e){switch(e.runningRelease){case`not-running`:return`No applications running`;case`confirmed`:return`Launch release verified`;case`mixed`:return`Different releases are running`;case`modified`:return`Runtime differs from its release evidence`;default:return`Current release not reported`}}async function se(e,t){let[n,r]=await Promise.allSettled([t.stacks(),t.deployments()]),i=r.status===`fulfilled`?r.value:{known:!1,why:`Deployment history could not be read`},a=n.status===`fulfilled`?n.value.flatMap(e=>e.runtimeScope?[e.runtimeScope]:[]):[],o=i.known?{known:!0,deployments:i.deployments.filter(t=>t.project===e||a.some(e=>t.project===e.project&&t.stack===e.stack))}:i;return{project:e,observedAt:new Date().toISOString(),history:o,inventory:n.status===`fulfilled`?{known:!0}:{known:!1,why:`Stack inventory could not be read; execution state is unknown`},stacks:n.status===`fulfilled`?n.value.map(t=>({project:e,stack:t.name,type:t.type,status:t.status,apps:{online:t.apps.filter(e=>e.status===`online`).length,total:t.apps.length,unknown:t.apps.filter(e=>e.status===`unknown`).length},nodes:t.nodes.map(({host:e,port:t,label:n,connected:r})=>({host:e,port:t,label:n,connected:r,endpoint:`${e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}:${t}`})),history:S(e,t,o),...C(t)})):[]}}var w;function T(){return(T=t((()=>{w=`the daemon cannot read the deployment audit history; current execution is a separate observation`})))()}function E(e,t){return Object.is(e,t)?!0:typeof e!=`object`||!e||typeof t!=`object`||!t||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t)?!1:D(e)&&D(t)?O(e)&&O(t)?k(e,t):A(e,t):k({entries:()=>Object.entries(e)},{entries:()=>Object.entries(t)})}var D,O,k,A;function j(){return(j=t((()=>{D=e=>Symbol.iterator in e,O=e=>`entries`in e,k=(e,t)=>{let n=e instanceof Map?e:new Map(e.entries()),r=t instanceof Map?t:new Map(t.entries());if(n.size!==r.size)return!1;for(let[e,t]of n)if(!r.has(e)||!Object.is(t,r.get(e)))return!1;return!0},A=(e,t)=>{let n=e[Symbol.iterator](),r=t[Symbol.iterator](),i=n.next(),a=r.next();for(;!i.done&&!a.done;){if(!Object.is(i.value,a.value))return!1;i=n.next(),a=r.next()}return!!i.done&&!!a.done}})))()}function M(e){let t=N.useRef(void 0);return n=>{let r=e(n);return E(t.current,r)?t.current:t.current=r}}var N;function P(){return(P=t((()=>{N=e(n(),1),j()})))()}function F(e){return{runningStacks:e.filter(e=>e.status===`running`).length,totalStacks:e.length,unknownStacks:e.filter(e=>e.status===`unknown`).length}}function I(e){return e.flatMap(e=>e.apps.map(t=>({...t,stack:e.name,stackType:e.type})))}function L(){return(L=t((()=>{})))()}function R(e,t,n){if(!t)return[];let r=e?.configurations??[];if(n){let e=new Set;for(let t of r)for(let[r,i]of Object.entries(t.stacks))i===n&&e.add(`${t.runtimeProject}/${r}/`);return e.add(`${t}/${n}/`),[...e]}return[...new Set([t,...r.map(e=>e.runtimeProject)])].map(e=>`${e}/`)}function z(e,t){let[n,r]=t.split(`/`);return!n||!r||t.split(`/`).length<3?null:e?.configurations?.find(e=>e.runtimeProject===n)?.stacks[r]??r}function B(e,t,n){let r=e.find(e=>e.name===t||e.configurations?.some(e=>e.runtimeProject===t));if(!r)return null;let i=r.configurations?.find(e=>e.runtimeProject===t),a=Object.values(i?.stacks??{});return{project:r.name,stack:r.name===t?n:n?i?.stacks[n]??null:a.length===1?a[0]:null}}function V(){return(V=t((()=>{})))()}function H(e,t){e?d(K,e):f(K),t?d(q,t):f(q)}function U(){let e=p(K);return{project:e,stack:e?p(q):null,routes:h(J,{})}}function W(e){m(J,e)}function G(e,t,n,r){let i=e[t];return i?{...e,[t]:i.map(e=>e.name===n?{...e,status:r}:e)}:e}function ce(){return X(M(e=>(e.activeProject?e.stacksByProject[e.activeProject]:void 0)??Q))}var K,q,J,Y,X,Z,Q;function $(){return($=t((()=>{s(),T(),l(),P(),a(),K=`omnitron_active_project`,q=`omnitron_active_stack`,J=`omnitron_workspace_routes`,Y=`__omnitron__`,X=u((e,t)=>{let n=U(),a=new Map,s=null,l=null,u=0,d=0,f=(t,n)=>e(e=>{let r={...e.stackNotices};return n?r[t]=n:delete r[t],{stackNotices:r}}),p=async(n,r)=>{try{await a.get(r),await t().fetchStacks(r)}finally{e(e=>{let t={...e.pendingOps};return delete t[n],{pendingOps:t}})}};return{projects:[],stacksByProject:{},stackReadErrors:{},stackNotices:{},clearStackNotice:e=>f(e),stackRuntimes:{},pendingOps:{},activeProject:n.project,activeStack:n.stack,workspaceRoutes:n.routes,loading:!1,error:null,fetchProjects:async n=>{if(!l)return;let r=u;try{e({loading:!0,error:null});let i=await o.listProjects();if(r!==u)return;e(e=>({projects:i.map(t=>e.stacksByProject[t.name]?{...t,...F(e.stacksByProject[t.name])}:t),loading:!1}));let a=t().activeProject;if(a){let r=B(i,a,t().activeStack);if(r){let i=t().activeStack;if(r.project!==a){let o=e=>i&&r.stack&&e===`/stacks/${i}`?`/stacks/${r.stack}`:e,s={...t().workspaceRoutes};if(s[a]&&!s[r.project]&&(s[r.project]=o(s[a])),e({activeProject:r.project,activeStack:r.stack,workspaceRoutes:s}),H(r.project,r.stack),W(s),t().fetchStacks(r.project),n&&o(n)!==n)return o(n)}else t().fetchStacks(a)}else e({activeProject:null,activeStack:null}),H(null,null)}else if(i.length===1){let n=i[0].name;e({activeProject:n}),H(n,null),t().fetchStacks(n)}}catch(t){r===u&&e({error:t.message,loading:!1})}},setInventoryReaders:(t,n)=>{l!==t&&(l=t,u++,e({projects:[],loading:!1,error:null})),s!==n&&(s=n,d++,a.clear(),e({stacksByProject:{},stackReadErrors:{}}))},fetchStacks:async n=>{if(!s)return null;let r=d,i=a.get(n);if(i)return i;let c=(async()=>{try{let i=await o.listStacks({project:n});return r===d?(e(e=>({stacksByProject:{...e.stacksByProject,[n]:i},stackReadErrors:{...e.stackReadErrors,[n]:null},projects:e.projects.map(e=>e.name===n?{...e,...F(i)}:e)})),t().activeProject===n&&t().activeStack&&!i.some(e=>e.name===t().activeStack)&&(e({activeStack:null}),H(n,null)),i):null}catch(t){return r===d&&e(e=>({stackReadErrors:{...e.stackReadErrors,[n]:t.message}})),null}})();a.set(n,c);try{return await c}finally{a.get(n)===c&&a.delete(n)}},fetchStackStatus:async(t,n)=>{try{let r=await o.getStackStatus({project:t,stack:n});return e(e=>({stackRuntimes:{...e.stackRuntimes,[`${t}/${n}`]:r}})),r}catch(t){return e({error:t.message}),null}},selectProject:(n,r)=>{let i=t(),a={...i.workspaceRoutes};if(r){let e=i.activeProject??Y;a[e]=r}let o=a[n]??`/`;return e({activeProject:n,activeStack:null,workspaceRoutes:a}),H(n,null),W(a),t().fetchStacks(n),o},deselectProject:n=>{let r=t(),i={...r.workspaceRoutes};n&&r.activeProject&&(i[r.activeProject]=n);let a=i[Y]??`/`;return e({activeProject:null,activeStack:null,workspaceRoutes:i}),H(null,null),W(i),a},saveCurrentRoute:n=>{let r=t(),i=r.activeProject??Y,a={...r.workspaceRoutes,[i]:n};e({workspaceRoutes:a}),W(a)},selectStack:n=>{let{activeProject:r,stacksByProject:i}=t();(!n||r&&i[r]?.some(e=>e.name===n))&&(e({activeStack:n}),H(r,n))},addProject:async(n,r)=>{try{e({loading:!0,error:null}),await o.addProject({name:n,path:r}),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},updateProject:async(n,r)=>{try{e({loading:!0,error:null});let i=await o.updateProject({name:n,...r});i.name!==n&&t().activeProject===n&&(e({activeProject:i.name,activeStack:null}),H(i.name,null)),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},removeProject:async n=>{try{e({loading:!0,error:null}),await o.removeProject({name:n}),t().activeProject===n&&(e({activeProject:null,activeStack:null}),H(null,null)),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},startStack:async(n,a,o)=>{let s=`${n}/${a}`;if(t().pendingOps[s])return{state:`busy`,message:`An operation is already pending for ${s}.`};f(s),e(e=>({pendingOps:{...e.pendingOps,[s]:`starting`},stacksByProject:G(e.stacksByProject,n,a,`starting`)}));try{let{outcome:e,issues:t,online:r,total:c}=ee(await i(`startStack`,{project:n,stack:a,...o?.release?{release:o.release}:{},...o?.workingTree?{workingTree:!0}:{},...o?.allowDirty?{allowDirty:!0}:{}}));if(e===`confirmed`)return{state:e};let l=`${s}: ${r}/${c} apps online. ${t.join(`; `)}.`;return f(s,l),{state:e,message:l}}catch(e){let t=r(e)||c(e),n=t?`No start acknowledgement for ${s}. Inspect the stack and deployment history before retrying.`:e instanceof Error?e.message:String(e);return f(s,n),{state:t?`unconfirmed`:`failed`,message:n}}finally{await p(s,n)}},resumeInstalledStack:async(n,a)=>{let o=`${n}/${a}`;if(!t().pendingOps[o]){f(o),e(e=>({pendingOps:{...e.pendingOps,[o]:`resuming`}}));try{let e=await i(`resumeInstalledStack`,{project:n,stack:a});if(e.outcome!==`running`){let t=e.nodes.filter(e=>e.outcome!==`running`).map(e=>[e.node,e.outcome,e.reason].filter(Boolean).join(` · `));f(o,[`Resume ${e.outcome}`,...t,e.operationId].join(` · `))}}catch(e){f(o,r(e)||c(e)?`Resume acknowledgement unavailable. Check the stack and each recipient before another recovery.`:e instanceof Error?e.message:String(e))}finally{await p(o,n)}}},stopStack:async(n,a,o,s=!1)=>{let l=`${n}/${a}`;if(!t().pendingOps[l]){f(l),e(e=>({pendingOps:{...e.pendingOps,[l]:`stopping`},stacksByProject:G(e.stacksByProject,n,a,`stopping`)}));try{let e=await i(`stopStack`,{project:n,stack:a,review:o,...s&&{keepInfrastructure:!0}});if(e.status!==`stopped`||e.stopOperation?.phase!==`stopped`)throw Error(`Daemon did not confirm the complete stack stop`);if(s&&e.stopOperation.keepInfrastructure!==!0)throw Error(`Daemon did not confirm infrastructure preservation. Inspect the stop operation before retrying.`)}catch(e){f(l,r(e)||c(e)?`Stop acknowledgement has not arrived. Check the stack operation before retrying; applications may still be running.`:e.message)}finally{await p(l,n)}}},createStack:async(n,r)=>{try{e({error:null});let i=await o.createStack({project:n,...r});return await t().fetchStacks(n),i}catch(t){throw e({error:t.message}),t}},deleteStack:async(e,n)=>{try{f(`${e}/${n}`),await o.deleteStack({project:e,stack:n}),await t().fetchStacks(e)}catch(t){throw f(`${e}/${n}`,t.message),t}},getStackPendingOp:(e,n)=>t().pendingOps[`${e}/${n}`]??null,clearError:()=>e({error:null})}}),Z=()=>X(e=>e.activeProject),Q=[]})))()}export{ie as C,oe as S,ne as _,V as a,ae as b,L as c,_ as d,re as f,y as g,v as h,X as i,I as l,T as m,Z as n,R as o,x as p,ce as r,z as s,$ as t,F as u,se as v,b as x,g as y};
1
+ import{i as e,n as t}from"./rolldown-runtime-CNOWq4Kh.js";import{i as n}from"./react-BN8qLIAi.js";import{O as r,g as i,h as a,x as o}from"./client-CgyTwq9g.js";import{n as s,r as c}from"./services-BddvcFi8.js";import{n as l,t as u}from"./react-CEuifcaQ.js";import{a as d,i as f,n as p,o as m,r as h}from"./storage-CKXnhqkt.js";function g(e){let t=/^(.*)-\d{12}-([0-9a-f]{8})-([0-9a-f]{8})(?:-[A-Za-z0-9]{6})?$/.exec(e);return{project:t?.[1]??e,projectCommit:t?.[2]??null,omniCommit:t?.[3]??null}}function ee(e){let t=e.apps.filter(e=>e.status!==`online`).map(e=>`${e.name} (${e.status})`),n=e.apps.length,r=n-t.length,i=e.notUp??[],a=[...new Set([...i,...t.filter(e=>!i.some(t=>t.startsWith(e+`: `)))])];e.status!==`running`&&a.push(`stack state: ${e.status}`);let o=a.length===0?`confirmed`:e.status===`error`?`failed`:`partial`;return{confirmed:o===`confirmed`,outcome:o,online:r,total:n,issues:a}}function _(e){return JSON.stringify([e.project,e.stack,e.node,e.app])}async function v(e,t,n,r,i=3e3){let a=!0,o=!1,s,c=new Map,l=new Map,u=async()=>{let t=!0,d=[];try{let t=await n();if(!a)return;for(let n of t){if(n.project!==e.project||n.stack!==e.stack||!n.operationId||n.releaseId!==e.release)continue;let t=_(n),r=JSON.stringify([n.operationId,n.status,n.progress,n.at,n.message]);o&&c.get(t)!==r&&(d.push(n),l.set(t,n)),c.set(t,r)}o=!0}catch{t=!1}a&&(r([...l.values()].sort((e,t)=>t.at.localeCompare(e.at)),d,t),s=setTimeout(()=>{u()},i))};u();try{return await t()}finally{a=!1,clearTimeout(s)}}function y(e,t,n){let r=[],i=[];for(let a of e){if(!a.project||!a.stack){i.push(a);continue}let e=(t.configurations?.find(e=>e.runtimeProject===a.project))?.stacks[a.stack]??(a.project===t.name?a.stack:void 0);e&&(!n||e===n)&&r.push(a.project===t.name&&a.stack===e?a:{...a,project:t.name,stack:e})}return{transfers:r,unscoped:i}}function b(e){return e?`${e.platform}/${e.arch} · Node ${e.node} · ABI ${e.abi}`:`Target not recorded`}function x(e){let t=e.omni.reproduced,n=t?.packages??e.omni.registry?.packages,r=n?.length??e.builtWith?.packages?.length;return r===void 0?`Framework source not recorded`:`${t?`Reproduced archives`:n?`npm registry`:`Linked checkout`} · ${r} framework package${r===1?``:`s`}`}function te(e){let t=e.length===1?e[0]:null;return t&&t.name===`gates`&&t.status===`not-run`?t:null}function ne(e){if(e.manifestError)return{text:`invalid manifest`,tone:`failed`};if(!e.complete)return{text:`no manifest`,tone:`none`};let t=te(e.gateList);if(t)return{text:/--skip-gates/.test(t.detail??``)?`skipped`:`not run`,tone:`unfinished`};let{total:n,passed:r,failed:i}=e.gates;return n===0?{text:`—`,tone:`none`}:{text:`${r}/${n}`,tone:i>0?`failed`:r<n?`unfinished`:`passed`}}function re(e,t){return e?{known:!0,deployments:t}:{known:!1,why:w}}function ie(e){let t=new Map;for(let n of e)n.release&&t.set(n.release,[...t.get(n.release)??[],n]);return t}function ae(e,t){let n=[e.project===!1?t:null,e.omni===!1?`omni`:null].filter(Boolean),r=[e.project==null?t:null,e.omni==null?`omni`:null].filter(Boolean);return{state:n.length?`missing`:r.length?`unknown`:`recorded`,label:n.length?`Git: unpublished source`:r.length?`Git: unverified`:`Git: publication recorded`,detail:n.length?`This release records unpublished source for ${n.join(` and `)}. Source publication is separate from where applications are deployed or running.`:r.length?`Git publication could not be verified for ${r.join(` and `)} when this release was built. This does not establish that the source is unpublished.`:`This release records both source commits as published at build time. This saved observation does not check current availability or identify running deployments.`}}function S(e,t,n){if(!n.known)return n;let r=t.runtimeScope??{project:e,stack:t.name},i=n.deployments.filter(n=>n.project===e&&n.stack===t.name||n.project===r.project&&n.stack===r.stack);if(i.length===0)return{known:!0,last:null};if(i.some(e=>!Number.isFinite(Date.parse(e.at))))return{known:!1,why:`Deployment history contains an invalid timestamp`};let a=Math.max(...i.map(e=>Date.parse(e.at))),o=i.filter(e=>Date.parse(e.at)===a);return new Set(o.map(e=>JSON.stringify([e.release,e.releaseUnnamed,e.projectCommit,e.omniCommit]))).size>1?{known:!1,why:`Conflicting deployment records have the same timestamp`}:{known:!0,last:o[0]}}function C(e){let t=[],n=new Map,r=new Map,i=(e,i,a=!0)=>{if(a&&e.status===`stopped`)return;let o={app:e.name,node:i,pid:e.pid??null,...typeof e.generation==`string`&&{generation:e.generation}};if(!a||e.status===`unknown`){t.push({...o,state:`unavailable`,reason:`Application inventory unavailable; launch identity is unknown`});return}let s=e.release,c=e.generation!==void 0,l=typeof e.generation==`string`&&e.generation.length>0&&s?.state===`confirmed`&&e.generation===s.launchId,u=Number.isSafeInteger(e.pid)&&e.pid>0,d=c?l&&(e.pid==null||u):u,f=s?.state===`confirmed`?s.consumer:void 0,p=f===void 0||f&&typeof f==`object`&&!Array.isArray(f)&&Object.keys(f).sort().join(`,`)===`app,manifestSha256,releaseId`&&typeof f.releaseId==`string`&&/^[A-Za-z0-9][A-Za-z0-9._-]{0,255}$/.test(f.releaseId)&&!f.releaseId.includes(`..`)&&/^[a-f0-9]{64}$/.test(f.manifestSha256)&&f.app===e.name.split(`/`).at(-1);if(s?.state===`confirmed`&&e.status===`online`&&d&&s.basis===`verified-launch`&&typeof s.releaseId==`string`&&s.releaseId.length>0&&/^[a-f0-9]{64}$/.test(s.manifestSha256)&&/^[a-f0-9]{64}$/.test(s.artifactSha256)&&typeof s.launchId==`string`&&s.launchId.length>0&&Number.isFinite(Date.parse(s.observedAt))&&p){t.push({...o,state:`confirmed`,releaseId:s.releaseId,observedAt:s.observedAt,launchId:s.launchId,...f&&{consumer:{...f}}});let e=f??s;n.set(`${e.releaseId}:${e.manifestSha256}`,{releaseId:e.releaseId,manifestSha256:e.manifestSha256});let i=r.get(s.releaseId)??new Set;i.add(s.manifestSha256),r.set(s.releaseId,i)}else s?.state===`modified`?t.push({...o,state:`modified`,...s.releaseId&&{releaseId:s.releaseId},reason:s.reason}):t.push({...o,state:`unreported`,reason:e.status===`online`?s?.state===`confirmed`&&c&&!l?`Application generation is invalid or differs from its launch receipt; request a fresh owner observation`:s?.state===`confirmed`&&!d?`Application is online but its process identity is unavailable; the launch receipt cannot be bound to this instance`:p?s?.state===`unreported`?s.reason:s?`Runtime launch evidence is incomplete or invalid`:`Runtime does not report a verified launch receipt`:`Runtime launch consumer does not match this application or has invalid identity`:`Application is ${e.status}; no active launch is confirmed`})};if(e.type!==`local`&&e.placements?.length)for(let t of e.placements){for(let e of t.apps)i(e.process??{name:e.name,status:t.appsObserved?`stopped`:`unknown`},t.nodeKey,t.appsObserved);!t.appsObserved&&t.apps.length===0&&i({name:`inventory`,status:`unknown`},t.nodeKey,!1)}else{for(let t of e.apps)i(t,null);if(e.type!==`local`)for(let t of e.nodes.filter(e=>!e.connected))i({name:`inventory`,status:`unknown`},`${t.host}:${t.port}`,!1)}let a={verified:t.filter(e=>e.state===`confirmed`).length,total:t.length,releases:[...n.values()],observations:t},o=new Set(a.releases.map(e=>e.releaseId)).size!==n.size||[...r.values()].some(e=>e.size>1);return{runningRelease:t.length===0&&e.status===`stopped`?`not-running`:o||t.some(e=>e.state===`modified`)?`modified`:t.length===0||t.some(e=>e.state!==`confirmed`)?`unreported`:n.size>1?`mixed`:`confirmed`,releaseEvidence:a}}function oe(e){switch(e.runningRelease){case`not-running`:return`No applications running`;case`confirmed`:return`Launch release verified`;case`mixed`:return`Different releases are running`;case`modified`:return`Runtime differs from its release evidence`;default:return`Current release not reported`}}async function se(e,t){let[n,r]=await Promise.allSettled([t.stacks(),t.deployments()]),i=r.status===`fulfilled`?r.value:{known:!1,why:`Deployment history could not be read`},a=n.status===`fulfilled`?n.value.flatMap(e=>e.runtimeScope?[e.runtimeScope]:[]):[],o=i.known?{known:!0,deployments:i.deployments.filter(t=>t.project===e||a.some(e=>t.project===e.project&&t.stack===e.stack))}:i;return{project:e,observedAt:new Date().toISOString(),history:o,inventory:n.status===`fulfilled`?{known:!0}:{known:!1,why:`Stack inventory could not be read; execution state is unknown`},stacks:n.status===`fulfilled`?n.value.map(t=>({project:e,stack:t.name,type:t.type,status:t.status,apps:{online:t.apps.filter(e=>e.status===`online`).length,total:t.apps.length,unknown:t.apps.filter(e=>e.status===`unknown`).length},nodes:t.nodes.map(({host:e,port:t,label:n,connected:r})=>({host:e,port:t,label:n,connected:r,endpoint:`${e.includes(`:`)&&!e.startsWith(`[`)?`[${e}]`:e}:${t}`})),history:S(e,t,o),...C(t)})):[]}}var w;function T(){return(T=t((()=>{w=`the daemon cannot read the deployment audit history; current execution is a separate observation`})))()}function E(e,t){return Object.is(e,t)?!0:typeof e!=`object`||!e||typeof t!=`object`||!t||Object.getPrototypeOf(e)!==Object.getPrototypeOf(t)?!1:D(e)&&D(t)?O(e)&&O(t)?k(e,t):A(e,t):k({entries:()=>Object.entries(e)},{entries:()=>Object.entries(t)})}var D,O,k,A;function j(){return(j=t((()=>{D=e=>Symbol.iterator in e,O=e=>`entries`in e,k=(e,t)=>{let n=e instanceof Map?e:new Map(e.entries()),r=t instanceof Map?t:new Map(t.entries());if(n.size!==r.size)return!1;for(let[e,t]of n)if(!r.has(e)||!Object.is(t,r.get(e)))return!1;return!0},A=(e,t)=>{let n=e[Symbol.iterator](),r=t[Symbol.iterator](),i=n.next(),a=r.next();for(;!i.done&&!a.done;){if(!Object.is(i.value,a.value))return!1;i=n.next(),a=r.next()}return!!i.done&&!!a.done}})))()}function M(e){let t=N.useRef(void 0);return n=>{let r=e(n);return E(t.current,r)?t.current:t.current=r}}var N;function P(){return(P=t((()=>{N=e(n(),1),j()})))()}function F(e){return{runningStacks:e.filter(e=>e.status===`running`).length,totalStacks:e.length,unknownStacks:e.filter(e=>e.status===`unknown`).length}}function I(e){return e.flatMap(e=>e.apps.map(t=>({...t,stack:e.name,stackType:e.type})))}function L(){return(L=t((()=>{})))()}function R(e,t,n){if(!t)return[];let r=e?.configurations??[];if(n){let e=new Set;for(let t of r)for(let[r,i]of Object.entries(t.stacks))i===n&&e.add(`${t.runtimeProject}/${r}/`);return e.add(`${t}/${n}/`),[...e]}return[...new Set([t,...r.map(e=>e.runtimeProject)])].map(e=>`${e}/`)}function z(e,t){let[n,r]=t.split(`/`);return!n||!r||t.split(`/`).length<3?null:e?.configurations?.find(e=>e.runtimeProject===n)?.stacks[r]??r}function B(e,t,n){let r=e.find(e=>e.name===t||e.configurations?.some(e=>e.runtimeProject===t));if(!r)return null;let i=r.configurations?.find(e=>e.runtimeProject===t),a=Object.values(i?.stacks??{});return{project:r.name,stack:r.name===t?n:n?i?.stacks[n]??null:a.length===1?a[0]:null}}function V(){return(V=t((()=>{})))()}function H(e,t){e?d(K,e):f(K),t?d(q,t):f(q)}function U(){let e=p(K);return{project:e,stack:e?p(q):null,routes:h(J,{})}}function W(e){m(J,e)}function G(e,t,n,r){let i=e[t];return i?{...e,[t]:i.map(e=>e.name===n?{...e,status:r}:e)}:e}function ce(){return X(M(e=>(e.activeProject?e.stacksByProject[e.activeProject]:void 0)??Q))}var K,q,J,Y,X,Z,Q;function $(){return($=t((()=>{s(),T(),l(),P(),a(),K=`omnitron_active_project`,q=`omnitron_active_stack`,J=`omnitron_workspace_routes`,Y=`__omnitron__`,X=u((e,t)=>{let n=U(),a=new Map,s=null,l=null,u=0,d=0,f=(t,n)=>e(e=>{let r={...e.stackNotices};return n?r[t]=n:delete r[t],{stackNotices:r}}),p=async(n,r)=>{try{await a.get(r),await t().fetchStacks(r)}finally{e(e=>{let t={...e.pendingOps};return delete t[n],{pendingOps:t}})}};return{projects:[],stacksByProject:{},stackReadErrors:{},stackNotices:{},clearStackNotice:e=>f(e),stackRuntimes:{},pendingOps:{},activeProject:n.project,activeStack:n.stack,workspaceRoutes:n.routes,loading:!1,error:null,fetchProjects:async n=>{if(!l)return;let r=u;try{e({loading:!0,error:null});let i=await o.listProjects();if(r!==u)return;e(e=>({projects:i.map(t=>e.stacksByProject[t.name]?{...t,...F(e.stacksByProject[t.name])}:t),loading:!1}));let a=t().activeProject;if(a){let r=B(i,a,t().activeStack);if(r){let i=t().activeStack;if(r.project!==a){let o=e=>i&&r.stack&&e===`/stacks/${i}`?`/stacks/${r.stack}`:e,s={...t().workspaceRoutes};if(s[a]&&!s[r.project]&&(s[r.project]=o(s[a])),e({activeProject:r.project,activeStack:r.stack,workspaceRoutes:s}),H(r.project,r.stack),W(s),t().fetchStacks(r.project),n&&o(n)!==n)return o(n)}else t().fetchStacks(a)}else e({activeProject:null,activeStack:null}),H(null,null)}else if(i.length===1){let n=i[0].name;e({activeProject:n}),H(n,null),t().fetchStacks(n)}}catch(t){r===u&&e({error:t.message,loading:!1})}},setInventoryReaders:(t,n)=>{l!==t&&(l=t,u++,e({projects:[],loading:!1,error:null})),s!==n&&(s=n,d++,a.clear(),e({stacksByProject:{},stackReadErrors:{}}))},fetchStacks:async n=>{if(!s)return null;let r=d,i=a.get(n);if(i)return i;let c=(async()=>{try{let i=await o.listStacks({project:n});return r===d?(e(e=>({stacksByProject:{...e.stacksByProject,[n]:i},stackReadErrors:{...e.stackReadErrors,[n]:null},projects:e.projects.map(e=>e.name===n?{...e,...F(i)}:e)})),t().activeProject===n&&t().activeStack&&!i.some(e=>e.name===t().activeStack)&&(e({activeStack:null}),H(n,null)),i):null}catch(t){return r===d&&e(e=>({stackReadErrors:{...e.stackReadErrors,[n]:t.message}})),null}})();a.set(n,c);try{return await c}finally{a.get(n)===c&&a.delete(n)}},fetchStackStatus:async(t,n)=>{try{let r=await o.getStackStatus({project:t,stack:n});return e(e=>({stackRuntimes:{...e.stackRuntimes,[`${t}/${n}`]:r}})),r}catch(t){return e({error:t.message}),null}},selectProject:(n,r)=>{let i=t(),a={...i.workspaceRoutes};if(r){let e=i.activeProject??Y;a[e]=r}let o=a[n]??`/`;return e({activeProject:n,activeStack:null,workspaceRoutes:a}),H(n,null),W(a),t().fetchStacks(n),o},deselectProject:n=>{let r=t(),i={...r.workspaceRoutes};n&&r.activeProject&&(i[r.activeProject]=n);let a=i[Y]??`/`;return e({activeProject:null,activeStack:null,workspaceRoutes:i}),H(null,null),W(i),a},saveCurrentRoute:n=>{let r=t(),i=r.activeProject??Y,a={...r.workspaceRoutes,[i]:n};e({workspaceRoutes:a}),W(a)},selectStack:n=>{let{activeProject:r,stacksByProject:i}=t();(!n||r&&i[r]?.some(e=>e.name===n))&&(e({activeStack:n}),H(r,n))},addProject:async(n,r)=>{try{e({loading:!0,error:null}),await o.addProject({name:n,path:r}),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},updateProject:async(n,r)=>{try{e({loading:!0,error:null});let i=await o.updateProject({name:n,...r});i.name!==n&&t().activeProject===n&&(e({activeProject:i.name,activeStack:null}),H(i.name,null)),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},removeProject:async n=>{try{e({loading:!0,error:null}),await o.removeProject({name:n}),t().activeProject===n&&(e({activeProject:null,activeStack:null}),H(null,null)),await t().fetchProjects()}catch(t){throw e({error:t.message,loading:!1}),t}},startStack:async(n,a,o)=>{let s=`${n}/${a}`;if(t().pendingOps[s])return{state:`busy`,message:`An operation is already pending for ${s}.`};f(s),e(e=>({pendingOps:{...e.pendingOps,[s]:`starting`},stacksByProject:G(e.stacksByProject,n,a,`starting`)}));try{let{outcome:e,issues:t,online:r,total:c}=ee(await i(`startStack`,{project:n,stack:a,...o?.release?{release:o.release}:{},...o?.workingTree?{workingTree:!0}:{},...o?.allowDirty?{allowDirty:!0}:{}}));if(e===`confirmed`)return{state:e};let l=`${s}: ${r}/${c} apps online. ${t.join(`; `)}.`;return f(s,l),{state:e,message:l}}catch(e){let t=r(e)||c(e),n=t?`No start acknowledgement for ${s}. Inspect the stack and deployment history before retrying.`:e instanceof Error?e.message:String(e);return f(s,n),{state:t?`unconfirmed`:`failed`,message:n}}finally{await p(s,n)}},resumeInstalledStack:async(n,a)=>{let o=`${n}/${a}`;if(!t().pendingOps[o]){f(o),e(e=>({pendingOps:{...e.pendingOps,[o]:`resuming`}}));try{let e=await i(`resumeInstalledStack`,{project:n,stack:a});if(e.outcome!==`running`){let t=e.nodes.filter(e=>e.outcome!==`running`).map(e=>[e.node,e.outcome,e.reason].filter(Boolean).join(` · `));f(o,[`Resume ${e.outcome}`,...t,e.operationId].join(` · `))}}catch(e){f(o,r(e)||c(e)?`Resume acknowledgement unavailable. Check the stack and each recipient before another recovery.`:e instanceof Error?e.message:String(e))}finally{await p(o,n)}}},stopStack:async(n,a,o,s=!1)=>{let l=`${n}/${a}`;if(!t().pendingOps[l]){f(l),e(e=>({pendingOps:{...e.pendingOps,[l]:`stopping`},stacksByProject:G(e.stacksByProject,n,a,`stopping`)}));try{let e=await i(`stopStack`,{project:n,stack:a,review:o,...s&&{keepInfrastructure:!0}});if(e.status!==`stopped`||e.stopOperation?.phase!==`stopped`)throw Error(`Daemon did not confirm the complete stack stop`);if(s&&e.stopOperation.keepInfrastructure!==!0)throw Error(`Daemon did not confirm infrastructure preservation. Inspect the stop operation before retrying.`)}catch(e){f(l,r(e)||c(e)?`Stop acknowledgement has not arrived. Check the stack operation before retrying; applications may still be running.`:e.message)}finally{await p(l,n)}}},createStack:async(n,r)=>{try{e({error:null});let i=await o.createStack({project:n,...r});return await t().fetchStacks(n),i}catch(t){throw e({error:t.message}),t}},deleteStack:async(e,n)=>{try{f(`${e}/${n}`),await o.deleteStack({project:e,stack:n}),await t().fetchStacks(e)}catch(t){throw f(`${e}/${n}`,t.message),t}},getStackPendingOp:(e,n)=>t().pendingOps[`${e}/${n}`]??null,clearError:()=>e({error:null})}}),Z=()=>X(e=>e.activeProject),Q=[]})))()}export{ie as C,oe as S,ne as _,V as a,ae as b,L as c,_ as d,re as f,y as g,v as h,X as i,I as l,T as m,Z as n,R as o,x as p,ce as r,z as s,$ as t,F as u,se as v,b as x,g as y};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{B as r,U as i,V as a,h as o,x as s,z as c}from"./client-DFnuv2z3.js";import{Vt as l,Yt as u}from"./mui-BTN91yBK.js";import{A as d,D as f,F as p,H as m,I as h,M as g,O as ee,Q as _,V as v,Z as y,c as b,d as x,f as S,g as C,h as w,i as T,j as E,k as D,m as O,p as k,r as A,s as j}from"./mui-BXSXx9c9.js";import{B as M,F as N,I as P,a as F,o as I,z as L}from"./mui-Cd711nOk.js";import{B as te,it as R,rt as z,z as B}from"./mui-AnEgAVjz.js";import{_ as V,v as H}from"./mui-BwsIrivo.js";import{r as ne,t as U}from"./alert-uBG6r9NW.js";import{n as re,r as ie}from"./snackbar-DSPmjMyi.js";import{c as ae,n as W,s as oe}from"./access-BvKK9dEv.js";import{r as G,t as se}from"./use-polled-resource-B22hhr5L.js";import{i as K,t as ce}from"./project.store-DuCgv6Eq.js";import{A as le,G as ue,L as de,M as fe,j as pe,p as me}from"./icons-OboZgWSt.js";import{n as he,t as ge}from"./label-B1SF0RTL.js";import{n as _e,t as ve}from"./operation-status-Bm1x1wTz.js";import{n as ye,t as be}from"./page-breadcrumbs-fR7Jmpp4.js";import{n as xe,t as Se}from"./skeleton-BmWDJWF9.js";import{l as Ce}from"./formatters-RnRy4bXm.js";import{n as we,t as Te}from"./empty-content-7jOFhG4C.js";function Ee({project:e,onClose:t,onImport:n}){let[r,i]=(0,q.useState)(``),[a,o]=(0,q.useState)(``),[s,c]=(0,q.useState)(``),[l,u]=(0,q.useState)(`local=test`),[d,f]=(0,q.useState)(``),[m,h]=(0,q.useState)(!1),g=async()=>{f(``),h(!0);try{let i=Object.create(null);for(let e of l.trim().split(/\n+/)){let t=e.split(`=`).map(e=>e.trim());if(t.length!==2||!t[0]||!t[1]||Object.hasOwn(i,t[0]))throw Error(`Use one unique source=project stack mapping per line.`);i[t[0]]=t[1]}await n({project:e.name,name:r.trim(),path:a.trim(),...s.trim()?{registration:s.trim()}:{},stacks:i,expectedRevision:e.catalogRevision??``}),t()}catch(e){f(e instanceof Error?e.message:String(e))}finally{h(!1)}};return(0,J.jsxs)(w,{open:!0,onClose:m?void 0:t,fullWidth:!0,maxWidth:`sm`,children:[(0,J.jsxs)(j,{children:[`Import stacks into `,e.displayName]}),(0,J.jsx)(x,{children:(0,J.jsxs)(V,{spacing:2,sx:{pt:1},children:[(0,J.jsx)(L,{variant:`body2`,color:`text.secondary`,children:`Add stacks from a configuration in this repository. Running applications and their history stay in place.`}),(0,J.jsx)(ve,{active:m,label:`Importing stacks`,detail:`Validating the configuration and saving the project catalog`}),d&&(0,J.jsx)(U,{severity:`error`,children:d}),(0,J.jsx)(F,{autoFocus:!0,label:`Configuration name`,value:r,onChange:e=>i(e.target.value),disabled:m,required:!0}),(0,J.jsx)(F,{label:`Configuration directory`,value:a,onChange:e=>o(e.target.value),disabled:m,required:!0,helperText:`Inside ${e.path}`}),(0,J.jsx)(F,{label:`Stack mapping`,multiline:!0,minRows:2,value:l,onChange:e=>u(e.target.value),disabled:m,helperText:`Each line: source stack = stack name in this project. Map every source stack.`}),(0,J.jsx)(F,{label:`Existing registration (optional)`,value:s,onChange:e=>c(e.target.value),disabled:m,helperText:`To consolidate an existing registration, enter its exact name.`})]})}),(0,J.jsxs)(k,{children:[(0,J.jsx)(p,{onClick:t,disabled:m,children:`Cancel`}),(0,J.jsx)(p,{variant:`contained`,loading:m,onClick:()=>void g(),disabled:m||!r.trim()||!a.trim()||!l.trim()||!e.catalogRevision,children:`Import stacks`})]})]})}var q,J;function Y(){return(Y=e((()=>{_e(),q=t(),h(),C(),O(),S(),b(),H(),I(),M(),ne(),J=n()})))()}function De({project:e,onEdit:t,onRemove:n,onOpen:r,onImport:i}){let a=K(t=>t.stacksByProject[e.name]),o=K(t=>t.stackReadErrors[e.name]),s=K(e=>e.fetchStacks);G(()=>{s(e.name)},{intervalMs:1e4});let c=a?a.some(e=>e.status===`running`):!1,u=a?`${a.filter(e=>e.status===`running`).length}/${a.length}${o?` stale`:``}`:`?/${e.totalStacks}`;return(0,Q.jsxs)(E,{sx:{height:`100%`,display:`flex`,flexDirection:`column`,cursor:`pointer`,transition:`border-color 0.2s, box-shadow 0.2s`,"&:hover":{borderColor:e=>l(e.palette.primary.main,.3),boxShadow:e=>e.shadows[8]}},variant:`outlined`,onClick:()=>r(e.name),children:[(0,Q.jsxs)(f,{sx:{flex:1,pb:`12px !important`},children:[(0,Q.jsxs)(V,{direction:`row`,sx:{alignItems:`flex-start`,justifyContent:`space-between`,mb:1.5},children:[(0,Q.jsxs)(V,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[(0,Q.jsx)(pe,{sx:{fontSize:28,color:c?`primary.main`:`text.secondary`,flexShrink:0}}),(0,Q.jsxs)(v,{sx:{minWidth:0},children:[(0,Q.jsx)(L,{variant:`subtitle2`,noWrap:!0,sx:{fontWeight:700},children:e.displayName}),(0,Q.jsx)(L,{variant:`caption`,noWrap:!0,sx:{color:`text.disabled`},children:e.name})]})]}),(0,Q.jsxs)(ge,{color:c?`success`:`default`,sx:{flexShrink:0},children:[u,` stacks`]})]}),(0,Q.jsx)(A,{sx:{mb:1.5}}),(0,Q.jsx)(X,{label:`Path`,value:e.path,mono:!0}),(0,Q.jsxs)(V,{spacing:.5,sx:{mt:1},children:[(0,Q.jsx)(X,{label:`Stacks`,value:u}),e.enabledStacks.length>0&&(0,Q.jsx)(X,{label:`Enabled`,value:e.enabledStacks.join(`, `)}),(0,Q.jsx)(X,{label:`Registered`,value:Ce(e.registeredAt)})]}),e.enabledStacks.length>0&&(0,Q.jsx)(V,{direction:`row`,spacing:.5,useFlexGap:!0,sx:{mt:1.5,flexWrap:`wrap`},children:e.enabledStacks.map(e=>(0,Q.jsx)(y,{label:e,size:`small`,variant:`outlined`,sx:{height:22,fontSize:11}},e))})]}),(0,Q.jsxs)(D,{sx:{px:2,pb:1.5,gap:1,flexWrap:`wrap`},onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(W,{permission:`OmnitronProject.removeProject`,children:(0,Q.jsx)(N,{title:`Remove project`,children:(0,Q.jsx)(`span`,{children:(0,Q.jsx)(z,{size:`small`,color:`error`,"aria-label":`Remove project ${e.name}`,onClick:()=>n(e.name),disabled:c,sx:{marginInlineEnd:1},children:(0,Q.jsx)(me,{sx:{fontSize:18}})})})})}),(0,Q.jsxs)(v,{sx:{marginInlineStart:`auto`,display:`flex`,alignItems:`center`,flexWrap:`wrap`,gap:1},children:[(0,Q.jsx)(W,{permission:`OmnitronProject.importConfiguration`,children:(0,Q.jsx)(p,{size:`small`,onClick:()=>i(e),children:`Import stacks`})}),(0,Q.jsx)(W,{permission:`OmnitronProject.updateProject`,children:(0,Q.jsx)(N,{title:`Settings`,children:(0,Q.jsx)(z,{size:`small`,"aria-label":`Settings for ${e.name}`,onClick:()=>t(e),children:(0,Q.jsx)(de,{sx:{fontSize:18}})})})})]})]})]})}function X({label:e,value:t,mono:n}){return(0,Q.jsxs)(V,{direction:`row`,spacing:1,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,Q.jsx)(L,{variant:`caption`,sx:{color:`text.disabled`,flexShrink:0},children:e}),(0,Q.jsx)(L,{variant:`caption`,noWrap:!0,title:t,sx:{fontWeight:500,textAlign:`right`,minWidth:0,...n&&{fontFamily:`monospace`,fontSize:11}},children:t})]})}function Oe({open:e,onClose:t,project:n,onSave:r,loading:i}){let[a,o]=(0,Z.useState)(``);if((0,Z.useEffect)(()=>{e&&n&&o(n.path)},[e,n]),!n)return null;let s=a.trim()!==n.path,c=a.trim().length>0&&s;return(0,Q.jsxs)(w,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Q.jsxs)(j,{children:[`Project Settings — `,n.displayName]}),(0,Q.jsx)(x,{children:(0,Q.jsxs)(V,{spacing:2.5,sx:{mt:1},children:[(0,Q.jsx)(F,{label:`Project Name`,value:n.displayName,disabled:!0,fullWidth:!0,helperText:`Derived from omnitron.config.ts — change it there to rename.`}),(0,Q.jsx)(F,{label:`Registry Name`,value:n.name,disabled:!0,fullWidth:!0,size:`small`}),(0,Q.jsx)(F,{label:`Project Path`,value:a,onChange:e=>o(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}}),(n.configurations?.length??0)>1&&(0,Q.jsxs)(V,{spacing:1,children:[(0,Q.jsx)(L,{variant:`subtitle2`,children:`Stack configurations`}),n.configurations?.map(e=>(0,Q.jsxs)(v,{sx:{minWidth:0},children:[(0,Q.jsxs)(L,{variant:`body2`,children:[e.name,` · `,Object.values(e.stacks).join(`, `)||`Default stacks`]}),(0,Q.jsx)(L,{variant:`caption`,sx:{color:`text.secondary`,overflowWrap:`anywhere`},children:e.path})]},e.runtimeProject))]}),(0,Q.jsx)(F,{label:`Registered`,value:new Date(n.registeredAt).toLocaleString(),disabled:!0,fullWidth:!0,size:`small`})]})}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:t,color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.updateProject`,children:(0,Q.jsx)(p,{variant:`contained`,onClick:()=>r(n.name,{path:a.trim()}),disabled:!c||i,children:`Save`})})]})]})}function ke({open:e,onClose:t,onAdd:n,loading:r}){let[i,a]=(0,Z.useState)(``),[o,s]=(0,Z.useState)(``);(0,Z.useEffect)(()=>{e&&(a(``),s(``))},[e]);let c=i.trim().length>0&&o.trim().length>0;return(0,Q.jsxs)(w,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Q.jsx)(j,{children:`Add Project`}),(0,Q.jsx)(x,{children:(0,Q.jsxs)(V,{spacing:2.5,sx:{mt:1},children:[(0,Q.jsx)(F,{label:`Project Name`,value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0,placeholder:`my-project`,helperText:`Unique identifier for the project registry`}),(0,Q.jsx)(F,{label:`Project Path`,value:o,onChange:e=>s(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}})]})}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:t,color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.addProject`,children:(0,Q.jsx)(p,{variant:`contained`,onClick:()=>n(i.trim(),o.trim()),disabled:!c||r,children:`Add Project`})})]})]})}function Ae(){let e=K(e=>e.projects),t=K(e=>e.loading),n=K(e=>e.error),o=K(e=>e.clearError),c=K(e=>e.fetchProjects),l=K(e=>e.addProject),u=K(e=>e.updateProject),d=K(e=>e.removeProject),f=K(e=>e.selectProject),m=a(),{pathname:h}=r(),g=ie(),{can:ee}=ae(),[_,y]=i(),[b,S]=(0,Z.useState)(null),[C,T]=(0,Z.useState)(null),E=_.get(`create`)===`1`&&ee(`OmnitronProject.addProject`),D=(0,Z.useCallback)(e=>{y(t=>{let n=new URLSearchParams(t);return e?n.set(`create`,`1`):n.delete(`create`),n},{replace:!0})},[y]),[O,A]=(0,Z.useState)(null),[M,N]=(0,Z.useState)(!1);G(()=>void c(),{intervalMs:15e3});let P=(0,Z.useCallback)(e=>{let t=f(e,h);m(t)},[f,m,h]),F=(0,Z.useCallback)(async(e,t)=>{N(!0);try{await l(e,t),D(!1),g.success(`Project "${e}" added`)}catch(e){g.error(e?.message??`Failed to add project`)}finally{N(!1)}},[l,g,D]),I=(0,Z.useCallback)(async(e,t)=>{N(!0);try{await u(e,t),S(null),g.success(`Project "${e}" updated`)}catch(e){g.error(e?.message??`Failed to update project`)}finally{N(!1)}},[u,g]),te=(0,Z.useCallback)(async()=>{if(O){N(!0);try{await d(O),g.success(`Project "${O}" removed`)}catch(e){g.error(e?.message??`Failed to remove project`)}finally{A(null),N(!1)}}},[O,d,g]),R=e.find(e=>e.name===O);return(0,Q.jsxs)(V,{spacing:3,children:[(0,Q.jsx)(be,{links:[{name:`Projects`}],action:(0,Q.jsxs)(V,{direction:`row`,spacing:1,children:[(0,Q.jsx)(p,{"data-console-command":`refresh`,variant:`outlined`,size:`small`,startIcon:(0,Q.jsx)(fe,{sx:{fontSize:18}}),onClick:()=>c(),children:`Refresh`}),(0,Q.jsx)(W,{permission:`OmnitronProject.addProject`,children:(0,Q.jsx)(p,{variant:`contained`,size:`small`,startIcon:(0,Q.jsx)(le,{sx:{fontSize:18}}),onClick:()=>D(!0),children:`Add Project`})})]})}),n&&(0,Q.jsx)(U,{closable:!0,severity:`error`,onClose:o,children:n}),t&&e.length===0?(0,Q.jsx)(B,{container:!0,spacing:3,children:[1,2,3].map(e=>(0,Q.jsx)(B,{size:{xs:12,sm:6,md:4},children:(0,Q.jsx)(Se,{variant:`rounded`,height:260})},e))}):e.length===0?(0,Q.jsx)(v,{sx:{flex:1,display:`flex`,alignItems:`center`,justifyContent:`center`,minHeight:300},children:(0,Q.jsx)(Te,{title:`No projects`,description:`Register your first project to get started. A project is a monorepo with omnitron.config.ts at the root.`})}):(0,Q.jsx)(B,{container:!0,spacing:3,children:e.map(e=>(0,Q.jsx)(B,{size:{xs:12,sm:6,md:4},children:(0,Q.jsx)(De,{project:e,onEdit:S,onRemove:A,onOpen:P,onImport:T})},e.name))}),C&&(0,Q.jsx)(Ee,{project:C,onClose:()=>T(null),onImport:async e=>{await s.importConfiguration(e),await c()}}),(0,Q.jsx)(Oe,{open:!!b,onClose:()=>S(null),project:b,onSave:I,loading:M}),(0,Q.jsx)(ke,{open:E,onClose:()=>D(!1),onAdd:F,loading:M}),(0,Q.jsxs)(w,{open:!!O,onClose:()=>A(null),maxWidth:`xs`,fullWidth:!0,children:[(0,Q.jsx)(j,{children:`Remove Project`}),(0,Q.jsxs)(x,{children:[(0,Q.jsxs)(L,{variant:`body2`,children:[`Remove `,(0,Q.jsx)(`strong`,{children:R?.displayName??O}),` from the registry? This does not delete any files on disk.`]}),R&&R.runningStacks>0&&(0,Q.jsxs)(U,{severity:`warning`,sx:{mt:2},children:[`This project has `,R.runningStacks,` running stack(s). Stop them first.`]})]}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:()=>A(null),color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.removeProject`,children:(0,Q.jsx)(p,{onClick:te,color:`error`,variant:`contained`,disabled:M||(R?.runningStacks??0)>0,children:`Remove`})})]})]})]})}var Z,Q;function $(){return($=e((()=>{oe(),Z=t(),c(),m(),g(),ee(),d(),te(),M(),h(),R(),P(),_(),H(),C(),b(),S(),O(),I(),T(),u(),ne(),ye(),we(),he(),xe(),re(),o(),Y(),ce(),se(),ue(),Q=n()})))()}$();export{Ae as default};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{B as r,U as i,V as a,h as o,x as s,z as c}from"./client-CgyTwq9g.js";import{Vt as l,Yt as u}from"./mui-BTN91yBK.js";import{A as d,D as f,F as p,H as m,I as h,M as g,O as ee,Q as _,V as v,Z as y,c as b,d as x,f as S,g as C,h as w,i as T,j as E,k as D,m as O,p as k,r as A,s as j}from"./mui-SNRRJ_vi.js";import{B as M,F as N,I as P,a as F,o as I,z as L}from"./mui-B3fJdIMc.js";import{B as te,it as R,rt as z,z as B}from"./mui-CMWGTMXv.js";import{_ as V,v as H}from"./mui-CPEkFAPo.js";import{r as ne,t as U}from"./alert-BdJ2uaY0.js";import{n as re,r as ie}from"./snackbar-CRX6eqRT.js";import{c as ae,n as W,s as oe}from"./access-I0f72P9m.js";import{r as G,t as se}from"./use-polled-resource-B22hhr5L.js";import{i as K,t as ce}from"./project.store-D5IR3fo9.js";import{A as le,G as ue,L as de,M as fe,j as pe,p as me}from"./icons-B9Ct8PJ9.js";import{n as he,t as ge}from"./label-avMhe08g.js";import{n as _e,t as ve}from"./operation-status-DHyYOT7G.js";import{n as ye,t as be}from"./page-breadcrumbs-3R8RZ3nA.js";import{n as xe,t as Se}from"./skeleton-BnVxAoeX.js";import{l as Ce}from"./formatters-RnRy4bXm.js";import{n as we,t as Te}from"./empty-content-eyDOuOVp.js";function Ee({project:e,onClose:t,onImport:n}){let[r,i]=(0,q.useState)(``),[a,o]=(0,q.useState)(``),[s,c]=(0,q.useState)(``),[l,u]=(0,q.useState)(`local=test`),[d,f]=(0,q.useState)(``),[m,h]=(0,q.useState)(!1),g=async()=>{f(``),h(!0);try{let i=Object.create(null);for(let e of l.trim().split(/\n+/)){let t=e.split(`=`).map(e=>e.trim());if(t.length!==2||!t[0]||!t[1]||Object.hasOwn(i,t[0]))throw Error(`Use one unique source=project stack mapping per line.`);i[t[0]]=t[1]}await n({project:e.name,name:r.trim(),path:a.trim(),...s.trim()?{registration:s.trim()}:{},stacks:i,expectedRevision:e.catalogRevision??``}),t()}catch(e){f(e instanceof Error?e.message:String(e))}finally{h(!1)}};return(0,J.jsxs)(w,{open:!0,onClose:m?void 0:t,fullWidth:!0,maxWidth:`sm`,children:[(0,J.jsxs)(j,{children:[`Import stacks into `,e.displayName]}),(0,J.jsx)(x,{children:(0,J.jsxs)(V,{spacing:2,sx:{pt:1},children:[(0,J.jsx)(L,{variant:`body2`,color:`text.secondary`,children:`Add stacks from a configuration in this repository. Running applications and their history stay in place.`}),(0,J.jsx)(ve,{active:m,label:`Importing stacks`,detail:`Validating the configuration and saving the project catalog`}),d&&(0,J.jsx)(U,{severity:`error`,children:d}),(0,J.jsx)(F,{autoFocus:!0,label:`Configuration name`,value:r,onChange:e=>i(e.target.value),disabled:m,required:!0}),(0,J.jsx)(F,{label:`Configuration directory`,value:a,onChange:e=>o(e.target.value),disabled:m,required:!0,helperText:`Inside ${e.path}`}),(0,J.jsx)(F,{label:`Stack mapping`,multiline:!0,minRows:2,value:l,onChange:e=>u(e.target.value),disabled:m,helperText:`Each line: source stack = stack name in this project. Map every source stack.`}),(0,J.jsx)(F,{label:`Existing registration (optional)`,value:s,onChange:e=>c(e.target.value),disabled:m,helperText:`To consolidate an existing registration, enter its exact name.`})]})}),(0,J.jsxs)(k,{children:[(0,J.jsx)(p,{onClick:t,disabled:m,children:`Cancel`}),(0,J.jsx)(p,{variant:`contained`,loading:m,onClick:()=>void g(),disabled:m||!r.trim()||!a.trim()||!l.trim()||!e.catalogRevision,children:`Import stacks`})]})]})}var q,J;function Y(){return(Y=e((()=>{_e(),q=t(),h(),C(),O(),S(),b(),H(),I(),M(),ne(),J=n()})))()}function De({project:e,onEdit:t,onRemove:n,onOpen:r,onImport:i}){let a=K(t=>t.stacksByProject[e.name]),o=K(t=>t.stackReadErrors[e.name]),s=K(e=>e.fetchStacks);G(()=>{s(e.name)},{intervalMs:1e4});let c=a?a.some(e=>e.status===`running`):!1,u=a?`${a.filter(e=>e.status===`running`).length}/${a.length}${o?` stale`:``}`:`?/${e.totalStacks}`;return(0,Q.jsxs)(E,{sx:{height:`100%`,display:`flex`,flexDirection:`column`,cursor:`pointer`,transition:`border-color 0.2s, box-shadow 0.2s`,"&:hover":{borderColor:e=>l(e.palette.primary.main,.3),boxShadow:e=>e.shadows[8]}},variant:`outlined`,onClick:()=>r(e.name),children:[(0,Q.jsxs)(f,{sx:{flex:1,pb:`12px !important`},children:[(0,Q.jsxs)(V,{direction:`row`,sx:{alignItems:`flex-start`,justifyContent:`space-between`,mb:1.5},children:[(0,Q.jsxs)(V,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[(0,Q.jsx)(pe,{sx:{fontSize:28,color:c?`primary.main`:`text.secondary`,flexShrink:0}}),(0,Q.jsxs)(v,{sx:{minWidth:0},children:[(0,Q.jsx)(L,{variant:`subtitle2`,noWrap:!0,sx:{fontWeight:700},children:e.displayName}),(0,Q.jsx)(L,{variant:`caption`,noWrap:!0,sx:{color:`text.disabled`},children:e.name})]})]}),(0,Q.jsxs)(ge,{color:c?`success`:`default`,sx:{flexShrink:0},children:[u,` stacks`]})]}),(0,Q.jsx)(A,{sx:{mb:1.5}}),(0,Q.jsx)(X,{label:`Path`,value:e.path,mono:!0}),(0,Q.jsxs)(V,{spacing:.5,sx:{mt:1},children:[(0,Q.jsx)(X,{label:`Stacks`,value:u}),e.enabledStacks.length>0&&(0,Q.jsx)(X,{label:`Enabled`,value:e.enabledStacks.join(`, `)}),(0,Q.jsx)(X,{label:`Registered`,value:Ce(e.registeredAt)})]}),e.enabledStacks.length>0&&(0,Q.jsx)(V,{direction:`row`,spacing:.5,useFlexGap:!0,sx:{mt:1.5,flexWrap:`wrap`},children:e.enabledStacks.map(e=>(0,Q.jsx)(y,{label:e,size:`small`,variant:`outlined`,sx:{height:22,fontSize:11}},e))})]}),(0,Q.jsxs)(D,{sx:{px:2,pb:1.5,gap:1,flexWrap:`wrap`},onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(W,{permission:`OmnitronProject.removeProject`,children:(0,Q.jsx)(N,{title:`Remove project`,children:(0,Q.jsx)(`span`,{children:(0,Q.jsx)(z,{size:`small`,color:`error`,"aria-label":`Remove project ${e.name}`,onClick:()=>n(e.name),disabled:c,sx:{marginInlineEnd:1},children:(0,Q.jsx)(me,{sx:{fontSize:18}})})})})}),(0,Q.jsxs)(v,{sx:{marginInlineStart:`auto`,display:`flex`,alignItems:`center`,flexWrap:`wrap`,gap:1},children:[(0,Q.jsx)(W,{permission:`OmnitronProject.importConfiguration`,children:(0,Q.jsx)(p,{size:`small`,onClick:()=>i(e),children:`Import stacks`})}),(0,Q.jsx)(W,{permission:`OmnitronProject.updateProject`,children:(0,Q.jsx)(N,{title:`Settings`,children:(0,Q.jsx)(z,{size:`small`,"aria-label":`Settings for ${e.name}`,onClick:()=>t(e),children:(0,Q.jsx)(de,{sx:{fontSize:18}})})})})]})]})]})}function X({label:e,value:t,mono:n}){return(0,Q.jsxs)(V,{direction:`row`,spacing:1,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,Q.jsx)(L,{variant:`caption`,sx:{color:`text.disabled`,flexShrink:0},children:e}),(0,Q.jsx)(L,{variant:`caption`,noWrap:!0,title:t,sx:{fontWeight:500,textAlign:`right`,minWidth:0,...n&&{fontFamily:`monospace`,fontSize:11}},children:t})]})}function Oe({open:e,onClose:t,project:n,onSave:r,loading:i}){let[a,o]=(0,Z.useState)(``);if((0,Z.useEffect)(()=>{e&&n&&o(n.path)},[e,n]),!n)return null;let s=a.trim()!==n.path,c=a.trim().length>0&&s;return(0,Q.jsxs)(w,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Q.jsxs)(j,{children:[`Project Settings — `,n.displayName]}),(0,Q.jsx)(x,{children:(0,Q.jsxs)(V,{spacing:2.5,sx:{mt:1},children:[(0,Q.jsx)(F,{label:`Project Name`,value:n.displayName,disabled:!0,fullWidth:!0,helperText:`Derived from omnitron.config.ts — change it there to rename.`}),(0,Q.jsx)(F,{label:`Registry Name`,value:n.name,disabled:!0,fullWidth:!0,size:`small`}),(0,Q.jsx)(F,{label:`Project Path`,value:a,onChange:e=>o(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}}),(n.configurations?.length??0)>1&&(0,Q.jsxs)(V,{spacing:1,children:[(0,Q.jsx)(L,{variant:`subtitle2`,children:`Stack configurations`}),n.configurations?.map(e=>(0,Q.jsxs)(v,{sx:{minWidth:0},children:[(0,Q.jsxs)(L,{variant:`body2`,children:[e.name,` · `,Object.values(e.stacks).join(`, `)||`Default stacks`]}),(0,Q.jsx)(L,{variant:`caption`,sx:{color:`text.secondary`,overflowWrap:`anywhere`},children:e.path})]},e.runtimeProject))]}),(0,Q.jsx)(F,{label:`Registered`,value:new Date(n.registeredAt).toLocaleString(),disabled:!0,fullWidth:!0,size:`small`})]})}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:t,color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.updateProject`,children:(0,Q.jsx)(p,{variant:`contained`,onClick:()=>r(n.name,{path:a.trim()}),disabled:!c||i,children:`Save`})})]})]})}function ke({open:e,onClose:t,onAdd:n,loading:r}){let[i,a]=(0,Z.useState)(``),[o,s]=(0,Z.useState)(``);(0,Z.useEffect)(()=>{e&&(a(``),s(``))},[e]);let c=i.trim().length>0&&o.trim().length>0;return(0,Q.jsxs)(w,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Q.jsx)(j,{children:`Add Project`}),(0,Q.jsx)(x,{children:(0,Q.jsxs)(V,{spacing:2.5,sx:{mt:1},children:[(0,Q.jsx)(F,{label:`Project Name`,value:i,onChange:e=>a(e.target.value),fullWidth:!0,autoFocus:!0,placeholder:`my-project`,helperText:`Unique identifier for the project registry`}),(0,Q.jsx)(F,{label:`Project Path`,value:o,onChange:e=>s(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}})]})}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:t,color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.addProject`,children:(0,Q.jsx)(p,{variant:`contained`,onClick:()=>n(i.trim(),o.trim()),disabled:!c||r,children:`Add Project`})})]})]})}function Ae(){let e=K(e=>e.projects),t=K(e=>e.loading),n=K(e=>e.error),o=K(e=>e.clearError),c=K(e=>e.fetchProjects),l=K(e=>e.addProject),u=K(e=>e.updateProject),d=K(e=>e.removeProject),f=K(e=>e.selectProject),m=a(),{pathname:h}=r(),g=ie(),{can:ee}=ae(),[_,y]=i(),[b,S]=(0,Z.useState)(null),[C,T]=(0,Z.useState)(null),E=_.get(`create`)===`1`&&ee(`OmnitronProject.addProject`),D=(0,Z.useCallback)(e=>{y(t=>{let n=new URLSearchParams(t);return e?n.set(`create`,`1`):n.delete(`create`),n},{replace:!0})},[y]),[O,A]=(0,Z.useState)(null),[M,N]=(0,Z.useState)(!1);G(()=>void c(),{intervalMs:15e3});let P=(0,Z.useCallback)(e=>{let t=f(e,h);m(t)},[f,m,h]),F=(0,Z.useCallback)(async(e,t)=>{N(!0);try{await l(e,t),D(!1),g.success(`Project "${e}" added`)}catch(e){g.error(e?.message??`Failed to add project`)}finally{N(!1)}},[l,g,D]),I=(0,Z.useCallback)(async(e,t)=>{N(!0);try{await u(e,t),S(null),g.success(`Project "${e}" updated`)}catch(e){g.error(e?.message??`Failed to update project`)}finally{N(!1)}},[u,g]),te=(0,Z.useCallback)(async()=>{if(O){N(!0);try{await d(O),g.success(`Project "${O}" removed`)}catch(e){g.error(e?.message??`Failed to remove project`)}finally{A(null),N(!1)}}},[O,d,g]),R=e.find(e=>e.name===O);return(0,Q.jsxs)(V,{spacing:3,children:[(0,Q.jsx)(be,{links:[{name:`Projects`}],action:(0,Q.jsxs)(V,{direction:`row`,spacing:1,children:[(0,Q.jsx)(p,{"data-console-command":`refresh`,variant:`outlined`,size:`small`,startIcon:(0,Q.jsx)(fe,{sx:{fontSize:18}}),onClick:()=>c(),children:`Refresh`}),(0,Q.jsx)(W,{permission:`OmnitronProject.addProject`,children:(0,Q.jsx)(p,{variant:`contained`,size:`small`,startIcon:(0,Q.jsx)(le,{sx:{fontSize:18}}),onClick:()=>D(!0),children:`Add Project`})})]})}),n&&(0,Q.jsx)(U,{closable:!0,severity:`error`,onClose:o,children:n}),t&&e.length===0?(0,Q.jsx)(B,{container:!0,spacing:3,children:[1,2,3].map(e=>(0,Q.jsx)(B,{size:{xs:12,sm:6,md:4},children:(0,Q.jsx)(Se,{variant:`rounded`,height:260})},e))}):e.length===0?(0,Q.jsx)(v,{sx:{flex:1,display:`flex`,alignItems:`center`,justifyContent:`center`,minHeight:300},children:(0,Q.jsx)(Te,{title:`No projects`,description:`Register your first project to get started. A project is a monorepo with omnitron.config.ts at the root.`})}):(0,Q.jsx)(B,{container:!0,spacing:3,children:e.map(e=>(0,Q.jsx)(B,{size:{xs:12,sm:6,md:4},children:(0,Q.jsx)(De,{project:e,onEdit:S,onRemove:A,onOpen:P,onImport:T})},e.name))}),C&&(0,Q.jsx)(Ee,{project:C,onClose:()=>T(null),onImport:async e=>{await s.importConfiguration(e),await c()}}),(0,Q.jsx)(Oe,{open:!!b,onClose:()=>S(null),project:b,onSave:I,loading:M}),(0,Q.jsx)(ke,{open:E,onClose:()=>D(!1),onAdd:F,loading:M}),(0,Q.jsxs)(w,{open:!!O,onClose:()=>A(null),maxWidth:`xs`,fullWidth:!0,children:[(0,Q.jsx)(j,{children:`Remove Project`}),(0,Q.jsxs)(x,{children:[(0,Q.jsxs)(L,{variant:`body2`,children:[`Remove `,(0,Q.jsx)(`strong`,{children:R?.displayName??O}),` from the registry? This does not delete any files on disk.`]}),R&&R.runningStacks>0&&(0,Q.jsxs)(U,{severity:`warning`,sx:{mt:2},children:[`This project has `,R.runningStacks,` running stack(s). Stop them first.`]})]}),(0,Q.jsxs)(k,{children:[(0,Q.jsx)(p,{onClick:()=>A(null),color:`inherit`,children:`Cancel`}),(0,Q.jsx)(W,{permission:`OmnitronProject.removeProject`,children:(0,Q.jsx)(p,{onClick:te,color:`error`,variant:`contained`,disabled:M||(R?.runningStacks??0)>0,children:`Remove`})})]})]})]})}var Z,Q;function $(){return($=e((()=>{oe(),Z=t(),c(),m(),g(),ee(),d(),te(),M(),h(),R(),P(),_(),H(),C(),b(),S(),O(),I(),T(),u(),ne(),ye(),we(),he(),xe(),re(),o(),Y(),ce(),se(),ue(),Q=n()})))()}$();export{Ae as default};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{A as t,h as n,k as r,p as i}from"./client-DFnuv2z3.js";import{n as a,t as o}from"./react-CEuifcaQ.js";import{d as s,m as c}from"./project.store-DuCgv6Eq.js";var l,u,d,f,p,m,h,g;function _(){return(_=e((()=>{l={STARTED:`app.started`,STOPPED:`app.stopped`,CRASHED:`app.crashed`,RESTARTING:`app.restarting`,SCALED:`app.scaled`,HEALTH_CHANGED:`app.health_changed`},u={READY:`infra.ready`,DEGRADED:`infra.degraded`,FAILED:`infra.failed`,SERVICE_UP:`infra.service_up`,SERVICE_DOWN:`infra.service_down`,SERVICE_RESTARTED:`infra.service_restarted`},d={FIRED:`alert.fired`,RESOLVED:`alert.resolved`,ACKNOWLEDGED:`alert.acknowledged`},f={COLLECTED:`metrics.collected`},p={ADDED:`project.added`,REMOVED:`project.removed`,CONFIG_RELOADED:`project.config_reloaded`},m={STARTING:`stack.starting`,STARTED:`stack.started`,STOPPING:`stack.stopping`,STOPPED:`stack.stopped`,ERROR:`stack.error`,INFRA_READY:`stack.infra_ready`,SYNC_COMPLETED:`stack.sync_completed`,SYNC_FAILED:`stack.sync_failed`,DEPLOY_PROGRESS:`stack.deploy_progress`,NODE_CONNECTED:`stack.node_connected`,NODE_DISCONNECTED:`stack.node_disconnected`},h={STATUS_UPDATED:`node.status_updated`,WENT_ONLINE:`node.went_online`,WENT_OFFLINE:`node.went_offline`,WENT_DEGRADED:`node.went_degraded`,CHECK_COMPLETED:`node.check_completed`},g={STARTED:`daemon.started`,STOPPING:`daemon.stopping`,CONFIG_RELOADED:`daemon.config_reloaded`},[...Object.values(l),...Object.values(u),...Object.values(d),...Object.values(f),...Object.values(p),...Object.values(m),...Object.values(h),...Object.values(g)]})))()}function v(e){return`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/ws`}function y(){return S||=new x,S}var b,x,S;function C(){return(C=e((()=>{t(),_(),n(),b=[`app.*`,`infra.*`,`alert.*`,`metrics.collected`,`project.*`,`stack.*`,`node.*`,`daemon.*`],x=class{options;socket=null;eventListeners=new Map;connectionListeners=new Set;_connected=!1;constructor(e={}){this.options=e}get connected(){return this._connected}connect(){if(this.socket)return;let e=this.options.url??v(window.location),t=this.options.socket?.(e)??new r({url:e,reconnect:!0,maxReconnectAttempts:1/0});this.socket=t,t.onTask(`emit`,(e,t)=>{e===`omnitron:event`&&this.dispatchEvent(t)}),t.on(`disconnect`,()=>this.setConnected(!1)),t.on(`reconnect`,()=>void this.handshake(t)),t.connect().then(()=>this.handshake(t)).catch(()=>this.setConnected(!1))}disconnect(){let e=this.socket;this.socket=null,this.setConnected(!1),e?.disconnect().catch(()=>void 0)}on(e,t){let n=this.eventListeners.get(e);return n||(n=new Set,this.eventListeners.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&this.eventListeners.delete(e)}}onConnection(e){return this.connectionListeners.add(e),()=>this.connectionListeners.delete(e)}async handshake(e){let t=(this.options.token??i)();if(!t||e!==this.socket)this.setConnected(!1);else try{if(!(await e.runTask(`authenticate`,{token:t}))?.success){this.setConnected(!1);return}await e.invoke(`OmnitronEvents`,`subscribe`,[{channels:this.options.channels??b}]),e===this.socket&&this.setConnected(!0)}catch{this.setConnected(!1)}}setConnected(e){if(this._connected!==e){this._connected=e;for(let t of this.connectionListeners)try{t(e)}catch{}}}dispatchEvent(e){let t=this.eventListeners.get(e.channel);if(t)for(let n of t)n(e);for(let[t,n]of this.eventListeners)if(t===`*`)for(let t of n)t(e);else if(t.endsWith(`.*`)){let r=t.slice(0,-2);if(e.channel.startsWith(r+`.`))for(let t of n)t(e)}}},S=null})))()}function w(e,t){return e.filter(e=>t-e.receivedAt<E||e.status!==`success`&&e.status!==`failed`)}function T(){let e=!1;return()=>{e||(e=!0,--D,D===0&&O&&(O(),O=null))}}var E,D,O,k;function A(){return(A=e((()=>{a(),c(),C(),E=3e4,D=0,O=null,k=o((e,t)=>({connected:!1,appEvents:[],infraEvents:[],alerts:[],lastMetricsUpdate:0,lastEvent:null,lastNodeEvent:null,deployProgress:[],activeDeployProgress:()=>w(t().deployProgress,Date.now()),initialize:()=>{if(D+=1,O)return T();let t=y(),n=[];return n.push(t.onConnection(t=>{e({connected:t})})),n.push(t.on(`app.*`,t=>{let n=t.data,r={name:n.name??`unknown`,pid:n.pid??null,status:t.channel.split(`.`)[1]??`unknown`,timestamp:t.timestamp};e(e=>({appEvents:[r,...e.appEvents].slice(0,50),lastEvent:t}))})),n.push(t.on(`infra.*`,t=>{let n=t.data,r={service:n.service??n.services?.join(`, `)??`unknown`,status:t.channel.split(`.`)[1]??`unknown`,timestamp:t.timestamp};e(e=>({infraEvents:[r,...e.infraEvents].slice(0,20),lastEvent:t}))})),n.push(t.on(`alert.*`,t=>{let n=t.data,r={ruleId:n.ruleId??``,ruleName:n.ruleName??``,severity:n.severity??`info`,message:n.message,timestamp:t.timestamp};e(e=>t.channel===`alert.resolved`?{alerts:e.alerts.filter(e=>e.ruleId!==r.ruleId),lastEvent:t}:{alerts:[r,...e.alerts.filter(e=>e.ruleId!==r.ruleId)],lastEvent:t})})),n.push(t.on(`metrics.collected`,t=>{e({lastMetricsUpdate:t.timestamp,lastEvent:t})})),n.push(t.on(`project.*`,t=>{e({lastEvent:t})})),n.push(t.on(`stack.*`,t=>{if(t.channel===`stack.deploy_progress`){let n=t.data;e(e=>{let r=Date.now();return{deployProgress:[...w(e.deployProgress.filter(e=>s(e)!==s(n)),r),{...n,timestamp:t.timestamp,receivedAt:r}],lastEvent:t}})}else e({lastEvent:t})})),n.push(t.on(`node.*`,t=>{e({lastNodeEvent:t,lastEvent:t})})),n.push(t.on(`daemon.*`,t=>{e({lastEvent:t})})),t.connect(),O=()=>{for(let e of n)e();t.disconnect(),e({connected:!1})},T()}}))})))()}export{k as n,A as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{A as t,h as n,k as r,p as i}from"./client-CgyTwq9g.js";import{n as a,t as o}from"./react-CEuifcaQ.js";import{d as s,m as c}from"./project.store-D5IR3fo9.js";var l,u,d,f,p,m,h,g;function _(){return(_=e((()=>{l={STARTED:`app.started`,STOPPED:`app.stopped`,CRASHED:`app.crashed`,RESTARTING:`app.restarting`,SCALED:`app.scaled`,HEALTH_CHANGED:`app.health_changed`},u={READY:`infra.ready`,DEGRADED:`infra.degraded`,FAILED:`infra.failed`,SERVICE_UP:`infra.service_up`,SERVICE_DOWN:`infra.service_down`,SERVICE_RESTARTED:`infra.service_restarted`},d={FIRED:`alert.fired`,RESOLVED:`alert.resolved`,ACKNOWLEDGED:`alert.acknowledged`},f={COLLECTED:`metrics.collected`},p={ADDED:`project.added`,REMOVED:`project.removed`,CONFIG_RELOADED:`project.config_reloaded`},m={STARTING:`stack.starting`,STARTED:`stack.started`,STOPPING:`stack.stopping`,STOPPED:`stack.stopped`,ERROR:`stack.error`,INFRA_READY:`stack.infra_ready`,SYNC_COMPLETED:`stack.sync_completed`,SYNC_FAILED:`stack.sync_failed`,DEPLOY_PROGRESS:`stack.deploy_progress`,NODE_CONNECTED:`stack.node_connected`,NODE_DISCONNECTED:`stack.node_disconnected`},h={STATUS_UPDATED:`node.status_updated`,WENT_ONLINE:`node.went_online`,WENT_OFFLINE:`node.went_offline`,WENT_DEGRADED:`node.went_degraded`,CHECK_COMPLETED:`node.check_completed`},g={STARTED:`daemon.started`,STOPPING:`daemon.stopping`,CONFIG_RELOADED:`daemon.config_reloaded`},[...Object.values(l),...Object.values(u),...Object.values(d),...Object.values(f),...Object.values(p),...Object.values(m),...Object.values(h),...Object.values(g)]})))()}function v(e){return`${e.protocol===`https:`?`wss:`:`ws:`}//${e.host}/ws`}function y(){return S||=new x,S}var b,x,S;function C(){return(C=e((()=>{t(),_(),n(),b=[`app.*`,`infra.*`,`alert.*`,`metrics.collected`,`project.*`,`stack.*`,`node.*`,`daemon.*`],x=class{options;socket=null;eventListeners=new Map;connectionListeners=new Set;_connected=!1;constructor(e={}){this.options=e}get connected(){return this._connected}connect(){if(this.socket)return;let e=this.options.url??v(window.location),t=this.options.socket?.(e)??new r({url:e,reconnect:!0,maxReconnectAttempts:1/0});this.socket=t,t.onTask(`emit`,(e,t)=>{e===`omnitron:event`&&this.dispatchEvent(t)}),t.on(`disconnect`,()=>this.setConnected(!1)),t.on(`reconnect`,()=>void this.handshake(t)),t.connect().then(()=>this.handshake(t)).catch(()=>this.setConnected(!1))}disconnect(){let e=this.socket;this.socket=null,this.setConnected(!1),e?.disconnect().catch(()=>void 0)}on(e,t){let n=this.eventListeners.get(e);return n||(n=new Set,this.eventListeners.set(e,n)),n.add(t),()=>{n.delete(t),n.size===0&&this.eventListeners.delete(e)}}onConnection(e){return this.connectionListeners.add(e),()=>this.connectionListeners.delete(e)}async handshake(e){let t=(this.options.token??i)();if(!t||e!==this.socket)this.setConnected(!1);else try{if(!(await e.runTask(`authenticate`,{token:t}))?.success){this.setConnected(!1);return}await e.invoke(`OmnitronEvents`,`subscribe`,[{channels:this.options.channels??b}]),e===this.socket&&this.setConnected(!0)}catch{this.setConnected(!1)}}setConnected(e){if(this._connected!==e){this._connected=e;for(let t of this.connectionListeners)try{t(e)}catch{}}}dispatchEvent(e){let t=this.eventListeners.get(e.channel);if(t)for(let n of t)n(e);for(let[t,n]of this.eventListeners)if(t===`*`)for(let t of n)t(e);else if(t.endsWith(`.*`)){let r=t.slice(0,-2);if(e.channel.startsWith(r+`.`))for(let t of n)t(e)}}},S=null})))()}function w(e,t){return e.filter(e=>t-e.receivedAt<E||e.status!==`success`&&e.status!==`failed`)}function T(){let e=!1;return()=>{e||(e=!0,--D,D===0&&O&&(O(),O=null))}}var E,D,O,k;function A(){return(A=e((()=>{a(),c(),C(),E=3e4,D=0,O=null,k=o((e,t)=>({connected:!1,appEvents:[],infraEvents:[],alerts:[],lastMetricsUpdate:0,lastEvent:null,lastNodeEvent:null,deployProgress:[],activeDeployProgress:()=>w(t().deployProgress,Date.now()),initialize:()=>{if(D+=1,O)return T();let t=y(),n=[];return n.push(t.onConnection(t=>{e({connected:t})})),n.push(t.on(`app.*`,t=>{let n=t.data,r={name:n.name??`unknown`,pid:n.pid??null,status:t.channel.split(`.`)[1]??`unknown`,timestamp:t.timestamp};e(e=>({appEvents:[r,...e.appEvents].slice(0,50),lastEvent:t}))})),n.push(t.on(`infra.*`,t=>{let n=t.data,r={service:n.service??n.services?.join(`, `)??`unknown`,status:t.channel.split(`.`)[1]??`unknown`,timestamp:t.timestamp};e(e=>({infraEvents:[r,...e.infraEvents].slice(0,20),lastEvent:t}))})),n.push(t.on(`alert.*`,t=>{let n=t.data,r={ruleId:n.ruleId??``,ruleName:n.ruleName??``,severity:n.severity??`info`,message:n.message,timestamp:t.timestamp};e(e=>t.channel===`alert.resolved`?{alerts:e.alerts.filter(e=>e.ruleId!==r.ruleId),lastEvent:t}:{alerts:[r,...e.alerts.filter(e=>e.ruleId!==r.ruleId)],lastEvent:t})})),n.push(t.on(`metrics.collected`,t=>{e({lastMetricsUpdate:t.timestamp,lastEvent:t})})),n.push(t.on(`project.*`,t=>{e({lastEvent:t})})),n.push(t.on(`stack.*`,t=>{if(t.channel===`stack.deploy_progress`){let n=t.data;e(e=>{let r=Date.now();return{deployProgress:[...w(e.deployProgress.filter(e=>s(e)!==s(n)),r),{...n,timestamp:t.timestamp,receivedAt:r}],lastEvent:t}})}else e({lastEvent:t})})),n.push(t.on(`node.*`,t=>{e({lastNodeEvent:t,lastEvent:t})})),n.push(t.on(`daemon.*`,t=>{e({lastEvent:t})})),t.connect(),O=()=>{for(let e of n)e();t.disconnect(),e({connected:!1})},T()}}))})))()}export{k as n,A as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{Vt as n,Yt as r}from"./mui-BTN91yBK.js";import{H as i,Q as a,V as o,Z as s}from"./mui-BXSXx9c9.js";import{B as c,F as l,I as u,z as d}from"./mui-Cd711nOk.js";import{E as f,T as p}from"./mui-AnEgAVjz.js";import{_ as m,v as h}from"./mui-BwsIrivo.js";import{_ as g,b as _,m as v}from"./project.store-DuCgv6Eq.js";function y(e){return e==null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function b(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t} s`;let n=Math.floor(t/60);return n<60?`${n} m ${String(t%60).padStart(2,`0`)} s`:`${Math.floor(n/60)} h ${String(n%60).padStart(2,`0`)} m`}function x(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{day:`2-digit`,month:`short`,hour:`2-digit`,minute:`2-digit`})}function S(e){if(e.length===0)return`No gates recorded — a stack that requires any will refuse this release.`;let t=e.filter(e=>e.status!==`passed`);return t.length===0?`All ${e.length} gates passed.`:`${t.length} of ${e.length} gates did not pass: ${t.map(e=>`${e.name} ${A[e.status].label}`).join(`, `)}.`}function C(e){return e!=null&&e.loadAtGateEnd[1]>e.cpus}function w(e){let t=e=>e.map(e=>e.toFixed(1)).join(` / `);return`${t(e.loadAtGateStart)} → ${t(e.loadAtGateEnd)} on ${e.cpus} cores`}function T({gates:e,size:t=10,columns:n}){if(e.length===0)return(0,k.jsx)(d,{variant:`caption`,sx:{color:`text.disabled`},children:`no gates`});let r=Math.max(2,Math.round(t*.35));return(0,k.jsx)(o,{sx:n?{display:`grid`,gridTemplateColumns:`repeat(${n}, ${t}px)`,gap:`${r}px`}:{display:`flex`,flexWrap:`wrap`,gap:`${r}px`},children:e.map((e,n)=>(0,k.jsx)(l,{title:`${e.name} — ${A[e.status].label}${e.durationMs?` (${Math.round(e.durationMs/1e3)} s)`:``}${e.detail?` — ${e.detail}`:``}`,arrow:!0,children:(0,k.jsx)(o,{sx:{width:t,height:t,borderRadius:`2px`,bgcolor:A[e.status].color,...e.status===`not-run`&&{bgcolor:`transparent`,border:e=>`1px solid ${e.palette.text.disabled}`}}})},`${e.name}-${n}`))})}function E({release:e,variant:t=`body2`}){let n=g(e);return(0,k.jsx)(d,{variant:t,sx:{fontWeight:600,color:j[n.tone],fontFamily:`monospace`},children:n.text})}function D({projectCommit:e,omniCommit:t,onRemote:n,project:r}){let i=_(n,r);return(0,k.jsxs)(m,{direction:`row`,useFlexGap:!0,spacing:.75,sx:{alignItems:`center`,flexWrap:`wrap`,minWidth:0},children:[(0,k.jsx)(l,{title:`${r} ${e??`unknown`}`,arrow:!0,children:(0,k.jsx)(d,{variant:`caption`,sx:{fontFamily:`monospace`},children:e?.slice(0,8)??`—`})}),(0,k.jsx)(d,{variant:`caption`,sx:{color:`text.disabled`},children:`+`}),(0,k.jsx)(l,{title:`omni ${t??`unknown`}`,arrow:!0,children:(0,k.jsx)(d,{variant:`caption`,sx:{fontFamily:`monospace`},children:t?.slice(0,8)??`—`})}),i.state!==`recorded`&&(0,k.jsx)(l,{title:i.detail,arrow:!0,children:(0,k.jsx)(s,{label:i.label,size:`small`,color:i.state===`missing`?`warning`:`default`,variant:`outlined`})})]})}function O({percent:e,state:t}){return(0,k.jsx)(p,{variant:`determinate`,value:Math.min(100,Math.max(0,e)),color:t===`failed`?`error`:t===`stopped`?`warning`:t===`done`?`success`:`primary`,sx:{height:6,borderRadius:3,bgcolor:e=>n(e.palette.text.primary,.08)}})}var k,A,j,M;function N(){return(N=e((()=>{i(),a(),f(),h(),u(),c(),r(),v(),k=t(),A={passed:{color:`success.main`,label:`passed`},failed:{color:`error.main`,label:`failed`},"timed-out":{color:`warning.main`,label:`timed out`},killed:{color:`warning.dark`,label:`killed`},"not-run":{color:`text.disabled`,label:`did not run`}},j={passed:`success.main`,failed:`error.main`,unfinished:`warning.main`,none:`text.disabled`},M={interrupted:{label:`Interrupted`,color:`warning`},queued:{label:`Queued`,color:`info`},running:{label:`Building`,color:`info`},done:{label:`Built`,color:`success`},failed:{label:`Failed`,color:`error`},stopped:{label:`Stopped`,color:`warning`}}})))()}export{E as a,b as c,w as d,C as f,A as i,S as l,O as n,T as o,x as p,D as r,y as s,M as t,N as u};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{Vt as n,Yt as r}from"./mui-BTN91yBK.js";import{H as i,Q as a,V as o,Z as s}from"./mui-SNRRJ_vi.js";import{B as c,F as l,I as u,z as d}from"./mui-B3fJdIMc.js";import{E as f,T as p}from"./mui-CMWGTMXv.js";import{_ as m,v as h}from"./mui-CPEkFAPo.js";import{_ as g,b as _,m as v}from"./project.store-D5IR3fo9.js";function y(e){return e==null?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`}function b(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t} s`;let n=Math.floor(t/60);return n<60?`${n} m ${String(t%60).padStart(2,`0`)} s`:`${Math.floor(n/60)} h ${String(n%60).padStart(2,`0`)} m`}function x(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(void 0,{day:`2-digit`,month:`short`,hour:`2-digit`,minute:`2-digit`})}function S(e){if(e.length===0)return`No gates recorded — a stack that requires any will refuse this release.`;let t=e.filter(e=>e.status!==`passed`);return t.length===0?`All ${e.length} gates passed.`:`${t.length} of ${e.length} gates did not pass: ${t.map(e=>`${e.name} ${A[e.status].label}`).join(`, `)}.`}function C(e){return e!=null&&e.loadAtGateEnd[1]>e.cpus}function w(e){let t=e=>e.map(e=>e.toFixed(1)).join(` / `);return`${t(e.loadAtGateStart)} → ${t(e.loadAtGateEnd)} on ${e.cpus} cores`}function T({gates:e,size:t=10,columns:n}){if(e.length===0)return(0,k.jsx)(d,{variant:`caption`,sx:{color:`text.disabled`},children:`no gates`});let r=Math.max(2,Math.round(t*.35));return(0,k.jsx)(o,{sx:n?{display:`grid`,gridTemplateColumns:`repeat(${n}, ${t}px)`,gap:`${r}px`}:{display:`flex`,flexWrap:`wrap`,gap:`${r}px`},children:e.map((e,n)=>(0,k.jsx)(l,{title:`${e.name} — ${A[e.status].label}${e.durationMs?` (${Math.round(e.durationMs/1e3)} s)`:``}${e.detail?` — ${e.detail}`:``}`,arrow:!0,children:(0,k.jsx)(o,{sx:{width:t,height:t,borderRadius:`2px`,bgcolor:A[e.status].color,...e.status===`not-run`&&{bgcolor:`transparent`,border:e=>`1px solid ${e.palette.text.disabled}`}}})},`${e.name}-${n}`))})}function E({release:e,variant:t=`body2`}){let n=g(e);return(0,k.jsx)(d,{variant:t,sx:{fontWeight:600,color:j[n.tone],fontFamily:`monospace`},children:n.text})}function D({projectCommit:e,omniCommit:t,onRemote:n,project:r}){let i=_(n,r);return(0,k.jsxs)(m,{direction:`row`,useFlexGap:!0,spacing:.75,sx:{alignItems:`center`,flexWrap:`wrap`,minWidth:0},children:[(0,k.jsx)(l,{title:`${r} ${e??`unknown`}`,arrow:!0,children:(0,k.jsx)(d,{variant:`caption`,sx:{fontFamily:`monospace`},children:e?.slice(0,8)??`—`})}),(0,k.jsx)(d,{variant:`caption`,sx:{color:`text.disabled`},children:`+`}),(0,k.jsx)(l,{title:`omni ${t??`unknown`}`,arrow:!0,children:(0,k.jsx)(d,{variant:`caption`,sx:{fontFamily:`monospace`},children:t?.slice(0,8)??`—`})}),i.state!==`recorded`&&(0,k.jsx)(l,{title:i.detail,arrow:!0,children:(0,k.jsx)(s,{label:i.label,size:`small`,color:i.state===`missing`?`warning`:`default`,variant:`outlined`})})]})}function O({percent:e,state:t}){return(0,k.jsx)(p,{variant:`determinate`,value:Math.min(100,Math.max(0,e)),color:t===`failed`?`error`:t===`stopped`?`warning`:t===`done`?`success`:`primary`,sx:{height:6,borderRadius:3,bgcolor:e=>n(e.palette.text.primary,.08)}})}var k,A,j,M;function N(){return(N=e((()=>{i(),a(),f(),h(),u(),c(),r(),v(),k=t(),A={passed:{color:`success.main`,label:`passed`},failed:{color:`error.main`,label:`failed`},"timed-out":{color:`warning.main`,label:`timed out`},killed:{color:`warning.dark`,label:`killed`},"not-run":{color:`text.disabled`,label:`did not run`}},j={passed:`success.main`,failed:`error.main`,unfinished:`warning.main`,none:`text.disabled`},M={interrupted:{label:`Interrupted`,color:`warning`},queued:{label:`Queued`,color:`info`},running:{label:`Building`,color:`info`},done:{label:`Built`,color:`success`},failed:{label:`Failed`,color:`error`},stopped:{label:`Stopped`,color:`warning`}}})))()}export{E as a,b as c,w as d,C as f,A as i,S as l,O as n,T as o,x as p,D as r,y as s,M as t,N as u};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{P as n,z as r}from"./client-DFnuv2z3.js";import{Vt as i,Yt as a}from"./mui-BTN91yBK.js";import{D as o,F as s,H as c,I as l,M as u,O as d,Q as f,V as p,Z as m,i as h,j as g,r as _}from"./mui-BXSXx9c9.js";import{B as v,F as y,I as b,z as x}from"./mui-Cd711nOk.js";import{it as S,rt as C}from"./mui-AnEgAVjz.js";import{_ as w,v as T}from"./mui-BwsIrivo.js";import{d as E,j as D,o as O}from"./controls-C5W8gHU4.js";import{n as k,t as A}from"./use-copy-to-clipboard-BWYpToS3.js";import{n as j,s as M}from"./access-BvKK9dEv.js";import{G as N,z as P}from"./icons-OboZgWSt.js";import{c as F,l as I,n as L,o as R,t as z,u as B}from"./release-bits-BJ6i23y0.js";function V({record:e,onStop:t,onDeploy:r,compact:a}){let c=z[e.state]??{label:e.state,color:`info`},l=e.state===`running`||e.state===`queued`,u=e.history.slice(-60),d=e.request,f=k();return(0,H.jsx)(g,{variant:`outlined`,sx:{borderColor:l?`primary.main`:void 0},children:(0,H.jsxs)(o,{sx:{pb:2},children:[(0,H.jsxs)(w,{direction:`row`,spacing:1.5,sx:{alignItems:`center`,flexWrap:`wrap`,mb:1},children:[(0,H.jsx)(m,{label:c.label,size:`small`,color:c.color,sx:{fontWeight:600}}),(0,H.jsx)(x,{variant:`subtitle2`,children:d.project}),(0,H.jsx)(y,{title:f.state===`success`?`Copied`:`Copy build ID`,children:(0,H.jsx)(C,{size:`small`,"aria-label":`Copy build ID`,onClick:()=>void f.copy(e.buildId),children:f.state===`success`?(0,H.jsx)(O,{fontSize:`inherit`}):(0,H.jsx)(E,{fontSize:`inherit`})})}),f.state===`error`&&(0,H.jsx)(x,{component:`code`,role:`status`,variant:`caption`,sx:{overflowWrap:`anywhere`},children:e.buildId}),e.releaseId&&(0,H.jsx)(x,{component:n,to:`/releases/${e.releaseId}`,variant:`caption`,sx:{fontFamily:`monospace`,color:`text.secondary`,textDecoration:`none`,"&:hover":{textDecoration:`underline`}},children:e.releaseId}),(0,H.jsx)(p,{sx:{flex:1}}),(0,H.jsxs)(x,{variant:`caption`,sx:{color:`text.secondary`},children:[F(e.durationMs),e.requestedBy?` · ${e.requestedBy}`:``]}),l&&t&&(0,H.jsx)(j,{permission:`OmnitronRelease.stopBuild`,children:(0,H.jsx)(s,{size:`small`,color:`warning`,startIcon:(0,H.jsx)(P,{}),onClick:()=>t(e.buildId),children:e.state===`queued`?`Cancel`:`Stop`})}),e.state===`done`&&e.releaseId&&r&&(0,H.jsx)(j,{permission:`OmnitronProject.startStack`,children:(0,H.jsx)(s,{size:`small`,variant:`contained`,onClick:()=>r(e.releaseId),children:`Deploy…`})})]}),(0,H.jsx)(L,{percent:e.percent,state:e.state}),(0,H.jsxs)(w,{direction:`row`,spacing:1,sx:{alignItems:`baseline`,flexWrap:`wrap`,mt:1},children:[(0,H.jsx)(x,{variant:`body2`,sx:{fontWeight:500,minWidth:0,overflowWrap:`anywhere`},children:e.phase}),(0,H.jsxs)(x,{variant:`caption`,sx:{color:`text.secondary`},children:[e.percent,`%`]})]}),(0,H.jsxs)(w,{direction:`row`,spacing:.75,sx:{mt:.5,flexWrap:`wrap`},children:[d.forStack&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`statics: ${d.forStack}`,sx:{height:20,fontSize:11}}),d.projectCommit&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`project ${d.projectCommit}`,sx:{height:20,fontSize:11}}),d.omniCommit&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`omni ${d.omniCommit}`,sx:{height:20,fontSize:11}}),d.skipGates&&(0,H.jsx)(m,{size:`small`,color:`warning`,variant:`outlined`,label:`gates skipped`,sx:{height:20,fontSize:11}}),(d.envKeys??[]).map(e=>(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:e,sx:{height:20,fontSize:11,fontFamily:`monospace`}},e))]}),d.frameworkSource&&(0,H.jsxs)(x,{variant:`caption`,component:`div`,sx:{mt:.75,color:`text.secondary`,overflowWrap:`anywhere`},children:[`SDK source: `,d.frameworkSource.repository,d.frameworkSource.ref?` · ${d.frameworkSource.ref}`:``]}),e.publication&&(0,H.jsxs)(x,{variant:`caption`,component:`div`,sx:{mt:.75,color:`text.secondary`,overflowWrap:`anywhere`},children:[e.publication.location,` · SHA-256 `,(0,H.jsx)(`code`,{children:e.publication.indexSha256})]}),e.gates.length>0&&(0,H.jsxs)(p,{sx:{mt:1.5},children:[(0,H.jsx)(x,{variant:`caption`,sx:{color:`text.secondary`},children:I(e.gates)}),(0,H.jsx)(p,{sx:{mt:.5},children:(0,H.jsx)(R,{gates:e.gates})})]}),e.error&&(0,H.jsx)(p,{sx:{mt:1.5,p:1.25,borderRadius:1,bgcolor:e=>i(e.palette.error.main,.08)},children:(0,H.jsx)(x,{variant:`caption`,sx:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontFamily:`monospace`,color:`error.main`},children:e.error})}),!a&&u.length>0&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(_,{sx:{my:1.5}}),(0,H.jsx)(p,{sx:{maxHeight:220,overflowY:`auto`,fontFamily:`monospace`,fontSize:12,lineHeight:1.7},children:u.map((e,t)=>(0,H.jsxs)(p,{sx:{display:`flex`,gap:1.5},children:[(0,H.jsx)(x,{component:`span`,variant:`caption`,sx:{color:`text.disabled`,fontFamily:`monospace`,flexShrink:0},children:e.at.slice(11,19)}),(0,H.jsxs)(x,{component:`span`,variant:`caption`,sx:{color:`text.disabled`,fontFamily:`monospace`,width:34,flexShrink:0,textAlign:`right`},children:[e.percent,`%`]}),(0,H.jsx)(x,{component:`span`,variant:`caption`,sx:{fontFamily:`monospace`,minWidth:0,overflowWrap:`anywhere`},children:e.phase})]},`${e.at}-${t}`))})]})]})})}var H;function U(){return(U=e((()=>{M(),c(),l(),u(),d(),f(),h(),T(),v(),a(),r(),A(),D(),S(),b(),N(),B(),H=t()})))()}export{U as n,V as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{P as n,z as r}from"./client-CgyTwq9g.js";import{Vt as i,Yt as a}from"./mui-BTN91yBK.js";import{D as o,F as s,H as c,I as l,M as u,O as d,Q as f,V as p,Z as m,i as h,j as g,r as _}from"./mui-SNRRJ_vi.js";import{B as v,F as y,I as b,z as x}from"./mui-B3fJdIMc.js";import{it as S,rt as C}from"./mui-CMWGTMXv.js";import{_ as w,v as T}from"./mui-CPEkFAPo.js";import{d as E,j as D,o as O}from"./controls-CqeGPnaF.js";import{n as k,t as A}from"./use-copy-to-clipboard-BWYpToS3.js";import{n as j,s as M}from"./access-I0f72P9m.js";import{G as N,z as P}from"./icons-B9Ct8PJ9.js";import{c as F,l as I,n as L,o as R,t as z,u as B}from"./release-bits-IehuBssK.js";function V({record:e,onStop:t,onDeploy:r,compact:a}){let c=z[e.state]??{label:e.state,color:`info`},l=e.state===`running`||e.state===`queued`,u=e.history.slice(-60),d=e.request,f=k();return(0,H.jsx)(g,{variant:`outlined`,sx:{borderColor:l?`primary.main`:void 0},children:(0,H.jsxs)(o,{sx:{pb:2},children:[(0,H.jsxs)(w,{direction:`row`,spacing:1.5,sx:{alignItems:`center`,flexWrap:`wrap`,mb:1},children:[(0,H.jsx)(m,{label:c.label,size:`small`,color:c.color,sx:{fontWeight:600}}),(0,H.jsx)(x,{variant:`subtitle2`,children:d.project}),(0,H.jsx)(y,{title:f.state===`success`?`Copied`:`Copy build ID`,children:(0,H.jsx)(C,{size:`small`,"aria-label":`Copy build ID`,onClick:()=>void f.copy(e.buildId),children:f.state===`success`?(0,H.jsx)(O,{fontSize:`inherit`}):(0,H.jsx)(E,{fontSize:`inherit`})})}),f.state===`error`&&(0,H.jsx)(x,{component:`code`,role:`status`,variant:`caption`,sx:{overflowWrap:`anywhere`},children:e.buildId}),e.releaseId&&(0,H.jsx)(x,{component:n,to:`/releases/${e.releaseId}`,variant:`caption`,sx:{fontFamily:`monospace`,color:`text.secondary`,textDecoration:`none`,"&:hover":{textDecoration:`underline`}},children:e.releaseId}),(0,H.jsx)(p,{sx:{flex:1}}),(0,H.jsxs)(x,{variant:`caption`,sx:{color:`text.secondary`},children:[F(e.durationMs),e.requestedBy?` · ${e.requestedBy}`:``]}),l&&t&&(0,H.jsx)(j,{permission:`OmnitronRelease.stopBuild`,children:(0,H.jsx)(s,{size:`small`,color:`warning`,startIcon:(0,H.jsx)(P,{}),onClick:()=>t(e.buildId),children:e.state===`queued`?`Cancel`:`Stop`})}),e.state===`done`&&e.releaseId&&r&&(0,H.jsx)(j,{permission:`OmnitronProject.startStack`,children:(0,H.jsx)(s,{size:`small`,variant:`contained`,onClick:()=>r(e.releaseId),children:`Deploy…`})})]}),(0,H.jsx)(L,{percent:e.percent,state:e.state}),(0,H.jsxs)(w,{direction:`row`,spacing:1,sx:{alignItems:`baseline`,flexWrap:`wrap`,mt:1},children:[(0,H.jsx)(x,{variant:`body2`,sx:{fontWeight:500,minWidth:0,overflowWrap:`anywhere`},children:e.phase}),(0,H.jsxs)(x,{variant:`caption`,sx:{color:`text.secondary`},children:[e.percent,`%`]})]}),(0,H.jsxs)(w,{direction:`row`,spacing:.75,sx:{mt:.5,flexWrap:`wrap`},children:[d.forStack&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`statics: ${d.forStack}`,sx:{height:20,fontSize:11}}),d.projectCommit&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`project ${d.projectCommit}`,sx:{height:20,fontSize:11}}),d.omniCommit&&(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:`omni ${d.omniCommit}`,sx:{height:20,fontSize:11}}),d.skipGates&&(0,H.jsx)(m,{size:`small`,color:`warning`,variant:`outlined`,label:`gates skipped`,sx:{height:20,fontSize:11}}),(d.envKeys??[]).map(e=>(0,H.jsx)(m,{size:`small`,variant:`outlined`,label:e,sx:{height:20,fontSize:11,fontFamily:`monospace`}},e))]}),d.frameworkSource&&(0,H.jsxs)(x,{variant:`caption`,component:`div`,sx:{mt:.75,color:`text.secondary`,overflowWrap:`anywhere`},children:[`SDK source: `,d.frameworkSource.repository,d.frameworkSource.ref?` · ${d.frameworkSource.ref}`:``]}),e.publication&&(0,H.jsxs)(x,{variant:`caption`,component:`div`,sx:{mt:.75,color:`text.secondary`,overflowWrap:`anywhere`},children:[e.publication.location,` · SHA-256 `,(0,H.jsx)(`code`,{children:e.publication.indexSha256})]}),e.gates.length>0&&(0,H.jsxs)(p,{sx:{mt:1.5},children:[(0,H.jsx)(x,{variant:`caption`,sx:{color:`text.secondary`},children:I(e.gates)}),(0,H.jsx)(p,{sx:{mt:.5},children:(0,H.jsx)(R,{gates:e.gates})})]}),e.error&&(0,H.jsx)(p,{sx:{mt:1.5,p:1.25,borderRadius:1,bgcolor:e=>i(e.palette.error.main,.08)},children:(0,H.jsx)(x,{variant:`caption`,sx:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`,fontFamily:`monospace`,color:`error.main`},children:e.error})}),!a&&u.length>0&&(0,H.jsxs)(H.Fragment,{children:[(0,H.jsx)(_,{sx:{my:1.5}}),(0,H.jsx)(p,{sx:{maxHeight:220,overflowY:`auto`,fontFamily:`monospace`,fontSize:12,lineHeight:1.7},children:u.map((e,t)=>(0,H.jsxs)(p,{sx:{display:`flex`,gap:1.5},children:[(0,H.jsx)(x,{component:`span`,variant:`caption`,sx:{color:`text.disabled`,fontFamily:`monospace`,flexShrink:0},children:e.at.slice(11,19)}),(0,H.jsxs)(x,{component:`span`,variant:`caption`,sx:{color:`text.disabled`,fontFamily:`monospace`,width:34,flexShrink:0,textAlign:`right`},children:[e.percent,`%`]}),(0,H.jsx)(x,{component:`span`,variant:`caption`,sx:{fontFamily:`monospace`,minWidth:0,overflowWrap:`anywhere`},children:e.phase})]},`${e.at}-${t}`))})]})]})})}var H;function U(){return(U=e((()=>{M(),c(),l(),u(),d(),f(),h(),T(),v(),a(),r(),A(),D(),S(),b(),N(),B(),H=t()})))()}export{U as n,V as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{B as r,P as i,h as a,l as o,z as s}from"./client-DFnuv2z3.js";import{F as c,H as l,I as u,Q as d,V as f,Z as p}from"./mui-BXSXx9c9.js";import{B as m,F as h,I as g,z as _}from"./mui-Cd711nOk.js";import{it as v,rt as y}from"./mui-AnEgAVjz.js";import{_ as b,v as x}from"./mui-BwsIrivo.js";import{r as S,t as C}from"./alert-uBG6r9NW.js";import{n as w,t as T}from"./use-polled-resource-B22hhr5L.js";import{S as E,i as D,m as O,t as k,v as A}from"./project.store-DuCgv6Eq.js";import{G as j,M}from"./icons-OboZgWSt.js";import{n as N,t as P}from"./operation-status-Bm1x1wTz.js";import{i as F,r as I}from"./deploy-progress-CUUwlYtQ.js";import{p as L,u as R}from"./release-bits-BJ6i23y0.js";function z({project:e,stack:t}){let[n,r]=(0,B.useState)(null),[a,s]=(0,B.useState)(!1),[l,u]=(0,B.useState)(!1),d=async()=>{s(!0),u(!1);try{r(await o.invoke(`daemon`,`OmnitronProject`,`inspectInstalledArtifacts`,[{project:e,stack:t}],{timeout:9e4}))}catch{u(!0)}finally{s(!1)}};return(0,V.jsxs)(f,{sx:{minWidth:0,width:1},children:[(0,V.jsx)(c,{size:`small`,variant:`text`,disabled:a,onClick:()=>void d(),sx:{px:0,justifyContent:`flex-start`},children:n?`Inspect installed files again`:`Inspect installed files`}),(0,V.jsx)(P,{active:a,label:`Comparing installed files and retained release archives…`,detail:`Read-only inspection; applications keep running.`}),l&&(0,V.jsx)(C,{severity:`warning`,children:`Inspection is unavailable. The backend may need an update; any results below are the previous observation.`}),n&&(0,V.jsxs)(b,{spacing:.75,children:[(0,V.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Installed files · `,L(n.observedAt)]}),!n.catalogComplete&&(0,V.jsxs)(C,{severity:`warning`,children:[`Release catalog is incomplete. `,n.catalogReasons.join(` `)]}),n.nodes.map((e,t)=>(0,V.jsxs)(_,{variant:`caption`,color:`warning.main`,children:[e.node,`: `,e.error]},`${e.node}:${t}`)),n.apps.map((e,t)=>(0,V.jsxs)(f,{component:`details`,sx:{minWidth:0,overflowWrap:`anywhere`},children:[(0,V.jsxs)(_,{component:`summary`,variant:`caption`,sx:{cursor:`pointer`,color:e.candidates.some(e=>e.state===`modified`)||e.state!==`observed`?`warning.main`:`text.secondary`},children:[e.node,` / `,e.app.split(`/`).at(-1),` · `,e.state===`observed`?e.candidates.length>1?`Ambiguous base (${e.candidates.length} matches)`:e.candidates.length?e.candidates[0].state===`modified`?`Installed files modified`:e.candidates[0].state===`entry-matches`?`Entry matches (partial check)`:`Comparison incomplete`:`No catalog match`:e.state.replaceAll(`-`,` `)]}),(0,V.jsxs)(b,{spacing:.5,sx:{py:.5},children:[(0,V.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Observed PID `,e.pid??`none`,` · `,L(e.observedAt)]}),e.reasons.map(e=>(0,V.jsx)(_,{variant:`caption`,color:`warning.main`,children:e},e)),e.candidates.map(e=>(0,V.jsxs)(f,{children:[(0,V.jsxs)(_,{variant:`caption`,component:`div`,children:[`Retained archive matches `,(0,V.jsx)(_,{component:i,variant:`caption`,to:`/releases/${encodeURIComponent(e.releaseId)}`,sx:{color:`primary.main`,textDecoration:`none`,fontFamily:`monospace`},children:e.releaseId})]}),e.reasons.map(e=>(0,V.jsx)(_,{variant:`caption`,component:`div`,color:`warning.main`,children:e},e))]},e.releaseId))]})]},`${e.node}:${e.app}:${t}`)),n.apps.length===0&&n.nodes.length===0&&(0,V.jsx)(_,{variant:`caption`,color:`text.secondary`,children:`No application installation handles were reported.`}),n.limitations.map(e=>(0,V.jsx)(_,{variant:`caption`,color:`text.secondary`,children:e},e))]})]})}var B,V;function H(){return(H=e((()=>{B=t(),s(),l(),u(),x(),m(),S(),a(),N(),R(),V=n()})))()}function U({project:e,stack:t}){let n=r(),{data:a,loading:o,error:s,refresh:c}=w(()=>A(e,{stacks:async()=>{let t=await D.getState().fetchStacks(e);if(!t)throw Error(`Stack inventory unavailable`);return t},deployments:()=>F.deployments()}),{intervalMs:2e4,resourceKey:e}),l=a?.stacks.filter(e=>!t||e.stack===t)??[];return(0,W.jsxs)(f,{component:`section`,"aria-label":`Deployment state`,sx:{minWidth:0},children:[(0,W.jsxs)(b,{direction:`row`,spacing:1,sx:{alignItems:`center`,mb:.5},children:[(0,W.jsx)(_,{variant:`subtitle2`,sx:{flex:1},children:`Deployment state`}),a&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Observed `,L(a.observedAt)]}),(0,W.jsx)(h,{title:`Refresh deployment state`,children:(0,W.jsx)(`span`,{children:(0,W.jsx)(y,{size:`small`,"aria-label":`Refresh deployment state`,disabled:o,onClick:()=>void c(),children:(0,W.jsx)(M,{})})})})]}),(0,W.jsx)(P,{active:o&&!a,label:`Reading stack state and deployment history…`}),s&&(0,W.jsx)(C,{severity:`warning`,children:`Cannot refresh deployment state. Any values below are the last observation.`}),a&&!a.inventory.known&&(0,W.jsx)(C,{severity:`warning`,children:a.inventory.why}),a?.inventory.known&&l.length===0&&(0,W.jsx)(_,{variant:`body2`,color:`text.secondary`,children:t?`This stack is no longer in the project inventory.`:`No stacks configured for this project.`}),l.map(t=>(0,W.jsxs)(f,{sx:{display:`grid`,gridTemplateColumns:{xs:`minmax(0, 1fr)`,md:`minmax(140px, .7fr) minmax(180px, 1fr) minmax(0, 1.3fr)`},gap:{xs:1,md:2},py:1.5,borderBottom:1,borderColor:`divider`,overflowWrap:`anywhere`},children:[(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0},children:[(0,W.jsx)(_,{component:i,to:`/stacks/${encodeURIComponent(t.stack)}`,variant:`body2`,onClick:t=>{if(t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let r=D.getState();r.activeProject!==e&&r.selectProject(e,n.pathname)},sx:{color:`primary.main`,textDecoration:`none`,fontWeight:600},children:t.stack}),(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,children:t.type===`local`?`Controller node`:t.type===`cluster`?`Distributed stack`:`Remote stack`}),t.type!==`local`&&t.nodes.map(e=>(0,W.jsxs)(_,{variant:`caption`,color:e.connected&&!s?`text.secondary`:`warning.main`,children:[e.label?`${e.label} · `:``,e.endpoint,` · `,s?`last observed`:e.connected?`inventory observed`:`inventory unavailable`]},`${e.host}:${e.port}`))]}),(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0,alignItems:`flex-start`},children:[(0,W.jsxs)(b,{direction:`row`,useFlexGap:!0,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,W.jsx)(p,{size:`small`,variant:`outlined`,label:t.status,color:!s&&t.status===`running`?`success`:t.status===`stopped`?`default`:`warning`}),(0,W.jsxs)(_,{variant:`body2`,children:[`Apps `,t.apps.online,`/`,t.apps.total,t.apps.unknown?` · ${t.apps.unknown} unknown`:``]})]}),(0,W.jsx)(_,{variant:`caption`,color:t.runningRelease===`confirmed`||t.runningRelease===`not-running`?`text.secondary`:`warning.main`,children:E(t)}),t.releaseEvidence.releases.map(e=>(0,W.jsx)(h,{describeChild:!0,title:`Manifest SHA-256: ${e.manifestSha256}`,children:(0,W.jsx)(_,{component:i,to:`/releases/${encodeURIComponent(e.releaseId)}`,variant:`body2`,sx:{color:`primary.main`,textDecoration:`none`,fontFamily:`monospace`},children:e.releaseId})},`${e.releaseId}:${e.manifestSha256}`)),t.releaseEvidence.total>0&&(0,W.jsxs)(f,{component:`details`,sx:{minWidth:0,width:1},children:[(0,W.jsxs)(_,{component:`summary`,variant:`caption`,sx:{cursor:`pointer`,color:`text.secondary`},children:[t.releaseEvidence.verified,`/`,t.releaseEvidence.total,` launch identities verified`]}),(0,W.jsx)(b,{spacing:.75,sx:{pt:.75},children:t.releaseEvidence.observations.map((e,t)=>(0,W.jsxs)(f,{children:[(0,W.jsxs)(_,{variant:`caption`,component:`div`,children:[e.node?`${e.node} / `:``,e.app,` · `,e.state,e.releaseId?` · ${e.releaseId}`:``]}),e.consumer&&e.consumer.releaseId!==e.releaseId&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,component:`div`,sx:{overflowWrap:`anywhere`},children:[`Producer `,e.releaseId,` · selected consumer `,e.consumer.releaseId]}),e.reason&&(0,W.jsx)(_,{variant:`caption`,color:`warning.main`,component:`div`,children:e.reason}),e.observedAt&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,component:`div`,children:[`Launch verified `,L(e.observedAt)]})]},`${e.node}:${e.app}:${t}`))})]}),(0,W.jsx)(z,{project:e,stack:t.stack},`${e}:${t.stack}`)]}),(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0},children:[(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,children:`Last recorded deployment`}),t.history.known?t.history.last?(0,W.jsxs)(W.Fragment,{children:[t.history.last.release?(0,W.jsx)(_,{component:i,to:`/releases/${encodeURIComponent(t.history.last.release)}`,variant:`body2`,sx:{color:`text.primary`,textDecoration:`none`,fontFamily:`monospace`,overflowWrap:`anywhere`},children:t.history.last.release}):(0,W.jsx)(_,{variant:`body2`,children:t.history.last.releaseUnnamed?`Release name not recorded`:`Working tree`}),(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[L(t.history.last.at),` · `,t.history.last.source??`source not recorded`]})]}):(0,W.jsx)(_,{variant:`body2`,color:`text.secondary`,children:`No deployment record`}):(0,W.jsx)(_,{variant:`body2`,color:`warning.main`,children:t.history.why})]})]},t.stack)),l.length>0&&(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,sx:{display:`block`,pt:1},children:`Verified launch receipts identify the admitted release, not continuous in-memory code integrity. Deployment history is a separate record.`})]})}var W;function G(){return(G=e((()=>{s(),l(),d(),v(),x(),g(),m(),S(),O(),j(),T(),I(),k(),N(),R(),H(),W=n()})))()}export{G as n,U as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{B as r,P as i,h as a,l as o,z as s}from"./client-CgyTwq9g.js";import{F as c,H as l,I as u,Q as d,V as f,Z as p}from"./mui-SNRRJ_vi.js";import{B as m,F as h,I as g,z as _}from"./mui-B3fJdIMc.js";import{it as v,rt as y}from"./mui-CMWGTMXv.js";import{_ as b,v as x}from"./mui-CPEkFAPo.js";import{r as S,t as C}from"./alert-BdJ2uaY0.js";import{n as w,t as T}from"./use-polled-resource-B22hhr5L.js";import{S as E,i as D,m as O,t as k,v as A}from"./project.store-D5IR3fo9.js";import{G as j,M}from"./icons-B9Ct8PJ9.js";import{n as N,t as P}from"./operation-status-DHyYOT7G.js";import{i as F,r as I}from"./deploy-progress-B39cvvCE.js";import{p as L,u as R}from"./release-bits-IehuBssK.js";function z({project:e,stack:t}){let[n,r]=(0,B.useState)(null),[a,s]=(0,B.useState)(!1),[l,u]=(0,B.useState)(!1),d=async()=>{s(!0),u(!1);try{r(await o.invoke(`daemon`,`OmnitronProject`,`inspectInstalledArtifacts`,[{project:e,stack:t}],{timeout:9e4}))}catch{u(!0)}finally{s(!1)}};return(0,V.jsxs)(f,{sx:{minWidth:0,width:1},children:[(0,V.jsx)(c,{size:`small`,variant:`text`,disabled:a,onClick:()=>void d(),sx:{px:0,justifyContent:`flex-start`},children:n?`Inspect installed files again`:`Inspect installed files`}),(0,V.jsx)(P,{active:a,label:`Comparing installed files and retained release archives…`,detail:`Read-only inspection; applications keep running.`}),l&&(0,V.jsx)(C,{severity:`warning`,children:`Inspection is unavailable. The backend may need an update; any results below are the previous observation.`}),n&&(0,V.jsxs)(b,{spacing:.75,children:[(0,V.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Installed files · `,L(n.observedAt)]}),!n.catalogComplete&&(0,V.jsxs)(C,{severity:`warning`,children:[`Release catalog is incomplete. `,n.catalogReasons.join(` `)]}),n.nodes.map((e,t)=>(0,V.jsxs)(_,{variant:`caption`,color:`warning.main`,children:[e.node,`: `,e.error]},`${e.node}:${t}`)),n.apps.map((e,t)=>(0,V.jsxs)(f,{component:`details`,sx:{minWidth:0,overflowWrap:`anywhere`},children:[(0,V.jsxs)(_,{component:`summary`,variant:`caption`,sx:{cursor:`pointer`,color:e.candidates.some(e=>e.state===`modified`)||e.state!==`observed`?`warning.main`:`text.secondary`},children:[e.node,` / `,e.app.split(`/`).at(-1),` · `,e.state===`observed`?e.candidates.length>1?`Ambiguous base (${e.candidates.length} matches)`:e.candidates.length?e.candidates[0].state===`modified`?`Installed files modified`:e.candidates[0].state===`entry-matches`?`Entry matches (partial check)`:`Comparison incomplete`:`No catalog match`:e.state.replaceAll(`-`,` `)]}),(0,V.jsxs)(b,{spacing:.5,sx:{py:.5},children:[(0,V.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Observed PID `,e.pid??`none`,` · `,L(e.observedAt)]}),e.reasons.map(e=>(0,V.jsx)(_,{variant:`caption`,color:`warning.main`,children:e},e)),e.candidates.map(e=>(0,V.jsxs)(f,{children:[(0,V.jsxs)(_,{variant:`caption`,component:`div`,children:[`Retained archive matches `,(0,V.jsx)(_,{component:i,variant:`caption`,to:`/releases/${encodeURIComponent(e.releaseId)}`,sx:{color:`primary.main`,textDecoration:`none`,fontFamily:`monospace`},children:e.releaseId})]}),e.reasons.map(e=>(0,V.jsx)(_,{variant:`caption`,component:`div`,color:`warning.main`,children:e},e))]},e.releaseId))]})]},`${e.node}:${e.app}:${t}`)),n.apps.length===0&&n.nodes.length===0&&(0,V.jsx)(_,{variant:`caption`,color:`text.secondary`,children:`No application installation handles were reported.`}),n.limitations.map(e=>(0,V.jsx)(_,{variant:`caption`,color:`text.secondary`,children:e},e))]})]})}var B,V;function H(){return(H=e((()=>{B=t(),s(),l(),u(),x(),m(),S(),a(),N(),R(),V=n()})))()}function U({project:e,stack:t}){let n=r(),{data:a,loading:o,error:s,refresh:c}=w(()=>A(e,{stacks:async()=>{let t=await D.getState().fetchStacks(e);if(!t)throw Error(`Stack inventory unavailable`);return t},deployments:()=>F.deployments()}),{intervalMs:2e4,resourceKey:e}),l=a?.stacks.filter(e=>!t||e.stack===t)??[];return(0,W.jsxs)(f,{component:`section`,"aria-label":`Deployment state`,sx:{minWidth:0},children:[(0,W.jsxs)(b,{direction:`row`,spacing:1,sx:{alignItems:`center`,mb:.5},children:[(0,W.jsx)(_,{variant:`subtitle2`,sx:{flex:1},children:`Deployment state`}),a&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[`Observed `,L(a.observedAt)]}),(0,W.jsx)(h,{title:`Refresh deployment state`,children:(0,W.jsx)(`span`,{children:(0,W.jsx)(y,{size:`small`,"aria-label":`Refresh deployment state`,disabled:o,onClick:()=>void c(),children:(0,W.jsx)(M,{})})})})]}),(0,W.jsx)(P,{active:o&&!a,label:`Reading stack state and deployment history…`}),s&&(0,W.jsx)(C,{severity:`warning`,children:`Cannot refresh deployment state. Any values below are the last observation.`}),a&&!a.inventory.known&&(0,W.jsx)(C,{severity:`warning`,children:a.inventory.why}),a?.inventory.known&&l.length===0&&(0,W.jsx)(_,{variant:`body2`,color:`text.secondary`,children:t?`This stack is no longer in the project inventory.`:`No stacks configured for this project.`}),l.map(t=>(0,W.jsxs)(f,{sx:{display:`grid`,gridTemplateColumns:{xs:`minmax(0, 1fr)`,md:`minmax(140px, .7fr) minmax(180px, 1fr) minmax(0, 1.3fr)`},gap:{xs:1,md:2},py:1.5,borderBottom:1,borderColor:`divider`,overflowWrap:`anywhere`},children:[(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0},children:[(0,W.jsx)(_,{component:i,to:`/stacks/${encodeURIComponent(t.stack)}`,variant:`body2`,onClick:t=>{if(t.button!==0||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey)return;let r=D.getState();r.activeProject!==e&&r.selectProject(e,n.pathname)},sx:{color:`primary.main`,textDecoration:`none`,fontWeight:600},children:t.stack}),(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,children:t.type===`local`?`Controller node`:t.type===`cluster`?`Distributed stack`:`Remote stack`}),t.type!==`local`&&t.nodes.map(e=>(0,W.jsxs)(_,{variant:`caption`,color:e.connected&&!s?`text.secondary`:`warning.main`,children:[e.label?`${e.label} · `:``,e.endpoint,` · `,s?`last observed`:e.connected?`inventory observed`:`inventory unavailable`]},`${e.host}:${e.port}`))]}),(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0,alignItems:`flex-start`},children:[(0,W.jsxs)(b,{direction:`row`,useFlexGap:!0,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,W.jsx)(p,{size:`small`,variant:`outlined`,label:t.status,color:!s&&t.status===`running`?`success`:t.status===`stopped`?`default`:`warning`}),(0,W.jsxs)(_,{variant:`body2`,children:[`Apps `,t.apps.online,`/`,t.apps.total,t.apps.unknown?` · ${t.apps.unknown} unknown`:``]})]}),(0,W.jsx)(_,{variant:`caption`,color:t.runningRelease===`confirmed`||t.runningRelease===`not-running`?`text.secondary`:`warning.main`,children:E(t)}),t.releaseEvidence.releases.map(e=>(0,W.jsx)(h,{describeChild:!0,title:`Manifest SHA-256: ${e.manifestSha256}`,children:(0,W.jsx)(_,{component:i,to:`/releases/${encodeURIComponent(e.releaseId)}`,variant:`body2`,sx:{color:`primary.main`,textDecoration:`none`,fontFamily:`monospace`},children:e.releaseId})},`${e.releaseId}:${e.manifestSha256}`)),t.releaseEvidence.total>0&&(0,W.jsxs)(f,{component:`details`,sx:{minWidth:0,width:1},children:[(0,W.jsxs)(_,{component:`summary`,variant:`caption`,sx:{cursor:`pointer`,color:`text.secondary`},children:[t.releaseEvidence.verified,`/`,t.releaseEvidence.total,` launch identities verified`]}),(0,W.jsx)(b,{spacing:.75,sx:{pt:.75},children:t.releaseEvidence.observations.map((e,t)=>(0,W.jsxs)(f,{children:[(0,W.jsxs)(_,{variant:`caption`,component:`div`,children:[e.node?`${e.node} / `:``,e.app,` · `,e.state,e.releaseId?` · ${e.releaseId}`:``]}),e.consumer&&e.consumer.releaseId!==e.releaseId&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,component:`div`,sx:{overflowWrap:`anywhere`},children:[`Producer `,e.releaseId,` · selected consumer `,e.consumer.releaseId]}),e.reason&&(0,W.jsx)(_,{variant:`caption`,color:`warning.main`,component:`div`,children:e.reason}),e.observedAt&&(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,component:`div`,children:[`Launch verified `,L(e.observedAt)]})]},`${e.node}:${e.app}:${t}`))})]}),(0,W.jsx)(z,{project:e,stack:t.stack},`${e}:${t.stack}`)]}),(0,W.jsxs)(b,{spacing:.5,sx:{minWidth:0},children:[(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,children:`Last recorded deployment`}),t.history.known?t.history.last?(0,W.jsxs)(W.Fragment,{children:[t.history.last.release?(0,W.jsx)(_,{component:i,to:`/releases/${encodeURIComponent(t.history.last.release)}`,variant:`body2`,sx:{color:`text.primary`,textDecoration:`none`,fontFamily:`monospace`,overflowWrap:`anywhere`},children:t.history.last.release}):(0,W.jsx)(_,{variant:`body2`,children:t.history.last.releaseUnnamed?`Release name not recorded`:`Working tree`}),(0,W.jsxs)(_,{variant:`caption`,color:`text.secondary`,children:[L(t.history.last.at),` · `,t.history.last.source??`source not recorded`]})]}):(0,W.jsx)(_,{variant:`body2`,color:`text.secondary`,children:`No deployment record`}):(0,W.jsx)(_,{variant:`body2`,color:`warning.main`,children:t.history.why})]})]},t.stack)),l.length>0&&(0,W.jsx)(_,{variant:`caption`,color:`text.secondary`,sx:{display:`block`,pt:1},children:`Verified launch receipts identify the admitted release, not continuous in-memory code integrity. Deployment history is a separate record.`})]})}var W;function G(){return(G=e((()=>{s(),l(),d(),v(),x(),g(),m(),S(),O(),j(),T(),I(),k(),N(),R(),H(),W=n()})))()}export{G as n,U as t};
@@ -1,2 +1,2 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{P as r,S as i,h as a,z as o}from"./client-DFnuv2z3.js";import{F as s,H as c,I as l,Q as u,V as d,Z as f,_t as ee,at as p,c as m,ct as h,d as te,f as g,g as _,gt as v,h as ne,ht as y,lt as re,m as ie,ot as b,p as ae,s as x,st as oe,ut as S,vt as C}from"./mui-BXSXx9c9.js";import{B as w,F as T,I as E,a as D,o as O,z as k}from"./mui-Cd711nOk.js";import{U as A,W as j,it as M,l as N,rt as se,u as P}from"./mui-AnEgAVjz.js";import{_ as F,n as I,t as ce,v as L}from"./mui-BwsIrivo.js";import{r as le,t as R}from"./alert-uBG6r9NW.js";import{c as ue,n as z,s as de}from"./access-BvKK9dEv.js";import{n as B,t as fe}from"./use-polled-resource-B22hhr5L.js";import{C as pe,i as me,m as V,n as he,t as H}from"./project.store-DuCgv6Eq.js";import{A as ge,G as U,M as _e,m as W,o as ve,p as G}from"./icons-OboZgWSt.js";import{n as ye,t as K}from"./operation-status-Bm1x1wTz.js";import{n as be,t as xe}from"./page-breadcrumbs-fR7Jmpp4.js";import{n as Se,t as Ce}from"./admin-data-table-BKSDI8sU.js";import{i as we,r as Te}from"./deploy-progress-CUUwlYtQ.js";import{a as Ee,d as De,f as Oe,o as ke,p as Ae,r as je,s as q,u as Me}from"./release-bits-BJ6i23y0.js";import{n as Ne,t as Pe}from"./deploy-release-dialog-58lGZDNk.js";import{n as Fe,t as Ie}from"./release-build-panel-BNXkwNE1.js";import{n as Le,t as Re}from"./release-deployment-state-gN8ZT3aq.js";function ze(e){if(typeof e!=`string`||!e||e.length>4096||e.trim()!==e||/\p{Cc}/u.test(e))return!1;if(/^(?:\/|\.\.?\/|~\/|[A-Za-z]:[\\/])/.test(e))return!0;if(/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(e))try{let t=new URL(e);if(![`https:`,`http:`,`ssh:`,`git:`,`git+ssh:`,`git+https:`,`git+http:`,`file:`].includes(t.protocol)||/[?#\\]/.test(e)||t.password)return!1;let n=e.slice(e.indexOf(`://`)+3).split(`/`)[0];return(n.includes(`@`)?n.slice(0,n.lastIndexOf(`@`)):``).includes(`:`)||t.username&&![`ssh:`,`git+ssh:`].includes(t.protocol)?!1:t.protocol===`file:`?!t.username:!!t.hostname}catch{return!1}return e.includes(`://`)||/^(?:https?|ssh|git|file):/i.test(e)||/^[A-Za-z][A-Za-z0-9+.-]*::/.test(e)?!1:e.includes(`/`)&&e.indexOf(`/`)<e.indexOf(`:`)?!0:e.includes(`:`)?/[?#\\]/.test(e)||/^[^/:]+:[^/]*@[^/:]+:/.test(e)?!1:/^(?:[^/@:\s]+@)?(?:\[[0-9A-Fa-f:]+\]|[^/@:\s]+):.+$/.test(e):!0}function Be(e){if(!ze(e))throw new He}var Ve,He;function Ue(){return(Ue=e((()=>{Ve=`Release repository identity is unsafe or invalid; use a credential-free Git remote without query or fragment parameters`,He=class extends Error{constructor(){super(Ve),this.name=`RepositoryIdentityError`}}})))()}function We(e){return typeof e==`string`&&e.length<=1024&&/^refs\/(?:heads|tags)\/.+/.test(e)&&!/[\s~^:?*[\\]|\p{Cc}/u.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.endsWith(`.`)&&e.split(`/`).every(e=>e&&!e.startsWith(`.`)&&!e.endsWith(`.lock`))}function Ge(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Framework source must contain a repository and an optional full Git ref`);let t=e;if(Object.keys(t).some(e=>e!==`repository`&&e!==`ref`))throw Error(`Unknown framework source option`);if(Be(t.repository),t.repository===`(no origin)`)throw Error(`Framework source requires a repository`);if(t.repository.startsWith(`-`))throw Error(`Framework repository cannot start with an option; use ./ for a local path`);if(t.ref!==void 0&&!We(t.ref))throw Error(`Framework ref must be a full refs/heads/ or refs/tags/ name`);return Object.freeze({repository:t.repository,...t.ref===void 0?{}:{ref:t.ref}})}function Ke(){return(Ke=e((()=>{Ue()})))()}function qe(e){let t={},n=[];for(let r of e.split(`
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{P as r,S as i,h as a,z as o}from"./client-CgyTwq9g.js";import{F as s,H as c,I as l,Q as u,V as d,Z as f,_t as ee,at as p,c as m,ct as h,d as te,f as g,g as _,gt as v,h as ne,ht as y,lt as re,m as ie,ot as b,p as ae,s as x,st as oe,ut as S,vt as C}from"./mui-SNRRJ_vi.js";import{B as w,F as T,I as E,a as D,o as O,z as k}from"./mui-B3fJdIMc.js";import{U as A,W as j,it as M,l as N,rt as se,u as P}from"./mui-CMWGTMXv.js";import{_ as F,n as I,t as ce,v as L}from"./mui-CPEkFAPo.js";import{r as le,t as R}from"./alert-BdJ2uaY0.js";import{c as ue,n as z,s as de}from"./access-I0f72P9m.js";import{n as B,t as fe}from"./use-polled-resource-B22hhr5L.js";import{C as pe,i as me,m as V,n as he,t as H}from"./project.store-D5IR3fo9.js";import{A as ge,G as U,M as _e,m as W,o as ve,p as G}from"./icons-B9Ct8PJ9.js";import{n as ye,t as K}from"./operation-status-DHyYOT7G.js";import{n as be,t as xe}from"./page-breadcrumbs-3R8RZ3nA.js";import{n as Se,t as Ce}from"./admin-data-table-CAEL2f-m.js";import{i as we,r as Te}from"./deploy-progress-B39cvvCE.js";import{a as Ee,d as De,f as Oe,o as ke,p as Ae,r as je,s as q,u as Me}from"./release-bits-IehuBssK.js";import{n as Ne,t as Pe}from"./deploy-release-dialog-CnzaO_xL.js";import{n as Fe,t as Ie}from"./release-build-panel-C48hP_9w.js";import{n as Le,t as Re}from"./release-deployment-state-BfmxZP4Y.js";function ze(e){if(typeof e!=`string`||!e||e.length>4096||e.trim()!==e||/\p{Cc}/u.test(e))return!1;if(/^(?:\/|\.\.?\/|~\/|[A-Za-z]:[\\/])/.test(e))return!0;if(/^[A-Za-z][A-Za-z0-9+.-]*:\/\//.test(e))try{let t=new URL(e);if(![`https:`,`http:`,`ssh:`,`git:`,`git+ssh:`,`git+https:`,`git+http:`,`file:`].includes(t.protocol)||/[?#\\]/.test(e)||t.password)return!1;let n=e.slice(e.indexOf(`://`)+3).split(`/`)[0];return(n.includes(`@`)?n.slice(0,n.lastIndexOf(`@`)):``).includes(`:`)||t.username&&![`ssh:`,`git+ssh:`].includes(t.protocol)?!1:t.protocol===`file:`?!t.username:!!t.hostname}catch{return!1}return e.includes(`://`)||/^(?:https?|ssh|git|file):/i.test(e)||/^[A-Za-z][A-Za-z0-9+.-]*::/.test(e)?!1:e.includes(`/`)&&e.indexOf(`/`)<e.indexOf(`:`)?!0:e.includes(`:`)?/[?#\\]/.test(e)||/^[^/:]+:[^/]*@[^/:]+:/.test(e)?!1:/^(?:[^/@:\s]+@)?(?:\[[0-9A-Fa-f:]+\]|[^/@:\s]+):.+$/.test(e):!0}function Be(e){if(!ze(e))throw new He}var Ve,He;function Ue(){return(Ue=e((()=>{Ve=`Release repository identity is unsafe or invalid; use a credential-free Git remote without query or fragment parameters`,He=class extends Error{constructor(){super(Ve),this.name=`RepositoryIdentityError`}}})))()}function We(e){return typeof e==`string`&&e.length<=1024&&/^refs\/(?:heads|tags)\/.+/.test(e)&&!/[\s~^:?*[\\]|\p{Cc}/u.test(e)&&!e.includes(`..`)&&!e.includes(`@{`)&&!e.endsWith(`.`)&&e.split(`/`).every(e=>e&&!e.startsWith(`.`)&&!e.endsWith(`.lock`))}function Ge(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Framework source must contain a repository and an optional full Git ref`);let t=e;if(Object.keys(t).some(e=>e!==`repository`&&e!==`ref`))throw Error(`Unknown framework source option`);if(Be(t.repository),t.repository===`(no origin)`)throw Error(`Framework source requires a repository`);if(t.repository.startsWith(`-`))throw Error(`Framework repository cannot start with an option; use ./ for a local path`);if(t.ref!==void 0&&!We(t.ref))throw Error(`Framework ref must be a full refs/heads/ or refs/tags/ name`);return Object.freeze({repository:t.repository,...t.ref===void 0?{}:{ref:t.ref}})}function Ke(){return(Ke=e((()=>{Ue()})))()}function qe(e){let t={},n=[];for(let r of e.split(`
2
2
  `)){let e=r.trim();if(!e||e.startsWith(`#`))continue;let i=e.indexOf(`=`);if(i<=0){n.push(e);continue}let a=e.slice(0,i).trim();/^[A-Z][A-Z0-9_]*$/.test(a)?t[a]=e.slice(i+1):n.push(e)}return{env:t,bad:n}}function Je({open:e,onClose:t,defaultProject:n,onStarted:r,preflight:a,activeBuilds:o=[]}){let{snapshot:c}=ue(),l=me(e=>e.projects),u=me(e=>e.stacksByProject),m=me(e=>e.fetchStacks),[h,g]=(0,J.useState)(n??``),_=e=>o.find(t=>(t.request.project===e||!a?.buildSlots)&&(t.state===`running`||t.state===`queued`)),v=_(h),[ie,b]=(0,J.useState)(null),[S,C]=(0,J.useState)(``),[w,T]=(0,J.useState)(``),[E,O]=(0,J.useState)(``),[j,M]=(0,J.useState)(``),[se,P]=(0,J.useState)(``),[I,L]=(0,J.useState)(!1),[le,R]=(0,J.useState)(!1),[z,de]=(0,J.useState)(!1),[B,fe]=(0,J.useState)(!1),[pe,V]=(0,J.useState)(null),he=(0,J.useMemo)(()=>u[h]??[],[u,h]);(0,J.useEffect)(()=>{e&&(g(n??``),V(null),O(``),M(``),P(``),b(null),de(!1),L(!1),R(!1),C(``),T(``))},[e,n]),(0,J.useEffect)(()=>{e&&h&&!u[h]&&m(h)},[e,h,u,m]);let H=ie??he.find(e=>e.config?.release?.mode===`required`)?.name??``,{env:ge,bad:U}=(0,J.useMemo)(()=>qe(se),[se]),_e=a?.frameworkSource===1,W=c?.role===`admin`,G=_e&&W,ye=Object.keys(ge).length>0,K=(0,J.useMemo)(()=>{if(!E.trim()&&!j.trim())return{source:void 0,error:null};try{return{source:Ge({repository:E.trim(),...j.trim()?{ref:j.trim()}:{}}),error:null}}catch(e){return{source:void 0,error:e.message}}},[E,j]);return(0,Y.jsxs)(ne,{open:e,onClose:B?void 0:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Y.jsx)(x,{children:`Build a release`}),(0,Y.jsx)(te,{children:(0,Y.jsxs)(F,{spacing:2.5,sx:{mt:1},children:[(0,Y.jsx)(k,{variant:`body2`,sx:{color:`text.secondary`},children:`The controller builds the selected project commit with its locked framework packages or linked Omnitron revision. Gate results and artifact checksums are saved with the release.`}),a?.load&&a.cpus!==null&&a.load[0]>a.cpus&&(0,Y.jsxs)(p,{severity:`warning`,children:[`This machine is carrying more than its cores right now — load`,` `,(0,Y.jsx)(`strong`,{children:a.load.map(e=>e.toFixed(1)).join(` / `)}),` on `,a.cpus,` cores. The gates time out on a machine like this: tests that pass alone fail on connection deadlines, and a different set each run. A release built now records the machine as much as the code.`]}),(0,Y.jsxs)(D,{select:!0,label:`Project`,value:h,helperText:v?`${v.request.project} · ${v.buildId} · ${v.phase}`:a?.buildSlots?`${a.buildSlots.running}/${a.buildSlots.limit} build slots in use · ${a.buildSlots.queued} queued`:void 0,onChange:e=>{g(e.target.value),b(null),P(``),C(``),T(``),O(``),M(``)},size:`small`,fullWidth:!0,disabled:B,children:[l.length===0&&(0,Y.jsx)(N,{disabled:!0,value:``,children:`No projects registered`}),l.map(e=>(0,Y.jsx)(N,{value:e.name,disabled:!!_(e.name),children:e.name},e.name))]}),(0,Y.jsxs)(D,{select:!0,label:`Static bundle for`,value:H,onChange:e=>b(e.target.value),size:`small`,fullWidth:!0,disabled:B,helperText:`A frontend bakes its environment in, so the bundle belongs to one stack. A stack whose gateway serves one refuses a release built without it.`,children:[(0,Y.jsx)(N,{value:``,children:(0,Y.jsx)(`em`,{children:`none — backends only`})}),he.map(e=>(0,Y.jsx)(N,{value:e.name,children:(0,Y.jsxs)(F,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,Y.jsx)(k,{variant:`body2`,children:e.name}),e.config?.release?.mode===`required`&&(0,Y.jsx)(f,{label:`releases only`,size:`small`,color:`info`,variant:`outlined`,sx:{height:18,fontSize:10}})]})},e.name))]}),(0,Y.jsxs)(F,{direction:{xs:`column`,sm:`row`},spacing:1.5,children:[(0,Y.jsx)(D,{label:`Project commit`,placeholder:`HEAD`,value:S,onChange:e=>C(e.target.value),size:`small`,fullWidth:!0,disabled:B}),(0,Y.jsx)(D,{label:`Framework commit`,placeholder:`From project lockfile or linked checkout`,value:w,onChange:e=>T(e.target.value),size:`small`,fullWidth:!0,disabled:B})]}),(0,Y.jsxs)(ee,{disableGutters:!0,variant:`outlined`,disabled:B,children:[(0,Y.jsx)(re,{expandIcon:(0,Y.jsx)(ve,{sx:{transform:`rotate(90deg)`}}),"aria-controls":`release-source-options`,id:`release-source-toggle`,children:(0,Y.jsxs)(k,{variant:`body2`,children:[`SDK source`,K.source?` · overridden for this build`:_e?` · project defaults`:` · controller defaults`]})}),(0,Y.jsx)(y,{id:`release-source-options`,children:(0,Y.jsxs)(F,{spacing:1.5,children:[(0,Y.jsx)(k,{variant:`caption`,sx:{color:`text.secondary`},children:_e?G?`Project settings and package metadata choose the source. An override runs code from another SDK repository and requires administrator access.`:`Builds use project settings and package metadata. Selecting another SDK source requires administrator access.`:`This controller has not reported support for SDK source configuration. Update it to use committed omnitron.framework settings or a build override. Ordinary builds use its existing source selection.`}),(0,Y.jsx)(D,{label:`SDK repository`,value:E,onChange:e=>O(e.target.value),placeholder:`https://git.example.org/platform/omni.git`,size:`small`,fullWidth:!0,disabled:B||!G,helperText:`HTTPS, SSH or a local path on the build controller. Keep credentials in its Git configuration.`}),(0,Y.jsx)(D,{label:`Required source ref (optional)`,value:j,onChange:e=>M(e.target.value),placeholder:`refs/heads/stable or refs/tags/v1.0.0`,size:`small`,fullWidth:!0,disabled:B||!G,helperText:`The exact framework commit must belong to this branch or match this tag.`}),K.error&&(0,Y.jsx)(p,{severity:`error`,children:K.error})]})})]}),(0,Y.jsx)(D,{label:`Environment for the gates`,placeholder:`TEST_DATABASE__PORT=5432`,value:se,onChange:e=>P(e.target.value),size:`small`,fullWidth:!0,multiline:!0,minRows:2,disabled:B||!W,helperText:W?U.length>0?`Not a NAME=value line: ${U.slice(0,2).join(` · `)}`:`One NAME=value per line. The daemon has the system environment, not your shell’s.`:`Environment overrides require administrator access. Ordinary builds use the project and controller environment.`,error:U.length>0}),(0,Y.jsxs)(d,{children:[a?.publish===1&&(0,Y.jsx)(A,{control:(0,Y.jsx)(ce,{checked:z,onChange:e=>de(e.target.checked),size:`small`,disabled:B||I}),label:(0,Y.jsx)(k,{variant:`body2`,children:`Publish verified build to shared store`})}),(0,Y.jsx)(A,{control:(0,Y.jsx)(ce,{checked:I,onChange:e=>L(e.target.checked),size:`small`,disabled:B||z}),label:(0,Y.jsx)(k,{variant:`body2`,children:`Skip the gates`})}),a?.store&&(0,Y.jsx)(k,{variant:`caption`,component:`p`,color:`text.secondary`,sx:{overflowWrap:`anywhere`},children:a.store.state===`configured`?a.store.location:a.store.state===`invalid`?`Release store configuration is invalid.`:`Release store is not configured.`}),I&&(0,Y.jsxs)(p,{severity:`warning`,sx:{mt:.5},children:[`Every gate is recorded as `,(0,Y.jsx)(`strong`,{children:`not-run`}),`, and a stack that requires any will refuse the release. For a look at what would be built, never for a deployment.`]}),(0,Y.jsx)(A,{control:(0,Y.jsx)(ce,{checked:le,onChange:e=>R(e.target.checked),size:`small`,disabled:B}),label:(0,Y.jsx)(k,{variant:`body2`,children:`Keep the clones (about 2 GB)`})})]}),pe&&(0,Y.jsx)(p,{severity:`error`,children:(0,Y.jsx)(k,{variant:`body2`,sx:{whiteSpace:`pre-wrap`},children:pe})})]})}),(0,Y.jsxs)(ae,{children:[(0,Y.jsx)(s,{onClick:t,size:`small`,disabled:B,children:`Cancel`}),(0,Y.jsx)(s,{variant:`contained`,size:`small`,disabled:!h||!!v||B||U.length>0||K.error!==null||!!K.source&&!G||ye&&!W||z&&a?.publish!==1,startIcon:B?(0,Y.jsx)(oe,{size:14,color:`inherit`}):void 0,onClick:async()=>{if(!z||a?.publish===1&&!I){if(K.error)V(K.error);else if(K.source&&!G)V(_e?`An administrator must select an SDK source override. Build with project defaults or sign in with administrator access.`:`This controller does not support SDK source overrides. Update it before using an override.`);else if(ye&&!W)V(`Environment overrides require administrator access. Reopen the dialog to build with project defaults.`);else{fe(!0),V(null);try{r(await i.build({project:h,...S.trim()?{projectCommit:S.trim()}:{},...w.trim()?{omniCommit:w.trim()}:{},...K.source?{frameworkSource:K.source}:{},...H?{forStack:H}:{},...I?{skipGates:!0}:{},...le?{keepSource:!0}:{},...z&&{publish:!0},...Object.keys(ge).length?{env:ge}:{}})),t()}catch(e){V(e.message)}finally{fe(!1)}}}},children:B?`Starting…`:`Build`})]})]})}var J,Y;function Ye(){return(Ye=e((()=>{J=t(),b(),C(),v(),S(),c(),l(),u(),h(),_(),ie(),g(),m(),j(),P(),L(),I(),O(),w(),Ke(),a(),H(),U(),de(),Y=n()})))()}function Xe({open:e,onClose:t,onPruned:n}){let[r,a]=(0,X.useState)(5),[o,c]=(0,X.useState)(null),[l,u]=(0,X.useState)(null),f=l!==null,[ee,m]=(0,X.useState)(null),[h,g]=(0,X.useState)(null),_=(0,X.useCallback)(async()=>{u(`measuring`),m(null);try{c(await i.prune({keep:r}))}catch(e){m(e.message),c(null)}finally{u(null)}},[r]);return(0,X.useEffect)(()=>{e&&(g(null),_())},[e,_]),(0,Z.jsxs)(ne,{open:e,onClose:f?void 0:t,maxWidth:`sm`,fullWidth:!0,children:[(0,Z.jsx)(x,{children:`Prune releases`}),(0,Z.jsx)(te,{children:(0,Z.jsxs)(F,{spacing:2.5,sx:{mt:1},children:[(0,Z.jsx)(D,{label:`Keep the newest`,type:`number`,size:`small`,value:r,onChange:e=>a(Math.max(0,Number(e.target.value)||0)),onBlur:()=>void _(),disabled:f,sx:{width:180}}),o?.unknown&&(0,Z.jsxs)(p,{severity:`warning`,children:[`Which of these a stack is running cannot be told — `,o.unknown,`. The daemon will not remove anything until it can; `,(0,Z.jsx)(`code`,{children:`omnitron release prune --yes --allow-unprotected`}),` removes them without knowing.`]}),o&&o.protectedByDeployment.length>0&&(0,Z.jsxs)(k,{variant:`caption`,sx:{color:`text.secondary`},children:[`Kept whatever their age, because a stack runs them: `,o.protectedByDeployment.join(`, `),`.`]}),(0,Z.jsx)(K,{active:f,label:l===`removing`?`Removing reviewed releases`:`Measuring release storage`}),h&&(0,Z.jsxs)(p,{severity:`success`,children:[`Removed `,h.removed.length,` release`,h.removed.length===1?``:`s`,`, `,q(h.freedBytes),` freed;`,` `,h.kept,` kept.`]}),!h&&o&&(o.doomed.length===0?(0,Z.jsxs)(p,{severity:`info`,children:[`Nothing to remove — `,o.kept,` release(s) and all of them are kept.`]}):(0,Z.jsxs)(d,{children:[(0,Z.jsxs)(k,{variant:`body2`,sx:{mb:1},children:[o.doomed.length,` release`,o.doomed.length===1?``:`s`,` would go, freeing `,q(o.freedBytes),`:`]}),(0,Z.jsx)(d,{sx:{maxHeight:220,overflowY:`auto`},children:o.doomed.map(e=>(0,Z.jsxs)(F,{direction:`row`,spacing:1.5,sx:{py:.25},children:[(0,Z.jsx)(k,{variant:`caption`,sx:{fontFamily:`monospace`,flex:1},children:e.id}),(0,Z.jsx)(k,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:q(e.bytes)})]},e.id))})]})),ee&&(0,Z.jsx)(p,{severity:`error`,children:(0,Z.jsx)(k,{variant:`body2`,sx:{whiteSpace:`pre-wrap`},children:ee})})]})}),(0,Z.jsxs)(ae,{children:[(0,Z.jsx)(s,{onClick:t,size:`small`,disabled:f,children:h?`Close`:`Cancel`}),!h&&(0,Z.jsxs)(s,{variant:`contained`,color:`error`,loading:l===`removing`,size:`small`,disabled:f||!o||o.doomed.length===0||o.unknown!==null,onClick:async()=>{u(`removing`),m(null);try{let e=await i.prune({keep:r,apply:!0});g(e),n()}catch(e){m(e.message)}finally{u(null)}},children:[`Remove `,o?.doomed.length??0]})]})]})}var X,Z;function Ze(){return(Ze=e((()=>{X=t(),b(),c(),l(),ye(),_(),ie(),g(),m(),L(),O(),w(),a(),Me(),Z=n()})))()}async function Qe(){let[e,t,n,r]=await Promise.allSettled([we.list(),we.builds(),we.preflight(),we.deployments(200)]),i=[];if(e.status===`rejected`&&i.push(`releases: ${e.reason?.message??`unavailable`}`),t.status===`rejected`&&i.push(`builds: ${t.reason?.message??`unavailable`}`),n.status===`rejected`&&i.push(`preflight: ${n.reason?.message??`unavailable`}`),r.status===`rejected`&&i.push(`deployments: ${r.reason?.message??`unavailable`}`),e.status===`rejected`)throw e.reason;return{releases:e.value.releases,root:e.value.root,builds:t.status===`fulfilled`?t.value:[],preflight:n.status===`fulfilled`?n.value:null,deployments:r.status===`fulfilled`?r.value:{known:!1,why:`Deployment history could not be read`},partial:i.length>0?i.join(` · `):null}}function $e(){let e=he(),[t,n]=(0,Q.useState)(!1),[a,o]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(null),[u,ee]=(0,Q.useState)(null),[p,m]=(0,Q.useState)(null),[h,te]=(0,Q.useState)(0),[g,_]=(0,Q.useState)(25),[v,ne]=(0,Q.useState)(!0),{data:y,loading:re,error:ie,refresh:b}=B(Qe,{intervalMs:2e4}),ae=(y?.builds??[]).some(e=>e.state===`running`||e.state===`queued`)||u!==null,x=B(async()=>we.builds(),{intervalMs:3e3,enabled:ae}),oe=x.data??y?.builds??[],S=u&&!oe.some(e=>e.buildId===u.buildId)?[u,...oe]:oe,C=(0,Q.useMemo)(()=>y?.releases??[],[y?.releases]),w=(0,Q.useMemo)(()=>v&&e?C.filter(t=>t.project===e):C,[C,v,e]),E=(0,Q.useMemo)(()=>y?.deployments.known?pe(y.deployments.deployments):new Map,[y?.deployments]),D=(0,Q.useCallback)(async e=>{try{await i.stopBuild({buildId:e}),await x.refresh()}catch(e){m(e.message)}},[x]),O=[{key:`id`,header:`Release`,render:e=>{let t=E.get(e.id)??[];return(0,$.jsxs)(F,{spacing:.5,children:[(0,$.jsx)(k,{component:r,to:`/releases/${e.id}`,variant:`body2`,sx:{fontFamily:`monospace`,fontWeight:600,textDecoration:`none`,color:`text.primary`,wordBreak:`break-all`,"&:hover":{color:`primary.main`}},children:e.id}),(0,$.jsxs)(F,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsx)(je,{projectCommit:e.projectCommit,omniCommit:e.omniCommit,onRemote:e.onRemote,project:e.project}),!e.complete&&(0,$.jsx)(T,{title:e.manifestError??`This directory holds no manifest: the build did not finish. Its logs are still there.`,arrow:!0,children:(0,$.jsx)(f,{label:e.manifestError?`invalid manifest`:`unfinished`,size:`small`,color:e.manifestError?`error`:`warning`,variant:`outlined`,sx:{height:18,fontSize:10}})}),t.map(e=>(0,$.jsx)(T,{title:`Last recorded deployment to ${e.project}/${e.stack}: ${Ae(e.at)} · ${e.source??`unknown`}. Current runtime identity is not verified by this record.`,arrow:!0,children:(0,$.jsx)(f,{label:`History: ${e.stack}`,size:`small`,variant:`outlined`})},`${e.project}/${e.stack}`))]})]})}},{key:`built`,header:`Built`,render:e=>(0,$.jsxs)(F,{spacing:.25,sx:{maxWidth:170},children:[(0,$.jsx)(k,{variant:`body2`,sx:{whiteSpace:`nowrap`},children:Ae(e.builtAt)}),(0,$.jsx)(T,{title:e.builtBy??``,arrow:!0,children:(0,$.jsx)(k,{variant:`caption`,noWrap:!0,sx:{color:`text.secondary`,display:`block`},children:e.builtBy??`—`})})]})},{key:`gates`,header:`Gates`,render:e=>(0,$.jsxs)(F,{spacing:.5,children:[(0,$.jsxs)(F,{direction:`row`,spacing:.75,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsx)(Ee,{release:e}),e.machine&&Oe(e.machine)&&(0,$.jsx)(T,{title:`Recorded during this build: the host's five-minute load average exceeded its core count when gates finished — ${De(e.machine)}. Gate outcomes are shown separately.`,arrow:!0,children:(0,$.jsx)(f,{label:`High host load`,size:`small`,color:`warning`,variant:`outlined`,sx:{height:18,fontSize:10}})})]}),(0,$.jsx)(ke,{gates:e.gateList,size:8,columns:7}),e.verified.map(e=>(0,$.jsx)(T,{title:`Recorded probe result on ${e.stack} at ${Ae(e.at)}. This is historical evidence, not current process identity.`,arrow:!0,children:(0,$.jsxs)(k,{variant:`caption`,sx:{color:e.passed===e.total?`text.secondary`:`warning.main`,fontFamily:`monospace`,whiteSpace:`nowrap`},children:[`Probed `,e.stack,`: `,e.passed,`/`,e.total]})},e.stack))]})},{key:`carries`,header:`Carries`,render:e=>(0,$.jsxs)(F,{spacing:.5,sx:{alignItems:`flex-start`},children:[(0,$.jsx)(T,{title:e.artifacts.apps.join(`, `)||`none`,arrow:!0,children:(0,$.jsxs)(k,{variant:`body2`,sx:{whiteSpace:`nowrap`,color:e.complete?`text.primary`:`text.disabled`},children:[e.complete?`${e.artifacts.count} app${e.artifacts.count===1?``:`s`}`:`—`,e.artifacts.failed.length>0&&(0,$.jsxs)(k,{component:`span`,variant:`caption`,sx:{color:`error.main`,ml:.75},children:[e.artifacts.failed.length,` did not build`]})]})}),e.statics&&(0,$.jsx)(T,{title:`Static bundle built with ${e.statics.stack}'s environment — ${e.statics.files} files, ${q(e.statics.bytes)}`,arrow:!0,children:(0,$.jsx)(f,{label:`statics: ${e.statics.stack}`,size:`small`,variant:`outlined`,sx:{height:18,fontSize:10}})}),(0,$.jsxs)(k,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`,whiteSpace:`nowrap`},children:[q(e.bytes),e.keptSource&&(0,$.jsx)(T,{title:`The build's two clones are still on disk — kept on purpose, or left by a build that failed. They are not counted in this size.`,arrow:!0,children:(0,$.jsx)(d,{component:`span`,sx:{color:`warning.main`,ml:.75},children:`+ clones`})})]})]})},{key:`actions`,header:``,render:e=>(0,$.jsx)(F,{direction:`row`,sx:{justifyContent:`flex-end`},children:(0,$.jsx)(z,{permission:`OmnitronProject.startStack`,children:(0,$.jsx)(s,{size:`small`,variant:`outlined`,startIcon:(0,$.jsx)(W,{}),disabled:!e.complete,onClick:()=>l(e),sx:{whiteSpace:`nowrap`},children:`Deploy…`})})})}],A=Math.min(h,Math.max(0,Math.ceil(w.length/g)-1)),j=w.slice(A*g,A*g+g),M=S.filter(t=>!e||t.request.project===e),N=[...M.filter(e=>e.state===`running`||e.state===`queued`),...M.filter(e=>e.state!==`running`&&e.state!==`queued`).slice(0,3)],P=y?.preflight?.canBuild!==!1,I=w.reduce((e,t)=>e+t.bytes,0);return(0,$.jsxs)(F,{spacing:3,children:[(0,$.jsx)(xe,{links:[{name:`Releases`}],action:(0,$.jsxs)(F,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsx)(se,{"data-console-command":`refresh`,size:`small`,onClick:()=>void b(),title:`Refresh`,children:(0,$.jsx)(_e,{})}),(0,$.jsx)(z,{permission:`OmnitronRelease.prune`,children:(0,$.jsx)(s,{size:`small`,startIcon:(0,$.jsx)(G,{}),onClick:()=>o(!0),children:`Prune…`})}),(0,$.jsx)(T,{title:P?``:`This master cannot run a build — see the banner`,arrow:!0,children:(0,$.jsx)(`span`,{children:(0,$.jsx)(z,{permission:`OmnitronRelease.build`,children:(0,$.jsx)(s,{variant:`contained`,size:`small`,startIcon:(0,$.jsx)(ge,{}),disabled:!P,onClick:()=>n(!0),children:`Build`})})})})]})}),y?.preflight&&!y.preflight.canBuild&&(0,$.jsxs)(R,{severity:`error`,variant:`outlined`,children:[`This master cannot run a release build: `,(0,$.jsx)(`strong`,{children:y.preflight.missingTools.join(`, `)}),` `,y.preflight.missingTools.length===1?`is`:`are`,` not on the daemon's PATH. A daemon started by launchd has the system PATH, not a shell's. It looked in: `,y.preflight.path.slice(0,6).join(`, `),y.preflight.path.length>6?`, …`:``]}),p&&(0,$.jsx)(R,{closable:!0,severity:`warning`,variant:`outlined`,onClose:()=>m(null),children:p}),y?.partial&&(0,$.jsxs)(R,{severity:`warning`,variant:`outlined`,children:[`Part of this page could not be read — `,y.partial]}),y&&!y.deployments.known&&(0,$.jsxs)(R,{severity:`warning`,variant:`outlined`,children:[`Deployment history is unavailable — `,y.deployments.why,`. Pruning is refused while deployment protection cannot be determined.`]}),N.length>0&&(0,$.jsx)(F,{spacing:1.5,children:N.map(e=>(0,$.jsx)(Ie,{record:e,onStop:D,onDeploy:e=>{let t=C.find(t=>t.id===e);t?l(t):b()}},e.buildId))}),e&&(0,$.jsx)(Re,{project:e},e),(0,$.jsxs)(F,{direction:`row`,spacing:1.5,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,$.jsx)(k,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`,overflowWrap:`anywhere`},children:y?.root??``}),(0,$.jsxs)(k,{variant:`caption`,sx:{color:`text.secondary`},children:[w.length,` release`,w.length===1?``:`s`,` · `,q(I),` · controller storage`]}),(0,$.jsx)(d,{sx:{flex:1}}),e&&(0,$.jsx)(f,{size:`small`,variant:v?`filled`:`outlined`,label:v?`only ${e}`:`all projects`,onClick:()=>ne(e=>!e),sx:{height:22,fontSize:11}})]}),(0,$.jsx)(Ce,{minWidth:640,scrollLabel:`Releases`,columns:O,data:j,total:w.length,loading:re,loadError:ie??null,emptyMessage:`Nothing has been built on this master yet`,rowKey:e=>e.id,page:A,pageSize:g,onPageChange:te,onPageSizeChange:e=>{_(e),te(0)},dense:!0}),(0,$.jsx)(z,{permission:`OmnitronRelease.build`,children:(0,$.jsx)(Je,{open:t,onClose:()=>n(!1),defaultProject:e,activeBuilds:S,preflight:y?.preflight??null,onStarted:e=>{ee(e),x.refresh().then(()=>b())}})}),(0,$.jsx)(z,{permission:`OmnitronRelease.prune`,children:(0,$.jsx)(Xe,{open:a,onClose:()=>o(!1),onPruned:()=>void b()})}),(0,$.jsx)(z,{permission:`OmnitronProject.startStack`,children:(0,$.jsx)(Pe,{open:c!==null,onClose:()=>l(null),project:c?.project??e??``,release:c})})]})}var Q,$;function et(){return(et=e((()=>{de(),Q=t(),o(),c(),l(),u(),M(),L(),E(),w(),le(),Se(),be(),V(),U(),Ne(),Fe(),Le(),Me(),fe(),a(),Te(),H(),Ye(),Ze(),$=n()})))()}et();export{$e as default};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{Vt as r,Yt as i}from"./mui-BTN91yBK.js";import{_n as a,gn as o}from"./mui-CdB_p2lt.js";import{H as s,V as c}from"./mui-BXSXx9c9.js";import{F as l,I as u}from"./mui-Cd711nOk.js";import{A as d,bt as f,k as p,yt as m}from"./mui-AnEgAVjz.js";import{E as h,j as g,u as _}from"./controls-C5W8gHU4.js";function v({size:e=18}){return(0,S.jsx)(h,{sx:{fontSize:e}})}function y(){return(0,S.jsx)(_,{sx:{fontSize:16}})}function b({value:e,onChange:t,placeholder:n=`Search...`,"aria-label":i,debounce:o=0,compact:s=!1,fullWidth:u=!0,width:d,minWidth:f,clearTooltip:h=`Clear`,autoFocus:g,onFocus:_,onBlur:b,onKeyDown:C,sx:w,ref:T}){let E=a(),[D,O]=(0,x.useState)(e??``),k=(0,x.useRef)(void 0);(0,x.useEffect)(()=>{e!==void 0&&(clearTimeout(k.current),O(e))},[e]);let A=e!==void 0&&o===0?e:D,j=e=>{let n=e.target.value;O(n),o>0?(clearTimeout(k.current),k.current=setTimeout(()=>t?.(n),o)):t?.(n)},M=()=>{O(``),clearTimeout(k.current),t?.(``)};(0,x.useEffect)(()=>()=>clearTimeout(k.current),[]);let N=s?.625:.75,P=s?1.25:1.5,F=s?`3px`:`4px`;return(0,S.jsx)(m,{"data-keyboard-search":!0,ref:T,fullWidth:u,placeholder:n,inputProps:{"aria-label":i??n},value:A,onChange:j,autoFocus:g,onFocus:_,onBlur:b,onKeyDown:C,startAdornment:(0,S.jsx)(p,{position:`start`,sx:{color:`text.disabled`,mr:s?.75:1},children:(0,S.jsx)(v,{size:s?16:18})}),endAdornment:A?(0,S.jsx)(p,{position:`end`,children:(0,S.jsx)(l,{title:h,children:(0,S.jsx)(c,{component:`button`,type:`button`,"aria-label":h,onClick:M,sx:{p:.25,border:`none`,background:`none`,cursor:`pointer`,color:`text.disabled`,display:`flex`,alignItems:`center`,borderRadius:`50%`,"&:hover":{color:`text.secondary`}},children:(0,S.jsx)(y,{})})})}):null,sx:{px:P,py:N,borderRadius:1,fontSize:`0.875rem`,bgcolor:r(E.palette.grey[500],.08),transition:E.transitions.create([`background-color`],{duration:E.transitions.duration.shorter}),"&:hover":{bgcolor:r(E.palette.grey[500],.12)},"&.Mui-focused":{bgcolor:r(E.palette.grey[500],.16)},"& .MuiInputBase-input":{py:F,px:0,overflow:`visible`,"&::placeholder":{opacity:.64}},...d!=null&&{width:d},...f!=null&&{minWidth:f},...!u&&{width:d??`auto`},...Array.isArray(w)?Object.assign({},...w):w}})}var x,S;function C(){return(C=e((()=>{g(),x=t(),f(),d(),u(),s(),i(),o(),S=n()})))()}export{C as n,b as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{Vt as r,Yt as i}from"./mui-BTN91yBK.js";import{_n as a,gn as o}from"./mui-Bdr6Ks5j.js";import{H as s,V as c}from"./mui-SNRRJ_vi.js";import{F as l,I as u}from"./mui-B3fJdIMc.js";import{A as d,bt as f,k as p,yt as m}from"./mui-CMWGTMXv.js";import{E as h,j as g,u as _}from"./controls-CqeGPnaF.js";function v({size:e=18}){return(0,S.jsx)(h,{sx:{fontSize:e}})}function y(){return(0,S.jsx)(_,{sx:{fontSize:16}})}function b({value:e,onChange:t,placeholder:n=`Search...`,"aria-label":i,debounce:o=0,compact:s=!1,fullWidth:u=!0,width:d,minWidth:f,clearTooltip:h=`Clear`,autoFocus:g,onFocus:_,onBlur:b,onKeyDown:C,sx:w,ref:T}){let E=a(),[D,O]=(0,x.useState)(e??``),k=(0,x.useRef)(void 0);(0,x.useEffect)(()=>{e!==void 0&&(clearTimeout(k.current),O(e))},[e]);let A=e!==void 0&&o===0?e:D,j=e=>{let n=e.target.value;O(n),o>0?(clearTimeout(k.current),k.current=setTimeout(()=>t?.(n),o)):t?.(n)},M=()=>{O(``),clearTimeout(k.current),t?.(``)};(0,x.useEffect)(()=>()=>clearTimeout(k.current),[]);let N=s?.625:.75,P=s?1.25:1.5,F=s?`3px`:`4px`;return(0,S.jsx)(m,{"data-keyboard-search":!0,ref:T,fullWidth:u,placeholder:n,inputProps:{"aria-label":i??n},value:A,onChange:j,autoFocus:g,onFocus:_,onBlur:b,onKeyDown:C,startAdornment:(0,S.jsx)(p,{position:`start`,sx:{color:`text.disabled`,mr:s?.75:1},children:(0,S.jsx)(v,{size:s?16:18})}),endAdornment:A?(0,S.jsx)(p,{position:`end`,children:(0,S.jsx)(l,{title:h,children:(0,S.jsx)(c,{component:`button`,type:`button`,"aria-label":h,onClick:M,sx:{p:.25,border:`none`,background:`none`,cursor:`pointer`,color:`text.disabled`,display:`flex`,alignItems:`center`,borderRadius:`50%`,"&:hover":{color:`text.secondary`}},children:(0,S.jsx)(y,{})})})}):null,sx:{px:P,py:N,borderRadius:1,fontSize:`0.875rem`,bgcolor:r(E.palette.grey[500],.08),transition:E.transitions.create([`background-color`],{duration:E.transitions.duration.shorter}),"&:hover":{bgcolor:r(E.palette.grey[500],.12)},"&.Mui-focused":{bgcolor:r(E.palette.grey[500],.16)},"& .MuiInputBase-input":{py:F,px:0,overflow:`visible`,"&::placeholder":{opacity:.64}},...d!=null&&{width:d},...f!=null&&{minWidth:f},...!u&&{width:d??`auto`},...Array.isArray(w)?Object.assign({},...w):w}})}var x,S;function C(){return(C=e((()=>{g(),x=t(),f(),d(),u(),s(),i(),o(),S=n()})))()}export{C as n,b as t};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{h as r,i,o as a}from"./client-CgyTwq9g.js";import{n as o}from"./services-BddvcFi8.js";import{D as s,E as c,F as l,H as u,I as d,M as f,O as p,Q as m,T as h,V as g,Z as _,ct as v,i as y,j as b,r as x,st as S}from"./mui-SNRRJ_vi.js";import{B as C,a as w,o as T,z as E}from"./mui-B3fJdIMc.js";import{A as ee,G as D,K as te,U as O,W as ne,it as re,k,l as ie,rt as A,u as ae}from"./mui-CMWGTMXv.js";import{C as oe,_ as j,n as se,t as M,v as N,w as ce}from"./mui-CPEkFAPo.js";import{n as P,r as F,t as I}from"./alert-BdJ2uaY0.js";import{t as le}from"./auth-CcgjP7hR.js";import{n as L,t as ue}from"./store-DtTtbc9H.js";import{n as de,t as fe}from"./use-polled-resource-B22hhr5L.js";import{a as pe}from"./storage-CKXnhqkt.js";import{G as me,g as R,p as z}from"./icons-B9Ct8PJ9.js";import{n as he,r as ge}from"./alert-expression-CSblScoa.js";import{a as _e,c as ve,l as B,n as V,r as H,s as U,t as ye}from"./alert-notify-settings-C_CHZrFm.js";import{n as be,t as xe}from"./table-D-so_B1p.js";import{n as Se,t as Ce}from"./page-breadcrumbs-3R8RZ3nA.js";import{l as we,n as W}from"./formatters-RnRy4bXm.js";import{n as Te,r as Ee,t as G}from"./tabs-DGqBkXh_.js";function De(){let{data:e,error:t}=de(()=>a.status(),{intervalMs:5e3}),n=e?.connection;return(0,K.jsx)(b,{variant:`outlined`,sx:{minWidth:0,maxWidth:480},children:(0,K.jsx)(s,{sx:{p:2,"&:last-child":{pb:2}},children:(0,K.jsxs)(j,{spacing:1.5,children:[(0,K.jsx)(E,{variant:`subtitle2`,children:`Execution control`}),t&&(0,K.jsxs)(I,{severity:`warning`,children:[`Cannot refresh execution control: `,t,`. Any values below are the last observation.`]}),!e&&!t&&(0,K.jsx)(E,{variant:`body2`,color:`text.secondary`,children:`Waiting for the backend.`}),e&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(j,{direction:`row`,useFlexGap:!0,spacing:1,sx:{flexWrap:`wrap`},children:[(0,K.jsx)(_,{size:`small`,variant:`outlined`,label:e.mode===`resident`?`Resident owner`:`Coupled execution`}),n&&(0,K.jsx)(_,{size:`small`,variant:`outlined`,color:t?`default`:n.status===`connected`?`success`:`warning`,label:t?`Last observed`:n.status===`connected`?`Owner connected`:n.status===`owner-changed`?`Owner identity changed`:`Owner unavailable`})]}),e.owner&&(0,K.jsxs)(E,{variant:`body2`,sx:{fontVariantNumeric:`tabular-nums`,overflowWrap:`anywhere`},children:[`Owner PID `,e.owner.pid,` · epoch `,e.epoch,` · `,e.phase]}),e.ownerRuntime&&(0,K.jsxs)(E,{variant:`body2`,color:`text.secondary`,sx:{overflowWrap:`anywhere`},children:[`Node `,e.ownerRuntime.node,` · ABI `,e.ownerRuntime.abi,` · `,e.ownerRuntime.platform,`/`,e.ownerRuntime.arch]}),e.supervision&&(0,K.jsxs)(E,{variant:`body2`,color:`text.secondary`,sx:{overflowWrap:`anywhere`},children:[`Independent OS supervision · guardian PID `,e.supervision.guardianPid]}),n?.observedAt&&(0,K.jsxs)(E,{variant:`caption`,color:`text.secondary`,children:[`Last owner observation: `,W(n.observedAt)]}),!t&&n?.error&&(0,K.jsxs)(I,{severity:`warning`,children:[n.error,`. Application state is unknown; a lost control channel does not establish that applications stopped.`]}),e.reason&&(0,K.jsx)(E,{variant:`body2`,color:`text.secondary`,children:e.reason}),e.mode===`resident`&&!n&&(0,K.jsx)(E,{variant:`body2`,color:`text.secondary`,children:`This backend does not report owner connection freshness.`}),e.recovery&&(0,K.jsxs)(E,{variant:`body2`,color:`text.secondary`,sx:{overflowWrap:`anywhere`},children:[`Recovery checkpoint: `,e.recovery.status,e.recovery.reason?` · ${e.recovery.reason}`:``]})]})]})})})}var K;function q(){return(q=e((()=>{f(),p(),m(),N(),C(),F(),r(),fe(),K=n()})))()}function J({label:e,value:t,mono:n}){return(0,X.jsxs)(j,{direction:`row`,sx:{justifyContent:`space-between`,alignItems:`center`,gap:2,minWidth:0,py:.5},children:[(0,X.jsx)(E,{variant:`body2`,sx:{color:`text.secondary`},children:e}),(0,X.jsx)(E,{component:`div`,variant:`body2`,sx:{fontWeight:600,minWidth:0,overflowWrap:`anywhere`,textAlign:`right`,...n&&{fontFamily:`monospace`,fontSize:`0.8rem`}},children:t})]})}function Oe(){let e=L(e=>e.user);return e?(0,X.jsxs)(j,{spacing:2,children:[(0,X.jsxs)(b,{variant:`outlined`,sx:{...Z,maxWidth:480},children:[(0,X.jsx)(h,{title:`Profile`,subheader:`Account information`}),(0,X.jsx)(s,{sx:{...Q,pt:0},children:(0,X.jsxs)(j,{spacing:.5,children:[(0,X.jsx)(J,{label:`Username`,value:e.username,mono:!0}),(0,X.jsx)(J,{label:`Display Name`,value:e.displayName}),(0,X.jsx)(J,{label:`Role`,value:(0,X.jsx)(_,{label:e.role,size:`small`,variant:`outlined`,sx:{height:22,fontSize:`0.7rem`,fontWeight:600}})}),(0,X.jsx)(J,{label:`User ID`,value:e.id,mono:!0})]})})]}),(0,X.jsx)(De,{})]}):null}function ke(){let[e,t]=(0,Y.useState)(``),[n,r]=(0,Y.useState)(``),[a,o]=(0,Y.useState)(``),[c,u]=(0,Y.useState)(!1),[d,f]=(0,Y.useState)(!1),[p,m]=(0,Y.useState)(!1),[g,_]=(0,Y.useState)(!1),[v,y]=(0,Y.useState)(null),x=async s=>{if(s.preventDefault(),y(null),_(!1),!e||!n){y(`All fields are required.`);return}if(n!==a){y(`New passwords do not match.`);return}let c=le(n);if(c)y(c);else{m(!0);try{await i.changePassword({oldPassword:e,newPassword:n}),_(!0),t(``),r(``),o(``)}catch(e){y(e?.message??`Failed to change password`)}finally{m(!1)}}};return(0,X.jsxs)(b,{variant:`outlined`,sx:{...Z,maxWidth:480},children:[(0,X.jsx)(h,{slotProps:{title:{variant:`subtitle1`,fontWeight:700},subheader:{variant:`caption`}},title:`Change Password`,subheader:`Update your account credentials`}),(0,X.jsxs)(s,{sx:{...Q,pt:0},children:[g&&(0,X.jsx)(I,{closable:!0,severity:`success`,variant:`outlined`,sx:{mb:2},onClose:()=>_(!1),children:`Password changed successfully.`}),v&&(0,X.jsx)(P,{sx:{mb:2},onClose:()=>y(null),children:v}),(0,X.jsx)(`form`,{onSubmit:x,noValidate:!0,children:(0,X.jsxs)(j,{spacing:2,children:[(0,X.jsx)(w,{size:`small`,label:`Current Password`,type:c?`text`:`password`,value:e,onChange:e=>t(e.target.value),autoComplete:`current-password`,fullWidth:!0,slotProps:{input:{endAdornment:(0,X.jsx)(k,{position:`end`,children:(0,X.jsx)(A,{size:`small`,onClick:()=>u(!c),edge:`end`,children:(0,X.jsx)(R,{open:c,sx:{fontSize:18}})})})}}}),(0,X.jsx)(w,{size:`small`,label:`New Password`,type:d?`text`:`password`,value:n,onChange:e=>r(e.target.value),autoComplete:`new-password`,fullWidth:!0,slotProps:{input:{endAdornment:(0,X.jsx)(k,{position:`end`,children:(0,X.jsx)(A,{size:`small`,onClick:()=>f(!d),edge:`end`,children:(0,X.jsx)(R,{open:d,sx:{fontSize:18}})})})}}}),(0,X.jsx)(w,{size:`small`,label:`Confirm New Password`,type:d?`text`:`password`,value:a,onChange:e=>o(e.target.value),autoComplete:`new-password`,fullWidth:!0}),(0,X.jsx)(l,{type:`submit`,variant:`contained`,size:`small`,disabled:p,startIcon:p?(0,X.jsx)(S,{size:16,color:`inherit`}):void 0,sx:{alignSelf:`flex-start`},children:p?`Changing...`:`Change Password`})]})})]})]})}function Ae(){let e=L(e=>e.user),[t,n]=(0,Y.useState)([]),[r,a]=(0,Y.useState)(!0),[o,s]=(0,Y.useState)(null),[c,u]=(0,Y.useState)(null),d=(0,Y.useCallback)(async()=>{if(e)try{let e=await i.getActiveSessions();n(Array.isArray(e)?e:[]),s(null)}catch(e){s(e?.message??`Failed to fetch sessions`)}finally{a(!1)}},[e]);(0,Y.useEffect)(()=>{d()},[d]);let f=async e=>{u(e);try{await i.signOut({sessionId:e}),n(t=>t.filter(t=>t.id!==e))}catch(e){s(`Failed to revoke: ${e?.message??`Unknown error`}`)}finally{u(null)}};return(0,X.jsxs)(b,{variant:`outlined`,sx:Z,children:[(0,X.jsx)(h,{slotProps:{subheader:{variant:`caption`},title:{variant:`subtitle1`,fontWeight:700}},title:`Active Sessions`,subheader:r?`Loading...`:`${t.length} active session${t.length===1?``:`s`}`,action:t.filter(e=>!e.current).length>1?(0,X.jsx)(l,{size:`small`,color:`error`,variant:`text`,onClick:async()=>{for(let e of t.filter(e=>!e.current))try{await i.signOut({sessionId:e.id})}catch{}await d()},sx:{fontSize:`0.7rem`},children:`Revoke All Others`}):void 0}),o&&(0,X.jsx)(P,{sx:{mx:2,mb:1},onClose:()=>s(null),children:o}),(0,X.jsx)(xe,{scrollLabel:`Active sessions`,sx:{minWidth:560},columns:[{id:`id`,label:`Session`,render:e=>(0,X.jsxs)(j,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,X.jsxs)(E,{variant:`body2`,sx:{fontFamily:`monospace`,fontSize:12},children:[e.id.slice(0,8),`...`]}),e.current&&(0,X.jsx)(_,{label:`current`,size:`small`,color:`primary`,variant:`outlined`,sx:{height:20,fontSize:10}})]})},{id:`ipAddress`,label:`IP Address`,render:e=>(0,X.jsx)(E,{variant:`body2`,sx:{fontFamily:`monospace`,fontSize:12},children:e.ipAddress??`--`})},{id:`createdAt`,label:`Created`,render:e=>(0,X.jsx)(E,{variant:`caption`,sx:{color:`text.secondary`},children:we(e.createdAt)})},{id:`expiresAt`,label:`Expires`,render:e=>(0,X.jsx)(E,{variant:`caption`,sx:{color:`text.secondary`},children:W(e.expiresAt)})},{id:`actions`,label:`Actions`,align:`center`,render:e=>e.current?null:(0,X.jsx)(A,{size:`small`,color:`error`,disabled:c===e.id,onClick:()=>f(e.id),title:`Revoke session`,children:c===e.id?(0,X.jsx)(S,{size:16,color:`inherit`}):(0,X.jsx)(z,{sx:{fontSize:18}})})}],data:t,rowKey:e=>e.id,loading:r,loadingRows:2,dense:!0,containerSx:{border:`none`,borderRadius:0},emptyContent:(0,X.jsx)(E,{variant:`body2`,sx:{color:`text.secondary`},children:`No active sessions found.`})})]})}function je(){let[e,t]=(0,Y.useState)(()=>U(V,!1)),[n,r]=(0,Y.useState)(()=>U(H,!0)),[i,a]=(0,Y.useState)(()=>ve()),[o,c]=(0,Y.useState)(()=>typeof Notification<`u`?Notification.permission:`unsupported`),l=async(e,n)=>{if(n&&typeof Notification<`u`&&Notification.permission==="default"){let e=await Notification.requestPermission();if(c(e),e!==`granted`){t(!1),B(V,!1);return}}t(n),B(V,n)};return(0,X.jsxs)(b,{variant:`outlined`,sx:{...Z,maxWidth:480},children:[(0,X.jsx)(h,{slotProps:{subheader:{variant:`caption`},title:{variant:`subtitle1`,fontWeight:700}},title:`Notifications`,subheader:`Configure alert delivery preferences`}),(0,X.jsx)(s,{sx:{...Q,pt:0},children:(0,X.jsxs)(j,{spacing:3,children:[(0,X.jsx)(O,{control:(0,X.jsx)(M,{size:`small`,checked:e,onChange:l,disabled:o===`denied`}),label:(0,X.jsxs)(g,{children:[(0,X.jsx)(E,{variant:`body2`,sx:{fontWeight:600},children:`Desktop notifications`}),(0,X.jsx)(E,{variant:`caption`,sx:{color:`text.secondary`},children:o===`denied`?`Blocked by browser — enable in site settings`:o===`unsupported`?`Not supported`:`Show browser notifications for alerts`})]}),sx:{alignItems:`flex-start`,ml:0}}),(0,X.jsx)(O,{control:(0,X.jsx)(M,{size:`small`,checked:n,onChange:(e,t)=>{r(t),B(H,t)}}),label:(0,X.jsxs)(g,{children:[(0,X.jsx)(E,{variant:`body2`,sx:{fontWeight:600},children:`Sound alerts`}),(0,X.jsx)(E,{variant:`caption`,sx:{color:`text.secondary`},children:`Play a tone when an alert fires at or above the minimum severity`})]}),sx:{alignItems:`flex-start`,ml:0}}),(0,X.jsx)(x,{}),(0,X.jsxs)(g,{children:[(0,X.jsx)(E,{variant:`body2`,sx:{fontWeight:600,mb:1},children:`Minimum alert severity`}),(0,X.jsx)(E,{variant:`caption`,sx:{color:`text.secondary`,mb:1.5,display:`block`},children:`Only receive notifications at or above this level`}),(0,X.jsx)(D,{size:`small`,fullWidth:!0,children:(0,X.jsx)(oe,{inputProps:{"aria-label":`Minimum alert severity`},value:i,onChange:e=>{a(e.target.value),pe(ye,e.target.value)},children:he.map(e=>(0,X.jsx)(ie,{value:e,sx:{textTransform:`capitalize`},children:e},e))})})]})]})})]})}function Me(){return(0,X.jsxs)(j,{spacing:2,children:[(0,X.jsx)(Ce,{heading:`Settings`,links:[{name:`System`},{name:`Settings`}]}),(0,X.jsxs)(Te,{defaultValue:`general`,keepMounted:!0,children:[(0,X.jsx)(G,{value:`general`,label:`General`,children:(0,X.jsx)(Oe,{})}),(0,X.jsx)(G,{value:`security`,label:`Security`,children:(0,X.jsx)(ke,{})}),(0,X.jsx)(G,{value:`sessions`,label:`Sessions`,children:(0,X.jsx)(Ae,{})}),(0,X.jsx)(G,{value:`notifications`,label:`Notifications`,children:(0,X.jsx)(je,{})})]})]})}var Y,X,Z,Q;function $(){return($=e((()=>{Se(),q(),Y=t(),f(),p(),c(),C(),N(),T(),d(),re(),m(),ee(),v(),se(),ne(),ae(),ce(),te(),y(),u(),me(),F(),Ee(),be(),ue(),r(),o(),ge(),_e(),X=n(),Z={borderRadius:2},Q={p:3,"&:last-child":{pb:3}}})))()}$();export{Me as default};
@@ -0,0 +1 @@
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{U as r,V as i,z as a}from"./client-CgyTwq9g.js";import{F as o,I as s,ct as c,st as l}from"./mui-SNRRJ_vi.js";import{B as u,a as d,o as f,z as p}from"./mui-B3fJdIMc.js";import{A as m,it as h,k as g,rt as _}from"./mui-CMWGTMXv.js";import{_ as v,v as y}from"./mui-CPEkFAPo.js";import{n as b,r as x}from"./alert-BdJ2uaY0.js";import{n as S,o as C,s as w,t as T}from"./backend-status.store-BbBE9cn8.js";import{a as E,n as D,r as O,t as k}from"./store-DtTtbc9H.js";import{G as A,g as j}from"./icons-B9Ct8PJ9.js";function M(){let e=i(),[t]=r(),n=D(e=>e.signIn),a=D(e=>e.initError),s=D(e=>e.clearInitError),c=S(),[u,f]=(0,N.useState)(``),[m,h]=(0,N.useState)(``),[y,x]=(0,N.useState)(!1),[w,T]=(0,N.useState)(``),[k,A]=(0,N.useState)(!1),M=E(t.get(`returnTo`));return(0,P.jsxs)(v,{spacing:3,sx:{maxWidth:420,mx:`auto`,width:1},children:[(0,P.jsxs)(v,{spacing:1.5,sx:{alignItems:`center`,textAlign:`center`},children:[(0,P.jsx)(C,{size:64,label:null}),(0,P.jsx)(p,{variant:`h4`,children:`Omnitron Console`}),(0,P.jsx)(p,{variant:`body2`,sx:{color:`text.secondary`},children:`Sign in to manage your infrastructure`})]}),a&&!w&&(0,P.jsx)(b,{severity:`warning`,onClose:s,children:a}),w&&(0,P.jsx)(b,{onClose:()=>T(``),children:w}),(0,P.jsx)(`form`,{onSubmit:async t=>{if(t.preventDefault(),u.trim()&&m.trim()){T(``),A(!0);try{await n(u,m),e(M,{replace:!0})}catch(e){h(``),T(O(e))}finally{A(!1)}}},noValidate:!0,children:(0,P.jsxs)(v,{spacing:2.5,children:[(0,P.jsx)(d,{fullWidth:!0,label:`Username`,autoComplete:`username`,autoFocus:!0,value:u,onChange:e=>f(e.target.value)}),(0,P.jsx)(d,{fullWidth:!0,label:`Password`,type:y?`text`:`password`,autoComplete:`current-password`,value:m,onChange:e=>h(e.target.value),slotProps:{input:{endAdornment:(0,P.jsx)(g,{position:`end`,children:(0,P.jsx)(_,{"aria-label":y?`Hide password`:`Show password`,"aria-pressed":y,onClick:()=>x(!y),edge:`end`,children:(0,P.jsx)(j,{open:y})})})}}}),(0,P.jsx)(o,{fullWidth:!0,size:`large`,type:`submit`,variant:`contained`,disabled:k||!c,startIcon:k?(0,P.jsx)(l,{size:20,color:`inherit`}):void 0,children:k?`Signing in...`:c?`Sign In`:`Daemon offline`})]})})]})}var N,P;function F(){return(F=e((()=>{N=t(),x(),a(),y(),f(),u(),s(),m(),h(),c(),A(),k(),w(),T(),P=n()})))()}F();export{M as default};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{S as n,x as r}from"./mui-BwsIrivo.js";function i({variant:e=`text`,...t}){return(0,a.jsx)(r,{variant:e,...t})}var a;function o(){return(o=e((()=>{n(),a=t()})))()}export{o as n,i as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{S as n,x as r}from"./mui-CPEkFAPo.js";function i({variant:e=`text`,...t}){return(0,a.jsx)(r,{variant:e,...t})}var a;function o(){return(o=e((()=>{n(),a=t()})))()}export{o as n,i as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{at as r,ot as i}from"./mui-BXSXx9c9.js";import{it as a,rt as o}from"./mui-AnEgAVjz.js";import{b as s,y as c}from"./mui-BwsIrivo.js";import{j as l,u}from"./controls-C5W8gHU4.js";function d(){let e=(0,p.useContext)(h);if(!e)throw Error(`useSnackbar must be used within a SnackbarProvider`);return e}function f({children:e,defaultDuration:t=5e3,defaultPosition:n={vertical:`bottom`,horizontal:`left`},sx:i}){let[a,s]=(0,p.useState)({...g,duration:t,position:n}),l=(0,p.useCallback)(e=>{let r=typeof e==`string`?{message:e}:e;s(e=>({open:!0,message:r.message,severity:r.severity??`info`,duration:r.duration??t,position:r.position??n,action:r.action,key:r.key??Date.now()}))},[t,n]),d=(0,p.useCallback)((e,t)=>{l({message:e,severity:`success`,...t})},[l]),f=(0,p.useCallback)((e,t)=>{l({message:e,severity:`error`,...t})},[l]),_=(0,p.useCallback)((e,t)=>{l({message:e,severity:`warning`,...t})},[l]),v=(0,p.useCallback)((e,t)=>{l({message:e,severity:`info`,...t})},[l]),y=(0,p.useCallback)(()=>{s(e=>({...e,open:!1}))},[]),b=(0,p.useCallback)((e,t)=>{t!==`clickaway`&&y()},[y]),x=(0,p.useMemo)(()=>({show:l,success:d,error:f,warning:_,info:v,close:y}),[l,d,f,_,v,y]);return(0,m.jsxs)(h.Provider,{value:x,children:[e,(0,m.jsx)(c,{open:a.open,autoHideDuration:a.duration,onClose:b,anchorOrigin:a.position,sx:i,children:(0,m.jsx)(r,{severity:a.severity,variant:`filled`,onClose:b,action:a.action||(0,m.jsx)(o,{size:`small`,"aria-label":`close`,color:`inherit`,onClick:y,children:(0,m.jsx)(u,{fontSize:`small`})}),sx:{width:`100%`,alignItems:`center`},children:a.message})},a.key)]})}var p,m,h,g;function _(){return(_=e((()=>{p=t(),s(),i(),a(),l(),m=n(),h=(0,p.createContext)(null),g={open:!1,message:``,severity:`info`,duration:5e3,position:{vertical:`bottom`,horizontal:`left`},key:0}})))()}export{_ as n,d as r,f as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{at as r,ot as i}from"./mui-SNRRJ_vi.js";import{it as a,rt as o}from"./mui-CMWGTMXv.js";import{b as s,y as c}from"./mui-CPEkFAPo.js";import{j as l,u}from"./controls-CqeGPnaF.js";function d(){let e=(0,p.useContext)(h);if(!e)throw Error(`useSnackbar must be used within a SnackbarProvider`);return e}function f({children:e,defaultDuration:t=5e3,defaultPosition:n={vertical:`bottom`,horizontal:`left`},sx:i}){let[a,s]=(0,p.useState)({...g,duration:t,position:n}),l=(0,p.useCallback)(e=>{let r=typeof e==`string`?{message:e}:e;s(e=>({open:!0,message:r.message,severity:r.severity??`info`,duration:r.duration??t,position:r.position??n,action:r.action,key:r.key??Date.now()}))},[t,n]),d=(0,p.useCallback)((e,t)=>{l({message:e,severity:`success`,...t})},[l]),f=(0,p.useCallback)((e,t)=>{l({message:e,severity:`error`,...t})},[l]),_=(0,p.useCallback)((e,t)=>{l({message:e,severity:`warning`,...t})},[l]),v=(0,p.useCallback)((e,t)=>{l({message:e,severity:`info`,...t})},[l]),y=(0,p.useCallback)(()=>{s(e=>({...e,open:!1}))},[]),b=(0,p.useCallback)((e,t)=>{t!==`clickaway`&&y()},[y]),x=(0,p.useMemo)(()=>({show:l,success:d,error:f,warning:_,info:v,close:y}),[l,d,f,_,v,y]);return(0,m.jsxs)(h.Provider,{value:x,children:[e,(0,m.jsx)(c,{open:a.open,autoHideDuration:a.duration,onClose:b,anchorOrigin:a.position,sx:i,children:(0,m.jsx)(r,{severity:a.severity,variant:`filled`,onClose:b,action:a.action||(0,m.jsx)(o,{size:`small`,"aria-label":`close`,color:`inherit`,onClick:y,children:(0,m.jsx)(u,{fontSize:`small`})}),sx:{width:`100%`,alignItems:`center`},children:a.message})},a.key)]})}var p,m,h,g;function _(){return(_=e((()=>{p=t(),s(),i(),a(),l(),m=n(),h=(0,p.createContext)(null),g={open:!1,message:``,severity:`info`,duration:5e3,position:{vertical:`bottom`,horizontal:`left`},key:0}})))()}export{_ as n,d as r,f as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{Q as n,Z as r}from"./mui-BXSXx9c9.js";import{B as i,z as a}from"./mui-Cd711nOk.js";import{_ as o,v as s}from"./mui-BwsIrivo.js";function c(e=`unknown`){return e===`not-running`?`Not running`:e===`unknown`?`Health unknown`:e===`healthy`?`Healthy`:e===`degraded`?`Health warning`:`Unhealthy`}function l(e){let t=e?.status??`unknown`,n=new Map;for(let t of e?.apps??[])n.set(t.status,(n.get(t.status)??0)+1);let r=[...n].map(([e,t])=>`${t} ${e===`degraded`?`warning`:e}`).join(` · `);return{status:t,label:c(t),detail:r||`Application health has not been observed`,findings:(e?.apps??[]).filter(e=>e.status!==`healthy`&&e.status!==`not-running`)}}function u({stack:e,compact:t=!1}){let n=l(e.health);return e.status===`stopped`&&!e.health?null:(0,f.jsxs)(o,{spacing:.5,sx:{mt:1.5,minWidth:0},children:[(0,f.jsxs)(o,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,f.jsx)(r,{size:`small`,variant:`outlined`,label:n.label,color:n.status===`healthy`?`success`:n.status===`unhealthy`?`error`:n.status===`degraded`?`warning`:`default`}),(0,f.jsx)(a,{variant:`caption`,color:`text.secondary`,children:n.detail})]}),!t&&n.findings.map(e=>(0,f.jsxs)(a,{variant:`caption`,sx:{overflowWrap:`anywhere`},children:[e.node===`local`?e.name:`${e.node} / ${e.name}`,` · `,e.checks.filter(e=>e.status!==`pass`).map(e=>e.message||e.name).join(` · `)||e.status]},`${e.node}/${e.name}`)),!t&&e.health?.observedAt&&(0,f.jsxs)(a,{variant:`caption`,color:`text.secondary`,children:[`Health observed `,new Date(e.health.observedAt).toLocaleString()]})]})}function d({status:e=`unknown`}){return(0,f.jsx)(r,{size:`small`,variant:`outlined`,label:c(e),color:e===`healthy`?`success`:e===`unhealthy`?`error`:e===`degraded`?`warning`:`default`})}var f;function p(){return(p=e((()=>{s(),n(),i(),f=t()})))()}export{u as n,p as r,d as t};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{t}from"./react-BN8qLIAi.js";import{Q as n,Z as r}from"./mui-SNRRJ_vi.js";import{B as i,z as a}from"./mui-B3fJdIMc.js";import{_ as o,v as s}from"./mui-CPEkFAPo.js";function c(e=`unknown`){return e===`not-running`?`Not running`:e===`unknown`?`Health unknown`:e===`healthy`?`Healthy`:e===`degraded`?`Health warning`:`Unhealthy`}function l(e){let t=e?.status??`unknown`,n=new Map;for(let t of e?.apps??[])n.set(t.status,(n.get(t.status)??0)+1);let r=[...n].map(([e,t])=>`${t} ${e===`degraded`?`warning`:e}`).join(` · `);return{status:t,label:c(t),detail:r||`Application health has not been observed`,findings:(e?.apps??[]).filter(e=>e.status!==`healthy`&&e.status!==`not-running`)}}function u({stack:e,compact:t=!1}){let n=l(e.health);return e.status===`stopped`&&!e.health?null:(0,f.jsxs)(o,{spacing:.5,sx:{mt:1.5,minWidth:0},children:[(0,f.jsxs)(o,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,f.jsx)(r,{size:`small`,variant:`outlined`,label:n.label,color:n.status===`healthy`?`success`:n.status===`unhealthy`?`error`:n.status===`degraded`?`warning`:`default`}),(0,f.jsx)(a,{variant:`caption`,color:`text.secondary`,children:n.detail})]}),!t&&n.findings.map(e=>(0,f.jsxs)(a,{variant:`caption`,sx:{overflowWrap:`anywhere`},children:[e.node===`local`?e.name:`${e.node} / ${e.name}`,` · `,e.checks.filter(e=>e.status!==`pass`).map(e=>e.message||e.name).join(` · `)||e.status]},`${e.node}/${e.name}`)),!t&&e.health?.observedAt&&(0,f.jsxs)(a,{variant:`caption`,color:`text.secondary`,children:[`Health observed `,new Date(e.health.observedAt).toLocaleString()]})]})}function d({status:e=`unknown`}){return(0,f.jsx)(r,{size:`small`,variant:`outlined`,label:c(e),color:e===`healthy`?`success`:e===`unhealthy`?`error`:e===`degraded`?`warning`:`default`})}var f;function p(){return(p=e((()=>{s(),n(),i(),f=t()})))()}export{u as n,p as r,d as t};
@@ -1 +1 @@
1
- import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{h as r,l as i}from"./client-DFnuv2z3.js";import{C as a,F as o,H as s,I as c,Q as l,V as u,Z as d,c as f,d as p,f as m,g as h,h as g,m as _,p as v,s as y,w as b}from"./mui-BXSXx9c9.js";import{B as x,z as S}from"./mui-Cd711nOk.js";import{U as C,W as w}from"./mui-AnEgAVjz.js";import{_ as T,n as ee,t as te,v as E}from"./mui-BwsIrivo.js";import{r as D,t as O}from"./alert-uBG6r9NW.js";import{n as k,s as A}from"./access-BvKK9dEv.js";import{n as j,t as M}from"./operation-status-Bm1x1wTz.js";import{o as N}from"./formatters-RnRy4bXm.js";import{n as P,t as F}from"./topology-metadata-dialog-BivuU2y6.js";function I(e){let t=e.stopOperation;return!!(t?.phase===`stopped`&&!t.supersededAt&&t.nodes.length&&t.nodes.every(e=>e.outcome===`stopped`&&e.authority))}function ne({stack:e,onResume:t,onReviewStop:n}){if(!I(e))return null;let r=e.stopOperation;return!r.intentCommitted||r.nodes.some(e=>!e.operationId||!e.observedAt)||e.resumeOperation?.stopOperationId===r.id?(0,L.jsx)(k,{permission:`OmnitronProject.reviewStackStop`,children:(0,L.jsx)(o,{size:`small`,onClick:n,children:`Review new stop…`})}):(0,L.jsx)(k,{permission:`OmnitronProject.resumeInstalledStack`,children:(0,L.jsx)(o,{size:`small`,color:`success`,onClick:t,children:`Resume installed apps`})})}function re({stack:e}){let t=e.resumeOperation;if(!t||t.stopOperationId!==e.stopOperation?.id)return null;let n=t.outcome===`running`,r=t.nodes.filter(e=>e.outcome===`running`).length;return(0,L.jsxs)(u,{component:`details`,open:!n,sx:{mb:2,typography:`body2`,overflowWrap:`anywhere`},children:[(0,L.jsxs)(`summary`,{children:[`Installed recovery · `,t.outcome,` · `,r,`/`,t.nodes.length,` nodes confirmed`]}),!n&&(0,L.jsx)(O,{severity:`warning`,children:`Inspect each node before requesting a new stop and recovery.`}),(0,L.jsxs)(S,{variant:`caption`,children:[`Operation `,t.operationId]}),t.nodes.map(e=>(0,L.jsx)(S,{variant:`body2`,children:[e.node,e.outcome,e.apps?.join(`, `),e.reason,e.observedAt&&N(e.observedAt)].filter(Boolean).join(` · `)},e.node))]})}var L;function R(){return(R=e((()=>{s(),c(),x(),D(),A(),L=n()})))()}function ie({project:e,stack:t,onClose:n,onConfirm:r}){let[s,c]=(0,z.useState)(!1),[l,d]=(0,z.useState)(0),[f,m]=(0,z.useState)(null),[h,_]=(0,z.useState)(null);(0,z.useEffect)(()=>{let n=!0;return m(null),_(null),i.invoke(`daemon`,`OmnitronProject`,`reviewStackStop`,[{project:e,stack:t,...s&&{keepInfrastructure:!0}}],{timeout:12e4}).then(e=>{n&&(s&&e.keepInfrastructure!==!0?_(`This controller cannot confirm infrastructure preservation. Update it before stopping applications separately.`):m(e))}).catch(e=>{n&&_(e instanceof Error?e.message:`Stop review unavailable`)}),()=>{n=!1}},[e,t,l,s]);let b=!f&&!h,x=!!f?.digest&&f.keepInfrastructure===!0===s;return(0,B.jsxs)(g,{open:!0,fullWidth:!0,maxWidth:`sm`,onClose:n,"aria-labelledby":`stack-stop-title`,children:[(0,B.jsxs)(y,{id:`stack-stop-title`,children:[`Review stop · `,e,` / `,t]}),(0,B.jsxs)(p,{dividers:!0,"aria-busy":b,children:[(0,B.jsx)(C,{control:(0,B.jsx)(a,{checked:s,onChange:e=>{m(null),_(null),c(e.target.checked)}}),label:`Keep infrastructure`,sx:{mb:1}}),(0,B.jsx)(M,{active:b,label:`Checking current owners and resources`}),h&&(0,B.jsx)(O,{severity:`error`,children:h}),f&&(0,B.jsxs)(T,{spacing:1.5,children:[(0,B.jsx)(S,{variant:`body2`,role:`status`,children:f.digest?`Stopping will disable automatic resume for this stack.`:`Some targets could not be verified. Review their status before stopping.`}),(0,B.jsx)(u,{component:`ul`,sx:{listStyle:`none`,m:0,p:0},children:f.targets.map(e=>(0,B.jsxs)(u,{component:`li`,sx:{py:1,overflowWrap:`anywhere`,"& + li":{borderTop:1,borderColor:`divider`}},children:[(0,B.jsxs)(S,{variant:`subtitle2`,children:[e.node,e.runtime&&` · ${e.runtime.project}/${e.runtime.stack}`]}),e.reason?(0,B.jsx)(S,{color:`warning.main`,variant:`body2`,children:e.reason}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(S,{variant:`body2`,children:[`Applications to stop · `,e.applications?.join(`, `)||`None`]}),(0,B.jsxs)(S,{variant:`body2`,children:[`Containers `,s?`kept`:`to remove`,` · `,e.containers?.join(`, `)||`None`]})]})]},e.node))})]})]}),(0,B.jsxs)(v,{sx:{flexWrap:`wrap`},children:[(0,B.jsx)(o,{disabled:b,onClick:()=>{m(null),_(null),d(e=>e+1)},children:`Check again`}),(0,B.jsx)(o,{autoFocus:!0,onClick:n,children:`Close`}),(0,B.jsx)(k,{permission:`OmnitronProject.stopStack`,children:(0,B.jsx)(o,{disabled:!x,color:`error`,variant:`contained`,onClick:()=>{x&&f?.digest&&r(f.digest,s)},children:s?`Stop applications`:`Stop stack`})})]})]})}var z,B;function V(){return(V=e((()=>{z=t(),s(),c(),b(),h(),_(),m(),f(),w(),E(),x(),D(),A(),r(),j(),B=n()})))()}function ae(e,t={}){let{initialData:n=null,immediate:r=!1,onSuccess:i,onError:a}=t,[o,s]=(0,H.useState)({data:n,loading:r,error:null}),c=(0,H.useRef)(!0),l=(0,H.useRef)(!1);(0,H.useEffect)(()=>(c.current=!0,()=>{c.current=!1}),[]);let u=(0,H.useCallback)(async(...t)=>{if(l.current)return Promise.reject(Error(`Operation already in progress`));l.current=!0,c.current&&s(e=>({...e,loading:!0,error:null}));try{let n=await e(...t);return c.current&&(s({data:n,loading:!1,error:null}),i?.(n)),n}catch(e){let t=e instanceof Error?e:Error(String(e));throw c.current&&(s(e=>({...e,loading:!1,error:t})),a?.(t)),t}finally{l.current=!1}},[e,i,a]),d=(0,H.useCallback)(()=>{s({data:n,loading:!1,error:null})},[n]),f=(0,H.useCallback)(e=>{s(t=>({...t,data:e}))},[]),p=(0,H.useCallback)(e=>{s(t=>({...t,error:e}))},[]);return(0,H.useEffect)(()=>{r&&u().catch(()=>{})},[]),(0,H.useMemo)(()=>({...o,execute:u,reset:d,setData:f,setError:p}),[o,u,d,f,p])}var H;function U(){return(U=e((()=>{H=t()})))()}function oe({project:e,stack:t}){let{data:n,loading:r,error:a,execute:s}=ae(()=>i.invoke(`daemon`,`OmnitronProject`,`inspectStackHost`,[{project:e,stack:t}],{timeout:12e4}));return(0,W.jsxs)(T,{spacing:1,sx:{minWidth:0,overflowWrap:`anywhere`},children:[(0,W.jsx)(o,{size:`small`,sx:{alignSelf:`flex-start`},disabled:r,onClick:()=>void s().catch(()=>void 0),children:n?`Inspect hosts again`:`Inspect hosts`}),(0,W.jsx)(M,{active:r,label:`Inspecting target nodes`,detail:`Reading host services and local package indices`}),a&&(0,W.jsxs)(O,{severity:`error`,children:[a.message,n&&` The previous host readings below are stale.`]}),n?.length===0&&(0,W.jsx)(O,{severity:`warning`,children:`No target node returned a reading.`}),n?.map(({node:e,inspection:t,error:n})=>(0,W.jsxs)(u,{sx:{borderTop:1,borderColor:`divider`,pt:1},children:[(0,W.jsx)(S,{variant:`subtitle2`,children:e}),n||!t?(0,W.jsx)(O,{severity:`warning`,children:n||`Host inspection unavailable.`}):(0,W.jsxs)(W.Fragment,{children:[!t.services.length&&(0,W.jsx)(S,{variant:`body2`,children:`No host services reported.`}),t.services.map(({name:e,onHost:t,external:n})=>{let r=t?.probe??n?.probe,i=n?n.reachable?`reachable`:`unreachable`:t?.unit?.state??`no unit reported`;return(0,W.jsxs)(u,{sx:{py:.5},children:[(0,W.jsxs)(S,{variant:`body2`,sx:{fontWeight:600},children:[e,` · `,i]}),t?.packages?.map(e=>(0,W.jsxs)(S,{variant:`body2`,color:e.state===`blocked`?`error.main`:`text.secondary`,children:[e.name,` · installed `,e.installed??`—`,` · candidate `,e.candidate??`—`,` · `,e.state,` ·`,` `,e.detail]},e.name)),t&&!t.packages?.length&&(0,W.jsx)(S,{variant:`caption`,color:`text.secondary`,children:`No package version evidence reported.`}),r&&(0,W.jsx)(S,{variant:`body2`,children:r.ok?`Service probe passed`:r.error??`Service probe failed`}),t?.actions.map(e=>(0,W.jsxs)(S,{variant:`body2`,children:[`Would `,e]},e)),t?.refusals.map(e=>(0,W.jsx)(S,{variant:`body2`,color:`error.main`,children:e},e))]},e)})]})]},e))]})}var W;function G(){return(G=e((()=>{s(),c(),E(),x(),D(),U(),r(),j(),W=n()})))()}function se({project:e,stack:t,onClose:n}){let[r,a]=(0,K.useState)(null),[s,c]=(0,K.useState)(!0),[l,f]=(0,K.useState)(null),[m,h]=(0,K.useState)(!1),[_,b]=(0,K.useState)(!1),x=(0,K.useRef)({value:0}),w=(0,K.useCallback)(async()=>{let n=++x.current.value;c(!0),f(null);try{let r=await i.invoke(`daemon`,`OmnitronProject`,`diagnoseStack`,[{project:e,stack:t}],{timeout:12e4});n===x.current.value&&a(r)}catch(e){n===x.current.value&&f(e instanceof Error?e.message:`Diagnosis failed`)}finally{n===x.current.value&&c(!1)}},[e,t]);return(0,K.useEffect)(()=>{let e=x.current;return w(),()=>{e.value++}},[w]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(g,{open:!0,fullWidth:!0,maxWidth:`md`,onClose:n,"aria-labelledby":`stack-diagnosis-title`,children:[(0,q.jsxs)(y,{id:`stack-diagnosis-title`,children:[e,` / `,t,` · Start prerequisites`]}),(0,q.jsx)(p,{dividers:!0,sx:{minWidth:0},children:(0,q.jsxs)(T,{spacing:2,children:[(0,q.jsx)(S,{variant:`body2`,color:`text.secondary`,children:`Inspect configuration and host prerequisites without starting applications, provisioning services or applying migrations.`}),(0,q.jsx)(M,{active:s,label:`Checking stack prerequisites`,detail:`Reading declarations and Docker inventory; no services are changed`}),l&&(0,q.jsxs)(O,{severity:`error`,children:[l,r?` The previous report is retained below and is stale.`:``]}),r&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(T,{direction:`row`,sx:{alignItems:`center`,flexWrap:`wrap`,gap:1},children:[(0,q.jsx)(S,{variant:`subtitle2`,role:`status`,children:X[r.status]}),(0,q.jsxs)(S,{variant:`caption`,color:`text.secondary`,children:[new Date(r.checkedAt).toLocaleString(),` · `,(r.durationMs/1e3).toFixed(1),` s`,s||l?` · previous observation`:``]}),(0,q.jsx)(C,{sx:{ml:`auto`},control:(0,q.jsx)(te,{size:`small`,checked:m,onChange:(e,t)=>h(t)}),label:(0,q.jsx)(S,{variant:`caption`,children:`Needs attention`})})]}),(0,q.jsx)(u,{component:`ul`,sx:{m:0,p:0,listStyle:`none`},children:r.checks.filter(e=>!m||e.state!==`pass`).map((e,t)=>(0,q.jsxs)(u,{component:`li`,sx:{py:1.25,borderBottom:`1px solid`,borderColor:`divider`,display:`grid`,gridTemplateColumns:{xs:`1fr`,sm:`minmax(130px, 1fr) 3fr`},gap:1,overflowWrap:`anywhere`},children:[(0,q.jsxs)(u,{children:[(0,q.jsx)(S,{variant:`body2`,sx:{fontWeight:600},children:e.resource}),(0,q.jsx)(d,{size:`small`,variant:`outlined`,color:J[e.state],label:Y[e.state],sx:{mt:.5}})]}),(0,q.jsxs)(u,{children:[(0,q.jsx)(S,{variant:`body2`,children:e.message}),e.action&&(0,q.jsx)(S,{variant:`body2`,color:`text.secondary`,sx:{mt:.5},children:e.action})]})]},`${e.code}/${e.resource}/${t}`))}),m&&r.checks.every(e=>e.state===`pass`)&&(0,q.jsx)(S,{variant:`body2`,children:`No prerequisite warnings.`}),r.checks.some(e=>e.code===`remote.prerequisites`)&&(0,q.jsx)(k,{permission:`OmnitronProject.inspectStackHost`,children:(0,q.jsx)(oe,{project:e,stack:t},JSON.stringify([e,t]))}),(0,q.jsxs)(O,{severity:`info`,children:[`Not verified: `,r.deferred.join(`; `),`. This report is an observation, not a guarantee that startup will succeed.`]})]})]})}),(0,q.jsxs)(v,{sx:{flexWrap:`wrap`,gap:1},children:[r?.checks.some(e=>e.code===`declaration.unknown`)&&(0,q.jsx)(k,{permission:`OmnitronProject.refreshTopologyMetadata`,children:(0,q.jsx)(o,{disabled:s,onClick:()=>b(!0),children:`Refresh declarations…`})}),(0,q.jsx)(o,{disabled:s,onClick:()=>void w(),children:`Check again`}),(0,q.jsx)(o,{autoFocus:!0,onClick:n,children:`Close`})]})]}),_&&(0,q.jsx)(F,{project:e,stack:t,onClose:()=>b(!1),onUpdated:w})]})}var K,q,J,Y,X;function Z(){return(Z=e((()=>{K=t(),s(),c(),l(),h(),_(),m(),f(),w(),E(),ee(),x(),D(),j(),P(),G(),A(),r(),q=n(),J={pass:`success`,change:`info`,blocked:`error`,unknown:`warning`},Y={pass:`Verified`,change:`Planned change`,blocked:`Blocked`,unknown:`Not verified`},X={ready:`Prerequisites verified`,changes:`Changes required at start`,blocked:`Start blockers found`,unknown:`Verification incomplete`}})))()}function ce({stack:e,compact:t=!1}){if(!e.notUp?.length)return null;let n=t?e.notUp.slice(0,1):e.notUp;return(0,Q.jsxs)(O,{severity:e.status===`error`?`error`:`warning`,sx:{my:2,minWidth:0,"& .MuiAlert-message":{minWidth:0}},children:[(0,Q.jsxs)(S,{variant:`subtitle2`,children:[`Not up · `,e.notUp.length]}),(0,Q.jsx)(u,{component:`ul`,sx:{m:0,pl:2,overflowWrap:`anywhere`},children:n.map(e=>(0,Q.jsx)(S,{component:`li`,variant:`body2`,children:e},e))}),t&&e.notUp.length>n.length&&(0,Q.jsxs)(S,{variant:`caption`,children:[e.notUp.length-n.length,` more · Open stack for details`]})]})}var Q;function $(){return($=e((()=>{s(),x(),D(),Q=n()})))()}export{ie as a,re as c,Z as i,I as l,$ as n,V as o,se as r,ne as s,ce as t,R as u};
1
+ import{n as e}from"./rolldown-runtime-CNOWq4Kh.js";import{i as t,t as n}from"./react-BN8qLIAi.js";import{h as r,l as i}from"./client-CgyTwq9g.js";import{C as a,F as o,H as s,I as c,Q as l,V as u,Z as d,c as f,d as p,f as m,g as h,h as g,m as _,p as v,s as y,w as b}from"./mui-SNRRJ_vi.js";import{B as x,z as S}from"./mui-B3fJdIMc.js";import{U as C,W as w}from"./mui-CMWGTMXv.js";import{_ as T,n as ee,t as te,v as E}from"./mui-CPEkFAPo.js";import{r as D,t as O}from"./alert-BdJ2uaY0.js";import{n as k,s as A}from"./access-I0f72P9m.js";import{n as j,t as M}from"./operation-status-DHyYOT7G.js";import{o as N}from"./formatters-RnRy4bXm.js";import{n as P,t as F}from"./topology-metadata-dialog-Dpfp4YF1.js";function I(e){let t=e.stopOperation;return!!(t?.phase===`stopped`&&!t.supersededAt&&t.nodes.length&&t.nodes.every(e=>e.outcome===`stopped`&&e.authority))}function ne({stack:e,onResume:t,onReviewStop:n}){if(!I(e))return null;let r=e.stopOperation;return!r.intentCommitted||r.nodes.some(e=>!e.operationId||!e.observedAt)||e.resumeOperation?.stopOperationId===r.id?(0,L.jsx)(k,{permission:`OmnitronProject.reviewStackStop`,children:(0,L.jsx)(o,{size:`small`,onClick:n,children:`Review new stop…`})}):(0,L.jsx)(k,{permission:`OmnitronProject.resumeInstalledStack`,children:(0,L.jsx)(o,{size:`small`,color:`success`,onClick:t,children:`Resume installed apps`})})}function re({stack:e}){let t=e.resumeOperation;if(!t||t.stopOperationId!==e.stopOperation?.id)return null;let n=t.outcome===`running`,r=t.nodes.filter(e=>e.outcome===`running`).length;return(0,L.jsxs)(u,{component:`details`,open:!n,sx:{mb:2,typography:`body2`,overflowWrap:`anywhere`},children:[(0,L.jsxs)(`summary`,{children:[`Installed recovery · `,t.outcome,` · `,r,`/`,t.nodes.length,` nodes confirmed`]}),!n&&(0,L.jsx)(O,{severity:`warning`,children:`Inspect each node before requesting a new stop and recovery.`}),(0,L.jsxs)(S,{variant:`caption`,children:[`Operation `,t.operationId]}),t.nodes.map(e=>(0,L.jsx)(S,{variant:`body2`,children:[e.node,e.outcome,e.apps?.join(`, `),e.reason,e.observedAt&&N(e.observedAt)].filter(Boolean).join(` · `)},e.node))]})}var L;function R(){return(R=e((()=>{s(),c(),x(),D(),A(),L=n()})))()}function ie({project:e,stack:t,onClose:n,onConfirm:r}){let[s,c]=(0,z.useState)(!1),[l,d]=(0,z.useState)(0),[f,m]=(0,z.useState)(null),[h,_]=(0,z.useState)(null);(0,z.useEffect)(()=>{let n=!0;return m(null),_(null),i.invoke(`daemon`,`OmnitronProject`,`reviewStackStop`,[{project:e,stack:t,...s&&{keepInfrastructure:!0}}],{timeout:12e4}).then(e=>{n&&(s&&e.keepInfrastructure!==!0?_(`This controller cannot confirm infrastructure preservation. Update it before stopping applications separately.`):m(e))}).catch(e=>{n&&_(e instanceof Error?e.message:`Stop review unavailable`)}),()=>{n=!1}},[e,t,l,s]);let b=!f&&!h,x=!!f?.digest&&f.keepInfrastructure===!0===s;return(0,B.jsxs)(g,{open:!0,fullWidth:!0,maxWidth:`sm`,onClose:n,"aria-labelledby":`stack-stop-title`,children:[(0,B.jsxs)(y,{id:`stack-stop-title`,children:[`Review stop · `,e,` / `,t]}),(0,B.jsxs)(p,{dividers:!0,"aria-busy":b,children:[(0,B.jsx)(C,{control:(0,B.jsx)(a,{checked:s,onChange:e=>{m(null),_(null),c(e.target.checked)}}),label:`Keep infrastructure`,sx:{mb:1}}),(0,B.jsx)(M,{active:b,label:`Checking current owners and resources`}),h&&(0,B.jsx)(O,{severity:`error`,children:h}),f&&(0,B.jsxs)(T,{spacing:1.5,children:[(0,B.jsx)(S,{variant:`body2`,role:`status`,children:f.digest?`Stopping will disable automatic resume for this stack.`:`Some targets could not be verified. Review their status before stopping.`}),(0,B.jsx)(u,{component:`ul`,sx:{listStyle:`none`,m:0,p:0},children:f.targets.map(e=>(0,B.jsxs)(u,{component:`li`,sx:{py:1,overflowWrap:`anywhere`,"& + li":{borderTop:1,borderColor:`divider`}},children:[(0,B.jsxs)(S,{variant:`subtitle2`,children:[e.node,e.runtime&&` · ${e.runtime.project}/${e.runtime.stack}`]}),e.reason?(0,B.jsx)(S,{color:`warning.main`,variant:`body2`,children:e.reason}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(S,{variant:`body2`,children:[`Applications to stop · `,e.applications?.join(`, `)||`None`]}),(0,B.jsxs)(S,{variant:`body2`,children:[`Containers `,s?`kept`:`to remove`,` · `,e.containers?.join(`, `)||`None`]})]})]},e.node))})]})]}),(0,B.jsxs)(v,{sx:{flexWrap:`wrap`},children:[(0,B.jsx)(o,{disabled:b,onClick:()=>{m(null),_(null),d(e=>e+1)},children:`Check again`}),(0,B.jsx)(o,{autoFocus:!0,onClick:n,children:`Close`}),(0,B.jsx)(k,{permission:`OmnitronProject.stopStack`,children:(0,B.jsx)(o,{disabled:!x,color:`error`,variant:`contained`,onClick:()=>{x&&f?.digest&&r(f.digest,s)},children:s?`Stop applications`:`Stop stack`})})]})]})}var z,B;function V(){return(V=e((()=>{z=t(),s(),c(),b(),h(),_(),m(),f(),w(),E(),x(),D(),A(),r(),j(),B=n()})))()}function ae(e,t={}){let{initialData:n=null,immediate:r=!1,onSuccess:i,onError:a}=t,[o,s]=(0,H.useState)({data:n,loading:r,error:null}),c=(0,H.useRef)(!0),l=(0,H.useRef)(!1);(0,H.useEffect)(()=>(c.current=!0,()=>{c.current=!1}),[]);let u=(0,H.useCallback)(async(...t)=>{if(l.current)return Promise.reject(Error(`Operation already in progress`));l.current=!0,c.current&&s(e=>({...e,loading:!0,error:null}));try{let n=await e(...t);return c.current&&(s({data:n,loading:!1,error:null}),i?.(n)),n}catch(e){let t=e instanceof Error?e:Error(String(e));throw c.current&&(s(e=>({...e,loading:!1,error:t})),a?.(t)),t}finally{l.current=!1}},[e,i,a]),d=(0,H.useCallback)(()=>{s({data:n,loading:!1,error:null})},[n]),f=(0,H.useCallback)(e=>{s(t=>({...t,data:e}))},[]),p=(0,H.useCallback)(e=>{s(t=>({...t,error:e}))},[]);return(0,H.useEffect)(()=>{r&&u().catch(()=>{})},[]),(0,H.useMemo)(()=>({...o,execute:u,reset:d,setData:f,setError:p}),[o,u,d,f,p])}var H;function U(){return(U=e((()=>{H=t()})))()}function oe({project:e,stack:t}){let{data:n,loading:r,error:a,execute:s}=ae(()=>i.invoke(`daemon`,`OmnitronProject`,`inspectStackHost`,[{project:e,stack:t}],{timeout:12e4}));return(0,W.jsxs)(T,{spacing:1,sx:{minWidth:0,overflowWrap:`anywhere`},children:[(0,W.jsx)(o,{size:`small`,sx:{alignSelf:`flex-start`},disabled:r,onClick:()=>void s().catch(()=>void 0),children:n?`Inspect hosts again`:`Inspect hosts`}),(0,W.jsx)(M,{active:r,label:`Inspecting target nodes`,detail:`Reading host services and local package indices`}),a&&(0,W.jsxs)(O,{severity:`error`,children:[a.message,n&&` The previous host readings below are stale.`]}),n?.length===0&&(0,W.jsx)(O,{severity:`warning`,children:`No target node returned a reading.`}),n?.map(({node:e,inspection:t,error:n})=>(0,W.jsxs)(u,{sx:{borderTop:1,borderColor:`divider`,pt:1},children:[(0,W.jsx)(S,{variant:`subtitle2`,children:e}),n||!t?(0,W.jsx)(O,{severity:`warning`,children:n||`Host inspection unavailable.`}):(0,W.jsxs)(W.Fragment,{children:[!t.services.length&&(0,W.jsx)(S,{variant:`body2`,children:`No host services reported.`}),t.services.map(({name:e,onHost:t,external:n})=>{let r=t?.probe??n?.probe,i=n?n.reachable?`reachable`:`unreachable`:t?.unit?.state??`no unit reported`;return(0,W.jsxs)(u,{sx:{py:.5},children:[(0,W.jsxs)(S,{variant:`body2`,sx:{fontWeight:600},children:[e,` · `,i]}),t?.packages?.map(e=>(0,W.jsxs)(S,{variant:`body2`,color:e.state===`blocked`?`error.main`:`text.secondary`,children:[e.name,` · installed `,e.installed??`—`,` · candidate `,e.candidate??`—`,` · `,e.state,` ·`,` `,e.detail]},e.name)),t&&!t.packages?.length&&(0,W.jsx)(S,{variant:`caption`,color:`text.secondary`,children:`No package version evidence reported.`}),r&&(0,W.jsx)(S,{variant:`body2`,children:r.ok?`Service probe passed`:r.error??`Service probe failed`}),t?.actions.map(e=>(0,W.jsxs)(S,{variant:`body2`,children:[`Would `,e]},e)),t?.refusals.map(e=>(0,W.jsx)(S,{variant:`body2`,color:`error.main`,children:e},e))]},e)})]})]},e))]})}var W;function G(){return(G=e((()=>{s(),c(),E(),x(),D(),U(),r(),j(),W=n()})))()}function se({project:e,stack:t,onClose:n}){let[r,a]=(0,K.useState)(null),[s,c]=(0,K.useState)(!0),[l,f]=(0,K.useState)(null),[m,h]=(0,K.useState)(!1),[_,b]=(0,K.useState)(!1),x=(0,K.useRef)({value:0}),w=(0,K.useCallback)(async()=>{let n=++x.current.value;c(!0),f(null);try{let r=await i.invoke(`daemon`,`OmnitronProject`,`diagnoseStack`,[{project:e,stack:t}],{timeout:12e4});n===x.current.value&&a(r)}catch(e){n===x.current.value&&f(e instanceof Error?e.message:`Diagnosis failed`)}finally{n===x.current.value&&c(!1)}},[e,t]);return(0,K.useEffect)(()=>{let e=x.current;return w(),()=>{e.value++}},[w]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(g,{open:!0,fullWidth:!0,maxWidth:`md`,onClose:n,"aria-labelledby":`stack-diagnosis-title`,children:[(0,q.jsxs)(y,{id:`stack-diagnosis-title`,children:[e,` / `,t,` · Start prerequisites`]}),(0,q.jsx)(p,{dividers:!0,sx:{minWidth:0},children:(0,q.jsxs)(T,{spacing:2,children:[(0,q.jsx)(S,{variant:`body2`,color:`text.secondary`,children:`Inspect configuration and host prerequisites without starting applications, provisioning services or applying migrations.`}),(0,q.jsx)(M,{active:s,label:`Checking stack prerequisites`,detail:`Reading declarations and Docker inventory; no services are changed`}),l&&(0,q.jsxs)(O,{severity:`error`,children:[l,r?` The previous report is retained below and is stale.`:``]}),r&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(T,{direction:`row`,sx:{alignItems:`center`,flexWrap:`wrap`,gap:1},children:[(0,q.jsx)(S,{variant:`subtitle2`,role:`status`,children:X[r.status]}),(0,q.jsxs)(S,{variant:`caption`,color:`text.secondary`,children:[new Date(r.checkedAt).toLocaleString(),` · `,(r.durationMs/1e3).toFixed(1),` s`,s||l?` · previous observation`:``]}),(0,q.jsx)(C,{sx:{ml:`auto`},control:(0,q.jsx)(te,{size:`small`,checked:m,onChange:(e,t)=>h(t)}),label:(0,q.jsx)(S,{variant:`caption`,children:`Needs attention`})})]}),(0,q.jsx)(u,{component:`ul`,sx:{m:0,p:0,listStyle:`none`},children:r.checks.filter(e=>!m||e.state!==`pass`).map((e,t)=>(0,q.jsxs)(u,{component:`li`,sx:{py:1.25,borderBottom:`1px solid`,borderColor:`divider`,display:`grid`,gridTemplateColumns:{xs:`1fr`,sm:`minmax(130px, 1fr) 3fr`},gap:1,overflowWrap:`anywhere`},children:[(0,q.jsxs)(u,{children:[(0,q.jsx)(S,{variant:`body2`,sx:{fontWeight:600},children:e.resource}),(0,q.jsx)(d,{size:`small`,variant:`outlined`,color:J[e.state],label:Y[e.state],sx:{mt:.5}})]}),(0,q.jsxs)(u,{children:[(0,q.jsx)(S,{variant:`body2`,children:e.message}),e.action&&(0,q.jsx)(S,{variant:`body2`,color:`text.secondary`,sx:{mt:.5},children:e.action})]})]},`${e.code}/${e.resource}/${t}`))}),m&&r.checks.every(e=>e.state===`pass`)&&(0,q.jsx)(S,{variant:`body2`,children:`No prerequisite warnings.`}),r.checks.some(e=>e.code===`remote.prerequisites`)&&(0,q.jsx)(k,{permission:`OmnitronProject.inspectStackHost`,children:(0,q.jsx)(oe,{project:e,stack:t},JSON.stringify([e,t]))}),(0,q.jsxs)(O,{severity:`info`,children:[`Not verified: `,r.deferred.join(`; `),`. This report is an observation, not a guarantee that startup will succeed.`]})]})]})}),(0,q.jsxs)(v,{sx:{flexWrap:`wrap`,gap:1},children:[r?.checks.some(e=>e.code===`declaration.unknown`)&&(0,q.jsx)(k,{permission:`OmnitronProject.refreshTopologyMetadata`,children:(0,q.jsx)(o,{disabled:s,onClick:()=>b(!0),children:`Refresh declarations…`})}),(0,q.jsx)(o,{disabled:s,onClick:()=>void w(),children:`Check again`}),(0,q.jsx)(o,{autoFocus:!0,onClick:n,children:`Close`})]})]}),_&&(0,q.jsx)(F,{project:e,stack:t,onClose:()=>b(!1),onUpdated:w})]})}var K,q,J,Y,X;function Z(){return(Z=e((()=>{K=t(),s(),c(),l(),h(),_(),m(),f(),w(),E(),ee(),x(),D(),j(),P(),G(),A(),r(),q=n(),J={pass:`success`,change:`info`,blocked:`error`,unknown:`warning`},Y={pass:`Verified`,change:`Planned change`,blocked:`Blocked`,unknown:`Not verified`},X={ready:`Prerequisites verified`,changes:`Changes required at start`,blocked:`Start blockers found`,unknown:`Verification incomplete`}})))()}function ce({stack:e,compact:t=!1}){if(!e.notUp?.length)return null;let n=t?e.notUp.slice(0,1):e.notUp;return(0,Q.jsxs)(O,{severity:e.status===`error`?`error`:`warning`,sx:{my:2,minWidth:0,"& .MuiAlert-message":{minWidth:0}},children:[(0,Q.jsxs)(S,{variant:`subtitle2`,children:[`Not up · `,e.notUp.length]}),(0,Q.jsx)(u,{component:`ul`,sx:{m:0,pl:2,overflowWrap:`anywhere`},children:n.map(e=>(0,Q.jsx)(S,{component:`li`,variant:`body2`,children:e},e))}),t&&e.notUp.length>n.length&&(0,Q.jsxs)(S,{variant:`caption`,children:[e.notUp.length-n.length,` more · Open stack for details`]})]})}var Q;function $(){return($=e((()=>{s(),x(),D(),Q=n()})))()}export{ie as a,re as c,Z as i,I as l,$ as n,V as o,se as r,ne as s,ce as t,R as u};