@kici-dev/orchestrator 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (592) hide show
  1. package/dist/agent/agent-version.d.ts +12 -21
  2. package/dist/agent/dispatcher.d.ts +283 -437
  3. package/dist/agent/host-roster-reaper.d.ts +8 -10
  4. package/dist/agent/host-roster.d.ts +77 -100
  5. package/dist/agent/ownership-refusal.d.ts +3 -5
  6. package/dist/agent/ownership-tracker.d.ts +42 -76
  7. package/dist/agent/registry.d.ts +137 -230
  8. package/dist/agent/token-store.d.ts +34 -77
  9. package/dist/agent-packaging/availability.d.ts +6 -9
  10. package/dist/agent-packaging/download.d.ts +6 -9
  11. package/dist/agent-packaging/install-closure.d.ts +9 -12
  12. package/dist/agent-packaging/node-binary.d.ts +6 -10
  13. package/dist/agent-packaging/node-runtime-members.d.ts +3 -5
  14. package/dist/agent-packaging/refresh.d.ts +12 -16
  15. package/dist/agent-packaging/store.d.ts +5 -6
  16. package/dist/agent-packaging/upload.d.ts +3 -4
  17. package/dist/app.d.ts +0 -3
  18. package/dist/approvals/apply-decision.d.ts +35 -52
  19. package/dist/approvals/approval-resolver.d.ts +11 -23
  20. package/dist/approvals/held-run-release-wiring.d.ts +14 -21
  21. package/dist/approvals/independent-wiring.d.ts +13 -20
  22. package/dist/approvals/resume-router.d.ts +1 -1
  23. package/dist/approvals/step-approval-bridge.d.ts +11 -21
  24. package/dist/approvals/triggerer-subject.d.ts +8 -10
  25. package/dist/artifacts/artifact-store.d.ts +55 -95
  26. package/dist/artifacts/failure-messages.d.ts +15 -20
  27. package/dist/audit/access-log.d.ts +27 -45
  28. package/dist/audit/sampling-rate-limiter.d.ts +11 -23
  29. package/dist/cache/agent-job-failed-error.d.ts +2 -3
  30. package/dist/cache/build-coordinator.d.ts +5 -28
  31. package/dist/cache/cache-upload-settle.d.ts +11 -11
  32. package/dist/cache/dep-cache.d.ts +32 -60
  33. package/dist/cache/dispatch-cache-ref-tracker.d.ts +15 -23
  34. package/dist/cache/global-eval-round-cache.d.ts +33 -41
  35. package/dist/cache/pending-builds.d.ts +2 -6
  36. package/dist/cache/pending-dynamics.d.ts +2 -7
  37. package/dist/cache/pending-global-evals.d.ts +9 -12
  38. package/dist/cache/pending-inits.d.ts +11 -22
  39. package/dist/cache/pending-precursor-db-watcher.d.ts +24 -32
  40. package/dist/cache/pending-tracker.d.ts +17 -45
  41. package/dist/cache/precursor-result.d.ts +17 -30
  42. package/dist/cache/source-cache.d.ts +36 -65
  43. package/dist/cache/user-cache.d.ts +21 -25
  44. package/dist/cancel/cancel-held-run.d.ts +13 -16
  45. package/dist/cancel/cancel-route-answer.d.ts +1 -2
  46. package/dist/cancel/cancel-run.d.ts +26 -50
  47. package/dist/cancel/dashboard-cancel-handler.d.ts +2 -2
  48. package/dist/cancel/peer-job-cancel.d.ts +11 -14
  49. package/dist/cancel/sweep-stuck-cancelling.d.ts +9 -13
  50. package/dist/cli/api-client.d.ts +25 -76
  51. package/dist/cli/commands/access-log.d.ts +4 -24
  52. package/dist/cli/commands/agent-package.d.ts +7 -15
  53. package/dist/cli/commands/agent-service/agent-env.d.ts +3 -6
  54. package/dist/cli/commands/agent-service/index.d.ts +4 -10
  55. package/dist/cli/commands/agent-service/install.d.ts +4 -11
  56. package/dist/cli/commands/agent-service/status.d.ts +4 -9
  57. package/dist/cli/commands/agent-service/upgrade.d.ts +4 -16
  58. package/dist/cli/commands/agent.d.ts +12 -25
  59. package/dist/cli/commands/api-key.d.ts +5 -12
  60. package/dist/cli/commands/attestations-list.d.ts +7 -17
  61. package/dist/cli/commands/attestations-retry.d.ts +5 -11
  62. package/dist/cli/commands/attestations-reverify.d.ts +4 -5
  63. package/dist/cli/commands/attestations.d.ts +3 -8
  64. package/dist/cli/commands/audit.d.ts +1 -5
  65. package/dist/cli/commands/backend.d.ts +2 -11
  66. package/dist/cli/commands/check-run.d.ts +7 -18
  67. package/dist/cli/commands/cluster-name.d.ts +5 -12
  68. package/dist/cli/commands/cluster-settings.d.ts +28 -53
  69. package/dist/cli/commands/cold-store.d.ts +7 -15
  70. package/dist/cli/commands/config.d.ts +9 -20
  71. package/dist/cli/commands/context.d.ts +8 -20
  72. package/dist/cli/commands/dashboard-encryption-key.d.ts +9 -14
  73. package/dist/cli/commands/db-backup.d.ts +17 -32
  74. package/dist/cli/commands/db.d.ts +3 -4
  75. package/dist/cli/commands/debug-bundle.d.ts +3 -10
  76. package/dist/cli/commands/diagnose.d.ts +3 -14
  77. package/dist/cli/commands/event-dlq.d.ts +4 -12
  78. package/dist/cli/commands/event-log.d.ts +2 -20
  79. package/dist/cli/commands/execution.d.ts +3 -9
  80. package/dist/cli/commands/firecracker/index.d.ts +3 -6
  81. package/dist/cli/commands/held-run.d.ts +23 -37
  82. package/dist/cli/commands/host.d.ts +4 -11
  83. package/dist/cli/commands/inspect-bundle.d.ts +3 -11
  84. package/dist/cli/commands/local-hook.d.ts +2 -10
  85. package/dist/cli/commands/local-trigger.d.ts +2 -2
  86. package/dist/cli/commands/orchestrator-service/drain.d.ts +3 -6
  87. package/dist/cli/commands/orchestrator-service/index.d.ts +6 -14
  88. package/dist/cli/commands/orchestrator-service/install-env.d.ts +25 -49
  89. package/dist/cli/commands/orchestrator-service/install.d.ts +2 -5
  90. package/dist/cli/commands/orchestrator-service/status.d.ts +10 -22
  91. package/dist/cli/commands/orchestrator-service/upgrade.d.ts +6 -15
  92. package/dist/cli/commands/org-settings.d.ts +5 -11
  93. package/dist/cli/commands/peer.d.ts +5 -10
  94. package/dist/cli/commands/queue.d.ts +3 -9
  95. package/dist/cli/commands/registration.d.ts +4 -8
  96. package/dist/cli/commands/remote-source.d.ts +6 -12
  97. package/dist/cli/commands/rotate.d.ts +1 -5
  98. package/dist/cli/commands/runs.d.ts +1 -30
  99. package/dist/cli/commands/scaler.d.ts +5 -12
  100. package/dist/cli/commands/secret.d.ts +1 -9
  101. package/dist/cli/commands/service-health.d.ts +5 -10
  102. package/dist/cli/commands/shared/admin-cli-access-log.d.ts +10 -19
  103. package/dist/cli/commands/shared/bare-metal-binary-check.d.ts +86 -0
  104. package/dist/cli/commands/shared/cli-action.d.ts +1 -4
  105. package/dist/cli/commands/shared/confirm.d.ts +5 -10
  106. package/dist/cli/commands/shared/db.d.ts +1 -12
  107. package/dist/cli/commands/shared/env-file-mode.d.ts +6 -9
  108. package/dist/cli/commands/shared/secret-input.d.ts +7 -21
  109. package/dist/cli/commands/shared/service-verbs.d.ts +6 -12
  110. package/dist/cli/commands/shared/unbound-context-warning.d.ts +2 -4
  111. package/dist/cli/commands/shared/upgrade-hooks.d.ts +7 -16
  112. package/dist/cli/commands/shared/upgrade-safety.d.ts +20 -31
  113. package/dist/cli/commands/shared/versioned-upgrade.d.ts +83 -161
  114. package/dist/cli/commands/signing-key.d.ts +4 -9
  115. package/dist/cli/commands/source-manifest.d.ts +11 -14
  116. package/dist/cli/commands/source.d.ts +7 -32
  117. package/dist/cli/commands/token.d.ts +4 -15
  118. package/dist/cli/commands/trust-policy.d.ts +35 -88
  119. package/dist/cli/commands/variable.d.ts +3 -5
  120. package/dist/cli/commands/workflow.d.ts +3 -24
  121. package/dist/cli/join.d.ts +3 -6
  122. package/dist/cli/kici-admin.d.ts +11 -29
  123. package/dist/cli/lazy-deps/cache.d.ts +1 -14
  124. package/dist/cli/lazy-deps/downloader.d.ts +4 -27
  125. package/dist/cli/lazy-deps/registry.d.ts +5 -25
  126. package/dist/cli/local-github-ingress-url.d.ts +5 -7
  127. package/dist/cli/loopback-callback.d.ts +6 -7
  128. package/dist/cli/open-browser.d.ts +4 -8
  129. package/dist/cli/root-option-routing.d.ts +17 -29
  130. package/dist/cli/service/backup-timer.d.ts +16 -39
  131. package/dist/cli/service/compose-path.d.ts +3 -7
  132. package/dist/cli/service/compose.d.ts +12 -30
  133. package/dist/cli/service/deploy-env.d.ts +6 -18
  134. package/dist/cli/service/entrypoint.d.ts +14 -25
  135. package/dist/cli/service/env-assignment.d.ts +6 -17
  136. package/dist/cli/service/image-digests.d.ts +6 -15
  137. package/dist/cli/service/index.d.ts +2 -18
  138. package/dist/cli/service/instance/index-file.d.ts +9 -16
  139. package/dist/cli/service/instance/manifest.d.ts +60 -60
  140. package/dist/cli/service/instance/resolve.d.ts +32 -68
  141. package/dist/cli/service/instance/types.d.ts +12 -29
  142. package/dist/cli/service/launchd.d.ts +29 -60
  143. package/dist/cli/service/platform-detect.d.ts +13 -68
  144. package/dist/cli/service/privilege.d.ts +12 -25
  145. package/dist/cli/service/shutdown-grace.d.ts +11 -20
  146. package/dist/cli/service/systemd.d.ts +7 -20
  147. package/dist/cli/service/types.d.ts +63 -114
  148. package/dist/cli/service/windows-acl.d.ts +14 -21
  149. package/dist/cli/service/windows-env-file.d.ts +10 -28
  150. package/dist/cli/service/windows.d.ts +15 -31
  151. package/dist/cli/webhook-url-notes.d.ts +4 -6
  152. package/dist/cli/wizard/agent-wizard.d.ts +3 -14
  153. package/dist/cli/wizard/orchestrator-wizard.d.ts +12 -37
  154. package/dist/cli/wizard/prompts.d.ts +6 -16
  155. package/dist/cli.js +8207 -10128
  156. package/dist/cluster/cluster-identity.d.ts +20 -32
  157. package/dist/cluster/cluster-settings-reader.d.ts +50 -77
  158. package/dist/cluster/coordinator-credential.d.ts +4 -5
  159. package/dist/cluster/coordinator.d.ts +76 -148
  160. package/dist/cluster/health-api.d.ts +2 -10
  161. package/dist/cluster/index.d.ts +1 -6
  162. package/dist/cluster/instance-heartbeat.d.ts +26 -42
  163. package/dist/cluster/join-client.d.ts +4 -7
  164. package/dist/cluster/join-handler.d.ts +3 -7
  165. package/dist/cluster/join-token.d.ts +13 -27
  166. package/dist/cluster/leader-gated-scheduler.d.ts +8 -17
  167. package/dist/cluster/orphan-recovery.d.ts +13 -35
  168. package/dist/cluster/peer-auth-coordinator.d.ts +2 -8
  169. package/dist/cluster/peer-client.d.ts +46 -76
  170. package/dist/cluster/peer-credentials.d.ts +24 -70
  171. package/dist/cluster/peer-crypto.d.ts +5 -26
  172. package/dist/cluster/peer-forget.d.ts +3 -3
  173. package/dist/cluster/peer-handler.d.ts +47 -71
  174. package/dist/cluster/peer-registry.d.ts +37 -106
  175. package/dist/cluster/plan-headroom-store.d.ts +4 -6
  176. package/dist/cluster/raft-state.d.ts +4 -13
  177. package/dist/cluster/raft.d.ts +18 -53
  178. package/dist/cluster/reconcile-identity.d.ts +8 -11
  179. package/dist/cluster/rerouted-job-guard.d.ts +7 -11
  180. package/dist/cluster/verified-issuer.d.ts +2 -3
  181. package/dist/cluster/worker-cluster-settings.d.ts +7 -10
  182. package/dist/cluster/worker-eviction.d.ts +16 -26
  183. package/dist/cold-store/load-access-log-range.d.ts +15 -31
  184. package/dist/cold-store/load-event-log-range.d.ts +13 -27
  185. package/dist/cold-store/load-secret-audit-log-range.d.ts +8 -12
  186. package/dist/cold-store/orchestrator-cold-store.d.ts +8 -28
  187. package/dist/cold-store/tables/access-log.d.ts +12 -14
  188. package/dist/cold-store/tables/event-log.d.ts +4 -8
  189. package/dist/cold-store/tables/execution-runs.d.ts +6 -11
  190. package/dist/cold-store/tables/secret-audit-log.d.ts +5 -12
  191. package/dist/concurrency/dispatch-next-queued.d.ts +13 -25
  192. package/dist/concurrency/queue-manager.d.ts +22 -54
  193. package/dist/concurrency/waiters.d.ts +15 -31
  194. package/dist/config/encryption.d.ts +0 -2
  195. package/dist/config/loader.d.ts +0 -1
  196. package/dist/config/reload.d.ts +0 -6
  197. package/dist/config/resolver.d.ts +0 -4
  198. package/dist/config/shared-store.d.ts +0 -2
  199. package/dist/config/types.d.ts +0 -3
  200. package/dist/content-requirements-cache.d.ts +0 -1
  201. package/dist/contexts/context-store.d.ts +0 -2
  202. package/dist/contexts/held-runs.d.ts +0 -2
  203. package/dist/contexts/variable-store.d.ts +0 -2
  204. package/dist/dashboard/attestation-filters.d.ts +13 -18
  205. package/dist/dashboard/handler.d.ts +145 -307
  206. package/dist/db/client.d.ts +2 -6
  207. package/dist/db/deferred-index-build.d.ts +8 -10
  208. package/dist/db/deferred-indexes.d.ts +15 -22
  209. package/dist/db/migration-provider.d.ts +2 -4
  210. package/dist/db/migration-test-harness.d.ts +26 -44
  211. package/dist/db/migrations/001_initial.d.ts +1 -4
  212. package/dist/db/migrations/002_config_versions_key_version.d.ts +5 -8
  213. package/dist/db/migrations/003_access_log.d.ts +10 -15
  214. package/dist/db/migrations/004_rename_bundle_to_source.d.ts +7 -9
  215. package/dist/db/migrations/005_cold_store_chunk_counter.d.ts +4 -10
  216. package/dist/db/migrations/006_runs_jobs_steps_archived_at.d.ts +9 -29
  217. package/dist/db/migrations/007_audit_logs_archived_at.d.ts +11 -30
  218. package/dist/db/migrations/008_event_log_archived_at.d.ts +14 -29
  219. package/dist/db/migrations/009_access_log_trigram.d.ts +4 -8
  220. package/dist/db/migrations/010_cold_store_chunks.d.ts +16 -26
  221. package/dist/db/migrations/011_drop_source_secrets_notify.d.ts +6 -14
  222. package/dist/db/migrations/012_peer_credentials_active_uniq.d.ts +9 -14
  223. package/dist/db/migrations/013_execution_log_bytes.d.ts +5 -13
  224. package/dist/db/migrations/014_kici_events_lease_retry.d.ts +14 -27
  225. package/dist/db/migrations/015_org_settings_customer_scoped.d.ts +12 -17
  226. package/dist/db/migrations/016_org_settings_allow_http_npm.d.ts +4 -6
  227. package/dist/db/migrations/019_generic_sources_change_notify.d.ts +13 -17
  228. package/dist/db/migrations/020_org_settings_dashboard_write_policy.d.ts +5 -8
  229. package/dist/db/migrations/021_check_run_tracking.d.ts +5 -17
  230. package/dist/db/migrations/022_scaler_manager_state.d.ts +10 -20
  231. package/dist/db/migrations/023_dispatch_queue_recovery_deadline.d.ts +7 -18
  232. package/dist/db/migrations/024_dispatch_queue_provisioning_error.d.ts +5 -11
  233. package/dist/db/migrations/025_init_failure.d.ts +5 -9
  234. package/dist/db/migrations/027_workflow_timeout.d.ts +5 -13
  235. package/dist/db/migrations/029_dispatch_queue_attempts.d.ts +4 -10
  236. package/dist/db/migrations/030_held_runs_env_set_null.d.ts +5 -6
  237. package/dist/db/migrations/031_dispatch_queue_ack_deadline.d.ts +6 -12
  238. package/dist/db/migrations/033_org_settings_approval.d.ts +7 -10
  239. package/dist/db/migrations/034_held_runs_generalize.d.ts +10 -18
  240. package/dist/db/migrations/035_pending_workflow_contexts.d.ts +4 -5
  241. package/dist/db/migrations/037_generic_sources_provider_type_local.d.ts +5 -6
  242. package/dist/db/migrations/038_remote_sources.d.ts +5 -7
  243. package/dist/db/migrations/045_host_properties.d.ts +5 -9
  244. package/dist/db/migrations/046_join_token_consumed_by_instance.d.ts +5 -10
  245. package/dist/db/migrations/048_host_reboot_pending.d.ts +6 -12
  246. package/dist/db/migrations/049_held_runs_payload.d.ts +3 -8
  247. package/dist/db/migrations/050_sources_slug.d.ts +4 -5
  248. package/dist/db/migrations/051_binding_host_pattern.d.ts +7 -10
  249. package/dist/db/migrations/052_host_reach_metadata.d.ts +8 -11
  250. package/dist/db/migrations/053_agent_token_single_use.d.ts +6 -10
  251. package/dist/db/migrations/054_local_working_tree.d.ts +4 -6
  252. package/dist/db/migrations/055_agent_token_mandatory_labels.d.ts +6 -11
  253. package/dist/db/migrations/056_execution_jobs_environments.d.ts +4 -11
  254. package/dist/db/migrations/064_execution_jobs_skipped_environments.d.ts +6 -9
  255. package/dist/db/migrations/065_pending_attestations.d.ts +9 -12
  256. package/dist/db/migrations/066_pending_attestations_rejected.d.ts +4 -7
  257. package/dist/db/migrations/068_request_idempotency.d.ts +7 -9
  258. package/dist/db/migrations/069_reroute_tunables.d.ts +6 -14
  259. package/dist/db/migrations/071_batch_accumulation.d.ts +8 -16
  260. package/dist/db/migrations/072_dispatch_queue_run_id_index.d.ts +3 -9
  261. package/dist/db/migrations/074_normalize_zero_concurrency_limit.d.ts +4 -7
  262. package/dist/db/migrations/076_artifacts.d.ts +7 -8
  263. package/dist/db/migrations/078_org_settings_backup_staleness.d.ts +3 -6
  264. package/dist/db/migrations/079_org_settings_scaler_spawn_timeout.d.ts +4 -8
  265. package/dist/db/migrations/080_cluster_settings.d.ts +6 -10
  266. package/dist/db/migrations/081_org_settings_queue_timeout.d.ts +7 -11
  267. package/dist/db/migrations/082_host_s3_reachable.d.ts +5 -10
  268. package/dist/db/migrations/083_org_settings_artifact_caps.d.ts +6 -8
  269. package/dist/db/migrations/084_orchestrator_signing_keys.d.ts +8 -13
  270. package/dist/db/migrations/085_cluster_settings_reroute_flap_grace_ms.d.ts +4 -5
  271. package/dist/db/migrations/086_cluster_settings_max_fanout_hosts.d.ts +3 -3
  272. package/dist/db/migrations/087_cluster_settings_event_router_rate_limit.d.ts +5 -3
  273. package/dist/db/migrations/088_cluster_settings_cache_max_tarball_bytes.d.ts +3 -3
  274. package/dist/db/migrations/089_cluster_settings_cache_ttl_days.d.ts +3 -5
  275. package/dist/db/migrations/090_cluster_settings_concurrency_wait_timeout_ms.d.ts +3 -6
  276. package/dist/db/migrations/091_cluster_settings_agent_token_ttl_ms.d.ts +3 -6
  277. package/dist/db/migrations/092_cluster_settings_version.d.ts +5 -9
  278. package/dist/db/migrations/094_dashboard_encryption_keys.d.ts +9 -14
  279. package/dist/db/migrations/095_dashboard_write_policy_tristate.d.ts +2 -6
  280. package/dist/db/migrations/099_cluster_settings_dashboard_verified_issuer.d.ts +8 -11
  281. package/dist/db/migrations/101_contexts_hold_expiry_drop_default.d.ts +9 -15
  282. package/dist/db/migrations/102_dispatch_queue_agent_id.d.ts +6 -11
  283. package/dist/db/migrations/103_cluster_settings_ownership_db_check_timeout_ms.d.ts +6 -12
  284. package/dist/db/migrations/104_check_run_terminal_sent.d.ts +8 -14
  285. package/dist/db/migrations/105_org_trust_policy.d.ts +5 -7
  286. package/dist/db/migrations/106_cluster_settings_check_run_tracking_ttl_days.d.ts +4 -12
  287. package/dist/db/migrations/107_check_run_tracking_updated_at_index.d.ts +8 -14
  288. package/dist/db/migrations/113_execution_runs_workflow_repo_index.d.ts +10 -19
  289. package/dist/db/migrations/115_global_workflows_cluster_switch.d.ts +2 -3
  290. package/dist/db/migrations/121_org_settings_allow_untrusted_dockerfile_builds.d.ts +7 -8
  291. package/dist/db/migrations/122_host_roster_scaler_managed.d.ts +9 -16
  292. package/dist/db/migrations/123_workflow_registrations_default_branch.d.ts +8 -16
  293. package/dist/db/migrations/125_org_trust_directory.d.ts +13 -21
  294. package/dist/db/migrations/126_held_runs_posted_pending_check.d.ts +10 -16
  295. package/dist/db/migrations/127_org_trust_policy_approval_expiry_seconds.d.ts +8 -16
  296. package/dist/db/migrations/128_execution_runs_global_eval_round.d.ts +6 -11
  297. package/dist/db/migrations/129_execution_runs_dispatch_routing_key.d.ts +8 -11
  298. package/dist/db/migrations/130_scaler_provision_outcomes.d.ts +13 -20
  299. package/dist/db/migrations/131_execution_jobs_git_credentials.d.ts +12 -22
  300. package/dist/db/migrations/132_execution_runs_trigger_event.d.ts +6 -16
  301. package/dist/db/migrations/133_dispatch_queue_source_tar_digest.d.ts +6 -9
  302. package/dist/db/migrations/140_dispatch_queue_canonical_labels.d.ts +22 -40
  303. package/dist/db/migrations/143_execution_jobs_precursor_result.d.ts +9 -18
  304. package/dist/db/migrations/144_execution_runs_registration_window.d.ts +12 -20
  305. package/dist/db/migrations/147_sealed_job_secrets.d.ts +5 -9
  306. package/dist/db/migrations/148_cluster_settings_sealed_secrets_retry_backoff_ms.d.ts +7 -13
  307. package/dist/db/migrations/150_execution_runs_status_epoch.d.ts +6 -11
  308. package/dist/db/migrations/152_org_settings_cache_upload_settle_timeout.d.ts +5 -8
  309. package/dist/db/migrations/157_host_roster_identity_source.d.ts +9 -13
  310. package/dist/db/migrations/159_org_id_widen_to_source_width.d.ts +5 -0
  311. package/dist/db/migrator.d.ts +17 -25
  312. package/dist/db/notify-listener.d.ts +8 -11
  313. package/dist/db/repos/dashboard-encryption-keys-repo.d.ts +9 -10
  314. package/dist/db/synthetic-job-ids.d.ts +6 -8
  315. package/dist/db/types.d.ts +531 -1058
  316. package/dist/deployment/deployment-identity.d.ts +42 -60
  317. package/dist/diagnostics/bundle-reader.d.ts +3 -15
  318. package/dist/diagnostics/bundle-writer.d.ts +5 -12
  319. package/dist/diagnostics/checks/agents.d.ts +1 -7
  320. package/dist/diagnostics/checks/backup.d.ts +7 -10
  321. package/dist/diagnostics/checks/certs.d.ts +1 -6
  322. package/dist/diagnostics/checks/config.d.ts +2 -5
  323. package/dist/diagnostics/checks/db.d.ts +1 -1
  324. package/dist/diagnostics/checks/disk.d.ts +1 -6
  325. package/dist/diagnostics/checks/firecracker-network.d.ts +3 -3
  326. package/dist/diagnostics/checks/index.d.ts +0 -6
  327. package/dist/diagnostics/checks/retention.d.ts +3 -6
  328. package/dist/diagnostics/checks/scaler.d.ts +3 -7
  329. package/dist/diagnostics/checks/ws.d.ts +1 -6
  330. package/dist/diagnostics/fleet-collector.d.ts +11 -14
  331. package/dist/diagnostics/fleet-constants.d.ts +1 -3
  332. package/dist/diagnostics/fleet-selection.d.ts +3 -7
  333. package/dist/diagnostics/fleet-topology.d.ts +2 -6
  334. package/dist/diagnostics/fleet-wiring.d.ts +6 -12
  335. package/dist/diagnostics/index.d.ts +0 -5
  336. package/dist/diagnostics/runner.d.ts +4 -8
  337. package/dist/diagnostics/types.d.ts +10 -21
  338. package/dist/drain/drain-controller.d.ts +16 -22
  339. package/dist/entry-helpers.d.ts +0 -2
  340. package/dist/events/circuit-breaker.d.ts +0 -3
  341. package/dist/events/event-router.d.ts +1 -2
  342. package/dist/events/event-store.d.ts +0 -9
  343. package/dist/events/trust-store.d.ts +0 -3
  344. package/dist/events/types.d.ts +0 -9
  345. package/dist/firecracker/host-network.d.ts +24 -30
  346. package/dist/firecracker/net-interfaces.d.ts +4 -7
  347. package/dist/helpers/rate-limiter.d.ts +0 -1
  348. package/dist/index.js +240 -482
  349. package/dist/metrics/agent-metrics-aggregator.d.ts +24 -67
  350. package/dist/metrics/metrics-reporter.d.ts +4 -13
  351. package/dist/metrics/prometheus.d.ts +47 -81
  352. package/dist/orchestrator-core.d.ts +3 -7
  353. package/dist/pipeline/content-filter.d.ts +20 -30
  354. package/dist/pipeline/cross-source-tally.d.ts +7 -8
  355. package/dist/pipeline/decorating-secret-resolver.d.ts +4 -8
  356. package/dist/pipeline/degraded-reason.d.ts +3 -4
  357. package/dist/pipeline/direct-ingress-deps.d.ts +15 -24
  358. package/dist/pipeline/dispatch-matched-workflow.d.ts +290 -526
  359. package/dist/pipeline/flatten-lock-steps.d.ts +4 -6
  360. package/dist/pipeline/global-dispatch-identity.d.ts +5 -10
  361. package/dist/pipeline/global-eval-round.d.ts +62 -156
  362. package/dist/pipeline/global-round-hold.d.ts +5 -7
  363. package/dist/pipeline/held-context-data.d.ts +5 -8
  364. package/dist/pipeline/held-round-registrations.d.ts +8 -11
  365. package/dist/pipeline/install-gate.d.ts +15 -25
  366. package/dist/pipeline/install-secrets-resolver.d.ts +24 -34
  367. package/dist/pipeline/internal-event-pipeline.d.ts +45 -62
  368. package/dist/pipeline/invoke-gate.d.ts +27 -40
  369. package/dist/pipeline/job-contexts.d.ts +19 -36
  370. package/dist/pipeline/manual-schedule.d.ts +7 -13
  371. package/dist/pipeline/needs-scheduler.d.ts +29 -46
  372. package/dist/pipeline/pending-workflow-context.d.ts +14 -28
  373. package/dist/pipeline/process-webhook.d.ts +88 -123
  374. package/dist/pipeline/processor.d.ts +209 -355
  375. package/dist/pipeline/remote-source-store.d.ts +5 -8
  376. package/dist/pipeline/request-idempotency.d.ts +10 -13
  377. package/dist/pipeline/rerun-global.d.ts +6 -7
  378. package/dist/pipeline/rerun-inputs.d.ts +23 -37
  379. package/dist/pipeline/rerun.d.ts +34 -57
  380. package/dist/pipeline/resolve-sandbox-grant.d.ts +5 -10
  381. package/dist/pipeline/resume-workflow.d.ts +28 -34
  382. package/dist/pipeline/route-or-dispatch-jobs.d.ts +19 -30
  383. package/dist/pipeline/run-event-context.d.ts +16 -21
  384. package/dist/pipeline/sandbox-allowlist-reader.d.ts +7 -11
  385. package/dist/pipeline/security-hold-check.d.ts +56 -80
  386. package/dist/pipeline/test-pipeline.d.ts +20 -46
  387. package/dist/pipeline/unbound-job-context.d.ts +6 -9
  388. package/dist/pipeline/undispatched-hold-checks.d.ts +4 -6
  389. package/dist/pipeline/wave-scheduler.d.ts +15 -22
  390. package/dist/pipeline/webhook-payload-store.d.ts +3 -10
  391. package/dist/pipeline/workflow-lock-at-sha.d.ts +14 -20
  392. package/dist/policy/dashboard-write-policy.d.ts +1 -1
  393. package/dist/provider-registry.d.ts +0 -19
  394. package/dist/providers/generic/index.d.ts +0 -2
  395. package/dist/providers/generic/normalizer.d.ts +0 -1
  396. package/dist/providers/generic/verification.d.ts +0 -8
  397. package/dist/providers/github/auth.d.ts +0 -1
  398. package/dist/providers/github/changed-files.d.ts +2 -1
  399. package/dist/providers/github/file-contents.d.ts +0 -4
  400. package/dist/providers/github/lock-file.d.ts +0 -4
  401. package/dist/providers/github/normalizer.d.ts +1 -9
  402. package/dist/providers/local/index.d.ts +1 -2
  403. package/dist/providers/local/lock-file-fetcher.d.ts +0 -4
  404. package/dist/providers/local/normalizer.d.ts +0 -10
  405. package/dist/providers/local/repo-url-builder.d.ts +0 -2
  406. package/dist/providers/universal-git/clone-token.d.ts +0 -2
  407. package/dist/providers/universal-git/lock-file.d.ts +0 -2
  408. package/dist/providers/universal-git/normalizer.d.ts +0 -2
  409. package/dist/queue/bootstrap.d.ts +3 -15
  410. package/dist/queue/cleanup.d.ts +29 -50
  411. package/dist/queue/depth-refresher.d.ts +21 -39
  412. package/dist/queue/job-queue.d.ts +112 -163
  413. package/dist/queue/retention.d.ts +23 -36
  414. package/dist/queue/scheduled-job.d.ts +17 -39
  415. package/dist/queue/terminalize-unroutable.d.ts +16 -18
  416. package/dist/queue/unroutable-probe.d.ts +15 -22
  417. package/dist/registration/extractor.d.ts +0 -6
  418. package/dist/registration/registration-index.d.ts +0 -6
  419. package/dist/registration/registration-store.d.ts +0 -9
  420. package/dist/reporting/agent-failure-category.d.ts +3 -5
  421. package/dist/reporting/check-run-reporter.d.ts +142 -316
  422. package/dist/reporting/check-run-summary.d.ts +16 -35
  423. package/dist/reporting/check-run-tracking-store.d.ts +54 -107
  424. package/dist/reporting/execution-tracker.d.ts +356 -526
  425. package/dist/reporting/fs-log-storage.d.ts +31 -33
  426. package/dist/reporting/job-check-run-completion.d.ts +14 -22
  427. package/dist/reporting/log-chunk-sink.d.ts +11 -16
  428. package/dist/reporting/log-pull-handler.d.ts +4 -13
  429. package/dist/reporting/log-retention.d.ts +3 -4
  430. package/dist/reporting/log-storage.d.ts +24 -52
  431. package/dist/reporting/log-writer.d.ts +28 -56
  432. package/dist/reporting/peer-log-normalize.d.ts +4 -8
  433. package/dist/reporting/run-aggregator.d.ts +6 -11
  434. package/dist/reporting/run-summary-fields.d.ts +5 -8
  435. package/dist/reporting/s3-log-storage.d.ts +31 -50
  436. package/dist/reporting/step-display-order.d.ts +11 -21
  437. package/dist/reporting/step-log-buffer.d.ts +7 -28
  438. package/dist/reporting/step-log-reader.d.ts +11 -19
  439. package/dist/routes/admin-access-log.d.ts +4 -6
  440. package/dist/routes/admin-auth.d.ts +17 -38
  441. package/dist/routes/admin-backends.d.ts +3 -14
  442. package/dist/routes/admin-cluster-name.d.ts +13 -21
  443. package/dist/routes/admin-cluster-settings.d.ts +6 -9
  444. package/dist/routes/admin-config.d.ts +7 -19
  445. package/dist/routes/admin-contexts.d.ts +6 -13
  446. package/dist/routes/admin-db.d.ts +5 -10
  447. package/dist/routes/admin-event-dlq.d.ts +3 -5
  448. package/dist/routes/admin-event-inspect.d.ts +3 -4
  449. package/dist/routes/admin-event-log.d.ts +3 -7
  450. package/dist/routes/admin-events.d.ts +16 -30
  451. package/dist/routes/admin-held-runs.d.ts +52 -76
  452. package/dist/routes/admin-maintenance.d.ts +3 -6
  453. package/dist/routes/admin-orchestrator-drain.d.ts +0 -2
  454. package/dist/routes/admin-org-settings.d.ts +8 -14
  455. package/dist/routes/admin-peer-forget.d.ts +0 -1
  456. package/dist/routes/admin-queue-execution.d.ts +3 -3
  457. package/dist/routes/admin-registrations.d.ts +3 -12
  458. package/dist/routes/admin-runs.d.ts +16 -29
  459. package/dist/routes/admin-scaler-orphans.d.ts +4 -4
  460. package/dist/routes/admin-scaler-reload.d.ts +5 -8
  461. package/dist/routes/admin-scheduled-jobs.d.ts +3 -4
  462. package/dist/routes/admin-sources.d.ts +20 -29
  463. package/dist/routes/admin-trust-policy.d.ts +31 -48
  464. package/dist/routes/admin.d.ts +67 -94
  465. package/dist/routes/caller-identity.d.ts +5 -12
  466. package/dist/routes/capabilities.d.ts +8 -13
  467. package/dist/routes/diagnostics.d.ts +2 -10
  468. package/dist/routes/fleet.d.ts +1 -2
  469. package/dist/routes/github-webhook.d.ts +2 -5
  470. package/dist/routes/health.d.ts +6 -19
  471. package/dist/routes/provenance-oidc.d.ts +3 -3
  472. package/dist/routes/uploads.d.ts +5 -11
  473. package/dist/routes/webhooks.d.ts +2 -24
  474. package/dist/scaler/agent-binary-location.d.ts +77 -0
  475. package/dist/scaler/agent-fit.d.ts +2 -2
  476. package/dist/scaler/backend-factory.d.ts +10 -18
  477. package/dist/scaler/bare-metal-backend.d.ts +30 -46
  478. package/dist/scaler/claim-store.d.ts +20 -43
  479. package/dist/scaler/config.d.ts +10 -37
  480. package/dist/scaler/container-backend.d.ts +22 -35
  481. package/dist/scaler/container-hostconfig.d.ts +19 -16
  482. package/dist/scaler/container-routing.d.ts +10 -13
  483. package/dist/scaler/disk-guard.d.ts +2 -3
  484. package/dist/scaler/event-backend.d.ts +33 -58
  485. package/dist/scaler/event-provision-reaper.d.ts +61 -84
  486. package/dist/scaler/failure-tracker.d.ts +6 -13
  487. package/dist/scaler/file-tail.d.ts +6 -19
  488. package/dist/scaler/firecracker-api.d.ts +19 -63
  489. package/dist/scaler/firecracker-backend.d.ts +142 -258
  490. package/dist/scaler/host-access.d.ts +7 -10
  491. package/dist/scaler/index.d.ts +3 -6
  492. package/dist/scaler/ip-allocator.d.ts +30 -82
  493. package/dist/scaler/label-matcher.d.ts +14 -35
  494. package/dist/scaler/log-forwarder.d.ts +6 -25
  495. package/dist/scaler/machine-ledger.d.ts +39 -86
  496. package/dist/scaler/manager.d.ts +517 -787
  497. package/dist/scaler/pending-scale-sweeper.d.ts +8 -11
  498. package/dist/scaler/reap-orphans.d.ts +8 -12
  499. package/dist/scaler/resolve-container-auth.d.ts +12 -21
  500. package/dist/scaler/scaler-events.d.ts +2 -5
  501. package/dist/scaler/scaler-state-store.d.ts +127 -189
  502. package/dist/scaler/spawn-errors.d.ts +1 -4
  503. package/dist/scaler/startup-orphan-sweep.d.ts +3 -4
  504. package/dist/scaler/startup-tools-check.d.ts +21 -0
  505. package/dist/scaler/types.d.ts +142 -255
  506. package/dist/scaler/vm-job-bindings.d.ts +5 -9
  507. package/dist/scaler/warm-pool.d.ts +49 -93
  508. package/dist/secrets/audit-logger.d.ts +0 -3
  509. package/dist/secrets/backend-health.d.ts +0 -9
  510. package/dist/secrets/backend-registry.d.ts +0 -9
  511. package/dist/secrets/cleanup.d.ts +0 -1
  512. package/dist/secrets/config.d.ts +0 -3
  513. package/dist/secrets/ephemeral-keys.d.ts +0 -3
  514. package/dist/secrets/pg-secret-store.d.ts +0 -3
  515. package/dist/secrets/rbac.d.ts +0 -6
  516. package/dist/secrets/secret-output-store.d.ts +0 -6
  517. package/dist/secrets/secret-resolver.d.ts +2 -6
  518. package/dist/secrets/token-manager.d.ts +0 -4
  519. package/dist/secrets/vault-secret-store.d.ts +0 -13
  520. package/dist/security/comment-handler.d.ts +0 -2
  521. package/dist/security/workflow-diff.d.ts +1 -1
  522. package/dist/server.js +8628 -13569
  523. package/dist/sources/source-manager.d.ts +0 -3
  524. package/dist/sources/source-store.d.ts +0 -9
  525. package/dist/sources/source-validator.d.ts +0 -3
  526. package/dist/stale-detector/all-terminal-runs.d.ts +8 -11
  527. package/dist/stale-detector/gate-deadline-detector.d.ts +14 -19
  528. package/dist/stale-detector/reboot-deadline-sweep.d.ts +7 -11
  529. package/dist/stale-detector/stale-dispatch-candidates.d.ts +13 -20
  530. package/dist/stale-detector/stale-run-detector.d.ts +74 -121
  531. package/dist/stale-detector/workflow-deadline-detector.d.ts +15 -43
  532. package/dist/standalone.js +7670 -12402
  533. package/dist/storage/blob-routes.d.ts +10 -19
  534. package/dist/storage/filesystem.d.ts +19 -29
  535. package/dist/storage/index.d.ts +2 -10
  536. package/dist/storage/key-discriminator.d.ts +8 -10
  537. package/dist/storage/loopback-guard.d.ts +27 -45
  538. package/dist/storage/s3.d.ts +25 -52
  539. package/dist/storage/sign-url.d.ts +7 -22
  540. package/dist/storage/types.d.ts +44 -70
  541. package/dist/webhook/event-log.d.ts +0 -2
  542. package/dist/webhook/generic-sources.d.ts +0 -21
  543. package/dist/webhook/ingest-admission.d.ts +0 -1
  544. package/dist/webhook/relay-buffer.d.ts +2 -2
  545. package/dist/webhook/verify-inbound.d.ts +0 -1
  546. package/dist/worker/in-memory-execution-tracker.d.ts +9 -31
  547. package/dist/worker/in-memory-job-queue.d.ts +32 -72
  548. package/dist/worker/peer-outbox.d.ts +5 -8
  549. package/dist/worker/reroute-dispatch.d.ts +4 -6
  550. package/dist/worker/static-agent-token-store.d.ts +6 -27
  551. package/dist/worker/worker-outbox-relay.d.ts +2 -2
  552. package/dist/worker/worker-status.d.ts +3 -20
  553. package/dist/ws/agent-api-registry.d.ts +8 -27
  554. package/dist/ws/agent-handler.d.ts +63 -110
  555. package/dist/ws/agent-heartbeat.d.ts +5 -12
  556. package/dist/ws/bringup-api.d.ts +31 -38
  557. package/dist/ws/dashboard-backends-handler.d.ts +12 -22
  558. package/dist/ws/dashboard-context-handler.d.ts +37 -80
  559. package/dist/ws/dashboard-diagnostics-handler.d.ts +8 -25
  560. package/dist/ws/dashboard-dispatch-guard.d.ts +3 -4
  561. package/dist/ws/dashboard-fleet-handler.d.ts +9 -13
  562. package/dist/ws/dashboard-fleet-write-handler.d.ts +7 -21
  563. package/dist/ws/dashboard-global-workflows-handler.d.ts +22 -44
  564. package/dist/ws/dashboard-registrations-handler.d.ts +10 -27
  565. package/dist/ws/dashboard-run-state-handler.d.ts +10 -13
  566. package/dist/ws/event-buffer.d.ts +3 -6
  567. package/dist/ws/execution-status-frame.d.ts +9 -11
  568. package/dist/ws/failure-messages.d.ts +9 -14
  569. package/dist/ws/fleet-agent-collector.d.ts +6 -12
  570. package/dist/ws/fleet-runs-on-all.d.ts +1 -6
  571. package/dist/ws/git-credential-relay.d.ts +12 -20
  572. package/dist/ws/inventory-api.d.ts +4 -5
  573. package/dist/ws/job-status-forward-frame.d.ts +30 -0
  574. package/dist/ws/observer-registry.d.ts +14 -59
  575. package/dist/ws/outbound-frame-guard.d.ts +4 -0
  576. package/dist/ws/ownership-gate.d.ts +1 -1
  577. package/dist/ws/platform-client.d.ts +32 -31
  578. package/dist/ws/replay-chunker.d.ts +7 -10
  579. package/dist/ws/server-options.d.ts +5 -9
  580. package/dist/ws/test-relay-handlers.d.ts +45 -59
  581. package/dist/ws/test-run-log-cursor.d.ts +18 -0
  582. package/installer-image-digests.json +3 -3
  583. package/package.json +6 -5
  584. package/sbom.spdx.json +53 -53
  585. package/dist/__test-helpers__/fake-scaler-state-store.d.ts +0 -24
  586. package/dist/__test-helpers__/mock-db-query.d.ts +0 -129
  587. package/dist/__test-helpers__/mock-db.d.ts +0 -134
  588. package/dist/__test-helpers__/mock-ws.d.ts +0 -13
  589. package/dist/__test-helpers__/peer-mutual-auth.d.ts +0 -42
  590. package/dist/__test-helpers__/scratch-db.d.ts +0 -16
  591. package/dist/__test-helpers__/test-db.d.ts +0 -34
  592. package/dist/pipeline/dispatch-matched-workflow.test-helpers.d.ts +0 -121
