@kici-dev/orchestrator 0.1.14 → 0.1.15

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 (58) hide show
  1. package/README.md +13 -1
  2. package/dist/__test-helpers__/mock-db.d.ts +2 -0
  3. package/dist/agent/dispatcher.d.ts +110 -6
  4. package/dist/agent/registry.d.ts +14 -0
  5. package/dist/app.d.ts +11 -0
  6. package/dist/cache/agent-job-failed-error.d.ts +13 -0
  7. package/dist/cache/dispatch-cache-ref-tracker.d.ts +45 -0
  8. package/dist/cache/index.d.ts +2 -0
  9. package/dist/cache/user-cache.d.ts +116 -0
  10. package/dist/cancel/cancel-run.d.ts +56 -0
  11. package/dist/cli/commands/environment.d.ts +1 -0
  12. package/dist/cli.js +523 -111
  13. package/dist/cluster/peer-registry.d.ts +6 -0
  14. package/dist/config/schema.d.ts +4 -0
  15. package/dist/config.d.ts +13 -0
  16. package/dist/dashboard/handler.d.ts +92 -1
  17. package/dist/db/migrations/026_event_log_lockfile_corrupt.d.ts +11 -0
  18. package/dist/db/migrations/027_workflow_timeout.d.ts +20 -0
  19. package/dist/db/migrations/028_org_settings_user_cache.d.ts +4 -0
  20. package/dist/db/migrations/029_dispatch_queue_attempts.d.ts +16 -0
  21. package/dist/db/migrations/030_held_runs_env_set_null.d.ts +13 -0
  22. package/dist/db/migrations/031_dispatch_queue_ack_deadline.d.ts +19 -0
  23. package/dist/db/migrations/032_org_settings_dispatch_ack_timeout.d.ts +14 -0
  24. package/dist/db/types.d.ts +37 -2
  25. package/dist/environments/environment-store.d.ts +14 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.js +362 -40
  28. package/dist/lockfile-cache.d.ts +1 -1
  29. package/dist/metrics/prometheus.d.ts +8 -0
  30. package/dist/orchestrator-core.d.ts +4 -1
  31. package/dist/pipeline/dispatch-matched-workflow.d.ts +9 -0
  32. package/dist/pipeline/inline-eval.d.ts +17 -2
  33. package/dist/pipeline/process-webhook.d.ts +19 -0
  34. package/dist/pipeline/processor.d.ts +6 -1
  35. package/dist/pipeline/test-pipeline.d.ts +10 -0
  36. package/dist/providers/github/lock-file.d.ts +1 -1
  37. package/dist/providers/internal/lock-file-fetcher.d.ts +3 -2
  38. package/dist/queue/job-queue.d.ts +53 -1
  39. package/dist/reporting/execution-tracker.d.ts +3 -1
  40. package/dist/routes/admin-environments.d.ts +1 -0
  41. package/dist/scaler/bare-metal-backend.d.ts +1 -0
  42. package/dist/scaler/container-backend.d.ts +3 -2
  43. package/dist/scaler/firecracker-backend.d.ts +17 -0
  44. package/dist/scaler/manager.d.ts +2 -0
  45. package/dist/scaler/nftables.d.ts +25 -3
  46. package/dist/scaler/types.d.ts +26 -1
  47. package/dist/server.js +3981 -1421
  48. package/dist/stale-detector/workflow-deadline-detector.d.ts +49 -0
  49. package/dist/standalone.js +16819 -14768
  50. package/dist/storage/filesystem.d.ts +12 -3
  51. package/dist/storage/s3.d.ts +17 -4
  52. package/dist/storage/types.d.ts +25 -5
  53. package/dist/worker/in-memory-job-queue.d.ts +40 -7
  54. package/dist/ws/agent-handler.d.ts +13 -0
  55. package/dist/ws/dashboard-env-handler.d.ts +1 -0
  56. package/dist/ws/platform-client.d.ts +10 -1
  57. package/package.json +13 -10
  58. package/sbom.spdx.json +47 -47
