@omnitron-dev/omnitron 0.2.0 → 0.3.1
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 +4 -0
- package/dist/BUILD.json +5 -0
- package/dist/cli/omnitron.js +375 -29
- package/dist/cli/omnitron.js.map +1 -1
- package/dist/cluster/cluster.rpc-service.d.ts +40 -0
- package/dist/cluster/cluster.rpc-service.d.ts.map +1 -1
- package/dist/cluster/cluster.rpc-service.js +49 -3
- package/dist/cluster/cluster.rpc-service.js.map +1 -1
- package/dist/cluster/config-sync.d.ts.map +1 -1
- package/dist/cluster/config-sync.js.map +1 -1
- package/dist/cluster/leader-election.d.ts +90 -2
- package/dist/cluster/leader-election.d.ts.map +1 -1
- package/dist/cluster/leader-election.js +176 -22
- package/dist/cluster/leader-election.js.map +1 -1
- package/dist/cluster/mesh-link.d.ts +136 -0
- package/dist/cluster/mesh-link.d.ts.map +1 -0
- package/dist/cluster/mesh-link.js +212 -0
- package/dist/cluster/mesh-link.js.map +1 -0
- package/dist/cluster/mesh.d.ts +59 -0
- package/dist/cluster/mesh.d.ts.map +1 -0
- package/dist/cluster/mesh.js +117 -0
- package/dist/cluster/mesh.js.map +1 -0
- package/dist/cluster/slave-connector.d.ts +193 -9
- package/dist/cluster/slave-connector.d.ts.map +1 -1
- package/dist/cluster/slave-connector.js +409 -37
- package/dist/cluster/slave-connector.js.map +1 -1
- package/dist/commands/audit.d.ts +65 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +233 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/backup.d.ts +4 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +255 -33
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cluster.d.ts.map +1 -1
- package/dist/commands/cluster.js +78 -47
- package/dist/commands/cluster.js.map +1 -1
- package/dist/commands/daemon-cmd.d.ts +7 -1
- package/dist/commands/daemon-cmd.d.ts.map +1 -1
- package/dist/commands/daemon-cmd.js +87 -21
- package/dist/commands/daemon-cmd.js.map +1 -1
- package/dist/commands/daemon-required.d.ts +34 -0
- package/dist/commands/daemon-required.d.ts.map +1 -0
- package/dist/commands/daemon-required.js +92 -0
- package/dist/commands/daemon-required.js.map +1 -0
- package/dist/commands/deploy.d.ts +70 -8
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +99 -64
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/discover.d.ts +25 -4
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +155 -102
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doctor.d.ts +293 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +1706 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env.d.ts +8 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +13 -8
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +3 -2
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/fleet-asking.d.ts +87 -0
- package/dist/commands/fleet-asking.d.ts.map +1 -0
- package/dist/commands/fleet-asking.js +176 -0
- package/dist/commands/fleet-asking.js.map +1 -0
- package/dist/commands/fleet-recover.d.ts +2 -0
- package/dist/commands/fleet-recover.d.ts.map +1 -0
- package/dist/commands/fleet-recover.js +30 -0
- package/dist/commands/fleet-recover.js.map +1 -0
- package/dist/commands/fleet.d.ts +18 -0
- package/dist/commands/fleet.d.ts.map +1 -1
- package/dist/commands/fleet.js +314 -74
- package/dist/commands/fleet.js.map +1 -1
- package/dist/commands/health-check.d.ts +8 -6
- package/dist/commands/health-check.d.ts.map +1 -1
- package/dist/commands/health-check.js +26 -23
- package/dist/commands/health-check.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +22 -8
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/host-ingress.d.ts +3 -0
- package/dist/commands/host-ingress.d.ts.map +1 -0
- package/dist/commands/host-ingress.js +31 -0
- package/dist/commands/host-ingress.js.map +1 -0
- package/dist/commands/infra.d.ts +42 -1
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +418 -49
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -36
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inspect-graph.d.ts.map +1 -1
- package/dist/commands/inspect-graph.js +2 -6
- package/dist/commands/inspect-graph.js.map +1 -1
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +110 -14
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/k8s.d.ts.map +1 -1
- package/dist/commands/k8s.js +23 -18
- package/dist/commands/k8s.js.map +1 -1
- package/dist/commands/kb.d.ts.map +1 -1
- package/dist/commands/kb.js +88 -29
- package/dist/commands/kb.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +21 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/log-health.d.ts +120 -0
- package/dist/commands/log-health.d.ts.map +1 -0
- package/dist/commands/log-health.js +212 -0
- package/dist/commands/log-health.js.map +1 -0
- package/dist/commands/logs.d.ts +96 -2
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +522 -196
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +35 -17
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/monit.d.ts.map +1 -1
- package/dist/commands/monit.js +3 -2
- package/dist/commands/monit.js.map +1 -1
- package/dist/commands/node.d.ts +56 -0
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +297 -69
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/output.d.ts +10 -0
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +41 -1
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +33 -19
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +19 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +125 -27
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/release-store.d.ts +28 -0
- package/dist/commands/release-store.d.ts.map +1 -0
- package/dist/commands/release-store.js +158 -0
- package/dist/commands/release-store.js.map +1 -0
- package/dist/commands/release.d.ts +61 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +555 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/reload.d.ts +16 -0
- package/dist/commands/reload.d.ts.map +1 -1
- package/dist/commands/reload.js +21 -5
- package/dist/commands/reload.js.map +1 -1
- package/dist/commands/remote.d.ts +40 -0
- package/dist/commands/remote.d.ts.map +1 -1
- package/dist/commands/remote.js +146 -35
- package/dist/commands/remote.js.map +1 -1
- package/dist/commands/restart.d.ts +16 -0
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +21 -5
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/scale.d.ts.map +1 -1
- package/dist/commands/scale.js +4 -3
- package/dist/commands/scale.js.map +1 -1
- package/dist/commands/secret.d.ts +54 -0
- package/dist/commands/secret.d.ts.map +1 -1
- package/dist/commands/secret.js +236 -34
- package/dist/commands/secret.js.map +1 -1
- package/dist/commands/service-units.d.ts +181 -0
- package/dist/commands/service-units.d.ts.map +1 -0
- package/dist/commands/service-units.js +291 -0
- package/dist/commands/service-units.js.map +1 -0
- package/dist/commands/service.d.ts +39 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +370 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/spinner.d.ts +29 -0
- package/dist/commands/spinner.d.ts.map +1 -0
- package/dist/commands/spinner.js +44 -0
- package/dist/commands/spinner.js.map +1 -0
- package/dist/commands/stack.d.ts +49 -1
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +325 -12
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/start.d.ts +16 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +20 -3
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +45 -29
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +16 -0
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +34 -6
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tor.d.ts +14 -7
- package/dist/commands/tor.d.ts.map +1 -1
- package/dist/commands/tor.js +113 -33
- package/dist/commands/tor.js.map +1 -1
- package/dist/commands/up.d.ts +85 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +180 -32
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/webapp.d.ts.map +1 -1
- package/dist/commands/webapp.js +2 -1
- package/dist/commands/webapp.js.map +1 -1
- package/dist/config/defaults.d.ts +16 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +26 -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 +2 -0
- package/dist/config/define-ecosystem.js.map +1 -1
- package/dist/config/index.d.ts +1 -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.d.ts +45 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +64 -6
- package/dist/config/loader.js.map +1 -1
- package/dist/config/omnitron-config.schema.d.ts.map +1 -1
- package/dist/config/omnitron-config.schema.js +16 -0
- package/dist/config/omnitron-config.schema.js.map +1 -1
- package/dist/config/types.d.ts +416 -44
- package/dist/config/types.d.ts.map +1 -1
- package/dist/daemon/config-reload.d.ts +27 -0
- package/dist/daemon/config-reload.d.ts.map +1 -0
- package/dist/daemon/config-reload.js +42 -0
- package/dist/daemon/config-reload.js.map +1 -0
- package/dist/daemon/daemon-client.d.ts +136 -2
- package/dist/daemon/daemon-client.d.ts.map +1 -1
- package/dist/daemon/daemon-client.js +307 -21
- package/dist/daemon/daemon-client.js.map +1 -1
- package/dist/daemon/daemon-entry.js +90 -30
- package/dist/daemon/daemon-entry.js.map +1 -1
- package/dist/daemon/daemon-scheduler.d.ts +4 -0
- package/dist/daemon/daemon-scheduler.d.ts.map +1 -1
- package/dist/daemon/daemon-scheduler.js +137 -7
- package/dist/daemon/daemon-scheduler.js.map +1 -1
- package/dist/daemon/daemon-state-store.service.d.ts +263 -0
- package/dist/daemon/daemon-state-store.service.d.ts.map +1 -0
- package/dist/daemon/daemon-state-store.service.js +446 -0
- package/dist/daemon/daemon-state-store.service.js.map +1 -0
- package/dist/daemon/daemon.d.ts +194 -4
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +1160 -157
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +163 -85
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +90 -1
- package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
- package/dist/daemon/daemon.rpc-service.js +439 -97
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/daemon/pid-manager.d.ts +16 -3
- package/dist/daemon/pid-manager.d.ts.map +1 -1
- package/dist/daemon/pid-manager.js +31 -4
- package/dist/daemon/pid-manager.js.map +1 -1
- package/dist/daemon/spawn-daemon.d.ts +73 -0
- package/dist/daemon/spawn-daemon.d.ts.map +1 -0
- package/dist/daemon/spawn-daemon.js +101 -0
- package/dist/daemon/spawn-daemon.js.map +1 -0
- package/dist/daemon/state-store.d.ts +65 -3
- package/dist/daemon/state-store.d.ts.map +1 -1
- package/dist/daemon/state-store.js +100 -58
- package/dist/daemon/state-store.js.map +1 -1
- package/dist/database/connection.d.ts +71 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +129 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/dialect.d.ts +60 -0
- package/dist/database/dialect.d.ts.map +1 -0
- package/dist/database/dialect.js +80 -0
- package/dist/database/dialect.js.map +1 -0
- package/dist/database/migrate.d.ts +5 -2
- package/dist/database/migrate.d.ts.map +1 -1
- package/dist/database/migrate.js +23 -33
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/migration-runner.d.ts +50 -0
- package/dist/database/migration-runner.d.ts.map +1 -0
- package/dist/database/migration-runner.js +143 -0
- package/dist/database/migration-runner.js.map +1 -0
- package/dist/database/migrations/006_login_throttle.d.ts +17 -0
- package/dist/database/migrations/006_login_throttle.d.ts.map +1 -0
- package/dist/database/migrations/006_login_throttle.js +33 -0
- package/dist/database/migrations/006_login_throttle.js.map +1 -0
- package/dist/database/migrations/007_sync_ingested.d.ts +21 -0
- package/dist/database/migrations/007_sync_ingested.d.ts.map +1 -0
- package/dist/database/migrations/007_sync_ingested.js +39 -0
- package/dist/database/migrations/007_sync_ingested.js.map +1 -0
- package/dist/database/migrations/008_node_health_version_text.d.ts +24 -0
- package/dist/database/migrations/008_node_health_version_text.d.ts.map +1 -0
- package/dist/database/migrations/008_node_health_version_text.js +35 -0
- package/dist/database/migrations/008_node_health_version_text.js.map +1 -0
- package/dist/database/migrations/009_node_health_unmeasured.d.ts +40 -0
- package/dist/database/migrations/009_node_health_unmeasured.d.ts.map +1 -0
- package/dist/database/migrations/009_node_health_unmeasured.js +63 -0
- package/dist/database/migrations/009_node_health_unmeasured.js.map +1 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.d.ts +22 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.d.ts.map +1 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.js +26 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.js.map +1 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.d.ts +56 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.d.ts.map +1 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.js +79 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.js.map +1 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.d.ts +26 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.d.ts.map +1 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.js +40 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.js.map +1 -0
- package/dist/database/migrations/013_an_alarm_delivered.d.ts +14 -0
- package/dist/database/migrations/013_an_alarm_delivered.d.ts.map +1 -0
- package/dist/database/migrations/013_an_alarm_delivered.js +28 -0
- package/dist/database/migrations/013_an_alarm_delivered.js.map +1 -0
- package/dist/database/migrations/index.d.ts +21 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/migrations/index.js +47 -0
- package/dist/database/migrations/index.js.map +1 -0
- package/dist/database/schema.d.ts +27 -11
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/sqlite-date-binding.d.ts +71 -0
- package/dist/database/sqlite-date-binding.d.ts.map +1 -0
- package/dist/database/sqlite-date-binding.js +174 -0
- package/dist/database/sqlite-date-binding.js.map +1 -0
- package/dist/execution/data-channel.d.ts +48 -0
- package/dist/execution/data-channel.d.ts.map +1 -0
- package/dist/execution/data-channel.js +55 -0
- package/dist/execution/data-channel.js.map +1 -0
- package/dist/execution/execution.service.d.ts +146 -0
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +330 -10
- package/dist/execution/execution.service.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/infrastructure/bare-metal-plan.d.ts +208 -0
- package/dist/infrastructure/bare-metal-plan.d.ts.map +1 -0
- package/dist/infrastructure/bare-metal-plan.js +363 -0
- package/dist/infrastructure/bare-metal-plan.js.map +1 -0
- package/dist/infrastructure/bare-metal-runner.d.ts +65 -0
- package/dist/infrastructure/bare-metal-runner.d.ts.map +1 -0
- package/dist/infrastructure/bare-metal-runner.js +354 -0
- package/dist/infrastructure/bare-metal-runner.js.map +1 -0
- package/dist/infrastructure/config-payload.d.ts +149 -0
- package/dist/infrastructure/config-payload.d.ts.map +1 -0
- package/dist/infrastructure/config-payload.js +235 -0
- package/dist/infrastructure/config-payload.js.map +1 -0
- package/dist/infrastructure/container-runtime.d.ts +170 -10
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +565 -52
- package/dist/infrastructure/container-runtime.js.map +1 -1
- package/dist/infrastructure/gateway-reachability.d.ts +85 -0
- package/dist/infrastructure/gateway-reachability.d.ts.map +1 -0
- package/dist/infrastructure/gateway-reachability.js +116 -0
- package/dist/infrastructure/gateway-reachability.js.map +1 -0
- package/dist/infrastructure/gateway-redis-db.d.ts +29 -0
- package/dist/infrastructure/gateway-redis-db.d.ts.map +1 -0
- package/dist/infrastructure/gateway-redis-db.js +32 -0
- package/dist/infrastructure/gateway-redis-db.js.map +1 -0
- package/dist/infrastructure/host-ingress-config.d.ts +12 -0
- package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-config.js +197 -0
- package/dist/infrastructure/host-ingress-config.js.map +1 -0
- package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-lock.js +36 -0
- package/dist/infrastructure/host-ingress-lock.js.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.js +114 -0
- package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.js +142 -0
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
- package/dist/infrastructure/host-ingress-types.d.ts +173 -0
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-types.js +2 -0
- package/dist/infrastructure/host-ingress-types.js.map +1 -0
- package/dist/infrastructure/host-ingress.service.d.ts +47 -0
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress.service.js +514 -0
- package/dist/infrastructure/host-ingress.service.js.map +1 -0
- package/dist/infrastructure/host-inspection.d.ts +223 -0
- package/dist/infrastructure/host-inspection.d.ts.map +1 -0
- package/dist/infrastructure/host-inspection.js +501 -0
- package/dist/infrastructure/host-inspection.js.map +1 -0
- package/dist/infrastructure/infrastructure-gate.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.d.ts +223 -7
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +500 -93
- package/dist/infrastructure/infrastructure.service.js.map +1 -1
- package/dist/infrastructure/known-machines.d.ts +76 -0
- package/dist/infrastructure/known-machines.d.ts.map +1 -0
- package/dist/infrastructure/known-machines.js +94 -0
- package/dist/infrastructure/known-machines.js.map +1 -0
- package/dist/infrastructure/node-credentials.d.ts +45 -0
- package/dist/infrastructure/node-credentials.d.ts.map +1 -0
- package/dist/infrastructure/node-credentials.js +80 -0
- package/dist/infrastructure/node-credentials.js.map +1 -0
- package/dist/infrastructure/orphan-containers.d.ts +99 -0
- package/dist/infrastructure/orphan-containers.d.ts.map +1 -0
- package/dist/infrastructure/orphan-containers.js +106 -0
- package/dist/infrastructure/orphan-containers.js.map +1 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts +20 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts.map +1 -1
- package/dist/infrastructure/phantom-endpoint-janitor.js +56 -6
- package/dist/infrastructure/phantom-endpoint-janitor.js.map +1 -1
- package/dist/infrastructure/presets/gateway-openresty.d.ts.map +1 -1
- package/dist/infrastructure/presets/gateway-openresty.js +29 -3
- package/dist/infrastructure/presets/gateway-openresty.js.map +1 -1
- package/dist/infrastructure/presets/minio.d.ts.map +1 -1
- package/dist/infrastructure/presets/minio.js +36 -3
- 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 +69 -2
- package/dist/infrastructure/presets/postgres.js.map +1 -1
- package/dist/infrastructure/presets/redis.d.ts.map +1 -1
- package/dist/infrastructure/presets/redis.js +13 -0
- package/dist/infrastructure/presets/redis.js.map +1 -1
- package/dist/infrastructure/presets/registry.d.ts.map +1 -1
- package/dist/infrastructure/presets/registry.js +81 -12
- package/dist/infrastructure/presets/registry.js.map +1 -1
- package/dist/infrastructure/presets/tor.d.ts +38 -0
- package/dist/infrastructure/presets/tor.d.ts.map +1 -1
- package/dist/infrastructure/presets/tor.js +78 -69
- package/dist/infrastructure/presets/tor.js.map +1 -1
- package/dist/infrastructure/presets/torrc.d.ts +54 -0
- package/dist/infrastructure/presets/torrc.d.ts.map +1 -0
- package/dist/infrastructure/presets/torrc.js +153 -0
- package/dist/infrastructure/presets/torrc.js.map +1 -0
- package/dist/infrastructure/presets/types.d.ts +17 -0
- package/dist/infrastructure/presets/types.d.ts.map +1 -1
- package/dist/infrastructure/provisioning-outcome.d.ts +85 -0
- package/dist/infrastructure/provisioning-outcome.d.ts.map +1 -0
- package/dist/infrastructure/provisioning-outcome.js +122 -0
- package/dist/infrastructure/provisioning-outcome.js.map +1 -0
- package/dist/infrastructure/server-registry.d.ts +27 -0
- package/dist/infrastructure/server-registry.d.ts.map +1 -1
- package/dist/infrastructure/server-registry.js +60 -5
- package/dist/infrastructure/server-registry.js.map +1 -1
- package/dist/infrastructure/service-binding.d.ts +60 -0
- package/dist/infrastructure/service-binding.d.ts.map +1 -0
- package/dist/infrastructure/service-binding.js +90 -0
- package/dist/infrastructure/service-binding.js.map +1 -0
- package/dist/infrastructure/service-credentials.d.ts +105 -0
- package/dist/infrastructure/service-credentials.d.ts.map +1 -0
- package/dist/infrastructure/service-credentials.js +141 -0
- package/dist/infrastructure/service-credentials.js.map +1 -0
- package/dist/infrastructure/service-resolver.d.ts +166 -12
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +535 -82
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/shipped-config.d.ts +43 -0
- package/dist/infrastructure/shipped-config.d.ts.map +1 -0
- package/dist/infrastructure/shipped-config.js +159 -0
- package/dist/infrastructure/shipped-config.js.map +1 -0
- package/dist/infrastructure/stack-infra-manager.d.ts +16 -1
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +81 -53
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +263 -6
- package/dist/infrastructure/types.d.ts.map +1 -1
- package/dist/mcp/mcp-bridge.d.ts.map +1 -1
- package/dist/mcp/mcp-bridge.js.map +1 -1
- package/dist/mcp/tool-groups/apps.tools.d.ts +2 -1
- package/dist/mcp/tool-groups/apps.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/apps.tools.js +2 -2
- package/dist/mcp/tool-groups/apps.tools.js.map +1 -1
- package/dist/mcp/tool-groups/infra.tools.d.ts +16 -2
- package/dist/mcp/tool-groups/infra.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/infra.tools.js +51 -41
- package/dist/mcp/tool-groups/infra.tools.js.map +1 -1
- package/dist/mcp/tool-groups/kb.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/kb.tools.js +4 -6
- package/dist/mcp/tool-groups/kb.tools.js.map +1 -1
- package/dist/mcp/tool-groups/management.tools.d.ts +20 -3
- package/dist/mcp/tool-groups/management.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/management.tools.js +158 -125
- package/dist/mcp/tool-groups/management.tools.js.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.d.ts +10 -1
- package/dist/mcp/tool-groups/monitoring.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.js +65 -18
- package/dist/mcp/tool-groups/monitoring.tools.js.map +1 -1
- package/dist/mcp/unavailable-tools.d.ts +35 -0
- package/dist/mcp/unavailable-tools.d.ts.map +1 -0
- package/dist/mcp/unavailable-tools.js +59 -0
- package/dist/mcp/unavailable-tools.js.map +1 -0
- package/dist/monitoring/app-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/app-health.indicator.js +12 -0
- package/dist/monitoring/app-health.indicator.js.map +1 -1
- package/dist/monitoring/desktop-notifier.d.ts +26 -0
- package/dist/monitoring/desktop-notifier.d.ts.map +1 -0
- package/dist/monitoring/desktop-notifier.js +49 -0
- package/dist/monitoring/desktop-notifier.js.map +1 -0
- package/dist/monitoring/docker-health.indicator.d.ts +17 -1
- package/dist/monitoring/docker-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/docker-health.indicator.js +38 -8
- package/dist/monitoring/docker-health.indicator.js.map +1 -1
- package/dist/monitoring/event-loop-stall.indicator.d.ts +26 -0
- package/dist/monitoring/event-loop-stall.indicator.d.ts.map +1 -0
- package/dist/monitoring/event-loop-stall.indicator.js +47 -0
- package/dist/monitoring/event-loop-stall.indicator.js.map +1 -0
- package/dist/monitoring/event-loop-watch.d.ts +124 -0
- package/dist/monitoring/event-loop-watch.d.ts.map +1 -0
- package/dist/monitoring/event-loop-watch.js +179 -0
- package/dist/monitoring/event-loop-watch.js.map +1 -0
- package/dist/monitoring/host-disk.d.ts +6 -0
- package/dist/monitoring/host-disk.d.ts.map +1 -0
- package/dist/monitoring/host-disk.js +26 -0
- package/dist/monitoring/host-disk.js.map +1 -0
- package/dist/monitoring/log-line.d.ts +188 -0
- package/dist/monitoring/log-line.d.ts.map +1 -0
- package/dist/monitoring/log-line.js +458 -0
- package/dist/monitoring/log-line.js.map +1 -0
- package/dist/monitoring/log-manager.d.ts +89 -8
- package/dist/monitoring/log-manager.d.ts.map +1 -1
- package/dist/monitoring/log-manager.js +246 -77
- package/dist/monitoring/log-manager.js.map +1 -1
- package/dist/observability/metrics-bridge.d.ts.map +1 -1
- package/dist/observability/metrics-server.d.ts.map +1 -1
- package/dist/operations.d.ts +16 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +13 -0
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +157 -2
- package/dist/orchestrator/app-handle.d.ts.map +1 -1
- package/dist/orchestrator/app-handle.js +165 -3
- package/dist/orchestrator/app-handle.js.map +1 -1
- package/dist/orchestrator/app-health.d.ts +33 -0
- package/dist/orchestrator/app-health.d.ts.map +1 -0
- package/dist/orchestrator/app-health.js +74 -0
- package/dist/orchestrator/app-health.js.map +1 -0
- package/dist/orchestrator/app-traffic.d.ts +14 -0
- package/dist/orchestrator/app-traffic.d.ts.map +1 -0
- package/dist/orchestrator/app-traffic.js +33 -0
- package/dist/orchestrator/app-traffic.js.map +1 -0
- package/dist/orchestrator/bootstrap-loader-child.d.ts +19 -0
- package/dist/orchestrator/bootstrap-loader-child.d.ts.map +1 -0
- package/dist/orchestrator/bootstrap-loader-child.js +43 -0
- package/dist/orchestrator/bootstrap-loader-child.js.map +1 -0
- package/dist/orchestrator/bootstrap-loader.d.ts +72 -0
- package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-loader.js +350 -5
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +99 -4
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +332 -20
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +6 -12
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +120 -83
- package/dist/orchestrator/build-service.js.map +1 -1
- package/dist/orchestrator/call-exposed-service.d.ts +7 -0
- package/dist/orchestrator/call-exposed-service.d.ts.map +1 -0
- package/dist/orchestrator/call-exposed-service.js +50 -0
- package/dist/orchestrator/call-exposed-service.js.map +1 -0
- package/dist/orchestrator/classic-launcher.d.ts +1 -0
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +40 -4
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/file-watcher.d.ts +79 -1
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +193 -7
- package/dist/orchestrator/file-watcher.js.map +1 -1
- package/dist/orchestrator/http-routes.d.ts +4 -0
- package/dist/orchestrator/http-routes.d.ts.map +1 -0
- package/dist/orchestrator/http-routes.js +19 -0
- package/dist/orchestrator/http-routes.js.map +1 -0
- package/dist/orchestrator/module-worker-process.d.ts.map +1 -1
- package/dist/orchestrator/module-worker-process.js +10 -0
- package/dist/orchestrator/module-worker-process.js.map +1 -1
- package/dist/orchestrator/orchestrator.service.d.ts +385 -11
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +1738 -364
- package/dist/orchestrator/orchestrator.service.js.map +1 -1
- package/dist/orchestrator/owned-pids.d.ts +83 -0
- package/dist/orchestrator/owned-pids.d.ts.map +1 -0
- package/dist/orchestrator/owned-pids.js +93 -0
- package/dist/orchestrator/owned-pids.js.map +1 -0
- package/dist/orchestrator/port-conflict.d.ts +102 -0
- package/dist/orchestrator/port-conflict.d.ts.map +1 -0
- package/dist/orchestrator/port-conflict.js +131 -0
- package/dist/orchestrator/port-conflict.js.map +1 -0
- package/dist/orchestrator/process-janitor.d.ts +78 -4
- package/dist/orchestrator/process-janitor.d.ts.map +1 -1
- package/dist/orchestrator/process-janitor.js +246 -30
- package/dist/orchestrator/process-janitor.js.map +1 -1
- package/dist/orchestrator/ps-metrics.d.ts +37 -0
- package/dist/orchestrator/ps-metrics.d.ts.map +1 -0
- package/dist/orchestrator/ps-metrics.js +60 -0
- package/dist/orchestrator/ps-metrics.js.map +1 -0
- package/dist/orchestrator/service-router.d.ts +58 -2
- package/dist/orchestrator/service-router.d.ts.map +1 -1
- package/dist/orchestrator/service-router.js +157 -25
- package/dist/orchestrator/service-router.js.map +1 -1
- package/dist/orchestrator/topology-query.d.ts +49 -0
- package/dist/orchestrator/topology-query.d.ts.map +1 -0
- package/dist/orchestrator/topology-query.js +54 -0
- package/dist/orchestrator/topology-query.js.map +1 -0
- package/dist/project/artifact-builder.d.ts +174 -3
- package/dist/project/artifact-builder.d.ts.map +1 -1
- package/dist/project/artifact-builder.js +454 -42
- package/dist/project/artifact-builder.js.map +1 -1
- package/dist/project/build-decision.d.ts +58 -0
- package/dist/project/build-decision.d.ts.map +1 -0
- package/dist/project/build-decision.js +59 -0
- package/dist/project/build-decision.js.map +1 -0
- package/dist/project/config-resolver.d.ts +6 -4
- package/dist/project/config-resolver.d.ts.map +1 -1
- package/dist/project/config-resolver.js +128 -74
- package/dist/project/config-resolver.js.map +1 -1
- package/dist/project/declared-config.d.ts +42 -0
- package/dist/project/declared-config.d.ts.map +1 -0
- package/dist/project/declared-config.js +60 -0
- package/dist/project/declared-config.js.map +1 -0
- package/dist/project/dependency-analyzer.d.ts.map +1 -1
- package/dist/project/dependency-analyzer.js.map +1 -1
- package/dist/project/deploy-phases.d.ts +35 -0
- package/dist/project/deploy-phases.d.ts.map +1 -0
- package/dist/project/deploy-phases.js +75 -0
- package/dist/project/deploy-phases.js.map +1 -0
- package/dist/project/exec-in-group.d.ts +49 -0
- package/dist/project/exec-in-group.d.ts.map +1 -0
- package/dist/project/exec-in-group.js +100 -0
- package/dist/project/exec-in-group.js.map +1 -0
- package/dist/project/node-app-config.d.ts +101 -0
- package/dist/project/node-app-config.d.ts.map +1 -0
- package/dist/project/node-app-config.js +134 -0
- package/dist/project/node-app-config.js.map +1 -0
- package/dist/project/node-app-health.d.ts +76 -0
- package/dist/project/node-app-health.d.ts.map +1 -0
- package/dist/project/node-app-health.js +119 -0
- package/dist/project/node-app-health.js.map +1 -0
- package/dist/project/operator-account.d.ts +293 -0
- package/dist/project/operator-account.d.ts.map +1 -0
- package/dist/project/operator-account.js +373 -0
- package/dist/project/operator-account.js.map +1 -0
- package/dist/project/registry.d.ts +45 -8
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +214 -64
- package/dist/project/registry.js.map +1 -1
- package/dist/project/requirements-scanner.d.ts +1 -0
- package/dist/project/requirements-scanner.d.ts.map +1 -1
- package/dist/project/requirements-scanner.js +28 -3
- package/dist/project/requirements-scanner.js.map +1 -1
- package/dist/project/stack-env.d.ts +37 -0
- package/dist/project/stack-env.d.ts.map +1 -0
- package/dist/project/stack-env.js +85 -0
- package/dist/project/stack-env.js.map +1 -0
- package/dist/project/stand-containers.d.ts +11 -0
- package/dist/project/stand-containers.d.ts.map +1 -0
- package/dist/project/stand-containers.js +27 -0
- package/dist/project/stand-containers.js.map +1 -0
- package/dist/project/working-tree.d.ts +62 -0
- package/dist/project/working-tree.d.ts.map +1 -0
- package/dist/project/working-tree.js +101 -0
- package/dist/project/working-tree.js.map +1 -0
- package/dist/release/artifact-store.d.ts +360 -0
- package/dist/release/artifact-store.d.ts.map +1 -0
- package/dist/release/artifact-store.js +1040 -0
- package/dist/release/artifact-store.js.map +1 -0
- package/dist/release/attest-on-node.d.ts +93 -0
- package/dist/release/attest-on-node.d.ts.map +1 -0
- package/dist/release/attest-on-node.js +207 -0
- package/dist/release/attest-on-node.js.map +1 -0
- package/dist/release/attest.d.ts +135 -0
- package/dist/release/attest.d.ts.map +1 -0
- package/dist/release/attest.js +199 -0
- package/dist/release/attest.js.map +1 -0
- package/dist/release/build-run.d.ts +151 -0
- package/dist/release/build-run.d.ts.map +1 -0
- package/dist/release/build-run.js +609 -0
- package/dist/release/build-run.js.map +1 -0
- package/dist/release/builder.d.ts +57 -0
- package/dist/release/builder.d.ts.map +1 -0
- package/dist/release/builder.js +120 -0
- package/dist/release/builder.js.map +1 -0
- package/dist/release/daemon-omni.d.ts +41 -0
- package/dist/release/daemon-omni.d.ts.map +1 -0
- package/dist/release/daemon-omni.js +59 -0
- package/dist/release/daemon-omni.js.map +1 -0
- package/dist/release/definition-inputs.d.ts +34 -0
- package/dist/release/definition-inputs.d.ts.map +1 -0
- package/dist/release/definition-inputs.js +90 -0
- package/dist/release/definition-inputs.js.map +1 -0
- package/dist/release/delivered.d.ts +53 -0
- package/dist/release/delivered.d.ts.map +1 -0
- package/dist/release/delivered.js +81 -0
- package/dist/release/delivered.js.map +1 -0
- package/dist/release/layout.d.ts +61 -0
- package/dist/release/layout.d.ts.map +1 -0
- package/dist/release/layout.js +114 -0
- package/dist/release/layout.js.map +1 -0
- package/dist/release/load.d.ts +44 -0
- package/dist/release/load.d.ts.map +1 -0
- package/dist/release/load.js +84 -0
- package/dist/release/load.js.map +1 -0
- package/dist/release/manifest.d.ts +299 -0
- package/dist/release/manifest.d.ts.map +1 -0
- package/dist/release/manifest.js +176 -0
- package/dist/release/manifest.js.map +1 -0
- package/dist/release/migrations.d.ts +32 -0
- package/dist/release/migrations.d.ts.map +1 -0
- package/dist/release/migrations.js +51 -0
- package/dist/release/migrations.js.map +1 -0
- package/dist/release/publish.d.ts +71 -0
- package/dist/release/publish.d.ts.map +1 -0
- package/dist/release/publish.js +102 -0
- package/dist/release/publish.js.map +1 -0
- package/dist/release/store.d.ts +174 -0
- package/dist/release/store.d.ts.map +1 -0
- package/dist/release/store.js +257 -0
- package/dist/release/store.js.map +1 -0
- package/dist/services/alert.rpc-service.d.ts +11 -15
- package/dist/services/alert.rpc-service.d.ts.map +1 -1
- package/dist/services/alert.rpc-service.js +29 -14
- package/dist/services/alert.rpc-service.js.map +1 -1
- package/dist/services/alert.service.d.ts +96 -59
- package/dist/services/alert.service.d.ts.map +1 -1
- package/dist/services/alert.service.js +455 -70
- package/dist/services/alert.service.js.map +1 -1
- package/dist/services/anonymous-input.d.ts +26 -0
- package/dist/services/anonymous-input.d.ts.map +1 -0
- package/dist/services/anonymous-input.js +44 -0
- package/dist/services/anonymous-input.js.map +1 -0
- package/dist/services/audit.rpc-service.d.ts +27 -0
- package/dist/services/audit.rpc-service.d.ts.map +1 -0
- package/dist/services/audit.rpc-service.js +57 -0
- package/dist/services/audit.rpc-service.js.map +1 -0
- package/dist/services/audit.service.d.ts +165 -0
- package/dist/services/audit.service.d.ts.map +1 -0
- package/dist/services/audit.service.js +242 -0
- package/dist/services/audit.service.js.map +1 -0
- package/dist/services/auth-context.d.ts +21 -1
- package/dist/services/auth-context.d.ts.map +1 -1
- package/dist/services/auth-context.js +51 -5
- package/dist/services/auth-context.js.map +1 -1
- package/dist/services/auth.rpc-service.d.ts +0 -1
- package/dist/services/auth.rpc-service.d.ts.map +1 -1
- package/dist/services/auth.rpc-service.js +23 -9
- package/dist/services/auth.rpc-service.js.map +1 -1
- package/dist/services/auth.service.d.ts +47 -33
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +155 -23
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/backup-pipeline.d.ts +97 -0
- package/dist/services/backup-pipeline.d.ts.map +1 -0
- package/dist/services/backup-pipeline.js +286 -0
- package/dist/services/backup-pipeline.js.map +1 -0
- package/dist/services/backup-schedule.d.ts +69 -0
- package/dist/services/backup-schedule.d.ts.map +1 -0
- package/dist/services/backup-schedule.js +132 -0
- package/dist/services/backup-schedule.js.map +1 -0
- package/dist/services/backup.rpc-service.d.ts +31 -2
- package/dist/services/backup.rpc-service.d.ts.map +1 -1
- package/dist/services/backup.rpc-service.js +53 -0
- package/dist/services/backup.rpc-service.js.map +1 -1
- package/dist/services/backup.service.d.ts +458 -14
- package/dist/services/backup.service.d.ts.map +1 -1
- package/dist/services/backup.service.js +1368 -170
- package/dist/services/backup.service.js.map +1 -1
- package/dist/services/bundle-build-worker.d.ts +19 -0
- package/dist/services/bundle-build-worker.d.ts.map +1 -0
- package/dist/services/bundle-build-worker.js +40 -0
- package/dist/services/bundle-build-worker.js.map +1 -0
- package/dist/services/bundle-builder.d.ts +490 -0
- package/dist/services/bundle-builder.d.ts.map +1 -0
- package/dist/services/bundle-builder.js +1159 -0
- package/dist/services/bundle-builder.js.map +1 -0
- package/dist/services/bundle-worker-protocol.d.ts +19 -0
- package/dist/services/bundle-worker-protocol.d.ts.map +1 -0
- package/dist/services/bundle-worker-protocol.js +32 -0
- package/dist/services/bundle-worker-protocol.js.map +1 -0
- package/dist/services/deploy.rpc-service.d.ts +4 -1
- package/dist/services/deploy.rpc-service.d.ts.map +1 -1
- package/dist/services/deploy.rpc-service.js +10 -0
- package/dist/services/deploy.rpc-service.js.map +1 -1
- package/dist/services/deploy.service.d.ts +14 -24
- package/dist/services/deploy.service.d.ts.map +1 -1
- package/dist/services/deploy.service.js +46 -5
- package/dist/services/deploy.service.js.map +1 -1
- package/dist/services/discovery.rpc-service.d.ts +2 -1
- package/dist/services/discovery.rpc-service.d.ts.map +1 -1
- package/dist/services/discovery.rpc-service.js.map +1 -1
- package/dist/services/discovery.service.d.ts +32 -28
- package/dist/services/discovery.service.d.ts.map +1 -1
- package/dist/services/discovery.service.js +108 -133
- package/dist/services/discovery.service.js.map +1 -1
- package/dist/services/event-broadcaster.rpc-service.d.ts +36 -23
- package/dist/services/event-broadcaster.rpc-service.d.ts.map +1 -1
- package/dist/services/event-broadcaster.rpc-service.js +70 -32
- package/dist/services/event-broadcaster.rpc-service.js.map +1 -1
- package/dist/services/event-broadcaster.service.d.ts.map +1 -1
- package/dist/services/event-broadcaster.service.js.map +1 -1
- package/dist/services/fleet.rpc-service.d.ts +2 -1
- package/dist/services/fleet.rpc-service.d.ts.map +1 -1
- package/dist/services/fleet.rpc-service.js +3 -1
- package/dist/services/fleet.rpc-service.js.map +1 -1
- package/dist/services/fleet.service.d.ts +32 -34
- package/dist/services/fleet.service.d.ts.map +1 -1
- package/dist/services/fleet.service.js +66 -10
- package/dist/services/fleet.service.js.map +1 -1
- package/dist/services/health-check.rpc-service.d.ts +2 -1
- package/dist/services/health-check.rpc-service.d.ts.map +1 -1
- package/dist/services/health-check.rpc-service.js.map +1 -1
- package/dist/services/health-check.service.d.ts +50 -36
- package/dist/services/health-check.service.d.ts.map +1 -1
- package/dist/services/health-check.service.js +179 -182
- package/dist/services/health-check.service.js.map +1 -1
- package/dist/services/host-operation-barrier.d.ts +8 -0
- package/dist/services/host-operation-barrier.d.ts.map +1 -0
- package/dist/services/host-operation-barrier.js +44 -0
- package/dist/services/host-operation-barrier.js.map +1 -0
- package/dist/services/host-upgrade.d.ts +129 -0
- package/dist/services/host-upgrade.d.ts.map +1 -0
- package/dist/services/host-upgrade.js +352 -0
- package/dist/services/host-upgrade.js.map +1 -0
- package/dist/services/infrastructure.rpc-service.d.ts +312 -2
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +584 -11
- package/dist/services/infrastructure.rpc-service.js.map +1 -1
- package/dist/services/kubernetes.rpc-service.d.ts +2 -1
- package/dist/services/kubernetes.rpc-service.d.ts.map +1 -1
- package/dist/services/kubernetes.rpc-service.js.map +1 -1
- package/dist/services/kubernetes.service.d.ts +5 -39
- package/dist/services/kubernetes.service.d.ts.map +1 -1
- package/dist/services/kubernetes.service.js +29 -5
- package/dist/services/kubernetes.service.js.map +1 -1
- package/dist/services/local-bundle.d.ts +160 -0
- package/dist/services/local-bundle.d.ts.map +1 -0
- package/dist/services/local-bundle.js +242 -0
- package/dist/services/local-bundle.js.map +1 -0
- package/dist/services/lockout.d.ts +28 -0
- package/dist/services/lockout.d.ts.map +1 -0
- package/dist/services/lockout.js +41 -0
- package/dist/services/lockout.js.map +1 -0
- package/dist/services/log-collector.rpc-service.d.ts +16 -0
- package/dist/services/log-collector.rpc-service.d.ts.map +1 -1
- package/dist/services/log-collector.rpc-service.js +16 -0
- package/dist/services/log-collector.rpc-service.js.map +1 -1
- package/dist/services/log-collector.service.d.ts +172 -54
- package/dist/services/log-collector.service.d.ts.map +1 -1
- package/dist/services/log-collector.service.js +492 -102
- package/dist/services/log-collector.service.js.map +1 -1
- package/dist/services/log-retention.d.ts +50 -0
- package/dist/services/log-retention.d.ts.map +1 -0
- package/dist/services/log-retention.js +52 -0
- package/dist/services/log-retention.js.map +1 -0
- package/dist/services/maintenance-lock.d.ts +162 -0
- package/dist/services/maintenance-lock.d.ts.map +1 -0
- package/dist/services/maintenance-lock.js +316 -0
- package/dist/services/maintenance-lock.js.map +1 -0
- package/dist/services/master-address.d.ts +107 -0
- package/dist/services/master-address.d.ts.map +1 -0
- package/dist/services/master-address.js +154 -0
- package/dist/services/master-address.js.map +1 -0
- package/dist/services/migration-output.d.ts +16 -0
- package/dist/services/migration-output.d.ts.map +1 -0
- package/dist/services/migration-output.js +22 -0
- package/dist/services/migration-output.js.map +1 -0
- package/dist/services/netron-telemetry-transport.d.ts.map +1 -1
- package/dist/services/netron-telemetry-transport.js.map +1 -1
- package/dist/services/node-deploy-lease.d.ts +171 -0
- package/dist/services/node-deploy-lease.d.ts.map +1 -0
- package/dist/services/node-deploy-lease.js +460 -0
- package/dist/services/node-deploy-lease.js.map +1 -0
- package/dist/services/node-health.repository.d.ts +63 -4
- package/dist/services/node-health.repository.d.ts.map +1 -1
- package/dist/services/node-health.repository.js +108 -67
- package/dist/services/node-health.repository.js.map +1 -1
- package/dist/services/node-manager.rpc-service.d.ts +360 -10
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +754 -34
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +267 -95
- package/dist/services/node-manager.service.d.ts.map +1 -1
- package/dist/services/node-manager.service.js +805 -103
- package/dist/services/node-manager.service.js.map +1 -1
- package/dist/services/node-upgrade.d.ts +129 -0
- package/dist/services/node-upgrade.d.ts.map +1 -0
- package/dist/services/node-upgrade.js +161 -0
- package/dist/services/node-upgrade.js.map +1 -0
- package/dist/services/node-upgrade.service.d.ts +232 -0
- package/dist/services/node-upgrade.service.d.ts.map +1 -0
- package/dist/services/node-upgrade.service.js +468 -0
- package/dist/services/node-upgrade.service.js.map +1 -0
- package/dist/services/pipeline.rpc-service.d.ts +6 -1
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +9 -0
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +17 -46
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +84 -9
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +140 -5
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +260 -22
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +687 -15
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +2846 -337
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/redeploy-decision.d.ts +176 -0
- package/dist/services/redeploy-decision.d.ts.map +1 -0
- package/dist/services/redeploy-decision.js +142 -0
- package/dist/services/redeploy-decision.js.map +1 -0
- package/dist/services/release.rpc-service.d.ts +159 -0
- package/dist/services/release.rpc-service.d.ts.map +1 -0
- package/dist/services/release.rpc-service.js +395 -0
- package/dist/services/release.rpc-service.js.map +1 -0
- package/dist/services/release.service.d.ts +114 -0
- package/dist/services/release.service.d.ts.map +1 -0
- package/dist/services/release.service.js +208 -0
- package/dist/services/release.service.js.map +1 -0
- package/dist/services/remote-deployer.service.d.ts +580 -8
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +1786 -169
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-ops.service.d.ts +51 -9
- package/dist/services/remote-ops.service.d.ts.map +1 -1
- package/dist/services/remote-ops.service.js +235 -39
- package/dist/services/remote-ops.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +124 -0
- package/dist/services/remote-provisioner.d.ts.map +1 -0
- package/dist/services/remote-provisioner.js +258 -0
- package/dist/services/remote-provisioner.js.map +1 -0
- package/dist/services/secrets.rpc-service.d.ts +51 -2
- package/dist/services/secrets.rpc-service.d.ts.map +1 -1
- package/dist/services/secrets.rpc-service.js +81 -2
- package/dist/services/secrets.rpc-service.js.map +1 -1
- package/dist/services/secrets.service.d.ts +108 -9
- package/dist/services/secrets.service.d.ts.map +1 -1
- package/dist/services/secrets.service.js +313 -48
- package/dist/services/secrets.service.js.map +1 -1
- package/dist/services/slave-storage.service.d.ts +107 -0
- package/dist/services/slave-storage.service.d.ts.map +1 -1
- package/dist/services/slave-storage.service.js +171 -2
- package/dist/services/slave-storage.service.js.map +1 -1
- package/dist/services/static-carry-forward.d.ts +110 -0
- package/dist/services/static-carry-forward.d.ts.map +1 -0
- package/dist/services/static-carry-forward.js +433 -0
- package/dist/services/static-carry-forward.js.map +1 -0
- package/dist/services/sync-policy.d.ts +167 -0
- package/dist/services/sync-policy.d.ts.map +1 -0
- package/dist/services/sync-policy.js +161 -0
- package/dist/services/sync-policy.js.map +1 -0
- package/dist/services/sync-summary.d.ts +39 -0
- package/dist/services/sync-summary.d.ts.map +1 -0
- package/dist/services/sync-summary.js +62 -0
- package/dist/services/sync-summary.js.map +1 -0
- package/dist/services/sync.rpc-service.d.ts +19 -7
- package/dist/services/sync.rpc-service.d.ts.map +1 -1
- package/dist/services/sync.rpc-service.js +36 -5
- package/dist/services/sync.rpc-service.js.map +1 -1
- package/dist/services/sync.service.d.ts +350 -18
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +864 -116
- package/dist/services/sync.service.js.map +1 -1
- package/dist/services/system-info.rpc-service.d.ts +2 -1
- package/dist/services/system-info.rpc-service.d.ts.map +1 -1
- package/dist/services/system-info.rpc-service.js.map +1 -1
- package/dist/services/system-info.service.d.ts +56 -68
- package/dist/services/system-info.service.d.ts.map +1 -1
- package/dist/services/system-info.service.js +240 -127
- package/dist/services/system-info.service.js.map +1 -1
- package/dist/services/telemetry.rpc-service.d.ts.map +1 -1
- package/dist/services/telemetry.rpc-service.js +9 -3
- package/dist/services/telemetry.rpc-service.js.map +1 -1
- package/dist/services/telemetry.service.d.ts +4 -2
- package/dist/services/telemetry.service.d.ts.map +1 -1
- package/dist/services/telemetry.service.js +4 -2
- package/dist/services/telemetry.service.js.map +1 -1
- package/dist/services/trace-collector.rpc-service.d.ts +2 -1
- package/dist/services/trace-collector.rpc-service.d.ts.map +1 -1
- package/dist/services/trace-collector.rpc-service.js.map +1 -1
- package/dist/services/trace-collector.service.d.ts +2 -41
- package/dist/services/trace-collector.service.d.ts.map +1 -1
- package/dist/services/trace-collector.service.js +27 -7
- package/dist/services/trace-collector.service.js.map +1 -1
- package/dist/services/wait-for-postgres.d.ts +28 -0
- package/dist/services/wait-for-postgres.d.ts.map +1 -0
- package/dist/services/wait-for-postgres.js +77 -0
- package/dist/services/wait-for-postgres.js.map +1 -0
- package/dist/shared/alert-expression.d.ts +60 -0
- package/dist/shared/alert-expression.d.ts.map +1 -0
- package/dist/shared/alert-expression.js +124 -0
- package/dist/shared/alert-expression.js.map +1 -0
- package/dist/shared/audit-outcome.d.ts +39 -0
- package/dist/shared/audit-outcome.d.ts.map +1 -0
- package/dist/shared/audit-outcome.js +45 -0
- package/dist/shared/audit-outcome.js.map +1 -0
- package/dist/shared/build-freshness.d.ts +59 -0
- package/dist/shared/build-freshness.d.ts.map +1 -0
- package/dist/shared/build-freshness.js +113 -0
- package/dist/shared/build-freshness.js.map +1 -0
- package/dist/shared/build-stamp.d.ts +26 -0
- package/dist/shared/build-stamp.d.ts.map +1 -0
- package/dist/shared/build-stamp.js +36 -0
- package/dist/shared/build-stamp.js.map +1 -0
- package/dist/shared/describe-error.d.ts +22 -0
- package/dist/shared/describe-error.d.ts.map +1 -0
- package/dist/shared/describe-error.js +39 -0
- package/dist/shared/describe-error.js.map +1 -0
- package/dist/shared/dto/alerts.d.ts +101 -0
- package/dist/shared/dto/alerts.d.ts.map +1 -0
- package/dist/shared/dto/alerts.js +9 -0
- package/dist/shared/dto/alerts.js.map +1 -0
- package/dist/shared/dto/auth.d.ts +49 -0
- package/dist/shared/dto/auth.d.ts.map +1 -0
- package/dist/shared/dto/auth.js +14 -0
- package/dist/shared/dto/auth.js.map +1 -0
- package/dist/shared/dto/backups.d.ts +16 -0
- package/dist/shared/dto/backups.d.ts.map +1 -0
- package/dist/shared/dto/backups.js +9 -0
- package/dist/shared/dto/backups.js.map +1 -0
- package/dist/shared/dto/deploy.d.ts +28 -0
- package/dist/shared/dto/deploy.d.ts.map +1 -0
- package/dist/shared/dto/deploy.js +8 -0
- package/dist/shared/dto/deploy.js.map +1 -0
- package/dist/shared/dto/discovery.d.ts +24 -0
- package/dist/shared/dto/discovery.d.ts.map +1 -0
- package/dist/shared/dto/discovery.js +9 -0
- package/dist/shared/dto/discovery.js.map +1 -0
- package/dist/shared/dto/fleet.d.ts +35 -0
- package/dist/shared/dto/fleet.d.ts.map +1 -0
- package/dist/shared/dto/fleet.js +8 -0
- package/dist/shared/dto/fleet.js.map +1 -0
- package/dist/shared/dto/health.d.ts +26 -0
- package/dist/shared/dto/health.d.ts.map +1 -0
- package/dist/shared/dto/health.js +9 -0
- package/dist/shared/dto/health.js.map +1 -0
- package/dist/shared/dto/kubernetes.d.ts +44 -0
- package/dist/shared/dto/kubernetes.d.ts.map +1 -0
- package/dist/shared/dto/kubernetes.js +9 -0
- package/dist/shared/dto/kubernetes.js.map +1 -0
- package/dist/shared/dto/logs.d.ts +77 -0
- package/dist/shared/dto/logs.d.ts.map +1 -0
- package/dist/shared/dto/logs.js +10 -0
- package/dist/shared/dto/logs.js.map +1 -0
- package/dist/shared/dto/metrics.d.ts +65 -0
- package/dist/shared/dto/metrics.d.ts.map +1 -0
- package/dist/shared/dto/metrics.js +17 -0
- package/dist/shared/dto/metrics.js.map +1 -0
- package/dist/shared/dto/nodes.d.ts +347 -0
- package/dist/shared/dto/nodes.d.ts.map +1 -0
- package/dist/shared/dto/nodes.js +8 -0
- package/dist/shared/dto/nodes.js.map +1 -0
- package/dist/shared/dto/pipelines.d.ts +53 -0
- package/dist/shared/dto/pipelines.d.ts.map +1 -0
- package/dist/shared/dto/pipelines.js +9 -0
- package/dist/shared/dto/pipelines.js.map +1 -0
- package/dist/shared/dto/project.d.ts +142 -8
- package/dist/shared/dto/project.d.ts.map +1 -1
- package/dist/shared/dto/services.d.ts +858 -7
- package/dist/shared/dto/services.d.ts.map +1 -1
- package/dist/shared/dto/system-info.d.ts +93 -0
- package/dist/shared/dto/system-info.d.ts.map +1 -0
- package/dist/shared/dto/system-info.js +9 -0
- package/dist/shared/dto/system-info.js.map +1 -0
- package/dist/shared/dto/traces.d.ts +49 -0
- package/dist/shared/dto/traces.d.ts.map +1 -0
- package/dist/shared/dto/traces.js +9 -0
- package/dist/shared/dto/traces.js.map +1 -0
- package/dist/shared/env-config.d.ts +74 -0
- package/dist/shared/env-config.d.ts.map +1 -0
- package/dist/shared/env-config.js +99 -0
- package/dist/shared/env-config.js.map +1 -0
- package/dist/shared/events.d.ts +45 -39
- package/dist/shared/events.d.ts.map +1 -1
- package/dist/shared/events.js +6 -0
- package/dist/shared/events.js.map +1 -1
- package/dist/shared/format.d.ts +1 -1
- package/dist/shared/format.d.ts.map +1 -1
- package/dist/shared/format.js +4 -0
- package/dist/shared/format.js.map +1 -1
- package/dist/shared/local-infra-host.d.ts +28 -0
- package/dist/shared/local-infra-host.d.ts.map +1 -0
- package/dist/shared/local-infra-host.js +28 -0
- package/dist/shared/local-infra-host.js.map +1 -0
- package/dist/shared/node-check.d.ts +37 -0
- package/dist/shared/node-check.d.ts.map +1 -0
- package/dist/shared/node-check.js +41 -0
- package/dist/shared/node-check.js.map +1 -0
- package/dist/shared/paths.d.ts +29 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +54 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/pnpm.d.ts +29 -0
- package/dist/shared/pnpm.d.ts.map +1 -0
- package/dist/shared/pnpm.js +57 -0
- package/dist/shared/pnpm.js.map +1 -0
- package/dist/shared/private-files.d.ts +29 -0
- package/dist/shared/private-files.d.ts.map +1 -0
- package/dist/shared/private-files.js +109 -0
- package/dist/shared/private-files.js.map +1 -0
- package/dist/shared/redact-env.d.ts +24 -0
- package/dist/shared/redact-env.d.ts.map +1 -0
- package/dist/shared/redact-env.js +36 -0
- package/dist/shared/redact-env.js.map +1 -0
- package/dist/shared/release-reading.d.ts +85 -0
- package/dist/shared/release-reading.d.ts.map +1 -0
- package/dist/shared/release-reading.js +81 -0
- package/dist/shared/release-reading.js.map +1 -0
- package/dist/shared/roles.d.ts +58 -3
- package/dist/shared/roles.d.ts.map +1 -1
- package/dist/shared/roles.js +55 -0
- package/dist/shared/roles.js.map +1 -1
- package/dist/shared/rpcauth.d.ts +13 -0
- package/dist/shared/rpcauth.d.ts.map +1 -0
- package/dist/shared/rpcauth.js +23 -0
- package/dist/shared/rpcauth.js.map +1 -0
- package/dist/shared/shell-escape.d.ts +9 -0
- package/dist/shared/shell-escape.d.ts.map +1 -0
- package/dist/shared/shell-escape.js +11 -0
- package/dist/shared/shell-escape.js.map +1 -0
- package/dist/shared/sync-reading.d.ts +45 -0
- package/dist/shared/sync-reading.d.ts.map +1 -0
- package/dist/shared/sync-reading.js +42 -0
- package/dist/shared/sync-reading.js.map +1 -0
- package/dist/shared/tokens.d.ts +19 -0
- package/dist/shared/tokens.d.ts.map +1 -1
- package/dist/shared/tokens.js +28 -0
- package/dist/shared/tokens.js.map +1 -1
- package/dist/webapp/webapp.service.d.ts +33 -2
- package/dist/webapp/webapp.service.d.ts.map +1 -1
- package/dist/webapp/webapp.service.js +143 -31
- package/dist/webapp/webapp.service.js.map +1 -1
- package/dist/workers/health-monitor-process.d.ts.map +1 -1
- package/dist/workers/health-monitor-process.js +10 -0
- package/dist/workers/health-monitor-process.js.map +1 -1
- package/dist/workers/health-monitor.service.d.ts +45 -3
- package/dist/workers/health-monitor.service.d.ts.map +1 -1
- package/dist/workers/health-monitor.service.js +152 -25
- package/dist/workers/health-monitor.service.js.map +1 -1
- package/dist/workers/system-worker-manager.d.ts +43 -0
- package/dist/workers/system-worker-manager.d.ts.map +1 -1
- package/dist/workers/system-worker-manager.js +150 -3
- package/dist/workers/system-worker-manager.js.map +1 -1
- package/dist/workers/types.d.ts +8 -2
- package/dist/workers/types.d.ts.map +1 -1
- package/package.json +68 -30
- package/webapp/dist/BUILD.json +5 -0
- package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
- package/webapp/dist/assets/Grid-DizFZYue.js +1 -0
- package/webapp/dist/assets/Switch-Bfiqzx8l.js +1 -0
- package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
- package/webapp/dist/assets/apps-B96355sz.js +1 -0
- package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
- package/webapp/dist/assets/client-BmqFExWT.js +1 -0
- package/webapp/dist/assets/constants-veKGFkC6.js +1 -0
- package/webapp/dist/assets/containers-B_TpThln.js +2 -0
- package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +1 -0
- package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
- package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
- package/webapp/dist/assets/deploy-release-dialog-Dp-zpSAd.js +1 -0
- package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
- package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
- package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
- package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
- package/webapp/dist/assets/formatters-BqjL73N3.js +1 -0
- package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
- package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
- package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
- package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
- package/webapp/dist/assets/metrics-UCajtdox.js +2 -0
- package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
- package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
- package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
- package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
- package/webapp/dist/assets/release-bits-BzTKz5fM.js +1 -0
- package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
- package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
- package/webapp/dist/assets/settled-pair-C7SjZuns.js +1 -0
- package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
- package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
- package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +1 -0
- package/webapp/dist/assets/system-info-CFDNVKkU.js +1 -0
- package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
- package/webapp/dist/assets/topology-DLioOiRN.css +1 -0
- package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
- package/webapp/dist/assets/use-stack-context-CnA5FTHu.js +1 -0
- package/webapp/dist/index.html +6 -6
- package/dist/commands/dev.d.ts +0 -23
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -76
- package/dist/commands/dev.js.map +0 -1
- package/dist/config/define-app.d.ts +0 -6
- package/dist/config/define-app.d.ts.map +0 -1
- package/dist/config/define-app.js +0 -38
- package/dist/config/define-app.js.map +0 -1
- package/dist/infrastructure/gateway-generator.d.ts +0 -63
- package/dist/infrastructure/gateway-generator.d.ts.map +0 -1
- package/dist/infrastructure/gateway-generator.js +0 -253
- package/dist/infrastructure/gateway-generator.js.map +0 -1
- package/dist/monitoring/health.service.d.ts +0 -14
- package/dist/monitoring/health.service.d.ts.map +0 -1
- package/dist/monitoring/health.service.js +0 -50
- package/dist/monitoring/health.service.js.map +0 -1
- package/dist/monitoring/metrics.service.d.ts +0 -14
- package/dist/monitoring/metrics.service.d.ts.map +0 -1
- package/dist/monitoring/metrics.service.js +0 -40
- package/dist/monitoring/metrics.service.js.map +0 -1
- package/dist/orchestrator/bootstrap-runner.d.ts +0 -15
- package/dist/orchestrator/bootstrap-runner.d.ts.map +0 -1
- package/dist/orchestrator/bootstrap-runner.js +0 -152
- package/dist/orchestrator/bootstrap-runner.js.map +0 -1
- package/dist/orchestrator/topology-proxy.d.ts +0 -65
- package/dist/orchestrator/topology-proxy.d.ts.map +0 -1
- package/dist/orchestrator/topology-proxy.js +0 -209
- package/dist/orchestrator/topology-proxy.js.map +0 -1
- package/dist/orchestrator/topology-relay.d.ts +0 -111
- package/dist/orchestrator/topology-relay.d.ts.map +0 -1
- package/dist/orchestrator/topology-relay.js +0 -255
- package/dist/orchestrator/topology-relay.js.map +0 -1
- package/dist/services/auth-middleware.d.ts +0 -47
- package/dist/services/auth-middleware.d.ts.map +0 -1
- package/dist/services/auth-middleware.js +0 -158
- package/dist/services/auth-middleware.js.map +0 -1
- package/dist/services/environment.rpc-service.d.ts +0 -22
- package/dist/services/environment.rpc-service.d.ts.map +0 -1
- package/dist/services/environment.rpc-service.js +0 -65
- package/dist/services/environment.rpc-service.js.map +0 -1
- package/dist/services/environment.service.d.ts +0 -87
- package/dist/services/environment.service.d.ts.map +0 -1
- package/dist/services/environment.service.js +0 -220
- package/dist/services/environment.service.js.map +0 -1
- package/dist/services/metrics-collector.service.d.ts +0 -103
- package/dist/services/metrics-collector.service.d.ts.map +0 -1
- package/dist/services/metrics-collector.service.js +0 -235
- package/dist/services/metrics-collector.service.js.map +0 -1
- package/dist/services/metrics.rpc-service.d.ts +0 -41
- package/dist/services/metrics.rpc-service.d.ts.map +0 -1
- package/dist/services/metrics.rpc-service.js +0 -90
- package/dist/services/metrics.rpc-service.js.map +0 -1
- package/dist/services/metrics.service.d.ts +0 -72
- package/dist/services/metrics.service.d.ts.map +0 -1
- package/dist/services/metrics.service.js +0 -185
- package/dist/services/metrics.service.js.map +0 -1
- package/dist/supervisor/omnitron-supervisor.d.ts +0 -21
- package/dist/supervisor/omnitron-supervisor.d.ts.map +0 -1
- package/dist/supervisor/omnitron-supervisor.js +0 -43
- package/dist/supervisor/omnitron-supervisor.js.map +0 -1
- package/dist/webapp/static-server.d.ts +0 -24
- package/dist/webapp/static-server.d.ts.map +0 -1
- package/dist/webapp/static-server.js +0 -152
- package/dist/webapp/static-server.js.map +0 -1
- package/webapp/dist/assets/Badge-D2ZBP5iK.js +0 -1
- package/webapp/dist/assets/Card-vO88g06B.js +0 -1
- package/webapp/dist/assets/CardActions-C9h7Q2wW.js +0 -1
- package/webapp/dist/assets/CardContent-BA_Xmmhk.js +0 -1
- package/webapp/dist/assets/CardHeader-ceIs__6x.js +0 -1
- package/webapp/dist/assets/Chip-Ckk0xUhK.js +0 -1
- package/webapp/dist/assets/DialogActions-BhHM7hov.js +0 -1
- package/webapp/dist/assets/DialogContentText-BT2JQRmK.js +0 -1
- package/webapp/dist/assets/FormControlLabel-CcQByVS8.js +0 -1
- package/webapp/dist/assets/Grid-14PETRQW.js +0 -1
- package/webapp/dist/assets/InputAdornment-B8aHIsQ7.js +0 -1
- package/webapp/dist/assets/Skeleton-B74-Ds6O.js +0 -37
- package/webapp/dist/assets/Switch-DvWD2wh4.js +0 -1
- package/webapp/dist/assets/SwitchBase-CDU4nY8O.js +0 -1
- package/webapp/dist/assets/Tab-DcCOYYp5.js +0 -1
- package/webapp/dist/assets/TableContainer-CzTh4mu-.js +0 -1
- package/webapp/dist/assets/TableRow-BySEreZR.js +0 -2
- package/webapp/dist/assets/TextField-BLf-BHz2.js +0 -1
- package/webapp/dist/assets/alerts-DnRbT41C.js +0 -1
- package/webapp/dist/assets/apps-CdR0VH2d.js +0 -1
- package/webapp/dist/assets/chunk-DtcAfS_W.js +0 -1
- package/webapp/dist/assets/client-DU8I_lDc.js +0 -2
- package/webapp/dist/assets/constants-BgnT-Xdy.js +0 -1
- package/webapp/dist/assets/containers-Dw-rRXV1.js +0 -1
- package/webapp/dist/assets/dashboard-CzgB0uZz.js +0 -1
- package/webapp/dist/assets/dashboard-builder-DsA0yg33.js +0 -1
- package/webapp/dist/assets/deployments-DtQAoIcQ.js +0 -1
- package/webapp/dist/assets/detail-BJR-G7JG.js +0 -1
- package/webapp/dist/assets/detail-nlCeSltl.js +0 -8
- package/webapp/dist/assets/formatters-Do41SRmE.js +0 -1
- package/webapp/dist/assets/index-ByQDwp2r.js +0 -566
- package/webapp/dist/assets/index-CHVXOsTS.css +0 -1
- package/webapp/dist/assets/isMuiElement-DwF2naaF.js +0 -1
- package/webapp/dist/assets/logs-Kn8o4H7k.js +0 -11
- package/webapp/dist/assets/metrics-DN8Zu5wT.js +0 -2
- package/webapp/dist/assets/nodes-Bgch7AtN.js +0 -7
- package/webapp/dist/assets/pipelines-Cry3qm-S.js +0 -4
- package/webapp/dist/assets/popper-BJFSj6rc.js +0 -1
- package/webapp/dist/assets/preload-helper-DSXbuxSR.js +0 -1
- package/webapp/dist/assets/projects-Dym2GI1U.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-CSGK5Cxn.js +0 -958
- package/webapp/dist/assets/react-apexcharts.esm-DEAWOwx5.js +0 -1003
- package/webapp/dist/assets/settings-va3zTcow.js +0 -1
- package/webapp/dist/assets/sign-in-ik35umbp.js +0 -1
- package/webapp/dist/assets/stacks-CVFOnxbF.js +0 -1
- package/webapp/dist/assets/system-info-npIXAjX2.js +0 -1
- package/webapp/dist/assets/topology-CHpVij2M.css +0 -1
- package/webapp/dist/assets/topology-bDe70vLs.js +0 -12
- package/webapp/dist/assets/traces-DIIcT8DF.js +0 -1
- package/webapp/dist/assets/use-stack-context-DHLwZv1r.js +0 -1
- /package/webapp/dist/assets/{fs-CgZLtHiQ.js → fs-Ccl3sAcp.js} +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Who is holding the port an application could not bind.
|
|
3
|
+
*
|
|
4
|
+
* Measured on the development daemon, 06:05:56–06:06:27Z, four times in
|
|
5
|
+
* thirty-one seconds:
|
|
6
|
+
*
|
|
7
|
+
* Restart failed — Netron service failed to start: listen EADDRINUSE:
|
|
8
|
+
* address already in use 0.0.0.0:3005. The application cannot serve RPC,
|
|
9
|
+
* so it is not started.
|
|
10
|
+
*
|
|
11
|
+
* `omnitron list` then reported the app `crashed, RST 5` with both children
|
|
12
|
+
* `stopped` and no pid, and `omnitron restart` answered `Max restarts
|
|
13
|
+
* exceeded`. All of that was true of the daemon's records and none of it was
|
|
14
|
+
* true of the machine: port 3005 was held by a LIVE process whose parent was
|
|
15
|
+
* the daemon itself — a child of its own it had stopped accounting for. The
|
|
16
|
+
* application was serving requests the whole time.
|
|
17
|
+
*
|
|
18
|
+
* The failure says which address it could not have. It does not say who has
|
|
19
|
+
* it, and that one fact is the difference between a three-minute
|
|
20
|
+
* investigation with `lsof` and a line in the log. Three readings compose
|
|
21
|
+
* it: the address out of the message, the holder out of the operating
|
|
22
|
+
* system, and the parent of the holder — because "somebody else's server" and
|
|
23
|
+
* "my own previous instance" call for opposite responses, and they look
|
|
24
|
+
* identical from inside the error.
|
|
25
|
+
*
|
|
26
|
+
* This module only reads and decides. Killing belongs to the janitor, which
|
|
27
|
+
* already reaps children the daemon has lost track of — and a holder that is
|
|
28
|
+
* our own unaccounted child is exactly what that sweep exists for.
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* The address an `EADDRINUSE` refers to, or null when the message is about
|
|
32
|
+
* something else.
|
|
33
|
+
*
|
|
34
|
+
* Node writes `listen EADDRINUSE: address already in use 0.0.0.0:3005`, and
|
|
35
|
+
* every layer above wraps it in a sentence of its own, so the match is on
|
|
36
|
+
* the address rather than on the shape of the whole message.
|
|
37
|
+
*/
|
|
38
|
+
export function addressInUse(message) {
|
|
39
|
+
if (!message.includes('EADDRINUSE'))
|
|
40
|
+
return null;
|
|
41
|
+
// `host:port`, where the host may be IPv4, `::`, a bracketed IPv6 or a
|
|
42
|
+
// path-free empty string in some Node versions.
|
|
43
|
+
const match = /EADDRINUSE[^0-9[]*(\[[0-9a-fA-F:]+\]|[0-9.]+|::)?:(\d{1,5})\b/.exec(message);
|
|
44
|
+
if (!match)
|
|
45
|
+
return null;
|
|
46
|
+
const port = Number(match[2]);
|
|
47
|
+
if (!Number.isInteger(port) || port <= 0 || port > 65535)
|
|
48
|
+
return null;
|
|
49
|
+
return { host: match[1] ?? '', port };
|
|
50
|
+
}
|
|
51
|
+
/** What to run to find the listener, per platform. */
|
|
52
|
+
export function holderCommand(port, platform) {
|
|
53
|
+
if (platform === 'linux') {
|
|
54
|
+
// `-H` drops the header; `-p` adds `users:(("node",pid=989927,fd=28))`.
|
|
55
|
+
return { file: 'ss', args: ['-ltnpH', `sport = :${port}`] };
|
|
56
|
+
}
|
|
57
|
+
// `-F` is lsof's machine-readable mode: one field per line, tagged.
|
|
58
|
+
return { file: 'lsof', args: ['-nP', `-iTCP:${port}`, '-sTCP:LISTEN', '-Fpc'] };
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* The listeners in that command's output.
|
|
62
|
+
*
|
|
63
|
+
* Both formats are parsed here rather than in the caller so that the shapes
|
|
64
|
+
* are pinned by tests against real output — `lsof -F` emits `p<pid>` and
|
|
65
|
+
* `c<command>` on separate lines and repeats them per process, and `ss`
|
|
66
|
+
* carries every listener's holders inside one `users:((...))` group.
|
|
67
|
+
*/
|
|
68
|
+
export function parseHolders(output, platform) {
|
|
69
|
+
const holders = [];
|
|
70
|
+
if (platform === 'linux') {
|
|
71
|
+
for (const m of output.matchAll(/\(\("([^"]+)",pid=(\d+),/g)) {
|
|
72
|
+
holders.push({ command: m[1], pid: Number(m[2]) });
|
|
73
|
+
}
|
|
74
|
+
return holders;
|
|
75
|
+
}
|
|
76
|
+
let pid = null;
|
|
77
|
+
for (const line of output.split('\n')) {
|
|
78
|
+
if (line.startsWith('p')) {
|
|
79
|
+
const parsed = Number(line.slice(1));
|
|
80
|
+
pid = Number.isInteger(parsed) ? parsed : null;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (line.startsWith('c') && pid !== null) {
|
|
84
|
+
holders.push({ pid, command: line.slice(1) });
|
|
85
|
+
pid = null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return holders;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* What the holder is to this daemon.
|
|
92
|
+
*
|
|
93
|
+
* `ours-unaccounted` is the case the measurement above describes and the only
|
|
94
|
+
* one where a restart can be made to work without a person: the process is a
|
|
95
|
+
* child of this daemon and no app handle, pool or process-manager record
|
|
96
|
+
* claims it, so it is a leftover of a restart that half-failed.
|
|
97
|
+
*/
|
|
98
|
+
export function explainConflict(input) {
|
|
99
|
+
const { port, holders, parentOf, daemonPid, owned } = input;
|
|
100
|
+
if (holders.length === 0) {
|
|
101
|
+
return {
|
|
102
|
+
kind: 'unknown',
|
|
103
|
+
because: `nothing is listening on ${port} now — the holder exited between the failure and this reading`,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
const holder = holders[0];
|
|
107
|
+
const parent = parentOf(holder.pid);
|
|
108
|
+
if (parent !== daemonPid) {
|
|
109
|
+
return {
|
|
110
|
+
kind: 'foreign',
|
|
111
|
+
holder,
|
|
112
|
+
because: `port ${port} is held by pid ${holder.pid} (${holder.command}), whose parent is ` +
|
|
113
|
+
`${parent ?? 'unknown'} — not this daemon. Nothing here will touch it`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (owned.has(holder.pid)) {
|
|
117
|
+
return {
|
|
118
|
+
kind: 'ours-owned',
|
|
119
|
+
holder,
|
|
120
|
+
because: `port ${port} is held by pid ${holder.pid} (${holder.command}), a child this daemon ` +
|
|
121
|
+
`still accounts for — the restart raced its own predecessor's shutdown`,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
kind: 'ours-unaccounted',
|
|
126
|
+
holder,
|
|
127
|
+
because: `port ${port} is held by pid ${holder.pid} (${holder.command}), a child of this daemon ` +
|
|
128
|
+
`that no app, pool or process-manager record claims — a leftover of a restart that half-failed`,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=port-conflict.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-conflict.js","sourceRoot":"","sources":["../../src/orchestrator/port-conflict.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,10 @@
|
|
|
24
24
|
* 4. SIGTERM first, then SIGKILL after `gracefulMs`.
|
|
25
25
|
*
|
|
26
26
|
* Cold-start mode: on daemon boot, before any apps register, do a
|
|
27
|
-
* single scan and kill every fork-worker whose
|
|
28
|
-
* daemon
|
|
27
|
+
* single scan and kill every fork-worker whose parent is gone — a
|
|
28
|
+
* previous daemon that really is dead. A worker whose parent is ALIVE
|
|
29
|
+
* and is not us belongs to somebody else and is left alone, which is
|
|
30
|
+
* the same rule the periodic sweep applies.
|
|
29
31
|
*/
|
|
30
32
|
import type { ILogger } from '@omnitron-dev/titan/module/logger';
|
|
31
33
|
export interface ProcessJanitorOptions {
|
|
@@ -62,7 +64,30 @@ export interface ProcessJanitorOptions {
|
|
|
62
64
|
* shells out to `ps -eo pid,ppid,args` and filters for fork-worker
|
|
63
65
|
* paths.
|
|
64
66
|
*/
|
|
65
|
-
|
|
67
|
+
/**
|
|
68
|
+
* How to read the process table.
|
|
69
|
+
*
|
|
70
|
+
* `null` means the table could not be read — distinct from `[]`, which
|
|
71
|
+
* means it was read and holds no fork-workers. The two used to be one
|
|
72
|
+
* value and therefore one set of metrics, so a janitor that had not
|
|
73
|
+
* completed a sweep in hours reported clean ones.
|
|
74
|
+
*/
|
|
75
|
+
readonly listProcesses?: () => readonly PsRow[] | null | Promise<readonly PsRow[] | null>;
|
|
76
|
+
/**
|
|
77
|
+
* How a process is signalled. Defaults to `process.kill`.
|
|
78
|
+
*
|
|
79
|
+
* Injectable because a janitor whose kill cannot be intercepted cannot be
|
|
80
|
+
* tested without killing: a test naming a pid it believes is imaginary
|
|
81
|
+
* sends a real signal to whatever holds that number on the machine
|
|
82
|
+
* running the suite. That is not hypothetical — it happened while writing
|
|
83
|
+
* the tests for this file, to a process holding a port on a live stand,
|
|
84
|
+
* and this repository has a previous incident of the same shape where a
|
|
85
|
+
* unit test reached `coldStartSweep` and killed six backends.
|
|
86
|
+
*
|
|
87
|
+
* A seam here makes the dangerous path unreachable from a test by
|
|
88
|
+
* construction, rather than by every future test remembering.
|
|
89
|
+
*/
|
|
90
|
+
readonly kill?: (pid: number, signal: NodeJS.Signals) => void;
|
|
66
91
|
/**
|
|
67
92
|
* Override for the liveness probe (tests). Real implementation
|
|
68
93
|
* uses `process.kill(pid, 0)`.
|
|
@@ -78,6 +103,15 @@ export interface PsRow {
|
|
|
78
103
|
}
|
|
79
104
|
export interface JanitorSweepMetrics {
|
|
80
105
|
readonly scannedAt: Date;
|
|
106
|
+
/**
|
|
107
|
+
* False when `ps` could not be read at all.
|
|
108
|
+
*
|
|
109
|
+
* Without this a failed sweep reported `forkWorkersAlive: 0`, `orphansFound:
|
|
110
|
+
* 0` — a measurement of nothing, indistinguishable from a machine with
|
|
111
|
+
* nothing to reap. Measured on the development host: 990 sweeps skipped
|
|
112
|
+
* and every one of them recorded as a clean one.
|
|
113
|
+
*/
|
|
114
|
+
readonly swept: boolean;
|
|
81
115
|
readonly forkWorkersAlive: number;
|
|
82
116
|
readonly ownedPids: number;
|
|
83
117
|
readonly orphansFound: number;
|
|
@@ -88,10 +122,13 @@ export declare class ProcessJanitor {
|
|
|
88
122
|
private readonly intervalMs;
|
|
89
123
|
private readonly gracefulMs;
|
|
90
124
|
private readonly minProcessAgeSeconds;
|
|
125
|
+
/** Sweeps that could not read the process table, in a row. */
|
|
126
|
+
private consecutiveSkips;
|
|
91
127
|
private readonly logger;
|
|
92
128
|
private readonly onMetrics;
|
|
93
129
|
private readonly getOwnedPids;
|
|
94
130
|
private readonly listProcesses;
|
|
131
|
+
private readonly kill;
|
|
95
132
|
private readonly isAlive;
|
|
96
133
|
private timer;
|
|
97
134
|
private inFlight;
|
|
@@ -111,12 +148,49 @@ export declare class ProcessJanitor {
|
|
|
111
148
|
stop(): void;
|
|
112
149
|
/** Run one sweep on demand. Useful for tests and manual triggering. */
|
|
113
150
|
runSweep(): Promise<JanitorSweepMetrics>;
|
|
151
|
+
/**
|
|
152
|
+
* Whether this row's parent is gone.
|
|
153
|
+
*
|
|
154
|
+
* One statement, used by both sweeps, because they have already disagreed
|
|
155
|
+
* about it once: when a parent dies its children are REPARENTED — to
|
|
156
|
+
* launchd on macOS, to init or a subreaper elsewhere — so an orphan's
|
|
157
|
+
* `ppid` becomes 1, and pid 1 is alive on every running system. Asking
|
|
158
|
+
* `isAlive(ppid)` therefore answers "the parent is fine" for precisely the
|
|
159
|
+
* processes both sweeps exist to reap, and the liveness test is kept only
|
|
160
|
+
* for the case where a ppid points at something that really has vanished
|
|
161
|
+
* without reparenting.
|
|
162
|
+
*/
|
|
163
|
+
private hasDeadParent;
|
|
114
164
|
/**
|
|
115
165
|
* SIGTERM all pids → wait `gracefulMs` → SIGKILL any survivor.
|
|
116
166
|
* Returns the number of pids successfully terminated (including
|
|
117
167
|
* those killed forcefully).
|
|
118
168
|
*/
|
|
169
|
+
/**
|
|
170
|
+
* SIGTERM, a grace period, then SIGKILL for whatever is still there.
|
|
171
|
+
*
|
|
172
|
+
* Three things this used to get wrong, and all three were invisible:
|
|
173
|
+
*
|
|
174
|
+
* - **A process was counted twice.** One that answered `ESRCH` to SIGTERM
|
|
175
|
+
* (already gone) scored a success, and then scored a second one in the
|
|
176
|
+
* SIGKILL pass for not being alive. `Math.min(success, pids.length)` at
|
|
177
|
+
* the end hid it — for the BATCH, not per process: one double-count plus
|
|
178
|
+
* one process that genuinely refused to die still clamped to "all
|
|
179
|
+
* reaped". A clamp is not a count.
|
|
180
|
+
* - **SIGKILL was assumed to have worked.** Success was recorded when the
|
|
181
|
+
* signal was SENT. A process that does not die is exactly the one worth
|
|
182
|
+
* knowing about, and it was the one that reported success.
|
|
183
|
+
* - **The escalation was silent.** Measured 2026-09-14: every orphan
|
|
184
|
+
* holding a port ignored SIGTERM and needed SIGKILL. "Died politely" and
|
|
185
|
+
* "had to be killed" produced identical logs, so the fact that these
|
|
186
|
+
* processes do not respond to TERM could not be learned from the record.
|
|
187
|
+
*/
|
|
119
188
|
private reap;
|
|
189
|
+
/**
|
|
190
|
+
* Wait for killed pids to leave the process table, up to a deadline.
|
|
191
|
+
* Returns whichever are still there when it expires.
|
|
192
|
+
*/
|
|
193
|
+
private awaitDeath;
|
|
120
194
|
}
|
|
121
195
|
/**
|
|
122
196
|
* Walk `ps -eo pid,ppid,etime,args` and pick rows whose command
|
|
@@ -133,7 +207,7 @@ export declare class ProcessJanitor {
|
|
|
133
207
|
* spawned workers from the orphan reaper while their
|
|
134
208
|
* supervisor.getChildNames() is still empty.
|
|
135
209
|
*/
|
|
136
|
-
declare function listForkWorkersFromPs(logger?: ILogger): PsRow[]
|
|
210
|
+
declare function listForkWorkersFromPs(logger?: ILogger): Promise<PsRow[] | null>;
|
|
137
211
|
/**
|
|
138
212
|
* Parse ps's `etime` format → seconds.
|
|
139
213
|
* Supported shapes:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-janitor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/process-janitor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"process-janitor.d.ts","sourceRoot":"","sources":["../../src/orchestrator/process-janitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,20 +24,25 @@
|
|
|
24
24
|
* 4. SIGTERM first, then SIGKILL after `gracefulMs`.
|
|
25
25
|
*
|
|
26
26
|
* Cold-start mode: on daemon boot, before any apps register, do a
|
|
27
|
-
* single scan and kill every fork-worker whose
|
|
28
|
-
* daemon
|
|
27
|
+
* single scan and kill every fork-worker whose parent is gone — a
|
|
28
|
+
* previous daemon that really is dead. A worker whose parent is ALIVE
|
|
29
|
+
* and is not us belongs to somebody else and is left alone, which is
|
|
30
|
+
* the same rule the periodic sweep applies.
|
|
29
31
|
*/
|
|
30
|
-
import {
|
|
32
|
+
import { execFile } from 'node:child_process';
|
|
31
33
|
import { setTimeout as wait } from 'node:timers/promises';
|
|
32
34
|
import { isProcessAlive } from '@omnitron-dev/titan/utils';
|
|
33
35
|
export class ProcessJanitor {
|
|
34
36
|
intervalMs;
|
|
35
37
|
gracefulMs;
|
|
36
38
|
minProcessAgeSeconds;
|
|
39
|
+
/** Sweeps that could not read the process table, in a row. */
|
|
40
|
+
consecutiveSkips = 0;
|
|
37
41
|
logger;
|
|
38
42
|
onMetrics;
|
|
39
43
|
getOwnedPids;
|
|
40
44
|
listProcesses;
|
|
45
|
+
kill;
|
|
41
46
|
isAlive;
|
|
42
47
|
timer = null;
|
|
43
48
|
inFlight = false;
|
|
@@ -49,6 +54,7 @@ export class ProcessJanitor {
|
|
|
49
54
|
this.onMetrics = options.onMetrics;
|
|
50
55
|
this.getOwnedPids = options.getOwnedPids;
|
|
51
56
|
this.listProcesses = options.listProcesses ?? (() => listForkWorkersFromPs(this.logger));
|
|
57
|
+
this.kill = options.kill ?? ((pid, signal) => process.kill(pid, signal));
|
|
52
58
|
this.isAlive = options.isAlive ?? defaultIsAlive;
|
|
53
59
|
}
|
|
54
60
|
/**
|
|
@@ -61,8 +67,47 @@ export class ProcessJanitor {
|
|
|
61
67
|
*/
|
|
62
68
|
async coldStartSweep() {
|
|
63
69
|
const myPid = process.pid;
|
|
64
|
-
const
|
|
65
|
-
|
|
70
|
+
const listed = await this.listProcesses();
|
|
71
|
+
if (listed === null) {
|
|
72
|
+
this.logger?.error?.('janitor: cold start could not read the process table — leftovers from a previous daemon are not being reaped');
|
|
73
|
+
return 0;
|
|
74
|
+
}
|
|
75
|
+
const all = listed;
|
|
76
|
+
// A foreign parent is not evidence of a dead one.
|
|
77
|
+
//
|
|
78
|
+
// This read `row.ppid !== myPid` — reap anything not parented by ME —
|
|
79
|
+
// on the assumption that only the daemon ever calls this, and only at
|
|
80
|
+
// boot. Nothing enforces that assumption, and when it is wrong the cost
|
|
81
|
+
// is every running app on the machine. Measured 2026-09-12: one unit
|
|
82
|
+
// test constructing an `OrchestratorService` and calling `startApp`
|
|
83
|
+
// reached `ensureBootReconciled` → `coldStartSweep`, where
|
|
84
|
+
// `process.pid` was the vitest worker's, and killed all six backends of
|
|
85
|
+
// the live dev stand. The daemon itself survived, so `omnitron ls`
|
|
86
|
+
// reported `crashed` for apps nothing had crashed.
|
|
87
|
+
//
|
|
88
|
+
// `runSweep` below already had the right rule and this did not: "some
|
|
89
|
+
// other parent — not ours, leave alone". The two halves of one janitor
|
|
90
|
+
// disagreed about what an orphan is, and only the cheap half ran at the
|
|
91
|
+
// moment nothing else was there to object.
|
|
92
|
+
//
|
|
93
|
+
// But `!isAlive(ppid)` cannot answer the question this sweep exists for.
|
|
94
|
+
// When a parent dies its children are REPARENTED — to launchd on macOS,
|
|
95
|
+
// to init or a subreaper on Linux — so an orphan's `ppid` becomes 1, and
|
|
96
|
+
// pid 1 is alive on every running system. The test therefore returned
|
|
97
|
+
// `false` for precisely the processes the docblock above promises to
|
|
98
|
+
// kill, and the sweep could not reap a single one of them.
|
|
99
|
+
//
|
|
100
|
+
// Measured 2026-09-14, minutes after a daemon restart: seven
|
|
101
|
+
// `fork-worker.js` processes with `ppid = 1`, the oldest four and a half
|
|
102
|
+
// hours old, still holding their TCP ports. Their supervised replacements
|
|
103
|
+
// could not bind, failed to start, burned their whole restart budget on
|
|
104
|
+
// `EADDRINUSE` and gave up — so the console reported the APPLICATIONS as
|
|
105
|
+
// crashed, and the cause was the supervisor's own leftovers. They also
|
|
106
|
+
// ignored SIGTERM and needed SIGKILL, which is what `reap` already does.
|
|
107
|
+
//
|
|
108
|
+
// `ppid === REAPER_PID` is the orphan signature, and it is the one case
|
|
109
|
+
// where "not my child" really is evidence of a dead parent.
|
|
110
|
+
const stale = all.filter((row) => row.ppid !== myPid && this.hasDeadParent(row));
|
|
66
111
|
if (stale.length === 0) {
|
|
67
112
|
this.logger?.debug?.({ scanned: all.length }, 'janitor: cold start — no stale fork-workers');
|
|
68
113
|
return 0;
|
|
@@ -104,8 +149,33 @@ export class ProcessJanitor {
|
|
|
104
149
|
/** Run one sweep on demand. Useful for tests and manual triggering. */
|
|
105
150
|
async runSweep() {
|
|
106
151
|
const owned = this.getOwnedPids();
|
|
107
|
-
const
|
|
152
|
+
const listed = await this.listProcesses();
|
|
108
153
|
const myPid = process.pid;
|
|
154
|
+
if (listed === null) {
|
|
155
|
+
// A sweep that could not look is not a sweep that found nothing. Both
|
|
156
|
+
// used to produce the same metrics and the same silence, so a janitor
|
|
157
|
+
// disabled for hours was indistinguishable from a tidy machine.
|
|
158
|
+
this.consecutiveSkips += 1;
|
|
159
|
+
// The first skip is noise; a run of them is a janitor that has stopped
|
|
160
|
+
// working, and the number is what makes that visible.
|
|
161
|
+
const level = this.consecutiveSkips >= 5 ? 'error' : 'warn';
|
|
162
|
+
this.logger?.[level]?.({ consecutiveSkips: this.consecutiveSkips, intervalMs: this.intervalMs }, this.consecutiveSkips >= 5
|
|
163
|
+
? 'janitor: has not completed a sweep in several attempts — orphaned workers are not being reaped'
|
|
164
|
+
: 'janitor: sweep skipped, could not read the process table');
|
|
165
|
+
const skipped = {
|
|
166
|
+
scannedAt: new Date(),
|
|
167
|
+
swept: false,
|
|
168
|
+
forkWorkersAlive: 0,
|
|
169
|
+
ownedPids: owned.size,
|
|
170
|
+
orphansFound: 0,
|
|
171
|
+
orphansKilled: 0,
|
|
172
|
+
killErrors: 0,
|
|
173
|
+
};
|
|
174
|
+
this.onMetrics?.(skipped);
|
|
175
|
+
return skipped;
|
|
176
|
+
}
|
|
177
|
+
this.consecutiveSkips = 0;
|
|
178
|
+
const all = listed;
|
|
109
179
|
const orphans = all.filter((row) => {
|
|
110
180
|
// Owned by the orchestrator → not an orphan.
|
|
111
181
|
if (owned.has(row.pid))
|
|
@@ -120,9 +190,17 @@ export class ProcessJanitor {
|
|
|
120
190
|
// claim it → orphan from a partial restart.
|
|
121
191
|
if (row.ppid === myPid)
|
|
122
192
|
return true;
|
|
123
|
-
// Process adopted by
|
|
193
|
+
// Process adopted by the reaper (parent is gone) → orphan from a
|
|
124
194
|
// previous daemon that died. Reap it.
|
|
125
|
-
|
|
195
|
+
//
|
|
196
|
+
// This read `!this.isAlive(row.ppid)` and could therefore never fire.
|
|
197
|
+
// The two halves of this janitor disagreed about what an orphan is:
|
|
198
|
+
// `coldStartSweep` was corrected to test the reaper pid and this was
|
|
199
|
+
// left behind, so the branch its own comment describes was unreachable
|
|
200
|
+
// here for as long as the daemon ran. Measured 2026-09-14 minutes after
|
|
201
|
+
// a restart: a `fork-worker.js` with `ppid = 1`, five minutes old,
|
|
202
|
+
// surveyed by every sweep and reaped by none.
|
|
203
|
+
if (this.hasDeadParent(row))
|
|
126
204
|
return true;
|
|
127
205
|
// Some other parent — not ours, leave alone.
|
|
128
206
|
return false;
|
|
@@ -137,6 +215,7 @@ export class ProcessJanitor {
|
|
|
137
215
|
}
|
|
138
216
|
const metrics = {
|
|
139
217
|
scannedAt: new Date(),
|
|
218
|
+
swept: true,
|
|
140
219
|
forkWorkersAlive: all.length,
|
|
141
220
|
ownedPids: owned.size,
|
|
142
221
|
orphansFound: orphans.length,
|
|
@@ -146,52 +225,175 @@ export class ProcessJanitor {
|
|
|
146
225
|
this.onMetrics?.(metrics);
|
|
147
226
|
return metrics;
|
|
148
227
|
}
|
|
228
|
+
/**
|
|
229
|
+
* Whether this row's parent is gone.
|
|
230
|
+
*
|
|
231
|
+
* One statement, used by both sweeps, because they have already disagreed
|
|
232
|
+
* about it once: when a parent dies its children are REPARENTED — to
|
|
233
|
+
* launchd on macOS, to init or a subreaper elsewhere — so an orphan's
|
|
234
|
+
* `ppid` becomes 1, and pid 1 is alive on every running system. Asking
|
|
235
|
+
* `isAlive(ppid)` therefore answers "the parent is fine" for precisely the
|
|
236
|
+
* processes both sweeps exist to reap, and the liveness test is kept only
|
|
237
|
+
* for the case where a ppid points at something that really has vanished
|
|
238
|
+
* without reparenting.
|
|
239
|
+
*/
|
|
240
|
+
hasDeadParent(row) {
|
|
241
|
+
return row.ppid === REAPER_PID || !this.isAlive(row.ppid);
|
|
242
|
+
}
|
|
149
243
|
/**
|
|
150
244
|
* SIGTERM all pids → wait `gracefulMs` → SIGKILL any survivor.
|
|
151
245
|
* Returns the number of pids successfully terminated (including
|
|
152
246
|
* those killed forcefully).
|
|
153
247
|
*/
|
|
248
|
+
/**
|
|
249
|
+
* SIGTERM, a grace period, then SIGKILL for whatever is still there.
|
|
250
|
+
*
|
|
251
|
+
* Three things this used to get wrong, and all three were invisible:
|
|
252
|
+
*
|
|
253
|
+
* - **A process was counted twice.** One that answered `ESRCH` to SIGTERM
|
|
254
|
+
* (already gone) scored a success, and then scored a second one in the
|
|
255
|
+
* SIGKILL pass for not being alive. `Math.min(success, pids.length)` at
|
|
256
|
+
* the end hid it — for the BATCH, not per process: one double-count plus
|
|
257
|
+
* one process that genuinely refused to die still clamped to "all
|
|
258
|
+
* reaped". A clamp is not a count.
|
|
259
|
+
* - **SIGKILL was assumed to have worked.** Success was recorded when the
|
|
260
|
+
* signal was SENT. A process that does not die is exactly the one worth
|
|
261
|
+
* knowing about, and it was the one that reported success.
|
|
262
|
+
* - **The escalation was silent.** Measured 2026-09-14: every orphan
|
|
263
|
+
* holding a port ignored SIGTERM and needed SIGKILL. "Died politely" and
|
|
264
|
+
* "had to be killed" produced identical logs, so the fact that these
|
|
265
|
+
* processes do not respond to TERM could not be learned from the record.
|
|
266
|
+
*/
|
|
154
267
|
async reap(pids) {
|
|
155
|
-
|
|
268
|
+
const pending = [];
|
|
156
269
|
for (const pid of pids) {
|
|
157
270
|
try {
|
|
158
|
-
|
|
271
|
+
this.kill(pid, 'SIGTERM');
|
|
272
|
+
pending.push(pid);
|
|
159
273
|
}
|
|
160
274
|
catch (err) {
|
|
161
275
|
const e = err;
|
|
162
|
-
if (e.code
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
}
|
|
166
|
-
else {
|
|
276
|
+
if (e.code !== 'ESRCH') {
|
|
277
|
+
// Not "already gone" — a permission problem, most likely. It will
|
|
278
|
+
// not die on SIGKILL either, so it is not pending.
|
|
167
279
|
this.logger?.warn?.({ pid, err }, 'janitor: SIGTERM failed');
|
|
168
280
|
}
|
|
169
281
|
}
|
|
170
282
|
}
|
|
283
|
+
if (pending.length === 0)
|
|
284
|
+
return pids.length;
|
|
171
285
|
await wait(this.gracefulMs);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
286
|
+
const stubborn = pending.filter((pid) => this.isAlive(pid));
|
|
287
|
+
if (stubborn.length > 0) {
|
|
288
|
+
this.logger?.warn?.({ pids: stubborn.slice(0, 10), gracefulMs: this.gracefulMs }, 'janitor: processes ignored SIGTERM — escalating to SIGKILL');
|
|
289
|
+
}
|
|
290
|
+
for (const pid of stubborn) {
|
|
177
291
|
try {
|
|
178
|
-
|
|
179
|
-
success += 1;
|
|
292
|
+
this.kill(pid, 'SIGKILL');
|
|
180
293
|
}
|
|
181
294
|
catch (err) {
|
|
182
295
|
const e = err;
|
|
183
|
-
if (e.code
|
|
184
|
-
success += 1;
|
|
185
|
-
else
|
|
296
|
+
if (e.code !== 'ESRCH')
|
|
186
297
|
this.logger?.error?.({ pid, err }, 'janitor: SIGKILL failed');
|
|
187
298
|
}
|
|
188
299
|
}
|
|
189
|
-
|
|
300
|
+
// Confirm. A signal sent is not a process gone.
|
|
301
|
+
//
|
|
302
|
+
// Polled rather than checked once. SIGKILL is delivered immediately but
|
|
303
|
+
// the process is not reaped until the kernel can tear it down, and one in
|
|
304
|
+
// uninterruptible sleep — blocked on disk, which is the state a machine
|
|
305
|
+
// under load puts them in — takes longer than any single sample. The
|
|
306
|
+
// first version waited 500 ms and then reported at ERROR level that the
|
|
307
|
+
// process had "survived SIGKILL"; observed 2026-09-14 on a pid that was
|
|
308
|
+
// gone moments later. An alarm that fires on a normal delay teaches its
|
|
309
|
+
// reader to disregard the case it exists to report.
|
|
310
|
+
const survivors = await this.awaitDeath(stubborn);
|
|
311
|
+
if (survivors.length > 0) {
|
|
312
|
+
this.logger?.error?.({ pids: survivors.slice(0, 10), waitedMs: KILL_CONFIRM_TIMEOUT_MS }, 'janitor: processes survived SIGKILL — still holding whatever they hold');
|
|
313
|
+
}
|
|
314
|
+
return pids.length - survivors.length;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Wait for killed pids to leave the process table, up to a deadline.
|
|
318
|
+
* Returns whichever are still there when it expires.
|
|
319
|
+
*/
|
|
320
|
+
async awaitDeath(pids) {
|
|
321
|
+
if (pids.length === 0)
|
|
322
|
+
return [];
|
|
323
|
+
const deadline = Date.now() + KILL_CONFIRM_TIMEOUT_MS;
|
|
324
|
+
let remaining = pids;
|
|
325
|
+
while (remaining.length > 0 && Date.now() < deadline) {
|
|
326
|
+
await wait(KILL_CONFIRM_POLL_MS);
|
|
327
|
+
remaining = remaining.filter((pid) => this.isAlive(pid));
|
|
328
|
+
}
|
|
329
|
+
return remaining;
|
|
190
330
|
}
|
|
191
331
|
}
|
|
192
332
|
// ---------------------------------------------------------------------------
|
|
193
333
|
// Process-table helpers (production defaults)
|
|
194
334
|
// ---------------------------------------------------------------------------
|
|
335
|
+
/**
|
|
336
|
+
* The pid a dead parent's children are handed to.
|
|
337
|
+
*
|
|
338
|
+
* 1 on every Unix this runs on — launchd on macOS, init or a subreaper
|
|
339
|
+
* elsewhere. A `fork-worker.js` parented here was started by a daemon that no
|
|
340
|
+
* longer exists.
|
|
341
|
+
*/
|
|
342
|
+
const REAPER_PID = 1;
|
|
343
|
+
/** How long the janitor waits for `ps` before giving up on a sweep. */
|
|
344
|
+
/**
|
|
345
|
+
* How long `ps` may take.
|
|
346
|
+
*
|
|
347
|
+
* This was ten seconds, and `ps -eo pid,ppid,etime,args` over a thousand
|
|
348
|
+
* processes takes 0.07. The deadline was not protecting against a slow `ps`;
|
|
349
|
+
* it was firing because the DAEMON'S event loop was too busy to read the
|
|
350
|
+
* result, and `execFile`'s timer — also on that loop — eventually killed a
|
|
351
|
+
* process that had already finished.
|
|
352
|
+
*
|
|
353
|
+
* Measured on the development host: 990 sweeps killed their own `ps` and
|
|
354
|
+
* skipped, while 36 fork-workers accumulated as children of a daemon that
|
|
355
|
+
* claimed none of them. The janitor stops working exactly when the machine
|
|
356
|
+
* is loaded, which is exactly when orphans appear.
|
|
357
|
+
*
|
|
358
|
+
* Sixty seconds is protection against a `ps` that genuinely hangs — an NFS
|
|
359
|
+
* mount, a wedged process table — and not against a control plane doing
|
|
360
|
+
* its job. It is a third of the sweep interval, so a slow sweep still
|
|
361
|
+
* finishes before the next one starts.
|
|
362
|
+
*/
|
|
363
|
+
const PS_TIMEOUT_MS = 60_000;
|
|
364
|
+
/** How long a SIGKILLed process is given to actually leave the process table. */
|
|
365
|
+
const KILL_CONFIRM_TIMEOUT_MS = 5_000;
|
|
366
|
+
/** How often that is rechecked. */
|
|
367
|
+
const KILL_CONFIRM_POLL_MS = 100;
|
|
368
|
+
/**
|
|
369
|
+
* `ps`, asynchronously and with a deadline.
|
|
370
|
+
*
|
|
371
|
+
* This was `execSync('ps -eo …')` with no timeout, called from a 30-second
|
|
372
|
+
* `setInterval` on the daemon's own event loop. A synchronous spawn blocks
|
|
373
|
+
* that loop completely: while it runs the daemon answers no RPC, writes no
|
|
374
|
+
* log line, and services no socket. With no timeout, "while it runs" has no
|
|
375
|
+
* upper bound.
|
|
376
|
+
*
|
|
377
|
+
* That is not hypothetical. Observed 2026-09-14 on the development daemon:
|
|
378
|
+
* the main thread parked in `SyncProcessRunner::Spawn`, reached from
|
|
379
|
+
* `Environment::RunTimers`, for eight minutes and counting — `omnitron ping`,
|
|
380
|
+
* `omnitron ls` and every console request hung, the log stopped mid-second,
|
|
381
|
+
* and the seventeen supervised app processes ran on with nothing watching
|
|
382
|
+
* them. One `ps` that does not return takes the entire control plane with it.
|
|
383
|
+
*
|
|
384
|
+
* Asynchronous, so a slow `ps` costs a sweep rather than the daemon; and
|
|
385
|
+
* timed out, so it costs a bounded one.
|
|
386
|
+
*/
|
|
387
|
+
function runPs() {
|
|
388
|
+
return new Promise((resolve, reject) => {
|
|
389
|
+
execFile('ps', ['-eo', 'pid,ppid,etime,args'], { encoding: 'utf8', maxBuffer: 8 * 1024 * 1024, timeout: PS_TIMEOUT_MS, killSignal: 'SIGKILL' }, (err, stdout) => {
|
|
390
|
+
if (err)
|
|
391
|
+
reject(err);
|
|
392
|
+
else
|
|
393
|
+
resolve(stdout);
|
|
394
|
+
});
|
|
395
|
+
});
|
|
396
|
+
}
|
|
195
397
|
/**
|
|
196
398
|
* Walk `ps -eo pid,ppid,etime,args` and pick rows whose command
|
|
197
399
|
* path contains `titan-pm/dist/fork-worker.js`. We match on the path
|
|
@@ -207,14 +409,28 @@ export class ProcessJanitor {
|
|
|
207
409
|
* spawned workers from the orphan reaper while their
|
|
208
410
|
* supervisor.getChildNames() is still empty.
|
|
209
411
|
*/
|
|
210
|
-
function listForkWorkersFromPs(logger) {
|
|
412
|
+
async function listForkWorkersFromPs(logger) {
|
|
211
413
|
let raw;
|
|
212
414
|
try {
|
|
213
|
-
raw =
|
|
415
|
+
raw = await runPs();
|
|
214
416
|
}
|
|
215
417
|
catch (err) {
|
|
216
|
-
|
|
217
|
-
|
|
418
|
+
// A `ps` that was KILLED for exceeding the deadline and one that failed
|
|
419
|
+
// in a millisecond are the same empty result and, without this, the same
|
|
420
|
+
// log line — so the condition that used to hang the daemon would leave
|
|
421
|
+
// no trace that it had happened at all. `killed` is what `execFile` sets
|
|
422
|
+
// when its own timeout fires.
|
|
423
|
+
const e = err;
|
|
424
|
+
if (e.killed) {
|
|
425
|
+
logger?.error?.({ timeoutMs: PS_TIMEOUT_MS }, 'janitor: ps exceeded its deadline and was killed — sweep skipped');
|
|
426
|
+
}
|
|
427
|
+
else {
|
|
428
|
+
logger?.warn?.({ err: e.message }, 'janitor: ps failed');
|
|
429
|
+
}
|
|
430
|
+
// `null`, not `[]`. An empty list is an answer — "nothing is running" —
|
|
431
|
+
// and returning it for a sweep that could not look reported 990 clean
|
|
432
|
+
// sweeps on a host where 36 fork-workers were accumulating.
|
|
433
|
+
return null;
|
|
218
434
|
}
|
|
219
435
|
const rows = [];
|
|
220
436
|
for (const line of raw.split('\n')) {
|