@kici-dev/orchestrator 0.1.20 → 0.1.22

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 (71) hide show
  1. package/dist/agent/dispatcher.d.ts +44 -0
  2. package/dist/agent/host-roster-reaper.d.ts +2 -1
  3. package/dist/agent/host-roster.d.ts +54 -1
  4. package/dist/agent/registry.d.ts +22 -0
  5. package/dist/app.d.ts +5 -0
  6. package/dist/approvals/step-approval-bridge.d.ts +5 -0
  7. package/dist/cli/commands/source-manifest.d.ts +42 -0
  8. package/dist/cli/loopback-callback.d.ts +24 -0
  9. package/dist/cli/open-browser.d.ts +12 -0
  10. package/dist/cli/service/compose.d.ts +13 -0
  11. package/dist/cli/service/deploy-env.d.ts +31 -0
  12. package/dist/cli.js +1204 -256
  13. package/dist/cluster/coordinator.d.ts +5 -3
  14. package/dist/cluster/index.d.ts +2 -0
  15. package/dist/cluster/join-token.d.ts +27 -5
  16. package/dist/cluster/peer-auth-coordinator.d.ts +36 -0
  17. package/dist/cluster/peer-client.d.ts +34 -14
  18. package/dist/cluster/peer-credentials.d.ts +14 -2
  19. package/dist/cluster/peer-handler.d.ts +2 -2
  20. package/dist/cluster/rerouted-job-guard.d.ts +39 -0
  21. package/dist/config.d.ts +6 -0
  22. package/dist/dashboard/needs-edges.d.ts +4 -3
  23. package/dist/db/migrations/043_rerouted_to_peer.d.ts +4 -0
  24. package/dist/db/migrations/044_check_mode.d.ts +4 -0
  25. package/dist/db/migrations/045_host_properties.d.ts +16 -0
  26. package/dist/db/migrations/046_join_token_consumed_by_instance.d.ts +17 -0
  27. package/dist/db/migrations/047_needs_run_on.d.ts +4 -0
  28. package/dist/db/migrations/048_host_reboot_pending.d.ts +19 -0
  29. package/dist/db/migrations/049_held_runs_payload.d.ts +14 -0
  30. package/dist/db/migrations/050_sources_slug.d.ts +17 -0
  31. package/dist/db/types.d.ts +60 -5
  32. package/dist/deployment/deployment-identity.d.ts +9 -0
  33. package/dist/entry-helpers.d.ts +7 -0
  34. package/dist/environments/held-runs.d.ts +7 -1
  35. package/dist/github-app-name-refresher/github-app-name-refresher.d.ts +77 -0
  36. package/dist/index.d.ts +5 -1
  37. package/dist/index.js +1187 -33
  38. package/dist/lockfile-validate.d.ts +24 -0
  39. package/dist/orchestrator-core.d.ts +13 -1
  40. package/dist/pipeline/decorating-secret-resolver.d.ts +32 -0
  41. package/dist/pipeline/dispatch-matched-workflow.d.ts +127 -3
  42. package/dist/pipeline/install-secrets-resolver.d.ts +2 -2
  43. package/dist/pipeline/needs-scheduler.d.ts +22 -13
  44. package/dist/pipeline/processor.d.ts +2 -2
  45. package/dist/pipeline/test-pipeline.d.ts +37 -58
  46. package/dist/providers/github/manifest-form.d.ts +15 -0
  47. package/dist/providers/github/manifest.d.ts +103 -0
  48. package/dist/reporting/execution-tracker.d.ts +10 -1
  49. package/dist/routes/admin-sources.d.ts +18 -0
  50. package/dist/routes/admin.d.ts +8 -0
  51. package/dist/secrets/pg-secret-store.d.ts +9 -0
  52. package/dist/secrets/secret-resolver.d.ts +16 -1
  53. package/dist/server.js +4373 -2322
  54. package/dist/sources/source-store.d.ts +4 -0
  55. package/dist/sources/source-validator.d.ts +2 -0
  56. package/dist/stale-detector/reboot-deadline-sweep.d.ts +29 -0
  57. package/dist/stale-detector/stale-run-detector.d.ts +8 -0
  58. package/dist/standalone.js +3582 -1932
  59. package/dist/worker/in-memory-job-queue.d.ts +17 -0
  60. package/dist/worker/peer-outbox.d.ts +36 -0
  61. package/dist/worker/worker-outbox-relay.d.ts +13 -0
  62. package/dist/ws/agent-handler.d.ts +11 -6
  63. package/dist/ws/dashboard-fleet-handler.d.ts +33 -0
  64. package/dist/ws/dashboard-fleet-write-handler.d.ts +60 -0
  65. package/dist/ws/fleet-runs-on-all.d.ts +16 -0
  66. package/dist/ws/inventory-api.d.ts +17 -0
  67. package/dist/ws/platform-client.d.ts +13 -1
  68. package/dist/ws/test-relay-handlers.d.ts +4 -2
  69. package/installer-image-digests.json +3 -3
  70. package/package.json +4 -4
  71. package/sbom.spdx.json +77 -128