@@ -46,14 +46,23 @@ export declare class FilesystemCacheStorage implements CacheStorage {
46
46
  private readMeta;
47
47
  private writeMeta;
48
48
  put(key: string, data: Buffer | string): Promise<void>;
49
- get(key: string): Promise<Buffer | null>;
50
- has(key: string): Promise<boolean>;
49
+ get(key: string, ttlMsOverride?: number): Promise<Buffer | null>;
50
+ has(key: string, ttlMsOverride?: number): Promise<boolean>;
51
51
  delete(key: string): Promise<boolean>;
52
52
  touch(key: string): Promise<void>;
53
- getUrl(key: string): Promise<string | null>;
53
+ getUrl(key: string, ttlMsOverride?: number): Promise<string | null>;
54
54
  getUploadUrl(key: string): Promise<string>;
55
55
  getInternalUploadUrl(key: string): Promise<string>;
56
56
  initMeta(key: string): Promise<void>;
57
+ list(subPrefix: string): Promise<string[]>;
58
+ copy(srcKey: string, destKey: string): Promise<void>;
59
+ /**
60
+ * Recursively collect data files under `dir`, returning each as a cache key
61
+ * relative to `basePath` paired with its mtime. Metadata sidecars
62
+ * (`*.meta.json`) and the atomic-write temp files (`*.tmp-*`) are skipped so
63
+ * `list()` only surfaces real cache objects.
64
+ */
65
+ private walkDataFiles;
57
66
  private signedUrl;
58
67
  private deleteFiles;
59
68
  }
@@ -26,6 +26,15 @@ export interface S3CacheStorageOptions {
26
26
  * need a container-routable address (e.g., container DNS name).
27
27
  */
28
28
  externalEndpoint?: string;
29
+ /**
30
+ * Separate endpoint for the host-facing (CLI) pre-signed upload URL.
31
+ * The CLI running `kici run remote` is on the developer's host, which may
32
+ * reach the bucket at a different address than the orchestrator's own
33
+ * `endpoint` (e.g. an orchestrator in a container uses the compose DNS name
34
+ * while the host CLI uses localhost). When unset, `getInternalUploadUrl`
35
+ * falls back to the internal `endpoint` client (current behavior).
36
+ */
37
+ uploadEndpoint?: string;
29
38
  /** Use path-style access instead of virtual-hosted-style (required for most S3-compatible services) */
30
39
  forcePathStyle?: boolean;
31
40
  }
@@ -33,13 +42,15 @@ export declare class S3CacheStorage implements CacheStorage {
33
42
  private readonly client;
34
43
  /** Separate client for pre-signed URL generation (uses externalEndpoint if configured). */
35
44
  private readonly presignClient;
45
+ /** Separate client for the host CLI's pre-signed upload URL (uses uploadEndpoint if configured). */
46
+ private readonly uploadPresignClient;
36
47
  private readonly bucket;
37
48
  private readonly prefix;
38
49
  private readonly ttlMs;
39
50
  constructor(options: S3CacheStorageOptions);
40
51
  /** Build the full S3 object key from a cache key. */
41
52
  private objectKey;
42
- /** Check if metadata indicates an expired item. */
53
+ /** Check if metadata indicates an expired item, honoring a per-op TTL override. */
43
54
  private isExpired;
44
55
  /**
45
56
  * Read metadata from an S3 object's custom headers.
@@ -54,14 +65,16 @@ export declare class S3CacheStorage implements CacheStorage {
54
65
  /** Check if an error is a "not found" error (NoSuchKey, NotFound, 404). */
55
66
  private isNotFoundError;
56
67
  put(key: string, data: Buffer | string): Promise<void>;
57
- get(key: string): Promise<Buffer | null>;
58
- has(key: string): Promise<boolean>;
68
+ get(key: string, ttlMsOverride?: number): Promise<Buffer | null>;
69
+ has(key: string, ttlMsOverride?: number): Promise<boolean>;
59
70
  delete(key: string): Promise<boolean>;
60
71
  touch(key: string): Promise<void>;
61
- getUrl(key: string): Promise<string | null>;
72
+ getUrl(key: string, ttlMsOverride?: number): Promise<string | null>;
62
73
  getUploadUrl(key: string): Promise<string>;
63
74
  getInternalUploadUrl(key: string): Promise<string>;
64
75
  initMeta(key: string): Promise<void>;
76
+ list(subPrefix: string): Promise<string[]>;
77
+ copy(srcKey: string, destKey: string): Promise<void>;
65
78
  /** Delete an S3 object. Idempotent (doesn't error if missing). */
66
79
  private deleteObject;
67
80
  }
