@kici-dev/orchestrator 0.0.0 → 0.1.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.
Files changed (342) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +1 -6
  3. package/dist/__test-helpers__/mock-db.d.ts +103 -0
  4. package/dist/__test-helpers__/mock-ws.d.ts +13 -0
  5. package/dist/agent/dispatcher.d.ts +231 -0
  6. package/dist/agent/ownership-tracker.d.ts +46 -0
  7. package/dist/agent/registry.d.ts +255 -0
  8. package/dist/agent/token-store.d.ts +96 -0
  9. package/dist/app.d.ts +234 -0
  10. package/dist/audit/access-log.d.ts +92 -0
  11. package/dist/audit/sampling-rate-limiter.d.ts +41 -0
  12. package/dist/cache/build-coordinator.d.ts +42 -0
  13. package/dist/cache/dep-cache.d.ts +51 -0
  14. package/dist/cache/index.d.ts +16 -0
  15. package/dist/cache/pending-builds.d.ts +14 -0
  16. package/dist/cache/pending-dynamics.d.ts +15 -0
  17. package/dist/cache/pending-inits.d.ts +19 -0
  18. package/dist/cache/pending-tracker.d.ts +65 -0
  19. package/dist/cache/source-cache.d.ts +30 -0
  20. package/dist/cli/api-client.d.ts +411 -0
  21. package/dist/cli/commands/access-log.d.ts +30 -0
  22. package/dist/cli/commands/agent-service/index.d.ts +15 -0
  23. package/dist/cli/commands/agent-service/install.d.ts +9 -0
  24. package/dist/cli/commands/agent-service/logs.d.ts +9 -0
  25. package/dist/cli/commands/agent-service/restart.d.ts +8 -0
  26. package/dist/cli/commands/agent-service/start.d.ts +8 -0
  27. package/dist/cli/commands/agent-service/status.d.ts +10 -0
  28. package/dist/cli/commands/agent-service/stop.d.ts +8 -0
  29. package/dist/cli/commands/agent-service/uninstall.d.ts +9 -0
  30. package/dist/cli/commands/agent-service/upgrade.d.ts +11 -0
  31. package/dist/cli/commands/agent.d.ts +10 -0
  32. package/dist/cli/commands/api-key.d.ts +12 -0
  33. package/dist/cli/commands/audit.d.ts +9 -0
  34. package/dist/cli/commands/backend.d.ts +17 -0
  35. package/dist/cli/commands/cold-store-impl.d.ts +101 -0
  36. package/dist/cli/commands/cold-store.d.ts +30 -0
  37. package/dist/cli/commands/config.d.ts +16 -0
  38. package/dist/cli/commands/db.d.ts +19 -0
  39. package/dist/cli/commands/debug-bundle.d.ts +16 -0
  40. package/dist/cli/commands/diagnose.d.ts +15 -0
  41. package/dist/cli/commands/environment.d.ts +24 -0
  42. package/dist/cli/commands/event-dlq.d.ts +19 -0
  43. package/dist/cli/commands/event-log.d.ts +27 -0
  44. package/dist/cli/commands/event.d.ts +4 -0
  45. package/dist/cli/commands/execution.d.ts +17 -0
  46. package/dist/cli/commands/inspect-bundle.d.ts +16 -0
  47. package/dist/cli/commands/maintenance.d.ts +4 -0
  48. package/dist/cli/commands/orchestrator-service/index.d.ts +12 -0
  49. package/dist/cli/commands/orchestrator-service/install.d.ts +10 -0
  50. package/dist/cli/commands/orchestrator-service/logs.d.ts +10 -0
  51. package/dist/cli/commands/orchestrator-service/restart.d.ts +8 -0
  52. package/dist/cli/commands/orchestrator-service/start.d.ts +8 -0
  53. package/dist/cli/commands/orchestrator-service/status.d.ts +10 -0
  54. package/dist/cli/commands/orchestrator-service/stop.d.ts +8 -0
  55. package/dist/cli/commands/orchestrator-service/uninstall.d.ts +9 -0
  56. package/dist/cli/commands/orchestrator-service/upgrade.d.ts +12 -0
  57. package/dist/cli/commands/org-settings.d.ts +17 -0
  58. package/dist/cli/commands/peer.d.ts +13 -0
  59. package/dist/cli/commands/queue.d.ts +16 -0
  60. package/dist/cli/commands/registration.d.ts +18 -0
  61. package/dist/cli/commands/rotate.d.ts +9 -0
  62. package/dist/cli/commands/runs.d.ts +34 -0
  63. package/dist/cli/commands/secret.d.ts +12 -0
  64. package/dist/cli/commands/shared/db.d.ts +16 -0
  65. package/dist/cli/commands/shared/versioned-upgrade.d.ts +38 -0
  66. package/dist/cli/commands/source.d.ts +24 -0
  67. package/dist/cli/commands/token.d.ts +10 -0
  68. package/dist/cli/commands/workflow.d.ts +31 -0
  69. package/dist/cli/join.d.ts +14 -0
  70. package/dist/cli/kici-admin.d.ts +13 -0
  71. package/dist/cli/lazy-deps/cache.d.ts +17 -0
  72. package/dist/cli/lazy-deps/downloader.d.ts +33 -0
  73. package/dist/cli/lazy-deps/registry.d.ts +43 -0
  74. package/dist/cli/service/compose.d.ts +25 -0
  75. package/dist/cli/service/index.d.ts +24 -0
  76. package/dist/cli/service/launchd.d.ts +34 -0
  77. package/dist/cli/service/platform-detect.d.ts +59 -0
  78. package/dist/cli/service/systemd.d.ts +41 -0
  79. package/dist/cli/service/types.d.ts +91 -0
  80. package/dist/cli/service/windows.d.ts +20 -0
  81. package/dist/cli/wizard/agent-wizard.d.ts +24 -0
  82. package/dist/cli/wizard/orchestrator-wizard.d.ts +38 -0
  83. package/dist/cli/wizard/prompts.d.ts +23 -0
  84. package/dist/cli.js +11435 -0
  85. package/dist/cluster/cluster-identity.d.ts +59 -0
  86. package/dist/cluster/coordinator.d.ts +204 -0
  87. package/dist/cluster/health-api.d.ts +30 -0
  88. package/dist/cluster/index.d.ts +24 -0
  89. package/dist/cluster/join-client.d.ts +75 -0
  90. package/dist/cluster/join-handler.d.ts +58 -0
  91. package/dist/cluster/join-token.d.ts +94 -0
  92. package/dist/cluster/orphan-recovery.d.ts +67 -0
  93. package/dist/cluster/peer-client.d.ts +190 -0
  94. package/dist/cluster/peer-credentials.d.ts +108 -0
  95. package/dist/cluster/peer-crypto.d.ts +57 -0
  96. package/dist/cluster/peer-handler.d.ts +97 -0
  97. package/dist/cluster/peer-registry.d.ts +186 -0
  98. package/dist/cluster/raft-state.d.ts +36 -0
  99. package/dist/cluster/raft.d.ts +140 -0
  100. package/dist/cold-store/load-access-log-range.d.ts +73 -0
  101. package/dist/cold-store/load-event-log-range.d.ts +62 -0
  102. package/dist/cold-store/load-secret-audit-log-range.d.ts +38 -0
  103. package/dist/cold-store/orchestrator-cold-store.d.ts +58 -0
  104. package/dist/cold-store/tables/access-log.d.ts +80 -0
  105. package/dist/cold-store/tables/event-log.d.ts +70 -0
  106. package/dist/cold-store/tables/execution-jobs.d.ts +63 -0
  107. package/dist/cold-store/tables/execution-runs.d.ts +81 -0
  108. package/dist/cold-store/tables/execution-steps.d.ts +65 -0
  109. package/dist/cold-store/tables/secret-audit-log.d.ts +77 -0
  110. package/dist/concurrency/dispatch-next-queued.d.ts +63 -0
  111. package/dist/concurrency/group-tracker.d.ts +51 -0
  112. package/dist/concurrency/index.d.ts +3 -0
  113. package/dist/concurrency/queue-manager.d.ts +68 -0
  114. package/dist/concurrency/waiters.d.ts +58 -0
  115. package/dist/config/encryption.d.ts +82 -0
  116. package/dist/config/env-overlay.d.ts +45 -0
  117. package/dist/config/index.d.ts +16 -0
  118. package/dist/config/loader.d.ts +26 -0
  119. package/dist/config/reload.d.ts +113 -0
  120. package/dist/config/resolver.d.ts +47 -0
  121. package/dist/config/schema.d.ts +210 -0
  122. package/dist/config/shared-store.d.ts +142 -0
  123. package/dist/config/types.d.ts +218 -0
  124. package/dist/config.d.ts +249 -0
  125. package/dist/cron/cron-scheduler.d.ts +78 -0
  126. package/dist/cron/cron-store.d.ts +38 -0
  127. package/dist/dashboard/handler.d.ts +243 -0
  128. package/dist/db/client.d.ts +13 -0
  129. package/dist/db/migration-provider.d.ts +9 -0
  130. package/dist/db/migrations/001_initial.d.ts +8 -0
  131. package/dist/db/migrations/002_config_versions_key_version.d.ts +16 -0
  132. package/dist/db/migrations/003_access_log.d.ts +26 -0
  133. package/dist/db/migrations/004_rename_bundle_to_source.d.ts +19 -0
  134. package/dist/db/migrations/005_cold_store_chunk_counter.d.ts +19 -0
  135. package/dist/db/migrations/006_runs_jobs_steps_archived_at.d.ts +38 -0
  136. package/dist/db/migrations/007_audit_logs_archived_at.d.ts +42 -0
  137. package/dist/db/migrations/008_event_log_archived_at.d.ts +40 -0
  138. package/dist/db/migrations/009_access_log_trigram.d.ts +15 -0
  139. package/dist/db/migrations/010_cold_store_chunks.d.ts +34 -0
  140. package/dist/db/migrations/011_drop_source_secrets_notify.d.ts +21 -0
  141. package/dist/db/migrations/012_peer_credentials_active_uniq.d.ts +28 -0
  142. package/dist/db/migrations/013_execution_log_bytes.d.ts +21 -0
  143. package/dist/db/migrations/014_kici_events_lease_retry.d.ts +36 -0
  144. package/dist/db/migrations/015_org_settings_customer_scoped.d.ts +30 -0
  145. package/dist/db/migrations/016_org_settings_allow_http_npm.d.ts +15 -0
  146. package/dist/db/migrations/017_org_id_widen.d.ts +4 -0
  147. package/dist/db/migrations/018_org_id_prefix_backfill.d.ts +4 -0
  148. package/dist/db/migrator.d.ts +32 -0
  149. package/dist/db/types.d.ts +1266 -0
  150. package/dist/diagnostics/bundle-reader.d.ts +48 -0
  151. package/dist/diagnostics/bundle-writer.d.ts +57 -0
  152. package/dist/diagnostics/checks/agents.d.ts +10 -0
  153. package/dist/diagnostics/checks/certs.d.ts +9 -0
  154. package/dist/diagnostics/checks/config.d.ts +10 -0
  155. package/dist/diagnostics/checks/db.d.ts +9 -0
  156. package/dist/diagnostics/checks/disk.d.ts +9 -0
  157. package/dist/diagnostics/checks/index.d.ts +17 -0
  158. package/dist/diagnostics/checks/ws.d.ts +9 -0
  159. package/dist/diagnostics/index.d.ts +13 -0
  160. package/dist/diagnostics/runner.d.ts +23 -0
  161. package/dist/diagnostics/types.d.ts +38 -0
  162. package/dist/entry-helpers.d.ts +93 -0
  163. package/dist/environments/binding-store.d.ts +27 -0
  164. package/dist/environments/environment-store.d.ts +74 -0
  165. package/dist/environments/held-runs.d.ts +64 -0
  166. package/dist/environments/index.d.ts +10 -0
  167. package/dist/environments/protection/branch-gate.d.ts +5 -0
  168. package/dist/environments/protection/concurrency-gate.d.ts +7 -0
  169. package/dist/environments/protection/pipeline.d.ts +18 -0
  170. package/dist/environments/protection/reviewer-gate.d.ts +7 -0
  171. package/dist/environments/protection/trust-gate.d.ts +7 -0
  172. package/dist/environments/protection/wait-timer-gate.d.ts +7 -0
  173. package/dist/environments/variable-store.d.ts +39 -0
  174. package/dist/events/circuit-breaker.d.ts +33 -0
  175. package/dist/events/event-emitter.d.ts +55 -0
  176. package/dist/events/event-retry-scanner.d.ts +52 -0
  177. package/dist/events/event-router.d.ts +183 -0
  178. package/dist/events/event-store.d.ts +157 -0
  179. package/dist/events/trust-store.d.ts +54 -0
  180. package/dist/events/types.d.ts +61 -0
  181. package/dist/helpers/ip-extraction.d.ts +29 -0
  182. package/dist/helpers/rate-limiter.d.ts +23 -0
  183. package/dist/index.d.ts +7 -0
  184. package/dist/index.js +772 -0
  185. package/dist/lockfile-cache.d.ts +39 -0
  186. package/dist/metrics/agent-metrics-aggregator.d.ts +116 -0
  187. package/dist/metrics/metrics-reporter.d.ts +40 -0
  188. package/dist/metrics/prometheus.d.ts +261 -0
  189. package/dist/metrics/scheduled-jobs.d.ts +20 -0
  190. package/dist/orchestrator-core.d.ts +193 -0
  191. package/dist/pipeline/dispatch-matched-workflow.d.ts +102 -0
  192. package/dist/pipeline/inline-eval.d.ts +28 -0
  193. package/dist/pipeline/install-secrets-resolver.d.ts +73 -0
  194. package/dist/pipeline/manual-schedule.d.ts +21 -0
  195. package/dist/pipeline/needs-scheduler.d.ts +85 -0
  196. package/dist/pipeline/process-webhook.d.ts +38 -0
  197. package/dist/pipeline/processor.d.ts +326 -0
  198. package/dist/pipeline/rerun.d.ts +79 -0
  199. package/dist/pipeline/test-pipeline.d.ts +110 -0
  200. package/dist/provider-registry.d.ts +122 -0
  201. package/dist/providers/generic/index.d.ts +23 -0
  202. package/dist/providers/generic/normalizer.d.ts +112 -0
  203. package/dist/providers/generic/verification.d.ts +47 -0
  204. package/dist/providers/github/auth.d.ts +60 -0
  205. package/dist/providers/github/changed-files.d.ts +51 -0
  206. package/dist/providers/github/check-status-poster.d.ts +35 -0
  207. package/dist/providers/github/contributor-resolver.d.ts +30 -0
  208. package/dist/providers/github/index.d.ts +20 -0
  209. package/dist/providers/github/lock-file.d.ts +32 -0
  210. package/dist/providers/github/normalizer.d.ts +103 -0
  211. package/dist/providers/github/repo-url.d.ts +35 -0
  212. package/dist/providers/internal/index.d.ts +32 -0
  213. package/dist/providers/internal/lock-file-fetcher.d.ts +34 -0
  214. package/dist/providers/internal/normalizer.d.ts +89 -0
  215. package/dist/providers/internal/repo-url-builder.d.ts +42 -0
  216. package/dist/providers/universal-git/changed-files.d.ts +42 -0
  217. package/dist/providers/universal-git/clone-token.d.ts +83 -0
  218. package/dist/providers/universal-git/config.d.ts +192 -0
  219. package/dist/providers/universal-git/index.d.ts +55 -0
  220. package/dist/providers/universal-git/lock-file.d.ts +71 -0
  221. package/dist/providers/universal-git/normalizer.d.ts +90 -0
  222. package/dist/providers/universal-git/repo-url.d.ts +50 -0
  223. package/dist/providers/universal-git/ssh-auth.d.ts +94 -0
  224. package/dist/queue/bootstrap.d.ts +50 -0
  225. package/dist/queue/cleanup.d.ts +41 -0
  226. package/dist/queue/depth-refresher.d.ts +65 -0
  227. package/dist/queue/job-queue.d.ts +343 -0
  228. package/dist/queue/scheduled-job.d.ts +91 -0
  229. package/dist/registration/extractor.d.ts +44 -0
  230. package/dist/registration/registration-index.d.ts +162 -0
  231. package/dist/registration/registration-store.d.ts +111 -0
  232. package/dist/reporting/check-run-summary.d.ts +102 -0
  233. package/dist/reporting/commit-status.d.ts +382 -0
  234. package/dist/reporting/execution-tracker.d.ts +538 -0
  235. package/dist/reporting/fs-log-storage.d.ts +41 -0
  236. package/dist/reporting/log-pull-handler.d.ts +35 -0
  237. package/dist/reporting/log-storage.d.ts +70 -0
  238. package/dist/reporting/log-writer.d.ts +45 -0
  239. package/dist/reporting/s3-log-storage.d.ts +42 -0
  240. package/dist/reporting/step-log-buffer.d.ts +57 -0
  241. package/dist/routes/admin-access-log.d.ts +34 -0
  242. package/dist/routes/admin-backends.d.ts +28 -0
  243. package/dist/routes/admin-config.d.ts +57 -0
  244. package/dist/routes/admin-db.d.ts +20 -0
  245. package/dist/routes/admin-environments.d.ts +42 -0
  246. package/dist/routes/admin-errors.d.ts +4 -0
  247. package/dist/routes/admin-event-dlq.d.ts +39 -0
  248. package/dist/routes/admin-event-log.d.ts +42 -0
  249. package/dist/routes/admin-events.d.ts +46 -0
  250. package/dist/routes/admin-maintenance.d.ts +22 -0
  251. package/dist/routes/admin-org-settings.d.ts +29 -0
  252. package/dist/routes/admin-queue-execution.d.ts +27 -0
  253. package/dist/routes/admin-registrations.d.ts +37 -0
  254. package/dist/routes/admin-runs.d.ts +57 -0
  255. package/dist/routes/admin-scheduled-jobs.d.ts +36 -0
  256. package/dist/routes/admin-sources.d.ts +18 -0
  257. package/dist/routes/admin.d.ts +103 -0
  258. package/dist/routes/capabilities.d.ts +24 -0
  259. package/dist/routes/diagnostics.d.ts +16 -0
  260. package/dist/routes/health.d.ts +20 -0
  261. package/dist/routes/test-trigger.d.ts +41 -0
  262. package/dist/routes/uploads.d.ts +38 -0
  263. package/dist/routes/webhooks.d.ts +36 -0
  264. package/dist/scaler/bare-metal-backend.d.ts +107 -0
  265. package/dist/scaler/config.d.ts +303 -0
  266. package/dist/scaler/container-backend.d.ts +125 -0
  267. package/dist/scaler/file-tail.d.ts +23 -0
  268. package/dist/scaler/firecracker-api.d.ts +100 -0
  269. package/dist/scaler/firecracker-backend.d.ts +263 -0
  270. package/dist/scaler/index.d.ts +24 -0
  271. package/dist/scaler/ip-allocator.d.ts +177 -0
  272. package/dist/scaler/label-matcher.d.ts +73 -0
  273. package/dist/scaler/log-forwarder.d.ts +54 -0
  274. package/dist/scaler/machine-ledger.d.ts +160 -0
  275. package/dist/scaler/manager.d.ts +338 -0
  276. package/dist/scaler/nftables.d.ts +85 -0
  277. package/dist/scaler/types.d.ts +388 -0
  278. package/dist/scaler/warm-pool.d.ts +81 -0
  279. package/dist/secrets/audit-logger.d.ts +65 -0
  280. package/dist/secrets/backend-health.d.ts +60 -0
  281. package/dist/secrets/backend-registry.d.ts +68 -0
  282. package/dist/secrets/backend-sync.d.ts +40 -0
  283. package/dist/secrets/cleanup.d.ts +40 -0
  284. package/dist/secrets/config.d.ts +51 -0
  285. package/dist/secrets/crypto.d.ts +49 -0
  286. package/dist/secrets/ephemeral-keys.d.ts +49 -0
  287. package/dist/secrets/index.d.ts +17 -0
  288. package/dist/secrets/pg-secret-store.d.ts +105 -0
  289. package/dist/secrets/rbac.d.ts +47 -0
  290. package/dist/secrets/secret-output-store.d.ts +46 -0
  291. package/dist/secrets/secret-resolver.d.ts +137 -0
  292. package/dist/secrets/source-credentials.d.ts +61 -0
  293. package/dist/secrets/token-manager.d.ts +63 -0
  294. package/dist/secrets/vault-secret-store.d.ts +85 -0
  295. package/dist/security/comment-handler.d.ts +67 -0
  296. package/dist/security/contributor-cache.d.ts +75 -0
  297. package/dist/security/global-workflow-policy.d.ts +72 -0
  298. package/dist/security/lock-source.d.ts +34 -0
  299. package/dist/security/trust-resolver.d.ts +108 -0
  300. package/dist/security/workflow-diff.d.ts +26 -0
  301. package/dist/server.d.ts +17 -0
  302. package/dist/server.js +48055 -0
  303. package/dist/sources/index.d.ts +10 -0
  304. package/dist/sources/source-manager.d.ts +63 -0
  305. package/dist/sources/source-store.d.ts +79 -0
  306. package/dist/sources/source-validator.d.ts +16 -0
  307. package/dist/stale-detector/stale-run-detector.d.ts +109 -0
  308. package/dist/standalone.d.ts +20 -0
  309. package/dist/standalone.js +41546 -0
  310. package/dist/storage/blob-routes.d.ts +20 -0
  311. package/dist/storage/filesystem.d.ts +60 -0
  312. package/dist/storage/index.d.ts +20 -0
  313. package/dist/storage/s3.d.ts +68 -0
  314. package/dist/storage/sign-url.d.ts +45 -0
  315. package/dist/storage/types.d.ts +98 -0
  316. package/dist/webhook/dedup.d.ts +44 -0
  317. package/dist/webhook/event-log.d.ts +83 -0
  318. package/dist/webhook/generic-sources.d.ts +169 -0
  319. package/dist/webhook/handler.d.ts +23 -0
  320. package/dist/webhook/relay-buffer.d.ts +96 -0
  321. package/dist/webhook/verify-inbound.d.ts +78 -0
  322. package/dist/worker/in-memory-execution-tracker.d.ts +94 -0
  323. package/dist/worker/in-memory-job-queue.d.ts +74 -0
  324. package/dist/worker/static-agent-token-store.d.ts +58 -0
  325. package/dist/worker/worker-status.d.ts +36 -0
  326. package/dist/worker-core.d.ts +74 -0
  327. package/dist/ws/agent-api-registry.d.ts +49 -0
  328. package/dist/ws/agent-handler.d.ts +176 -0
  329. package/dist/ws/agent-heartbeat.d.ts +45 -0
  330. package/dist/ws/dashboard-backends-handler.d.ts +51 -0
  331. package/dist/ws/dashboard-diagnostics-handler.d.ts +56 -0
  332. package/dist/ws/dashboard-env-handler.d.ts +107 -0
  333. package/dist/ws/dashboard-global-workflows-handler.d.ts +72 -0
  334. package/dist/ws/dashboard-registrations-handler.d.ts +84 -0
  335. package/dist/ws/event-buffer.d.ts +16 -0
  336. package/dist/ws/observer-handler.d.ts +42 -0
  337. package/dist/ws/observer-registry.d.ts +88 -0
  338. package/dist/ws/platform-client.d.ts +270 -0
  339. package/dist/ws/server-options.d.ts +15 -0
  340. package/package.json +87 -6
  341. package/sbom.spdx.json +14370 -0
  342. package/index.js +0 -3
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Config resolution chain.
3
+ *
4
+ * Two-phase design:
5
+ * - Phase 1: resolveLocalConfig() -- env + YAML only, returns database URL,
6
+ * instance ID, server port (needed before DB is available)
7
+ * - Phase 2: resolveFullConfig() -- merges defaults -> DB -> YAML -> env,
8
+ * validates with appConfigSchema, returns typed AppConfig
9
+ *
10
+ * Precedence: env var > local YAML > shared DB > defaults
11
+ */
12
+ import type { AppConfig, SharedConfig } from './types.js';
13
+ /**
14
+ * Phase 1 result: minimal config resolved from local sources only.
15
+ */
16
+ export interface LocalPhaseResult {
17
+ /** The raw local config (from YAML + env overlay) */
18
+ local: Record<string, unknown>;
19
+ /** Resolved database URL */
20
+ databaseUrl: string;
21
+ /** Resolved instance ID */
22
+ instanceId: string;
23
+ /** Resolved server port */
24
+ port: number;
25
+ /** Resolved instance mode */
26
+ mode: 'platform' | 'hybrid' | 'independent';
27
+ }
28
+ /**
29
+ * Phase 1: Resolve local-only config.
30
+ * Loads YAML, applies env overrides for local fields.
31
+ * Returns database URL and instance ID (needed before DB init).
32
+ */
33
+ export declare function resolveLocalConfig(configPath?: string): Promise<LocalPhaseResult>;
34
+ /**
35
+ * Phase 2: Resolve full config by merging all 4 layers.
36
+ * Precedence: env var > local YAML > shared DB > defaults.
37
+ *
38
+ * @param localConfig - Raw local config object (from Phase 1 or YAML parse)
39
+ * @param dbConfig - Shared config from DB (null if no DB config exists)
40
+ * @param env - Environment variables (defaults to process.env)
41
+ */
42
+ export declare function resolveFullConfig(localConfig: Record<string, unknown>, dbConfig: SharedConfig | null, env?: NodeJS.ProcessEnv): AppConfig;
43
+ /**
44
+ * Get default values for shared config fields.
45
+ */
46
+ export declare function getDefaults(): Partial<SharedConfig>;
47
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Zod schemas for orchestrator configuration validation.
3
+ *
4
+ * Provides separate schemas for:
5
+ * - localConfigSchema: validates YAML structure for per-orchestrator settings
6
+ * - sharedConfigSchema: validates shared config stored in PostgreSQL
7
+ * - appConfigSchema: validates the final merged config with cross-field validation
8
+ *
9
+ * Provider configuration (GitHub Apps, etc.) is managed via the `sources` table
10
+ * and PgSecretStore, not through config schemas.
11
+ */
12
+ import { z } from 'zod';
13
+ /**
14
+ * Schema for the local YAML configuration file.
15
+ * All fields optional except database.url.
16
+ */
17
+ export declare const localConfigSchema: z.ZodObject<{
18
+ database: z.ZodObject<{
19
+ url: z.ZodString;
20
+ }, z.core.$strip>;
21
+ instance: z.ZodOptional<z.ZodObject<{
22
+ id: z.ZodOptional<z.ZodString>;
23
+ mode: z.ZodOptional<z.ZodEnum<{
24
+ platform: "platform";
25
+ hybrid: "hybrid";
26
+ independent: "independent";
27
+ }>>;
28
+ }, z.core.$strip>>;
29
+ server: z.ZodOptional<z.ZodObject<{
30
+ port: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
31
+ basePath: z.ZodOptional<z.ZodString>;
32
+ logLevel: z.ZodOptional<z.ZodEnum<{
33
+ error: "error";
34
+ debug: "debug";
35
+ info: "info";
36
+ warn: "warn";
37
+ }>>;
38
+ tlsCertPath: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>>;
40
+ scaler: z.ZodOptional<z.ZodObject<{
41
+ configPath: z.ZodOptional<z.ZodString>;
42
+ configDir: z.ZodOptional<z.ZodString>;
43
+ }, z.core.$strip>>;
44
+ }, z.core.$strip>;
45
+ export type LocalConfigSchemaType = z.infer<typeof localConfigSchema>;
46
+ /**
47
+ * Schema for the shared configuration stored in PostgreSQL.
48
+ * All top-level fields are optional (DB may have partial config).
49
+ */
50
+ export declare const sharedConfigSchema: z.ZodObject<{
51
+ platform: z.ZodOptional<z.ZodObject<{
52
+ url: z.ZodOptional<z.ZodString>;
53
+ token: z.ZodOptional<z.ZodString>;
54
+ }, z.core.$strip>>;
55
+ storage: z.ZodOptional<z.ZodObject<{
56
+ type: z.ZodOptional<z.ZodEnum<{
57
+ s3: "s3";
58
+ }>>;
59
+ bucket: z.ZodOptional<z.ZodString>;
60
+ prefix: z.ZodOptional<z.ZodString>;
61
+ region: z.ZodOptional<z.ZodString>;
62
+ endpoint: z.ZodOptional<z.ZodString>;
63
+ externalEndpoint: z.ZodOptional<z.ZodString>;
64
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
65
+ logBucket: z.ZodOptional<z.ZodString>;
66
+ }, z.core.$strip>>;
67
+ agentAuth: z.ZodOptional<z.ZodEnum<{
68
+ token: "token";
69
+ none: "none";
70
+ }>>;
71
+ agentTokenTtlMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
72
+ queue: z.ZodOptional<z.ZodObject<{
73
+ maxDepth: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
74
+ timeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
75
+ backpressureThreshold: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
76
+ }, z.core.$strip>>;
77
+ lockfileCache: z.ZodOptional<z.ZodObject<{
78
+ max: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
79
+ ttlMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
80
+ }, z.core.$strip>>;
81
+ staleDetector: z.ZodOptional<z.ZodObject<{
82
+ scanIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
83
+ thresholdMultiplier: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
84
+ heartbeatIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
85
+ }, z.core.$strip>>;
86
+ secrets: z.ZodOptional<z.ZodObject<{
87
+ key: z.ZodOptional<z.ZodString>;
88
+ keyFile: z.ZodOptional<z.ZodString>;
89
+ bootstrapAdminToken: z.ZodOptional<z.ZodString>;
90
+ }, z.core.$strip>>;
91
+ pgCustomerSecrets: z.ZodDefault<z.ZodBoolean>;
92
+ cluster: z.ZodOptional<z.ZodObject<{
93
+ joinToken: z.ZodOptional<z.ZodString>;
94
+ raftElectionTimeoutMinMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
95
+ raftElectionTimeoutMaxMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
96
+ raftHeartbeatMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
97
+ peerHeartbeatIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
98
+ peerMaxReconnectDelayMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
99
+ role: z.ZodOptional<z.ZodEnum<{
100
+ coordinator: "coordinator";
101
+ worker: "worker";
102
+ }>>;
103
+ coordinatorUrl: z.ZodOptional<z.ZodString>;
104
+ peerStaleTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
105
+ }, z.core.$strip>>;
106
+ webhookPayloadDir: z.ZodOptional<z.ZodString>;
107
+ cacheTtlDays: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
108
+ cacheBuildTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
109
+ cacheMaxTarballBytes: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
110
+ eventRouter: z.ZodOptional<z.ZodObject<{
111
+ maxChainDepth: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
112
+ rateLimitPerWorkflowPerMinute: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
113
+ eventTtlSeconds: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
114
+ cleanupIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
115
+ }, z.core.$strip>>;
116
+ eventLog: z.ZodOptional<z.ZodObject<{
117
+ maxPayloadBytes: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
118
+ }, z.core.$strip>>;
119
+ }, z.core.$strip>;
120
+ export type SharedConfigSchemaType = z.infer<typeof sharedConfigSchema>;
121
+ /**
122
+ * Schema for the final merged application configuration.
123
+ * Includes cross-field validation via superRefine.
124
+ */
125
+ export declare const appConfigSchema: z.ZodObject<{
126
+ instanceId: z.ZodDefault<z.ZodString>;
127
+ mode: z.ZodDefault<z.ZodEnum<{
128
+ platform: "platform";
129
+ hybrid: "hybrid";
130
+ independent: "independent";
131
+ }>>;
132
+ databaseUrl: z.ZodDefault<z.ZodString>;
133
+ port: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
134
+ basePath: z.ZodDefault<z.ZodString>;
135
+ tlsCertPath: z.ZodOptional<z.ZodString>;
136
+ scalerConfigPath: z.ZodOptional<z.ZodString>;
137
+ scalerConfigDir: z.ZodOptional<z.ZodString>;
138
+ platformUrl: z.ZodOptional<z.ZodString>;
139
+ platformToken: z.ZodOptional<z.ZodString>;
140
+ storage: z.ZodOptional<z.ZodObject<{
141
+ type: z.ZodOptional<z.ZodEnum<{
142
+ s3: "s3";
143
+ }>>;
144
+ bucket: z.ZodOptional<z.ZodString>;
145
+ prefix: z.ZodOptional<z.ZodString>;
146
+ region: z.ZodOptional<z.ZodString>;
147
+ endpoint: z.ZodOptional<z.ZodString>;
148
+ externalEndpoint: z.ZodOptional<z.ZodString>;
149
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
150
+ logBucket: z.ZodOptional<z.ZodString>;
151
+ }, z.core.$strip>>;
152
+ agentAuth: z.ZodDefault<z.ZodEnum<{
153
+ token: "token";
154
+ none: "none";
155
+ }>>;
156
+ agentTokenTtlMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
157
+ queueMaxDepth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
158
+ queueTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
159
+ queueBackpressureThreshold: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
160
+ lockfileCacheMax: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
161
+ lockfileCacheTtlMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
162
+ staleDetectorScanIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
163
+ staleDetectorThresholdMultiplier: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
164
+ jobHeartbeatIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
165
+ secretKey: z.ZodOptional<z.ZodString>;
166
+ secretKeyFile: z.ZodOptional<z.ZodString>;
167
+ bootstrapAdminToken: z.ZodOptional<z.ZodString>;
168
+ pgCustomerSecrets: z.ZodDefault<z.ZodBoolean>;
169
+ cluster: z.ZodPrefault<z.ZodObject<{
170
+ instanceId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
171
+ address: z.ZodOptional<z.ZodString>;
172
+ joinToken: z.ZodOptional<z.ZodString>;
173
+ credentialFile: z.ZodDefault<z.ZodString>;
174
+ autoRotateCredentials: z.ZodDefault<z.ZodBoolean>;
175
+ peers: z.ZodDefault<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>>;
176
+ raftElectionTimeoutMinMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
177
+ raftElectionTimeoutMaxMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
178
+ raftHeartbeatMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
179
+ peerHeartbeatIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
180
+ peerMaxReconnectDelayMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
181
+ role: z.ZodDefault<z.ZodEnum<{
182
+ coordinator: "coordinator";
183
+ worker: "worker";
184
+ }>>;
185
+ coordinatorUrl: z.ZodOptional<z.ZodString>;
186
+ peerStaleTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
187
+ }, z.core.$strip>>;
188
+ webhookPayloadDir: z.ZodOptional<z.ZodString>;
189
+ cacheTtlDays: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
190
+ cacheBuildTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
191
+ cacheMaxTarballBytes: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
192
+ eventRouterMaxChainDepth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
193
+ eventRouterRateLimitPerWorkflowPerMinute: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
194
+ eventRouterEventTtlSeconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
195
+ eventRouterCleanupIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
196
+ eventLogMaxPayloadBytes: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
197
+ logLevel: z.ZodDefault<z.ZodEnum<{
198
+ error: "error";
199
+ debug: "debug";
200
+ info: "info";
201
+ warn: "warn";
202
+ }>>;
203
+ nodeEnv: z.ZodDefault<z.ZodEnum<{
204
+ development: "development";
205
+ production: "production";
206
+ test: "test";
207
+ }>>;
208
+ }, z.core.$strip>;
209
+ export type AppConfigSchemaType = z.infer<typeof appConfigSchema>;
210
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Database-backed shared configuration store with versioning.
3
+ *
4
+ * Provides CRUD operations for orchestrator shared configuration stored
5
+ * in the config_versions PostgreSQL table. Each save creates a new immutable
6
+ * version with audit trail. Sensitive fields are encrypted at rest using
7
+ * AES-256-GCM via the master key.
8
+ *
9
+ * Key operations:
10
+ * - getLatest(): retrieve current config (decrypted)
11
+ * - getByVersion(): retrieve a specific version
12
+ * - save(): validate, encrypt sensitive fields, store new version
13
+ * - rollback(): copy a previous version as a new version
14
+ * - listHistory(): version audit trail (metadata only)
15
+ * - getCurrentVersion(): current version number (for cluster heartbeat)
16
+ * - exportRedacted(): config with sensitive fields masked
17
+ */
18
+ import { type Kysely } from 'kysely';
19
+ import type { Database } from '../db/types.js';
20
+ import type { SharedConfig } from './types.js';
21
+ /**
22
+ * Version metadata returned by listHistory().
23
+ */
24
+ export interface ConfigVersionMeta {
25
+ version: number;
26
+ createdAt: Date;
27
+ createdBy: string;
28
+ description: string | null;
29
+ }
30
+ /**
31
+ * Database-backed shared configuration store with versioning, encryption, and audit trail.
32
+ */
33
+ export declare class SharedConfigStore {
34
+ private db;
35
+ private masterKey;
36
+ /** Previous master key, accepted during the rotation grace window. */
37
+ private oldMasterKey;
38
+ /**
39
+ * Active master-key generation. New inserts stamp this value into
40
+ * `config_versions.key_version`; rotation bumps it after re-encrypting
41
+ * every row in a single transaction.
42
+ */
43
+ private keyVersion;
44
+ constructor(db: Kysely<Database>, masterKey: Buffer | null,
45
+ /** Previous master key, accepted during the rotation grace window. */
46
+ oldMasterKey?: Buffer | null, keyVersion?: number);
47
+ /**
48
+ * Construct a `SharedConfigStore` with the active key generation hydrated
49
+ * from the database.
50
+ *
51
+ * Mirrors `PgSecretStore.create`: reads `MAX(key_version)` from
52
+ * `config_versions` so a freshly-restarted orchestrator keeps writing under
53
+ * the same generation as the last row committed before shutdown. Empty
54
+ * tables fall back to generation 1.
55
+ */
56
+ static create(db: Kysely<Database>, masterKey: Buffer | null, oldMasterKey?: Buffer | null): Promise<SharedConfigStore>;
57
+ /**
58
+ * Get the latest config version (decrypt if master key available).
59
+ * Returns null if no config versions exist.
60
+ */
61
+ getLatest(): Promise<{
62
+ config: SharedConfig;
63
+ version: number;
64
+ } | null>;
65
+ /**
66
+ * Get a specific config version by version number.
67
+ * Returns null if the version doesn't exist.
68
+ */
69
+ getByVersion(version: number): Promise<{
70
+ config: SharedConfig;
71
+ version: number;
72
+ } | null>;
73
+ /**
74
+ * Save a new config version.
75
+ * Validates with sharedConfigSchema, encrypts sensitive fields,
76
+ * and stores as a new immutable version.
77
+ *
78
+ * @param config - The config object to save
79
+ * @param createdBy - Who created this version (e.g., "cli:seed", "api:set")
80
+ * @param description - Human-readable change description
81
+ * @returns The new version number
82
+ */
83
+ save(config: Record<string, unknown>, createdBy: string, description?: string): Promise<number>;
84
+ /**
85
+ * List version history (metadata only, no config bodies).
86
+ * Returns versions in reverse chronological order.
87
+ *
88
+ * @param limit - Maximum number of versions to return (default 50)
89
+ */
90
+ listHistory(limit?: number): Promise<ConfigVersionMeta[]>;
91
+ /**
92
+ * Rollback to a specific version.
93
+ * Reads the target version and creates a new version as a copy.
94
+ *
95
+ * @param targetVersion - Version number to rollback to
96
+ * @param createdBy - Who initiated the rollback
97
+ * @returns The new version number
98
+ * @throws Error if target version doesn't exist
99
+ */
100
+ rollback(targetVersion: number, createdBy: string): Promise<number>;
101
+ /**
102
+ * Get the current (latest) version number.
103
+ * Returns 0 if no versions exist.
104
+ * Used by cluster heartbeats to broadcast config version.
105
+ */
106
+ getCurrentVersion(): Promise<number>;
107
+ /**
108
+ * Export the current config with sensitive fields redacted.
109
+ * Returns null if no config versions exist.
110
+ * Used for CLI export and diff operations.
111
+ */
112
+ exportRedacted(): Promise<Record<string, unknown> | null>;
113
+ /**
114
+ * Rotate the master-key generation for every row in `config_versions`.
115
+ *
116
+ * Mirrors `PgSecretStore.rotateKey`: opens a transaction, loads every row,
117
+ * decrypts with the current key (falling back to `oldMasterKey` when set),
118
+ * re-encrypts under the current master key at `max(key_version) + 1`, and
119
+ * updates only `config` + `key_version`. Audit columns (`created_at`,
120
+ * `created_by`, `description`, `version`, `encrypted_paths`) are
121
+ * deliberately untouched so the history trail stays immutable and
122
+ * `rollback()` / `getByVersion()` keep their semantics.
123
+ *
124
+ * Historical rows are re-encrypted too — otherwise rollback to an older
125
+ * version would fail once `KICI_SECRET_KEY_OLD` is removed.
126
+ *
127
+ * Rows with no encrypted fields (`encrypted_paths = []`) still have their
128
+ * `key_version` bumped so a fully-rotated table has a single generation,
129
+ * but they don't contribute to the `reEncrypted` counter.
130
+ *
131
+ * @returns The number of rows whose ciphertext was re-sealed.
132
+ */
133
+ rotateKey(): Promise<{
134
+ reEncrypted: number;
135
+ skipped: number;
136
+ }>;
137
+ /**
138
+ * Convert a DB row to a SharedConfig with decryption.
139
+ */
140
+ private rowToConfig;
141
+ }
142
+ //# sourceMappingURL=shared-store.d.ts.map
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Configuration type system for the orchestrator.
3
+ *
4
+ * Three-layer config model:
5
+ * - LocalConfig: per-orchestrator settings from YAML file
6
+ * - SharedConfig: shared settings stored in PostgreSQL config_versions table
7
+ * - AppConfig: merged result type used throughout the codebase
8
+ */
9
+ /**
10
+ * Per-orchestrator settings loaded from YAML file.
11
+ * These are instance-specific and never shared across orchestrators.
12
+ */
13
+ export interface LocalConfig {
14
+ database: {
15
+ url: string;
16
+ };
17
+ instance?: {
18
+ id?: string;
19
+ mode?: 'platform' | 'hybrid' | 'independent';
20
+ };
21
+ server?: {
22
+ port?: number;
23
+ basePath?: string;
24
+ logLevel?: 'debug' | 'info' | 'warn' | 'error';
25
+ tlsCertPath?: string;
26
+ };
27
+ scaler?: {
28
+ configPath?: string;
29
+ configDir?: string;
30
+ };
31
+ }
32
+ /**
33
+ * Shared configuration stored in PostgreSQL config_versions table.
34
+ * Defined once, shared across all orchestrator instances.
35
+ */
36
+ export interface SharedConfig {
37
+ platform?: {
38
+ url?: string;
39
+ token?: string;
40
+ };
41
+ storage?: {
42
+ type?: 's3';
43
+ bucket?: string;
44
+ prefix?: string;
45
+ region?: string;
46
+ endpoint?: string;
47
+ externalEndpoint?: string;
48
+ forcePathStyle?: boolean;
49
+ logBucket?: string;
50
+ };
51
+ agentAuth?: 'token' | 'none';
52
+ agentTokenTtlMs?: number;
53
+ queue?: {
54
+ maxDepth?: number;
55
+ timeoutMs?: number;
56
+ /**
57
+ * Pending-depth threshold that triggers the operator-facing backpressure
58
+ * warning. `0` disables the warner (metrics still exported).
59
+ */
60
+ backpressureThreshold?: number;
61
+ };
62
+ lockfileCache?: {
63
+ max?: number;
64
+ ttlMs?: number;
65
+ };
66
+ staleDetector?: {
67
+ scanIntervalMs?: number;
68
+ thresholdMultiplier?: number;
69
+ heartbeatIntervalMs?: number;
70
+ };
71
+ secrets?: {
72
+ key?: string;
73
+ keyFile?: string;
74
+ bootstrapAdminToken?: string;
75
+ };
76
+ pgCustomerSecrets?: boolean;
77
+ cluster?: {
78
+ joinToken?: string;
79
+ raftElectionTimeoutMinMs?: number;
80
+ raftElectionTimeoutMaxMs?: number;
81
+ raftHeartbeatMs?: number;
82
+ peerHeartbeatIntervalMs?: number;
83
+ peerMaxReconnectDelayMs?: number;
84
+ };
85
+ webhookPayloadDir?: string;
86
+ cacheTtlDays?: number;
87
+ cacheBuildTimeoutMs?: number;
88
+ cacheMaxTarballBytes?: number;
89
+ eventRouter?: {
90
+ maxChainDepth?: number;
91
+ rateLimitPerWorkflowPerMinute?: number;
92
+ eventTtlSeconds?: number;
93
+ cleanupIntervalMs?: number;
94
+ };
95
+ eventLog?: {
96
+ maxPayloadBytes?: number;
97
+ };
98
+ }
99
+ /**
100
+ * Merged application configuration used throughout the codebase.
101
+ * Combines LocalConfig + SharedConfig with resolved defaults.
102
+ */
103
+ export interface AppConfig {
104
+ /** Unique identifier for this orchestrator instance */
105
+ instanceId: string;
106
+ /** Operating mode */
107
+ mode: 'platform' | 'hybrid' | 'independent';
108
+ /** PostgreSQL connection URL */
109
+ databaseUrl: string;
110
+ /** HTTP server port */
111
+ port: number;
112
+ /** HTTP base path */
113
+ basePath: string;
114
+ /** Path to TLS certificate (PEM) for expiry diagnostic check. Optional. */
115
+ tlsCertPath?: string;
116
+ /** Scaler YAML config file path */
117
+ scalerConfigPath?: string;
118
+ /** Scaler scalers.d/ directory path */
119
+ scalerConfigDir?: string;
120
+ /** Platform relay connection settings */
121
+ platformUrl?: string;
122
+ platformToken?: string;
123
+ /** Object storage settings */
124
+ storage?: {
125
+ type?: 's3';
126
+ bucket?: string;
127
+ prefix?: string;
128
+ region?: string;
129
+ endpoint?: string;
130
+ externalEndpoint?: string;
131
+ forcePathStyle?: boolean;
132
+ logBucket?: string;
133
+ };
134
+ /** Agent authentication mode */
135
+ agentAuth: 'token' | 'none';
136
+ /** Agent token TTL in milliseconds */
137
+ agentTokenTtlMs: number;
138
+ /** Queue settings */
139
+ queueMaxDepth: number;
140
+ queueTimeoutMs: number;
141
+ /**
142
+ * Pending-depth threshold for operator backpressure warnings. When the
143
+ * pending dispatch_queue depth stays at or above this for two consecutive
144
+ * refresher ticks (~10s), a structured `logger.warn` is emitted. `0`
145
+ * disables the warner entirely (metrics still exported). Default: 100.
146
+ */
147
+ queueBackpressureThreshold: number;
148
+ /** Lockfile cache settings */
149
+ lockfileCacheMax: number;
150
+ lockfileCacheTtlMs: number;
151
+ /** Stale detector settings */
152
+ staleDetectorScanIntervalMs: number;
153
+ staleDetectorThresholdMultiplier: number;
154
+ jobHeartbeatIntervalMs: number;
155
+ /** Secrets management */
156
+ secretKey?: string;
157
+ secretKeyFile?: string;
158
+ bootstrapAdminToken?: string;
159
+ /** Allow dashboard users to create PG-stored secrets */
160
+ pgCustomerSecrets: boolean;
161
+ /** Cluster settings */
162
+ cluster: {
163
+ instanceId: string;
164
+ address?: string;
165
+ joinToken?: string;
166
+ credentialFile: string;
167
+ autoRotateCredentials: boolean;
168
+ peers: string[];
169
+ raftElectionTimeoutMinMs: number;
170
+ raftElectionTimeoutMaxMs: number;
171
+ raftHeartbeatMs: number;
172
+ peerHeartbeatIntervalMs: number;
173
+ peerMaxReconnectDelayMs: number;
174
+ /** Cluster role: coordinator (full orchestrator) or worker (delegated execution). */
175
+ role: 'coordinator' | 'worker';
176
+ /** URL of the coordinator to connect to when role=worker. */
177
+ coordinatorUrl?: string;
178
+ /** Stale peer timeout in ms. */
179
+ peerStaleTimeoutMs: number;
180
+ };
181
+ /** Webhook payload storage directory */
182
+ webhookPayloadDir?: string;
183
+ /** Cache TTL in days */
184
+ cacheTtlDays: number;
185
+ /** Cache build timeout in ms */
186
+ cacheBuildTimeoutMs: number;
187
+ /** Max dependency tarball size in bytes */
188
+ cacheMaxTarballBytes: number;
189
+ /** Event router: max chain depth before circuit breaker trips */
190
+ eventRouterMaxChainDepth: number;
191
+ /** Event router: max events per event name per minute */
192
+ eventRouterRateLimitPerWorkflowPerMinute: number;
193
+ /** Event router: event TTL in seconds */
194
+ eventRouterEventTtlSeconds: number;
195
+ /** Event router: cleanup interval in milliseconds */
196
+ eventRouterCleanupIntervalMs: number;
197
+ /** Inbound webhook delivery log: soft cap (bytes). Oversized deliveries are
198
+ * recorded with payload_omitted=true rather than 413'd. */
199
+ eventLogMaxPayloadBytes: number;
200
+ /** Log level */
201
+ logLevel: 'debug' | 'info' | 'warn' | 'error';
202
+ /** Node environment */
203
+ nodeEnv: 'development' | 'production' | 'test';
204
+ }
205
+ /**
206
+ * Database row type for the config_versions table.
207
+ * Each row is an immutable snapshot of the shared configuration.
208
+ */
209
+ export interface ConfigVersion {
210
+ id: string;
211
+ version: number;
212
+ config: Record<string, unknown>;
213
+ createdAt: Date;
214
+ createdBy: string;
215
+ description: string | null;
216
+ encryptedPaths: string[];
217
+ }
218
+ //# sourceMappingURL=types.d.ts.map