@@ -42,6 +42,23 @@ export declare class InMemoryJobQueue {
42
42
  * labels no longer match, or the agent's gate is not satisfied.
43
43
  */
44
44
  dequeueById(jobId: string, agentLabels: string[], agentMandatoryLabels?: string[]): Promise<QueuedJob | null>;
45
+ /**
46
+ * Dequeue the oldest pending job pinned to a specific agent. Mirrors the
47
+ * DB-backed `JobQueue.dequeueByPinnedAgent` that `Dispatcher.onAgentAvailable`
48
+ * calls — host-fanout children pinned to THIS agent drain before the generic
49
+ * label drain. Like the DB version, a pinned job relaxes the label-subset
50
+ * gate (the agent is its designated runner) and only the JS regex
51
+ * post-filter is applied.
52
+ *
53
+ * The worker receives jobs via direct P2P dispatch and does not currently
54
+ * pin jobs to agents, so in practice no in-memory job carries a
55
+ * `pinnedAgentId` and this returns null — `onAgentAvailable` then falls back
56
+ * to `dequeueForLabels`. Implementing it (rather than leaving it undefined)
57
+ * is mandatory: `Dispatcher.onAgentAvailable` invokes it unconditionally, so
58
+ * its absence threw `TypeError: this.queue.dequeueByPinnedAgent is not a
59
+ * function` as an unhandled rejection that crashed the worker.
60
+ */
61
+ dequeueByPinnedAgent(agentId: string, agentLabels?: string[]): Promise<QueuedJob | null>;
45
62
  /** Return count of pending jobs. */
46
63
  getDepth(): Promise<number>;
47
64
  /** No-op — the job is already tracked in `dispatched` from dequeue. */
@@ -0,0 +1,36 @@
1
+ import type { JobProgress } from '@kici-dev/engine';
2
+ export interface OutboxRecord {
3
+ coordUrl: string;
4
+ message: JobProgress;
5
+ persistedAt: number;
6
+ }
7
+ /** Durable, at-least-once store of terminal job.progress awaiting coordinator ACK. */
8
+ export declare class PeerOutbox {
9
+ private readonly dir;
10
+ private readonly now;
11
+ private readonly records;
12
+ constructor(dir: string, now?: () => number);
13
+ private static coordKey;
14
+ private static recordKey;
15
+ private fileFor;
16
+ loadFromDisk(): Promise<void>;
17
+ enqueue(coordUrl: string, message: JobProgress): Promise<void>;
18
+ /**
19
+ * Synchronous, durably-fsynced enqueue. The terminal job status is on disk
20
+ * before this method returns — there is no async window in which an
21
+ * un-flushed write can be lost if the worker process is killed moments
22
+ * later (e.g. a worker orchestrator that crashes during microVM teardown
23
+ * right after the job completes). The asynchronous {@link enqueue} is
24
+ * fire-and-forget at its call site, so its fsync can be dropped when the
25
+ * event loop never runs again; this variant blocks the (infrequent,
26
+ * once-per-job-terminal) call path until the bytes are durable instead.
27
+ */
28
+ enqueueSync(coordUrl: string, message: JobProgress): void;
29
+ ack(coordUrl: string, runId: string, jobId: string): Promise<void>;
30
+ pendingFor(coordUrl: string): OutboxRecord[];
31
+ prune(ttlMs: number, now?: number): Promise<number>;
32
+ private fsync;
33
+ private fsyncDir;
34
+ private fsyncDirSync;
35
+ }
36
+ //# sourceMappingURL=peer-outbox.d.ts.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Relay glue between the worker's in-memory execution tracker and the durable
3
+ * peer outbox. Extracted so the mapping/replay logic is unit-testable and so
4
+ * the worker bootstrap stays under the function-length cap.
5
+ */
6
+ import { type JobProgress } from '@kici-dev/engine';
7
+ import type { StatusUpdate } from './in-memory-execution-tracker.js';
8
+ import type { PeerOutbox } from './peer-outbox.js';
9
+ /** Map a terminal job-level StatusUpdate to the JobProgress to durably relay; null otherwise. */
10
+ export declare function buildTerminalJobProgress(update: StatusUpdate): JobProgress | null;
11
+ /** Re-send every outbox record destined for `url`. Send failures are retried on the next connect. */
12
+ export declare function replayPending(outbox: PeerOutbox, send: (m: JobProgress) => boolean, url: string): void;
13
+ //# sourceMappingURL=worker-outbox-relay.d.ts.map
@@ -227,12 +227,13 @@ export interface AgentWsHandlerDeps {
227
227
  reason?: string;
228
228
  }>;
229
229
  /**
230
- * Optional callback when an agent blocks a `requireApproval` step. The server
231
- * creates a step-scoped hold from the carried clauses and returns a promise
232
- * that resolves when the hold is approved, rejected, or expired. The handler
233
- * relays the resolution back to the originating agent as a
234
- * `step.approval-resolved` message. The `agentId` lets the server drop the
235
- * pending resolver when the agent disconnects.
230
+ * Optional callback when an agent blocks an `approval` step. The server
231
+ * creates a step-scoped hold from the carried clauses (and the drift
232
+ * `payload` for a `when: 'drift'` gate) and returns a promise that resolves
233
+ * when the hold is approved, rejected, or expired. The handler relays the
234
+ * resolution back to the originating agent as a `step.approval-resolved`
235
+ * message. The `agentId` lets the server drop the pending resolver when the
236
+ * agent disconnects.
236
237
  */
237
238
  onStepApproval?: (agentId: string, msg: {
238
239
  runId: string;
@@ -246,6 +247,10 @@ export interface AgentWsHandlerDeps {
246
247
  }>;
247
248
  reason: string;
248
249
  timeoutSeconds?: number;
250
+ payload?: {
251
+ summaryMarkdown: string;
252
+ drift: unknown;
253
+ };
249
254
  }) => Promise<{
250
255
  outcome: 'approved' | 'rejected' | 'expired';
251
256
  reason?: string;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Orchestrator-side handlers for the fleet-management read path (P2).
3
+ *
4
+ * Each handler answers one Platform->orchestrator read-relay request from
5
+ * `HostRosterStore`, returning the canonical `HostInventoryEntry` shape on the
6
+ * wire. The handlers are pure (they take their dependencies as arguments) so
7
+ * the WS wiring in `server.ts` stays a thin adapter and the logic is unit
8
+ * testable without a live DB / Platform connection.
9
+ */
10
+ import type { Kysely } from 'kysely';
11
+ import type { Database } from '../db/types.js';
12
+ import { HostRosterStore } from '../agent/host-roster.js';
13
+ import type { DashboardFleetHostsResponse, DashboardFleetHostResponse, DashboardFleetPreviewResponse, LabelMatcher, OnUnreachableMode } from '@kici-dev/engine';
14
+ /** A workflow's resolved runsOnAll predicate, or null when it has none. */
15
+ export interface ResolvedRunsOnAll {
16
+ include: readonly (readonly LabelMatcher[])[];
17
+ exclude: readonly LabelMatcher[];
18
+ onUnreachable: OnUnreachableMode;
19
+ }
20
+ export interface FleetHandlerDeps {
21
+ db: Kysely<Database>;
22
+ rosterStore: HostRosterStore;
23
+ rosterGraceMs: number;
24
+ /** Resolve a workflow's runsOnAll predicate + onUnreachable, or null. */
25
+ resolveRunsOnAll: (workflowName: string) => Promise<ResolvedRunsOnAll | null>;
26
+ }
27
+ /** Roster: every declared/live host as a `HostInventoryEntry`. */
28
+ export declare function handleFleetHostsRequest(deps: FleetHandlerDeps, requestId: string): Promise<DashboardFleetHostsResponse>;
29
+ /** Host detail: one host (or null) plus its most-recent pinned runs. */
30
+ export declare function handleFleetHostRequest(deps: FleetHandlerDeps, requestId: string, agentId: string): Promise<DashboardFleetHostResponse>;
31
+ /** runsOnAll preview: matched hosts + the fan-out policy + estimated child count. */
32
+ export declare function handleFleetPreviewRequest(deps: FleetHandlerDeps, requestId: string, workflowName: string): Promise<DashboardFleetPreviewResponse>;
33
+ //# sourceMappingURL=dashboard-fleet-handler.d.ts.map
@@ -0,0 +1,60 @@
1
+ import type { FleetHostDeclareRequest, FleetHostRemoveRequest } from '@kici-dev/engine';
2
+ import type { Kysely } from 'kysely';
3
+ import type { Database } from '../db/types.js';
4
+ import type { HostRosterStore } from '../agent/host-roster.js';
5
+ import type { AccessLogWriter } from '../audit/access-log.js';
6
+ interface DashboardFleetWriteHandlerDeps {
7
+ /** Send a response message back to Platform over the WS connection. */
8
+ send: (msg: unknown) => void;
9
+ /** The orchestrator host roster store (declare / remove). */
10
+ rosterStore: HostRosterStore;
11
+ /** Database — required for dashboard-write policy lookups. */
12
+ db: Kysely<Database>;
13
+ /** Access log writer — records one row per mutation with actor attribution. */
14
+ accessLog?: AccessLogWriter;
15
+ /** Org ID for access_log rows (null when the orchestrator isn't org-scoped). */
16
+ orgId?: string | null;
17
+ /** Routing key for access_log rows (null when not run-scoped). */
18
+ routingKey?: string | null;
19
+ }
20
+ /** Messages this handler owns. */
21
+ type FleetWriteMessage = FleetHostDeclareRequest | FleetHostRemoveRequest;
22
+ /**
23
+ * Handler for the fleet host-write WS messages. Dispatches by type and calls
24
+ * the host roster store behind the dashboard-write policy gate.
25
+ */
26
+ export declare class DashboardFleetWriteHandler {
27
+ private readonly deps;
28
+ private orgId;
29
+ private routingKey;
30
+ private readonly accessLog;
31
+ constructor(deps: DashboardFleetWriteHandlerDeps);
32
+ /**
33
+ * Update the bound orgId + routingKey. Called from server.ts after resolving
34
+ * the single tenant org from the `sources` / `generic_webhook_sources` table.
35
+ */
36
+ setOrgContext(orgId: string | null, routingKey: string | null): void;
37
+ /**
38
+ * Defense-in-depth dashboard-write policy gate. Returns true when the
39
+ * operation is allowed and the caller should proceed. Returns false when the
40
+ * policy is disabled — also records a `denied` access_log row and emits a
41
+ * structured `operation_disabled` envelope on the WS.
42
+ *
43
+ * Fails open when no org is bound — the orch hasn't resolved a customer yet.
44
+ */
45
+ private enforcePolicy;
46
+ /**
47
+ * Write an access_log row for a handler invocation. Best-effort; the writer
48
+ * swallows failures.
49
+ */
50
+ private recordAccess;
51
+ /**
52
+ * Route a fleet host-write message to the appropriate handler. Returns true
53
+ * if the message was handled, false otherwise.
54
+ */
55
+ handleMessage(msg: FleetWriteMessage): Promise<boolean>;
56
+ private handleDeclare;
57
+ private handleRemove;
58
+ }
59
+ export {};
60
+ //# sourceMappingURL=dashboard-fleet-write-handler.d.ts.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Resolve a workflow's `runsOnAll` host-fan-out predicate from the orchestrator's
3
+ * persisted registrations, for the fleet runsOnAll-preview read path.
4
+ *
5
+ * The orchestrator stores each registered workflow's full lock entry in
6
+ * `workflow_registrations.lock_entry` (JSON). This reader parses that entry,
7
+ * finds the first static job carrying a `runsOnAll` predicate, and returns its
8
+ * `{ include, exclude, onUnreachable }` — or null when no registered workflow of
9
+ * that name declares a host fan-out.
10
+ */
11
+ import type { Kysely } from 'kysely';
12
+ import type { Database } from '../db/types.js';
13
+ import type { ResolvedRunsOnAll } from './dashboard-fleet-handler.js';
14
+ /** Find the resolved runsOnAll predicate for a workflow by name, or null. */
15
+ export declare function resolveWorkflowRunsOnAll(db: Kysely<Database>, workflowName: string): Promise<ResolvedRunsOnAll | null>;
16
+ //# sourceMappingURL=fleet-runs-on-all.d.ts.map
@@ -0,0 +1,17 @@
1
+ import { type HostInventoryEntry } from '@kici-dev/engine';
2
+ import type { HostRosterStore } from '../agent/host-roster.js';
3
+ /** Store surface the inventory handlers need (kept narrow for testability). */
4
+ export interface InventoryApiDeps {
5
+ rosterStore: Pick<HostRosterStore, 'queryInventory' | 'getInventory'>;
6
+ /** Roster grace window (ms) — the same value runsOnAll's `findMatching` uses. */
7
+ graceMs: number;
8
+ }
9
+ /**
10
+ * Build the `inventory.query` handler. Validates the optional label selector
11
+ * (`include` OR-of-AND groups + `exclude`); an empty selector ⇒ all hosts.
12
+ * Property filtering is done client-side in the workflow.
13
+ */
14
+ export declare function createInventoryQueryHandler(deps: InventoryApiDeps): (agentId: string, params: Record<string, unknown>) => Promise<HostInventoryEntry[]>;
15
+ /** Build the `inventory.get` handler — single-host lookup, null when absent. */
16
+ export declare function createInventoryGetHandler(deps: InventoryApiDeps): (agentId: string, params: Record<string, unknown>) => Promise<HostInventoryEntry | null>;
17
+ //# sourceMappingURL=inventory-api.d.ts.map
@@ -1,4 +1,4 @@
1
- import { type OrchestratorToPlatformMessage, type WebhookRelay, type WebhookRelayResult, type TrustPolicyUpdate, type StaleCheckrunCleanup, type DashboardRunDetailRequest, type DashboardRunsListRequest, type DashboardRunsFiltersRequest, type DashboardSourcesListRequest, type DashboardStepLogsRequest, type DashboardAttestationsListRequest, type DashboardOrchLogsRequest, type RunRerunRequest, type ManualScheduleRequest, type RunCancelRequest, type DashboardPayloadRequest, type DashboardPlatformToOrchMessage, type TestRelayRequest, type DashboardDiagnosticsRequest, type DashboardScalerCapacityRequest, type DashboardScalerAgentsRequest, type JoinRequest, type JoinResponse, type OrchCapabilities, type OrchRole } from '@kici-dev/engine';
1
+ import { type OrchestratorToPlatformMessage, type WebhookRelay, type WebhookRelayResult, type TrustPolicyUpdate, type StaleCheckrunCleanup, type DashboardRunDetailRequest, type DashboardRunsListRequest, type DashboardRunsFiltersRequest, type DashboardSourcesListRequest, type DashboardStepLogsRequest, type DashboardAttestationsListRequest, type DashboardOrchLogsRequest, type RunRerunRequest, type ManualScheduleRequest, type RunCancelRequest, type DashboardPayloadRequest, type DashboardPlatformToOrchMessage, type TestRelayRequest, type DashboardDiagnosticsRequest, type DashboardScalerCapacityRequest, type DashboardScalerAgentsRequest, type DashboardFleetHostsRequest, type DashboardFleetHostRequest, type DashboardFleetPreviewRequest, type JoinRequest, type JoinResponse, type DeploymentIdentity, type OrchCapabilities, type OrchRole } from '@kici-dev/engine';
2
2
  import { RelayBufferRegistry, type RelayStartMeta } from '../webhook/relay-buffer.js';
3
3
  /**
4
4
  * Verification + processing outcome returned by the chunked relay path's
@@ -58,6 +58,8 @@ export interface PlatformClientOptions {
58
58
  mode?: string;
59
59
  /** Scaler backends configured (e.g. ["container", "firecracker"]). Sent in source.register for diagnostics. */
60
60
  scalerBackends?: string[];
61
+ /** How the orchestrator process was deployed. Sent in source.register so the dashboard can build the correct kici-admin invocation. */
62
+ deployment?: DeploymentIdentity;
61
63
  /** Whether this orchestrator has S3 log storage configured. Sent in source.register for pool validation. */
62
64
  s3LogAccess?: boolean;
63
65
  /** Queue timeout in ms. Sent in source.register for Platform safety-net GC. */
@@ -134,6 +136,12 @@ export interface PlatformClientOptions {
134
136
  onDashboardScalerCapacity?: (msg: DashboardScalerCapacityRequest) => void;
135
137
  /** Optional callback for dashboard scaler agents requests from Platform. */
136
138
  onDashboardScalerAgents?: (msg: DashboardScalerAgentsRequest) => void;
139
+ /** Optional callback for fleet roster requests from Platform. */
140
+ onFleetHosts?: (msg: DashboardFleetHostsRequest) => void;
141
+ /** Optional callback for fleet host-detail requests from Platform. */
142
+ onFleetHost?: (msg: DashboardFleetHostRequest) => void;
143
+ /** Optional callback for fleet runsOnAll-preview requests from Platform. */
144
+ onFleetPreview?: (msg: DashboardFleetPreviewRequest) => void;
137
145
  /** Optional callback for trust policy updates pushed from Platform. */
138
146
  onTrustPolicyUpdate?: (msg: TrustPolicyUpdate) => void;
139
147
  /** Optional callback for stale check run cleanup requests from Platform. */
@@ -192,6 +200,7 @@ export declare class PlatformClient {
192
200
  private readonly version?;
193
201
  private readonly mode?;
194
202
  private readonly scalerBackends?;
203
+ private readonly deployment?;
195
204
  private readonly s3LogAccess?;
196
205
  private readonly queueTimeoutMs?;
197
206
  private readonly heartbeatIntervalMs;
@@ -216,6 +225,9 @@ export declare class PlatformClient {
216
225
  private readonly onDashboardDiagnostics?;
217
226
  private readonly onDashboardScalerCapacity?;
218
227
  private readonly onDashboardScalerAgents?;
228
+ private readonly onFleetHosts?;
229
+ private readonly onFleetHost?;
230
+ private readonly onFleetPreview?;
219
231
  private readonly onTrustPolicyUpdate?;
220
232
  private readonly onStaleCheckrunCleanup?;
221
233
  private readonly onJoinRequest?;
@@ -16,10 +16,12 @@ import type { Database } from '../db/types.js';
16
16
  import type { CacheStorage } from '../storage/types.js';
17
17
  import type { LogStorage } from '../reporting/log-storage.js';
18
18
  import type { AccessLogWriter } from '../audit/access-log.js';
19
- import { type TestPipelineDeps } from '../pipeline/test-pipeline.js';
19
+ import type { ProcessingDeps } from '../pipeline/processor.js';
20
20
  /** Dependencies shared by all five test-relay handlers. */
21
- export interface TestRelayHandlerDeps extends TestPipelineDeps {
21
+ export interface TestRelayHandlerDeps extends ProcessingDeps {
22
22
  db: Kysely<Database>;
23
+ /** Agent registry — required here: the cancel handler resolves the job's agent. */
24
+ agentRegistry: NonNullable<ProcessingDeps['agentRegistry']>;
23
25
  cacheStorage?: CacheStorage;
24
26
  logStorage?: LogStorage;
25
27
  accessLog?: AccessLogWriter;
@@ -1,7 +1,7 @@
1
1
  {
2
- "version": "0.1.20",
2
+ "version": "0.1.22",
3
3
  "images": {
4
- "kici-agent": "sha256:ff28cf8e8fd0405b63797dbd8a972ac328184f53f18fb20443220758769f5fec",
5
- "kici-orchestrator": "sha256:f8e27842e455c0fbfa7df564c8adc6505054110610f20b35618c56841bbc905f"
4
+ "kici-agent": "sha256:7d3b048a45f46f51b843944ce106514094f2aac428ffe3aa35d8a97b174b553f",
5
+ "kici-orchestrator": "sha256:98e3b1ef13a3d28844b48ecbfbf26b982fc6fe12292cf138959721c08b48eabe"
6
6
  }
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kici-dev/orchestrator",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
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",
@@ -86,8 +86,8 @@
86
86
  "ws": "^8.21.0",
87
87
  "yaml": "^2.9.0",
88
88
  "zod": "^4.4.3",
89
- "@kici-dev/shared": "0.1.20",
90
- "@kici-dev/engine": "0.1.20"
89
+ "@kici-dev/engine": "0.1.22",
90
+ "@kici-dev/shared": "0.1.22"
91
91
  },
92
92
  "kici": {
93
93
  "metrics": {
@@ -101,7 +101,7 @@
101
101
  "@types/archiver": "^8.0.0",
102
102
  "@types/dockerode": "^4.0.1",
103
103
  "kysely-ctl": "^0.21.0",
104
- "@kici-dev/agent": "0.1.20"
104
+ "@kici-dev/agent": "0.1.22"
105
105
  },
106
106
  "scripts": {
107
107
  "build": "node ../../scripts/build-service.mjs && tsc --emitDeclarationOnly",