@@ -1,10 +1,7 @@
1
1
  /**
2
- * Container scaler backend implementation.
3
- *
4
- * Manages ephemeral agent containers using Docker or Podman via dockerode.
5
- * Supports auto-detection of container runtime socket.
6
- * Handles full container lifecycle: pull, create, start, stop, remove.
7
- * Supports container socket sharing, resource limits, and orphan cleanup.
2
+ * Container scaler backend: ephemeral agent containers on Docker or Podman via
3
+ * dockerode, with runtime-socket auto-detection, socket sharing, resource
4
+ * limits and orphan cleanup.
8
5
  */
9
6
  import Docker from 'dockerode';
10
7
  import { type ToolRequirement } from '@kici-dev/shared';
@@ -14,9 +11,6 @@ import type { ScalerBackend, ScalerDestroyContext, ManagedAgent, LabelSetConfig,
14
11
  export declare const ISOLATED_NETWORK_NAME = "kici-agent-net";
15
12
  /** Gateway IP for the isolated agent network (host-side). */
16
13
  export declare const ISOLATED_NETWORK_GATEWAY = "172.30.0.1";
17
- /**
18
- * Result of runtime detection.
19
- */
20
14
  export interface DetectedRuntime {
21
15
  socketPath: string;
22
16
  runtime: 'docker' | 'podman';
@@ -41,9 +35,12 @@ export interface ContainerScalerBackendOptions {
41
35
  runtime?: 'docker' | 'podman' | 'auto';
42
36
  /** Default resource limits applied when label set has none */
43
37
  defaultResources?: ResourceRequest;
44
- /** Extra host:IP mappings injected into spawned containers (e.g. ["registry.local:host-gateway"]) */
38
+ /** Extra host:IP mappings for spawned containers (e.g. ["registry.local:host-gateway"]). */
45
39
  extraHosts?: string[];
46
- /** Disable nftables-based network isolation (default: true). Set to false when nft is unavailable (e.g. rootless containers without NET_ADMIN). */
40
+ /**
41
+ * Enables nftables-based network isolation (default: true). Set to false when nft is
42
+ * unavailable (e.g. rootless containers without NET_ADMIN).
43
+ */
47
44
  networkIsolation?: boolean;
48
45
  /**
49
46
  * Extra `hostAccess` entries the orchestrator itself directed agents at —
@@ -51,7 +48,7 @@ export interface ContainerScalerBackendOptions {
51
48
  * narrowing does not cut off a host-local object store.
52
49
  */
53
50
  hostServices?: string[];
54
- /** Token store for creating ephemeral agent auth tokens. Optional -- when undefined, no token is injected. */
51
+ /** Token store for ephemeral agent auth tokens; when undefined, no token is injected. */
55
52
  tokenStore?: AgentTokenStore;
56
53
  /** TTL for ephemeral agent tokens in ms. Default: 1 hour. */
57
54
  tokenTtlMs?: number;
@@ -138,13 +135,10 @@ export declare class ContainerScalerBackend implements ScalerBackend {
138
135
  /**
139
136
  * Declare required tools for a container scaler entry.
140
137
  *
141
- * For the auto-detect case (no explicit socketPath / remote host) the
142
- * orchestrator must have a local container runtime — docker OR podman — on
143
- * PATH, otherwise the scaler cannot spawn agent containers. Declaring it
144
- * here lets the startup tool-validation gate fail fast with a clear error
145
- * instead of the first job hanging. When a socketPath or remote host is
146
- * configured the binary need not be on PATH (the runtime may be remote), so
147
- * reachability is validated later in create().
138
+ * Auto-detect (no socketPath / remote host) needs docker OR podman on PATH;
139
+ * declaring it lets the startup tool-validation gate fail fast instead of the
140
+ * first job hanging. With a socketPath or remote host the runtime may be
141
+ * remote, so create() validates reachability instead.
148
142
  */
149
143
  static getRequiredTools(entry: ScalerEntry): ToolRequirement[];
150
144
  /**
@@ -179,9 +173,7 @@ export declare class ContainerScalerBackend implements ScalerBackend {
179
173
  spawn(labelSet: string[], agentId: string, orchestratorUrl: string, onEvent?: ScalerEventCallback, effectiveLimits?: EffectiveLimits, spawnContext?: SpawnContext, signal?: AbortSignal): Promise<ManagedAgent>;
180
174
  getScalerContext(agentId: string): Record<string, unknown> | undefined;
181
175
  destroy(managedId: string, _context?: ScalerDestroyContext): Promise<void>;
182
- /**
183
- * Get the LogCapture for a managed agent (used by ScalerManager for log forwarding).
184
- */
176
+ /** Used by ScalerManager for log forwarding. */
185
177
  getLogCapture(managedId: string): LogCapture | undefined;
186
178
  shutdownAll(): Promise<void>;
187
179
  reload(labelSets: LabelSetConfig[], opts?: {
@@ -191,14 +183,11 @@ export declare class ContainerScalerBackend implements ScalerBackend {
191
183
  /**
192
184
  * Clean up this scaler's orphaned containers and stale isolation rules.
193
185
  *
194
- * Every filter below exists because the sweep used to list every
195
- * `kici-managed=true` container on the host and force-remove it, running at
196
- * orchestrator boot, at worker-peer start, on a live config reload that adds
197
- * a scaler, and from `kici-admin scaler reap-orphans`. Two orchestrators
198
- * sharing one docker host therefore killed each other's running agents on
199
- * every boot, and adding a second container scaler removed the first one's
200
- * agents mid-job — every in-flight job failing as "agent disconnected" on a
201
- * healthy system.
186
+ * Runs at orchestrator boot, at worker-peer start, on a live config reload
187
+ * that adds a scaler, and from `kici-admin scaler reap-orphans`. Without the
188
+ * filters below, two orchestrators sharing one docker host kill each other's
189
+ * running agents on every boot, and adding a second container scaler removes
190
+ * the first one's agents mid-job ("agent disconnected" on a healthy system).
202
191
  *
203
192
  * A container is removed only when all of these hold:
204
193
  * - it carries this scaler's own `kici-scaler-name`, so a backend can only
@@ -216,11 +205,9 @@ export declare class ContainerScalerBackend implements ScalerBackend {
216
205
  /**
217
206
  * Remove containers this backend spawned for one agent id.
218
207
  *
219
- * Implements the optional `ScalerBackend.reapUnowned` hook. It is what
220
- * reclaims a container whose registration the orchestrator refused — the
221
- * case `cleanupOrphans` used to cover by removing every `kici-managed`
222
- * container on the host, which is exactly the breadth that killed other
223
- * orchestrators' live agents.
208
+ * Implements the optional `ScalerBackend.reapUnowned` hook: it reclaims a
209
+ * container whose registration the orchestrator refused, so `cleanupOrphans`
210
+ * need not reap host-wide and kill other orchestrators' live agents.
224
211
  *
225
212
  * @returns true when a container was found and removed
226
213
  */
@@ -1,12 +1,9 @@
1
1
  /**
2
2
  * The `HostConfig` every KiCI agent container is created with.
3
3
  *
4
- * Two backends spawn an agent container — `ContainerScalerBackend` and the
5
- * bare-metal backend's container mode — and they had diverged into two
6
- * postures for one threat: the first applied resource limits, the second
7
- * applied none and dropped the limits the operator configured on the floor.
8
- * One builder is what keeps them from diverging again the next time either is
9
- * touched.
4
+ * Shared by both agent-container spawners — `ContainerScalerBackend` and the
5
+ * bare-metal backend's container mode — so they cannot diverge into two
6
+ * postures (one silently dropping the operator's resource limits).
10
7
  */
11
8
  import type Docker from 'dockerode';
12
9
  import type { EffectiveLimits } from './types.js';
@@ -18,6 +15,13 @@ import type { EffectiveLimits } from './types.js';
18
15
  * its own docs and validation, and nothing yet says the constant is wrong.
19
16
  */
20
17
  export declare const AGENT_CONTAINER_PIDS_LIMIT = 4096;
18
+ /**
19
+ * Group id of `kici-sudo` in the KiCI agent image (`packages/agent/Dockerfile`
20
+ * creates it). `/etc/sudoers.d/kici-sudo` grants that group passwordless sudo.
21
+ * The container scaler adds the group only to the single-job containers it
22
+ * starts from a pool's own image, so root never outlives one job.
23
+ */
24
+ export declare const AGENT_SUDO_GROUP_GID = 1990;
21
25
  /**
22
26
  * Why this container is NOT capability-dropped, though the job containers the
23
27
  * agent starts are.
@@ -25,18 +29,15 @@ export declare const AGENT_CONTAINER_PIDS_LIMIT = 4096;
25
29
  * Both spawn paths set `KICI_EXECUTION_MODE=bare-metal`, and bare-metal
26
30
  * container mode also sets `KICI_JOB_IMAGE_AGENT=1` — so unless the job
27
31
  * declares its own image, the workflow's steps run as host processes INSIDE
28
- * this container. It is a build execution environment, not a supervisor.
29
- * `CapDrop: ['ALL']` here would therefore land on customer build steps:
32
+ * this container. `CapDrop: ['ALL']` here would land on customer build steps:
30
33
  * `apt-get` and `dpkg` need CHOWN, DAC_OVERRIDE, FOWNER, SETUID and SETGID,
31
- * and `no-new-privileges` breaks `sudo` and every setuid binary. There is no
32
- * opt-out, so the break would be silent and total for `type: container`
33
- * scalers.
34
+ * and `no-new-privileges` breaks `sudo` and every setuid binary. With no
35
+ * opt-out, the break would be silent and total for `type: container` scalers.
34
36
  *
35
- * The hardening the operator docs promise already exists, one boundary in:
36
- * the agent applies `CapDrop: ['ALL']`, `no-new-privileges` and a tighter
37
- * `PidsLimit` to each nested JOB container
38
- * (`packages/agent/src/execution/sandbox/container-hardening.ts`). That is the
39
- * boundary that confines customer code; this one hosts it.
37
+ * The promised hardening lives one boundary in: the agent applies
38
+ * `CapDrop: ['ALL']`, `no-new-privileges` and a tighter `PidsLimit` to each
39
+ * nested JOB container (`packages/agent/src/execution/sandbox/container-hardening.ts`).
40
+ * That boundary confines customer code; this one hosts it.
40
41
  *
41
42
  * `PidsLimit` is the exception and stays: a fork-bomb ceiling costs a build
42
43
  * nothing at 4096.
@@ -48,6 +49,8 @@ export interface AgentContainerHostConfigInput {
48
49
  binds?: string[];
49
50
  /** Extra `host:ip` entries (e.g. a private registry alias). */
50
51
  extraHosts?: string[];
52
+ /** Extra group ids for the container's process (`GroupAdd`). */
53
+ supplementaryGroups?: number[];
51
54
  }
52
55
  /**
53
56
  * Build the agent container's `HostConfig`.
@@ -1,20 +1,17 @@
1
1
  /**
2
2
  * Label for hosts that can run containers.
3
3
  *
4
- * The agent reports it itself at registration when it finds a Docker socket,
5
- * alongside `kici:runtime:podman` for a Podman one and the `kici:os:*` /
6
- * `kici:arch:*` facts: whether a machine has a container runtime is that
7
- * machine's fact, not the orchestrator's. Probing the orchestrator's own
8
- * filesystem answers a different question — it was tried, and it stranded
9
- * container jobs that had been running fine, because the probe and the job ran
10
- * in different places.
4
+ * The agent reports it at registration when it finds a Docker socket (and
5
+ * `kici:runtime:podman` for a Podman one): a container runtime is the agent
6
+ * machine's fact. Probing the orchestrator's own filesystem was tried and
7
+ * stranded working container jobs, because the probe and the job ran in
8
+ * different places.
11
9
  *
12
- * Routing gates on the reported label (`canAgentRunJob`): a `container:` job
13
- * reaches an agent only when that agent was started for it, or reports
14
- * `kici:runtime:docker` or `kici:runtime:podman`. For an operator's own agent
15
- * the gate applies from the release that reports runtime labels at all; an
16
- * older agent reports none, so its silence proves nothing and a job it cannot
17
- * run fails on it with a message that names the missing runtime.
10
+ * Routing (`canAgentRunJob`): a `container:` job reaches an agent only when that
11
+ * agent was started for it, or reports `kici:runtime:docker` or
12
+ * `kici:runtime:podman`. An older agent reports no runtime labels, so its
13
+ * silence proves nothing; a job it cannot run fails with a message that names
14
+ * the missing runtime.
18
15
  *
19
16
  * An operator may still put the label on a pool's label sets and on a container
20
17
  * job's `runsOn` to steer container work at hosts with a runtime.
@@ -18,9 +18,8 @@ interface DiskGuardOpts {
18
18
  reapFn?: (cfg: ScalerConfig) => Promise<ReapCounts>;
19
19
  }
20
20
  /**
21
- * Run the disk guard. Returns reaped/recovered status; the caller decides
22
- * whether to proceed or exit with backoff. No-ops (recovered=true) when there
23
- * is no FC scaler or free space is already above threshold.
21
+ * The caller decides whether to proceed or exit with backoff. No-ops
22
+ * (recovered=true) when there is no FC scaler or free space is above threshold.
24
23
  */
25
24
  export declare function runDiskGuard(opts: DiskGuardOpts): Promise<DiskGuardResult>;
26
25
  export {};
@@ -1,33 +1,25 @@
1
1
  /**
2
2
  * Event scaler backend — workflow-driven autoscaling.
3
3
  *
4
- * Unlike the local backends (container / bare-metal / firecracker), this backend
5
- * performs NO local compute. Its `spawn()` emits a `kici.scaler.scale-up` event
6
- * and its `destroy()` emits a `kici.scaler.scale-down` event; a customer-authored
7
- * provisioning / teardown workflow (subscribed via `kiciEvent()`) consumes those
8
- * events to boot and tear down an ephemeral cloud instance. The provisioned
9
- * instance's agent registers back with the scaler-chosen `agentId` and the
10
- * existing bound-job dispatch runs the pending job — reusing the whole scaling
11
- * engine (demand detection, caps, reservations, spawn timeout, teardown).
4
+ * No local compute: `spawn()` emits `kici.scaler.scale-up` and `destroy()` emits
5
+ * `kici.scaler.scale-down`, which a customer workflow (via `kiciEvent()`) consumes
6
+ * to boot and tear down an ephemeral cloud instance. Its agent registers with the
7
+ * scaler-chosen `agentId` and bound-job dispatch runs the pending job, so the
8
+ * whole scaling engine (caps, reservations, spawn timeout, teardown) applies.
12
9
  */
13
10
  import type { EffectiveLimits, LabelSetConfig, ManagedAgent, ScalerBackend, ScalerDestroyContext, ScalerEntry, ScalerEventCallback, SpawnContext, ValidationResult } from './types.js';
14
11
  import type { ClaimStore } from './claim-store.js';
15
12
  import type { ScalerScaleUpPayload, ScalerScaleDownPayload } from './scaler-events.js';
16
- /**
17
- * Subset of `EventEmitter` the backend needs. Injected so the backend is unit
18
- * testable without a real event router.
19
- */
13
+ /** Subset of `EventEmitter` the backend needs; injected for unit tests. */
20
14
  export interface ScalerEventEmitterLike {
21
15
  emitScalerScaleUp(payload: ScalerScaleUpPayload, targets: string[]): Promise<string>;
22
16
  emitScalerScaleDown(payload: ScalerScaleDownPayload, targets: string[]): Promise<string>;
23
17
  }
24
18
  export interface EventScalerBackendOptions {
25
- /** The parsed scaler entry (`type: 'event'`). */
19
+ /** `type: 'event'`. */
26
20
  entry: ScalerEntry;
27
- /** Emits the reserved scale-up / scale-down events. */
28
21
  emitter: ScalerEventEmitterLike;
29
- /** Mints ephemeral credentials when a claim code is redeemed — normally by
30
- * the provisioned agent self-bootstrapping, or by a provisioning workflow. */
22
+ /** Redeemed by the self-bootstrapping agent, or by a provisioning workflow. */
31
23
  claimStore: ClaimStore;
32
24
  /** Correlation-id generator for scale-up / scale-down requests. */
33
25
  requestId: () => string;
@@ -48,40 +40,29 @@ export declare class EventScalerBackend implements ScalerBackend {
48
40
  /** The entry this backend is serving; the reload rollback restores it. */
49
41
  get currentEntry(): ScalerEntry;
50
42
  getActiveCount(): number;
51
- /**
52
- * Register a pending claim, emit a scale-up event to the provisioning targets,
53
- * and track the agent as provisioning. Performs no local compute.
54
- */
55
43
  spawn(labelSet: string[], agentId: string, orchestratorUrl: string, _onEvent?: ScalerEventCallback, effectiveLimits?: EffectiveLimits, spawnContext?: SpawnContext, signal?: AbortSignal): Promise<ManagedAgent>;
56
44
  /**
57
- * Drop the tracked agent, emit a scale-down event (carrying the teardown
58
- * reason), then invalidate the pending claim. Idempotent: a repeat destroy of
59
- * an already-torn-down agent is a no-op (no duplicate scale-down).
45
+ * Drop the tracked agent, emit a scale-down with the reason, then invalidate
46
+ * the pending claim. Idempotent: a repeat destroy emits nothing.
60
47
  *
61
- * The tracking entry is dropped before the first `await` so a concurrent
62
- * destroy of the same agent returns at the guard above and cannot emit a
63
- * second scale-down.
48
+ * The entry is dropped before the first `await`, so a concurrent destroy
49
+ * returns at the guard and cannot emit a second scale-down.
64
50
  *
65
- * The claim invalidation is last and fails open. It is a DB delete, and the
66
- * scale-down is the only thing that tears down the customer's cloud instance:
67
- * running the delete first lets a DB error suppress the teardown for good,
68
- * because the agent is already out of `this.agents` and a retried destroy
69
- * returns at the guard. A claim left behind instead is inert — the row is
70
- * single-use and TTL-bounded, so it can mint at most one token for an agent
71
- * id that is being torn down.
51
+ * The claim invalidation is last and fails open. The scale-down is the only
52
+ * teardown of the customer's instance, so a DB error before it would suppress
53
+ * the teardown for good (a retried destroy returns at the guard). A leftover
54
+ * claim is single-use and TTL-bounded: at most one token for a dying agent id.
72
55
  */
73
56
  destroy(managedId: string, context?: ScalerDestroyContext): Promise<void>;
74
57
  /**
75
58
  * Drop the tracked agent without emitting anything.
76
59
  *
77
- * The counterpart to `adopt()` on the other side of a cross-instance
78
- * registration: the spawning coordinator is never told that a peer adopted
79
- * its provision, so its entry would otherwise live until the process exits —
80
- * inflating `getActiveCount()` against the global cap forever, and handing
81
- * `shutdownAll()` a peer's live agent to tear down. Forgetting says "this
82
- * coordinator no longer tracks the provision", which is exactly true and says
83
- * nothing about whether the customer's instance is still running; the adopter
84
- * emits the teardown, and the leader-gated reaper is the backstop.
60
+ * The spawning side of a cross-instance `adopt()`. The spawner is never told
61
+ * a peer adopted its provision, so its entry would otherwise inflate
62
+ * `getActiveCount()` against the global cap until exit, and hand
63
+ * `shutdownAll()` a peer's live agent. It says nothing about whether the
64
+ * instance runs: the adopter emits the teardown, the leader-gated reaper is
65
+ * the backstop.
85
66
  */
86
67
  forget(agentId: string): void;
87
68
  /**
@@ -92,29 +73,23 @@ export declare class EventScalerBackend implements ScalerBackend {
92
73
  adopt(agentId: string, labelSet: string[]): void;
93
74
  /** Mark a provisioned agent active once its instance registers over WS. */
94
75
  markActive(agentId: string): void;
95
- /** Delegate a credential claim to the backend's claim store. */
96
76
  claim(code: string): Promise<import("./claim-store.js").ClaimedCredentials>;
97
77
  /**
98
- * Emits nothing. An event provision is a customer cloud instance whose
99
- * lifetime spans the cluster, not this process: the coordinator holding the
100
- * agent emits its teardown from the WS-close path, and the leader-gated
101
- * reaper is the backstop for one that reaches nobody. This map also carries
102
- * provisions a peer has already adopted — the spawning coordinator is never
103
- * told — so emitting here would make a routine restart tear down a peer's
104
- * running agents.
78
+ * Emits nothing. A provision's lifetime spans the cluster, not this process:
79
+ * the coordinator holding the agent emits teardown on WS close, and the
80
+ * leader-gated reaper is the backstop. The map may hold provisions a peer
81
+ * adopted, so emitting here would make a routine restart tear down a peer's
82
+ * agents.
105
83
  *
106
- * The map is deliberately left intact rather than cleared: a WS close landing
107
- * during the remaining shutdown steps then still emits its own teardown.
84
+ * The map is left intact so a WS close during the remaining shutdown steps
85
+ * still emits its own teardown.
108
86
  */
109
87
  shutdownAll(): Promise<void>;
110
88
  /**
111
- * Apply the new config. The backend reads `roles`, `agentTokenTtlSeconds`
112
- * and `provisioningTargets` off its entry at every spawn (and
113
- * `mandatoryLabels` only when a spawn reaches it without a context), so the
114
- * entry is replaced here — otherwise a reload that retargets the
115
- * provisioning workflow, or changes the scaler's roles, would keep emitting
116
- * scale-up events to the old workflow refs and minting agent labels from the
117
- * old roles, while the manager's own routing gate used the new ones.
89
+ * Replace the entry: each spawn reads `roles`, `agentTokenTtlSeconds`,
90
+ * `provisioningTargets` (and, without a context, `mandatoryLabels`) from it.
91
+ * Otherwise a reload would keep emitting to the old workflow refs and minting
92
+ * labels from the old roles while the manager's routing gate uses the new ones.
118
93
  */
119
94
  reload(labelSets: LabelSetConfig[], opts?: {
120
95
  maxAgents?: number;
@@ -3,19 +3,16 @@ import type { ReapCandidate } from './scaler-state-store.js';
3
3
  /**
4
4
  * How long a provision outcome is kept once its spawn row is gone.
5
5
  *
6
- * Deliberately a constant rather than a `cluster_settings` knob: unlike the
7
- * claim retention beside it, there is no operational decision here. The only
8
- * reader is the stale-spawn prune, and the interval the row must survive is
9
- * derived from windows the reaper already resolves — so a knob would be surface
10
- * with nothing behind it. The purge floors this against twice the spawn
11
- * deadline, so raising `KICI_SCALER_SPAWN_TIMEOUT_MS` for a slow cloud widens
12
- * the retention with it.
6
+ * A constant, not a `cluster_settings` knob: unlike the claim retention, it
7
+ * carries no operational decision. Its only reader is the stale-spawn prune,
8
+ * and the interval the row must survive derives from windows the reaper already
9
+ * resolves. The purge floors it at twice the spawn deadline, so raising
10
+ * `KICI_SCALER_SPAWN_TIMEOUT_MS` for a slow cloud widens the retention with it.
13
11
  */
14
12
  export declare const PROVISION_OUTCOME_RETENTION_MS = 86400000;
15
13
  /**
16
- * The live values one sweep runs against. Read together at the top of each tick
17
- * so a sweep is internally consistent even if an operator changes a knob
18
- * halfway through.
14
+ * The live values one sweep runs against, read together at the top of each tick
15
+ * so a knob changed mid-sweep cannot make the sweep inconsistent.
19
16
  */
20
17
  export interface ReaperWindows {
21
18
  /** How often the leader sweeps. A change reschedules the timer after this tick. */
@@ -39,21 +36,17 @@ export interface ReaperWindows {
39
36
  /**
40
37
  * The flap grace the reaper actually runs on.
41
38
  *
42
- * `reroute_flap_grace_ms` is shared with the rerouted-job guard, and the two
43
- * consumers do not carry the same risk: the reroute guard force-fails a run it
44
- * could have waited for, while this one deletes a customer's running instance.
45
- * An operator lowering the knob for reroute reasons must not silently collapse
46
- * that protection to two consecutive sweeps.
39
+ * `reroute_flap_grace_ms` is shared with the rerouted-job guard, which only
40
+ * force-fails a run it could have waited for; this consumer deletes a
41
+ * customer's running instance. Lowering the knob for reroute reasons must not
42
+ * silently collapse that protection to two consecutive sweeps.
47
43
  *
48
- * The floor is two peer-stale-timeout windows — the very derivation the knob's
49
- * own default (`DEFAULT_REROUTE_FLAP_GRACE_MS`) comes from, applied as a floor
50
- * rather than a default. It has to cover the worst honest gap between an agent
51
- * being alive and being visible here: an agent reconnect backing off to its cap
52
- * (60s), plus the peer heartbeat interval (30s) during which a freshly
53
- * reconnected peer advertises no agents at all. Two stale windows (120s at the
54
- * defaults) covers that 90s; one (60s) would not.
55
- *
56
- * A raised knob is honoured as-is: the floor only ever raises.
44
+ * The floor is two peer-stale-timeout windows, the derivation of the knob's own
45
+ * default (`DEFAULT_REROUTE_FLAP_GRACE_MS`) applied as a floor. It covers the
46
+ * worst honest gap between an agent being alive and visible here: a reconnect
47
+ * backing off to its cap (60s) plus the peer heartbeat interval (30s) in which a
48
+ * freshly reconnected peer advertises no agents. Two windows (120s at the
49
+ * defaults) cover that 90s; one (60s) would not. The floor only ever raises.
57
50
  */
58
51
  export declare function reaperFlapGraceMs(flapGraceMs: number, peerStaleTimeoutMs: number): number;
59
52
  /** The slice of the peer registry the cluster-view guard reads. */
@@ -67,28 +60,25 @@ export interface ReaperPeerView {
67
60
  * The reaper's `canReap` predicate, over static config plus the live peer
68
61
  * registry.
69
62
  *
70
- * Extracted and exported so the wiring itself is testable. The bug this closes
71
- * lived in exactly this expression — `clusterViewSufficient` was unit-tested
72
- * throughout, while the call site that fed it the wrong count was not, so the
73
- * guard read permissive on a Platform-mode HA pair through two review rounds.
74
- * A component whose false positive deletes a customer's running instances
75
- * cannot have an untested load-bearing line.
63
+ * Exported so the wiring itself is tested, not only `clusterViewSufficient`: a
64
+ * call site feeding it the wrong count reads permissive on a Platform-mode HA
65
+ * pair, and a component whose false positive deletes a customer's running
66
+ * instances cannot have an untested load-bearing line.
76
67
  *
77
- * The peer count is the max of the two sources because neither alone covers
78
- * both modes: `KICI_CLUSTER_PEERS` is set only in independent mode, while a
79
- * Platform-mode cluster learns its peers from the matchmaker and leaves that
80
- * array empty. `getCoordinatorPeers()` filters on role, not on connectivity, so
81
- * a peer lost to a partition stays counted and the guard stays armed.
68
+ * The peer count is the max of two sources because neither covers both modes:
69
+ * `KICI_CLUSTER_PEERS` is set only in independent mode, while a Platform-mode
70
+ * cluster learns its peers from the matchmaker and leaves that array empty.
71
+ * `getCoordinatorPeers()` filters on role, not connectivity, so a peer lost to
72
+ * a partition stays counted and the guard stays armed.
82
73
  */
83
74
  export declare function canReapForCluster(configuredPeerCount: number, peers: ReaperPeerView): boolean;
84
75
  /**
85
76
  * Whether an adopting coordinator should still be treated as live.
86
77
  *
87
- * Mirrors `shouldDeferReroutedJob`, and for the same reason: `PeerRegistry`
88
- * flips `connected` the instant a peer WS closes, with no grace of its own, so
89
- * sampling it alone cannot tell a link blip between two healthy processes from
90
- * a dead coordinator — while the agent is still attached to that peer running a
91
- * customer job. A peer we have never heard of is genuinely gone.
78
+ * Mirrors `shouldDeferReroutedJob`: `PeerRegistry` flips `connected` the
79
+ * instant a peer WS closes, with no grace, so sampling it alone cannot tell a
80
+ * link blip between two healthy processes (whose agent still runs a customer
81
+ * job) from a dead coordinator. A peer never heard of is genuinely gone.
92
82
  */
93
83
  export declare function adopterIsLive(peer: {
94
84
  connected: boolean;
@@ -106,13 +96,11 @@ export declare function adopterIsLive(peer: {
106
96
  * backstop; not standing down costs the customer their fleet.
107
97
  *
108
98
  * `knownCoordinatorPeerCount` must count peers this coordinator has *ever*
109
- * handshaken with, not the ones named in static config. `KICI_CLUSTER_PEERS` is
110
- * set only in multi-orchestrator independent mode: the documented HA-pair recipe
111
- * runs Platform mode and joins by token, so peers arrive through the Platform
112
- * matchmaker and the static array stays empty. Keying on it left the guard inert
113
- * on precisely the topology it exists to protect. A known peer survives a
114
- * partition because `evictStalePeers` only marks it disconnected, so the guard
115
- * stays armed for as long as the partition lasts.
99
+ * handshaken with, not the ones in static config: `KICI_CLUSTER_PEERS` is set
100
+ * only in independent mode, and the documented HA-pair recipe runs Platform mode
101
+ * with peers from the matchmaker, so keying on it leaves the guard inert on the
102
+ * topology it exists to protect. `evictStalePeers` only marks a known peer
103
+ * disconnected, so the guard stays armed for the whole partition.
116
104
  *
117
105
  * A coordinator that has never met a peer is a single-coordinator deployment,
118
106
  * not a partitioned one, so it is never blocked.
@@ -123,21 +111,17 @@ export interface EventProvisionReaperOptions {
123
111
  listCandidates: (spawnCutoff: Date) => Promise<ReapCandidate[]>;
124
112
  /**
125
113
  * Whether an instance id is still a live cluster member (self counts as live).
126
- * `flapGraceMs` is passed in so the implementation can treat a peer that
127
- * disconnected moments ago as live — `peer.connected` alone flips on WS close
128
- * with no grace at all.
114
+ * `flapGraceMs` lets a peer that disconnected moments ago count as live:
115
+ * `peer.connected` flips on WS close with no grace.
129
116
  */
130
117
  isPeerLive: (instanceId: string, flapGraceMs: number) => boolean;
131
118
  /** Whether an agent id is registered anywhere in the cluster we can see. */
132
119
  isAgentRegistered: (agentId: string) => boolean;
133
120
  /**
134
- * Whether this coordinator can see enough of the cluster to act on its
135
- * behalf. False on a node that *knows* coordinator peers but is connected to
136
- * none of them, which is exactly the shape a network partition produces.
137
- *
138
- * "Knows" spans both modes: peers named in static config, plus peers this
139
- * instance has handshaken with. Keying on static config alone is what left
140
- * this guard inert on a Platform-mode HA pair, which configures none.
121
+ * Whether this coordinator sees enough of the cluster to act for it: false on
122
+ * a node that *knows* coordinator peers (static config plus every peer it
123
+ * handshook with) but is connected to none, the shape a partition produces.
124
+ * Static config alone leaves the guard inert on a Platform-mode HA pair.
141
125
  */
142
126
  canReap: () => boolean;
143
127
  /** Emit the teardown and drop the row. */
@@ -146,21 +130,19 @@ export interface EventProvisionReaperOptions {
146
130
  purgeExpiredClaims: (cutoff: Date) => Promise<number>;
147
131
  /**
148
132
  * Delete provision outcomes older than the cutoff whose spawn row is gone;
149
- * returns rows deleted. Runs on the same leader-gated sweep as the claim
150
- * purge, which is the orchestrator's one precedent for a timer-driven purge
151
- * of scaler bookkeeping.
133
+ * returns rows deleted. Runs on the leader-gated sweep beside the claim purge,
134
+ * the orchestrator's one precedent for a timer-driven scaler-bookkeeping purge.
152
135
  */
153
136
  purgeProvisionOutcomes: (cutoff: Date) => Promise<number>;
154
137
  /**
155
- * Read the live windows for one sweep. Backed by `cluster_settings`, so an
156
- * operator retunes the reaper on a running cluster; each read falls back to
157
- * the orchestrator's configured default when the column is NULL.
138
+ * The live windows for one sweep, from `cluster_settings` so an operator
139
+ * retunes a running cluster; a NULL column falls back to the configured default.
158
140
  */
159
141
  resolveWindows: () => Promise<ReaperWindows>;
160
142
  /**
161
- * Interval used for the very first schedule, before any knob has been read.
162
- * `onBecomeLeader` is synchronous (it is a Raft callback), so the timer starts
163
- * at the configured default and the first tick reconciles it to the live value.
143
+ * The first schedule's interval. `onBecomeLeader` is a synchronous Raft
144
+ * callback, so the timer starts at the configured default and the first tick
145
+ * reconciles it to the live value.
164
146
  */
165
147
  bootIntervalMs: number;
166
148
  }
@@ -229,25 +211,21 @@ export declare class EventProvisionReaper {
229
211
  /**
230
212
  * agentId → when this reaper first observed the agent registered nowhere.
231
213
  *
232
- * This is the debounce that makes "unseen" mean sustained absence rather than
233
- * one unlucky sample. It is leader-local observation, deliberately not a
234
- * database column: `adopted_at` is refreshed by a coordinator re-adopting its
235
- * own agent, so a restart loop on the adopter would keep resetting the clock
236
- * on its own stranded provision.
214
+ * The debounce that makes "unseen" mean sustained absence, not one unlucky
215
+ * sample. Leader-local, deliberately not a database column: a coordinator
216
+ * re-adopting its own agent refreshes `adopted_at`, so a restart loop on the
217
+ * adopter would keep resetting the clock on its own stranded provision.
237
218
  */
238
219
  private readonly strandedSince;
239
220
  /**
240
221
  * How many entries of `strandedSince` the last sweep found absent for at
241
222
  * least the flap grace.
242
223
  *
243
- * The gauge publishes this rather than `strandedSince.size`, because the two
244
- * answer different questions. `size` counts every agent currently observed
245
- * absent, and an agent transits that set on every ordinary reconnect — a 30s
246
- * peer heartbeat against a 60s sweep, and `PeerRegistry` emptying a peer's
247
- * agent list on any disconnect, mean one flap enrols every peer-adopted agent
248
- * at once. So `size` is routinely non-zero on a healthy cluster, while
249
- * `verdict()` refuses to act on anything below the flap grace. Publishing the
250
- * past-grace count makes the gauge measure the same thing the reaper does.
224
+ * The gauge publishes this, not `strandedSince.size`: an agent transits that
225
+ * set on every ordinary reconnect (a 30s peer heartbeat against a 60s sweep,
226
+ * and `PeerRegistry` empties a peer's agent list on any disconnect, so one
227
+ * flap enrols every peer-adopted agent), so `size` is routinely non-zero on a
228
+ * healthy cluster. The past-grace count measures what `verdict()` acts on.
251
229
  */
252
230
  private unseenPastGrace;
253
231
  /**
@@ -306,11 +284,10 @@ export declare class EventProvisionReaper {
306
284
  /**
307
285
  * Adopt a changed sweep interval by rebuilding the timer.
308
286
  *
309
- * Re-read every sweep rather than only at a leadership transition: a knob an
310
- * operator can set but that is silently ignored until the next election is
311
- * worse than no knob at all. A value that is not a usable interval is ignored
312
- * — a zero or negative `setInterval` period would spin the sweep as fast as
313
- * the event loop allows.
287
+ * Re-read every sweep, not only at a leadership transition: a knob silently
288
+ * ignored until the next election is worse than none. An unusable value is
289
+ * ignored, since a zero or negative `setInterval` period spins the sweep as
290
+ * fast as the event loop allows.
314
291
  */
315
292
  private reconcileInterval;
316
293
  /** Replace the timer with one running at `intervalMs`. */