@@ -29,10 +29,18 @@ export interface CacheMetadata {
29
29
  export interface CacheStorage {
30
30
  /** Store a value under the given key. Overwrites if key already exists. */
31
31
  put(key: string, data: Buffer | string): Promise<void>;
32
- /** Retrieve a value by key. Returns null if not found or expired. */
33
- get(key: string): Promise<Buffer | null>;
34
- /** Check if a key exists and is not expired, without retrieving data. */
35
- has(key: string): Promise<boolean>;
32
+ /**
33
+ * Retrieve a value by key. Returns null if not found or expired.
34
+ * `ttlMsOverride` applies a per-operation TTL instead of the backend's
35
+ * constructor-time default (lets per-org cache TTLs override the
36
+ * cluster-wide default without re-constructing the backend).
37
+ */
38
+ get(key: string, ttlMsOverride?: number): Promise<Buffer | null>;
39
+ /**
40
+ * Check if a key exists and is not expired, without retrieving data.
41
+ * `ttlMsOverride` applies a per-operation TTL (see `get`).
42
+ */
43
+ has(key: string, ttlMsOverride?: number): Promise<boolean>;
36
44
  /** Delete a key. Returns true if the key existed (even if expired). */
37
45
  delete(key: string): Promise<boolean>;
38
46
  /** Update lastAccessedAt to now, refreshing the TTL. No-op if key doesn't exist. */
@@ -40,8 +48,9 @@ export interface CacheStorage {
40
48
  /**
41
49
  * Get a pre-signed download URL for the cached item.
42
50
  * Returns null if not found or expired.
51
+ * `ttlMsOverride` applies a per-operation TTL (see `get`).
43
52
  */
44
- getUrl(key: string): Promise<string | null>;
53
+ getUrl(key: string, ttlMsOverride?: number): Promise<string | null>;
45
54
  /**
46
55
  * Generate a pre-signed PUT URL for direct agent upload.
47
56
  * Uses the external endpoint (container-routable) when configured.
@@ -61,6 +70,15 @@ export interface CacheStorage {
61
70
  * Sets created-at and last-accessed-at to now.
62
71
  */
63
72
  initMeta(key: string): Promise<void>;
73
+ /**
74
+ * List object keys (relative to the configured prefix) under a sub-prefix,
75
+ * newest first (by createdAt/last-modified metadata; falls back to
76
+ * lexicographic when metadata is unavailable). Returns full cache keys
77
+ * (without the storage prefix). Returns an empty array when nothing matches.
78
+ */
79
+ list(subPrefix: string): Promise<string[]>;
80
+ /** Server-side copy from one cache key to another (used for atomic temp -> final commit). */
81
+ copy(srcKey: string, destKey: string): Promise<void>;
64
82
  }
65
83
  import type { SharedS3Config } from '@kici-dev/shared';
66
84
  /**
@@ -70,6 +88,8 @@ import type { SharedS3Config } from '@kici-dev/shared';
70
88
  export type S3CacheStorageConfig = SharedS3Config & {
71
89
  type: 's3';
72
90
  ttlMs: number;
91
+ /** Host-facing pre-signed upload endpoint (see S3CacheStorageOptions.uploadEndpoint). */
92
+ uploadEndpoint?: string;
73
93
  };
74
94
  /**
75
95
  * Filesystem backend config. Stores blobs as files under `basePath` and
@@ -12,6 +12,10 @@
12
12
  import { DispatchQueueStatus, type QueuedJobInput, type QueuedJob } from '../queue/job-queue.js';
13
13
  export declare class InMemoryJobQueue {
14
14
  private readonly jobs;
15
+ /** Jobs handed to an agent, retained so requeue / lookups can restore them. */
16
+ private readonly dispatched;
17
+ /** Per-job re-dispatch counter (parity with dispatch_queue.dispatch_attempts). */
18
+ private readonly attempts;
15
19
  /** Enqueue a job in memory and return its ID. */
16
20
  enqueue(input: QueuedJobInput): Promise<string>;
17
21
  /**
@@ -40,20 +44,49 @@ export declare class InMemoryJobQueue {
40
44
  dequeueById(jobId: string, agentLabels: string[], agentMandatoryLabels?: string[]): Promise<QueuedJob | null>;
41
45
  /** Return count of pending jobs. */
42
46
  getDepth(): Promise<number>;
43
- /** No-op — workers don't track dispatch status in a queue. */
47
+ /** No-op — the job is already tracked in `dispatched` from dequeue. */
44
48
  markDispatched(_jobId: string, _agentId: string): Promise<void>;
45
- /** No-op. */
46
- markFailed(_jobId: string, _reason: string): Promise<void>;
47
- /** No-op. */
48
- markCompleted(_jobId: string): Promise<void>;
49
+ /** Drop the dispatched entry — the job reached a terminal state. */
50
+ markFailed(jobId: string, _reason: string): Promise<void>;
51
+ /** Drop the dispatched entry — the job completed. */
52
+ markCompleted(jobId: string): Promise<void>;
49
53
  /** No-op. */
50
54
  markRecovering(_jobId: string): Promise<void>;
55
+ /**
56
+ * No-op. The worker's dispatch-ack deadline lives entirely in the
57
+ * in-memory timer; HA-safe persistence belongs to the coord's DB-backed
58
+ * queue, not the worker's in-memory queue.
59
+ */
60
+ setAckDeadline(_jobId: string, _deadline: Date, _agentId: string): Promise<void>;
61
+ /** No-op (see setAckDeadline). */
62
+ clearAckDeadline(_jobId: string): Promise<void>;
63
+ /** Always empty — the worker never rehydrates ack timers from a DB. */
64
+ getDispatchedAwaitingAck(): Promise<Array<{
65
+ id: string;
66
+ runId: string;
67
+ agentId: string | null;
68
+ deadline: Date;
69
+ }>>;
70
+ /** Always empty — the worker is never the leader running the ack sweep. */
71
+ listExpiredAckDeadlines(_now: Date): Promise<Array<{
72
+ id: string;
73
+ runId: string;
74
+ agentId: string | null;
75
+ }>>;
76
+ /**
77
+ * Return a dispatched job to pending for re-dispatch, bumping its attempt
78
+ * counter. Mirrors the DB-backed `JobQueue.requeue`. Returns the new
79
+ * attempt count, or null when the job is not currently dispatched.
80
+ */
81
+ requeue(jobId: string): Promise<number | null>;
82
+ /** Full job lookup across pending and dispatched jobs. */
83
+ getFullJobById(jobId: string): Promise<QueuedJob | null>;
51
84
  /** Return all pending jobs. */
52
85
  getPendingJobs(): Promise<QueuedJob[]>;
53
86
  /** Always returns empty array. */
54
87
  getDispatchedJobIdsByRunId(_runId: string): Promise<string[]>;
55
- /** Always returns null. */
56
- getJobById(_jobId: string): Promise<{
88
+ /** Lookup across pending and dispatched jobs (id / runId / status). */
89
+ getJobById(jobId: string): Promise<{
57
90
  id: string;
58
91
  runId: string;
59
92
  status: DispatchQueueStatus;
@@ -23,6 +23,8 @@ import type { AgentTokenStore } from '../agent/token-store.js';
23
23
  import type { OwnershipTracker } from '../agent/ownership-tracker.js';
24
24
  import type { SourceCache } from '../cache/source-cache.js';
25
25
  import type { DepCache } from '../cache/dep-cache.js';
26
+ import type { UserCache } from '../cache/user-cache.js';
27
+ import type { DispatchCacheRefTracker } from '../cache/dispatch-cache-ref-tracker.js';
26
28
  import type { PendingBuildTracker } from '../cache/pending-builds.js';
27
29
  import type { PendingInitTracker } from '../cache/pending-inits.js';
28
30
  import type { PendingDynamicTracker } from '../cache/pending-dynamics.js';
@@ -166,6 +168,17 @@ export interface AgentWsHandlerDeps {
166
168
  sourceCache?: SourceCache;
167
169
  /** Dep cache for generating pre-signed upload URLs. */
168
170
  depCache?: DepCache;
171
+ /** User-facing cache for serving restore/save requests from the sandbox. */
172
+ userCache?: UserCache;
173
+ /**
174
+ * Server-side jobId -> user-cache-namespace store. The orchestrator records
175
+ * `{orgId, repoId, cacheRefScope, runId}` per job at dispatch time; the
176
+ * `cache.user.*` handlers resolve the ref from HERE (keyed by the wire jobId),
177
+ * NEVER from the wire message body — a `cache.user.*` message carries only a
178
+ * `jobId` + `key`, so an agent can name a job it owns but can never influence
179
+ * which org/repo/scope that job resolves to.
180
+ */
181
+ dispatchCacheRefs?: DispatchCacheRefTracker;
169
182
  /** Cache storage for setting metadata after upload completion. */
170
183
  cacheStorage?: CacheStorage;
171
184
  /** Optional rate limiter configuration. */
@@ -81,6 +81,7 @@ export declare class DashboardEnvHandler {
81
81
  private handleEnvGet;
82
82
  private handleEnvCreate;
83
83
  private handleEnvUpdate;
84
+ private handleTestAccessSet;
84
85
  private handleEnvDelete;
85
86
  private handleVarsList;
86
87
  private handleVarSet;
@@ -1,4 +1,4 @@
1
- import { type OrchestratorToPlatformMessage, type WebhookRelay, type WebhookRelayResult, type TrustPolicyUpdate, type StaleCheckrunCleanup, type DashboardRunDetailRequest, type DashboardStepLogsRequest, type DashboardOrchLogsRequest, type RunRerunRequest, type ManualScheduleRequest, type RunCancelRequest, type DashboardPayloadRequest, type DashboardPlatformToOrchMessage, 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 DashboardOrchLogsRequest, type RunRerunRequest, type ManualScheduleRequest, type RunCancelRequest, type DashboardPayloadRequest, type DashboardPlatformToOrchMessage, type DashboardDiagnosticsRequest, type DashboardScalerCapacityRequest, type DashboardScalerAgentsRequest, type JoinRequest, type JoinResponse, 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
@@ -89,6 +89,12 @@ export interface PlatformClientOptions {
89
89
  onAuthenticated?: () => void;
90
90
  /** Optional callback for dashboard run detail requests from Platform. */
91
91
  onDashboardRunDetail?: (msg: DashboardRunDetailRequest) => void;
92
+ /** Optional callback for dashboard runs.list (operator console) requests from Platform. */
93
+ onDashboardRunsList?: (msg: DashboardRunsListRequest) => void;
94
+ /** Optional callback for dashboard runs.filters (operator console) requests from Platform. */
95
+ onDashboardRunsFilters?: (msg: DashboardRunsFiltersRequest) => void;
96
+ /** Optional callback for dashboard sources.list (operator console) requests from Platform. */
97
+ onDashboardSourcesList?: (msg: DashboardSourcesListRequest) => void;
92
98
  /** Optional callback for dashboard step logs requests from Platform. */
93
99
  onDashboardStepLogs?: (msg: DashboardStepLogsRequest) => void;
94
100
  /** Optional callback for run re-run requests from Platform (dashboard action). */
@@ -175,6 +181,9 @@ export declare class PlatformClient {
175
181
  private readonly onPeerDiscover?;
176
182
  private readonly onAuthenticated?;
177
183
  private readonly onDashboardRunDetail?;
184
+ private readonly onDashboardRunsList?;
185
+ private readonly onDashboardRunsFilters?;
186
+ private readonly onDashboardSourcesList?;
178
187
  private readonly onDashboardStepLogs?;
179
188
  private readonly onRunRerun?;
180
189
  private readonly onManualSchedule?;
package/package.json CHANGED
@@ -1,19 +1,22 @@
1
1
  {
2
2
  "name": "@kici-dev/orchestrator",
3
- "version": "0.1.14",
3
+ "version": "0.1.15",
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
- "kici",
7
6
  "ci",
8
- "cd",
9
- "ci-cd",
7
+ "cicd",
8
+ "continuous-integration",
10
9
  "typescript",
11
- "workflows",
12
- "devops",
10
+ "workflow",
13
11
  "orchestrator",
14
- "webhook",
15
12
  "self-hosted"
16
13
  ],
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/kici-dev/kici-public.git",
17
+ "directory": "packages/orchestrator"
18
+ },
19
+ "bugs": "https://github.com/kici-dev/kici-public/issues",
17
20
  "homepage": "https://kici.dev",
18
21
  "author": {
19
22
  "name": "KiCI",
@@ -82,8 +85,8 @@
82
85
  "ws": "^8.20.0",
83
86
  "yaml": "^2.8.3",
84
87
  "zod": "^4.3.6",
85
- "@kici-dev/engine": "0.1.14",
86
- "@kici-dev/shared": "0.1.14"
88
+ "@kici-dev/engine": "0.1.15",
89
+ "@kici-dev/shared": "0.1.15"
87
90
  },
88
91
  "kici": {
89
92
  "metrics": {
@@ -97,7 +100,7 @@
97
100
  "@types/archiver": "^7.0.0",
98
101
  "@types/dockerode": "^4.0.1",
99
102
  "kysely-ctl": "^0.21.0",
100
- "@kici-dev/agent": "0.1.14"
103
+ "@kici-dev/agent": "0.1.15"
101
104
  },
102
105
  "scripts": {
103
106
  "build": "node ../../scripts/build-service.mjs && tsc --emitDeclarationOnly",
package/sbom.spdx.json CHANGED
@@ -2,10 +2,10 @@
2
2
  "spdxVersion": "SPDX-2.3",
3
3
  "dataLicense": "CC0-1.0",
4
4
  "SPDXID": "SPDXRef-DOCUMENT",
5
- "name": "@kici-dev/orchestrator@0.1.14",
6
- "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Forchestrator/0.1.14/b08fb02f-68c1-4953-93f4-3cacfa4c42be",
5
+ "name": "@kici-dev/orchestrator@0.1.15",
6
+ "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Forchestrator/0.1.15/098f67ed-8ddb-4745-a28c-e2c731216540",
7
7
  "creationInfo": {
8
- "created": "2026-05-30T03:06:21Z",
8
+ "created": "2026-06-11T03:03:47Z",
9
9
  "creators": [
10
10
  "Tool: kici-sbom-generator"
11
11
  ]
@@ -1477,9 +1477,9 @@
1477
1477
  "homepage": "https://ericsmekens.github.io/jsep/tree/master/packages/regex#readme"
1478
1478
  },
1479
1479
  {
1480
- "SPDXID": "SPDXRef-Package--kici-dev-core-0.1.14",
1480
+ "SPDXID": "SPDXRef-Package--kici-dev-core-0.1.15",
1481
1481
  "name": "@kici-dev/core",
1482
- "versionInfo": "0.1.14",
1482
+ "versionInfo": "0.1.15",
1483
1483
  "downloadLocation": "NOASSERTION",
1484
1484
  "filesAnalyzed": false,
1485
1485
  "licenseConcluded": "NOASSERTION",
@@ -1490,16 +1490,16 @@
1490
1490
  {
1491
1491
  "referenceCategory": "PACKAGE-MANAGER",
1492
1492
  "referenceType": "purl",
1493
- "referenceLocator": "pkg:npm/%40kici-dev/core@0.1.14"
1493
+ "referenceLocator": "pkg:npm/%40kici-dev/core@0.1.15"
1494
1494
  }
1495
1495
  ],
1496
1496
  "description": "Light shared utilities for the KiCI stack (logging, errors, formatting, crypto, zx init, the TypeScript ESM loader hook). No server-side dependencies.",
1497
1497
  "homepage": "https://kici.dev"
1498
1498
  },
1499
1499
  {
1500
- "SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.14",
1500
+ "SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.15",
1501
1501
  "name": "@kici-dev/engine",
1502
- "versionInfo": "0.1.14",
1502
+ "versionInfo": "0.1.15",
1503
1503
  "downloadLocation": "NOASSERTION",
1504
1504
  "filesAnalyzed": false,
1505
1505
  "licenseConcluded": "NOASSERTION",
@@ -1510,7 +1510,7 @@
1510
1510
  {
1511
1511
  "referenceCategory": "PACKAGE-MANAGER",
1512
1512
  "referenceType": "purl",
1513
- "referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.14"
1513
+ "referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.15"
1514
1514
  }
1515
1515
  ],
1516
1516
  "description": "Shared business logic for the KiCI CI/CD stack: protocol, triggers, state machine, and provider interfaces used by the Platform relay, orchestrator, and compiler.",
@@ -1519,7 +1519,7 @@
1519
1519
  {
1520
1520
  "SPDXID": "SPDXRef-RootPackage",
1521
1521
  "name": "@kici-dev/orchestrator",
1522
- "versionInfo": "0.1.14",
1522
+ "versionInfo": "0.1.15",
1523
1523
  "downloadLocation": "NOASSERTION",
1524
1524
  "filesAnalyzed": false,
1525
1525
  "licenseConcluded": "NOASSERTION",
@@ -1530,16 +1530,16 @@
1530
1530
  {
1531
1531
  "referenceCategory": "PACKAGE-MANAGER",
1532
1532
  "referenceType": "purl",
1533
- "referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.1.14"
1533
+ "referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.1.15"
1534
1534
  }
1535
1535
  ],
1536
1536
  "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.",
1537
1537
  "homepage": "https://kici.dev"
1538
1538
  },
1539
1539
  {
1540
- "SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.14",
1540
+ "SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.15",
1541
1541
  "name": "@kici-dev/shared",
1542
- "versionInfo": "0.1.14",
1542
+ "versionInfo": "0.1.15",
1543
1543
  "downloadLocation": "NOASSERTION",
1544
1544
  "filesAnalyzed": false,
1545
1545
  "licenseConcluded": "NOASSERTION",
@@ -1550,7 +1550,7 @@
1550
1550
  {
1551
1551
  "referenceCategory": "PACKAGE-MANAGER",
1552
1552
  "referenceType": "purl",
1553
- "referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.14"
1553
+ "referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.15"
1554
1554
  }
1555
1555
  ],
1556
1556
  "description": "Shared utilities for the KiCI CI/CD stack — logging, zx setup, crypto, telemetry, health and metrics routes. No business logic.",
@@ -10702,47 +10702,47 @@
10702
10702
  "relationshipType": "DEPENDS_ON"
10703
10703
  },
10704
10704
  {
10705
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10705
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10706
10706
  "relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.128.0",
10707
10707
  "relationshipType": "DEPENDS_ON"
10708
10708
  },
10709
10709
  {
10710
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10710
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10711
10711
  "relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
10712
10712
  "relationshipType": "DEPENDS_ON"
10713
10713
  },
10714
10714
  {
10715
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10715
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10716
10716
  "relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
10717
10717
  "relationshipType": "DEPENDS_ON"
10718
10718
  },
10719
10719
  {
10720
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10720
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10721
10721
  "relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
10722
10722
  "relationshipType": "DEPENDS_ON"
10723
10723
  },
10724
10724
  {
10725
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10725
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10726
10726
  "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10727
10727
  "relationshipType": "DEPENDS_ON"
10728
10728
  },
10729
10729
  {
10730
- "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.14",
10730
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10731
10731
  "relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
10732
10732
  "relationshipType": "DEPENDS_ON"
10733
10733
  },
10734
10734
  {
10735
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.14",
10735
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10736
10736
  "relatedSpdxElement": "SPDXRef-Package-jsonpath-plus-10.4.0",
10737
10737
  "relationshipType": "DEPENDS_ON"
10738
10738
  },
10739
10739
  {
10740
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.14",
10740
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10741
10741
  "relatedSpdxElement": "SPDXRef-Package-picomatch-4.0.4",
10742
10742
  "relationshipType": "DEPENDS_ON"
10743
10743
  },
10744
10744
  {
10745
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.14",
10745
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10746
10746
  "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10747
10747
  "relationshipType": "DEPENDS_ON"
10748
10748
  },
@@ -10778,12 +10778,12 @@
10778
10778
  },
10779
10779
  {
10780
10780
  "spdxElementId": "SPDXRef-RootPackage",
10781
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.14",
10781
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.15",
10782
10782
  "relationshipType": "DEPENDS_ON"
10783
10783
  },
10784
10784
  {
10785
10785
  "spdxElementId": "SPDXRef-RootPackage",
10786
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.14",
10786
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.15",
10787
10787
  "relationshipType": "DEPENDS_ON"
10788
10788
  },
10789
10789
  {
@@ -10887,107 +10887,107 @@
10887
10887
  "relationshipType": "DEPENDS_ON"
10888
10888
  },
10889
10889
  {
10890
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10890
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10891
10891
  "relatedSpdxElement": "SPDXRef-Package--aws-sdk-client-s3-3.1038.0",
10892
10892
  "relationshipType": "DEPENDS_ON"
10893
10893
  },
10894
10894
  {
10895
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10896
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.1.14",
10895
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10896
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.1.15",
10897
10897
  "relationshipType": "DEPENDS_ON"
10898
10898
  },
10899
10899
  {
10900
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10900
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10901
10901
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-api-1.9.1",
10902
10902
  "relationshipType": "DEPENDS_ON"
10903
10903
  },
10904
10904
  {
10905
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10905
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10906
10906
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-metrics-otlp-http-0.217.0",
10907
10907
  "relationshipType": "DEPENDS_ON"
10908
10908
  },
10909
10909
  {
10910
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10910
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10911
10911
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-prometheus-0.217.0",
10912
10912
  "relationshipType": "DEPENDS_ON"
10913
10913
  },
10914
10914
  {
10915
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10915
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10916
10916
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-trace-otlp-http-0.217.0",
10917
10917
  "relationshipType": "DEPENDS_ON"
10918
10918
  },
10919
10919
  {
10920
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10920
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10921
10921
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-instrumentation-runtime-node-0.28.0",
10922
10922
  "relationshipType": "DEPENDS_ON"
10923
10923
  },
10924
10924
  {
10925
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10925
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10926
10926
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-resources-2.7.0",
10927
10927
  "relationshipType": "DEPENDS_ON"
10928
10928
  },
10929
10929
  {
10930
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10930
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10931
10931
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-sdk-node-0.217.0",
10932
10932
  "relationshipType": "DEPENDS_ON"
10933
10933
  },
10934
10934
  {
10935
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10935
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10936
10936
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-semantic-conventions-1.40.0",
10937
10937
  "relationshipType": "DEPENDS_ON"
10938
10938
  },
10939
10939
  {
10940
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10940
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10941
10941
  "relatedSpdxElement": "SPDXRef-Package-diff-7.0.0",
10942
10942
  "relationshipType": "DEPENDS_ON"
10943
10943
  },
10944
10944
  {
10945
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10945
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10946
10946
  "relatedSpdxElement": "SPDXRef-Package-hono-4.12.18",
10947
10947
  "relationshipType": "DEPENDS_ON"
10948
10948
  },
10949
10949
  {
10950
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10950
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10951
10951
  "relatedSpdxElement": "SPDXRef-Package-kysely-0.29.0",
10952
10952
  "relationshipType": "DEPENDS_ON"
10953
10953
  },
10954
10954
  {
10955
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10955
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10956
10956
  "relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.128.0",
10957
10957
  "relationshipType": "DEPENDS_ON"
10958
10958
  },
10959
10959
  {
10960
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10960
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10961
10961
  "relatedSpdxElement": "SPDXRef-Package-pg-8.20.0",
10962
10962
  "relationshipType": "DEPENDS_ON"
10963
10963
  },
10964
10964
  {
10965
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10965
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10966
10966
  "relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
10967
10967
  "relationshipType": "DEPENDS_ON"
10968
10968
  },
10969
10969
  {
10970
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10970
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10971
10971
  "relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
10972
10972
  "relationshipType": "DEPENDS_ON"
10973
10973
  },
10974
10974
  {
10975
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10975
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10976
10976
  "relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
10977
10977
  "relationshipType": "DEPENDS_ON"
10978
10978
  },
10979
10979
  {
10980
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10980
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10981
10981
  "relatedSpdxElement": "SPDXRef-Package-yaml-2.8.3",
10982
10982
  "relationshipType": "DEPENDS_ON"
10983
10983
  },
10984
10984
  {
10985
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10985
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10986
10986
  "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10987
10987
  "relationshipType": "DEPENDS_ON"
10988
10988
  },
10989
10989
  {
10990
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.14",
10990
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10991
10991
  "relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
10992
10992
  "relationshipType": "DEPENDS_ON"
10993
10993
  },