@omnitron-dev/omnitron 0.3.1 → 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 +575 -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 +432 -100
- 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 +65 -77
- 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 +40 -4
- package/dist/cluster/slave-connector.d.ts.map +1 -1
- package/dist/cluster/slave-connector.js +348 -195
- 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/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-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/infra.d.ts +5 -2
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +145 -53
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/logs.d.ts +6 -23
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +114 -38
- 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 +0 -8
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +32 -35
- 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 +75 -15
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +8 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +67 -1
- 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 +141 -33
- package/dist/commands/release.js.map +1 -1
- 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/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 +96 -52
- 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 +45 -60
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +720 -396
- 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 +136 -101
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +9 -17
- package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
- package/dist/daemon/daemon.rpc-service.js +83 -22
- 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/execution.service.d.ts +6 -1
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +32 -30
- 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 +21 -0
- 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/container-runtime.d.ts +37 -3
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +235 -64
- package/dist/infrastructure/container-runtime.js.map +1 -1
- 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.map +1 -1
- package/dist/infrastructure/host-ingress-config.js +11 -8
- package/dist/infrastructure/host-ingress-config.js.map +1 -1
- package/dist/infrastructure/host-ingress-lock.d.ts +2 -3
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -1
- package/dist/infrastructure/host-ingress-lock.js +1 -35
- package/dist/infrastructure/host-ingress-lock.js.map +1 -1
- package/dist/infrastructure/host-ingress-takeover.js +3 -3
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -1
- package/dist/infrastructure/host-ingress-types.d.ts +4 -2
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -1
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -1
- package/dist/infrastructure/host-ingress.service.js +6 -6
- package/dist/infrastructure/host-ingress.service.js.map +1 -1
- 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 +80 -29
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +561 -216
- 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 +1 -0
- package/dist/infrastructure/orphan-containers.d.ts.map +1 -1
- package/dist/infrastructure/orphan-containers.js +1 -1
- 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 +7 -0
- package/dist/infrastructure/provisioning-outcome.d.ts.map +1 -1
- package/dist/infrastructure/provisioning-outcome.js +41 -8
- package/dist/infrastructure/provisioning-outcome.js.map +1 -1
- package/dist/infrastructure/service-resolver.d.ts +1 -1
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +22 -10
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/stack-infra-manager.d.ts +25 -4
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +181 -21
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +60 -3
- 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 +19 -14
- package/dist/monitoring/log-line.d.ts.map +1 -1
- package/dist/monitoring/log-line.js +70 -59
- package/dist/monitoring/log-line.js.map +1 -1
- package/dist/monitoring/log-manager.d.ts +34 -37
- package/dist/monitoring/log-manager.d.ts.map +1 -1
- package/dist/monitoring/log-manager.js +164 -63
- 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 +1 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js.map +1 -1
- package/dist/orchestrator/app-handle.d.ts +24 -6
- package/dist/orchestrator/app-handle.d.ts.map +1 -1
- package/dist/orchestrator/app-handle.js +39 -8
- 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 +8 -18
- package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-loader.js +21 -204
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +5 -5
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +37 -38
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +3 -3
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +29 -80
- 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/classic-launcher.d.ts +3 -2
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +26 -22
- 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 +1 -1
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +10 -3
- package/dist/orchestrator/file-watcher.js.map +1 -1
- 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 +87 -76
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +941 -469
- 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/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 +89 -56
- 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/config-resolver.js +3 -3
- 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 +2 -0
- package/dist/project/declared-config.d.ts.map +1 -1
- package/dist/project/declared-config.js +8 -5
- 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/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 +8 -1
- package/dist/project/node-app-config.d.ts.map +1 -1
- package/dist/project/node-app-config.js +20 -28
- package/dist/project/node-app-config.js.map +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/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 +244 -55
- 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-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/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-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/build-run.d.ts +12 -15
- package/dist/release/build-run.d.ts.map +1 -1
- package/dist/release/build-run.js +260 -73
- package/dist/release/build-run.js.map +1 -1
- package/dist/release/builder.d.ts +8 -2
- package/dist/release/builder.d.ts.map +1 -1
- package/dist/release/builder.js +18 -4
- 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 +6 -3
- package/dist/release/definition-inputs.d.ts.map +1 -1
- package/dist/release/definition-inputs.js +145 -14
- 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 +27 -32
- package/dist/release/layout.d.ts.map +1 -1
- package/dist/release/layout.js +162 -51
- 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/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 +13 -4
- package/dist/release/store.d.ts.map +1 -1
- package/dist/release/store.js +70 -14
- 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 +1 -1
- package/dist/services/alert.service.d.ts.map +1 -1
- package/dist/services/alert.service.js +1 -1
- 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-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 +33 -126
- package/dist/services/backup.service.d.ts.map +1 -1
- package/dist/services/backup.service.js +174 -153
- package/dist/services/backup.service.js.map +1 -1
- package/dist/services/bundle-builder.d.ts +12 -0
- package/dist/services/bundle-builder.d.ts.map +1 -1
- package/dist/services/bundle-builder.js +77 -62
- 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/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-upgrade.d.ts +55 -3
- package/dist/services/host-upgrade.d.ts.map +1 -1
- package/dist/services/host-upgrade.js +167 -16
- package/dist/services/host-upgrade.js.map +1 -1
- package/dist/services/infrastructure.rpc-service.d.ts +9 -2
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +117 -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.map +1 -1
- package/dist/services/local-bundle.js +3 -1
- 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/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-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-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 +44 -37
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +208 -37
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +3 -0
- package/dist/services/node-manager.service.d.ts.map +1 -1
- package/dist/services/node-manager.service.js +78 -27
- 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.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 +10 -3
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +38 -14
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +30 -46
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +401 -344
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +212 -14
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +303 -31
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +174 -56
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +1962 -653
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/release.rpc-service.d.ts +5 -18
- package/dist/services/release.rpc-service.d.ts.map +1 -1
- package/dist/services/release.rpc-service.js +34 -11
- 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 +41 -113
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +415 -378
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +1 -1
- package/dist/services/remote-provisioner.js +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 +2 -2
- package/dist/services/static-carry-forward.d.ts.map +1 -1
- package/dist/services/static-carry-forward.js +10 -3
- 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 +96 -22
- 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 +174 -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/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 +106 -44
- 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-BbSxpQwN.js +0 -1
- package/webapp/dist/assets/Grid-DizFZYue.js +0 -1
- package/webapp/dist/assets/Switch-Bfiqzx8l.js +0 -1
- package/webapp/dist/assets/alerts-DH_RVRS3.js +0 -1
- package/webapp/dist/assets/apps-B96355sz.js +0 -1
- package/webapp/dist/assets/audit-CYGtbi4k.js +0 -1
- package/webapp/dist/assets/client-BmqFExWT.js +0 -1
- package/webapp/dist/assets/constants-veKGFkC6.js +0 -1
- package/webapp/dist/assets/containers-B_TpThln.js +0 -2
- package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +0 -1
- package/webapp/dist/assets/dashboard-DHf2_65N.js +0 -1
- package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +0 -1
- package/webapp/dist/assets/deploy-release-dialog-Dp-zpSAd.js +0 -1
- package/webapp/dist/assets/deployments-tJI6O3fK.js +0 -1
- package/webapp/dist/assets/detail-B2zP1Hto.js +0 -8
- package/webapp/dist/assets/detail-CoIrwmsy.js +0 -1
- package/webapp/dist/assets/detail-DWaGaOtL.js +0 -2
- package/webapp/dist/assets/formatters-BqjL73N3.js +0 -1
- package/webapp/dist/assets/fs-Ccl3sAcp.js +0 -1
- package/webapp/dist/assets/index-Dvo0iprx.css +0 -1
- package/webapp/dist/assets/index-vMnY_4jR.js +0 -412
- package/webapp/dist/assets/logs-DTRjOfX8.js +0 -12
- package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +0 -814
- package/webapp/dist/assets/metrics-UCajtdox.js +0 -2
- package/webapp/dist/assets/nodes-DuTVU0f6.js +0 -7
- package/webapp/dist/assets/pipelines-C8BeDcAl.js +0 -4
- package/webapp/dist/assets/projects-Dp_zFfLY.js +0 -1
- package/webapp/dist/assets/react-DlmbjZJV.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +0 -97
- package/webapp/dist/assets/release-bits-BzTKz5fM.js +0 -1
- package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +0 -1
- package/webapp/dist/assets/releases-B4hcr1bE.js +0 -2
- package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +0 -1
- package/webapp/dist/assets/settings-DIteZTbe.js +0 -1
- package/webapp/dist/assets/settled-pair-C7SjZuns.js +0 -1
- package/webapp/dist/assets/sign-in-D4kMBOHp.js +0 -1
- package/webapp/dist/assets/stacks-Brnf-EB7.js +0 -1
- package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +0 -1
- package/webapp/dist/assets/system-info-CFDNVKkU.js +0 -1
- package/webapp/dist/assets/topology-7WeTUsDN.js +0 -12
- package/webapp/dist/assets/traces-9c3gwCN-.js +0 -1
- package/webapp/dist/assets/use-stack-context-CnA5FTHu.js +0 -1
|
@@ -1,70 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* 4. Extract artifact on remote node
|
|
9
|
-
* 5. Signal remote omnitron daemon to reload/restart apps
|
|
10
|
-
* 6. Verify health on remote
|
|
11
|
-
*
|
|
12
|
-
* For cluster stacks, this runs in parallel across all nodes.
|
|
13
|
-
*
|
|
14
|
-
* Artifact path on remote: /opt/omnitron/artifacts/<project>/<app>/<version>/
|
|
15
|
-
* Remote daemon config: /etc/omnitron/omnitron.config.ts
|
|
16
|
-
*
|
|
17
|
-
* NEVER EXECUTED, as of 2026-09-14. Measured rather than assumed: no log in
|
|
18
|
-
* `~/.omnitron/logs` carries a single line this class emits ("Starting
|
|
19
|
-
* deployment to node", "Slave provisioned", "Deployment successful"), no
|
|
20
|
-
* artifact directory exists, and — decisively — no project config declares
|
|
21
|
-
* `stacks.nodes`, which `startRemoteStack` requires before it can reach here.
|
|
22
|
-
* So both entry points are unreachable in every current configuration.
|
|
23
|
-
*
|
|
24
|
-
* This matters to anyone reading the code below and taking it for a working
|
|
25
|
-
* path. It is careful code — arguments are quoted, path segments validated,
|
|
26
|
-
* heredocs replaced with base64 — and none of that has ever met a real host.
|
|
27
|
-
* Its first run will be its first test. Treat a green read of this file as
|
|
28
|
-
* evidence about intent, not about behaviour.
|
|
29
|
-
*
|
|
30
|
-
* The first thing that first run found, 2026-09-14: **it could not log in.**
|
|
31
|
-
* Every command here went through `ssh -o BatchMode=yes` with an optional
|
|
32
|
-
* `-i <keyfile>`, and `BatchMode=yes` disables every interactive method —
|
|
33
|
-
* password and key passphrase both. The console's Add Node dialog collects
|
|
34
|
-
* exactly those, encrypts them in the daemon's vault, and the health monitor
|
|
35
|
-
* uses them through `ExecutionService.ssh()` on every check round. So the
|
|
36
|
-
* product had two SSH implementations: one that can present what the operator
|
|
37
|
-
* gave it, and one — this — that cannot, on the path where it matters most.
|
|
38
|
-
*
|
|
39
|
-
* Measured against the test host, whose SSH answers a password in 311 ms:
|
|
40
|
-
*
|
|
41
|
-
* ssh -o BatchMode=yes root@<host> 'echo ok'
|
|
42
|
-
* → root@<host>: Permission denied (publickey,password).
|
|
43
|
-
*
|
|
44
|
-
* That is the answer to "why can a machine added in the console not be
|
|
45
|
-
* deployed to": not policy, not a missing feature — the deployer could not
|
|
46
|
-
* authenticate as the operator had arranged. It goes through the same
|
|
47
|
-
* `ExecutionService` as the checks now, and takes a `DeployTarget` carrying
|
|
48
|
-
* the credentials rather than an `IStackNode` whose `ISSHConfig` has nowhere
|
|
49
|
-
* to put them.
|
|
50
|
-
*/
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { stackExecutionKey } from '../shared/dto/stack-execution.js';
|
|
3
|
+
import { deploymentProgressKey } from '../shared/release-reading.js';
|
|
4
|
+
import { redactDiagnosticText } from '@omnitron-dev/titan/diagnostics';
|
|
5
|
+
import { assertFrozenLaunch, installFrozenApplicationCommand } from '../release/frozen-installation.js';
|
|
6
|
+
import { releaseOptionsForEnv } from '../release/target-runtime.js';
|
|
7
|
+
import { installedReleaseCheckCommand, validOrigin } from '../release/runtime-provenance.js';
|
|
51
8
|
import { PLATFORM_PROBE, parsePlatformProbe, planProvisioning, describePlan, } from './remote-provisioner.js';
|
|
52
9
|
import { installSteps, installPreflightCommand, versionDir, activateSteps, pruneSteps } from './bundle-builder.js';
|
|
53
10
|
import { reachabilityRule, reachabilityCommand } from '../infrastructure/gateway-reachability.js';
|
|
54
11
|
import { readNodeHealth, readNodeStatus } from '../project/node-app-health.js';
|
|
55
|
-
import { decideRedeploy, decideNodeStackStart, decideSlaveDaemonRestart, artifactChanged, readChecksumCommand, parseRecordedChecksum, ARTIFACT_CHECKSUM_FILE,
|
|
12
|
+
import { decideRedeploy, decideNodeStackStart, decideSlaveDaemonRestart, artifactChanged, readChecksumCommand, parseRecordedChecksum, ARTIFACT_CHECKSUM_FILE, } from './redeploy-decision.js';
|
|
56
13
|
import { deliveredProbeCommand, parseDeliveredProbe, checkDelivered, } from '../release/delivered.js';
|
|
57
14
|
import crypto from 'node:crypto';
|
|
58
15
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
59
|
-
import { assertControlledDaemonPort, assertServingBundle, bundleProbeCommand, contractPreflightCommand, executeHostUpgrade, hookCommand, inventoryCommand, planHostUpgrade, receiptCommand, verifyRestoredInventory, updateContractBindingsCommand, runtimeProbeCommand, runtimeStartCommand, runtimeStopCommand, appHealthCommand, pendingReceiptsCommand, recoverHostUpgrade, stoppedDaemonCommand, } from './host-upgrade.js';
|
|
16
|
+
import { assertControlledDaemonPort, assertServingBundle, bundleProbeCommand, contractPreflightCommand, executeHostUpgrade, hookCommand, inventoryCommand, planHostUpgrade, receiptCommand, verifyRestoredInventory, updateContractBindingsCommand, runtimeProbeCommand, runtimeStartCommand, runtimeStopCommand, appHealthCommand, pendingReceiptsCommand, recoverHostUpgrade, stoppedDaemonCommand, bootstrapPreflightCommand, HOST_BOOTSTRAP_PREFLIGHT_TIMEOUT_MS, assertResidentApplicationRuntime, assertSameApplicationRuntime, } from './host-upgrade.js';
|
|
60
17
|
import { gunzipSync } from 'node:zlib';
|
|
61
18
|
import { shellEscape } from '../shared/shell-escape.js';
|
|
62
19
|
import { fromDataChannel, throughDataChannel } from '../execution/data-channel.js';
|
|
20
|
+
import { commandFailure } from '../execution/command-failure.js';
|
|
21
|
+
import { activateManagedTarget, managedHostCommand, planManagedRollout, reconcileManagedTarget } from './managed-rollout.js';
|
|
63
22
|
/** A node that could not be asked at all — the SSH call itself failed. */
|
|
64
23
|
const UNREADABLE = -3;
|
|
65
24
|
import { withNodeLeases } from './node-deploy-lease.js';
|
|
66
25
|
import { hostOperationBarrierCommand } from './host-operation-barrier.js';
|
|
67
26
|
import { migrationOutput } from './migration-output.js';
|
|
27
|
+
import { prepareRemoteMigration } from './migration-process.js';
|
|
28
|
+
import { migrationDatabaseEnvironment, validateMigrationDestinations, validateMigrationOwners, orderMigrationPlacements } from './migration-target.js';
|
|
29
|
+
import { prepareNodeConfigPublication, restoreNodeConfigCommand } from './node-registration.js';
|
|
68
30
|
/**
|
|
69
31
|
* A name that is safe to place in a remote filesystem path.
|
|
70
32
|
*
|
|
@@ -103,6 +65,8 @@ function sshTargetOf(target) {
|
|
|
103
65
|
const ssh = { host: target.host };
|
|
104
66
|
if (target.sshPort != null)
|
|
105
67
|
ssh.port = target.sshPort;
|
|
68
|
+
if (target.expectedHostFingerprint)
|
|
69
|
+
ssh.expectedHostFingerprint = target.expectedHostFingerprint;
|
|
106
70
|
if (target.username)
|
|
107
71
|
ssh.username = target.username;
|
|
108
72
|
if (target.privateKey)
|
|
@@ -164,6 +128,12 @@ export function withNodeCredentials(target, registered) {
|
|
|
164
128
|
merged.sshPort = registered.port;
|
|
165
129
|
if (!merged.username && registered.username)
|
|
166
130
|
merged.username = registered.username;
|
|
131
|
+
// Vault credentials and approval belong to one registered SSH account and port.
|
|
132
|
+
if (target.host !== registered.host || (merged.sshPort ?? 22) !== (registered.port ?? 22)
|
|
133
|
+
|| (merged.username ?? 'root') !== (registered.username ?? 'root'))
|
|
134
|
+
return merged;
|
|
135
|
+
if (registered.expectedHostFingerprint)
|
|
136
|
+
merged.expectedHostFingerprint = registered.expectedHostFingerprint;
|
|
167
137
|
if (!merged.privateKey && registered.privateKey)
|
|
168
138
|
merged.privateKey = registered.privateKey;
|
|
169
139
|
if (!merged.passphrase && registered.passphrase)
|
|
@@ -182,33 +152,13 @@ export function withNodeCredentials(target, registered) {
|
|
|
182
152
|
const SLAVE_START_TIMEOUT_MS = 120_000;
|
|
183
153
|
/** How often it is asked, while it is starting. */
|
|
184
154
|
const DAEMON_POLL_MS = 3_000;
|
|
155
|
+
const transferScope = new AsyncLocalStorage();
|
|
156
|
+
export function withDeploymentProgress(scope, work) {
|
|
157
|
+
return transferScope.run(scope, work);
|
|
158
|
+
}
|
|
185
159
|
// =============================================================================
|
|
186
160
|
// RemoteDeployer
|
|
187
161
|
// =============================================================================
|
|
188
|
-
/**
|
|
189
|
-
* The parts of a postgres URL, for the environment a migrator expects.
|
|
190
|
-
*
|
|
191
|
-
* Returns null rather than guessing at a URL it cannot read: a migration run
|
|
192
|
-
* against half-parsed connection details is worse than one that does not run,
|
|
193
|
-
* because it can succeed somewhere nobody meant.
|
|
194
|
-
*/
|
|
195
|
-
function parseDatabaseUrl(url) {
|
|
196
|
-
try {
|
|
197
|
-
const u = new URL(url);
|
|
198
|
-
if (!u.protocol.startsWith('postgres'))
|
|
199
|
-
return null;
|
|
200
|
-
return {
|
|
201
|
-
host: u.hostname,
|
|
202
|
-
port: u.port || '5432',
|
|
203
|
-
database: decodeURIComponent(u.pathname.replace(/^\//, '')),
|
|
204
|
-
user: decodeURIComponent(u.username),
|
|
205
|
-
password: decodeURIComponent(u.password),
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
209
|
-
return null;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
162
|
/**
|
|
213
163
|
* Is this a gzip stream of a COMPLETE tar archive?
|
|
214
164
|
*
|
|
@@ -247,9 +197,7 @@ export class RemoteDeployer {
|
|
|
247
197
|
* transferring, installing, the message naming the failing step — reached a
|
|
248
198
|
* handler that re-emitted it to nobody.
|
|
249
199
|
*
|
|
250
|
-
*
|
|
251
|
-
* often anyone deploys, and the entry for an app is always its current
|
|
252
|
-
* state rather than a scroll an operator has to read to the end of.
|
|
200
|
+
* Each project, stack, node and app retains its latest observation across retries.
|
|
253
201
|
*/
|
|
254
202
|
lastProgress = new Map();
|
|
255
203
|
constructor(logger, execution) {
|
|
@@ -275,12 +223,22 @@ export class RemoteDeployer {
|
|
|
275
223
|
const nodeKey = `${target.host}:${target.daemonPort ?? 9700}`;
|
|
276
224
|
this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version }, 'Starting deployment to node');
|
|
277
225
|
try {
|
|
226
|
+
if (artifact.release && (!validOrigin(artifact.release) || artifact.release.app !== artifact.app ||
|
|
227
|
+
artifact.release.artifactSha256 !== artifact.tarballSha256 || artifact.release.artifactBytes !== artifact.size))
|
|
228
|
+
throw new Error('Release origin does not identify the supplied artifact');
|
|
229
|
+
const nodeOptions = artifact.release ? releaseOptionsForEnv(options?.launchEnv) : '';
|
|
230
|
+
let inspected;
|
|
278
231
|
// 1. Verify SSH connectivity
|
|
279
232
|
this.emitProgress(nodeKey, artifact.app, 'pending', 0, 'Connecting via SSH...');
|
|
280
233
|
await this.verifySSH(target);
|
|
234
|
+
if (artifact.release) {
|
|
235
|
+
assertFrozenLaunch(artifact.launch, artifact.release);
|
|
236
|
+
inspected = await this.inspectInstalledBundle(target);
|
|
237
|
+
assertResidentApplicationRuntime(inspected.applicationRuntime);
|
|
238
|
+
}
|
|
281
239
|
// 2. Ensure remote directory structure
|
|
282
|
-
|
|
283
|
-
|
|
240
|
+
let directory = `${artifact.version}-${artifact.tarballSha256 ?? crypto.randomUUID()}`;
|
|
241
|
+
let remotePath = artifactDirOnNode(project, artifact.app, directory);
|
|
284
242
|
// 2a. What the node already has.
|
|
285
243
|
//
|
|
286
244
|
// A master's boot-time autostart deploys every remote stack again, so
|
|
@@ -296,7 +254,10 @@ export class RemoteDeployer {
|
|
|
296
254
|
// could pass: the escape hatch this comment named had no door.
|
|
297
255
|
if (options?.force !== true) {
|
|
298
256
|
const recorded = parseRecordedChecksum(await this.sshExec(target, readChecksumCommand(shellEscape(remotePath))));
|
|
299
|
-
|
|
257
|
+
const sameInputs = artifactChanged(recorded, artifact.checksum) === false;
|
|
258
|
+
const binding = inspected?.applicationRuntime;
|
|
259
|
+
if (sameInputs && (!artifact.release || (binding &&
|
|
260
|
+
(await this.sshExec(target, installedReleaseCheckCommand(remotePath, artifact.release, binding, nodeOptions), 120_000)).trim() === 'verified'))) {
|
|
300
261
|
const duration = Date.now() - startTime;
|
|
301
262
|
this.emitProgress(nodeKey, artifact.app, 'success', 75, 'Already installed — unchanged');
|
|
302
263
|
this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version, sha: recorded.slice(0, 12) }, 'The node already has this artifact — not transferring it again');
|
|
@@ -307,9 +268,20 @@ export class RemoteDeployer {
|
|
|
307
268
|
status: 'success',
|
|
308
269
|
duration,
|
|
309
270
|
unchanged: true,
|
|
271
|
+
directory,
|
|
272
|
+
...(artifact.release && binding ? { migrationNode: binding.executable } : {}),
|
|
310
273
|
};
|
|
311
274
|
}
|
|
312
275
|
}
|
|
276
|
+
// Never clear a version directory: a running process can still load files from it.
|
|
277
|
+
// A failed attempt, or an explicit reinstall, gets another private directory.
|
|
278
|
+
const occupied = await this.sshExec(target, `test -e ${shellEscape(remotePath)} && echo occupied || echo absent`);
|
|
279
|
+
if (options?.force === true || occupied.trim() !== 'absent') {
|
|
280
|
+
directory += `-${crypto.randomUUID()}`;
|
|
281
|
+
remotePath = artifactDirOnNode(project, artifact.app, directory);
|
|
282
|
+
}
|
|
283
|
+
const parent = artifactDirOnNode(project, artifact.app, artifact.version).replace(/\/[^/]+$/, '');
|
|
284
|
+
await this.sshExec(target, `umask 077; mkdir -p ${shellEscape(parent)} && mkdir ${shellEscape(remotePath)}`);
|
|
313
285
|
// 3. Transfer artifact
|
|
314
286
|
this.emitProgress(nodeKey, artifact.app, 'transferring', 20, 'Transferring artifact...');
|
|
315
287
|
const remoteFile = `${remotePath}/${artifact.app}-${artifact.version}.tar.gz`;
|
|
@@ -349,116 +321,112 @@ export class RemoteDeployer {
|
|
|
349
321
|
else {
|
|
350
322
|
this.logger.warn({ node: nodeKey, app: artifact.app }, 'Artifact carries no tarball hash — the transfer was not verified');
|
|
351
323
|
}
|
|
352
|
-
//
|
|
353
|
-
|
|
354
|
-
// `tar -xzf` over whatever was there before leaves everything the new
|
|
355
|
-
// archive does not name — and what was there before is a `node_modules`
|
|
356
|
-
// of a different SHAPE. The first deployment after this builder changed
|
|
357
|
-
// put an npm manifest beside a pnpm tree and `npm install` answered
|
|
358
|
-
//
|
|
359
|
-
// npm error Cannot read properties of null (reading 'edgesOut')
|
|
360
|
-
//
|
|
361
|
-
// which is npm walking a dependency graph through symlinks it did not
|
|
362
|
-
// create. The same reasoning as `installSteps`, which removes the
|
|
363
|
-
// version directory before unpacking for exactly this: an install
|
|
364
|
-
// reconciling against a tree from another tool is not this version.
|
|
365
|
-
//
|
|
366
|
-
// Everything except the archive just uploaded, and only inside the
|
|
367
|
-
// artifact's own version directory — every segment of which was checked
|
|
368
|
-
// by `assertRemotePathSegment` above.
|
|
369
|
-
this.emitProgress(nodeKey, artifact.app, 'extracting', 50, 'Extracting artifact...');
|
|
324
|
+
// This newly reserved directory is not referenced by any registered application.
|
|
325
|
+
this.emitProgress(nodeKey, artifact.app, 'extracting', 50, 'Extracting candidate artifact...');
|
|
370
326
|
const archiveName = `${artifact.app}-${artifact.version}.tar.gz`;
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
//
|
|
384
|
-
// It then trusted the artifact to arrive complete, from `pnpm deploy`,
|
|
385
|
-
// and checked `test -d node_modules`. The artifact was NOT complete:
|
|
386
|
-
// every `@omnitron-dev/*` package was a symlink into a home directory
|
|
387
|
-
// on the master, twenty-three of them, and a directory of dangling
|
|
388
|
-
// symlinks passes `test -d`. A symlink to `/opt/omnitron/current`
|
|
389
|
-
// patched the one the first import happened to name; the other
|
|
390
|
-
// twenty-two were waiting behind it.
|
|
391
|
-
//
|
|
392
|
-
// Now the artifact carries `vendor/*.tgz` and a manifest that installs
|
|
393
|
-
// them, exactly like the daemon's own bundle, and the install runs
|
|
394
|
-
// here. That is not a cost to be minimised — it is the only step that
|
|
395
|
-
// happens on a machine that knows it is Linux, which is what decides
|
|
396
|
-
// between `@esbuild/darwin-arm64` and `@esbuild/linux-x64`.
|
|
397
|
-
this.emitProgress(nodeKey, artifact.app, 'installing', 60, 'Installing dependencies on the node...');
|
|
398
|
-
try {
|
|
399
|
-
await this.sshExec(target, `cd ${shellEscape(remotePath)} && npm install --omit=dev --no-audit --no-fund`, 900_000);
|
|
327
|
+
if (!artifact.release)
|
|
328
|
+
await this.sshExec(target, `cd ${shellEscape(remotePath)} && tar -xzf ${shellEscape(archiveName)}`);
|
|
329
|
+
const daemonBundle = inspected ?? await this.inspectInstalledBundle(target);
|
|
330
|
+
const runtime = daemonBundle.applicationRuntime;
|
|
331
|
+
if (artifact.release) {
|
|
332
|
+
assertResidentApplicationRuntime(runtime);
|
|
333
|
+
assertFrozenLaunch(artifact.launch, artifact.release);
|
|
334
|
+
assertSameApplicationRuntime(runtime, (await this.inspectInstalledBundle(target)).applicationRuntime);
|
|
335
|
+
this.emitProgress(nodeKey, artifact.app, 'extracting', 65, 'Verifying the unchanged application SDK and execution target');
|
|
336
|
+
const result = await this.sshExec(target, installFrozenApplicationCommand(remotePath, archiveName, artifact.launch, artifact.release, runtime, nodeOptions, daemonBundle.root), 240_000);
|
|
337
|
+
if (JSON.parse(result.trim()) !== nodeOptions)
|
|
338
|
+
throw new Error('Release Node options differ from the effective application definition');
|
|
400
339
|
}
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
this
|
|
405
|
-
|
|
406
|
-
|
|
340
|
+
else {
|
|
341
|
+
// 5. Install the dependencies ON THE NODE.
|
|
342
|
+
//
|
|
343
|
+
// Three shapes of this step, and the two that were wrong are worth
|
|
344
|
+
// keeping written down because each looked finished.
|
|
345
|
+
//
|
|
346
|
+
// It first ran `npm install --production --ignore-scripts 2>/dev/null
|
|
347
|
+
// || true`. That could not work even once — the manifests use pnpm's
|
|
348
|
+
// `workspace:` protocol, npm answers `EUNSUPPORTEDPROTOCOL` — and the
|
|
349
|
+
// `|| true` meant nobody found out.
|
|
350
|
+
//
|
|
351
|
+
// It then trusted the artifact to arrive complete, from `pnpm deploy`,
|
|
352
|
+
// and checked `test -d node_modules`. The artifact was NOT complete:
|
|
353
|
+
// every `@omnitron-dev/*` package was a symlink into a home directory
|
|
354
|
+
// on the master, twenty-three of them, and a directory of dangling
|
|
355
|
+
// symlinks passes `test -d`. A symlink to `/opt/omnitron/current`
|
|
356
|
+
// patched the one the first import happened to name; the other
|
|
357
|
+
// twenty-two were waiting behind it.
|
|
358
|
+
//
|
|
359
|
+
// Now the artifact carries `vendor/*.tgz` and a manifest that installs
|
|
360
|
+
// them, exactly like the daemon's own bundle, and the install runs
|
|
361
|
+
// here. That is not a cost to be minimised — it is the only step that
|
|
362
|
+
// happens on a machine that knows it is Linux, which is what decides
|
|
363
|
+
// between `@esbuild/darwin-arm64` and `@esbuild/linux-x64`.
|
|
364
|
+
this.emitProgress(nodeKey, artifact.app, 'installing', 60, 'Installing dependencies on the node...');
|
|
365
|
+
try {
|
|
366
|
+
await this.sshExec(target, `cd ${shellEscape(remotePath)} && npm install --omit=dev --engine-strict --no-audit --no-fund`, 900_000);
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
const duration = Date.now() - startTime;
|
|
370
|
+
const detail = `dependency install failed on the node: ${err.message.slice(0, 400)}`;
|
|
371
|
+
this.emitProgress(nodeKey, artifact.app, 'failed', 60, detail);
|
|
372
|
+
this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
|
|
373
|
+
return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
|
|
374
|
+
}
|
|
375
|
+
// 5a. One physical copy of every package the daemon shares with the app.
|
|
376
|
+
//
|
|
377
|
+
// A supervised app does not run alone in its process: omnitron's own
|
|
378
|
+
// `bootstrap-process.js` is the entry point, and the app's modules are
|
|
379
|
+
// loaded into it. Titan keeps identities at module scope — the
|
|
380
|
+
// `Container` class among them — so two physical installations of
|
|
381
|
+
// `@omnitron-dev/titan` in one process means `@Inject(Container)`
|
|
382
|
+
// resolves against a class that is not the one the daemon registered,
|
|
383
|
+
// and the failure reads `Dependency 'Container' not found`.
|
|
384
|
+
//
|
|
385
|
+
// `bootstrap-process.ts` checks for exactly this and refuses to start,
|
|
386
|
+
// which is how a freshly installed artifact answered:
|
|
387
|
+
//
|
|
388
|
+
// Titan package identity mismatch detected between omnitron daemon
|
|
389
|
+
// and app 'geo'. Daemon resolves @omnitron-dev/titan from
|
|
390
|
+
// /opt/omnitron/versions/…; App resolves … from /opt/omnitron/
|
|
391
|
+
// artifacts/sample/geo/0.0.1/node_modules/@omnitron-dev/titan
|
|
392
|
+
//
|
|
393
|
+
// That is the correct refusal, and the answer is not to install less:
|
|
394
|
+
// the vendored copies are what let `npm install` resolve a coherent
|
|
395
|
+
// tree in the first place. They are replaced afterwards by links to
|
|
396
|
+
// the daemon's own, computed ON THE NODE from what the daemon actually
|
|
397
|
+
// has, so the set stays right as the daemon's closure changes rather
|
|
398
|
+
// than being a list here that drifts from it.
|
|
399
|
+
//
|
|
400
|
+
// `@omnitron-dev/omnitron` is deliberately NOT one of them, and this is
|
|
401
|
+
// the second time that lesson has been paid for. The daemon IS that
|
|
402
|
+
// package, so it is not inside its own `node_modules`, and linking to
|
|
403
|
+
// the install root instead gives node a directory whose package.json
|
|
404
|
+
// carries `name`, `version`, `type` and `dependencies` and NO `main`
|
|
405
|
+
// and NO `exports` — `bundleRootManifest` writes an install manifest,
|
|
406
|
+
// not a library manifest. Resolution then falls back to `index.js`,
|
|
407
|
+
// which is not there:
|
|
408
|
+
//
|
|
409
|
+
// Cannot find package
|
|
410
|
+
// '.../node_modules/@omnitron-dev/omnitron/index.js'
|
|
411
|
+
//
|
|
412
|
+
// — the exact error this whole line of work started from. The vendored
|
|
413
|
+
// copy that `pnpm pack` produces from `apps/omnitron` has the real
|
|
414
|
+
// manifest, so it is left alone. Its identity is not shared across the
|
|
415
|
+
// process boundary the way titan's is: `defineSystem` returns data that
|
|
416
|
+
// the daemon's bootstrap reads, not a class anything does `instanceof`
|
|
417
|
+
// against.
|
|
418
|
+
//
|
|
419
|
+
// `rm -rf` before each `ln -sfn`: linking onto an existing DIRECTORY
|
|
420
|
+
// puts the link INSIDE it, leaving a directory with no package.json
|
|
421
|
+
// that node reports as a missing `index.js` — a message about a file
|
|
422
|
+
// that was never the problem.
|
|
423
|
+
const daemonRoot = runtime?.root ?? daemonBundle.root;
|
|
424
|
+
await this.sshExec(target, `set -e; APP=${shellEscape(`${remotePath}/node_modules/@omnitron-dev`)}; ` +
|
|
425
|
+
`mkdir -p "$APP"; ` +
|
|
426
|
+
`for p in ${shellEscape(daemonRoot)}/node_modules/@omnitron-dev/*; do ` +
|
|
427
|
+
`[ -e "$p" ] || continue; n=$(basename "$p"); ` +
|
|
428
|
+
`rm -rf "$APP/$n"; ln -sfn "$p" "$APP/$n"; done`);
|
|
407
429
|
}
|
|
408
|
-
// 5a. One physical copy of every package the daemon shares with the app.
|
|
409
|
-
//
|
|
410
|
-
// A supervised app does not run alone in its process: omnitron's own
|
|
411
|
-
// `bootstrap-process.js` is the entry point, and the app's modules are
|
|
412
|
-
// loaded into it. Titan keeps identities at module scope — the
|
|
413
|
-
// `Container` class among them — so two physical installations of
|
|
414
|
-
// `@omnitron-dev/titan` in one process means `@Inject(Container)`
|
|
415
|
-
// resolves against a class that is not the one the daemon registered,
|
|
416
|
-
// and the failure reads `Dependency 'Container' not found`.
|
|
417
|
-
//
|
|
418
|
-
// `bootstrap-process.ts` checks for exactly this and refuses to start,
|
|
419
|
-
// which is how a freshly installed artifact answered:
|
|
420
|
-
//
|
|
421
|
-
// Titan package identity mismatch detected between omnitron daemon
|
|
422
|
-
// and app 'geo'. Daemon resolves @omnitron-dev/titan from
|
|
423
|
-
// /opt/omnitron/versions/…; App resolves … from /opt/omnitron/
|
|
424
|
-
// artifacts/sample/geo/0.0.1/node_modules/@omnitron-dev/titan
|
|
425
|
-
//
|
|
426
|
-
// That is the correct refusal, and the answer is not to install less:
|
|
427
|
-
// the vendored copies are what let `npm install` resolve a coherent
|
|
428
|
-
// tree in the first place. They are replaced afterwards by links to
|
|
429
|
-
// the daemon's own, computed ON THE NODE from what the daemon actually
|
|
430
|
-
// has, so the set stays right as the daemon's closure changes rather
|
|
431
|
-
// than being a list here that drifts from it.
|
|
432
|
-
//
|
|
433
|
-
// `@omnitron-dev/omnitron` is deliberately NOT one of them, and this is
|
|
434
|
-
// the second time that lesson has been paid for. The daemon IS that
|
|
435
|
-
// package, so it is not inside its own `node_modules`, and linking to
|
|
436
|
-
// the install root instead gives node a directory whose package.json
|
|
437
|
-
// carries `name`, `version`, `type` and `dependencies` and NO `main`
|
|
438
|
-
// and NO `exports` — `bundleRootManifest` writes an install manifest,
|
|
439
|
-
// not a library manifest. Resolution then falls back to `index.js`,
|
|
440
|
-
// which is not there:
|
|
441
|
-
//
|
|
442
|
-
// Cannot find package
|
|
443
|
-
// '.../node_modules/@omnitron-dev/omnitron/index.js'
|
|
444
|
-
//
|
|
445
|
-
// — the exact error this whole line of work started from. The vendored
|
|
446
|
-
// copy that `pnpm pack` produces from `apps/omnitron` has the real
|
|
447
|
-
// manifest, so it is left alone. Its identity is not shared across the
|
|
448
|
-
// process boundary the way titan's is: `defineSystem` returns data that
|
|
449
|
-
// the daemon's bootstrap reads, not a class anything does `instanceof`
|
|
450
|
-
// against.
|
|
451
|
-
//
|
|
452
|
-
// `rm -rf` before each `ln -sfn`: linking onto an existing DIRECTORY
|
|
453
|
-
// puts the link INSIDE it, leaving a directory with no package.json
|
|
454
|
-
// that node reports as a missing `index.js` — a message about a file
|
|
455
|
-
// that was never the problem.
|
|
456
|
-
const daemonRoot = (await this.inspectInstalledBundle(target)).root;
|
|
457
|
-
await this.sshExec(target, `set -e; APP=${shellEscape(`${remotePath}/node_modules/@omnitron-dev`)}; ` +
|
|
458
|
-
`mkdir -p "$APP"; ` +
|
|
459
|
-
`for p in ${shellEscape(daemonRoot)}/node_modules/@omnitron-dev/*; do ` +
|
|
460
|
-
`[ -e "$p" ] || continue; n=$(basename "$p"); ` +
|
|
461
|
-
`rm -rf "$APP/$n"; ln -sfn "$p" "$APP/$n"; done`);
|
|
462
430
|
// The install either produced a tree that resolves or it did not, and
|
|
463
431
|
// `test -d node_modules` cannot tell those apart — it was true for the
|
|
464
432
|
// whole time nothing worked. Asking node to RESOLVE the package the
|
|
@@ -470,16 +438,17 @@ export class RemoteDeployer {
|
|
|
470
438
|
// map publishes what it lists and nothing else. A probe that fails on
|
|
471
439
|
// a healthy tree is worse than none — it would have failed every
|
|
472
440
|
// deployment from here on, for the one reason that is not a fault.
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
'
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
441
|
+
if (!artifact.release) {
|
|
442
|
+
this.emitProgress(nodeKey, artifact.app, 'extracting', 70, 'Checking dependencies...');
|
|
443
|
+
const resolved = await this.sshExec(target, `cd ${shellEscape(remotePath)} && node -e ${shellEscape("const r=require('module').createRequire(process.cwd()+'/package.json');" +
|
|
444
|
+
"r.resolve('@omnitron-dev/omnitron');r.resolve('@omnitron-dev/titan')")} >/dev/null 2>&1 && echo resolves || echo broken`).catch(() => 'broken');
|
|
445
|
+
if (resolved.trim() !== 'resolves') {
|
|
446
|
+
const duration = Date.now() - startTime;
|
|
447
|
+
const detail = 'The installed tree cannot resolve @omnitron-dev/omnitron or @omnitron-dev/titan';
|
|
448
|
+
this.emitProgress(nodeKey, artifact.app, 'failed', 70, detail);
|
|
449
|
+
this.logger.error({ node: nodeKey, app: artifact.app, path: remotePath }, detail);
|
|
450
|
+
return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'failed', duration, error: detail };
|
|
451
|
+
}
|
|
483
452
|
}
|
|
484
453
|
// 5b. No record yet. The next deployment reads `.artifact-sha256` as
|
|
485
454
|
// «the app runs this», and at this point it does not: the files are
|
|
@@ -504,35 +473,12 @@ export class RemoteDeployer {
|
|
|
504
473
|
version: artifact.version,
|
|
505
474
|
status: 'success',
|
|
506
475
|
duration,
|
|
476
|
+
directory,
|
|
507
477
|
...(artifact.checksum ? { checksum: artifact.checksum } : {}),
|
|
478
|
+
...(artifact.release && runtime ? { migrationNode: runtime.executable } : {}),
|
|
508
479
|
};
|
|
509
480
|
}
|
|
510
|
-
|
|
511
|
-
const started = await this.signalRemoteDaemon(target, artifact.app);
|
|
512
|
-
// 7. Verify health
|
|
513
|
-
this.emitProgress(nodeKey, artifact.app, 'verifying', 90, 'Verifying health...');
|
|
514
|
-
const health = await this.verifyHealth(target, artifact.app, project);
|
|
515
|
-
const duration = Date.now() - startTime;
|
|
516
|
-
// An artifact on disk is not a running application. Reporting success
|
|
517
|
-
// for the transfer alone is what let a fleet show six deployed apps and
|
|
518
|
-
// run none of them.
|
|
519
|
-
if (!started.ok || !health.online) {
|
|
520
|
-
const why = !started.ok ? started.detail : health.detail;
|
|
521
|
-
this.emitProgress(nodeKey, artifact.app, 'failed', 90, `artifact installed, app not running: ${why}`);
|
|
522
|
-
this.logger.error({ node: nodeKey, app: artifact.app, version: artifact.version, duration, detail: why }, 'Artifact installed, but the app is not running on the node');
|
|
523
|
-
return {
|
|
524
|
-
node: nodeKey,
|
|
525
|
-
app: artifact.app,
|
|
526
|
-
version: artifact.version,
|
|
527
|
-
status: 'failed',
|
|
528
|
-
duration,
|
|
529
|
-
error: `artifact installed, app not running: ${why}`,
|
|
530
|
-
};
|
|
531
|
-
}
|
|
532
|
-
await this.recordRunningArtifact(target, remotePath, artifact.app, artifact.checksum);
|
|
533
|
-
this.emitProgress(nodeKey, artifact.app, 'success', 100, `Deployed in ${Math.round(duration / 1000)}s`);
|
|
534
|
-
this.logger.info({ node: nodeKey, app: artifact.app, version: artifact.version, duration }, 'Deployment successful');
|
|
535
|
-
return { node: nodeKey, app: artifact.app, version: artifact.version, status: 'success', duration };
|
|
481
|
+
throw new Error('Artifact installed in a new directory; activate it through deployToStack with application definitions');
|
|
536
482
|
}
|
|
537
483
|
catch (err) {
|
|
538
484
|
const duration = Date.now() - startTime;
|
|
@@ -546,6 +492,29 @@ export class RemoteDeployer {
|
|
|
546
492
|
* Deploy artifacts to all nodes in a stack (parallel).
|
|
547
493
|
*/
|
|
548
494
|
async deployToStack(targets, artifacts, project, options) {
|
|
495
|
+
if (options?.apps?.length) {
|
|
496
|
+
if (!options.stack)
|
|
497
|
+
throw new Error('Application deployment requires an explicit source stack before transferring artifacts');
|
|
498
|
+
stackExecutionKey({ project, stack: options.stack });
|
|
499
|
+
}
|
|
500
|
+
const migrations = options?.migrations ?? [];
|
|
501
|
+
validateMigrationOwners(migrations, options?.apps ?? []);
|
|
502
|
+
targets = orderMigrationPlacements(migrations, targets.map(target => ({ target,
|
|
503
|
+
apps: (options?.apps ?? []).filter(app => !target.apps || target.apps.includes(app.name)),
|
|
504
|
+
}))).map(placement => placement.target);
|
|
505
|
+
const destinations = migrations.map(request => {
|
|
506
|
+
if (!artifacts.some(artifact => artifact.app === request.app))
|
|
507
|
+
throw Error(`No artifact for migration owner ${request.app}`);
|
|
508
|
+
const app = options?.apps?.find(entry => entry.name === request.app);
|
|
509
|
+
if (!app)
|
|
510
|
+
throw Error(`Missing migration owner ${request.app}`);
|
|
511
|
+
const env = { ...app.env, ...options?.appEnv?.[request.app] };
|
|
512
|
+
const database = migrationDatabaseEnvironment(request.app, env['DATABASE_URL'] ?? '', request.database, request.mode);
|
|
513
|
+
if (request.mode === 'config' && !artifacts.find(artifact => artifact.app === request.app)?.release)
|
|
514
|
+
throw Error(`Explicit migration config for ${request.app} requires a verified release artifact`);
|
|
515
|
+
return { app: request.app, database };
|
|
516
|
+
});
|
|
517
|
+
validateMigrationDestinations(destinations);
|
|
549
518
|
const concurrency = options?.concurrency ?? 3;
|
|
550
519
|
const results = [];
|
|
551
520
|
// Build deployment matrix: each app to each node (or node-specific apps)
|
|
@@ -558,6 +527,13 @@ export class RemoteDeployer {
|
|
|
558
527
|
tasks.push({ target, artifact });
|
|
559
528
|
}
|
|
560
529
|
}
|
|
530
|
+
const owners = new Map();
|
|
531
|
+
for (const { target, artifact } of tasks)
|
|
532
|
+
if (artifact.release && !owners.has(target)) {
|
|
533
|
+
const runtime = (await this.inspectInstalledBundle(target)).applicationRuntime;
|
|
534
|
+
assertResidentApplicationRuntime(runtime);
|
|
535
|
+
owners.set(target, runtime);
|
|
536
|
+
}
|
|
561
537
|
// Execute with concurrency limit
|
|
562
538
|
const executing = new Set();
|
|
563
539
|
for (const task of tasks) {
|
|
@@ -566,6 +542,10 @@ export class RemoteDeployer {
|
|
|
566
542
|
// started before the node knows it exists.
|
|
567
543
|
const result = await this.deployToNode(task.target, task.artifact, project, {
|
|
568
544
|
startAfterInstall: !options?.apps?.length,
|
|
545
|
+
...(task.artifact.release ? { launchEnv: {
|
|
546
|
+
...options?.apps?.find(app => app.name === task.artifact.app)?.env,
|
|
547
|
+
...options?.appEnv?.[task.artifact.app],
|
|
548
|
+
} } : {}),
|
|
569
549
|
...(options?.force === true ? { force: true } : {}),
|
|
570
550
|
});
|
|
571
551
|
results.push(result);
|
|
@@ -590,11 +570,38 @@ export class RemoteDeployer {
|
|
|
590
570
|
const nodeKey = `${target.host}:${target.daemonPort ?? 9700}`;
|
|
591
571
|
const landed = results
|
|
592
572
|
.filter((r) => r.node === nodeKey && r.status === 'success')
|
|
593
|
-
.map((r) => ({ app: r.app, version: r.version }));
|
|
594
|
-
const
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
573
|
+
.map((r) => ({ app: r.app, version: r.version, ...(artifacts.find(a => a.app === r.app)?.launch ? { launch: artifacts.find(a => a.app === r.app).launch } : {}), ...(r.migrationNode ? { migrationNode: r.migrationNode } : {}), ...(r.directory ? { directory: r.directory } : {}) }));
|
|
574
|
+
const expected = tasks.filter(task => task.target === target).length;
|
|
575
|
+
if (landed.length !== expected) {
|
|
576
|
+
for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
|
|
577
|
+
result.status = 'failed';
|
|
578
|
+
result.error = 'Another artifact failed installation; existing node configuration and processes were retained';
|
|
579
|
+
this.emitProgress(nodeKey, result.app, 'failed', 75, result.error);
|
|
580
|
+
}
|
|
581
|
+
continue;
|
|
582
|
+
}
|
|
583
|
+
// Do not publish a new boot configuration until every candidate is installed and migrated.
|
|
584
|
+
const migrationFailed = await this.migrateNodeApps(target, project, landed, migrations.filter(request => landed.some(entry => entry.app === request.app)), artifacts, Object.fromEntries(options.apps.map(app => [app.name, { ...app.env, ...options.appEnv?.[app.name] }])));
|
|
585
|
+
if (migrationFailed.size) {
|
|
586
|
+
for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
|
|
587
|
+
result.status = 'failed';
|
|
588
|
+
result.error = `database migrations failed; existing code retained: ${migrationFailed.get(result.app) ?? 'another application failed'}`;
|
|
589
|
+
this.emitProgress(nodeKey, result.app, 'failed', 80, result.error);
|
|
590
|
+
}
|
|
591
|
+
continue;
|
|
592
|
+
}
|
|
593
|
+
let registration;
|
|
594
|
+
try {
|
|
595
|
+
registration = await this.registerNodeApps(target, project, options.apps, landed, options.appEnv, options.alertSink, options.stack, owners.get(target));
|
|
596
|
+
}
|
|
597
|
+
catch (error) {
|
|
598
|
+
for (const result of results.filter(r => r.node === nodeKey && r.status === 'success')) {
|
|
599
|
+
result.status = 'failed';
|
|
600
|
+
result.error = `Node registration failed: ${error.message}`;
|
|
601
|
+
this.emitProgress(nodeKey, result.app, 'failed', 85, result.error);
|
|
602
|
+
}
|
|
603
|
+
continue;
|
|
604
|
+
}
|
|
598
605
|
// And the path from the gateway to them, which is the one crossing
|
|
599
606
|
// no configuration can open by itself. See `gateway-reachability`.
|
|
600
607
|
if (options.stack)
|
|
@@ -637,12 +644,24 @@ export class RemoteDeployer {
|
|
|
637
644
|
this.logger.info({ node: result.node, app: entry.app, version: entry.version, because: decision.because }, 'Left running — this deployment changes nothing for this app');
|
|
638
645
|
continue;
|
|
639
646
|
}
|
|
647
|
+
const expectedOwner = owners.get(target);
|
|
648
|
+
if (expectedOwner) {
|
|
649
|
+
try {
|
|
650
|
+
assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
|
|
651
|
+
}
|
|
652
|
+
catch (error) {
|
|
653
|
+
result.status = 'failed';
|
|
654
|
+
result.error = error.message;
|
|
655
|
+
this.emitProgress(result.node, entry.app, 'failed', 90, result.error);
|
|
656
|
+
continue;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
640
659
|
const started = await this.signalRemoteDaemon(target, entry.app);
|
|
641
660
|
const health = started.ok
|
|
642
661
|
? await this.verifyHealth(target, entry.app, project)
|
|
643
662
|
: { online: false, detail: started.detail };
|
|
644
663
|
if (health.online) {
|
|
645
|
-
await this.recordRunningArtifact(target, artifactDirOnNode(project, entry.app, entry.version), entry.app, result.checksum);
|
|
664
|
+
await this.recordRunningArtifact(target, artifactDirOnNode(project, entry.app, entry.directory ?? entry.version), entry.app, result.checksum);
|
|
646
665
|
this.emitProgress(result.node, entry.app, 'success', 100, 'Running');
|
|
647
666
|
// Said, because its opposite is. «Left running» above logs when
|
|
648
667
|
// this deployment leaves an application alone; restarting one
|
|
@@ -739,129 +758,80 @@ export class RemoteDeployer {
|
|
|
739
758
|
this.logger.warn({ node: target.host, network, error: err.message.slice(0, 200) }, 'Could not check the gateway’s path to the applications');
|
|
740
759
|
}
|
|
741
760
|
}
|
|
742
|
-
/**
|
|
743
|
-
*
|
|
744
|
-
*
|
|
745
|
-
|
|
746
|
-
* `apps/<name>/src/database/migrate.ts` from the PROJECT PATH against
|
|
747
|
-
* `localhost` — both of which name the machine the master is on. A node has
|
|
748
|
-
* no project sources and a different localhost, so a remote stack's
|
|
749
|
-
* databases were created and left empty.
|
|
750
|
-
*
|
|
751
|
-
* Measured on the test node after six apps installed and five started:
|
|
752
|
-
* every one of the six databases existed and held ZERO tables. Five apps
|
|
753
|
-
* came up anyway, because they touch no table at boot; `payments` does, and
|
|
754
|
-
* said so —
|
|
755
|
-
*
|
|
756
|
-
* Failed to call @PostConstruct 'bootstrap' on 'PlatformRevenueService':
|
|
757
|
-
* relation "accounts" does not exist
|
|
758
|
-
*
|
|
759
|
-
* — which is the only reason anyone found out. A platform with no schema
|
|
760
|
-
* that reports five of six apps healthy is a worse state than one that
|
|
761
|
-
* refuses to start.
|
|
762
|
-
*
|
|
763
|
-
* The artifact already carries what is needed: `dist/database/migrate.js`
|
|
764
|
-
* beside `dist/database/migrations/` — 160 compiled files for payments. The
|
|
765
|
-
* same build the app itself runs from, so there is no second copy of the
|
|
766
|
-
* schema to drift.
|
|
767
|
-
*
|
|
768
|
-
* Returns the apps whose migrations failed, with the reason, and the
|
|
769
|
-
* caller does not start their new code.
|
|
770
|
-
*
|
|
771
|
-
* This used to say: «Failure is reported and does not stop the deployment:
|
|
772
|
-
* an app whose migrations fail will fail its own start with a message
|
|
773
|
-
* about the table it wanted, which is more specific than anything this
|
|
774
|
-
* step could say.» True for one of the two ways it goes. An app that
|
|
775
|
-
* fails to START is caught by `verifyHealth` and marked failed — that
|
|
776
|
-
* branch was covered, and the sentence is right about it. An app that
|
|
777
|
-
* starts fine and fails on the first REQUEST that touches the missing
|
|
778
|
-
* table passes `verifyHealth`, the stack reports `started`, and the only
|
|
779
|
-
* trace is one ERROR line in the master's log. The justification covered
|
|
780
|
-
* the branch that was already safe.
|
|
781
|
-
*
|
|
782
|
-
* Idempotence is what makes refusing cheap: the migrator records each
|
|
783
|
-
* migration it applied, in a transaction with the migration itself, so
|
|
784
|
-
* running the batch again after the cause is fixed applies exactly what
|
|
785
|
-
* is missing. That holds because `HardenedMigrationRunner` defaults
|
|
786
|
-
* `useTransactions` to true (`titan-database/src/migration/
|
|
787
|
-
* hardened-runner.ts:171`) and no sample `migrate.ts` overrides it — it is
|
|
788
|
-
* conditional in the runner (`:502`), so a migrator that turned it off
|
|
789
|
-
* would make a refused deployment leave a half-applied migration behind.
|
|
790
|
-
*/
|
|
791
|
-
async migrateNodeApps(target, project, landed, appEnv) {
|
|
761
|
+
/** Explicit owners only. Preflight every program and destination before the first
|
|
762
|
+
* migration; recheck sealed origin immediately before execution. No discovery,
|
|
763
|
+
* source fallback or retry after an ambiguous database outcome. */
|
|
764
|
+
async migrateNodeApps(target, project, landed, requests, artifacts, appEnv) {
|
|
792
765
|
const failed = new Map();
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
continue;
|
|
797
|
-
const dir = `/opt/omnitron/artifacts/${assertRemotePathSegment('project name', project)}` +
|
|
798
|
-
`/${assertRemotePathSegment('app name', entry.app)}` +
|
|
799
|
-
`/${assertRemotePathSegment('version', entry.version)}`;
|
|
800
|
-
const script = `${dir}/dist/database/migrate.js`;
|
|
801
|
-
// A node that could not be asked is not an app without a migrator.
|
|
802
|
-
// This command exits 0 either way, so `sshExec` throws only when the
|
|
803
|
-
// question never arrived — and that was answered `'no'`: migrations
|
|
804
|
-
// skipped, new code started on the old schema. The worst case of the
|
|
805
|
-
// docblock above, reached through a dropped SSH connection instead of
|
|
806
|
-
// a failed migration, and refused the same way.
|
|
807
|
-
let present;
|
|
766
|
+
const planned = [];
|
|
767
|
+
let runtime;
|
|
768
|
+
for (const request of requests) {
|
|
808
769
|
try {
|
|
809
|
-
|
|
770
|
+
const entry = landed.find(candidate => candidate.app === request.app);
|
|
771
|
+
if (!entry)
|
|
772
|
+
throw Error(`Migration owner ${request.app} did not install`);
|
|
773
|
+
const directory = artifactDirOnNode(project, entry.app, entry.directory ?? entry.version);
|
|
774
|
+
const script = `${directory}/${request.release}`;
|
|
775
|
+
const artifact = artifacts.find(candidate => candidate.app === entry.app);
|
|
776
|
+
let verify;
|
|
777
|
+
let nodeOptions = '', environmentApp = request.app;
|
|
778
|
+
if (artifact?.release) {
|
|
779
|
+
runtime ??= (await this.inspectInstalledBundle(target)).applicationRuntime;
|
|
780
|
+
if (!runtime || runtime.executable !== entry.migrationNode)
|
|
781
|
+
throw Error('Migration execution runtime changed');
|
|
782
|
+
const binding = runtime, origin = artifact.release;
|
|
783
|
+
nodeOptions = releaseOptionsForEnv(appEnv[request.app]);
|
|
784
|
+
environmentApp = origin.runtimeOrigin?.producerApp ?? request.app;
|
|
785
|
+
verify = async () => {
|
|
786
|
+
if ((await this.sshExec(target, installedReleaseCheckCommand(directory, origin, binding, nodeOptions), 120_000)).trim() !== 'verified')
|
|
787
|
+
throw Error(`Migration release origin changed for ${request.app}`);
|
|
788
|
+
};
|
|
789
|
+
await verify();
|
|
790
|
+
}
|
|
791
|
+
else if (request.mode === 'config')
|
|
792
|
+
throw Error('Explicit migration config requires a verified release artifact');
|
|
793
|
+
const database = migrationDatabaseEnvironment(environmentApp, appEnv[request.app]?.['DATABASE_URL'] ?? '', request.database, request.mode);
|
|
794
|
+
// test -f alone accepts escaping parent symlinks. Every path component must
|
|
795
|
+
// identify the physical program inside the selected artifact directory.
|
|
796
|
+
const check = `const fs=require('node:fs');if(fs.realpathSync(${JSON.stringify(directory)})!==${JSON.stringify(directory)}||fs.realpathSync(${JSON.stringify(script)})!==${JSON.stringify(script)})process.exit(1)`;
|
|
797
|
+
const executable = entry.migrationNode ? `env -u NODE_OPTIONS -u NODE_PATH ${shellEscape(entry.migrationNode)}` : 'node';
|
|
798
|
+
const present = await this.sshExec(target, `test -f ${shellEscape(script)} && ${executable} -e ${shellEscape(check)} && echo yes || echo no`);
|
|
799
|
+
if (present.trim() !== 'yes')
|
|
800
|
+
throw Error(`Declared migration program is unavailable: ${request.app}/${request.release}`);
|
|
801
|
+
const env = { ...appEnv[request.app], ...database.env, ...(artifact?.release ? { NODE_OPTIONS: nodeOptions, NODE_PATH: '' } : {}) };
|
|
802
|
+
if (request.mode === 'config') {
|
|
803
|
+
const preflight = prepareRemoteMigration({ cwd: directory, script, mode: 'config', validate: true,
|
|
804
|
+
...(entry.migrationNode ? { node: entry.migrationNode } : {}) }, env);
|
|
805
|
+
await this.sshExec(target, preflight.command, 60_000, preflight.stdin);
|
|
806
|
+
}
|
|
807
|
+
planned.push({ request, directory, script, ...(entry.migrationNode ? { node: entry.migrationNode } : {}),
|
|
808
|
+
env, ...(verify ? { verify } : {}) });
|
|
810
809
|
}
|
|
811
|
-
catch (
|
|
812
|
-
const message =
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
continue;
|
|
810
|
+
catch (error) {
|
|
811
|
+
const message = redactDiagnosticText(error.message);
|
|
812
|
+
failed.set(request.app, message);
|
|
813
|
+
this.logger.error({ node: target.host, app: request.app, database: request.database, error: message }, 'Migration preparation failed — no database migrations were executed');
|
|
816
814
|
}
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
// `envPrefix: 'PAYMENTS__DATABASE'` and builds its connection from
|
|
824
|
-
// `PAYMENTS__DATABASE__HOST` / `__PORT` / `__USER` / `__PASSWORD` /
|
|
825
|
-
// `__DATABASE`. Given only `DATABASE_URL` it falls back to its own
|
|
826
|
-
// defaults and reports `password authentication failed for user
|
|
827
|
-
// "postgres"` — against a password that is correct and that it never
|
|
828
|
-
// read. All six apps failed that way, which is what a convention
|
|
829
|
-
// nobody wrote down costs when a second caller appears.
|
|
830
|
-
//
|
|
831
|
-
// `ProjectService` passes both, with the comment "App-specific env
|
|
832
|
-
// vars (various naming conventions)". This is the second caller.
|
|
833
|
-
const parsed = parseDatabaseUrl(databaseUrl);
|
|
834
|
-
const prefix = entry.app.toUpperCase().replace(/-/g, '_');
|
|
835
|
-
const dbEnv = parsed
|
|
836
|
-
? {
|
|
837
|
-
[`${prefix}__DATABASE__HOST`]: parsed.host,
|
|
838
|
-
[`${prefix}__DATABASE__PORT`]: parsed.port,
|
|
839
|
-
[`${prefix}__DATABASE__DATABASE`]: parsed.database,
|
|
840
|
-
[`${prefix}__DATABASE__USER`]: parsed.user,
|
|
841
|
-
[`${prefix}__DATABASE__PASSWORD`]: parsed.password,
|
|
842
|
-
}
|
|
843
|
-
: {};
|
|
815
|
+
}
|
|
816
|
+
if (failed.size)
|
|
817
|
+
return failed;
|
|
818
|
+
for (const item of planned) {
|
|
819
|
+
const { request } = item;
|
|
820
|
+
this.emitProgress(`${target.host}:${target.daemonPort ?? 9700}`, request.app, 'installing', 75, `Applying ${request.service}/${request.database} migrations...`);
|
|
844
821
|
try {
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
const
|
|
849
|
-
|
|
850
|
-
.
|
|
851
|
-
|
|
852
|
-
// `migration-output.ts`). The masked channel on purpose: these lines
|
|
853
|
-
// are for reading, not parsing, and a migrator that ever printed a
|
|
854
|
-
// credential must not put it in the master's log.
|
|
855
|
-
const said = await this.sshExec(target, `cd ${shellEscape(dir)} && ${assignments} node ${shellEscape(script)}`, 600_000);
|
|
856
|
-
for (const line of migrationOutput(said)) {
|
|
857
|
-
this.logger.info({ node: target.host, app: entry.app, line }, 'Migration said');
|
|
858
|
-
}
|
|
859
|
-
this.logger.info({ node: target.host, app: entry.app }, 'Database migrations applied on the node');
|
|
822
|
+
await item.verify?.();
|
|
823
|
+
const migration = prepareRemoteMigration({ cwd: item.directory, script: item.script, mode: request.mode,
|
|
824
|
+
...(item.node ? { node: item.node } : {}) }, item.env);
|
|
825
|
+
const said = await this.sshExec(target, migration.command, 600_000, migration.stdin);
|
|
826
|
+
for (const line of migrationOutput(said).map(redactDiagnosticText))
|
|
827
|
+
this.logger.info({ node: target.host, app: request.app, database: request.database, line }, 'Migration said');
|
|
828
|
+
this.logger.info({ node: target.host, app: request.app, database: request.database }, 'Database migrations applied on the node');
|
|
860
829
|
}
|
|
861
|
-
catch (
|
|
862
|
-
const message =
|
|
863
|
-
|
|
864
|
-
|
|
830
|
+
catch (error) {
|
|
831
|
+
const message = redactDiagnosticText(error.message);
|
|
832
|
+
failed.set(request.app, message);
|
|
833
|
+
this.logger.error({ node: target.host, app: request.app, database: request.database, error: message }, 'Database migrations failed on the node — candidate applications will not be started');
|
|
834
|
+
break;
|
|
865
835
|
}
|
|
866
836
|
}
|
|
867
837
|
return failed;
|
|
@@ -876,39 +846,34 @@ export class RemoteDeployer {
|
|
|
876
846
|
* the file back: the body holds every generated credential on the node,
|
|
877
847
|
* and it should cross the wire once, in the direction it has to.
|
|
878
848
|
*/
|
|
879
|
-
async registerNodeApps(target, project, apps, landed, appEnv, alertSink) {
|
|
849
|
+
async registerNodeApps(target, project, apps, landed, appEnv, alertSink, sourceStack, expectedOwner) {
|
|
880
850
|
if (landed.length === 0) {
|
|
881
851
|
this.logger.warn({ host: target.host, project }, 'No artifact reached this node — nothing to register');
|
|
882
852
|
return { changed: false };
|
|
883
853
|
}
|
|
854
|
+
if (!sourceStack)
|
|
855
|
+
throw new Error('Node registration requires an explicit source stack');
|
|
884
856
|
const { renderNodeAppConfig } = await import('../project/node-app-config.js');
|
|
885
857
|
const dir = `/opt/omnitron/projects/${assertRemotePathSegment('project name', project)}`;
|
|
886
858
|
const body = renderNodeAppConfig({
|
|
887
859
|
project,
|
|
888
860
|
artifactRoot: '/opt/omnitron/artifacts',
|
|
861
|
+
sourceStack,
|
|
889
862
|
apps,
|
|
890
863
|
artifacts: landed,
|
|
891
864
|
appEnv,
|
|
892
865
|
alertSink,
|
|
893
866
|
});
|
|
894
|
-
const
|
|
867
|
+
const operation = crypto.randomUUID();
|
|
868
|
+
let published = false, publicationAttempted = false;
|
|
895
869
|
try {
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
const
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
const configPath = `${dir}/omnitron.config.mjs`;
|
|
904
|
-
// `umask 077` around the write, not a `chmod` after it: the file exists
|
|
905
|
-
// with its contents between the two, and what it contains is the
|
|
906
|
-
// generated password of every service on this node. It was written 0644
|
|
907
|
-
// for as long as it has existed — measured on the test node — which was
|
|
908
|
-
// harmless only because it held no credentials to leak.
|
|
909
|
-
await this.sshExec(target, `umask 077 && cat > ${shellEscape(configPath)} <<'OMNITRON_EOF'\n${body}\nOMNITRON_EOF`);
|
|
910
|
-
await this.sshExec(target, `chmod 600 ${shellEscape(configPath)}`);
|
|
911
|
-
await this.sshExec(target, `printf %s ${shellEscape(bodyHash)} > ${shellEscape(`${dir}/${NODE_CONFIG_HASH_FILE}`)}`);
|
|
870
|
+
if (expectedOwner)
|
|
871
|
+
assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
|
|
872
|
+
const publication = prepareNodeConfigPublication({ directory: dir, project, body, operation, artifacts: landed });
|
|
873
|
+
publicationAttempted = true;
|
|
874
|
+
const result = await this.sshExec(target, publication.command, 60_000, publication.stdin);
|
|
875
|
+
published = true;
|
|
876
|
+
const { changed } = JSON.parse(result.trim());
|
|
912
877
|
const added = await this.sshExec(target, `omnitron project add ${shellEscape(project)} ${shellEscape(dir)} 2>&1`);
|
|
913
878
|
// Registering the project is not starting it. The node reads the
|
|
914
879
|
// definitions and waits: measured, `omnitron status` answered
|
|
@@ -928,6 +893,8 @@ export class RemoteDeployer {
|
|
|
928
893
|
apps: landed.map((l) => l.app),
|
|
929
894
|
online: await this.appsOnline(target, project),
|
|
930
895
|
});
|
|
896
|
+
if (expectedOwner)
|
|
897
|
+
assertSameApplicationRuntime(expectedOwner, (await this.inspectInstalledBundle(target)).applicationRuntime);
|
|
931
898
|
const out = start.action === 'start'
|
|
932
899
|
? await this.sshExec(target, `omnitron stack start ${shellEscape(project)} ${shellEscape(NODE_STACK)} 2>&1`, 300_000)
|
|
933
900
|
: '';
|
|
@@ -940,7 +907,7 @@ export class RemoteDeployer {
|
|
|
940
907
|
const refused = /\bno .*found\b|\bfailed\b|\berror\b|not found|cannot/i.test(`${added}\n${out}`);
|
|
941
908
|
if (refused) {
|
|
942
909
|
this.logger.error({ host: target.host, project, dir, detail: `${added}\n${out}`.trim().slice(0, 300) }, 'The node refused the apps it was given — its artifacts are installed and it will run none of them');
|
|
943
|
-
|
|
910
|
+
throw new Error('Node CLI refused project registration or stack start');
|
|
944
911
|
}
|
|
945
912
|
this.logger.info({
|
|
946
913
|
host: target.host,
|
|
@@ -958,9 +925,18 @@ export class RemoteDeployer {
|
|
|
958
925
|
}
|
|
959
926
|
catch (err) {
|
|
960
927
|
this.logger.error({ host: target.host, project, dir, error: err.message }, 'Could not tell the node what to run — its artifacts are installed and its daemon does not know the apps');
|
|
961
|
-
//
|
|
962
|
-
//
|
|
963
|
-
|
|
928
|
+
// Restore durable boot definitions if publication or registration was interrupted.
|
|
929
|
+
// Do not claim process rollback: some applications may already have started.
|
|
930
|
+
try {
|
|
931
|
+
if (publicationAttempted)
|
|
932
|
+
await this.sshExec(target, restoreNodeConfigCommand(dir, operation));
|
|
933
|
+
if (published)
|
|
934
|
+
await this.sshExec(target, `omnitron project add ${shellEscape(project)} ${shellEscape(dir)} 2>&1`);
|
|
935
|
+
}
|
|
936
|
+
catch (restoreError) {
|
|
937
|
+
throw new Error(`Registration and configuration recovery failed; inspect ${dir}/.registration-${operation}`, { cause: restoreError });
|
|
938
|
+
}
|
|
939
|
+
throw err;
|
|
964
940
|
}
|
|
965
941
|
}
|
|
966
942
|
/**
|
|
@@ -1283,6 +1259,54 @@ export class RemoteDeployer {
|
|
|
1283
1259
|
async assertNoPendingHostOperations(target, prefix = '/opt/omnitron', allowance) {
|
|
1284
1260
|
await this.sshExecData(target, hostOperationBarrierCommand(prefix, allowance));
|
|
1285
1261
|
}
|
|
1262
|
+
async readManagedHost(target, request) {
|
|
1263
|
+
return JSON.parse(await this.sshExecData(target, managedHostCommand(request), 480_000));
|
|
1264
|
+
}
|
|
1265
|
+
assertManagedTarget(target) {
|
|
1266
|
+
assertControlledDaemonPort(target.daemonPort);
|
|
1267
|
+
if (!target.expectedHostFingerprint)
|
|
1268
|
+
throw Error('Managed kernel rollout requires a pinned SSH host key');
|
|
1269
|
+
}
|
|
1270
|
+
async checkManagedTarget(target) {
|
|
1271
|
+
await this.assertNoPendingHostOperations(target, '/opt/omnitron');
|
|
1272
|
+
const pending = JSON.parse(await this.sshExecData(target, pendingReceiptsCommand('/opt/omnitron')));
|
|
1273
|
+
if (pending.length)
|
|
1274
|
+
throw Error('An unfinished host upgrade must be reconciled before kernel rollout');
|
|
1275
|
+
}
|
|
1276
|
+
async inspectManagedRollout(target, commit, options = {}) {
|
|
1277
|
+
this.assertManagedTarget(target);
|
|
1278
|
+
if (!/^[0-9a-f]{40}$/.test(commit))
|
|
1279
|
+
throw Error('A full lowercase Git commit is required');
|
|
1280
|
+
const inspect = () => planManagedRollout(request => this.readManagedHost(target, request), commit);
|
|
1281
|
+
if (!options.stage) {
|
|
1282
|
+
await this.checkManagedTarget(target);
|
|
1283
|
+
return inspect();
|
|
1284
|
+
}
|
|
1285
|
+
return this.underLease(target, 'stage managed kernel', async () => {
|
|
1286
|
+
await this.checkManagedTarget(target);
|
|
1287
|
+
const { stageCatalogRuntime } = await import('./kernel-distribution.js');
|
|
1288
|
+
const expected = await stageCatalogRuntime(this, target, commit, options.excludeOwnerId);
|
|
1289
|
+
const plan = await inspect();
|
|
1290
|
+
if (plan.candidate !== expected)
|
|
1291
|
+
throw Error('Installed runtime differs from the qualified catalog artifact');
|
|
1292
|
+
return plan;
|
|
1293
|
+
});
|
|
1294
|
+
}
|
|
1295
|
+
async activateManagedRollout(target, plan, beforeDispatch) {
|
|
1296
|
+
this.assertManagedTarget(target);
|
|
1297
|
+
return this.underLease(target, 'managed kernel handoff', async () => {
|
|
1298
|
+
await this.checkManagedTarget(target);
|
|
1299
|
+
await activateManagedTarget(request => this.readManagedHost(target, request), plan, beforeDispatch);
|
|
1300
|
+
});
|
|
1301
|
+
}
|
|
1302
|
+
async reconcileManagedRollout(target, plan, options) {
|
|
1303
|
+
this.assertManagedTarget(target);
|
|
1304
|
+
return this.underLease(target, 'reconcile managed kernel handoff', async () => {
|
|
1305
|
+
await this.checkManagedTarget(target);
|
|
1306
|
+
const selection = await reconcileManagedTarget(request => this.readManagedHost(target, request), plan);
|
|
1307
|
+
return options?.detailed || selection === 'candidate' ? selection : 'previous';
|
|
1308
|
+
});
|
|
1309
|
+
}
|
|
1286
1310
|
/** Require a settled host and the actual serving immutable daemon build. */
|
|
1287
1311
|
async inspectInstalledBundle(target, prefix = '/opt/omnitron', allowance) {
|
|
1288
1312
|
assertControlledDaemonPort(target.daemonPort);
|
|
@@ -1290,11 +1314,19 @@ export class RemoteDeployer {
|
|
|
1290
1314
|
const pending = JSON.parse(await this.sshExecData(target, pendingReceiptsCommand(prefix)));
|
|
1291
1315
|
if (pending.length)
|
|
1292
1316
|
throw new Error(`Unfinished host upgrade ${pending.map(r => r.id).join(', ')}; recover it before deploying an app`);
|
|
1317
|
+
const managed = await this.readManagedHost(target, { operation: 'inspect' });
|
|
1318
|
+
if (managed)
|
|
1319
|
+
return managed.bundle;
|
|
1293
1320
|
const bundle = JSON.parse(await this.sshExecData(target, bundleProbeCommand(prefix)));
|
|
1294
1321
|
const status = JSON.parse(await this.sshExecData(target, inventoryCommand(bundle, false)));
|
|
1295
1322
|
assertServingBundle(bundle, status);
|
|
1296
|
-
await this.sshExecData(target, runtimeProbeCommand(bundle, status.pid));
|
|
1297
|
-
|
|
1323
|
+
const host = JSON.parse(await this.sshExecData(target, runtimeProbeCommand(bundle, status.pid)));
|
|
1324
|
+
const execution = host.applicationRuntime ?? (host.kind !== 'managed' && host.executable ? {
|
|
1325
|
+
root: bundle.root, executable: host.executable, commit: bundle.commit,
|
|
1326
|
+
} : undefined);
|
|
1327
|
+
if (execution && (!path.isAbsolute(execution.root) || !path.isAbsolute(execution.executable) || !/^[a-f0-9]{40}$/.test(execution.commit)))
|
|
1328
|
+
throw new Error('Invalid execution owner identity');
|
|
1329
|
+
return { ...bundle, ...(execution ? { applicationRuntime: execution } : {}) };
|
|
1298
1330
|
}
|
|
1299
1331
|
async activateBundle(target, version, prefix = '/opt/omnitron', keepVersions = 3, verifyPlatform, allowance) {
|
|
1300
1332
|
assertControlledDaemonPort(target.daemonPort);
|
|
@@ -1315,6 +1347,8 @@ export class RemoteDeployer {
|
|
|
1315
1347
|
return false;
|
|
1316
1348
|
}
|
|
1317
1349
|
const previous = await this.inspectInstalledBundle(target, prefix, allowance);
|
|
1350
|
+
if (previous.managed)
|
|
1351
|
+
throw Error('Independent owner detected. Use a sealed managed kernel rollout for this node');
|
|
1318
1352
|
const candidate = JSON.parse(await this.sshExecData(target, bundleProbeCommand(prefix, version)));
|
|
1319
1353
|
await this.sshExec(target, `${shellEscape(`${candidate.root}/dist/cli/omnitron.js`)} --version`, 120_000);
|
|
1320
1354
|
const inventory = JSON.parse(await this.sshExecData(target, inventoryCommand(previous, true)));
|
|
@@ -1326,6 +1360,8 @@ export class RemoteDeployer {
|
|
|
1326
1360
|
if (plan.online.includes(app.name))
|
|
1327
1361
|
await this.sshExec(target, appHealthCommand(app, previous), 330_000);
|
|
1328
1362
|
}
|
|
1363
|
+
this.emitProgress(nodeKey, '*', 'verifying', 0, 'Checking candidate bootstrap readers before stopping applications');
|
|
1364
|
+
await this.sshExecData(target, bootstrapPreflightCommand(plan), HOST_BOOTSTRAP_PREFLIGHT_TIMEOUT_MS + 10_000);
|
|
1329
1365
|
const id = `${new Date().toISOString().replace(/[:.]/g, '-')}-${crypto.randomUUID()}`;
|
|
1330
1366
|
const receiptPath = `${prefix}/upgrade-receipts/${id}.json`;
|
|
1331
1367
|
const receipt = await executeHostUpgrade(plan, id, this.hostUpgradeActions(target, prefix, keepVersions, plan, verifyPlatform));
|
|
@@ -1472,10 +1508,10 @@ export class RemoteDeployer {
|
|
|
1472
1508
|
const lease = this.deploymentLeases.getStore()?.get(`${target.host}:${target.sshPort ?? 22}`);
|
|
1473
1509
|
return lease ? { command: lease.guard(command, timeout), timeout: timeout + 45_000 } : { command, timeout };
|
|
1474
1510
|
}
|
|
1475
|
-
async sshExec(target, command, timeout = 60_000) {
|
|
1511
|
+
async sshExec(target, command, timeout = 60_000, stdin) {
|
|
1476
1512
|
await this.confirmLease(target, 'remote command');
|
|
1477
1513
|
const guarded = this.guardedCommand(target, command, timeout);
|
|
1478
|
-
const result = await this.execution.ssh(sshTargetOf(target), guarded.command, { timeout: guarded.timeout });
|
|
1514
|
+
const result = await this.execution.ssh(sshTargetOf(target), guarded.command, { timeout: guarded.timeout, ...(stdin !== undefined && { stdin }) });
|
|
1479
1515
|
if (result.exitCode !== 0) {
|
|
1480
1516
|
const detail = result.stderr || result.stdout || `exit ${result.exitCode}`;
|
|
1481
1517
|
throw new Error(`ssh ${target.username ?? 'root'}@${target.host}: ${detail}`);
|
|
@@ -1486,7 +1522,8 @@ export class RemoteDeployer {
|
|
|
1486
1522
|
async sshExecData(target, command, timeout = 60_000) {
|
|
1487
1523
|
const result = await this.readFromNode(target, command, timeout);
|
|
1488
1524
|
if (result.code !== 0) {
|
|
1489
|
-
|
|
1525
|
+
const reason = redactDiagnosticText(commandFailure(result.stderr, `exit ${result.code}`));
|
|
1526
|
+
throw new Error(`ssh ${target.username ?? 'root'}@${target.host}: ${reason}`);
|
|
1490
1527
|
}
|
|
1491
1528
|
return result.stdout.trim();
|
|
1492
1529
|
}
|
|
@@ -1596,7 +1633,6 @@ export class RemoteDeployer {
|
|
|
1596
1633
|
const { createHash } = await import('node:crypto');
|
|
1597
1634
|
const fsp = await import('node:fs/promises');
|
|
1598
1635
|
const os = await import('node:os');
|
|
1599
|
-
const path = await import('node:path');
|
|
1600
1636
|
const stat = await fsp.stat(localDir).catch(() => null);
|
|
1601
1637
|
if (!stat?.isDirectory())
|
|
1602
1638
|
throw new Error(`No such directory to serve: ${localDir}`);
|
|
@@ -1811,6 +1847,7 @@ export class RemoteDeployer {
|
|
|
1811
1847
|
catch (err) {
|
|
1812
1848
|
this.logger.warn({ host: target.host, fresh, error: err.message.slice(0, 400) }, 'Could not carry the previous build forward — open tabs will reload onto the new one');
|
|
1813
1849
|
}
|
|
1850
|
+
return undefined;
|
|
1814
1851
|
}
|
|
1815
1852
|
async signalRemoteDaemon(target, appName) {
|
|
1816
1853
|
try {
|
|
@@ -1924,8 +1961,8 @@ export class RemoteDeployer {
|
|
|
1924
1961
|
// Private — Progress
|
|
1925
1962
|
// ===========================================================================
|
|
1926
1963
|
emitProgress(node, app, status, progress, message) {
|
|
1927
|
-
const event = { node, app, status, progress, message };
|
|
1928
|
-
this.lastProgress.set(
|
|
1964
|
+
const event = { ...transferScope.getStore(), node, app, status, progress, message: redactDiagnosticText(message), at: new Date().toISOString() };
|
|
1965
|
+
this.lastProgress.set(deploymentProgressKey(event), event);
|
|
1929
1966
|
for (const handler of this.progressHandlers) {
|
|
1930
1967
|
try {
|
|
1931
1968
|
handler(event);
|