@omnitron-dev/omnitron 0.3.0 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +579 -0
- package/data/operations/managed-kernel.mjs +302 -0
- package/data/operations/stage-kernel.mjs +125 -0
- package/dist/BUILD.json +4 -3
- package/dist/cli/exit-after-output.d.ts +3 -0
- package/dist/cli/exit-after-output.d.ts.map +1 -0
- package/dist/cli/exit-after-output.js +11 -0
- package/dist/cli/exit-after-output.js.map +1 -0
- package/dist/cli/installed.d.ts +3 -0
- package/dist/cli/installed.d.ts.map +1 -0
- package/dist/cli/installed.js +17 -0
- package/dist/cli/installed.js.map +1 -0
- package/dist/cli/omnitron.js +455 -99
- package/dist/cli/omnitron.js.map +1 -1
- package/dist/cli/output-command.d.ts +13 -0
- package/dist/cli/output-command.d.ts.map +1 -0
- package/dist/cli/output-command.js +48 -0
- package/dist/cli/output-command.js.map +1 -0
- package/dist/cluster/cluster.rpc-service.d.ts +9 -77
- package/dist/cluster/cluster.rpc-service.d.ts.map +1 -1
- package/dist/cluster/cluster.rpc-service.js +20 -107
- package/dist/cluster/cluster.rpc-service.js.map +1 -1
- package/dist/cluster/enrollment.d.ts +9 -0
- package/dist/cluster/enrollment.d.ts.map +1 -0
- package/dist/cluster/enrollment.js +49 -0
- package/dist/cluster/enrollment.js.map +1 -0
- package/dist/cluster/index.d.ts +1 -1
- package/dist/cluster/index.d.ts.map +1 -1
- package/dist/cluster/leader-election.d.ts +39 -211
- package/dist/cluster/leader-election.d.ts.map +1 -1
- package/dist/cluster/leader-election.js +235 -512
- package/dist/cluster/leader-election.js.map +1 -1
- package/dist/cluster/mesh-link.d.ts +18 -51
- package/dist/cluster/mesh-link.d.ts.map +1 -1
- package/dist/cluster/mesh-link.js +66 -78
- package/dist/cluster/mesh-link.js.map +1 -1
- package/dist/cluster/mesh.d.ts +3 -1
- package/dist/cluster/mesh.d.ts.map +1 -1
- package/dist/cluster/mesh.js +76 -60
- package/dist/cluster/mesh.js.map +1 -1
- package/dist/cluster/slave-connector.d.ts +42 -6
- package/dist/cluster/slave-connector.d.ts.map +1 -1
- package/dist/cluster/slave-connector.js +349 -196
- package/dist/cluster/slave-connector.js.map +1 -1
- package/dist/cluster/standalone-infrastructure.d.ts +3 -0
- package/dist/cluster/standalone-infrastructure.d.ts.map +1 -0
- package/dist/cluster/standalone-infrastructure.js +25 -0
- package/dist/cluster/standalone-infrastructure.js.map +1 -0
- package/dist/cluster/stop-authority.d.ts +45 -0
- package/dist/cluster/stop-authority.d.ts.map +1 -0
- package/dist/cluster/stop-authority.js +112 -0
- package/dist/cluster/stop-authority.js.map +1 -0
- package/dist/commands/access.d.ts +9 -0
- package/dist/commands/access.d.ts.map +1 -0
- package/dist/commands/access.js +45 -0
- package/dist/commands/access.js.map +1 -0
- package/dist/commands/audit.d.ts +2 -0
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +9 -4
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/backend.d.ts +17 -0
- package/dist/commands/backend.d.ts.map +1 -0
- package/dist/commands/backend.js +264 -0
- package/dist/commands/backend.js.map +1 -0
- package/dist/commands/backup.d.ts +5 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +17 -2
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cluster.d.ts.map +1 -1
- package/dist/commands/cluster.js +33 -42
- package/dist/commands/cluster.js.map +1 -1
- package/dist/commands/daemon-cmd.d.ts.map +1 -1
- package/dist/commands/daemon-cmd.js +14 -3
- package/dist/commands/daemon-cmd.js.map +1 -1
- package/dist/commands/deploy.d.ts +4 -4
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/discover.d.ts +2 -2
- package/dist/commands/discover.js +2 -2
- package/dist/commands/doctor.d.ts +11 -29
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +47 -45
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/files.d.ts +19 -0
- package/dist/commands/files.d.ts.map +1 -0
- package/dist/commands/files.js +226 -0
- package/dist/commands/files.js.map +1 -0
- package/dist/commands/fleet-asking.d.ts +2 -2
- package/dist/commands/fleet-asking.js +2 -2
- package/dist/commands/fleet-recover.d.ts +2 -0
- package/dist/commands/fleet-recover.d.ts.map +1 -0
- package/dist/commands/fleet-recover.js +30 -0
- package/dist/commands/fleet-recover.js.map +1 -0
- package/dist/commands/fleet-rollout.d.ts +25 -0
- package/dist/commands/fleet-rollout.d.ts.map +1 -0
- package/dist/commands/fleet-rollout.js +155 -0
- package/dist/commands/fleet-rollout.js.map +1 -0
- package/dist/commands/fleet.d.ts.map +1 -1
- package/dist/commands/fleet.js +1 -0
- package/dist/commands/fleet.js.map +1 -1
- package/dist/commands/health-check.d.ts.map +1 -1
- package/dist/commands/health-check.js +13 -6
- package/dist/commands/health-check.js.map +1 -1
- package/dist/commands/host-ingress.d.ts +3 -0
- package/dist/commands/host-ingress.d.ts.map +1 -0
- package/dist/commands/host-ingress.js +31 -0
- package/dist/commands/host-ingress.js.map +1 -0
- package/dist/commands/infra.d.ts +7 -4
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +152 -60
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/logs.d.ts +7 -24
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +117 -41
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +7 -1
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/migrate.d.ts +8 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +64 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/node-reconcile.d.ts +8 -0
- package/dist/commands/node-reconcile.d.ts.map +1 -0
- package/dist/commands/node-reconcile.js +49 -0
- package/dist/commands/node-reconcile.js.map +1 -0
- package/dist/commands/node.d.ts +1 -21
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +35 -27
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/output.d.ts +3 -9
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +34 -25
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/pipeline.d.ts +11 -2
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +82 -15
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +10 -2
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +69 -3
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/release-store.js +1 -1
- package/dist/commands/release-store.js.map +1 -1
- package/dist/commands/release.d.ts +5 -12
- package/dist/commands/release.d.ts.map +1 -1
- package/dist/commands/release.js +144 -36
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/remote.d.ts +3 -3
- package/dist/commands/remote.js +3 -3
- package/dist/commands/scale.d.ts +1 -4
- package/dist/commands/scale.d.ts.map +1 -1
- package/dist/commands/scale.js +39 -19
- package/dist/commands/scale.js.map +1 -1
- package/dist/commands/secret-input.d.ts +3 -0
- package/dist/commands/secret-input.d.ts.map +1 -0
- package/dist/commands/secret-input.js +36 -0
- package/dist/commands/secret-input.js.map +1 -0
- package/dist/commands/secret.d.ts +4 -2
- package/dist/commands/secret.d.ts.map +1 -1
- package/dist/commands/secret.js +12 -2
- package/dist/commands/secret.js.map +1 -1
- package/dist/commands/service-resident.d.ts +25 -0
- package/dist/commands/service-resident.d.ts.map +1 -0
- package/dist/commands/service-resident.js +236 -0
- package/dist/commands/service-resident.js.map +1 -0
- package/dist/commands/service-units.d.ts +13 -1
- package/dist/commands/service-units.d.ts.map +1 -1
- package/dist/commands/service-units.js +38 -16
- package/dist/commands/service-units.js.map +1 -1
- package/dist/commands/service.d.ts +2 -24
- package/dist/commands/service.d.ts.map +1 -1
- package/dist/commands/service.js +89 -7
- package/dist/commands/service.js.map +1 -1
- package/dist/commands/stack.d.ts +11 -6
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +212 -38
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/start.d.ts +0 -21
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +33 -43
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +1 -5
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +5 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +0 -22
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +26 -86
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/system.d.ts +4 -0
- package/dist/commands/system.d.ts.map +1 -0
- package/dist/commands/system.js +41 -0
- package/dist/commands/system.js.map +1 -0
- package/dist/commands/terminal.d.ts +7 -0
- package/dist/commands/terminal.d.ts.map +1 -0
- package/dist/commands/terminal.js +184 -0
- package/dist/commands/terminal.js.map +1 -0
- package/dist/commands/topology.d.ts +3 -0
- package/dist/commands/topology.d.ts.map +1 -0
- package/dist/commands/topology.js +107 -0
- package/dist/commands/topology.js.map +1 -0
- package/dist/commands/tor.d.ts +1 -1
- package/dist/commands/tor.js +2 -2
- package/dist/commands/up.d.ts +4 -54
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +41 -98
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/webapp.d.ts +0 -9
- package/dist/commands/webapp.d.ts.map +1 -1
- package/dist/commands/webapp.js +116 -69
- package/dist/commands/webapp.js.map +1 -1
- package/dist/config/app-path.d.ts +4 -0
- package/dist/config/app-path.d.ts.map +1 -0
- package/dist/config/app-path.js +6 -0
- package/dist/config/app-path.js.map +1 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +9 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/define-ecosystem.d.ts.map +1 -1
- package/dist/config/define-ecosystem.js +12 -0
- package/dist/config/define-ecosystem.js.map +1 -1
- package/dist/config/index.d.ts +3 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader-child.d.ts +2 -0
- package/dist/config/loader-child.d.ts.map +1 -0
- package/dist/config/loader-child.js +56 -0
- package/dist/config/loader-child.js.map +1 -0
- package/dist/config/loader.d.ts +7 -2
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +14 -27
- package/dist/config/loader.js.map +1 -1
- package/dist/config/saved.d.ts +67 -0
- package/dist/config/saved.d.ts.map +1 -0
- package/dist/config/saved.js +81 -0
- package/dist/config/saved.js.map +1 -0
- package/dist/config/types.d.ts +105 -58
- package/dist/config/types.d.ts.map +1 -1
- package/dist/daemon/backend-candidate.d.ts +32 -0
- package/dist/daemon/backend-candidate.d.ts.map +1 -0
- package/dist/daemon/backend-candidate.js +129 -0
- package/dist/daemon/backend-candidate.js.map +1 -0
- package/dist/daemon/backend-child.d.ts +5 -0
- package/dist/daemon/backend-child.d.ts.map +1 -0
- package/dist/daemon/backend-child.js +13 -0
- package/dist/daemon/backend-child.js.map +1 -0
- package/dist/daemon/backend-control.d.ts +43 -0
- package/dist/daemon/backend-control.d.ts.map +1 -0
- package/dist/daemon/backend-control.js +155 -0
- package/dist/daemon/backend-control.js.map +1 -0
- package/dist/daemon/backend-crash-recovery.d.ts +4 -0
- package/dist/daemon/backend-crash-recovery.d.ts.map +1 -0
- package/dist/daemon/backend-crash-recovery.js +136 -0
- package/dist/daemon/backend-crash-recovery.js.map +1 -0
- package/dist/daemon/backend-handoff-types.d.ts +27 -0
- package/dist/daemon/backend-handoff-types.d.ts.map +1 -0
- package/dist/daemon/backend-handoff-types.js +33 -0
- package/dist/daemon/backend-handoff-types.js.map +1 -0
- package/dist/daemon/backend-recovery-journal.d.ts +30 -0
- package/dist/daemon/backend-recovery-journal.d.ts.map +1 -0
- package/dist/daemon/backend-recovery-journal.js +67 -0
- package/dist/daemon/backend-recovery-journal.js.map +1 -0
- package/dist/daemon/backend-recovery-monitor.d.ts +35 -0
- package/dist/daemon/backend-recovery-monitor.d.ts.map +1 -0
- package/dist/daemon/backend-recovery-monitor.js +113 -0
- package/dist/daemon/backend-recovery-monitor.js.map +1 -0
- package/dist/daemon/backend-supervisor-entry.d.ts +2 -0
- package/dist/daemon/backend-supervisor-entry.d.ts.map +1 -0
- package/dist/daemon/backend-supervisor-entry.js +3 -0
- package/dist/daemon/backend-supervisor-entry.js.map +1 -0
- package/dist/daemon/backend-supervisor-main.d.ts +2 -0
- package/dist/daemon/backend-supervisor-main.d.ts.map +1 -0
- package/dist/daemon/backend-supervisor-main.js +45 -0
- package/dist/daemon/backend-supervisor-main.js.map +1 -0
- package/dist/daemon/backend-supervisor.d.ts +61 -0
- package/dist/daemon/backend-supervisor.d.ts.map +1 -0
- package/dist/daemon/backend-supervisor.js +339 -0
- package/dist/daemon/backend-supervisor.js.map +1 -0
- package/dist/daemon/backend-upgrade.d.ts +41 -0
- package/dist/daemon/backend-upgrade.d.ts.map +1 -0
- package/dist/daemon/backend-upgrade.js +444 -0
- package/dist/daemon/backend-upgrade.js.map +1 -0
- package/dist/daemon/backend.rpc-service.d.ts +11 -0
- package/dist/daemon/backend.rpc-service.d.ts.map +1 -0
- package/dist/daemon/backend.rpc-service.js +44 -0
- package/dist/daemon/backend.rpc-service.js.map +1 -0
- package/dist/daemon/daemon-client.d.ts +12 -79
- package/dist/daemon/daemon-client.d.ts.map +1 -1
- package/dist/daemon/daemon-client.js +28 -270
- package/dist/daemon/daemon-client.js.map +1 -1
- package/dist/daemon/daemon-entry.d.ts +0 -7
- package/dist/daemon/daemon-entry.d.ts.map +1 -1
- package/dist/daemon/daemon-entry.js +2 -115
- package/dist/daemon/daemon-entry.js.map +1 -1
- package/dist/daemon/daemon-main.d.ts +9 -0
- package/dist/daemon/daemon-main.d.ts.map +1 -0
- package/dist/daemon/daemon-main.js +105 -0
- package/dist/daemon/daemon-main.js.map +1 -0
- package/dist/daemon/daemon-scheduler.d.ts +8 -5
- package/dist/daemon/daemon-scheduler.d.ts.map +1 -1
- package/dist/daemon/daemon-scheduler.js +45 -73
- package/dist/daemon/daemon-scheduler.js.map +1 -1
- package/dist/daemon/daemon-state-store.service.d.ts +5 -39
- package/dist/daemon/daemon-state-store.service.d.ts.map +1 -1
- package/dist/daemon/daemon-state-store.service.js +30 -17
- package/dist/daemon/daemon-state-store.service.js.map +1 -1
- package/dist/daemon/daemon.d.ts +50 -79
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +769 -442
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts +13 -11
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +139 -106
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +11 -19
- package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
- package/dist/daemon/daemon.rpc-service.js +89 -28
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/daemon/darwin-owner-evidence.d.ts +57 -0
- package/dist/daemon/darwin-owner-evidence.d.ts.map +1 -0
- package/dist/daemon/darwin-owner-evidence.js +131 -0
- package/dist/daemon/darwin-owner-evidence.js.map +1 -0
- package/dist/daemon/database-startup.d.ts +7 -0
- package/dist/daemon/database-startup.d.ts.map +1 -0
- package/dist/daemon/database-startup.js +40 -0
- package/dist/daemon/database-startup.js.map +1 -0
- package/dist/daemon/entry-guard.d.ts +2 -0
- package/dist/daemon/entry-guard.d.ts.map +1 -0
- package/dist/daemon/entry-guard.js +34 -0
- package/dist/daemon/entry-guard.js.map +1 -0
- package/dist/daemon/execution-capabilities.d.ts +7 -0
- package/dist/daemon/execution-capabilities.d.ts.map +1 -0
- package/dist/daemon/execution-capabilities.js +23 -0
- package/dist/daemon/execution-capabilities.js.map +1 -0
- package/dist/daemon/execution-client.d.ts +88 -0
- package/dist/daemon/execution-client.d.ts.map +1 -0
- package/dist/daemon/execution-client.js +433 -0
- package/dist/daemon/execution-client.js.map +1 -0
- package/dist/daemon/execution-config.d.ts +7 -0
- package/dist/daemon/execution-config.d.ts.map +1 -0
- package/dist/daemon/execution-config.js +61 -0
- package/dist/daemon/execution-config.js.map +1 -0
- package/dist/daemon/execution-entry.d.ts +2 -0
- package/dist/daemon/execution-entry.d.ts.map +1 -0
- package/dist/daemon/execution-entry.js +3 -0
- package/dist/daemon/execution-entry.js.map +1 -0
- package/dist/daemon/execution-host.d.ts +133 -0
- package/dist/daemon/execution-host.d.ts.map +1 -0
- package/dist/daemon/execution-host.js +308 -0
- package/dist/daemon/execution-host.js.map +1 -0
- package/dist/daemon/execution-journal.d.ts +17 -0
- package/dist/daemon/execution-journal.d.ts.map +1 -0
- package/dist/daemon/execution-journal.js +75 -0
- package/dist/daemon/execution-journal.js.map +1 -0
- package/dist/daemon/execution-launcher.d.ts +12 -0
- package/dist/daemon/execution-launcher.d.ts.map +1 -0
- package/dist/daemon/execution-launcher.js +110 -0
- package/dist/daemon/execution-launcher.js.map +1 -0
- package/dist/daemon/execution-main.d.ts +2 -0
- package/dist/daemon/execution-main.d.ts.map +1 -0
- package/dist/daemon/execution-main.js +48 -0
- package/dist/daemon/execution-main.js.map +1 -0
- package/dist/daemon/execution-owner.d.ts +16 -0
- package/dist/daemon/execution-owner.d.ts.map +1 -0
- package/dist/daemon/execution-owner.js +97 -0
- package/dist/daemon/execution-owner.js.map +1 -0
- package/dist/daemon/execution-platform.d.ts +3 -0
- package/dist/daemon/execution-platform.d.ts.map +1 -0
- package/dist/daemon/execution-platform.js +23 -0
- package/dist/daemon/execution-platform.js.map +1 -0
- package/dist/daemon/execution-shutdown.d.ts +13 -0
- package/dist/daemon/execution-shutdown.d.ts.map +1 -0
- package/dist/daemon/execution-shutdown.js +30 -0
- package/dist/daemon/execution-shutdown.js.map +1 -0
- package/dist/daemon/managed-entry.d.ts +2 -0
- package/dist/daemon/managed-entry.d.ts.map +1 -0
- package/dist/daemon/managed-entry.js +3 -0
- package/dist/daemon/managed-entry.js.map +1 -0
- package/dist/daemon/managed-main.d.ts +2 -0
- package/dist/daemon/managed-main.d.ts.map +1 -0
- package/dist/daemon/managed-main.js +29 -0
- package/dist/daemon/managed-main.js.map +1 -0
- package/dist/daemon/managed-owner-build.d.ts +17 -0
- package/dist/daemon/managed-owner-build.d.ts.map +1 -0
- package/dist/daemon/managed-owner-build.js +108 -0
- package/dist/daemon/managed-owner-build.js.map +1 -0
- package/dist/daemon/managed-owner-entry.d.ts +2 -0
- package/dist/daemon/managed-owner-entry.d.ts.map +1 -0
- package/dist/daemon/managed-owner-entry.js +3 -0
- package/dist/daemon/managed-owner-entry.js.map +1 -0
- package/dist/daemon/managed-owner-main.d.ts +2 -0
- package/dist/daemon/managed-owner-main.d.ts.map +1 -0
- package/dist/daemon/managed-owner-main.js +53 -0
- package/dist/daemon/managed-owner-main.js.map +1 -0
- package/dist/daemon/managed-runtime.d.ts +39 -0
- package/dist/daemon/managed-runtime.d.ts.map +1 -0
- package/dist/daemon/managed-runtime.js +137 -0
- package/dist/daemon/managed-runtime.js.map +1 -0
- package/dist/daemon/network-publication.d.ts +5 -0
- package/dist/daemon/network-publication.d.ts.map +1 -0
- package/dist/daemon/network-publication.js +25 -0
- package/dist/daemon/network-publication.js.map +1 -0
- package/dist/daemon/owner-reconciliation.d.ts +58 -0
- package/dist/daemon/owner-reconciliation.d.ts.map +1 -0
- package/dist/daemon/owner-reconciliation.js +265 -0
- package/dist/daemon/owner-reconciliation.js.map +1 -0
- package/dist/daemon/pid-manager.d.ts +2 -0
- package/dist/daemon/pid-manager.d.ts.map +1 -1
- package/dist/daemon/pid-manager.js +5 -0
- package/dist/daemon/pid-manager.js.map +1 -1
- package/dist/daemon/private-control-client.d.ts +8 -0
- package/dist/daemon/private-control-client.d.ts.map +1 -0
- package/dist/daemon/private-control-client.js +41 -0
- package/dist/daemon/private-control-client.js.map +1 -0
- package/dist/daemon/recovery-state.d.ts +20 -0
- package/dist/daemon/recovery-state.d.ts.map +1 -0
- package/dist/daemon/recovery-state.js +53 -0
- package/dist/daemon/recovery-state.js.map +1 -0
- package/dist/daemon/rpc-connection.d.ts +29 -0
- package/dist/daemon/rpc-connection.d.ts.map +1 -0
- package/dist/daemon/rpc-connection.js +137 -0
- package/dist/daemon/rpc-connection.js.map +1 -0
- package/dist/daemon/runtime-installation.d.ts +58 -0
- package/dist/daemon/runtime-installation.d.ts.map +1 -0
- package/dist/daemon/runtime-installation.js +346 -0
- package/dist/daemon/runtime-installation.js.map +1 -0
- package/dist/daemon/runtime-launcher.d.ts +6 -0
- package/dist/daemon/runtime-launcher.d.ts.map +1 -0
- package/dist/daemon/runtime-launcher.js +45 -0
- package/dist/daemon/runtime-launcher.js.map +1 -0
- package/dist/daemon/schema-transition.d.ts +43 -0
- package/dist/daemon/schema-transition.d.ts.map +1 -0
- package/dist/daemon/schema-transition.js +239 -0
- package/dist/daemon/schema-transition.js.map +1 -0
- package/dist/daemon/spawn-daemon.d.ts +2 -0
- package/dist/daemon/spawn-daemon.d.ts.map +1 -1
- package/dist/daemon/spawn-daemon.js +4 -0
- package/dist/daemon/spawn-daemon.js.map +1 -1
- package/dist/daemon/startup-config.d.ts +77 -0
- package/dist/daemon/startup-config.d.ts.map +1 -0
- package/dist/daemon/startup-config.js +31 -0
- package/dist/daemon/startup-config.js.map +1 -0
- package/dist/daemon/startup-failure-journal.d.ts +3 -0
- package/dist/daemon/startup-failure-journal.d.ts.map +1 -0
- package/dist/daemon/startup-failure-journal.js +29 -0
- package/dist/daemon/startup-failure-journal.js.map +1 -0
- package/dist/daemon/state-store.d.ts +16 -24
- package/dist/daemon/state-store.d.ts.map +1 -1
- package/dist/daemon/state-store.js +51 -9
- package/dist/daemon/state-store.js.map +1 -1
- package/dist/daemon/supervisor-transition.d.ts +101 -0
- package/dist/daemon/supervisor-transition.d.ts.map +1 -0
- package/dist/daemon/supervisor-transition.js +503 -0
- package/dist/daemon/supervisor-transition.js.map +1 -0
- package/dist/daemon/system-guardian-cgroup.d.ts +16 -0
- package/dist/daemon/system-guardian-cgroup.d.ts.map +1 -0
- package/dist/daemon/system-guardian-cgroup.js +202 -0
- package/dist/daemon/system-guardian-cgroup.js.map +1 -0
- package/dist/daemon/system-guardian-unit.d.ts +9 -0
- package/dist/daemon/system-guardian-unit.d.ts.map +1 -0
- package/dist/daemon/system-guardian-unit.js +41 -0
- package/dist/daemon/system-guardian-unit.js.map +1 -0
- package/dist/database/connection.d.ts.map +1 -1
- package/dist/database/connection.js +2 -6
- package/dist/database/connection.js.map +1 -1
- package/dist/database/log-durability.d.ts +5 -0
- package/dist/database/log-durability.d.ts.map +1 -0
- package/dist/database/log-durability.js +28 -0
- package/dist/database/log-durability.js.map +1 -0
- package/dist/database/migrate.js +2 -15
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/migration-registry-compatibility.d.ts +13 -0
- package/dist/database/migration-registry-compatibility.d.ts.map +1 -0
- package/dist/database/migration-registry-compatibility.js +108 -0
- package/dist/database/migration-registry-compatibility.js.map +1 -0
- package/dist/database/migration-runner.d.ts +8 -42
- package/dist/database/migration-runner.d.ts.map +1 -1
- package/dist/database/migration-runner.js +114 -123
- package/dist/database/migration-runner.js.map +1 -1
- package/dist/database/migrations/014_replication_receipts.d.ts +5 -0
- package/dist/database/migrations/014_replication_receipts.d.ts.map +1 -0
- package/dist/database/migrations/014_replication_receipts.js +6 -0
- package/dist/database/migrations/014_replication_receipts.js.map +1 -0
- package/dist/database/migrations/015_persistent_metrics.d.ts +5 -0
- package/dist/database/migrations/015_persistent_metrics.d.ts.map +1 -0
- package/dist/database/migrations/015_persistent_metrics.js +7 -0
- package/dist/database/migrations/015_persistent_metrics.js.map +1 -0
- package/dist/database/migrations/016_cluster_lease.d.ts +4 -0
- package/dist/database/migrations/016_cluster_lease.d.ts.map +1 -0
- package/dist/database/migrations/016_cluster_lease.js +6 -0
- package/dist/database/migrations/016_cluster_lease.js.map +1 -0
- package/dist/database/migrations/index.d.ts +1 -1
- package/dist/database/migrations/index.d.ts.map +1 -1
- package/dist/database/migrations/index.js +22 -13
- package/dist/database/migrations/index.js.map +1 -1
- package/dist/database/schema-compatibility.d.ts +34 -0
- package/dist/database/schema-compatibility.d.ts.map +1 -0
- package/dist/database/schema-compatibility.js +109 -0
- package/dist/database/schema-compatibility.js.map +1 -0
- package/dist/database/schema-expansion-policy.d.ts +10 -0
- package/dist/database/schema-expansion-policy.d.ts.map +1 -0
- package/dist/database/schema-expansion-policy.js +21 -0
- package/dist/database/schema-expansion-policy.js.map +1 -0
- package/dist/database/schema-transition-plan.d.ts +53 -0
- package/dist/database/schema-transition-plan.d.ts.map +1 -0
- package/dist/database/schema-transition-plan.js +102 -0
- package/dist/database/schema-transition-plan.js.map +1 -0
- package/dist/database/schema-worker.d.ts +2 -0
- package/dist/database/schema-worker.d.ts.map +1 -0
- package/dist/database/schema-worker.js +55 -0
- package/dist/database/schema-worker.js.map +1 -0
- package/dist/database/schema.d.ts +6 -1
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/slave-migrations/001_replication_evidence.d.ts +4 -0
- package/dist/database/slave-migrations/001_replication_evidence.d.ts.map +1 -0
- package/dist/database/slave-migrations/001_replication_evidence.js +89 -0
- package/dist/database/slave-migrations/001_replication_evidence.js.map +1 -0
- package/dist/database/slave-migrations/index.d.ts +6 -0
- package/dist/database/slave-migrations/index.d.ts.map +1 -0
- package/dist/database/slave-migrations/index.js +10 -0
- package/dist/database/slave-migrations/index.js.map +1 -0
- package/dist/diagnostics/index.d.ts +16 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +22 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/execution/command-failure.d.ts +7 -0
- package/dist/execution/command-failure.d.ts.map +1 -0
- package/dist/execution/command-failure.js +29 -0
- package/dist/execution/command-failure.js.map +1 -0
- package/dist/execution/data-channel.d.ts +1 -1
- package/dist/execution/data-channel.js +1 -1
- package/dist/execution/execution.service.d.ts +16 -4
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +133 -74
- package/dist/execution/execution.service.js.map +1 -1
- package/dist/files/archive-codec.d.ts +57 -0
- package/dist/files/archive-codec.d.ts.map +1 -0
- package/dist/files/archive-codec.js +454 -0
- package/dist/files/archive-codec.js.map +1 -0
- package/dist/files/archive-node.d.ts +27 -0
- package/dist/files/archive-node.d.ts.map +1 -0
- package/dist/files/archive-node.js +379 -0
- package/dist/files/archive-node.js.map +1 -0
- package/dist/files/archive-publication.d.ts +26 -0
- package/dist/files/archive-publication.d.ts.map +1 -0
- package/dist/files/archive-publication.js +224 -0
- package/dist/files/archive-publication.js.map +1 -0
- package/dist/files/file-config.d.ts +7 -0
- package/dist/files/file-config.d.ts.map +1 -0
- package/dist/files/file-config.js +11 -0
- package/dist/files/file-config.js.map +1 -0
- package/dist/files/file-node.d.ts +65 -0
- package/dist/files/file-node.d.ts.map +1 -0
- package/dist/files/file-node.js +863 -0
- package/dist/files/file-node.js.map +1 -0
- package/dist/files/file-node.rpc-service.d.ts +12 -0
- package/dist/files/file-node.rpc-service.d.ts.map +1 -0
- package/dist/files/file-node.rpc-service.js +42 -0
- package/dist/files/file-node.rpc-service.js.map +1 -0
- package/dist/files/files.rpc-service.d.ts +107 -0
- package/dist/files/files.rpc-service.d.ts.map +1 -0
- package/dist/files/files.rpc-service.js +769 -0
- package/dist/files/files.rpc-service.js.map +1 -0
- package/dist/files/structural-policy.d.ts +3 -0
- package/dist/files/structural-policy.d.ts.map +1 -0
- package/dist/files/structural-policy.js +27 -0
- package/dist/files/structural-policy.js.map +1 -0
- package/dist/health/contracts.d.ts +30 -0
- package/dist/health/contracts.d.ts.map +1 -0
- package/dist/health/contracts.js +58 -0
- package/dist/health/contracts.js.map +1 -0
- package/dist/health/heartbeat.d.ts +11 -0
- package/dist/health/heartbeat.d.ts.map +1 -0
- package/dist/health/heartbeat.js +32 -0
- package/dist/health/heartbeat.js.map +1 -0
- package/dist/health/index.d.ts +4 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +2 -0
- package/dist/health/index.js.map +1 -0
- package/dist/health/readiness.d.ts +15 -0
- package/dist/health/readiness.d.ts.map +1 -0
- package/dist/health/readiness.js +170 -0
- package/dist/health/readiness.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/infrastructure/apt-packages.d.ts +34 -0
- package/dist/infrastructure/apt-packages.d.ts.map +1 -0
- package/dist/infrastructure/apt-packages.js +232 -0
- package/dist/infrastructure/apt-packages.js.map +1 -0
- package/dist/infrastructure/bare-metal-plan.d.ts +10 -1
- package/dist/infrastructure/bare-metal-plan.d.ts.map +1 -1
- package/dist/infrastructure/bare-metal-plan.js +22 -1
- package/dist/infrastructure/bare-metal-plan.js.map +1 -1
- package/dist/infrastructure/bare-metal-runner.d.ts.map +1 -1
- package/dist/infrastructure/bare-metal-runner.js +13 -2
- package/dist/infrastructure/bare-metal-runner.js.map +1 -1
- package/dist/infrastructure/config-normalizer.d.ts +4 -3
- package/dist/infrastructure/config-normalizer.d.ts.map +1 -1
- package/dist/infrastructure/config-normalizer.js +11 -3
- package/dist/infrastructure/config-normalizer.js.map +1 -1
- package/dist/infrastructure/config-payload.d.ts +4 -4
- package/dist/infrastructure/config-payload.js +4 -4
- package/dist/infrastructure/container-runtime.d.ts +39 -13
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +276 -84
- package/dist/infrastructure/container-runtime.js.map +1 -1
- package/dist/infrastructure/gateway-redis-db.d.ts +2 -2
- package/dist/infrastructure/gateway-redis-db.js +2 -2
- package/dist/infrastructure/health-recovery.d.ts +19 -0
- package/dist/infrastructure/health-recovery.d.ts.map +1 -0
- package/dist/infrastructure/health-recovery.js +39 -0
- package/dist/infrastructure/health-recovery.js.map +1 -0
- package/dist/infrastructure/host-ingress-config.d.ts +12 -0
- package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-config.js +200 -0
- package/dist/infrastructure/host-ingress-config.js.map +1 -0
- package/dist/infrastructure/host-ingress-lock.d.ts +3 -0
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-lock.js +2 -0
- package/dist/infrastructure/host-ingress-lock.js.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.js +114 -0
- package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.js +142 -0
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
- package/dist/infrastructure/host-ingress-types.d.ts +175 -0
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-types.js +2 -0
- package/dist/infrastructure/host-ingress-types.js.map +1 -0
- package/dist/infrastructure/host-ingress.service.d.ts +47 -0
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress.service.js +514 -0
- package/dist/infrastructure/host-ingress.service.js.map +1 -0
- package/dist/infrastructure/host-inspection.d.ts +1 -0
- package/dist/infrastructure/host-inspection.d.ts.map +1 -1
- package/dist/infrastructure/host-inspection.js +3 -2
- package/dist/infrastructure/host-inspection.js.map +1 -1
- package/dist/infrastructure/infrastructure.service.d.ts +101 -34
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +631 -205
- package/dist/infrastructure/infrastructure.service.js.map +1 -1
- package/dist/infrastructure/merge-config.d.ts +10 -0
- package/dist/infrastructure/merge-config.d.ts.map +1 -0
- package/dist/infrastructure/merge-config.js +27 -0
- package/dist/infrastructure/merge-config.js.map +1 -0
- package/dist/infrastructure/orphan-containers.d.ts +8 -7
- package/dist/infrastructure/orphan-containers.d.ts.map +1 -1
- package/dist/infrastructure/orphan-containers.js +7 -7
- package/dist/infrastructure/orphan-containers.js.map +1 -1
- package/dist/infrastructure/owned-container.d.ts +4 -0
- package/dist/infrastructure/owned-container.d.ts.map +1 -0
- package/dist/infrastructure/owned-container.js +13 -0
- package/dist/infrastructure/owned-container.js.map +1 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts +4 -1
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts.map +1 -1
- package/dist/infrastructure/phantom-endpoint-janitor.js +11 -2
- package/dist/infrastructure/phantom-endpoint-janitor.js.map +1 -1
- package/dist/infrastructure/presets/minio.d.ts.map +1 -1
- package/dist/infrastructure/presets/minio.js +15 -25
- package/dist/infrastructure/presets/minio.js.map +1 -1
- package/dist/infrastructure/presets/postgres.d.ts.map +1 -1
- package/dist/infrastructure/presets/postgres.js +35 -31
- package/dist/infrastructure/presets/postgres.js.map +1 -1
- package/dist/infrastructure/presets/tor.d.ts +1 -2
- package/dist/infrastructure/presets/tor.d.ts.map +1 -1
- package/dist/infrastructure/presets/tor.js +7 -13
- package/dist/infrastructure/presets/tor.js.map +1 -1
- package/dist/infrastructure/provisioning-outcome.d.ts +8 -1
- package/dist/infrastructure/provisioning-outcome.d.ts.map +1 -1
- package/dist/infrastructure/provisioning-outcome.js +42 -9
- package/dist/infrastructure/provisioning-outcome.js.map +1 -1
- package/dist/infrastructure/service-binding.js +1 -1
- package/dist/infrastructure/service-resolver.d.ts +11 -5
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +109 -54
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/shipped-config.js +4 -4
- package/dist/infrastructure/stack-infra-manager.d.ts +35 -5
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +227 -57
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +68 -9
- package/dist/infrastructure/types.d.ts.map +1 -1
- package/dist/mcp/mcp-bridge.js +1 -1
- package/dist/mcp/mcp-bridge.js.map +1 -1
- package/dist/mcp/monitoring-reading.d.ts +18 -0
- package/dist/mcp/monitoring-reading.d.ts.map +1 -0
- package/dist/mcp/monitoring-reading.js +84 -0
- package/dist/mcp/monitoring-reading.js.map +1 -0
- package/dist/mcp/tool-groups/apps.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/apps.tools.js +6 -4
- package/dist/mcp/tool-groups/apps.tools.js.map +1 -1
- package/dist/mcp/tool-groups/management.tools.d.ts +2 -0
- package/dist/mcp/tool-groups/management.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/management.tools.js +17 -38
- package/dist/mcp/tool-groups/management.tools.js.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.js +45 -2
- package/dist/mcp/tool-groups/monitoring.tools.js.map +1 -1
- package/dist/mcp/unavailable-tools.js +2 -2
- package/dist/mcp/unavailable-tools.js.map +1 -1
- package/dist/migration/configuration.d.ts +8 -0
- package/dist/migration/configuration.d.ts.map +1 -0
- package/dist/migration/configuration.js +16 -0
- package/dist/migration/configuration.js.map +1 -0
- package/dist/migration/index.d.ts +25 -0
- package/dist/migration/index.d.ts.map +1 -0
- package/dist/migration/index.js +27 -0
- package/dist/migration/index.js.map +1 -0
- package/dist/migration/operation.d.ts +31 -0
- package/dist/migration/operation.d.ts.map +1 -0
- package/dist/migration/operation.js +67 -0
- package/dist/migration/operation.js.map +1 -0
- package/dist/migration/workspace.d.ts +28 -0
- package/dist/migration/workspace.d.ts.map +1 -0
- package/dist/migration/workspace.js +91 -0
- package/dist/migration/workspace.js.map +1 -0
- package/dist/monitoring/app-health.indicator.d.ts +1 -1
- package/dist/monitoring/app-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/docker-health.indicator.d.ts +4 -2
- package/dist/monitoring/docker-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/docker-health.indicator.js +66 -5
- package/dist/monitoring/docker-health.indicator.js.map +1 -1
- package/dist/monitoring/event-loop-watch.d.ts.map +1 -1
- package/dist/monitoring/event-loop-watch.js.map +1 -1
- package/dist/monitoring/infrastructure-health.d.ts +15 -0
- package/dist/monitoring/infrastructure-health.d.ts.map +1 -0
- package/dist/monitoring/infrastructure-health.js +2 -0
- package/dist/monitoring/infrastructure-health.js.map +1 -0
- package/dist/monitoring/log-entry.d.ts +7 -0
- package/dist/monitoring/log-entry.d.ts.map +1 -0
- package/dist/monitoring/log-entry.js +16 -0
- package/dist/monitoring/log-entry.js.map +1 -0
- package/dist/monitoring/log-journal.d.ts +40 -0
- package/dist/monitoring/log-journal.d.ts.map +1 -0
- package/dist/monitoring/log-journal.js +158 -0
- package/dist/monitoring/log-journal.js.map +1 -0
- package/dist/monitoring/log-line.d.ts +22 -17
- package/dist/monitoring/log-line.d.ts.map +1 -1
- package/dist/monitoring/log-line.js +73 -62
- package/dist/monitoring/log-line.js.map +1 -1
- package/dist/monitoring/log-manager.d.ts +37 -40
- package/dist/monitoring/log-manager.d.ts.map +1 -1
- package/dist/monitoring/log-manager.js +167 -66
- package/dist/monitoring/log-manager.js.map +1 -1
- package/dist/monitoring/log-sink-health.indicator.d.ts +10 -0
- package/dist/monitoring/log-sink-health.indicator.d.ts.map +1 -0
- package/dist/monitoring/log-sink-health.indicator.js +21 -0
- package/dist/monitoring/log-sink-health.indicator.js.map +1 -0
- package/dist/monitoring/metrics-storage.indicator.d.ts +9 -0
- package/dist/monitoring/metrics-storage.indicator.d.ts.map +1 -0
- package/dist/monitoring/metrics-storage.indicator.js +18 -0
- package/dist/monitoring/metrics-storage.indicator.js.map +1 -0
- package/dist/monitoring/process-lifetime.d.ts +11 -0
- package/dist/monitoring/process-lifetime.d.ts.map +1 -0
- package/dist/monitoring/process-lifetime.js +45 -0
- package/dist/monitoring/process-lifetime.js.map +1 -0
- package/dist/monitoring/runtime-diagnostics.d.ts +47 -0
- package/dist/monitoring/runtime-diagnostics.d.ts.map +1 -0
- package/dist/monitoring/runtime-diagnostics.js +88 -0
- package/dist/monitoring/runtime-diagnostics.js.map +1 -0
- package/dist/observability/metrics-bridge.d.ts +5 -1
- package/dist/observability/metrics-bridge.d.ts.map +1 -1
- package/dist/observability/metrics-bridge.js +11 -0
- package/dist/observability/metrics-bridge.js.map +1 -1
- package/dist/operations.d.ts +17 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +13 -0
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +27 -9
- package/dist/orchestrator/app-handle.d.ts.map +1 -1
- package/dist/orchestrator/app-handle.js +42 -11
- package/dist/orchestrator/app-handle.js.map +1 -1
- package/dist/orchestrator/application-runtime-child.d.ts +2 -0
- package/dist/orchestrator/application-runtime-child.d.ts.map +1 -0
- package/dist/orchestrator/application-runtime-child.js +15 -0
- package/dist/orchestrator/application-runtime-child.js.map +1 -0
- package/dist/orchestrator/application-runtime-resolution.d.ts +4 -0
- package/dist/orchestrator/application-runtime-resolution.d.ts.map +1 -0
- package/dist/orchestrator/application-runtime-resolution.js +62 -0
- package/dist/orchestrator/application-runtime-resolution.js.map +1 -0
- package/dist/orchestrator/application-runtime.d.ts +3 -0
- package/dist/orchestrator/application-runtime.d.ts.map +1 -0
- package/dist/orchestrator/application-runtime.js +20 -0
- package/dist/orchestrator/application-runtime.js.map +1 -0
- package/dist/orchestrator/application-topology.d.ts +20 -0
- package/dist/orchestrator/application-topology.d.ts.map +1 -0
- package/dist/orchestrator/application-topology.js +90 -0
- package/dist/orchestrator/application-topology.js.map +1 -0
- package/dist/orchestrator/bootstrap-loader-child.d.ts +1 -1
- package/dist/orchestrator/bootstrap-loader-child.js +7 -16
- package/dist/orchestrator/bootstrap-loader-child.js.map +1 -1
- package/dist/orchestrator/bootstrap-loader.d.ts +10 -20
- package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-loader.js +24 -207
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +6 -6
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +40 -40
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +8 -14
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +144 -158
- package/dist/orchestrator/build-service.js.map +1 -1
- package/dist/orchestrator/call-exposed-service.d.ts +8 -0
- package/dist/orchestrator/call-exposed-service.d.ts.map +1 -1
- package/dist/orchestrator/call-exposed-service.js +1 -1
- package/dist/orchestrator/classic-launcher.d.ts +3 -2
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +32 -23
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/dependency-resolver.d.ts.map +1 -1
- package/dist/orchestrator/dependency-resolver.js +7 -38
- package/dist/orchestrator/dependency-resolver.js.map +1 -1
- package/dist/orchestrator/execution-contract.d.ts +67 -0
- package/dist/orchestrator/execution-contract.d.ts.map +1 -0
- package/dist/orchestrator/execution-contract.js +2 -0
- package/dist/orchestrator/execution-contract.js.map +1 -0
- package/dist/orchestrator/file-watcher.d.ts +2 -1
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +23 -5
- package/dist/orchestrator/file-watcher.js.map +1 -1
- package/dist/orchestrator/http-routes.d.ts +4 -0
- package/dist/orchestrator/http-routes.d.ts.map +1 -0
- package/dist/orchestrator/http-routes.js +19 -0
- package/dist/orchestrator/http-routes.js.map +1 -0
- package/dist/orchestrator/installed-execution.d.ts +7 -0
- package/dist/orchestrator/installed-execution.d.ts.map +1 -0
- package/dist/orchestrator/installed-execution.js +25 -0
- package/dist/orchestrator/installed-execution.js.map +1 -0
- package/dist/orchestrator/module-worker-process.d.ts.map +1 -1
- package/dist/orchestrator/module-worker-process.js +2 -1
- package/dist/orchestrator/module-worker-process.js.map +1 -1
- package/dist/orchestrator/orchestrator.service.d.ts +105 -80
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +1084 -571
- package/dist/orchestrator/orchestrator.service.js.map +1 -1
- package/dist/orchestrator/process-janitor.d.ts +3 -0
- package/dist/orchestrator/process-janitor.d.ts.map +1 -1
- package/dist/orchestrator/process-janitor.js +5 -1
- package/dist/orchestrator/process-janitor.js.map +1 -1
- package/dist/orchestrator/runtime-package-resolution.d.ts +8 -0
- package/dist/orchestrator/runtime-package-resolution.d.ts.map +1 -0
- package/dist/orchestrator/runtime-package-resolution.js +56 -0
- package/dist/orchestrator/runtime-package-resolution.js.map +1 -0
- package/dist/orchestrator/service-router.d.ts +4 -108
- package/dist/orchestrator/service-router.d.ts.map +1 -1
- package/dist/orchestrator/service-router.js +51 -237
- package/dist/orchestrator/service-router.js.map +1 -1
- package/dist/orchestrator/topology-query.d.ts +1 -1
- package/dist/orchestrator/topology-query.js +1 -1
- package/dist/orchestrator/ts-compiler.d.ts.map +1 -1
- package/dist/orchestrator/ts-compiler.js +9 -17
- package/dist/orchestrator/ts-compiler.js.map +1 -1
- package/dist/project/artifact-builder.d.ts +17 -7
- package/dist/project/artifact-builder.d.ts.map +1 -1
- package/dist/project/artifact-builder.js +91 -58
- package/dist/project/artifact-builder.js.map +1 -1
- package/dist/project/bootstrap-metadata.d.ts +42 -0
- package/dist/project/bootstrap-metadata.d.ts.map +1 -0
- package/dist/project/bootstrap-metadata.js +76 -0
- package/dist/project/bootstrap-metadata.js.map +1 -0
- package/dist/project/build-decision.d.ts +1 -1
- package/dist/project/build-decision.js +1 -1
- package/dist/project/config-resolver.js +4 -4
- package/dist/project/config-resolver.js.map +1 -1
- package/dist/project/configuration-catalog.d.ts +8 -0
- package/dist/project/configuration-catalog.d.ts.map +1 -0
- package/dist/project/configuration-catalog.js +29 -0
- package/dist/project/configuration-catalog.js.map +1 -0
- package/dist/project/declared-config.d.ts +4 -2
- package/dist/project/declared-config.d.ts.map +1 -1
- package/dist/project/declared-config.js +10 -7
- package/dist/project/declared-config.js.map +1 -1
- package/dist/project/dependency-topology.d.ts +10 -0
- package/dist/project/dependency-topology.d.ts.map +1 -0
- package/dist/project/dependency-topology.js +55 -0
- package/dist/project/dependency-topology.js.map +1 -0
- package/dist/project/deploy-phases.d.ts +1 -1
- package/dist/project/deploy-phases.js +1 -1
- package/dist/project/exec-in-group.d.ts +1 -1
- package/dist/project/exec-in-group.js +1 -1
- package/dist/project/infrastructure-ownership.d.ts +5 -0
- package/dist/project/infrastructure-ownership.d.ts.map +1 -0
- package/dist/project/infrastructure-ownership.js +26 -0
- package/dist/project/infrastructure-ownership.js.map +1 -0
- package/dist/project/installed-stack-resume.d.ts +62 -0
- package/dist/project/installed-stack-resume.d.ts.map +1 -0
- package/dist/project/installed-stack-resume.js +261 -0
- package/dist/project/installed-stack-resume.js.map +1 -0
- package/dist/project/launch-failure.d.ts +3 -0
- package/dist/project/launch-failure.d.ts.map +1 -0
- package/dist/project/launch-failure.js +32 -0
- package/dist/project/launch-failure.js.map +1 -0
- package/dist/project/local-release-selection.d.ts +18 -0
- package/dist/project/local-release-selection.d.ts.map +1 -0
- package/dist/project/local-release-selection.js +36 -0
- package/dist/project/local-release-selection.js.map +1 -0
- package/dist/project/node-app-config.d.ts +10 -3
- package/dist/project/node-app-config.d.ts.map +1 -1
- package/dist/project/node-app-config.js +22 -30
- package/dist/project/node-app-config.js.map +1 -1
- package/dist/project/node-app-health.d.ts +1 -1
- package/dist/project/node-app-health.js +1 -1
- package/dist/project/node-stack-stop.d.ts +83 -0
- package/dist/project/node-stack-stop.d.ts.map +1 -0
- package/dist/project/node-stack-stop.js +219 -0
- package/dist/project/node-stack-stop.js.map +1 -0
- package/dist/project/operator-account.d.ts +9 -3
- package/dist/project/operator-account.d.ts.map +1 -1
- package/dist/project/operator-account.js +9 -9
- package/dist/project/operator-account.js.map +1 -1
- package/dist/project/public-stack.d.ts +4 -0
- package/dist/project/public-stack.d.ts.map +1 -0
- package/dist/project/public-stack.js +29 -0
- package/dist/project/public-stack.js.map +1 -0
- package/dist/project/registry.d.ts +18 -27
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +248 -77
- package/dist/project/registry.js.map +1 -1
- package/dist/project/requirements-scanner.d.ts +4 -8
- package/dist/project/requirements-scanner.d.ts.map +1 -1
- package/dist/project/requirements-scanner.js +39 -146
- package/dist/project/requirements-scanner.js.map +1 -1
- package/dist/project/stack-diagnosis.d.ts +18 -0
- package/dist/project/stack-diagnosis.d.ts.map +1 -0
- package/dist/project/stack-diagnosis.js +94 -0
- package/dist/project/stack-diagnosis.js.map +1 -0
- package/dist/project/stack-env.d.ts +1 -1
- package/dist/project/stack-env.js +1 -1
- package/dist/project/stack-health.d.ts +12 -0
- package/dist/project/stack-health.d.ts.map +1 -0
- package/dist/project/stack-health.js +27 -0
- package/dist/project/stack-health.js.map +1 -0
- package/dist/project/stack-observation.d.ts +8 -0
- package/dist/project/stack-observation.d.ts.map +1 -0
- package/dist/project/stack-observation.js +126 -0
- package/dist/project/stack-observation.js.map +1 -0
- package/dist/project/stack-placement.d.ts +11 -0
- package/dist/project/stack-placement.d.ts.map +1 -0
- package/dist/project/stack-placement.js +57 -0
- package/dist/project/stack-placement.js.map +1 -0
- package/dist/project/stack-stop-review.d.ts +14 -0
- package/dist/project/stack-stop-review.d.ts.map +1 -0
- package/dist/project/stack-stop-review.js +22 -0
- package/dist/project/stack-stop-review.js.map +1 -0
- package/dist/project/stack-targets.d.ts +24 -0
- package/dist/project/stack-targets.d.ts.map +1 -0
- package/dist/project/stack-targets.js +67 -0
- package/dist/project/stack-targets.js.map +1 -0
- package/dist/project/stand-containers.d.ts +9 -2
- package/dist/project/stand-containers.d.ts.map +1 -1
- package/dist/project/stand-containers.js +17 -17
- package/dist/project/stand-containers.js.map +1 -1
- package/dist/project/topology-control.d.ts +41 -0
- package/dist/project/topology-control.d.ts.map +1 -0
- package/dist/project/topology-control.js +133 -0
- package/dist/project/topology-control.js.map +1 -0
- package/dist/project/topology-plan.d.ts +11 -0
- package/dist/project/topology-plan.d.ts.map +1 -0
- package/dist/project/topology-plan.js +154 -0
- package/dist/project/topology-plan.js.map +1 -0
- package/dist/project/topology-services.d.ts +7 -0
- package/dist/project/topology-services.d.ts.map +1 -0
- package/dist/project/topology-services.js +36 -0
- package/dist/project/topology-services.js.map +1 -0
- package/dist/project/topology-state.d.ts +27 -0
- package/dist/project/topology-state.d.ts.map +1 -0
- package/dist/project/topology-state.js +71 -0
- package/dist/project/topology-state.js.map +1 -0
- package/dist/project/workspace-kind.d.ts +3 -0
- package/dist/project/workspace-kind.d.ts.map +1 -0
- package/dist/project/workspace-kind.js +13 -0
- package/dist/project/workspace-kind.js.map +1 -0
- package/dist/readiness.d.ts +4 -0
- package/dist/readiness.d.ts.map +1 -0
- package/dist/readiness.js +3 -0
- package/dist/readiness.js.map +1 -0
- package/dist/release/application-closure.d.ts +4 -0
- package/dist/release/application-closure.d.ts.map +1 -0
- package/dist/release/application-closure.js +61 -0
- package/dist/release/application-closure.js.map +1 -0
- package/dist/release/archive.d.ts +3 -0
- package/dist/release/archive.d.ts.map +1 -0
- package/dist/release/archive.js +3 -0
- package/dist/release/archive.js.map +1 -0
- package/dist/release/artifact-inspection.d.ts +50 -0
- package/dist/release/artifact-inspection.d.ts.map +1 -0
- package/dist/release/artifact-inspection.js +169 -0
- package/dist/release/artifact-inspection.js.map +1 -0
- package/dist/release/artifact-store.d.ts +1 -1
- package/dist/release/artifact-store.d.ts.map +1 -1
- package/dist/release/artifact-store.js +1 -1
- package/dist/release/artifact-store.js.map +1 -1
- package/dist/release/artifact-volumes.d.ts +10 -0
- package/dist/release/artifact-volumes.d.ts.map +1 -0
- package/dist/release/artifact-volumes.js +112 -0
- package/dist/release/artifact-volumes.js.map +1 -0
- package/dist/release/attest-on-node.d.ts +3 -2
- package/dist/release/attest-on-node.d.ts.map +1 -1
- package/dist/release/attest-on-node.js +6 -6
- package/dist/release/attest-on-node.js.map +1 -1
- package/dist/release/attest.d.ts +3 -3
- package/dist/release/attest.js +1 -1
- package/dist/release/build-run.d.ts +14 -17
- package/dist/release/build-run.d.ts.map +1 -1
- package/dist/release/build-run.js +264 -77
- package/dist/release/build-run.js.map +1 -1
- package/dist/release/builder.d.ts +9 -3
- package/dist/release/builder.d.ts.map +1 -1
- package/dist/release/builder.js +19 -5
- package/dist/release/builder.js.map +1 -1
- package/dist/release/closure-library-path.d.ts +26 -0
- package/dist/release/closure-library-path.d.ts.map +1 -0
- package/dist/release/closure-library-path.js +160 -0
- package/dist/release/closure-library-path.js.map +1 -0
- package/dist/release/definition-inputs.d.ts +7 -4
- package/dist/release/definition-inputs.d.ts.map +1 -1
- package/dist/release/definition-inputs.js +146 -15
- package/dist/release/definition-inputs.js.map +1 -1
- package/dist/release/framework-source.d.ts +22 -0
- package/dist/release/framework-source.d.ts.map +1 -0
- package/dist/release/framework-source.js +54 -0
- package/dist/release/framework-source.js.map +1 -0
- package/dist/release/frozen-installation.d.ts +23 -0
- package/dist/release/frozen-installation.d.ts.map +1 -0
- package/dist/release/frozen-installation.js +159 -0
- package/dist/release/frozen-installation.js.map +1 -0
- package/dist/release/import-artifacts.d.ts +9 -0
- package/dist/release/import-artifacts.d.ts.map +1 -0
- package/dist/release/import-artifacts.js +60 -0
- package/dist/release/import-artifacts.js.map +1 -0
- package/dist/release/infrastructure.d.ts +6 -0
- package/dist/release/infrastructure.d.ts.map +1 -0
- package/dist/release/infrastructure.js +74 -0
- package/dist/release/infrastructure.js.map +1 -0
- package/dist/release/installed-artifacts.d.ts +12 -0
- package/dist/release/installed-artifacts.d.ts.map +1 -0
- package/dist/release/installed-artifacts.js +199 -0
- package/dist/release/installed-artifacts.js.map +1 -0
- package/dist/release/installed-graph.d.ts +28 -0
- package/dist/release/installed-graph.d.ts.map +1 -0
- package/dist/release/installed-graph.js +138 -0
- package/dist/release/installed-graph.js.map +1 -0
- package/dist/release/installed-origin.d.ts +42 -0
- package/dist/release/installed-origin.d.ts.map +1 -0
- package/dist/release/installed-origin.js +130 -0
- package/dist/release/installed-origin.js.map +1 -0
- package/dist/release/installed-release.d.ts +23 -0
- package/dist/release/installed-release.d.ts.map +1 -0
- package/dist/release/installed-release.js +141 -0
- package/dist/release/installed-release.js.map +1 -0
- package/dist/release/layout.d.ts +29 -34
- package/dist/release/layout.d.ts.map +1 -1
- package/dist/release/layout.js +164 -53
- package/dist/release/layout.js.map +1 -1
- package/dist/release/load.d.ts +3 -0
- package/dist/release/load.d.ts.map +1 -1
- package/dist/release/load.js +50 -8
- package/dist/release/load.js.map +1 -1
- package/dist/release/local-installation.d.ts +20 -0
- package/dist/release/local-installation.d.ts.map +1 -0
- package/dist/release/local-installation.js +298 -0
- package/dist/release/local-installation.js.map +1 -0
- package/dist/release/manifest.d.ts +87 -12
- package/dist/release/manifest.d.ts.map +1 -1
- package/dist/release/manifest.js +31 -7
- package/dist/release/manifest.js.map +1 -1
- package/dist/release/migration-programs.d.ts +12 -0
- package/dist/release/migration-programs.d.ts.map +1 -0
- package/dist/release/migration-programs.js +45 -0
- package/dist/release/migration-programs.js.map +1 -0
- package/dist/release/migrations.d.ts +12 -1
- package/dist/release/migrations.d.ts.map +1 -1
- package/dist/release/migrations.js +124 -9
- package/dist/release/migrations.js.map +1 -1
- package/dist/release/origin.d.ts +33 -0
- package/dist/release/origin.d.ts.map +1 -0
- package/dist/release/origin.js +253 -0
- package/dist/release/origin.js.map +1 -0
- package/dist/release/owner-admission.d.ts +15 -0
- package/dist/release/owner-admission.d.ts.map +1 -0
- package/dist/release/owner-admission.js +37 -0
- package/dist/release/owner-admission.js.map +1 -0
- package/dist/release/owner-executable.d.ts +3 -0
- package/dist/release/owner-executable.d.ts.map +1 -0
- package/dist/release/owner-executable.js +40 -0
- package/dist/release/owner-executable.js.map +1 -0
- package/dist/release/package-gates.d.ts +9 -0
- package/dist/release/package-gates.d.ts.map +1 -0
- package/dist/release/package-gates.js +42 -0
- package/dist/release/package-gates.js.map +1 -0
- package/dist/release/package-resolution.d.ts +4 -0
- package/dist/release/package-resolution.d.ts.map +1 -0
- package/dist/release/package-resolution.js +28 -0
- package/dist/release/package-resolution.js.map +1 -0
- package/dist/release/portable-archive.d.ts +12 -0
- package/dist/release/portable-archive.d.ts.map +1 -0
- package/dist/release/portable-archive.js +96 -0
- package/dist/release/portable-archive.js.map +1 -0
- package/dist/release/publish.d.ts +1 -1
- package/dist/release/publish.js +1 -1
- package/dist/release/registry-download.d.ts +2 -0
- package/dist/release/registry-download.d.ts.map +1 -0
- package/dist/release/registry-download.js +157 -0
- package/dist/release/registry-download.js.map +1 -0
- package/dist/release/registry-framework.d.ts +39 -0
- package/dist/release/registry-framework.d.ts.map +1 -0
- package/dist/release/registry-framework.js +279 -0
- package/dist/release/registry-framework.js.map +1 -0
- package/dist/release/registry-transport.d.ts +27 -0
- package/dist/release/registry-transport.d.ts.map +1 -0
- package/dist/release/registry-transport.js +96 -0
- package/dist/release/registry-transport.js.map +1 -0
- package/dist/release/repository-identity.d.ts +12 -0
- package/dist/release/repository-identity.d.ts.map +1 -0
- package/dist/release/repository-identity.js +62 -0
- package/dist/release/repository-identity.js.map +1 -0
- package/dist/release/runtime-extractor.d.ts +4 -0
- package/dist/release/runtime-extractor.d.ts.map +1 -0
- package/dist/release/runtime-extractor.js +15 -0
- package/dist/release/runtime-extractor.js.map +1 -0
- package/dist/release/runtime-provenance.d.ts +40 -0
- package/dist/release/runtime-provenance.d.ts.map +1 -0
- package/dist/release/runtime-provenance.js +229 -0
- package/dist/release/runtime-provenance.js.map +1 -0
- package/dist/release/source.d.ts +12 -0
- package/dist/release/source.d.ts.map +1 -0
- package/dist/release/source.js +168 -0
- package/dist/release/source.js.map +1 -0
- package/dist/release/store.d.ts +14 -5
- package/dist/release/store.d.ts.map +1 -1
- package/dist/release/store.js +73 -17
- package/dist/release/store.js.map +1 -1
- package/dist/release/target-runtime.d.ts +19 -0
- package/dist/release/target-runtime.d.ts.map +1 -0
- package/dist/release/target-runtime.js +41 -0
- package/dist/release/target-runtime.js.map +1 -0
- package/dist/release/vendored-framework.d.ts +28 -0
- package/dist/release/vendored-framework.d.ts.map +1 -0
- package/dist/release/vendored-framework.js +98 -0
- package/dist/release/vendored-framework.js.map +1 -0
- package/dist/release/workspace-source.d.ts +3 -0
- package/dist/release/workspace-source.d.ts.map +1 -0
- package/dist/release/workspace-source.js +33 -0
- package/dist/release/workspace-source.js.map +1 -0
- package/dist/runtime/context.d.ts +29 -0
- package/dist/runtime/context.d.ts.map +1 -0
- package/dist/runtime/context.js +111 -0
- package/dist/runtime/context.js.map +1 -0
- package/dist/runtime/identity.d.ts +15 -0
- package/dist/runtime/identity.d.ts.map +1 -0
- package/dist/runtime/identity.js +33 -0
- package/dist/runtime/identity.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +3 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/services/access.rpc-service.d.ts +41 -0
- package/dist/services/access.rpc-service.d.ts.map +1 -0
- package/dist/services/access.rpc-service.js +248 -0
- package/dist/services/access.rpc-service.js.map +1 -0
- package/dist/services/alert.service.d.ts +3 -3
- package/dist/services/alert.service.d.ts.map +1 -1
- package/dist/services/alert.service.js +3 -3
- package/dist/services/anonymous-input.d.ts +0 -21
- package/dist/services/anonymous-input.d.ts.map +1 -1
- package/dist/services/anonymous-input.js +1 -27
- package/dist/services/anonymous-input.js.map +1 -1
- package/dist/services/audit.service.d.ts +10 -30
- package/dist/services/audit.service.d.ts.map +1 -1
- package/dist/services/audit.service.js +72 -18
- package/dist/services/audit.service.js.map +1 -1
- package/dist/services/auth-context.d.ts +2 -0
- package/dist/services/auth-context.d.ts.map +1 -1
- package/dist/services/auth-context.js +4 -1
- package/dist/services/auth-context.js.map +1 -1
- package/dist/services/auth.rpc-service.d.ts +3 -1
- package/dist/services/auth.rpc-service.d.ts.map +1 -1
- package/dist/services/auth.rpc-service.js +13 -3
- package/dist/services/auth.rpc-service.js.map +1 -1
- package/dist/services/auth.service.d.ts +11 -21
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +125 -139
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/backup-pipeline.d.ts +1 -1
- package/dist/services/backup-pipeline.js +1 -1
- package/dist/services/backup-storage.d.ts +14 -0
- package/dist/services/backup-storage.d.ts.map +1 -0
- package/dist/services/backup-storage.js +195 -0
- package/dist/services/backup-storage.js.map +1 -0
- package/dist/services/backup.rpc-service.d.ts +2 -0
- package/dist/services/backup.rpc-service.d.ts.map +1 -1
- package/dist/services/backup.rpc-service.js +9 -0
- package/dist/services/backup.rpc-service.js.map +1 -1
- package/dist/services/backup.service.d.ts +36 -129
- package/dist/services/backup.service.d.ts.map +1 -1
- package/dist/services/backup.service.js +177 -156
- package/dist/services/backup.service.js.map +1 -1
- package/dist/services/bundle-builder.d.ts +27 -12
- package/dist/services/bundle-builder.d.ts.map +1 -1
- package/dist/services/bundle-builder.js +192 -101
- package/dist/services/bundle-builder.js.map +1 -1
- package/dist/services/bundle-overrides.d.ts +25 -0
- package/dist/services/bundle-overrides.d.ts.map +1 -0
- package/dist/services/bundle-overrides.js +96 -0
- package/dist/services/bundle-overrides.js.map +1 -0
- package/dist/services/daemon-authority.d.ts +16 -0
- package/dist/services/daemon-authority.d.ts.map +1 -0
- package/dist/services/daemon-authority.js +54 -0
- package/dist/services/daemon-authority.js.map +1 -0
- package/dist/services/daemon-principal.d.ts +31 -0
- package/dist/services/daemon-principal.d.ts.map +1 -0
- package/dist/services/daemon-principal.js +37 -0
- package/dist/services/daemon-principal.js.map +1 -0
- package/dist/services/deploy.service.d.ts +13 -57
- package/dist/services/deploy.service.d.ts.map +1 -1
- package/dist/services/deploy.service.js +15 -263
- package/dist/services/deploy.service.js.map +1 -1
- package/dist/services/discovery.service.d.ts +1 -1
- package/dist/services/discovery.service.js +1 -1
- package/dist/services/event-broadcaster.rpc-service.d.ts +7 -1
- package/dist/services/event-broadcaster.rpc-service.d.ts.map +1 -1
- package/dist/services/event-broadcaster.rpc-service.js +89 -11
- package/dist/services/event-broadcaster.rpc-service.js.map +1 -1
- package/dist/services/fleet.rpc-service.d.ts +0 -6
- package/dist/services/fleet.rpc-service.d.ts.map +1 -1
- package/dist/services/fleet.rpc-service.js +0 -13
- package/dist/services/fleet.rpc-service.js.map +1 -1
- package/dist/services/health-check.service.d.ts +1 -1
- package/dist/services/health-check.service.d.ts.map +1 -1
- package/dist/services/health-check.service.js +30 -5
- package/dist/services/health-check.service.js.map +1 -1
- package/dist/services/host-operation-barrier.d.ts +8 -0
- package/dist/services/host-operation-barrier.d.ts.map +1 -0
- package/dist/services/host-operation-barrier.js +44 -0
- package/dist/services/host-operation-barrier.js.map +1 -0
- package/dist/services/host-upgrade.d.ts +181 -0
- package/dist/services/host-upgrade.d.ts.map +1 -0
- package/dist/services/host-upgrade.js +503 -0
- package/dist/services/host-upgrade.js.map +1 -0
- package/dist/services/infrastructure.rpc-service.d.ts +24 -2
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +178 -36
- package/dist/services/infrastructure.rpc-service.js.map +1 -1
- package/dist/services/kernel-catalog.d.ts +14 -0
- package/dist/services/kernel-catalog.d.ts.map +1 -0
- package/dist/services/kernel-catalog.js +172 -0
- package/dist/services/kernel-catalog.js.map +1 -0
- package/dist/services/kernel-distribution.d.ts +5 -0
- package/dist/services/kernel-distribution.d.ts.map +1 -0
- package/dist/services/kernel-distribution.js +49 -0
- package/dist/services/kernel-distribution.js.map +1 -0
- package/dist/services/kernel-rollout.service.d.ts +55 -0
- package/dist/services/kernel-rollout.service.d.ts.map +1 -0
- package/dist/services/kernel-rollout.service.js +394 -0
- package/dist/services/kernel-rollout.service.js.map +1 -0
- package/dist/services/local-bundle.d.ts +9 -0
- package/dist/services/local-bundle.d.ts.map +1 -1
- package/dist/services/local-bundle.js +14 -3
- package/dist/services/local-bundle.js.map +1 -1
- package/dist/services/log-collector.rpc-service.d.ts +5 -11
- package/dist/services/log-collector.rpc-service.d.ts.map +1 -1
- package/dist/services/log-collector.rpc-service.js +6 -6
- package/dist/services/log-collector.rpc-service.js.map +1 -1
- package/dist/services/log-collector.service.d.ts +39 -109
- package/dist/services/log-collector.service.d.ts.map +1 -1
- package/dist/services/log-collector.service.js +286 -261
- package/dist/services/log-collector.service.js.map +1 -1
- package/dist/services/log-query.d.ts +6 -0
- package/dist/services/log-query.d.ts.map +1 -0
- package/dist/services/log-query.js +46 -0
- package/dist/services/log-query.js.map +1 -0
- package/dist/services/maintenance-lock.d.ts +2 -2
- package/dist/services/maintenance-lock.d.ts.map +1 -1
- package/dist/services/maintenance-lock.js +1 -1
- package/dist/services/managed-rollout.d.ts +54 -0
- package/dist/services/managed-rollout.d.ts.map +1 -0
- package/dist/services/managed-rollout.js +124 -0
- package/dist/services/managed-rollout.js.map +1 -0
- package/dist/services/metrics.rpc-service.d.ts +23 -0
- package/dist/services/metrics.rpc-service.d.ts.map +1 -0
- package/dist/services/metrics.rpc-service.js +73 -0
- package/dist/services/metrics.rpc-service.js.map +1 -0
- package/dist/services/migration-output.d.ts +2 -2
- package/dist/services/migration-output.js +2 -2
- package/dist/services/migration-process.d.ts +32 -0
- package/dist/services/migration-process.d.ts.map +1 -0
- package/dist/services/migration-process.js +71 -0
- package/dist/services/migration-process.js.map +1 -0
- package/dist/services/migration-target.d.ts +57 -0
- package/dist/services/migration-target.d.ts.map +1 -0
- package/dist/services/migration-target.js +221 -0
- package/dist/services/migration-target.js.map +1 -0
- package/dist/services/node-deploy-lease.d.ts +19 -2
- package/dist/services/node-deploy-lease.d.ts.map +1 -1
- package/dist/services/node-deploy-lease.js +84 -10
- package/dist/services/node-deploy-lease.js.map +1 -1
- package/dist/services/node-health.repository.d.ts +2 -59
- package/dist/services/node-health.repository.d.ts.map +1 -1
- package/dist/services/node-health.repository.js.map +1 -1
- package/dist/services/node-host-key.d.ts +9 -0
- package/dist/services/node-host-key.d.ts.map +1 -0
- package/dist/services/node-host-key.js +17 -0
- package/dist/services/node-host-key.js.map +1 -0
- package/dist/services/node-manager.rpc-service.d.ts +50 -38
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +233 -38
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +4 -1
- package/dist/services/node-manager.service.d.ts.map +1 -1
- package/dist/services/node-manager.service.js +79 -28
- package/dist/services/node-manager.service.js.map +1 -1
- package/dist/services/node-registration.d.ts +17 -0
- package/dist/services/node-registration.d.ts.map +1 -0
- package/dist/services/node-registration.js +73 -0
- package/dist/services/node-registration.js.map +1 -0
- package/dist/services/node-upgrade.d.ts +1 -1
- package/dist/services/node-upgrade.service.d.ts +2 -28
- package/dist/services/node-upgrade.service.d.ts.map +1 -1
- package/dist/services/node-upgrade.service.js +2 -3
- package/dist/services/node-upgrade.service.js.map +1 -1
- package/dist/services/pipeline-definition.d.ts +14 -0
- package/dist/services/pipeline-definition.d.ts.map +1 -0
- package/dist/services/pipeline-definition.js +77 -0
- package/dist/services/pipeline-definition.js.map +1 -0
- package/dist/services/pipeline.rpc-service.d.ts +14 -3
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +45 -12
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +30 -44
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +402 -333
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +219 -14
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +314 -31
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +195 -67
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +2029 -705
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/redeploy-decision.d.ts +2 -2
- package/dist/services/redeploy-decision.js +1 -1
- package/dist/services/release.rpc-service.d.ts +6 -19
- package/dist/services/release.rpc-service.d.ts.map +1 -1
- package/dist/services/release.rpc-service.js +35 -12
- package/dist/services/release.rpc-service.js.map +1 -1
- package/dist/services/release.service.d.ts +2 -47
- package/dist/services/release.service.d.ts.map +1 -1
- package/dist/services/release.service.js +26 -2
- package/dist/services/release.service.js.map +1 -1
- package/dist/services/remote-deployer.service.d.ts +65 -126
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +671 -466
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +3 -1
- package/dist/services/remote-provisioner.d.ts.map +1 -1
- package/dist/services/remote-provisioner.js +2 -2
- package/dist/services/remote-provisioner.js.map +1 -1
- package/dist/services/replication-evidence.d.ts +24 -0
- package/dist/services/replication-evidence.d.ts.map +1 -0
- package/dist/services/replication-evidence.js +61 -0
- package/dist/services/replication-evidence.js.map +1 -0
- package/dist/services/replication-history.d.ts +80 -0
- package/dist/services/replication-history.d.ts.map +1 -0
- package/dist/services/replication-history.js +279 -0
- package/dist/services/replication-history.js.map +1 -0
- package/dist/services/replication-reconciliation.d.ts +74 -0
- package/dist/services/replication-reconciliation.d.ts.map +1 -0
- package/dist/services/replication-reconciliation.js +351 -0
- package/dist/services/replication-reconciliation.js.map +1 -0
- package/dist/services/slave-storage.service.d.ts +2 -19
- package/dist/services/slave-storage.service.d.ts.map +1 -1
- package/dist/services/slave-storage.service.js +19 -6
- package/dist/services/slave-storage.service.js.map +1 -1
- package/dist/services/static-carry-forward.d.ts +28 -3
- package/dist/services/static-carry-forward.d.ts.map +1 -1
- package/dist/services/static-carry-forward.js +285 -4
- package/dist/services/static-carry-forward.js.map +1 -1
- package/dist/services/sync-summary.d.ts.map +1 -1
- package/dist/services/sync-summary.js +1 -18
- package/dist/services/sync-summary.js.map +1 -1
- package/dist/services/sync.rpc-service.d.ts +17 -20
- package/dist/services/sync.rpc-service.d.ts.map +1 -1
- package/dist/services/sync.rpc-service.js +23 -37
- package/dist/services/sync.rpc-service.js.map +1 -1
- package/dist/services/sync.service.d.ts +53 -157
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +239 -337
- package/dist/services/sync.service.js.map +1 -1
- package/dist/services/system-info.rpc-service.d.ts +3 -1
- package/dist/services/system-info.rpc-service.d.ts.map +1 -1
- package/dist/services/system-info.rpc-service.js +5 -5
- package/dist/services/system-info.rpc-service.js.map +1 -1
- package/dist/services/system-info.service.d.ts +3 -1
- package/dist/services/system-info.service.d.ts.map +1 -1
- package/dist/services/system-info.service.js +17 -9
- package/dist/services/system-info.service.js.map +1 -1
- package/dist/services/telemetry.rpc-service.d.ts +4 -23
- package/dist/services/telemetry.rpc-service.d.ts.map +1 -1
- package/dist/services/telemetry.rpc-service.js +4 -32
- package/dist/services/telemetry.rpc-service.js.map +1 -1
- package/dist/services/telemetry.service.d.ts +2 -30
- package/dist/services/telemetry.service.d.ts.map +1 -1
- package/dist/services/telemetry.service.js +25 -131
- package/dist/services/telemetry.service.js.map +1 -1
- package/dist/services/terminal-ssh.d.ts +16 -0
- package/dist/services/terminal-ssh.d.ts.map +1 -0
- package/dist/services/terminal-ssh.js +101 -0
- package/dist/services/terminal-ssh.js.map +1 -0
- package/dist/services/terminal.rpc-service.d.ts +84 -0
- package/dist/services/terminal.rpc-service.d.ts.map +1 -0
- package/dist/services/terminal.rpc-service.js +508 -0
- package/dist/services/terminal.rpc-service.js.map +1 -0
- package/dist/services/trace-collector.rpc-service.js +3 -3
- package/dist/services/trace-collector.rpc-service.js.map +1 -1
- package/dist/services/wait-for-postgres.d.ts +1 -1
- package/dist/services/wait-for-postgres.d.ts.map +1 -1
- package/dist/services/wait-for-postgres.js +13 -28
- package/dist/services/wait-for-postgres.js.map +1 -1
- package/dist/shared/build-stamp.d.ts +4 -1
- package/dist/shared/build-stamp.d.ts.map +1 -1
- package/dist/shared/build-stamp.js +14 -6
- package/dist/shared/build-stamp.js.map +1 -1
- package/dist/shared/describe-error.d.ts +1 -21
- package/dist/shared/describe-error.d.ts.map +1 -1
- package/dist/shared/describe-error.js +1 -38
- package/dist/shared/describe-error.js.map +1 -1
- package/dist/shared/dto/access.d.ts +55 -0
- package/dist/shared/dto/access.d.ts.map +1 -0
- package/dist/shared/dto/access.js +2 -0
- package/dist/shared/dto/access.js.map +1 -0
- package/dist/shared/dto/audit.d.ts +32 -0
- package/dist/shared/dto/audit.d.ts.map +1 -0
- package/dist/shared/dto/audit.js +3 -0
- package/dist/shared/dto/audit.js.map +1 -0
- package/dist/shared/dto/auth.d.ts +2 -0
- package/dist/shared/dto/auth.d.ts.map +1 -1
- package/dist/shared/dto/auth.js +5 -1
- package/dist/shared/dto/auth.js.map +1 -1
- package/dist/shared/dto/backend.d.ts +50 -0
- package/dist/shared/dto/backend.d.ts.map +1 -0
- package/dist/shared/dto/backend.js +3 -0
- package/dist/shared/dto/backend.js.map +1 -0
- package/dist/shared/dto/backups.d.ts +99 -0
- package/dist/shared/dto/backups.d.ts.map +1 -1
- package/dist/shared/dto/cluster.d.ts +44 -0
- package/dist/shared/dto/cluster.d.ts.map +1 -0
- package/dist/shared/dto/cluster.js +3 -0
- package/dist/shared/dto/cluster.js.map +1 -0
- package/dist/shared/dto/files.d.ts +328 -0
- package/dist/shared/dto/files.d.ts.map +1 -0
- package/dist/shared/dto/files.js +2 -0
- package/dist/shared/dto/files.js.map +1 -0
- package/dist/shared/dto/health.d.ts +59 -0
- package/dist/shared/dto/health.d.ts.map +1 -1
- package/dist/shared/dto/installed-release.d.ts +40 -0
- package/dist/shared/dto/installed-release.d.ts.map +1 -0
- package/dist/shared/dto/installed-release.js +2 -0
- package/dist/shared/dto/installed-release.js.map +1 -0
- package/dist/shared/dto/kernel-catalog.d.ts +11 -0
- package/dist/shared/dto/kernel-catalog.d.ts.map +1 -0
- package/dist/shared/dto/kernel-catalog.js +2 -0
- package/dist/shared/dto/kernel-catalog.js.map +1 -0
- package/dist/shared/dto/logs.d.ts +21 -0
- package/dist/shared/dto/logs.d.ts.map +1 -1
- package/dist/shared/dto/metrics.d.ts +4 -64
- package/dist/shared/dto/metrics.d.ts.map +1 -1
- package/dist/shared/dto/metrics.js +0 -15
- package/dist/shared/dto/metrics.js.map +1 -1
- package/dist/shared/dto/nodes.d.ts +98 -24
- package/dist/shared/dto/nodes.d.ts.map +1 -1
- package/dist/shared/dto/pipelines.d.ts +22 -1
- package/dist/shared/dto/pipelines.d.ts.map +1 -1
- package/dist/shared/dto/project.d.ts +289 -30
- package/dist/shared/dto/project.d.ts.map +1 -1
- package/dist/shared/dto/releases.d.ts +59 -0
- package/dist/shared/dto/releases.d.ts.map +1 -0
- package/dist/shared/dto/releases.js +2 -0
- package/dist/shared/dto/releases.js.map +1 -0
- package/dist/shared/dto/services.d.ts +201 -37
- package/dist/shared/dto/services.d.ts.map +1 -1
- package/dist/shared/dto/services.js +15 -6
- package/dist/shared/dto/services.js.map +1 -1
- package/dist/shared/dto/stack-diagnosis.d.ts +20 -0
- package/dist/shared/dto/stack-diagnosis.d.ts.map +1 -0
- package/dist/shared/dto/stack-diagnosis.js +8 -0
- package/dist/shared/dto/stack-diagnosis.js.map +1 -0
- package/dist/shared/dto/stack-execution.d.ts +65 -0
- package/dist/shared/dto/stack-execution.d.ts.map +1 -0
- package/dist/shared/dto/stack-execution.js +33 -0
- package/dist/shared/dto/stack-execution.js.map +1 -0
- package/dist/shared/dto/system-info.d.ts +11 -0
- package/dist/shared/dto/system-info.d.ts.map +1 -1
- package/dist/shared/dto/system-info.js +7 -1
- package/dist/shared/dto/system-info.js.map +1 -1
- package/dist/shared/dto/terminal.d.ts +40 -0
- package/dist/shared/dto/terminal.d.ts.map +1 -0
- package/dist/shared/dto/terminal.js +2 -0
- package/dist/shared/dto/terminal.js.map +1 -0
- package/dist/shared/dto/topology.d.ts +96 -0
- package/dist/shared/dto/topology.d.ts.map +1 -0
- package/dist/shared/dto/topology.js +2 -0
- package/dist/shared/dto/topology.js.map +1 -0
- package/dist/shared/emergency-output.d.ts +3 -0
- package/dist/shared/emergency-output.d.ts.map +1 -0
- package/dist/shared/emergency-output.js +22 -0
- package/dist/shared/emergency-output.js.map +1 -0
- package/dist/shared/env-config.d.ts +2 -0
- package/dist/shared/env-config.d.ts.map +1 -1
- package/dist/shared/env-config.js +1 -0
- package/dist/shared/env-config.js.map +1 -1
- package/dist/shared/events.d.ts +2 -0
- package/dist/shared/events.d.ts.map +1 -1
- package/dist/shared/events.js.map +1 -1
- package/dist/shared/execution-identity.d.ts +39 -0
- package/dist/shared/execution-identity.d.ts.map +1 -0
- package/dist/shared/execution-identity.js +160 -0
- package/dist/shared/execution-identity.js.map +1 -0
- package/dist/shared/file-policy.d.ts +5 -0
- package/dist/shared/file-policy.d.ts.map +1 -0
- package/dist/shared/file-policy.js +18 -0
- package/dist/shared/file-policy.js.map +1 -0
- package/dist/shared/framework-source.d.ts +11 -0
- package/dist/shared/framework-source.d.ts.map +1 -0
- package/dist/shared/framework-source.js +31 -0
- package/dist/shared/framework-source.js.map +1 -0
- package/dist/shared/fresh-module-reader.d.ts +40 -0
- package/dist/shared/fresh-module-reader.d.ts.map +1 -0
- package/dist/shared/fresh-module-reader.js +257 -0
- package/dist/shared/fresh-module-reader.js.map +1 -0
- package/dist/shared/host-boot-identity.d.ts +12 -0
- package/dist/shared/host-boot-identity.d.ts.map +1 -0
- package/dist/shared/host-boot-identity.js +89 -0
- package/dist/shared/host-boot-identity.js.map +1 -0
- package/dist/shared/kernel-file-lock.d.ts +3 -0
- package/dist/shared/kernel-file-lock.d.ts.map +1 -0
- package/dist/shared/kernel-file-lock.js +53 -0
- package/dist/shared/kernel-file-lock.js.map +1 -0
- package/dist/shared/linux-file-lock.d.ts +4 -0
- package/dist/shared/linux-file-lock.d.ts.map +1 -0
- package/dist/shared/linux-file-lock.js +36 -0
- package/dist/shared/linux-file-lock.js.map +1 -0
- package/dist/shared/local-infra-host.d.ts +2 -2
- package/dist/shared/local-infra-host.js +2 -2
- package/dist/shared/log-ingestion-reading.d.ts +9 -0
- package/dist/shared/log-ingestion-reading.d.ts.map +1 -0
- package/dist/shared/log-ingestion-reading.js +32 -0
- package/dist/shared/log-ingestion-reading.js.map +1 -0
- package/dist/shared/log-levels.d.ts +19 -0
- package/dist/shared/log-levels.d.ts.map +1 -0
- package/dist/shared/log-levels.js +23 -0
- package/dist/shared/log-levels.js.map +1 -0
- package/dist/shared/metrics-storage-reading.d.ts +8 -0
- package/dist/shared/metrics-storage-reading.d.ts.map +1 -0
- package/dist/shared/metrics-storage-reading.js +27 -0
- package/dist/shared/metrics-storage-reading.js.map +1 -0
- package/dist/shared/pnpm.d.ts.map +1 -1
- package/dist/shared/pnpm.js +7 -0
- package/dist/shared/pnpm.js.map +1 -1
- package/dist/shared/pool-scale.d.ts +10 -0
- package/dist/shared/pool-scale.d.ts.map +1 -0
- package/dist/shared/pool-scale.js +25 -0
- package/dist/shared/pool-scale.js.map +1 -0
- package/dist/shared/private-files.d.ts +10 -22
- package/dist/shared/private-files.d.ts.map +1 -1
- package/dist/shared/private-files.js +95 -82
- package/dist/shared/private-files.js.map +1 -1
- package/dist/shared/relay-reading.d.ts +19 -0
- package/dist/shared/relay-reading.d.ts.map +1 -0
- package/dist/shared/relay-reading.js +22 -0
- package/dist/shared/relay-reading.js.map +1 -0
- package/dist/shared/release-reading.d.ts +124 -32
- package/dist/shared/release-reading.d.ts.map +1 -1
- package/dist/shared/release-reading.js +208 -28
- package/dist/shared/release-reading.js.map +1 -1
- package/dist/shared/roles.d.ts +19 -18
- package/dist/shared/roles.d.ts.map +1 -1
- package/dist/shared/roles.js +21 -26
- package/dist/shared/roles.js.map +1 -1
- package/dist/shared/runtime-artifact.d.ts +20 -0
- package/dist/shared/runtime-artifact.d.ts.map +1 -0
- package/dist/shared/runtime-artifact.js +83 -0
- package/dist/shared/runtime-artifact.js.map +1 -0
- package/dist/shared/stack-reading.d.ts +18 -0
- package/dist/shared/stack-reading.d.ts.map +1 -0
- package/dist/shared/stack-reading.js +15 -0
- package/dist/shared/stack-reading.js.map +1 -0
- package/dist/shared/sync-reading.d.ts +30 -38
- package/dist/shared/sync-reading.d.ts.map +1 -1
- package/dist/shared/sync-reading.js +90 -29
- package/dist/shared/sync-reading.js.map +1 -1
- package/dist/shared/tokens.d.ts +3 -1
- package/dist/shared/tokens.d.ts.map +1 -1
- package/dist/shared/tokens.js +1 -0
- package/dist/shared/tokens.js.map +1 -1
- package/dist/supervisor/restart-policy.d.ts.map +1 -1
- package/dist/supervisor/restart-policy.js +7 -5
- package/dist/supervisor/restart-policy.js.map +1 -1
- package/dist/webapp/console-container.d.ts +7 -0
- package/dist/webapp/console-container.d.ts.map +1 -0
- package/dist/webapp/console-container.js +23 -0
- package/dist/webapp/console-container.js.map +1 -0
- package/dist/webapp/webapp.service.d.ts.map +1 -1
- package/dist/webapp/webapp.service.js +71 -24
- package/dist/webapp/webapp.service.js.map +1 -1
- package/dist/workers/health-monitor.service.d.ts.map +1 -1
- package/dist/workers/health-monitor.service.js +8 -1
- package/dist/workers/health-monitor.service.js.map +1 -1
- package/dist/workers/types.d.ts +2 -0
- package/dist/workers/types.d.ts.map +1 -1
- package/package.json +109 -43
- package/webapp/dist/BUILD.json +4 -3
- package/webapp/dist/assets/access-48hkC2-P.js +1 -0
- package/webapp/dist/assets/access-jWkHxGc7.js +1 -0
- package/webapp/dist/assets/admin-data-table-BKSDI8sU.js +1 -0
- package/webapp/dist/assets/alert-expression-CSblScoa.js +1 -0
- package/webapp/dist/assets/alert-notify-settings-C_CHZrFm.js +1 -0
- package/webapp/dist/assets/alert-uBG6r9NW.js +1 -0
- package/webapp/dist/assets/alerts-CuPQ9YQJ.js +1 -0
- package/webapp/dist/assets/app-address-BCXfN59F.js +1 -0
- package/webapp/dist/assets/apps-Drio028B.js +1 -0
- package/webapp/dist/assets/audit-npSFJECe.js +1 -0
- package/webapp/dist/assets/auth-CcgjP7hR.js +1 -0
- package/webapp/dist/assets/card-DkH32gMY.js +1 -0
- package/webapp/dist/assets/chart-BpGXlCJc.js +2 -0
- package/webapp/dist/assets/charts-BY7qI6s2.js +41 -0
- package/webapp/dist/assets/charts-CpBdHU_A.js +56 -0
- package/webapp/dist/assets/client-DFnuv2z3.js +3 -0
- package/webapp/dist/assets/code-editor-DK6Tmmxv.js +4 -0
- package/webapp/dist/assets/comparison-bars-BtC0dHjF.js +1 -0
- package/webapp/dist/assets/confirm-dialog-BbGsAz7_.js +1 -0
- package/webapp/dist/assets/console-keyboard-D3YCA0yU.js +1 -0
- package/webapp/dist/assets/constants-CyhngVXh.js +1 -0
- package/webapp/dist/assets/containers-Bl8gAyZX.js +3 -0
- package/webapp/dist/assets/context-FIuwpd9_.js +1 -0
- package/webapp/dist/assets/controls-C5W8gHU4.js +1 -0
- package/webapp/dist/assets/daemon-memory-BiEtr9jr.js +1 -0
- package/webapp/dist/assets/dashboard-UHlet3H9.js +1 -0
- package/webapp/dist/assets/dashboard-builder-67PZFqhE.js +1 -0
- package/webapp/dist/assets/dayjs.min-DHwAvH5f.js +1 -0
- package/webapp/dist/assets/deploy-release-dialog-BOXcD5Wo.js +1 -0
- package/webapp/dist/assets/deployments-qV20Ak0P.js +1 -0
- package/webapp/dist/assets/detail-B4TiBfxU.js +8 -0
- package/webapp/dist/assets/detail-B85-Wees.js +2 -0
- package/webapp/dist/assets/detail-CYS81K6Y.js +1 -0
- package/webapp/dist/assets/dist-BUDn8hLh.js +11 -0
- package/webapp/dist/assets/dist-Ci5pYRbx.js +1 -0
- package/webapp/dist/assets/dist-DQmjHv4-.js +1 -0
- package/webapp/dist/assets/dist-De9Fty7a.js +1 -0
- package/webapp/dist/assets/dist-DsGmKwmk.js +23 -0
- package/webapp/dist/assets/empty-content-7jOFhG4C.js +1 -0
- package/webapp/dist/assets/error-boundary-CLLI8PWw.js +3 -0
- package/webapp/dist/assets/event-fields-CiyqrRO8.js +1 -0
- package/webapp/dist/assets/files-DigwXndm.js +2 -0
- package/webapp/dist/assets/formatters-RnRy4bXm.js +1 -0
- package/webapp/dist/assets/icons-OboZgWSt.js +1 -0
- package/webapp/dist/assets/index-uq8Dkk4c.js +1 -0
- package/webapp/dist/assets/label-B1SF0RTL.js +1 -0
- package/webapp/dist/assets/log-level-filter-Bcn31D1F.js +1 -0
- package/webapp/dist/assets/log-location-DuBjh6HQ.js +1 -0
- package/webapp/dist/assets/logs-BqHOufk8.js +4 -0
- package/webapp/dist/assets/metric-chart-M-kI-XOt.js +1 -0
- package/webapp/dist/assets/metric-series-WxePniyw.js +1 -0
- package/webapp/dist/assets/metrics-QIQaF7iS.js +1 -0
- package/webapp/dist/assets/model-ZEXEHm0l.js +2 -0
- package/webapp/dist/assets/mui-6ssfcZcz.js +1 -0
- package/webapp/dist/assets/mui-AnEgAVjz.js +52 -0
- package/webapp/dist/assets/mui-B1jrje6Z.js +1 -0
- package/webapp/dist/assets/mui-BIz4LSVs.js +1 -0
- package/webapp/dist/assets/mui-BTN91yBK.js +28 -0
- package/webapp/dist/assets/mui-BXSXx9c9.js +124 -0
- package/webapp/dist/assets/mui-BwsIrivo.js +37 -0
- package/webapp/dist/assets/mui-C_hromOc.js +1 -0
- package/webapp/dist/assets/mui-Cd711nOk.js +4 -0
- package/webapp/dist/assets/mui-CdB_p2lt.js +10 -0
- package/webapp/dist/assets/mui-DyT2n1lx.js +1 -0
- package/webapp/dist/assets/mui-agG5dued.js +1 -0
- package/webapp/dist/assets/mui-y44PQOfG.js +1 -0
- package/webapp/dist/assets/nodes-BJPk02vv.js +7 -0
- package/webapp/dist/assets/omnitron-logo-koMCbsCv.js +1 -0
- package/webapp/dist/assets/operation-status-Bm1x1wTz.js +1 -0
- package/webapp/dist/assets/page-breadcrumbs-fR7Jmpp4.js +1 -0
- package/webapp/dist/assets/pipelines-T6Ch9LTw.js +3 -0
- package/webapp/dist/assets/popper-m_9b0JRf.js +1 -0
- package/webapp/dist/assets/preload-helper-DzCYNvzR.js +1 -0
- package/webapp/dist/assets/project.store--G5pIF-J.js +1 -0
- package/webapp/dist/assets/projects-YoBzcQ24.js +1 -0
- package/webapp/dist/assets/react-BN8qLIAi.js +9 -0
- package/webapp/dist/assets/react-CEuifcaQ.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-DoOt-pu4.js +1 -0
- package/webapp/dist/assets/realtime.store-CBDO4Abj.js +1 -0
- package/webapp/dist/assets/release-bits-B2a_wbft.js +1 -0
- package/webapp/dist/assets/release-build-panel-BQmIdKW9.js +1 -0
- package/webapp/dist/assets/release-deployment-state-DRrEI2pP.js +1 -0
- package/webapp/dist/assets/release-wire-f2VuBoBF.js +1 -0
- package/webapp/dist/assets/releases-Bp3CDgmo.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-CNOWq4Kh.js +1 -0
- package/webapp/dist/assets/search-input-C0MHI8vO.js +1 -0
- package/webapp/dist/assets/services-BddvcFi8.js +1 -0
- package/webapp/dist/assets/settings-B3egRvbI.js +1 -0
- package/webapp/dist/assets/settled-pair-B-wgSZl6.js +1 -0
- package/webapp/dist/assets/shared-styles-C0vN3I7_.js +1 -0
- package/webapp/dist/assets/shell-command-C3pXf1vi.js +1 -0
- package/webapp/dist/assets/sign-in-9q-Nfy83.js +1 -0
- package/webapp/dist/assets/skeleton-BmWDJWF9.js +1 -0
- package/webapp/dist/assets/snackbar-DSPmjMyi.js +1 -0
- package/webapp/dist/assets/stack-health-status-BIv2C10x.js +1 -0
- package/webapp/dist/assets/stack-start-notice-BVnMOwRQ.js +1 -0
- package/webapp/dist/assets/stacks-IZ1mfizi.js +1 -0
- package/webapp/dist/assets/storage-CKXnhqkt.js +1 -0
- package/webapp/dist/assets/store-bqUBn2A4.js +1 -0
- package/webapp/dist/assets/sync-reading-CN0jPKAg.js +1 -0
- package/webapp/dist/assets/system-info-BFKNM-hf.js +1 -0
- package/webapp/dist/assets/table-BOWT6Y9d.js +1 -0
- package/webapp/dist/assets/table-viewport-Bp4pq-c_.js +1 -0
- package/webapp/dist/assets/tabs-k5NPGLnJ.js +1 -0
- package/webapp/dist/assets/terminal-BrP-ENHg.css +1 -0
- package/webapp/dist/assets/terminal-QWBau-Us.js +62 -0
- package/webapp/dist/assets/terminal-input-b7f2VoE_.js +2 -0
- package/webapp/dist/assets/topology-CPey5dP6.js +8 -0
- package/webapp/dist/assets/topology-metadata-dialog-BivuU2y6.js +2 -0
- package/webapp/dist/assets/topology-routes.worker-BoYrIzAH.js +1 -0
- package/webapp/dist/assets/traces-By0rdfDC.js +1 -0
- package/webapp/dist/assets/use-copy-to-clipboard-BWYpToS3.js +1 -0
- package/webapp/dist/assets/use-polled-resource-B22hhr5L.js +1 -0
- package/webapp/dist/assets/use-stack-context-UkBsF-l7.js +1 -0
- package/webapp/dist/assets/webapp-BnxOVfrc.css +1 -0
- package/webapp/dist/assets/webapp-D-UhjFhS.js +35 -0
- package/webapp/dist/console-version.json +1 -0
- package/webapp/dist/index.html +54 -7
- package/dist/release/daemon-omni.d.ts +0 -41
- package/dist/release/daemon-omni.d.ts.map +0 -1
- package/dist/release/daemon-omni.js +0 -59
- package/dist/release/daemon-omni.js.map +0 -1
- package/dist/services/netron-telemetry-transport.d.ts +0 -42
- package/dist/services/netron-telemetry-transport.d.ts.map +0 -1
- package/dist/services/netron-telemetry-transport.js +0 -93
- package/dist/services/netron-telemetry-transport.js.map +0 -1
- package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +0 -1
- package/webapp/dist/assets/Grid-BZ7xhoHQ.js +0 -1
- package/webapp/dist/assets/Switch-DGSAxQPM.js +0 -1
- package/webapp/dist/assets/alerts-sXqHJbsa.js +0 -1
- package/webapp/dist/assets/apps-B_Ah8Flh.js +0 -1
- package/webapp/dist/assets/audit-YXihwyui.js +0 -1
- package/webapp/dist/assets/client-CGbBvy9k.js +0 -1
- package/webapp/dist/assets/constants-veKGFkC6.js +0 -1
- package/webapp/dist/assets/containers-Di4NOTLf.js +0 -2
- package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +0 -1
- package/webapp/dist/assets/dashboard-Cfuf95N3.js +0 -1
- package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +0 -1
- package/webapp/dist/assets/deploy-release-dialog-D6C-XcKY.js +0 -1
- package/webapp/dist/assets/deployments-ChTq5kCw.js +0 -1
- package/webapp/dist/assets/detail-BsGWv7Dj.js +0 -1
- package/webapp/dist/assets/detail-CyVf_cw5.js +0 -2
- package/webapp/dist/assets/detail-D027j6aO.js +0 -8
- package/webapp/dist/assets/formatters-BqjL73N3.js +0 -1
- package/webapp/dist/assets/fs-Ccl3sAcp.js +0 -1
- package/webapp/dist/assets/index-B8AHIPc-.css +0 -1
- package/webapp/dist/assets/index-DiZbrwxT.js +0 -414
- package/webapp/dist/assets/logs-L2b8Oqmo.js +0 -12
- package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +0 -801
- package/webapp/dist/assets/metrics-CQgjz2Lz.js +0 -2
- package/webapp/dist/assets/nodes-Nwia2Ty6.js +0 -7
- package/webapp/dist/assets/pipelines-DCu_rXOr.js +0 -4
- package/webapp/dist/assets/projects-Bb4aV76h.js +0 -1
- package/webapp/dist/assets/react-CwJFpaho.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +0 -1956
- package/webapp/dist/assets/release-bits-Dj4EOhhb.js +0 -1
- package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +0 -1
- package/webapp/dist/assets/releases-CnAt3yO6.js +0 -2
- package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/webapp/dist/assets/settings-DU-mjiwb.js +0 -1
- package/webapp/dist/assets/settled-pair-C7SjZuns.js +0 -1
- package/webapp/dist/assets/sign-in-Bcvjrr4C.js +0 -1
- package/webapp/dist/assets/stacks-B-e8p50I.js +0 -1
- package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +0 -1
- package/webapp/dist/assets/system-info-BtE3dgfw.js +0 -1
- package/webapp/dist/assets/topology-Cwch-uF1.js +0 -12
- package/webapp/dist/assets/traces-BbShR-4P.js +0 -1
- package/webapp/dist/assets/use-stack-context-CZUgPq88.js +0 -1
|
@@ -1,31 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
* Replaces: docker-compose.dev.yml + dev.sh + .env.dev
|
|
12
|
-
*
|
|
13
|
-
* Architecture:
|
|
14
|
-
* InfrastructureConfig → ServiceResolver → ResolvedContainer[]
|
|
15
|
-
* ResolvedContainer[] → ContainerRuntime → Docker CLI
|
|
16
|
-
* Health Loop → detect failure → auto-restart (exponential backoff)
|
|
17
|
-
*/
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { RecoveryMutation, RecoveryBusyError } from '../daemon/recovery-state.js';
|
|
18
11
|
import { computeBackoff } from '@omnitron-dev/titan/utils';
|
|
12
|
+
import { describeError } from '@omnitron-dev/titan/diagnostics';
|
|
13
|
+
import { isDeepStrictEqual } from 'node:util';
|
|
19
14
|
import { resolveInfrastructure, resolveOmnitronPg, getManagedNetwork } from './service-resolver.js';
|
|
15
|
+
import { ownedContainerId } from './owned-container.js';
|
|
16
|
+
import { observeUnhealthy } from './health-recovery.js';
|
|
17
|
+
import { normalizeInfraConfig } from './config-normalizer.js';
|
|
18
|
+
import { createDefaultRegistry } from './presets/index.js';
|
|
20
19
|
import { PhantomEndpointJanitor } from './phantom-endpoint-janitor.js';
|
|
21
20
|
import { LOCAL_INFRA_HOST } from '../shared/local-infra-host.js';
|
|
22
|
-
import { isDockerAvailable, getContainerState, createContainer, startContainer, removeContainer, ensureImage, waitForHealthy, createVolume, containerSpecHash, } from './container-runtime.js';
|
|
23
|
-
import { summariseProvisioning, describeProvisioning } from './provisioning-outcome.js';
|
|
21
|
+
import { isDockerAvailable, getContainerState, createContainer, startContainer, removeContainer, ensureImage, waitForHealthy, createVolume, containerSpecHash, containerResources, containerResourcesMatch, } from './container-runtime.js';
|
|
22
|
+
import { summariseProvisioning, describeProvisioning, retainProvisioningObservation } from './provisioning-outcome.js';
|
|
24
23
|
import { OMNITRON_PG_PORT, OMNITRON_PG_USER, OMNITRON_PG_PASSWORD, OMNITRON_PG_DATABASE, } from '../database/connection.js';
|
|
25
24
|
const RECONCILE_INTERVAL = 30_000; // 30s health sweep
|
|
26
25
|
const STARTUP_TIMEOUT = 120_000; // 2min max per service
|
|
27
|
-
/** Consecutive 'unhealthy' ticks before recreate. 2 ticks @ 30s = 60s grace. */
|
|
28
|
-
const UNHEALTHY_RESTART_THRESHOLD = 2;
|
|
29
26
|
/** Restart circuit-breaker: first failed-restart backoff, doubled each failure. */
|
|
30
27
|
const RESTART_BACKOFF_BASE = 30_000; // 30s
|
|
31
28
|
/** Restart circuit-breaker: backoff ceiling (30s → 1m → 2m … capped here). */
|
|
@@ -64,13 +61,13 @@ export function restartBackoffMs(failures) {
|
|
|
64
61
|
* Measured: `omnitron-pg`, created before published ports were bound to
|
|
65
62
|
* loopback, survived on 0.0.0.0:5480 through the fix that reached all eleven
|
|
66
63
|
* other managed containers, and still answered `nc -vz <lan-address> 5480`
|
|
67
|
-
* from another machine months later, while `
|
|
64
|
+
* from another machine months later, while `sample-dev-postgres` beside it in
|
|
68
65
|
* `docker ps` was correctly on 127.0.0.1.
|
|
69
66
|
*
|
|
70
67
|
* `reconcileName` is the subtlety. The control-plane database is ONE
|
|
71
68
|
* container per host — it owns port 5480 — but each daemon resolves a name
|
|
72
|
-
* carrying its own project prefix, so a daemon on the `
|
|
73
|
-
* computes `
|
|
69
|
+
* carrying its own project prefix, so a daemon on the `sample/dev` stack
|
|
70
|
+
* computes `sample-dev-pg` while the container that exists is `omnitron-pg`.
|
|
74
71
|
* Reconciling the running container against a spec under the OTHER name
|
|
75
72
|
* creates a second one and collides on the port; the first version of this
|
|
76
73
|
* did exactly that and corrected nothing. The name to reconcile is therefore
|
|
@@ -94,6 +91,7 @@ export class InfrastructureService {
|
|
|
94
91
|
presetRegistry;
|
|
95
92
|
serviceOverrides;
|
|
96
93
|
needsControlPlaneDatabase;
|
|
94
|
+
retiredStacks = new Set();
|
|
97
95
|
desiredContainers = [];
|
|
98
96
|
/** What the most recent reconcile did to each service. */
|
|
99
97
|
lastActions = new Map();
|
|
@@ -102,15 +100,8 @@ export class InfrastructureService {
|
|
|
102
100
|
healthTimer = null;
|
|
103
101
|
state = { services: {}, ready: false };
|
|
104
102
|
normalizedServices;
|
|
105
|
-
/**
|
|
106
|
-
|
|
107
|
-
* UNHEALTHY_RESTART_THRESHOLD ticks in a row to avoid flapping during
|
|
108
|
-
* cold-start / transient health-check timeouts. Reset to 0 on a healthy
|
|
109
|
-
* observation. Without this, a service that briefly fails one health
|
|
110
|
-
* probe (network blip, slow query) would be torn down and recreated,
|
|
111
|
-
* making transient pressure look like outages.
|
|
112
|
-
*/
|
|
113
|
-
unhealthyTicks = new Map();
|
|
103
|
+
/** Distinct completed probes and elapsed grace, bound to one native incarnation. */
|
|
104
|
+
unhealthyEvidence = new Map();
|
|
114
105
|
/**
|
|
115
106
|
* Per-service restart circuit-breaker. A container whose (re)create keeps
|
|
116
107
|
* failing — an image that won't pull, or infra stuck on an unrecoverable
|
|
@@ -127,6 +118,8 @@ export class InfrastructureService {
|
|
|
127
118
|
* once we know Docker is reachable; torn down in `teardown()`.
|
|
128
119
|
*/
|
|
129
120
|
phantomJanitor = null;
|
|
121
|
+
handoffMonitoring = false;
|
|
122
|
+
janitorNetworks = [];
|
|
130
123
|
constructor(logger, config, normalizedServices, presetRegistry,
|
|
131
124
|
/**
|
|
132
125
|
* Stack overrides. A service marked `disabled` here is not provisioned,
|
|
@@ -148,8 +141,14 @@ export class InfrastructureService {
|
|
|
148
141
|
this.presetRegistry = presetRegistry;
|
|
149
142
|
this.serviceOverrides = serviceOverrides;
|
|
150
143
|
this.needsControlPlaneDatabase = needsControlPlaneDatabase;
|
|
151
|
-
this.
|
|
144
|
+
this.presetRegistry ??= createDefaultRegistry();
|
|
145
|
+
if (!normalizedServices) {
|
|
146
|
+
normalizedServices = normalizeInfraConfig(config, this.presetRegistry);
|
|
147
|
+
}
|
|
148
|
+
this.normalizedServices = normalizedServices;
|
|
152
149
|
this.desiredContainers = resolveInfrastructure(config, normalizedServices, serviceOverrides);
|
|
150
|
+
for (const desired of this.desiredContainers)
|
|
151
|
+
containerResources(desired);
|
|
153
152
|
this.omnitronPgContainer = resolveOmnitronPg();
|
|
154
153
|
}
|
|
155
154
|
/**
|
|
@@ -166,24 +165,25 @@ export class InfrastructureService {
|
|
|
166
165
|
* benign collision — the shared service was actually fine).
|
|
167
166
|
*
|
|
168
167
|
* The intended semantics for shared infrastructure is "all apps that
|
|
169
|
-
* declare `postgres` use the same container", so
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
* can reconcile intent vs. config.
|
|
168
|
+
* declare `postgres` use the same container", so
|
|
169
|
+
* identical declarations are shared. Conflicting specifications refuse
|
|
170
|
+
* the plan before anything is provisioned.
|
|
173
171
|
*/
|
|
174
172
|
addAppContainers(containers) {
|
|
173
|
+
for (const desired of containers)
|
|
174
|
+
containerResources(desired);
|
|
175
|
+
if (this.monitoringRelinquished)
|
|
176
|
+
throw new Error('Infrastructure monitoring ownership has been relinquished');
|
|
177
|
+
if (this.ownershipFrozen)
|
|
178
|
+
throw new Error('Infrastructure ownership is frozen');
|
|
175
179
|
for (const c of containers) {
|
|
176
180
|
const existing = this.desiredContainers.find((d) => d.name === c.name);
|
|
177
181
|
if (!existing) {
|
|
178
182
|
this.desiredContainers.push(c);
|
|
179
183
|
continue;
|
|
180
184
|
}
|
|
181
|
-
if (
|
|
182
|
-
|
|
183
|
-
container: c.name,
|
|
184
|
-
existingImage: existing.image,
|
|
185
|
-
duplicateImage: c.image,
|
|
186
|
-
}, 'Duplicate container declaration with differing shape — keeping first; check for conflicting app infrastructure requirements (T#76)');
|
|
185
|
+
if (containerSpecHash(existing) !== containerSpecHash(c)) {
|
|
186
|
+
throw new Error(`Conflicting infrastructure declarations for ${c.name}; use one shared specification or distinct service names`);
|
|
187
187
|
}
|
|
188
188
|
// else: identical declaration, silent dedupe — this is the common case
|
|
189
189
|
}
|
|
@@ -193,7 +193,62 @@ export class InfrastructureService {
|
|
|
193
193
|
* Ensures Docker is available, pulls images, creates/starts containers,
|
|
194
194
|
* runs post-provisioning setup, and starts the health monitor.
|
|
195
195
|
*/
|
|
196
|
-
async provision() {
|
|
196
|
+
async provision(definition) {
|
|
197
|
+
if (this.monitoringRelinquished)
|
|
198
|
+
throw new Error('Infrastructure monitoring ownership has been relinquished');
|
|
199
|
+
if (this.ownershipFrozen)
|
|
200
|
+
throw new Error('Infrastructure ownership is frozen');
|
|
201
|
+
if (this.provisioning) {
|
|
202
|
+
if (definition)
|
|
203
|
+
throw new Error('Infrastructure provisioning is already in progress; retry the new declaration after it finishes');
|
|
204
|
+
return this.provisioning;
|
|
205
|
+
}
|
|
206
|
+
const task = this.provisionDefinition(definition);
|
|
207
|
+
this.provisioning = task;
|
|
208
|
+
try {
|
|
209
|
+
return await task;
|
|
210
|
+
}
|
|
211
|
+
finally {
|
|
212
|
+
if (this.provisioning === task)
|
|
213
|
+
this.provisioning = undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Resolve a plan without installing another monitor or changing the current definition. */
|
|
217
|
+
resolveDefinition(config, services, overrides) {
|
|
218
|
+
return new InfrastructureService(this.logger, config, services, this.presetRegistry, overrides, this.needsControlPlaneDatabase);
|
|
219
|
+
}
|
|
220
|
+
async provisionDefinition(definition) {
|
|
221
|
+
const monitored = this.healthTimer !== null;
|
|
222
|
+
this.definitionChanging = true;
|
|
223
|
+
try {
|
|
224
|
+
try {
|
|
225
|
+
// An old sweep must finish before fresh declarations can authorize native work.
|
|
226
|
+
const drained = await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values()]);
|
|
227
|
+
if (drained.some(result => result.status === 'rejected'))
|
|
228
|
+
throw new Error('In-flight infrastructure reconciliation failed; inspect it before retrying provisioning');
|
|
229
|
+
await this.phantomJanitor?.drain();
|
|
230
|
+
if (definition && this.ownershipFrozen)
|
|
231
|
+
throw new Error('Infrastructure ownership changed before the new declaration was applied');
|
|
232
|
+
if (definition)
|
|
233
|
+
this.replaceDefinitionFrom(definition);
|
|
234
|
+
this.state.ready = false;
|
|
235
|
+
}
|
|
236
|
+
finally {
|
|
237
|
+
this.definitionChanging = false;
|
|
238
|
+
}
|
|
239
|
+
return await this.provisionOwned();
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
// Failed Docker admission must not silently abandon previously owned services.
|
|
243
|
+
if (monitored && !this.ownershipFrozen && !this.monitoringRelinquished) {
|
|
244
|
+
this.startHealthMonitor();
|
|
245
|
+
this.phantomJanitor?.start();
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
async provisionOwned() {
|
|
250
|
+
for (const desired of [...this.desiredContainers, ...this.controlPlaneContainers()])
|
|
251
|
+
containerResources(desired);
|
|
197
252
|
// 1. Verify Docker is available
|
|
198
253
|
if (!(await isDockerAvailable())) {
|
|
199
254
|
throw new Error('Docker is not available. Omnitron requires Docker to manage infrastructure.\n' +
|
|
@@ -218,20 +273,17 @@ export class InfrastructureService {
|
|
|
218
273
|
// 0.0.0.0:5480 on a host whose firewall allows only SSH.
|
|
219
274
|
//
|
|
220
275
|
// The control plane's database belongs to the control plane.
|
|
221
|
-
this.logger.debug('
|
|
276
|
+
this.logger.debug('Control-plane database provisioning is outside this infrastructure allocation');
|
|
222
277
|
}
|
|
223
278
|
else if (decision.action === 'reconcile') {
|
|
224
279
|
this.usingGlobalOmnitronPg = true;
|
|
225
280
|
// A stack-prefixed leftover cannot run beside the global one — they
|
|
226
281
|
// share port 5480 — so it goes before anything else touches that port.
|
|
227
282
|
if (this.omnitronPgContainer.name !== decision.reconcileName) {
|
|
228
|
-
const stalePg = await getContainerState(this.omnitronPgContainer.name);
|
|
283
|
+
const stalePg = await getContainerState(this.omnitronPgContainer.name, { orThrow: true, fullId: true });
|
|
229
284
|
if (stalePg) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
this.logger.info({ service: this.omnitronPgContainer.name }, 'Removed stale stack-prefixed PG container');
|
|
233
|
-
}
|
|
234
|
-
catch { /* already gone */ }
|
|
285
|
+
await removeContainer(ownedContainerId(this.omnitronPgContainer, stalePg));
|
|
286
|
+
this.logger.info({ service: this.omnitronPgContainer.name }, 'Removed stale stack-prefixed PG container');
|
|
235
287
|
}
|
|
236
288
|
}
|
|
237
289
|
// The same reconcile, and so the same drift check, as every app
|
|
@@ -240,7 +292,7 @@ export class InfrastructureService {
|
|
|
240
292
|
// recreated into.
|
|
241
293
|
// Name AND volume, not one of them. `resolveOmnitronPg` derives both
|
|
242
294
|
// from the container prefix, so overriding only the name produced a
|
|
243
|
-
// container called `omnitron-pg` mounting `
|
|
295
|
+
// container called `omnitron-pg` mounting `sample-dev-pg-data` — the
|
|
244
296
|
// global identity on a stack-scoped volume, and the stack's own
|
|
245
297
|
// `omnitron-pg-data` left dangling where a `docker volume prune` would
|
|
246
298
|
// take it silently. The two names are one decision and must move
|
|
@@ -307,8 +359,9 @@ export class InfrastructureService {
|
|
|
307
359
|
// a Docker daemon restart / host suspend doesn't leave us
|
|
308
360
|
// unable to recreate containers ("endpoint with name X
|
|
309
361
|
// already exists in network ...").
|
|
362
|
+
this.janitorNetworks = [getManagedNetwork()];
|
|
310
363
|
this.phantomJanitor = new PhantomEndpointJanitor({
|
|
311
|
-
networks:
|
|
364
|
+
networks: this.janitorNetworks,
|
|
312
365
|
intervalMs: 60_000,
|
|
313
366
|
logger: this.logger,
|
|
314
367
|
});
|
|
@@ -343,9 +396,166 @@ export class InfrastructureService {
|
|
|
343
396
|
* attempted" by reading `state.services` alone: the second leaves no entry,
|
|
344
397
|
* and an absent entry is indistinguishable from an absent problem.
|
|
345
398
|
*/
|
|
399
|
+
/** Internal immutable plan. Never expose environment or command values through RPC. */
|
|
400
|
+
getDesiredContainers() {
|
|
401
|
+
return structuredClone(this.desiredContainers);
|
|
402
|
+
}
|
|
346
403
|
getDesiredServices() {
|
|
347
404
|
return this.desiredContainers.map((c) => ({ name: c.name, image: c.image }));
|
|
348
405
|
}
|
|
406
|
+
/**
|
|
407
|
+
* Transfer monitoring ownership to a freshly resolved declaration. This never
|
|
408
|
+
* provisions containers: retained specs must match; additions must already be
|
|
409
|
+
* running with exact native ownership and spec labels. Freeze and drain all
|
|
410
|
+
* earlier monitor/reconcile work before acknowledging a handoff.
|
|
411
|
+
*/
|
|
412
|
+
async refreshOwnershipFrom(candidate) {
|
|
413
|
+
if (this.ownershipFrozen || this.provisioning)
|
|
414
|
+
throw new Error('Infrastructure ownership refresh or provisioning already in progress');
|
|
415
|
+
this.ownershipFrozen = true;
|
|
416
|
+
try {
|
|
417
|
+
const drained = await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values()]);
|
|
418
|
+
if (drained.some(result => result.status === 'rejected'))
|
|
419
|
+
throw new Error('In-flight infrastructure reconciliation failed; retry ownership refresh');
|
|
420
|
+
const current = new Map(this.desiredContainers.map(c => [c.name, c]));
|
|
421
|
+
const next = new Map(candidate.desiredContainers.map(c => [c.name, c]));
|
|
422
|
+
if (next.size !== candidate.desiredContainers.length)
|
|
423
|
+
throw new Error('Duplicate desired container identity');
|
|
424
|
+
const adopted = [];
|
|
425
|
+
for (const [name, desired] of next) {
|
|
426
|
+
const prior = current.get(name);
|
|
427
|
+
if (prior) {
|
|
428
|
+
if (containerSpecHash(prior) !== containerSpecHash(desired) || !sameRecord(prior.labels, desired.labels)) {
|
|
429
|
+
throw new Error(`Ownership refresh cannot change retained service spec: ${name}`);
|
|
430
|
+
}
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
const actual = await getContainerState(name);
|
|
434
|
+
const labels = desired.labels;
|
|
435
|
+
if (!labels['omnitron.project'] || !labels['omnitron.stack'] || labels['omnitron.managed'] !== 'true' ||
|
|
436
|
+
actual?.status !== 'running' || actual.networkAttached === false || actual.specHash !== containerSpecHash(desired) || !containerResourcesMatch(desired, actual) ||
|
|
437
|
+
Object.entries(labels).some(([key, value]) => actual.labels?.[key] !== value)) {
|
|
438
|
+
throw new Error(`Cannot adopt service without matching running native ownership and spec: ${name}`);
|
|
439
|
+
}
|
|
440
|
+
adopted.push(name);
|
|
441
|
+
}
|
|
442
|
+
const released = [...current.keys()].filter(name => !next.has(name));
|
|
443
|
+
this.replaceDefinitionFrom(candidate);
|
|
444
|
+
return { released, adopted };
|
|
445
|
+
}
|
|
446
|
+
finally {
|
|
447
|
+
this.ownershipFrozen = false;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
/** Freeze and drain Docker mutations before another backend takes monitoring ownership. */
|
|
451
|
+
async prepareHandoff() {
|
|
452
|
+
if (this.ownershipFrozen)
|
|
453
|
+
throw new Error('Infrastructure ownership is already frozen');
|
|
454
|
+
this.ownershipFrozen = true;
|
|
455
|
+
this.handoffMonitoring = this.healthTimer !== null;
|
|
456
|
+
try {
|
|
457
|
+
const settled = await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values(), ...(this.provisioning ? [this.provisioning] : [])]);
|
|
458
|
+
if (settled.some(result => result.status === 'rejected'))
|
|
459
|
+
throw new Error('Infrastructure reconciliation failed while draining');
|
|
460
|
+
await this.phantomJanitor?.drain();
|
|
461
|
+
const observations = await InfrastructureService.validateHandoffContainers(this.desiredContainers, this.needsControlPlaneDatabase && !this.usingGlobalOmnitronPg ? this.omnitronPgContainer : undefined, this.state, { protocol: 1 });
|
|
462
|
+
this.dispose();
|
|
463
|
+
const snapshot = this.ownershipSnapshot(this.handoffMonitoring);
|
|
464
|
+
snapshot.nativeState = { protocol: 1, observations };
|
|
465
|
+
return snapshot;
|
|
466
|
+
}
|
|
467
|
+
catch (error) {
|
|
468
|
+
this.resumeAfterHandoff();
|
|
469
|
+
throw error;
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
captureRecoveryState() {
|
|
473
|
+
if (this.ownershipFrozen || this.provisioning || this.activeSweeps.size || this.reconcileTasks.size) {
|
|
474
|
+
throw new RecoveryBusyError('Infrastructure ownership is changing; a recovery snapshot is not ready');
|
|
475
|
+
}
|
|
476
|
+
return this.ownershipSnapshot(this.healthTimer !== null);
|
|
477
|
+
}
|
|
478
|
+
ownershipSnapshot(monitoring) {
|
|
479
|
+
return structuredClone({
|
|
480
|
+
nativeState: { protocol: 1 },
|
|
481
|
+
retiredStacks: [...this.retiredStacks],
|
|
482
|
+
config: this.config, containers: this.desiredContainers, normalizedServices: this.normalizedServices,
|
|
483
|
+
...(this.serviceOverrides && { serviceOverrides: this.serviceOverrides }),
|
|
484
|
+
state: this.state, usingGlobalOmnitronPg: this.usingGlobalOmnitronPg,
|
|
485
|
+
needsControlPlaneDatabase: this.needsControlPlaneDatabase, monitoring,
|
|
486
|
+
controlPlaneContainer: this.omnitronPgContainer, janitorNetworks: this.janitorNetworks,
|
|
487
|
+
// Protocol1 rollback readers retain the old field but restart their
|
|
488
|
+
// confirmation window; poll counts cannot encode native observations.
|
|
489
|
+
unhealthyTicks: [], unhealthyEvidence: [...this.unhealthyEvidence], restartBackoff: [...this.restartBackoff],
|
|
490
|
+
});
|
|
491
|
+
}
|
|
492
|
+
resumeAfterHandoff() {
|
|
493
|
+
if (this.monitoringRelinquished)
|
|
494
|
+
return;
|
|
495
|
+
this.ownershipFrozen = false;
|
|
496
|
+
if (this.handoffMonitoring)
|
|
497
|
+
this.startHealthMonitor();
|
|
498
|
+
if (!this.phantomJanitor && this.janitorNetworks.length) {
|
|
499
|
+
this.phantomJanitor = new PhantomEndpointJanitor({ networks: this.janitorNetworks, intervalMs: 60_000, logger: this.logger });
|
|
500
|
+
this.phantomJanitor.start();
|
|
501
|
+
}
|
|
502
|
+
this.handoffMonitoring = false;
|
|
503
|
+
}
|
|
504
|
+
/** Read and validate existing containers. Never provision, start or recreate during adoption. */
|
|
505
|
+
static async adoptHandoff(logger, snapshot) {
|
|
506
|
+
await InfrastructureService.validateHandoffContainers(snapshot.containers, snapshot.needsControlPlaneDatabase && !snapshot.usingGlobalOmnitronPg ? snapshot.controlPlaneContainer : undefined, snapshot.state, snapshot.nativeState);
|
|
507
|
+
const service = new InfrastructureService(logger, snapshot.config, snapshot.normalizedServices, undefined, snapshot.serviceOverrides, snapshot.needsControlPlaneDatabase);
|
|
508
|
+
service.desiredContainers = structuredClone(snapshot.containers);
|
|
509
|
+
for (const key of snapshot.retiredStacks ?? [])
|
|
510
|
+
service.retiredStacks.add(key);
|
|
511
|
+
service.omnitronPgContainer = structuredClone(snapshot.controlPlaneContainer);
|
|
512
|
+
service.janitorNetworks = [...snapshot.janitorNetworks];
|
|
513
|
+
service.unhealthyEvidence = new Map(snapshot.unhealthyEvidence ?? []);
|
|
514
|
+
service.restartBackoff = new Map(snapshot.restartBackoff);
|
|
515
|
+
Object.assign(service.state, structuredClone(snapshot.state));
|
|
516
|
+
service.usingGlobalOmnitronPg = snapshot.usingGlobalOmnitronPg;
|
|
517
|
+
service.handoffMonitoring = snapshot.monitoring;
|
|
518
|
+
service.ownershipFrozen = true;
|
|
519
|
+
return service;
|
|
520
|
+
}
|
|
521
|
+
static async validateHandoffContainers(containers, controlPlane, state, nativeState) {
|
|
522
|
+
if (nativeState && nativeState.protocol !== 1)
|
|
523
|
+
throw new Error('Unsupported infrastructure native observation protocol');
|
|
524
|
+
const desiredContainers = [...containers, ...(controlPlane ? [controlPlane] : [])];
|
|
525
|
+
const expected = nativeState?.observations && new Map(nativeState.observations.map(entry => [entry.name, entry.containerId]));
|
|
526
|
+
if (expected && (expected.size !== nativeState.observations.length || expected.size !== desiredContainers.length ||
|
|
527
|
+
desiredContainers.some(desired => !expected.has(desired.name))))
|
|
528
|
+
throw new Error('Incomplete infrastructure native observations');
|
|
529
|
+
const observations = [];
|
|
530
|
+
for (const desired of desiredContainers) {
|
|
531
|
+
const actual = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
532
|
+
const previous = state.services[desired.name];
|
|
533
|
+
// A failed creation owns no native container. Preserve that failure and
|
|
534
|
+
// its desired declaration; it must not make every backend upgrade fail.
|
|
535
|
+
// Missing previously observed or supposedly running resources still fail
|
|
536
|
+
// closed, as do legacy snapshots without the explicit protocol.
|
|
537
|
+
const failedCreation = nativeState?.protocol === 1 && previous?.status === 'exited' &&
|
|
538
|
+
!previous.containerId && typeof previous.error === 'string' && previous.error.length > 0;
|
|
539
|
+
if (!actual) {
|
|
540
|
+
if (!failedCreation || (expected && expected.get(desired.name) !== null))
|
|
541
|
+
throw new Error(`Infrastructure identity or specification changed during handoff: ${desired.name}`);
|
|
542
|
+
observations.push({ name: desired.name, containerId: null });
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
// Protocol 1 exported Docker's 12-character display ID. Keep its wire
|
|
546
|
+
// shape for rollback, while comparing a full prior state ID when present.
|
|
547
|
+
const matches = (id) => id?.length === 12
|
|
548
|
+
? actual.containerId?.startsWith(id) : id === actual.containerId;
|
|
549
|
+
if (!actual.containerId || actual.specHash !== containerSpecHash(desired) || !containerResourcesMatch(desired, actual) ||
|
|
550
|
+
(expected && !matches(expected.get(desired.name))) ||
|
|
551
|
+
(previous?.containerId && !matches(previous.containerId)) ||
|
|
552
|
+
Object.entries(desired.labels).some(([key, value]) => actual.labels?.[key] !== value)) {
|
|
553
|
+
throw new Error(`Infrastructure identity or specification changed during handoff: ${desired.name}`);
|
|
554
|
+
}
|
|
555
|
+
observations.push({ name: desired.name, containerId: actual.containerId.slice(0, 12) });
|
|
556
|
+
}
|
|
557
|
+
return observations;
|
|
558
|
+
}
|
|
349
559
|
/**
|
|
350
560
|
* Services whose socket is new since this reconcile began.
|
|
351
561
|
*
|
|
@@ -358,9 +568,9 @@ export class InfrastructureService {
|
|
|
358
568
|
.map(([name]) => name);
|
|
359
569
|
}
|
|
360
570
|
/**
|
|
361
|
-
*
|
|
571
|
+
* Release process-owned monitoring resources without changing infrastructure.
|
|
362
572
|
*/
|
|
363
|
-
|
|
573
|
+
dispose() {
|
|
364
574
|
this.stopHealthMonitor();
|
|
365
575
|
// T#75: stop the janitor BEFORE removing containers so a final
|
|
366
576
|
// tick can't race the teardown's `docker rm` and produce noisy
|
|
@@ -369,19 +579,89 @@ export class InfrastructureService {
|
|
|
369
579
|
this.phantomJanitor.stop();
|
|
370
580
|
this.phantomJanitor = null;
|
|
371
581
|
}
|
|
582
|
+
}
|
|
583
|
+
/** Permanently release this entire observer, preserving every native resource. */
|
|
584
|
+
async relinquishMonitoring() {
|
|
585
|
+
if (this.monitoringRelinquished)
|
|
586
|
+
return [...this.relinquishedNames];
|
|
587
|
+
if (this.ownershipFrozen)
|
|
588
|
+
throw new Error('Infrastructure ownership is already frozen');
|
|
589
|
+
this.ownershipFrozen = true;
|
|
590
|
+
this.handoffMonitoring = false;
|
|
591
|
+
this.stopHealthMonitor();
|
|
592
|
+
const settled = await Promise.allSettled([
|
|
593
|
+
...this.activeSweeps, ...this.reconcileTasks.values(), ...(this.provisioning ? [this.provisioning] : []),
|
|
594
|
+
]);
|
|
595
|
+
// An already admitted provision may have created its janitor while being
|
|
596
|
+
// drained. Take the current reference only after that actor has completed.
|
|
597
|
+
await this.phantomJanitor?.drain();
|
|
598
|
+
// Rejected tasks are also finished. Their diagnostic remains in the state;
|
|
599
|
+
// relinquishing authority neither retries nor reverses their native work.
|
|
600
|
+
const failed = settled.filter(result => result.status === 'rejected').length;
|
|
601
|
+
if (failed)
|
|
602
|
+
this.logger.warn({ failed }, 'Infrastructure monitoring released after earlier reconciliation failures');
|
|
603
|
+
this.relinquishedNames = [...new Set([...this.desiredContainers, ...this.controlPlaneContainers()].map(item => item.name))];
|
|
604
|
+
this.monitoringRelinquished = true;
|
|
605
|
+
this.dispose();
|
|
606
|
+
this.janitorNetworks = [];
|
|
607
|
+
return [...this.relinquishedNames];
|
|
608
|
+
}
|
|
609
|
+
/** Stop reconciliation for exactly one allocation, retaining every other scope. */
|
|
610
|
+
async retireStack(scope) {
|
|
611
|
+
if (this.monitoringRelinquished)
|
|
612
|
+
throw new Error('Infrastructure monitoring ownership has been relinquished');
|
|
613
|
+
if (this.ownershipFrozen)
|
|
614
|
+
throw new Error('Infrastructure ownership is frozen');
|
|
615
|
+
const key = `${scope.project}/${scope.stack}`;
|
|
616
|
+
this.retiredStacks.add(key);
|
|
617
|
+
await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values()]);
|
|
618
|
+
this.desiredContainers = this.desiredContainers.filter(container => this.containerScope(container) !== key);
|
|
619
|
+
}
|
|
620
|
+
resumeStack(scope) {
|
|
621
|
+
if (this.monitoringRelinquished)
|
|
622
|
+
throw new Error('Infrastructure monitoring ownership has been relinquished');
|
|
623
|
+
if (this.ownershipFrozen)
|
|
624
|
+
throw new Error('Infrastructure ownership is frozen');
|
|
625
|
+
this.retiredStacks.delete(`${scope.project}/${scope.stack}`);
|
|
626
|
+
}
|
|
627
|
+
containerScope(container) {
|
|
628
|
+
return `${container.labels?.['omnitron.project']}/${container.labels?.['omnitron.stack']}`;
|
|
629
|
+
}
|
|
630
|
+
/** Exact names this local infrastructure owner would remove, without exposing credentials in container specs. */
|
|
631
|
+
getTeardownNames() {
|
|
632
|
+
return [...[...this.desiredContainers].reverse(), ...this.controlPlaneContainers()].map(container => container.name);
|
|
633
|
+
}
|
|
634
|
+
/** Explicit infrastructure removal; process disposal alone preserves containers. */
|
|
635
|
+
async teardown() {
|
|
636
|
+
if (this.monitoringRelinquished)
|
|
637
|
+
throw new Error('Infrastructure monitoring ownership has been relinquished');
|
|
638
|
+
if (this.ownershipFrozen)
|
|
639
|
+
throw new Error('Infrastructure ownership is frozen');
|
|
640
|
+
this.ownershipFrozen = true;
|
|
641
|
+
this.stopHealthMonitor();
|
|
642
|
+
await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values(), ...(this.provisioning ? [this.provisioning] : [])]);
|
|
643
|
+
await this.phantomJanitor?.drain();
|
|
644
|
+
this.dispose();
|
|
372
645
|
// Remove all containers in parallel for fast shutdown — the control-plane
|
|
373
646
|
// database only where this service keeps one (`controlPlaneContainers`).
|
|
374
|
-
const allContainers = [...
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
647
|
+
const allContainers = [...this.desiredContainers, ...this.controlPlaneContainers()];
|
|
648
|
+
// Validate every target before removing the first. Absence is an idempotent success.
|
|
649
|
+
const reviewed = await Promise.all(allContainers.map(async (desired) => {
|
|
650
|
+
const actual = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
651
|
+
return actual ? ownedContainerId(desired, actual) : null;
|
|
652
|
+
}));
|
|
653
|
+
const results = await Promise.allSettled(reviewed.map(async (id, index) => {
|
|
654
|
+
if (!id)
|
|
655
|
+
return;
|
|
656
|
+
await removeContainer(id, { graceful: true });
|
|
657
|
+
this.logger.info({ service: allContainers[index].name }, 'Container removed');
|
|
383
658
|
}));
|
|
384
659
|
this.state.ready = false;
|
|
660
|
+
const failures = results.flatMap((result, index) => result.status === 'rejected'
|
|
661
|
+
? [new Error(`${allContainers[index].name}: ${String(result.reason)}`, { cause: result.reason })] : []);
|
|
662
|
+
if (failures.length) {
|
|
663
|
+
throw new AggregateError(failures, `Infrastructure stop incomplete: ${failures.map(error => error.message).join('; ')}`);
|
|
664
|
+
}
|
|
385
665
|
}
|
|
386
666
|
/**
|
|
387
667
|
* Get current infrastructure state.
|
|
@@ -389,24 +669,34 @@ export class InfrastructureService {
|
|
|
389
669
|
getState() {
|
|
390
670
|
return this.state;
|
|
391
671
|
}
|
|
392
|
-
/**
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
672
|
+
/** Called only after older native work has drained and new observations are held. */
|
|
673
|
+
replaceDefinitionFrom(candidate) {
|
|
674
|
+
if (candidate.needsControlPlaneDatabase !== this.needsControlPlaneDatabase)
|
|
675
|
+
throw new Error('Infrastructure declaration cannot change control-plane database ownership');
|
|
676
|
+
const next = new Map(candidate.desiredContainers.map(container => [container.name, container]));
|
|
677
|
+
if (next.size !== candidate.desiredContainers.length)
|
|
678
|
+
throw new Error('Duplicate desired container identity');
|
|
679
|
+
for (const container of this.desiredContainers) {
|
|
680
|
+
const replacement = next.get(container.name);
|
|
681
|
+
if (replacement && !sameRecord(container.labels, replacement.labels))
|
|
682
|
+
throw new Error(`Infrastructure declaration cannot change retained ownership: ${container.name}`);
|
|
683
|
+
}
|
|
684
|
+
const previousServices = this.normalizedServices;
|
|
685
|
+
for (const container of this.desiredContainers) {
|
|
686
|
+
const replacement = next.get(container.name);
|
|
687
|
+
if (!replacement || containerSpecHash(container) !== containerSpecHash(replacement)) {
|
|
688
|
+
delete this.state.services[container.name];
|
|
689
|
+
this.unhealthyEvidence.delete(container.name);
|
|
690
|
+
this.restartBackoff.delete(container.name);
|
|
691
|
+
this.lastActions.delete(container.name);
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
this.config = candidate.config;
|
|
695
|
+
this.normalizedServices = candidate.normalizedServices;
|
|
696
|
+
this.serviceOverrides = candidate.serviceOverrides;
|
|
697
|
+
this.desiredContainers = [...candidate.desiredContainers];
|
|
698
|
+
this.invalidateChangedSetup(previousServices);
|
|
699
|
+
this.state.ready = summariseProvisioning(this.desiredContainers, this.state.services).ready;
|
|
410
700
|
}
|
|
411
701
|
/**
|
|
412
702
|
* Get normalized services (from preset system).
|
|
@@ -427,6 +717,15 @@ export class InfrastructureService {
|
|
|
427
717
|
return [];
|
|
428
718
|
return Object.keys(pg.databases);
|
|
429
719
|
}
|
|
720
|
+
/** The bucket inventory declared to the same MinIO provisioner. */
|
|
721
|
+
getMinioBuckets() {
|
|
722
|
+
const buckets = this.normalizedServices['minio']?._presetConfig?.['buckets'] ?? this.config.minio?.buckets;
|
|
723
|
+
if (buckets === undefined)
|
|
724
|
+
return [];
|
|
725
|
+
if (!Array.isArray(buckets) || buckets.some(bucket => typeof bucket !== 'string'))
|
|
726
|
+
throw new Error('Invalid declared MinIO bucket inventory');
|
|
727
|
+
return [...new Set(buckets)];
|
|
728
|
+
}
|
|
430
729
|
/**
|
|
431
730
|
* Resolved container name for an infra service (e.g. 'postgres' →
|
|
432
731
|
* 'acme-dev-postgres'). Taken from the already-resolved desired containers
|
|
@@ -467,12 +766,16 @@ export class InfrastructureService {
|
|
|
467
766
|
}
|
|
468
767
|
case 'minio': {
|
|
469
768
|
const minio = this.config.minio;
|
|
470
|
-
|
|
769
|
+
const name = this.getResolvedContainerName('minio');
|
|
770
|
+
const resolved = this.desiredContainers.find(container => container.name === name);
|
|
771
|
+
if (!resolved && !minio)
|
|
471
772
|
return null;
|
|
773
|
+
// Use the provisioner's resolved specification for both declaration forms.
|
|
774
|
+
// Reading only legacy `minio` loses credentials when `services.minio` overrides it.
|
|
472
775
|
return {
|
|
473
|
-
endpoint: `http://${LOCAL_INFRA_HOST}:${minio
|
|
474
|
-
accessKey: minio
|
|
475
|
-
secretKey: typeof minio
|
|
776
|
+
endpoint: `http://${LOCAL_INFRA_HOST}:${resolved?.ports.find(port => port.container === 9000)?.host ?? minio?.ports?.api ?? 9000}`,
|
|
777
|
+
accessKey: resolved?.environment['MINIO_ROOT_USER'] ?? minio?.accessKey ?? 'minioadmin',
|
|
778
|
+
secretKey: resolved?.environment['MINIO_ROOT_PASSWORD'] ?? (typeof minio?.secretKey === 'string' ? minio.secretKey : 'minioadmin'),
|
|
476
779
|
forcePathStyle: true,
|
|
477
780
|
};
|
|
478
781
|
}
|
|
@@ -502,6 +805,13 @@ export class InfrastructureService {
|
|
|
502
805
|
* own restart-policy in the mix) occasional duplicate containers.
|
|
503
806
|
*/
|
|
504
807
|
reconciling = new Set();
|
|
808
|
+
reconcileTasks = new Map();
|
|
809
|
+
activeSweeps = new Set();
|
|
810
|
+
ownershipFrozen = false;
|
|
811
|
+
definitionChanging = false;
|
|
812
|
+
monitoringRelinquished = false;
|
|
813
|
+
provisioning;
|
|
814
|
+
relinquishedNames = [];
|
|
505
815
|
/**
|
|
506
816
|
* Where this node keeps each service's config files, once a master sent them.
|
|
507
817
|
*
|
|
@@ -534,22 +844,31 @@ export class InfrastructureService {
|
|
|
534
844
|
return;
|
|
535
845
|
this.desiredContainers = resolveInfrastructure(this.config, this.normalizedServices, this.serviceOverrides, roots, { redis, staticRoots, ...(staticLinkRoots && { staticLinkRoots }) });
|
|
536
846
|
}
|
|
537
|
-
|
|
847
|
+
reconcileService(desired) {
|
|
848
|
+
return this.withContainerReconciliation(desired, () => this.reconcileServiceLocked(desired));
|
|
849
|
+
}
|
|
850
|
+
async withContainerReconciliation(desired, operation) {
|
|
538
851
|
// T#58: per-name lock around the whole inspect→decide→act loop.
|
|
539
|
-
if (this.reconciling.has(desired.name)) {
|
|
852
|
+
if (this.ownershipFrozen || this.definitionChanging || this.retiredStacks.has(this.containerScope(desired)) || this.reconciling.has(desired.name)) {
|
|
540
853
|
this.logger.debug({ service: desired.name }, 'Reconcile already in flight — skipping');
|
|
541
854
|
return;
|
|
542
855
|
}
|
|
543
856
|
this.reconciling.add(desired.name);
|
|
544
857
|
try {
|
|
545
|
-
|
|
858
|
+
const task = operation();
|
|
859
|
+
this.reconcileTasks.set(desired.name, task);
|
|
860
|
+
await task;
|
|
546
861
|
}
|
|
547
862
|
finally {
|
|
548
863
|
this.reconciling.delete(desired.name);
|
|
864
|
+
this.reconcileTasks.delete(desired.name);
|
|
549
865
|
}
|
|
550
866
|
}
|
|
551
867
|
async reconcileServiceLocked(desired) {
|
|
552
|
-
const actual = await getContainerState(desired.name);
|
|
868
|
+
const actual = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
869
|
+
if (this.ownershipFrozen || this.definitionChanging || this.retiredStacks.has(this.containerScope(desired)))
|
|
870
|
+
return;
|
|
871
|
+
const id = actual && ownedContainerId(desired, actual);
|
|
553
872
|
const action = this.computeAction(desired, actual);
|
|
554
873
|
// A container that was created, started or recreated is listening on a
|
|
555
874
|
// NEW socket. Applications already running hold pools pointing at the
|
|
@@ -568,12 +887,12 @@ export class InfrastructureService {
|
|
|
568
887
|
break;
|
|
569
888
|
case 'start':
|
|
570
889
|
this.logger.info({ service: desired.name }, 'Starting existing service');
|
|
571
|
-
await startContainer(
|
|
572
|
-
await this.waitHealthy(
|
|
890
|
+
await startContainer(id);
|
|
891
|
+
await this.waitHealthy(id);
|
|
573
892
|
break;
|
|
574
893
|
case 'recreate':
|
|
575
894
|
this.logger.info({ service: desired.name, reason: action.reason }, 'Recreating service');
|
|
576
|
-
await removeContainer(
|
|
895
|
+
await removeContainer(id);
|
|
577
896
|
await this.createAndStart(desired);
|
|
578
897
|
break;
|
|
579
898
|
case 'remove':
|
|
@@ -583,15 +902,48 @@ export class InfrastructureService {
|
|
|
583
902
|
break;
|
|
584
903
|
}
|
|
585
904
|
// Update state
|
|
586
|
-
const newState = await getContainerState(desired.name);
|
|
905
|
+
const newState = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
587
906
|
if (newState) {
|
|
588
|
-
this.
|
|
907
|
+
this.recordContainerObservation(desired, newState);
|
|
908
|
+
}
|
|
909
|
+
}
|
|
910
|
+
async recoverUnhealthyLocked(desired, actual, previous) {
|
|
911
|
+
// Recheck immediately before destruction: queued polls, recovery and
|
|
912
|
+
// replacement while inspecting must not authorize a stale decision.
|
|
913
|
+
const confirmed = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
914
|
+
if (this.ownershipFrozen || this.definitionChanging || this.retiredStacks.has(this.containerScope(desired)))
|
|
915
|
+
return;
|
|
916
|
+
if (!confirmed || confirmed.containerId !== actual.containerId || confirmed.startedAt !== actual.startedAt ||
|
|
917
|
+
Date.parse(confirmed.healthCheck?.completedAt ?? '') < Date.parse(actual.healthCheck.completedAt) ||
|
|
918
|
+
!observeUnhealthy(previous, confirmed, Date.now()).restart) {
|
|
919
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
920
|
+
this.logger.info({ service: desired.name }, 'Health recovery decision changed before restart; keeping the container');
|
|
921
|
+
}
|
|
922
|
+
else {
|
|
923
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
924
|
+
const failures = (this.restartBackoff.get(desired.name)?.failures ?? 0) + 1;
|
|
925
|
+
const backoffMs = restartBackoffMs(failures);
|
|
926
|
+
// Count attempts until an observed healthy container recovers.
|
|
927
|
+
// A successful create alone cannot erase repeated health failure.
|
|
928
|
+
this.restartBackoff.set(desired.name, { failures, nextAttemptAt: Date.now() + backoffMs });
|
|
929
|
+
this.logger.warn({ service: desired.name, nativeCheck: confirmed.healthCheck, failures, backoffMs }, 'Confirmed sustained native health failure — restarting container');
|
|
930
|
+
try {
|
|
931
|
+
await removeContainer(ownedContainerId(desired, confirmed));
|
|
932
|
+
await this.createAndStart(desired);
|
|
933
|
+
}
|
|
934
|
+
catch (err) {
|
|
935
|
+
this.logger.error({ service: desired.name, error: describeError(err, 0, Object.values(desired.environment)), failures, backoffMs }, 'Health restart failed; recovery backoff retained');
|
|
936
|
+
}
|
|
589
937
|
}
|
|
590
938
|
}
|
|
591
939
|
computeAction(desired, actual) {
|
|
940
|
+
containerResources(desired);
|
|
592
941
|
if (!actual) {
|
|
593
942
|
return { type: 'create', service: desired.name, config: desired };
|
|
594
943
|
}
|
|
944
|
+
if (!containerResourcesMatch(desired, actual)) {
|
|
945
|
+
return { type: 'recreate', service: desired.name, config: desired, reason: 'resource limits differ from Docker inspection' };
|
|
946
|
+
}
|
|
595
947
|
if (actual.status === 'running') {
|
|
596
948
|
// Running but detached from all networks (OrbStack/dockerd-restart
|
|
597
949
|
// artifact): the container is unreachable and its published ports are
|
|
@@ -638,7 +990,7 @@ export class InfrastructureService {
|
|
|
638
990
|
// A container that is not running still carries the spec it was created
|
|
639
991
|
// with, and `start` runs THAT spec. The drift checks above were only
|
|
640
992
|
// asked of a running container, so one created wrong was started wrong
|
|
641
|
-
// for as long as it existed: Nominatim on
|
|
993
|
+
// for as long as it existed: Nominatim on sample/test, created at 05:37
|
|
642
994
|
// with a mount the master had not rewritten, was «started» by every
|
|
643
995
|
// reconcile after the fix that corrected its desired spec — «exec:
|
|
644
996
|
// /opt/nominatim-tools/cis-entrypoint.sh: no such file» each time
|
|
@@ -673,6 +1025,7 @@ export class InfrastructureService {
|
|
|
673
1025
|
};
|
|
674
1026
|
}
|
|
675
1027
|
async createAndStart(desired) {
|
|
1028
|
+
containerResources(desired);
|
|
676
1029
|
// Ensure volumes exist
|
|
677
1030
|
for (const vol of desired.volumes) {
|
|
678
1031
|
if (!vol.source.startsWith('/') && !vol.source.startsWith('.')) {
|
|
@@ -690,41 +1043,30 @@ export class InfrastructureService {
|
|
|
690
1043
|
this.logger.info({ service: desired.name }, 'Non-critical service — skipping health wait');
|
|
691
1044
|
}
|
|
692
1045
|
else {
|
|
693
|
-
await this.waitHealthy(
|
|
1046
|
+
await this.waitHealthy(id);
|
|
694
1047
|
}
|
|
695
1048
|
}
|
|
696
1049
|
async waitHealthy(name) {
|
|
697
1050
|
// Poll Docker health via async CLI — avoids blocking event loop
|
|
698
|
-
const {
|
|
1051
|
+
const { execFile } = await import('node:child_process');
|
|
699
1052
|
const { promisify } = await import('node:util');
|
|
700
|
-
const
|
|
1053
|
+
const inspect = promisify(execFile);
|
|
701
1054
|
const startTime = Date.now();
|
|
702
|
-
const pollInterval = 2000;
|
|
703
1055
|
while (Date.now() - startTime < STARTUP_TIMEOUT) {
|
|
704
1056
|
try {
|
|
705
|
-
const { stdout } = await
|
|
706
|
-
const
|
|
707
|
-
if (
|
|
708
|
-
|
|
1057
|
+
const { stdout } = await inspect('docker', ['inspect', '--format', '{{json .State}}', '--', name], { encoding: 'utf8', timeout: 5000 });
|
|
1058
|
+
const state = JSON.parse(stdout);
|
|
1059
|
+
if (state.Health?.Status === 'healthy' || (state.Status === 'running' && (!state.Health || state.Health.Status === 'none')))
|
|
1060
|
+
return;
|
|
1061
|
+
if (state.Status === 'exited' || state.Status === 'dead') {
|
|
1062
|
+
this.logger.warn({ service: name, status: state.Status }, 'Container not running');
|
|
709
1063
|
return;
|
|
710
|
-
}
|
|
711
|
-
if (output === 'none' || output === '') {
|
|
712
|
-
const { stdout: statusOut } = await execAsync(`docker inspect --format='{{.State.Status}}' ${name} 2>/dev/null || echo "missing"`, { encoding: 'utf-8', timeout: 5000 });
|
|
713
|
-
const status = (statusOut ?? '').trim().replace(/'/g, '');
|
|
714
|
-
if (status === 'running') {
|
|
715
|
-
this.logger.info({ service: name, elapsed: Date.now() - startTime }, 'Service running (no health check)');
|
|
716
|
-
return;
|
|
717
|
-
}
|
|
718
|
-
if (status === 'exited' || status === 'dead' || status === 'missing') {
|
|
719
|
-
this.logger.warn({ service: name, status }, 'Container not running');
|
|
720
|
-
return;
|
|
721
|
-
}
|
|
722
1064
|
}
|
|
723
1065
|
}
|
|
724
1066
|
catch {
|
|
725
1067
|
// docker CLI failed — retry
|
|
726
1068
|
}
|
|
727
|
-
await new Promise((r) => setTimeout(r,
|
|
1069
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
728
1070
|
}
|
|
729
1071
|
this.logger.warn({ service: name, timeout: STARTUP_TIMEOUT }, 'Service did not become healthy within timeout');
|
|
730
1072
|
}
|
|
@@ -738,41 +1080,40 @@ export class InfrastructureService {
|
|
|
738
1080
|
* Generic post-provision: iterate all services, call preset hooks.
|
|
739
1081
|
* Replaces hardcoded createPostgresDatabases() / createMinioBuckets().
|
|
740
1082
|
*/
|
|
741
|
-
|
|
1083
|
+
requiresPostProvision(desired) {
|
|
1084
|
+
const requirement = this.normalizedServices[desired.labels['omnitron.service'] ?? ''];
|
|
1085
|
+
if (!requirement?._preset)
|
|
1086
|
+
return false;
|
|
1087
|
+
const preset = this.presetRegistry?.get(requirement._preset);
|
|
1088
|
+
return !preset || Boolean(preset.postProvision);
|
|
1089
|
+
}
|
|
1090
|
+
recordContainerObservation(desired, actual) {
|
|
1091
|
+
this.state.services[desired.name] = retainProvisioningObservation(actual, this.state.services[desired.name], this.requiresPostProvision(desired));
|
|
1092
|
+
}
|
|
1093
|
+
invalidateChangedSetup(previous) {
|
|
1094
|
+
for (const container of this.desiredContainers) {
|
|
1095
|
+
const name = container.labels['omnitron.service'] ?? '';
|
|
1096
|
+
const state = this.state.services[container.name];
|
|
1097
|
+
if (state && this.requiresPostProvision(container) && !isDeepStrictEqual(previous[name], this.normalizedServices[name])) {
|
|
1098
|
+
state.provisioning = 'pending';
|
|
1099
|
+
state.error = 'Declared service setup changed and must be verified';
|
|
1100
|
+
this.state.ready = false;
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
async runPresetPostProvisionHooks(only) {
|
|
742
1105
|
const { execFile } = await import('node:child_process');
|
|
743
1106
|
const { promisify } = await import('node:util');
|
|
744
1107
|
const execFileAsync = promisify(execFile);
|
|
745
|
-
// A preset hook is what creates the databases inside Postgres and the
|
|
746
|
-
// buckets inside MinIO — the containers are running either way, so a
|
|
747
|
-
// failure here is invisible until an application cannot find its
|
|
748
|
-
// database.
|
|
749
|
-
//
|
|
750
|
-
// `this.presetRegistry!` asserted a dependency the constructor declares
|
|
751
|
-
// OPTIONAL, so a caller that did not pass one — which the type permits —
|
|
752
|
-
// got `Cannot read properties of undefined (reading 'get')` from a line
|
|
753
|
-
// that reads as internal, after every container was already up.
|
|
754
|
-
// Measured on a node provisioning a stack, where the containers stayed
|
|
755
|
-
// and the databases were never made.
|
|
756
|
-
if (!this.presetRegistry) {
|
|
757
|
-
const withPresets = Object.entries(this.normalizedServices)
|
|
758
|
-
.filter(([, r]) => r._preset)
|
|
759
|
-
.map(([name]) => name);
|
|
760
|
-
if (withPresets.length > 0) {
|
|
761
|
-
this.logger.error({ services: withPresets }, 'No preset registry, so post-provision steps were skipped — these services are running but their databases and buckets were not created');
|
|
762
|
-
}
|
|
763
|
-
return;
|
|
764
|
-
}
|
|
765
1108
|
for (const [serviceName, requirement] of Object.entries(this.normalizedServices)) {
|
|
766
1109
|
if (!requirement._preset)
|
|
767
1110
|
continue;
|
|
768
|
-
const preset = this.presetRegistry
|
|
769
|
-
if (!preset
|
|
1111
|
+
const preset = this.presetRegistry?.get(requirement._preset);
|
|
1112
|
+
if (preset && !preset.postProvision)
|
|
770
1113
|
continue;
|
|
771
|
-
const container = this.desiredContainers.find((c) => c.
|
|
772
|
-
if (!container)
|
|
1114
|
+
const container = this.desiredContainers.find((c) => c.labels['omnitron.service'] === serviceName);
|
|
1115
|
+
if (!container || (only && container.name !== only.name))
|
|
773
1116
|
continue;
|
|
774
|
-
const cName = container.name;
|
|
775
|
-
await waitForHealthy(cName, 30_000);
|
|
776
1117
|
// Resolve secrets from requirement
|
|
777
1118
|
const secrets = {};
|
|
778
1119
|
if (requirement.secrets) {
|
|
@@ -780,24 +1121,47 @@ export class InfrastructureService {
|
|
|
780
1121
|
secrets[k] = typeof v === 'string' ? v : '';
|
|
781
1122
|
}
|
|
782
1123
|
}
|
|
783
|
-
const
|
|
784
|
-
const { stdout } = await execFileAsync('docker', ['exec', cName, ...command], {
|
|
785
|
-
encoding: 'utf-8',
|
|
786
|
-
timeout: 10_000,
|
|
787
|
-
});
|
|
788
|
-
return (stdout ?? '').trim();
|
|
789
|
-
};
|
|
1124
|
+
const safeError = (error) => describeError(error, 0, Object.values(secrets));
|
|
790
1125
|
try {
|
|
1126
|
+
const actual = await getContainerState(container.name, { orThrow: true, fullId: true });
|
|
1127
|
+
if (!actual)
|
|
1128
|
+
throw new Error('Declared service container is absent');
|
|
1129
|
+
const cName = ownedContainerId(container, actual);
|
|
1130
|
+
this.state.services[container.name] = { ...actual, provisioning: 'pending', error: 'Declared service setup is in progress' };
|
|
1131
|
+
if (!preset)
|
|
1132
|
+
throw new Error(`Preset '${requirement._preset}' is unavailable; declared service setup cannot be verified`);
|
|
1133
|
+
if (!await waitForHealthy(cName, 30_000))
|
|
1134
|
+
throw new Error('Container did not become healthy before declared service setup');
|
|
791
1135
|
await preset.postProvision({
|
|
792
|
-
containerName:
|
|
1136
|
+
containerName: container.name,
|
|
793
1137
|
userConfig: requirement._presetConfig ?? {},
|
|
794
1138
|
secrets,
|
|
795
|
-
execInContainer:
|
|
1139
|
+
execInContainer: async (command) => {
|
|
1140
|
+
try {
|
|
1141
|
+
const { stdout } = await execFileAsync('docker', ['exec', cName, ...command], { encoding: 'utf-8', timeout: 10_000 });
|
|
1142
|
+
return (stdout ?? '').trim();
|
|
1143
|
+
}
|
|
1144
|
+
catch (error) {
|
|
1145
|
+
// Raw subprocess causes include credential arguments. Preserve only the sanitized cause.
|
|
1146
|
+
// eslint-disable-next-line preserve-caught-error
|
|
1147
|
+
throw new Error('Declared service setup command failed', { cause: safeError(error) });
|
|
1148
|
+
}
|
|
1149
|
+
},
|
|
796
1150
|
logger: this.logger,
|
|
797
1151
|
});
|
|
1152
|
+
const confirmed = await getContainerState(container.name, { orThrow: true, fullId: true });
|
|
1153
|
+
if (!confirmed || confirmed.status !== 'running' || confirmed.health === 'unhealthy' ||
|
|
1154
|
+
confirmed.containerId !== actual.containerId || confirmed.startedAt !== actual.startedAt)
|
|
1155
|
+
throw new Error('Container generation changed during declared service setup');
|
|
1156
|
+
this.state.services[container.name] = { ...confirmed, provisioning: 'ready' };
|
|
798
1157
|
}
|
|
799
1158
|
catch (err) {
|
|
800
|
-
|
|
1159
|
+
const error = `Post-provisioning '${serviceName}': ${safeError(err)}`;
|
|
1160
|
+
this.state.services[container.name] = {
|
|
1161
|
+
...(this.state.services[container.name] ?? { name: container.name, image: container.image, status: 'not_found' }),
|
|
1162
|
+
provisioning: 'failed', error,
|
|
1163
|
+
};
|
|
1164
|
+
this.logger.error({ service: serviceName, preset: requirement._preset, error }, 'Post-provision hook failed');
|
|
801
1165
|
}
|
|
802
1166
|
}
|
|
803
1167
|
}
|
|
@@ -838,6 +1202,8 @@ export class InfrastructureService {
|
|
|
838
1202
|
// Private — Health Monitor (Self-Healing)
|
|
839
1203
|
// ===========================================================================
|
|
840
1204
|
startHealthMonitor() {
|
|
1205
|
+
if (this.monitoringRelinquished || this.ownershipFrozen || this.healthTimer)
|
|
1206
|
+
return;
|
|
841
1207
|
this.healthTimer = setInterval(() => {
|
|
842
1208
|
this.healthSweep().catch((err) => {
|
|
843
1209
|
this.logger.error({ error: err.message }, 'Health sweep failed');
|
|
@@ -858,7 +1224,7 @@ export class InfrastructureService {
|
|
|
858
1224
|
*
|
|
859
1225
|
* `provision()` asked `needsControlPlaneDatabase`; the health sweep and the
|
|
860
1226
|
* teardown asked only `usingGlobalOmnitronPg`. So on a node the sweep found
|
|
861
|
-
* `<prefix>-pg` «not running» every 30 s and created it:
|
|
1227
|
+
* `<prefix>-pg` «not running» every 30 s and created it: sample/test got one on
|
|
862
1228
|
* 2026-09-20, and again on 2026-09-25 forty seconds after it was removed —
|
|
863
1229
|
* on the default credentials, for a database nothing reads.
|
|
864
1230
|
*/
|
|
@@ -866,11 +1232,27 @@ export class InfrastructureService {
|
|
|
866
1232
|
return this.needsControlPlaneDatabase && !this.usingGlobalOmnitronPg ? [this.omnitronPgContainer] : [];
|
|
867
1233
|
}
|
|
868
1234
|
async healthSweep() {
|
|
1235
|
+
if (this.ownershipFrozen || this.provisioning || this.activeSweeps.size)
|
|
1236
|
+
return;
|
|
1237
|
+
const task = this.healthSweepOwned();
|
|
1238
|
+
this.activeSweeps.add(task);
|
|
1239
|
+
try {
|
|
1240
|
+
await task;
|
|
1241
|
+
}
|
|
1242
|
+
finally {
|
|
1243
|
+
this.activeSweeps.delete(task);
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
async healthSweepOwned() {
|
|
869
1247
|
// The control-plane database alongside the app containers, where this
|
|
870
1248
|
// service keeps one.
|
|
871
1249
|
const allContainers = [...this.controlPlaneContainers(), ...this.desiredContainers];
|
|
872
1250
|
for (const desired of allContainers) {
|
|
873
|
-
const actual = await getContainerState(desired.name);
|
|
1251
|
+
const actual = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
1252
|
+
if (this.ownershipFrozen || this.definitionChanging)
|
|
1253
|
+
return;
|
|
1254
|
+
if (this.retiredStacks.has(this.containerScope(desired)))
|
|
1255
|
+
continue;
|
|
874
1256
|
// T#58: Docker's own `--restart=always` / `--restart=on-failure`
|
|
875
1257
|
// policy puts the container into the 'restarting' state for the
|
|
876
1258
|
// brief window between exit and re-entry. If we recreate during
|
|
@@ -879,11 +1261,12 @@ export class InfrastructureService {
|
|
|
879
1261
|
// may end up duplicated under a renamed transient. Let Docker
|
|
880
1262
|
// finish; the next 30s tick will see 'running' and skip.
|
|
881
1263
|
if (actual?.status === 'restarting') {
|
|
1264
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
882
1265
|
this.logger.debug({ service: desired.name }, "Service is restarting via Docker's own policy — yielding to it (T#58)");
|
|
883
1266
|
continue;
|
|
884
1267
|
}
|
|
885
1268
|
if (!actual || actual.status !== 'running') {
|
|
886
|
-
this.
|
|
1269
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
887
1270
|
// Circuit-breaker: while a service is inside its backoff window, skip
|
|
888
1271
|
// the restart so a permanently-failing container can't hammer the
|
|
889
1272
|
// supervisor every tick and starve the daemon's event loop.
|
|
@@ -895,7 +1278,6 @@ export class InfrastructureService {
|
|
|
895
1278
|
this.logger.warn({ service: desired.name, status: actual?.status ?? 'not_found' }, 'Service not running — auto-restarting');
|
|
896
1279
|
try {
|
|
897
1280
|
await this.reconcileService(desired);
|
|
898
|
-
this.restartBackoff.delete(desired.name);
|
|
899
1281
|
}
|
|
900
1282
|
catch (err) {
|
|
901
1283
|
const failures = (this.restartBackoff.get(desired.name)?.failures ?? 0) + 1;
|
|
@@ -905,65 +1287,109 @@ export class InfrastructureService {
|
|
|
905
1287
|
}
|
|
906
1288
|
}
|
|
907
1289
|
else if (actual.health === 'unhealthy') {
|
|
908
|
-
const
|
|
909
|
-
|
|
910
|
-
if (
|
|
911
|
-
this.
|
|
1290
|
+
const previous = this.unhealthyEvidence.get(desired.name);
|
|
1291
|
+
const observation = observeUnhealthy(previous, actual, Date.now());
|
|
1292
|
+
if (observation.evidence)
|
|
1293
|
+
this.unhealthyEvidence.set(desired.name, observation.evidence);
|
|
1294
|
+
else
|
|
1295
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
1296
|
+
const backoff = this.restartBackoff.get(desired.name);
|
|
1297
|
+
if (backoff && Date.now() < backoff.nextAttemptAt) {
|
|
1298
|
+
this.logger.debug({ service: desired.name, retryInMs: backoff.nextAttemptAt - Date.now() }, 'Service unhealthy — recovery backoff remains active');
|
|
1299
|
+
}
|
|
1300
|
+
else if (!observation.restart) {
|
|
1301
|
+
this.logger.warn({ service: desired.name, reason: observation.reason, nativeCheck: actual.healthCheck }, 'Service unhealthy — waiting for confirmed native failure');
|
|
912
1302
|
}
|
|
913
1303
|
else {
|
|
914
|
-
this.
|
|
915
|
-
this.logger.warn({ service: desired.name, consecutiveUnhealthy: ticks }, 'Service unhealthy past threshold — restarting container');
|
|
916
|
-
try {
|
|
917
|
-
await removeContainer(desired.name);
|
|
918
|
-
await this.createAndStart(desired);
|
|
919
|
-
}
|
|
920
|
-
catch (err) {
|
|
921
|
-
this.logger.error({ service: desired.name, error: err.message }, 'Health restart failed');
|
|
922
|
-
}
|
|
1304
|
+
await this.withContainerReconciliation(desired, () => this.recoverUnhealthyLocked(desired, actual, previous));
|
|
923
1305
|
}
|
|
924
1306
|
}
|
|
925
1307
|
else {
|
|
926
|
-
//
|
|
927
|
-
//
|
|
928
|
-
|
|
929
|
-
this.
|
|
930
|
-
|
|
1308
|
+
// A starting container is not evidence of recovery. Retain backoff
|
|
1309
|
+
// until a running container is healthy (or declares no native probe).
|
|
1310
|
+
this.unhealthyEvidence.delete(desired.name);
|
|
1311
|
+
if ((actual.health === 'healthy' || actual.health === 'none') && this.state.services[desired.name]?.provisioning !== 'failed')
|
|
1312
|
+
this.restartBackoff.delete(desired.name);
|
|
931
1313
|
}
|
|
932
1314
|
// Update state
|
|
933
|
-
const newState = await getContainerState(desired.name);
|
|
1315
|
+
const newState = await getContainerState(desired.name, { orThrow: true, fullId: true });
|
|
934
1316
|
if (newState) {
|
|
935
|
-
this.
|
|
1317
|
+
this.recordContainerObservation(desired, newState);
|
|
1318
|
+
const state = this.state.services[desired.name];
|
|
1319
|
+
if (state.status === 'running' && state.health !== 'unhealthy' &&
|
|
1320
|
+
(state.provisioning === 'pending' || state.provisioning === 'failed') &&
|
|
1321
|
+
Date.now() >= (this.restartBackoff.get(desired.name)?.nextAttemptAt ?? 0)) {
|
|
1322
|
+
await this.runPresetPostProvisionHooks(desired);
|
|
1323
|
+
if (this.state.services[desired.name]?.provisioning === 'ready') {
|
|
1324
|
+
if (this.state.services[desired.name]?.health === 'healthy' || this.state.services[desired.name]?.health === 'none')
|
|
1325
|
+
this.restartBackoff.delete(desired.name);
|
|
1326
|
+
}
|
|
1327
|
+
else {
|
|
1328
|
+
const failures = (this.restartBackoff.get(desired.name)?.failures ?? 0) + 1;
|
|
1329
|
+
this.restartBackoff.set(desired.name, { failures, nextAttemptAt: Date.now() + restartBackoffMs(failures) });
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
936
1332
|
}
|
|
937
1333
|
}
|
|
1334
|
+
this.state.ready = summariseProvisioning(this.desiredContainers, this.state.services).ready;
|
|
938
1335
|
this.state.lastReconciled = new Date().toISOString();
|
|
939
1336
|
}
|
|
940
1337
|
}
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
1338
|
+
__decorate([
|
|
1339
|
+
RecoveryMutation(),
|
|
1340
|
+
__metadata("design:type", Function),
|
|
1341
|
+
__metadata("design:paramtypes", [Array]),
|
|
1342
|
+
__metadata("design:returntype", void 0)
|
|
1343
|
+
], InfrastructureService.prototype, "addAppContainers", null);
|
|
1344
|
+
__decorate([
|
|
1345
|
+
RecoveryMutation(),
|
|
1346
|
+
__metadata("design:type", Function),
|
|
1347
|
+
__metadata("design:paramtypes", [InfrastructureService]),
|
|
1348
|
+
__metadata("design:returntype", Promise)
|
|
1349
|
+
], InfrastructureService.prototype, "provision", null);
|
|
1350
|
+
__decorate([
|
|
1351
|
+
RecoveryMutation(),
|
|
1352
|
+
__metadata("design:type", Function),
|
|
1353
|
+
__metadata("design:paramtypes", [InfrastructureService]),
|
|
1354
|
+
__metadata("design:returntype", Promise)
|
|
1355
|
+
], InfrastructureService.prototype, "refreshOwnershipFrom", null);
|
|
1356
|
+
__decorate([
|
|
1357
|
+
RecoveryMutation(),
|
|
1358
|
+
__metadata("design:type", Function),
|
|
1359
|
+
__metadata("design:paramtypes", []),
|
|
1360
|
+
__metadata("design:returntype", Promise)
|
|
1361
|
+
], InfrastructureService.prototype, "relinquishMonitoring", null);
|
|
1362
|
+
__decorate([
|
|
1363
|
+
RecoveryMutation(),
|
|
1364
|
+
__metadata("design:type", Function),
|
|
1365
|
+
__metadata("design:paramtypes", [Object]),
|
|
1366
|
+
__metadata("design:returntype", Promise)
|
|
1367
|
+
], InfrastructureService.prototype, "retireStack", null);
|
|
1368
|
+
__decorate([
|
|
1369
|
+
RecoveryMutation(),
|
|
1370
|
+
__metadata("design:type", Function),
|
|
1371
|
+
__metadata("design:paramtypes", []),
|
|
1372
|
+
__metadata("design:returntype", Promise)
|
|
1373
|
+
], InfrastructureService.prototype, "teardown", null);
|
|
1374
|
+
__decorate([
|
|
1375
|
+
RecoveryMutation(),
|
|
1376
|
+
__metadata("design:type", Function),
|
|
1377
|
+
__metadata("design:paramtypes", [Map,
|
|
1378
|
+
Map, Object, Map]),
|
|
1379
|
+
__metadata("design:returntype", void 0)
|
|
1380
|
+
], InfrastructureService.prototype, "setConfigRoots", null);
|
|
1381
|
+
__decorate([
|
|
1382
|
+
RecoveryMutation(),
|
|
1383
|
+
__metadata("design:type", Function),
|
|
1384
|
+
__metadata("design:paramtypes", [Object]),
|
|
1385
|
+
__metadata("design:returntype", Promise)
|
|
1386
|
+
], InfrastructureService.prototype, "reconcileServiceLocked", null);
|
|
1387
|
+
__decorate([
|
|
1388
|
+
RecoveryMutation(),
|
|
1389
|
+
__metadata("design:type", Function),
|
|
1390
|
+
__metadata("design:paramtypes", [Object, Object, Object]),
|
|
1391
|
+
__metadata("design:returntype", Promise)
|
|
1392
|
+
], InfrastructureService.prototype, "recoverUnhealthyLocked", null);
|
|
967
1393
|
function sameRecord(a, b) {
|
|
968
1394
|
const ka = Object.keys(a ?? {});
|
|
969
1395
|
const kb = Object.keys(b ?? {});
|