@kici-dev/orchestrator 0.14.2 → 0.16.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.
- package/dist/__test-helpers__/peer-mutual-auth.d.ts +42 -0
- package/dist/__test-helpers__/scratch-db.d.ts +16 -0
- package/dist/agent/host-roster.d.ts +100 -37
- package/dist/agent/registry.d.ts +1 -8
- package/dist/app-on-error.d.ts +1 -1
- package/dist/app.d.ts +4 -2
- package/dist/artifacts/artifact-store.d.ts +0 -2
- package/dist/audit/access-log.d.ts +1 -1
- package/dist/cache/source-cache.d.ts +1 -1
- package/dist/cache/user-cache.d.ts +0 -28
- package/dist/cli/api-client.d.ts +27 -1
- package/dist/cli/commands/access-log.d.ts +1 -1
- package/dist/cli/commands/cold-store-impl.d.ts +7 -84
- package/dist/cli/commands/db.d.ts +1 -0
- package/dist/cli/commands/host.d.ts +3 -0
- package/dist/cli/commands/orchestrator-service/status.d.ts +2 -0
- package/dist/cli/commands/org.d.ts +12 -0
- package/dist/cli/commands/scaler.d.ts +14 -0
- package/dist/cli/commands/secret.d.ts +1 -45
- package/dist/cli/commands/service-health.d.ts +21 -13
- package/dist/cli/commands/shared/cli-action.d.ts +17 -0
- package/dist/cli/commands/shared/db.d.ts +5 -5
- package/dist/cli/commands/shared/org-id.d.ts +5 -0
- package/dist/cli/commands/shared/service-verbs.d.ts +19 -0
- package/dist/cli/commands/shared/table.d.ts +3 -0
- package/dist/cli/commands/shared/unbound-context-warning.d.ts +2 -22
- package/dist/cli/commands/source-manifest.d.ts +3 -3
- package/dist/cli/commands/source.d.ts +23 -0
- package/dist/cli/commands/trust-policy.d.ts +7 -31
- package/dist/cli/join.d.ts +2 -2
- package/dist/cli/kici-admin.d.ts +6 -1
- package/dist/cli/local-github-ingress-url.d.ts +6 -0
- package/dist/cli/root-option-routing.d.ts +46 -0
- package/dist/cli/webhook-url-notes.d.ts +15 -0
- package/dist/cli.js +10667 -8461
- package/dist/cluster/coordinator-credential.d.ts +21 -0
- package/dist/cluster/coordinator.d.ts +2 -2
- package/dist/cluster/index.d.ts +4 -4
- package/dist/cluster/join-client.d.ts +23 -21
- package/dist/cluster/join-handler.d.ts +24 -16
- package/dist/cluster/join-protocol-v2.d.ts +84 -0
- package/dist/cluster/join-token.d.ts +78 -56
- package/dist/cluster/peer-auth-coordinator.d.ts +16 -2
- package/dist/cluster/peer-client.d.ts +99 -5
- package/dist/cluster/peer-crypto.d.ts +60 -3
- package/dist/cluster/peer-discovery.d.ts +67 -0
- package/dist/cluster/peer-forget.d.ts +4 -9
- package/dist/cluster/peer-handler.d.ts +28 -6
- package/dist/cluster/peer-registry.d.ts +15 -1
- package/dist/cluster/peer-request-waiters.d.ts +26 -0
- package/dist/cluster/scaler-orphans-peer.d.ts +4 -9
- package/dist/cluster/scaler-reload-fanout.d.ts +29 -0
- package/dist/cluster/scaler-reload-peer.d.ts +16 -0
- package/dist/cluster/worker-cluster-settings.d.ts +1 -0
- package/dist/cold-store/load-access-log-range.d.ts +3 -3
- package/dist/cold-store/tables/access-log.d.ts +4 -12
- package/dist/cold-store/tables/event-log.d.ts +8 -19
- package/dist/cold-store/tables/execution-jobs.d.ts +7 -24
- package/dist/cold-store/tables/execution-runs.d.ts +6 -20
- package/dist/cold-store/tables/execution-steps.d.ts +8 -26
- package/dist/cold-store/tables/secret-audit-log.d.ts +4 -11
- package/dist/config/env-overlay.d.ts +3 -8
- package/dist/config/reload.d.ts +9 -2
- package/dist/config/schema.d.ts +16 -2
- package/dist/config/types.d.ts +6 -2
- package/dist/config.d.ts +22 -17
- package/dist/contexts/held-runs.d.ts +3 -6
- package/dist/dashboard/cursor.d.ts +12 -0
- package/dist/dashboard/handler.d.ts +5 -12
- package/dist/db/deferred-index-build.d.ts +42 -0
- package/dist/db/deferred-indexes.d.ts +3 -37
- package/dist/db/migrations/100_held_runs_hold_type_vocabulary.d.ts +3 -5
- package/dist/db/migrations/157_host_roster_identity_source.d.ts +21 -0
- package/dist/db/migrations/158_normalize_legacy_values.d.ts +4 -0
- package/dist/db/repos/org-ids-repo.d.ts +87 -0
- package/dist/db/schema-snapshot.generated.d.ts +3 -0
- package/dist/db/types.d.ts +21 -24
- package/dist/fault-injection-types.d.ts +0 -6
- package/dist/git/dispatch-git-auth.d.ts +6 -12
- package/dist/github-app-name-refresher/github-app-name-refresher.d.ts +25 -13
- package/dist/helpers/json.d.ts +3 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +357 -216
- package/dist/metrics/prometheus.d.ts +0 -5
- package/dist/oidc/id-token-claims.d.ts +1 -1
- package/dist/oidc/resolve-signer.d.ts +2 -4
- package/dist/orchestrator-core.d.ts +10 -3
- package/dist/pipeline/global-eval-round.d.ts +2 -26
- package/dist/pipeline/install-secrets-resolver.d.ts +0 -3
- package/dist/pipeline/manual-schedule.d.ts +1 -7
- package/dist/provenance/dispatch-context.d.ts +5 -7
- package/dist/provenance/pending-attestations-repo.d.ts +1 -1
- package/dist/provenance/trust-root.d.ts +4 -5
- package/dist/provenance/verify-deferred-capture.d.ts +3 -3
- package/dist/provider-registry.d.ts +13 -40
- package/dist/providers/github/manifest.d.ts +58 -7
- package/dist/providers/universal-git/ssh-auth.d.ts +0 -5
- package/dist/reporting/check-run-reporter.d.ts +8 -21
- package/dist/reporting/check-run-summary.d.ts +2 -2
- package/dist/reporting/execution-tracker.d.ts +1 -1
- package/dist/reporting/log-chunk-sink.d.ts +1 -1
- package/dist/reporting/run-summary-fields.d.ts +25 -0
- package/dist/reporting/s3-log-storage.d.ts +2 -2
- package/dist/routes/admin-access-log.d.ts +2 -9
- package/dist/routes/admin-backends.d.ts +2 -9
- package/dist/routes/admin-cluster-name.d.ts +2 -8
- package/dist/routes/admin-cluster-settings.d.ts +2 -8
- package/dist/routes/admin-config.d.ts +0 -3
- package/dist/routes/admin-contexts.d.ts +3 -11
- package/dist/routes/admin-db.d.ts +2 -9
- package/dist/routes/admin-env.d.ts +33 -0
- package/dist/routes/admin-event-dlq.d.ts +2 -9
- package/dist/routes/admin-event-inspect.d.ts +2 -9
- package/dist/routes/admin-event-log.d.ts +2 -9
- package/dist/routes/admin-events.d.ts +3 -13
- package/dist/routes/admin-held-runs.d.ts +2 -8
- package/dist/routes/admin-list-limit.d.ts +3 -0
- package/dist/routes/admin-maintenance.d.ts +2 -9
- package/dist/routes/admin-orchestrator-drain.d.ts +2 -9
- package/dist/routes/admin-org-settings.d.ts +2 -8
- package/dist/routes/admin-orgs.d.ts +27 -0
- package/dist/routes/admin-peer-forget.d.ts +2 -9
- package/dist/routes/admin-queue-execution.d.ts +3 -10
- package/dist/routes/admin-registrations.d.ts +3 -14
- package/dist/routes/admin-runs.d.ts +3 -14
- package/dist/routes/admin-scaler-orphans.d.ts +2 -9
- package/dist/routes/admin-scaler-reload.d.ts +41 -0
- package/dist/routes/admin-scheduled-jobs.d.ts +2 -9
- package/dist/routes/admin-signing-keys.d.ts +2 -9
- package/dist/routes/admin-sources.d.ts +28 -32
- package/dist/routes/admin-trust-policy.d.ts +2 -8
- package/dist/routes/admin.d.ts +29 -30
- package/dist/routes/cluster-join.d.ts +13 -0
- package/dist/routes/github-webhook.d.ts +13 -11
- package/dist/scaler/bare-metal-backend.d.ts +42 -1
- package/dist/scaler/config.d.ts +12 -84
- package/dist/scaler/file-reload.d.ts +48 -0
- package/dist/scaler/manager.d.ts +47 -33
- package/dist/scaler/scaler-state-store.d.ts +5 -0
- package/dist/scaler/types.d.ts +8 -9
- package/dist/secrets/job-secret-gate.d.ts +2 -5
- package/dist/secrets/secret-resolver.d.ts +2 -4
- package/dist/security/trust-policy-gate.d.ts +0 -4
- package/dist/server.d.ts +6 -17
- package/dist/server.js +10933 -10836
- package/dist/sources/source-manager.d.ts +0 -24
- package/dist/sources/webhook-url-resolvers.d.ts +60 -0
- package/dist/standalone.js +10457 -10060
- package/dist/worker/reroute-dispatch.d.ts +1 -0
- package/dist/worker/reroute-spawn-control.d.ts +1 -3
- package/dist/worker-core.d.ts +9 -2
- package/dist/ws/agent-handler.d.ts +3 -3
- package/dist/ws/dashboard-access.d.ts +57 -0
- package/dist/ws/dashboard-backends-handler.d.ts +1 -6
- package/dist/ws/dashboard-context-handler.d.ts +10 -15
- package/dist/ws/dashboard-fleet-handler.d.ts +4 -3
- package/dist/ws/dashboard-fleet-write-handler.d.ts +6 -5
- package/dist/ws/dashboard-global-workflows-handler.d.ts +1 -6
- package/dist/ws/dashboard-registrations-handler.d.ts +1 -7
- package/dist/ws/platform-client.d.ts +94 -327
- package/installer-image-digests.json +3 -3
- package/package.json +4 -4
- package/sbom.spdx.json +53 -53
- package/dist/cache/legacy-prefixes.d.ts +0 -19
- package/dist/cli/commands/agent-service/logs.d.ts +0 -14
- package/dist/cli/commands/agent-service/restart.d.ts +0 -12
- package/dist/cli/commands/agent-service/start.d.ts +0 -12
- package/dist/cli/commands/agent-service/stop.d.ts +0 -12
- package/dist/cli/commands/agent-service/uninstall.d.ts +0 -13
- package/dist/cli/commands/cache.d.ts +0 -51
- package/dist/cli/commands/orchestrator-service/logs.d.ts +0 -14
- package/dist/cli/commands/orchestrator-service/restart.d.ts +0 -12
- package/dist/cli/commands/orchestrator-service/start.d.ts +0 -12
- package/dist/cli/commands/orchestrator-service/stop.d.ts +0 -12
- package/dist/cli/commands/orchestrator-service/uninstall.d.ts +0 -13
- package/dist/git/inherited-secret.d.ts +0 -29
|
@@ -1,13 +1,8 @@
|
|
|
1
|
-
import { type StateReplayRun, type OrchestratorToPlatformMessage, type WebhookRelay, type WebhookRelayResult, type TrustPolicyUpdate, type StaleCheckrunCleanup, type
|
|
1
|
+
import { type StateReplayRun, type OrchestratorToPlatformMessage, type PlatformToOrchestratorMessage, type WebhookRelay, type WebhookRelayResult, type TrustPolicyUpdate, type StaleCheckrunCleanup, type DashboardAttestationRetryRequest, type RunRerunRequest, type ManualScheduleRequest, type RunCancelRequest, type DashboardPlatformToOrchMessage, type TestRelayRequest, type JoinResponse, type DeploymentIdentity, type ConfigPaths, type OrchCapabilities, type OrchRole } from '@kici-dev/engine';
|
|
2
2
|
import type { PlanHeadroomStore } from '../cluster/plan-headroom-store.js';
|
|
3
3
|
import { RelayBufferRegistry, type RelayStartMeta } from '../webhook/relay-buffer.js';
|
|
4
4
|
import type { AdmitResult } from '../webhook/ingest-admission.js';
|
|
5
|
-
/**
|
|
6
|
-
* Verification + processing outcome returned by the chunked relay path's
|
|
7
|
-
* `onVerifyInbound` callback. Mirrors the shape exported by
|
|
8
|
-
* `webhook/verify-inbound.ts` so wiring is a single hand-off without an
|
|
9
|
-
* adapter layer.
|
|
10
|
-
*/
|
|
5
|
+
/** Outcome of the chunked relay path's `onVerifyInbound`; mirrors `webhook/verify-inbound.ts`. */
|
|
11
6
|
export interface InboundVerifyOutcome {
|
|
12
7
|
result: WebhookRelayResult;
|
|
13
8
|
reason?: string;
|
|
@@ -24,31 +19,18 @@ export type ReplaySendResult = {
|
|
|
24
19
|
skipped?: 'empty' | 'invalid' | 'disconnected' | 'breaker';
|
|
25
20
|
};
|
|
26
21
|
/**
|
|
27
|
-
* A webhook source
|
|
28
|
-
*
|
|
29
|
-
* routing keys this orchestrator handles.
|
|
30
|
-
*
|
|
31
|
-
* Note: webhookSecret is no longer included. Secrets are pushed separately
|
|
32
|
-
* via source.secrets after loading from PgSecretStore.
|
|
33
|
-
*
|
|
34
|
-
* Single source of truth lives in `../entry-helpers.ts`. Re-exported here
|
|
35
|
-
* so existing imports of `ProviderSource` from `./platform-client.js` keep
|
|
36
|
-
* working without churn.
|
|
22
|
+
* A webhook source this orchestrator manages, registered with the Platform after
|
|
23
|
+
* auth.success. Defined in `../entry-helpers.ts`; re-exported for existing importers.
|
|
37
24
|
*/
|
|
38
25
|
export type { ProviderSource } from '../entry-helpers.js';
|
|
39
26
|
import type { ProviderSource } from '../entry-helpers.js';
|
|
40
27
|
/**
|
|
41
28
|
* Hard ceiling on how long an admitted fire-and-forget relay pipeline may hold
|
|
42
|
-
* its admission slot
|
|
43
|
-
*
|
|
44
|
-
* permanent slot leak that would otherwise shrink capacity for every future
|
|
45
|
-
* webhook. Well above any legitimate ingest-pipeline duration.
|
|
29
|
+
* its admission slot. Past it the pipeline counts as hung and its slot is
|
|
30
|
+
* force-released, so a hang cannot permanently shrink ingest capacity.
|
|
46
31
|
*
|
|
47
|
-
* Exported because
|
|
48
|
-
*
|
|
49
|
-
* since a ceiling past the point the relay force-releases the pipeline buys
|
|
50
|
-
* latency and no verdict. Two copies of "5 minutes" with nothing coupling them
|
|
51
|
-
* is exactly the pair that drifts.
|
|
32
|
+
* Exported because the global eval round caps its inline wait ceiling at this
|
|
33
|
+
* value: waiting past the force-release buys latency and no verdict.
|
|
52
34
|
*/
|
|
53
35
|
export declare const ADMITTED_PIPELINE_LIFETIME_MS: number;
|
|
54
36
|
/**
|
|
@@ -57,6 +39,18 @@ export declare const ADMITTED_PIPELINE_LIFETIME_MS: number;
|
|
|
57
39
|
* keeps the connection.
|
|
58
40
|
*/
|
|
59
41
|
export type FrameHandler<M> = (msg: M) => void | Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* Platform → orchestrator frame types answered by exactly one dashboard / fleet
|
|
44
|
+
* read handler, looked up in {@link PlatformClientOptions.dashboardHandlers}.
|
|
45
|
+
*/
|
|
46
|
+
export declare const DASHBOARD_FRAME_TYPES: readonly ["dashboard.run.detail", "dashboard.run.structured", "dashboard.run.state", "dashboard.runs.list", "dashboard.runs.filters", "dashboard.sources.list", "dashboard.admin-tokens.list", "dashboard.step.logs", "dashboard.attestations.list", "dashboard.attestations.list.all", "dashboard.attestation.get", "dashboard.artifacts.list", "dashboard.payload", "dashboard.orch.logs", "dashboard.diagnostics", "dashboard.scaler.capacity", "dashboard.scaler.agents", "dashboard.fleet.hosts", "dashboard.fleet.host", "dashboard.fleet.preview", "dashboard.fleet.workflows-for-host"];
|
|
47
|
+
export type DashboardFrameType = (typeof DASHBOARD_FRAME_TYPES)[number];
|
|
48
|
+
/** One optional handler per {@link DASHBOARD_FRAME_TYPES} entry, typed by its frame. */
|
|
49
|
+
export type DashboardFrameHandlers = {
|
|
50
|
+
[K in DashboardFrameType]?: FrameHandler<Extract<PlatformToOrchestratorMessage, {
|
|
51
|
+
type: K;
|
|
52
|
+
}>>;
|
|
53
|
+
};
|
|
60
54
|
export interface PlatformClientOptions {
|
|
61
55
|
/** WebSocket URL of the Platform relay. */
|
|
62
56
|
url: string;
|
|
@@ -68,18 +62,11 @@ export interface PlatformClientOptions {
|
|
|
68
62
|
providerSources?: ProviderSource[];
|
|
69
63
|
/** Orchestrator cluster instance ID (sent in source.register for peer correlation). */
|
|
70
64
|
instanceId?: string;
|
|
71
|
-
/**
|
|
72
|
-
* Human-friendly cluster name resolved on orch boot
|
|
73
|
-
* (`cluster_meta.cluster_name`). Sent in source.register so Platform
|
|
74
|
-
* can route per-orch dashboard requests by this identifier.
|
|
75
|
-
*/
|
|
65
|
+
/** `cluster_meta.cluster_name`; the Platform routes per-orch dashboard requests by it. */
|
|
76
66
|
clusterName?: string;
|
|
77
67
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
80
|
-
* Platform can warn when two unrelated clusters in the same org
|
|
81
|
-
* accidentally share a `clusterName`. HA siblings share the same orch
|
|
82
|
-
* DB and therefore the same `clusterId`.
|
|
68
|
+
* `cluster_meta.cluster_id` (UUID). Lets the Platform warn when two unrelated
|
|
69
|
+
* clusters in one org share a `clusterName`; HA siblings share one DB and so one id.
|
|
83
70
|
*/
|
|
84
71
|
clusterId?: string;
|
|
85
72
|
/** Reachable address for peer-to-peer connections (from KICI_CLUSTER_ADDRESS env var). Null if not configured. */
|
|
@@ -123,18 +110,13 @@ export interface PlatformClientOptions {
|
|
|
123
110
|
}) => void;
|
|
124
111
|
/** Optional callback invoked after successful authentication and source registration. */
|
|
125
112
|
onAuthenticated?: () => void | Promise<void>;
|
|
126
|
-
/**
|
|
127
|
-
* Returns this coordinator's currently-connected worker peers for the
|
|
128
|
-
* `cluster.membership` snapshot. Undefined on a non-coordinator (or when
|
|
129
|
-
* clustering is off) → no membership is reported.
|
|
130
|
-
*/
|
|
113
|
+
/** Connected worker peers for `cluster.membership`; undefined off-coordinator → none reported. */
|
|
131
114
|
getWorkerPeers?: () => Array<{
|
|
132
115
|
instanceId: string;
|
|
133
116
|
}>;
|
|
134
117
|
/**
|
|
135
|
-
* Persisted
|
|
136
|
-
*
|
|
137
|
-
* receives no ceiling and admits worker joins freely.
|
|
118
|
+
* Persisted Platform-pushed worker ceiling, written on every `plan.headroom`.
|
|
119
|
+
* Undefined → no ceiling, worker joins are admitted freely.
|
|
138
120
|
*/
|
|
139
121
|
planHeadroomStore?: PlanHeadroomStore;
|
|
140
122
|
/**
|
|
@@ -145,123 +127,47 @@ export interface PlatformClientOptions {
|
|
|
145
127
|
*/
|
|
146
128
|
onPlanCeiling?: (ceiling: number, evictExcess: boolean) => void;
|
|
147
129
|
/**
|
|
148
|
-
*
|
|
149
|
-
*
|
|
150
|
-
* `remote_sources` anchor (`remote:<orgId>`) so Platform-relayed
|
|
151
|
-
* `kici run remote` resolves the real tenant. Fires on every (re)connect;
|
|
152
|
-
* provisioning is idempotent.
|
|
130
|
+
* Fires with the canonical org id from `auth.success` on every (re)connect, to
|
|
131
|
+
* idempotently provision the `remote:<orgId>` anchor `kici run remote` resolves.
|
|
153
132
|
*/
|
|
154
133
|
onOrgIdentified?: (info: {
|
|
155
134
|
orgId: string;
|
|
156
135
|
clusterId: string | null;
|
|
157
136
|
}) => void;
|
|
158
|
-
/**
|
|
159
|
-
* Optional callback fired with the provenance trust root (OIDC issuer) the
|
|
160
|
-
* Platform supplies on `auth.success`. The orchestrator uses it to verify
|
|
161
|
-
* provenance bundles at ingest. `null` means provenance is not configured.
|
|
162
|
-
*/
|
|
163
|
-
onProvenanceIssuer?: (issuer: string | null) => void;
|
|
164
|
-
/** Optional callback for dashboard run detail requests from Platform. */
|
|
165
|
-
onDashboardRunDetail?: FrameHandler<DashboardRunDetailRequest>;
|
|
166
|
-
/** Optional callback for dashboard structured run-result requests from Platform. */
|
|
167
|
-
onDashboardRunStructured?: FrameHandler<DashboardRunStructuredRequest>;
|
|
168
|
-
/** Optional callback for the run-state system reconciliation read from Platform. */
|
|
169
|
-
onDashboardRunState?: FrameHandler<DashboardRunStateRequest>;
|
|
170
|
-
/** Optional callback for dashboard runs.list (operator console) requests from Platform. */
|
|
171
|
-
onDashboardRunsList?: FrameHandler<DashboardRunsListRequest>;
|
|
172
|
-
/** Optional callback for dashboard runs.filters (operator console) requests from Platform. */
|
|
173
|
-
onDashboardRunsFilters?: FrameHandler<DashboardRunsFiltersRequest>;
|
|
174
|
-
/** Optional callback for dashboard sources.list (operator console) requests from Platform. */
|
|
175
|
-
onDashboardSourcesList?: FrameHandler<DashboardSourcesListRequest>;
|
|
176
|
-
/** Optional callback for dashboard admin-tokens.list (RBAC drift report) requests from Platform. */
|
|
177
|
-
onDashboardAdminTokensList?: FrameHandler<DashboardAdminTokensListRequest>;
|
|
178
|
-
/** Optional callback for dashboard step logs requests from Platform. */
|
|
179
|
-
onDashboardStepLogs?: FrameHandler<DashboardStepLogsRequest>;
|
|
180
|
-
/** Optional callback for dashboard attestations-list requests from Platform. */
|
|
181
|
-
onDashboardAttestationsList?: FrameHandler<DashboardAttestationsListRequest>;
|
|
182
|
-
/** Optional callback for org-wide attestations list (browser) requests from Platform. */
|
|
183
|
-
onDashboardAttestationsListAll?: FrameHandler<DashboardAttestationsListAllRequest>;
|
|
184
|
-
/** Optional callback for single-attestation detail requests from Platform. */
|
|
185
|
-
onDashboardAttestationGet?: FrameHandler<DashboardAttestationGetRequest>;
|
|
186
137
|
onDashboardAttestationRetry?: FrameHandler<DashboardAttestationRetryRequest>;
|
|
187
|
-
/** Optional callback for dashboard artifacts-list requests from Platform. */
|
|
188
|
-
onDashboardArtifactsList?: FrameHandler<DashboardArtifactsListRequest>;
|
|
189
|
-
/** Optional callback for run re-run requests from Platform (dashboard action). */
|
|
190
138
|
onRunRerun?: FrameHandler<RunRerunRequest>;
|
|
191
|
-
/** Optional callback for manual schedule trigger requests from Platform (dashboard action). */
|
|
192
139
|
onManualSchedule?: FrameHandler<ManualScheduleRequest>;
|
|
193
|
-
/** Optional callback for run cancel requests from Platform (dashboard action). */
|
|
194
140
|
onRunCancel?: FrameHandler<RunCancelRequest>;
|
|
195
|
-
/**
|
|
196
|
-
|
|
197
|
-
/**
|
|
198
|
-
onDashboardOrchLogs?: FrameHandler<DashboardOrchLogsRequest>;
|
|
199
|
-
/** Optional callback for dashboard environment/held-run messages from Platform. */
|
|
141
|
+
/** Handlers for the {@link DASHBOARD_FRAME_TYPES} read frames; a type with none is dropped. */
|
|
142
|
+
dashboardHandlers?: DashboardFrameHandlers;
|
|
143
|
+
/** Dashboard environment / held-run messages. */
|
|
200
144
|
onDashboardEnvMessage?: FrameHandler<DashboardPlatformToOrchMessage>;
|
|
201
|
-
/**
|
|
202
|
-
* Optional callback for Platform-first `kici run remote` control-plane relay
|
|
203
|
-
* requests (upload-init, trigger, status, logs, cancel). The handler performs
|
|
204
|
-
* the action and replies over the WS keyed by `requestId`.
|
|
205
|
-
*/
|
|
145
|
+
/** `kici run remote` control-plane relay requests; the handler replies keyed by `requestId`. */
|
|
206
146
|
onTestRelay?: FrameHandler<TestRelayRequest>;
|
|
207
|
-
/** Optional callback for dashboard diagnostics requests from Platform. */
|
|
208
|
-
onDashboardDiagnostics?: FrameHandler<DashboardDiagnosticsRequest>;
|
|
209
|
-
/** Optional callback for dashboard scaler capacity requests from Platform. */
|
|
210
|
-
onDashboardScalerCapacity?: FrameHandler<DashboardScalerCapacityRequest>;
|
|
211
|
-
/** Optional callback for dashboard scaler agents requests from Platform. */
|
|
212
|
-
onDashboardScalerAgents?: FrameHandler<DashboardScalerAgentsRequest>;
|
|
213
|
-
/** Optional callback for fleet roster requests from Platform. */
|
|
214
|
-
onFleetHosts?: FrameHandler<DashboardFleetHostsRequest>;
|
|
215
|
-
/** Optional callback for fleet host-detail requests from Platform. */
|
|
216
|
-
onFleetHost?: FrameHandler<DashboardFleetHostRequest>;
|
|
217
|
-
/** Optional callback for fleet runsOnAll-preview requests from Platform. */
|
|
218
|
-
onFleetPreview?: FrameHandler<DashboardFleetPreviewRequest>;
|
|
219
|
-
/** Optional callback for fleet workflows-for-host requests from Platform. */
|
|
220
|
-
onFleetWorkflowsForHost?: FrameHandler<DashboardFleetWorkflowsForHostRequest>;
|
|
221
|
-
/** Optional callback for trust policy updates pushed from Platform. */
|
|
222
147
|
onTrustPolicyUpdate?: FrameHandler<TrustPolicyUpdate>;
|
|
223
|
-
/** Optional callback for stale check run cleanup requests from Platform. */
|
|
224
148
|
onStaleCheckrunCleanup?: FrameHandler<StaleCheckrunCleanup>;
|
|
225
|
-
/** Optional
|
|
226
|
-
onJoinRequest?: (
|
|
149
|
+
/** Optional handler for join.request frames relayed by the Platform. It answers every such frame. */
|
|
150
|
+
onJoinRequest?: (raw: unknown) => Promise<JoinResponse>;
|
|
227
151
|
/** Custom orchestrator capabilities to merge with ORCH_CAPABILITIES in auth.request. */
|
|
228
152
|
orchCapabilities?: Partial<OrchCapabilities>;
|
|
229
153
|
/**
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* sourceless orchestrator that predates a given dashboard capability. Undefined
|
|
233
|
-
* (the shipped default) means identity — the full capability set is advertised.
|
|
234
|
-
*/
|
|
235
|
-
capabilitiesTransform?: (c: OrchCapabilities) => OrchCapabilities;
|
|
236
|
-
/**
|
|
237
|
-
* Verify a reassembled inbound webhook from the chunked relay path.
|
|
238
|
-
*
|
|
239
|
-
* Wired to `verifyInboundWebhook(deps, ...)` in production. Required when
|
|
240
|
-
* Platform sends `webhook.relay.start`/`webhook.relay.chunk` (chunked path);
|
|
241
|
-
* if absent, the orchestrator ACKs `rejected_misconfigured` because it
|
|
242
|
-
* cannot perform the trust check the new design requires.
|
|
154
|
+
* Verify a reassembled chunked-relay webhook. Without it every chunked relay
|
|
155
|
+
* is ACKed `rejected_misconfigured`, since the trust check cannot run.
|
|
243
156
|
*/
|
|
244
157
|
onVerifyInbound?: (meta: RelayStartMeta, body: Buffer) => Promise<InboundVerifyOutcome> | InboundVerifyOutcome;
|
|
245
|
-
/**
|
|
246
|
-
* Optional injected reassembly registry. Tests pass a registry with a short
|
|
247
|
-
* TTL; production constructs a default one per PlatformClient.
|
|
248
|
-
*/
|
|
158
|
+
/** Reassembly registry override (tests use a short TTL). */
|
|
249
159
|
relayBuffer?: RelayBufferRegistry;
|
|
250
160
|
/**
|
|
251
|
-
* Webhook-ingest admission
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
* fire-and-forget pipeline's lifetime and released on completion / error /
|
|
256
|
-
* timeout. Absent → no admission gate (tests, minimal wirings).
|
|
161
|
+
* Webhook-ingest admission, called BEFORE signature verification so an
|
|
162
|
+
* unverified flood is throttled too (verify reads the DB). A shed acks
|
|
163
|
+
* `shed_retry_later` (429); an admitted slot is held for the pipeline's
|
|
164
|
+
* lifetime. Absent → no admission gate.
|
|
257
165
|
*/
|
|
258
166
|
onAdmit?: (routingKey: string) => Promise<AdmitResult>;
|
|
259
167
|
/**
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
* `event_log` breadcrumb, and the overflow-buffer row when that queue is
|
|
264
|
-
* enabled. Best-effort — the client wraps it so a failure never blocks the ack.
|
|
168
|
+
* Records a shed delivery durably (an `event_log` breadcrumb, plus an
|
|
169
|
+
* overflow-buffer row when enabled) before the shed ack. Best-effort: a
|
|
170
|
+
* failure never blocks the ack.
|
|
265
171
|
*/
|
|
266
172
|
onShedCapture?: (meta: RelayStartMeta, body: Buffer, reason: string) => Promise<void>;
|
|
267
173
|
}
|
|
@@ -285,14 +191,9 @@ export declare function classifyDashboardRequestError(raw: {
|
|
|
285
191
|
requestId: string;
|
|
286
192
|
}, knownTypes: ReadonlySet<string>, orchVersion: string | undefined): DashboardRequestErrorFrame;
|
|
287
193
|
/**
|
|
288
|
-
*
|
|
289
|
-
*
|
|
290
|
-
*
|
|
291
|
-
* - Authentication handshake (auth.request -> auth.success/failure)
|
|
292
|
-
* - Periodic heartbeat messages to keep the connection alive
|
|
293
|
-
* - Auto-reconnect with exponential backoff (1s initial, 1.5x, jitter, 60s max)
|
|
294
|
-
* - Webhook relay reception and ACK responses
|
|
295
|
-
* - Event buffering during disconnection with flush on reconnect
|
|
194
|
+
* The orchestrator's WebSocket link to the Platform relay: auth handshake,
|
|
195
|
+
* heartbeat, jittered exponential reconnect, webhook relay + ACK, and event
|
|
196
|
+
* buffering while disconnected.
|
|
296
197
|
*/
|
|
297
198
|
export declare class PlatformClient {
|
|
298
199
|
private ws;
|
|
@@ -315,22 +216,8 @@ export declare class PlatformClient {
|
|
|
315
216
|
private readonly token;
|
|
316
217
|
private readonly onWebhookRelay;
|
|
317
218
|
private providerSources;
|
|
318
|
-
/**
|
|
319
|
-
* Pending `registerSourceAndAwait()` callers, keyed by routing key. Resolved
|
|
320
|
-
* with the Platform-computed webhook URL when the matching
|
|
321
|
-
* `source.register.ack` arrives, or rejected on timeout / disconnect.
|
|
322
|
-
*/
|
|
219
|
+
/** `registerSourceAndAwait()` waiters by routing key, settled by ack, timeout or disconnect. */
|
|
323
220
|
private readonly pendingSourceRegistrations;
|
|
324
|
-
/**
|
|
325
|
-
* Platform capabilities advertised on this connection (Platform → orchestrator
|
|
326
|
-
* `platform.capabilities` frame). `undefined` means nothing advertised yet —
|
|
327
|
-
* either a pre-capability Platform (which never advertises) or the frame has
|
|
328
|
-
* not arrived. Feature-gated sends treat "undefined" as optimistic (send
|
|
329
|
-
* anyway, backward-safe); only an advertised-but-absent flag suppresses a send.
|
|
330
|
-
* Reset to `undefined` on every (re)connect so a stale advertisement can't
|
|
331
|
-
* leak across connections.
|
|
332
|
-
*/
|
|
333
|
-
private platformCapabilities;
|
|
334
221
|
private readonly instanceId?;
|
|
335
222
|
private readonly clusterName?;
|
|
336
223
|
private readonly clusterId?;
|
|
@@ -351,34 +238,13 @@ export declare class PlatformClient {
|
|
|
351
238
|
private readonly planHeadroomStore?;
|
|
352
239
|
private readonly onPlanCeiling?;
|
|
353
240
|
private readonly onOrgIdentified?;
|
|
354
|
-
private readonly onProvenanceIssuer?;
|
|
355
|
-
private readonly onDashboardRunDetail?;
|
|
356
|
-
private readonly onDashboardRunStructured?;
|
|
357
|
-
private readonly onDashboardRunState?;
|
|
358
|
-
private readonly onDashboardRunsList?;
|
|
359
|
-
private readonly onDashboardRunsFilters?;
|
|
360
|
-
private readonly onDashboardSourcesList?;
|
|
361
|
-
private readonly onDashboardAdminTokensList?;
|
|
362
|
-
private readonly onDashboardStepLogs?;
|
|
363
|
-
private readonly onDashboardAttestationsList?;
|
|
364
|
-
private readonly onDashboardAttestationsListAll?;
|
|
365
|
-
private readonly onDashboardAttestationGet?;
|
|
366
241
|
private readonly onDashboardAttestationRetry?;
|
|
367
|
-
private readonly onDashboardArtifactsList?;
|
|
368
242
|
private readonly onRunRerun?;
|
|
369
243
|
private readonly onManualSchedule?;
|
|
370
244
|
private readonly onRunCancel?;
|
|
371
|
-
private readonly
|
|
372
|
-
private readonly onDashboardOrchLogs?;
|
|
245
|
+
private readonly dashboardHandlers;
|
|
373
246
|
private readonly onDashboardEnvMessage?;
|
|
374
247
|
private readonly onTestRelay?;
|
|
375
|
-
private readonly onDashboardDiagnostics?;
|
|
376
|
-
private readonly onDashboardScalerCapacity?;
|
|
377
|
-
private readonly onDashboardScalerAgents?;
|
|
378
|
-
private readonly onFleetHosts?;
|
|
379
|
-
private readonly onFleetHost?;
|
|
380
|
-
private readonly onFleetPreview?;
|
|
381
|
-
private readonly onFleetWorkflowsForHost?;
|
|
382
248
|
private readonly onTrustPolicyUpdate?;
|
|
383
249
|
private readonly onStaleCheckrunCleanup?;
|
|
384
250
|
private readonly onJoinRequest?;
|
|
@@ -388,163 +254,82 @@ export declare class PlatformClient {
|
|
|
388
254
|
private readonly onShedCapture?;
|
|
389
255
|
private readonly relayBuffer;
|
|
390
256
|
/**
|
|
391
|
-
*
|
|
392
|
-
*
|
|
393
|
-
* outbound `details_url`s that hide the canonical `org_<12-char>` id.
|
|
394
|
-
* `undefined` when the orchestrator runs against a Platform that
|
|
395
|
-
* predates the alias plumbing, or before the first successful auth.
|
|
257
|
+
* Owning org's public alias from `auth.success`, used for outbound check-run
|
|
258
|
+
* `details_url`s so they hide the canonical `org_<12-char>` id.
|
|
396
259
|
*/
|
|
397
260
|
private _orgPublicAlias?;
|
|
398
|
-
/** Canonical Platform org id from `auth.success`; see {@link getOrgId}. */
|
|
399
261
|
private _orgId?;
|
|
400
|
-
|
|
401
|
-
* Returns the cached public alias of the orchestrator's owning org,
|
|
402
|
-
* or `undefined` if Platform has not supplied one yet. Read by
|
|
403
|
-
* `check-run-reporter.ts` when building `details_url`.
|
|
404
|
-
*/
|
|
262
|
+
private _githubWebhookUrl?;
|
|
405
263
|
getOrgPublicAlias(): string | undefined;
|
|
406
264
|
/**
|
|
407
|
-
*
|
|
408
|
-
*
|
|
409
|
-
*
|
|
410
|
-
*
|
|
411
|
-
* A generic source's routing key embeds the organization
|
|
412
|
-
* (`generic:<orgId>:<id>`), and the Platform now refuses to register a key
|
|
413
|
-
* naming a different one. So the source-create path reads this to refuse a
|
|
414
|
-
* mismatched `--org` up front, naming the correct value, instead of letting
|
|
415
|
-
* the operator create a source that registers, is rejected, and never
|
|
416
|
-
* delivers.
|
|
265
|
+
* Canonical org id from `auth.success` (`undefined` before it). The Platform
|
|
266
|
+
* refuses a generic routing key (`generic:<orgId>:<id>`) naming another org,
|
|
267
|
+
* so source-create reads this to refuse a mismatched `--org` up front rather
|
|
268
|
+
* than create a source that never delivers.
|
|
417
269
|
*/
|
|
418
270
|
getOrgId(): string | undefined;
|
|
419
|
-
constructor(options: PlatformClientOptions);
|
|
420
271
|
/**
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
* runtime-broadcast still ends Platform in the correct cache state.
|
|
272
|
+
* The hosted Platform's org-scoped GitHub App webhook URL
|
|
273
|
+
* (`<base>/webhook/<orgId>/github`) from the last `auth.success`. `null` when
|
|
274
|
+
* the Platform has no public webhook base; `undefined` before the first
|
|
275
|
+
* successful auth or when the Platform does not send the field.
|
|
426
276
|
*/
|
|
427
|
-
|
|
277
|
+
getGithubWebhookUrl(): string | null | undefined;
|
|
278
|
+
constructor(options: PlatformClientOptions);
|
|
428
279
|
/**
|
|
429
|
-
*
|
|
430
|
-
*
|
|
280
|
+
* Merge `updates` and broadcast the full set (buffered while unauthenticated).
|
|
281
|
+
* The next `auth.request` carries the merged set too, so a reconnect cannot
|
|
282
|
+
* leave the Platform's cache stale.
|
|
431
283
|
*/
|
|
284
|
+
broadcastCapabilities(updates: Partial<OrchCapabilities>): void;
|
|
432
285
|
getCapabilities(): OrchCapabilities;
|
|
433
|
-
/** Current connection state. */
|
|
434
286
|
get state(): ConnectionState;
|
|
435
|
-
/** Number of messages currently buffered. */
|
|
436
287
|
getBufferedCount(): number;
|
|
437
288
|
/**
|
|
438
|
-
*
|
|
439
|
-
*
|
|
440
|
-
* Called from the `webhook.relay.chunk` handler once `relayBuffer.chunk(...)`
|
|
441
|
-
* returns `{ status: 'completed' }`. This sequence is intentionally single-pass
|
|
442
|
-
* and inside `requestContext.run` so trace propagation works end-to-end.
|
|
289
|
+
* Verify, process if accepted, and ACK a fully reassembled chunked relay.
|
|
290
|
+
* Runs single-pass inside `requestContext.run` so trace propagation holds.
|
|
443
291
|
*/
|
|
444
292
|
private completeChunkedRelay;
|
|
445
|
-
/**
|
|
446
|
-
* Initiate connection to the Platform relay.
|
|
447
|
-
* Starts the connect -> authenticate -> ready lifecycle.
|
|
448
|
-
*/
|
|
449
293
|
connect(): void;
|
|
450
|
-
/**
|
|
451
|
-
* Gracefully disconnect from Platform. Does not trigger reconnection.
|
|
452
|
-
*/
|
|
294
|
+
/** Graceful disconnect; does not reconnect. */
|
|
453
295
|
disconnect(): void;
|
|
454
|
-
/**
|
|
455
|
-
* Send a message to Platform. If authenticated, sends immediately.
|
|
456
|
-
* If not authenticated, buffers the message for later delivery.
|
|
457
|
-
*/
|
|
296
|
+
/** Send now when authenticated, otherwise buffer for the next connection. */
|
|
458
297
|
send(message: OrchestratorToPlatformMessage): void;
|
|
459
298
|
/**
|
|
460
|
-
* Send the reconnect state replay as
|
|
461
|
-
*
|
|
462
|
-
*
|
|
463
|
-
* limiter's byte budget, and paced under its refill rate, because a frame
|
|
464
|
-
* breaching either one is rejected with a 4003 close — and since reconnecting
|
|
465
|
-
* does not reduce the run count, an oversized frame is resent forever rather
|
|
466
|
-
* than failing once.
|
|
299
|
+
* Send the reconnect state replay as paced frames, each within the wire
|
|
300
|
+
* schema's run cap and the Platform limiter's byte budget: a breaching frame
|
|
301
|
+
* gets a 4003 close and, since reconnecting does not shrink it, is resent forever.
|
|
467
302
|
*
|
|
468
|
-
* Uses `this.ws.send
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
* instead of abandoning a replay whose connection has already gone. The
|
|
472
|
-
* Platform's replay handler upserts per run, so abandoning is safe — the next
|
|
473
|
-
* reconnect replays from scratch.
|
|
303
|
+
* Uses `this.ws.send`, not `send()`, so a dropped connection abandons the
|
|
304
|
+
* replay instead of buffering its tail for the next one. The Platform upserts
|
|
305
|
+
* per run, so the next reconnect replays from scratch.
|
|
474
306
|
*/
|
|
475
307
|
sendStateReplay(runs: StateReplayRun[]): Promise<ReplaySendResult>;
|
|
476
|
-
/**
|
|
477
|
-
* Send a feature-gated message only if the Platform is known to support the
|
|
478
|
-
* named capability — the orchestrator-side pre-flight for a self-hosted
|
|
479
|
-
* orchestrator running ahead of the hosted Platform.
|
|
480
|
-
*
|
|
481
|
-
* Backward-safe: a Platform that never advertised capabilities (a
|
|
482
|
-
* pre-capability build, or the advertisement hasn't arrived yet) is treated as
|
|
483
|
-
* "unknown → send optimistically", exactly like the Platform's dashboard
|
|
484
|
-
* pre-flight treats an absent `supportedDashboardRequests` as "unknown", never
|
|
485
|
-
* "supports nothing". Only an *advertised* capability set that explicitly lacks
|
|
486
|
-
* the flag suppresses the send — surfacing a diagnosable capability gap instead
|
|
487
|
-
* of firing a frame the Platform would silently drop.
|
|
488
|
-
*/
|
|
489
|
-
sendIfPlatformSupports(capability: string, message: OrchestratorToPlatformMessage): void;
|
|
490
|
-
/**
|
|
491
|
-
* Send a raw message directly on the WebSocket, bypassing typed validation.
|
|
492
|
-
* Used for log pull response messages (log.response) which are
|
|
493
|
-
* NOT in the OrchestratorToPlatformMessage union (they are in the separate log pull schema).
|
|
494
|
-
*/
|
|
308
|
+
/** Unbuffered, untyped send for frames outside the union (e.g. `log.response`). */
|
|
495
309
|
sendRaw(data: unknown): void;
|
|
496
|
-
/**
|
|
497
|
-
* Register a new source at runtime (e.g., after config reload adds a new GitHub app).
|
|
498
|
-
* Separate from the post-auth registration which sends all sources at once.
|
|
499
|
-
*/
|
|
310
|
+
/** Register one source at runtime (the post-auth registration sends them all). */
|
|
500
311
|
sendSourceRegister(source: ProviderSource): void;
|
|
501
|
-
/**
|
|
502
|
-
* Deregister sources at runtime (e.g., after config reload removes a GitHub app).
|
|
503
|
-
* Tells Platform to stop routing webhooks for these routing keys to this orchestrator.
|
|
504
|
-
*/
|
|
505
312
|
sendSourceDeregister(source: {
|
|
506
313
|
routingKey: string;
|
|
507
314
|
}): void;
|
|
508
|
-
/**
|
|
509
|
-
* Diff current provider sources with new ones and send register/deregister as needed.
|
|
510
|
-
* Convenience method for config reload that atomically updates routing.
|
|
511
|
-
*/
|
|
315
|
+
/** Diff against the current sources and send the register / deregister frames. */
|
|
512
316
|
updateSources(newSources: ProviderSource[]): void;
|
|
513
317
|
/**
|
|
514
|
-
* Push the full source list
|
|
515
|
-
*
|
|
516
|
-
* `
|
|
517
|
-
*
|
|
518
|
-
*
|
|
519
|
-
* synchronously. Passing the **full** source list keeps this on the single
|
|
520
|
-
* `updateSources` push path — the routing key being newly added means
|
|
521
|
-
* `updateSources` emits a `source.register` whose ack carries the URL; the
|
|
522
|
-
* later NOTIFY-driven republish then diffs to a no-op.
|
|
523
|
-
*
|
|
524
|
-
* Rejects on timeout or disconnect; the caller degrades to a "(unavailable)"
|
|
525
|
-
* note rather than fabricating a URL.
|
|
318
|
+
* Push the full source list and resolve with the webhook URL the Platform's
|
|
319
|
+
* `source.register.ack` carries for `routingKey` (`null`: no public webhook
|
|
320
|
+
* base). `kici-admin source add` prints it. Taking the FULL list keeps this
|
|
321
|
+
* on the one `updateSources` path, so the later NOTIFY republish diffs to a
|
|
322
|
+
* no-op. Rejects on timeout or disconnect.
|
|
526
323
|
*/
|
|
527
324
|
registerSourceAndAwait(fullSources: ProviderSource[], routingKey: string, timeoutMs?: number): Promise<string | null>;
|
|
528
|
-
/**
|
|
529
|
-
* Reject every pending `registerSourceAndAwait()` — called on disconnect so a
|
|
530
|
-
* `source add` issued while the link drops fails fast instead of hanging.
|
|
531
|
-
*/
|
|
325
|
+
/** On disconnect, so a `source add` in flight fails fast instead of hanging. */
|
|
532
326
|
private rejectPendingSourceRegistrations;
|
|
533
327
|
getReconnectDelay(): number;
|
|
534
328
|
private doConnect;
|
|
535
329
|
private handleMessage;
|
|
536
|
-
/**
|
|
537
|
-
* Try the two non-mainline schemas (log-pull, cluster join.request) when
|
|
538
|
-
* the primary `platformToOrchestratorMessageSchema` failed to parse. Falls
|
|
539
|
-
* back to a structured warning if neither schema matches.
|
|
540
|
-
*/
|
|
330
|
+
/** Recognition chain for frames the primary schema rejected. */
|
|
541
331
|
private handleNonStandardMessage;
|
|
542
|
-
/**
|
|
543
|
-
* If `raw` looks like a dashboard request (a `dashboard.*` type with a
|
|
544
|
-
* requestId) that failed schema validation, send a structured error response
|
|
545
|
-
* keyed to its requestId and return true. Returns false when the message is
|
|
546
|
-
* not a recognisable dashboard request (let the caller log a warning).
|
|
547
|
-
*/
|
|
332
|
+
/** Answer an invalid `dashboard.*` request carrying a requestId; false when `raw` is not one. */
|
|
548
333
|
private respondToInvalidDashboardRequest;
|
|
549
334
|
/**
|
|
550
335
|
* Run the handler for one Platform frame. Nothing awaits a frame, so a throw
|
|
@@ -552,13 +337,9 @@ export declare class PlatformClient {
|
|
|
552
337
|
* connection carries on; left unhandled it would stop the orchestrator.
|
|
553
338
|
*/
|
|
554
339
|
private runFrameHandler;
|
|
555
|
-
/**
|
|
556
|
-
* Dispatch a parsed platform message to the appropriate per-area
|
|
557
|
-
* handler. Each `case` either inlines a tiny dispatch (for one-line
|
|
558
|
-
* forwards to a callback) or delegates to a private method when the
|
|
559
|
-
* branch carries non-trivial logic.
|
|
560
|
-
*/
|
|
561
340
|
private dispatchPlatformMessage;
|
|
341
|
+
/** Log a dashboard read frame and hand it to its registered handler. */
|
|
342
|
+
private dispatchDashboardFrame;
|
|
562
343
|
private handleAuthSuccess;
|
|
563
344
|
private handleAuthFailure;
|
|
564
345
|
private handleWebhookRelayStart;
|
|
@@ -566,36 +347,22 @@ export declare class PlatformClient {
|
|
|
566
347
|
private handleSourceRegisterAck;
|
|
567
348
|
private handlePeerDiscover;
|
|
568
349
|
private handlePeerUpdate;
|
|
569
|
-
/**
|
|
570
|
-
* Send a message directly on the WebSocket without buffering.
|
|
571
|
-
* Used for ACK responses that must go immediately.
|
|
572
|
-
*/
|
|
350
|
+
/** Unbuffered send, for ACKs that must go now or not at all. */
|
|
573
351
|
private sendDirect;
|
|
574
352
|
private flushBuffer;
|
|
575
353
|
private startHeartbeat;
|
|
576
354
|
private stopHeartbeat;
|
|
577
|
-
/** How often a coordinator re-sends its membership snapshot. */
|
|
578
355
|
private static readonly CLUSTER_MEMBERSHIP_INTERVAL_MS;
|
|
579
|
-
/**
|
|
580
|
-
* Send the current worker-peer snapshot to the Platform.
|
|
581
|
-
*
|
|
582
|
-
* A snapshot, not a delta: a dropped frame self-heals on the next send. A
|
|
583
|
-
* no-op when the client is not authenticated or has no worker-peer source.
|
|
584
|
-
*/
|
|
356
|
+
/** Worker-peer snapshot (not a delta, so a dropped frame self-heals on the next send). */
|
|
585
357
|
sendClusterMembership(): void;
|
|
586
358
|
private startClusterMembership;
|
|
587
359
|
private stopClusterMembership;
|
|
588
360
|
/**
|
|
589
|
-
* Store the
|
|
590
|
-
*
|
|
591
|
-
* The stored value survives a Platform disconnect and a coordinator restart,
|
|
592
|
-
* which is what makes the fail-open stance bounded rather than unlimited.
|
|
361
|
+
* Store the worker ceiling; it survives disconnects and restarts, which keeps
|
|
362
|
+
* the fail-open stance bounded.
|
|
593
363
|
*/
|
|
594
364
|
private onPlanHeadroom;
|
|
595
|
-
/**
|
|
596
|
-
* The ceiling this coordinator enforces, or `null` when none was ever
|
|
597
|
-
* received — in which case worker joins are admitted freely.
|
|
598
|
-
*/
|
|
365
|
+
/** Enforced ceiling; `null` (never received) admits worker joins freely. */
|
|
599
366
|
getWorkerCeiling(): Promise<number | null>;
|
|
600
367
|
private scheduleReconnect;
|
|
601
368
|
private clearStabilityTimer;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.16.0",
|
|
3
3
|
"images": {
|
|
4
|
-
"kici-agent": "sha256:
|
|
5
|
-
"kici-orchestrator": "sha256:
|
|
4
|
+
"kici-agent": "sha256:d685cb8756dd86e6bb5a160fb2190ae2728de7db06a2d3183a4f60c641418034",
|
|
5
|
+
"kici-orchestrator": "sha256:34f613d76f78b77966680ac2c7f326b949723b959d46cae32767075cd524577d"
|
|
6
6
|
}
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kici-dev/orchestrator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "Customer-deployable orchestrator for the KiCI CI/CD stack. Receives webhook events (direct or via Platform relay), matches triggers against the lock file, and dispatches jobs to connected agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ci",
|
|
@@ -90,8 +90,8 @@
|
|
|
90
90
|
"ws": "^8.21.3",
|
|
91
91
|
"yaml": "^2.9.1",
|
|
92
92
|
"zod": "^4.6.5",
|
|
93
|
-
"@kici-dev/engine": "0.
|
|
94
|
-
"@kici-dev/shared": "0.
|
|
93
|
+
"@kici-dev/engine": "0.16.0",
|
|
94
|
+
"@kici-dev/shared": "0.16.0"
|
|
95
95
|
},
|
|
96
96
|
"kici": {
|
|
97
97
|
"metrics": {
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"@types/dockerode": "^4.0.1",
|
|
107
107
|
"@types/ws": "^8.18.1",
|
|
108
108
|
"kysely-ctl": "^0.21.0",
|
|
109
|
-
"@kici-dev/agent": "0.
|
|
109
|
+
"@kici-dev/agent": "0.16.0"
|
|
110
110
|
},
|
|
111
111
|
"scripts": {
|
|
112
112
|
"build": "node ../../scripts/build-service.mjs && tsc --emitDeclarationOnly",
|