@kici-dev/orchestrator 0.1.13 → 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 (65) 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/service/index.d.ts +1 -1
  13. package/dist/cli/service/instance/manifest.d.ts +9 -0
  14. package/dist/cli.js +601 -113
  15. package/dist/cluster/peer-registry.d.ts +6 -0
  16. package/dist/config/schema.d.ts +4 -0
  17. package/dist/config.d.ts +13 -0
  18. package/dist/dashboard/handler.d.ts +92 -1
  19. package/dist/db/migrations/025_init_failure.d.ts +16 -0
  20. package/dist/db/migrations/026_event_log_lockfile_corrupt.d.ts +11 -0
  21. package/dist/db/migrations/027_workflow_timeout.d.ts +20 -0
  22. package/dist/db/migrations/028_org_settings_user_cache.d.ts +4 -0
  23. package/dist/db/migrations/029_dispatch_queue_attempts.d.ts +16 -0
  24. package/dist/db/migrations/030_held_runs_env_set_null.d.ts +13 -0
  25. package/dist/db/migrations/031_dispatch_queue_ack_deadline.d.ts +19 -0
  26. package/dist/db/migrations/032_org_settings_dispatch_ack_timeout.d.ts +14 -0
  27. package/dist/db/types.d.ts +52 -2
  28. package/dist/diagnostics/checks/index.d.ts +2 -1
  29. package/dist/diagnostics/checks/scaler.d.ts +13 -0
  30. package/dist/diagnostics/types.d.ts +5 -2
  31. package/dist/environments/environment-store.d.ts +14 -1
  32. package/dist/index.d.ts +1 -0
  33. package/dist/index.js +362 -40
  34. package/dist/lockfile-cache.d.ts +1 -1
  35. package/dist/metrics/prometheus.d.ts +8 -0
  36. package/dist/orchestrator-core.d.ts +4 -1
  37. package/dist/pipeline/dispatch-matched-workflow.d.ts +9 -0
  38. package/dist/pipeline/inline-eval.d.ts +17 -2
  39. package/dist/pipeline/process-webhook.d.ts +19 -0
  40. package/dist/pipeline/processor.d.ts +6 -1
  41. package/dist/pipeline/test-pipeline.d.ts +10 -0
  42. package/dist/providers/github/lock-file.d.ts +1 -1
  43. package/dist/providers/internal/lock-file-fetcher.d.ts +3 -2
  44. package/dist/queue/job-queue.d.ts +53 -1
  45. package/dist/reporting/execution-tracker.d.ts +80 -7
  46. package/dist/routes/admin-environments.d.ts +1 -0
  47. package/dist/scaler/bare-metal-backend.d.ts +1 -0
  48. package/dist/scaler/container-backend.d.ts +3 -2
  49. package/dist/scaler/failure-tracker.d.ts +46 -0
  50. package/dist/scaler/firecracker-backend.d.ts +17 -0
  51. package/dist/scaler/manager.d.ts +10 -0
  52. package/dist/scaler/nftables.d.ts +25 -3
  53. package/dist/scaler/types.d.ts +26 -1
  54. package/dist/server.js +4421 -1459
  55. package/dist/stale-detector/workflow-deadline-detector.d.ts +49 -0
  56. package/dist/standalone.js +17003 -14561
  57. package/dist/storage/filesystem.d.ts +12 -3
  58. package/dist/storage/s3.d.ts +17 -4
  59. package/dist/storage/types.d.ts +25 -5
  60. package/dist/worker/in-memory-job-queue.d.ts +40 -7
  61. package/dist/ws/agent-handler.d.ts +13 -0
  62. package/dist/ws/dashboard-env-handler.d.ts +1 -0
  63. package/dist/ws/platform-client.d.ts +10 -1
  64. package/package.json +13 -10
  65. package/sbom.spdx.json +91 -36
@@ -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.13",
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.13",
86
- "@kici-dev/shared": "0.1.13"
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.13"
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.13",
6
- "documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Forchestrator/0.1.13/d1c83222-7576-4635-a817-30c9d645853a",
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-28T10:37:57Z",
8
+ "created": "2026-06-11T03:03:47Z",
9
9
  "creators": [
10
10
  "Tool: kici-sbom-generator"
11
11
  ]
@@ -1477,9 +1477,29 @@
1477
1477
  "homepage": "https://ericsmekens.github.io/jsep/tree/master/packages/regex#readme"
1478
1478
  },
1479
1479
  {
1480
- "SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.13",
1480
+ "SPDXID": "SPDXRef-Package--kici-dev-core-0.1.15",
1481
+ "name": "@kici-dev/core",
1482
+ "versionInfo": "0.1.15",
1483
+ "downloadLocation": "NOASSERTION",
1484
+ "filesAnalyzed": false,
1485
+ "licenseConcluded": "NOASSERTION",
1486
+ "licenseDeclared": "Apache-2.0",
1487
+ "copyrightText": "NOASSERTION",
1488
+ "supplier": "NOASSERTION",
1489
+ "externalRefs": [
1490
+ {
1491
+ "referenceCategory": "PACKAGE-MANAGER",
1492
+ "referenceType": "purl",
1493
+ "referenceLocator": "pkg:npm/%40kici-dev/core@0.1.15"
1494
+ }
1495
+ ],
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
+ "homepage": "https://kici.dev"
1498
+ },
1499
+ {
1500
+ "SPDXID": "SPDXRef-Package--kici-dev-engine-0.1.15",
1481
1501
  "name": "@kici-dev/engine",
1482
- "versionInfo": "0.1.13",
1502
+ "versionInfo": "0.1.15",
1483
1503
  "downloadLocation": "NOASSERTION",
1484
1504
  "filesAnalyzed": false,
1485
1505
  "licenseConcluded": "NOASSERTION",
@@ -1490,7 +1510,7 @@
1490
1510
  {
1491
1511
  "referenceCategory": "PACKAGE-MANAGER",
1492
1512
  "referenceType": "purl",
1493
- "referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.13"
1513
+ "referenceLocator": "pkg:npm/%40kici-dev/engine@0.1.15"
1494
1514
  }
1495
1515
  ],
1496
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.",
@@ -1499,7 +1519,7 @@
1499
1519
  {
1500
1520
  "SPDXID": "SPDXRef-RootPackage",
1501
1521
  "name": "@kici-dev/orchestrator",
1502
- "versionInfo": "0.1.13",
1522
+ "versionInfo": "0.1.15",
1503
1523
  "downloadLocation": "NOASSERTION",
1504
1524
  "filesAnalyzed": false,
1505
1525
  "licenseConcluded": "NOASSERTION",
@@ -1510,16 +1530,16 @@
1510
1530
  {
1511
1531
  "referenceCategory": "PACKAGE-MANAGER",
1512
1532
  "referenceType": "purl",
1513
- "referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.1.13"
1533
+ "referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.1.15"
1514
1534
  }
1515
1535
  ],
1516
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.",
1517
1537
  "homepage": "https://kici.dev"
1518
1538
  },
1519
1539
  {
1520
- "SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.13",
1540
+ "SPDXID": "SPDXRef-Package--kici-dev-shared-0.1.15",
1521
1541
  "name": "@kici-dev/shared",
1522
- "versionInfo": "0.1.13",
1542
+ "versionInfo": "0.1.15",
1523
1543
  "downloadLocation": "NOASSERTION",
1524
1544
  "filesAnalyzed": false,
1525
1545
  "licenseConcluded": "NOASSERTION",
@@ -1530,7 +1550,7 @@
1530
1550
  {
1531
1551
  "referenceCategory": "PACKAGE-MANAGER",
1532
1552
  "referenceType": "purl",
1533
- "referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.13"
1553
+ "referenceLocator": "pkg:npm/%40kici-dev/shared@0.1.15"
1534
1554
  }
1535
1555
  ],
1536
1556
  "description": "Shared utilities for the KiCI CI/CD stack — logging, zx setup, crypto, telemetry, health and metrics routes. No business logic.",
@@ -10682,17 +10702,47 @@
10682
10702
  "relationshipType": "DEPENDS_ON"
10683
10703
  },
10684
10704
  {
10685
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.13",
10705
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10706
+ "relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.128.0",
10707
+ "relationshipType": "DEPENDS_ON"
10708
+ },
10709
+ {
10710
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10711
+ "relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
10712
+ "relationshipType": "DEPENDS_ON"
10713
+ },
10714
+ {
10715
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10716
+ "relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
10717
+ "relationshipType": "DEPENDS_ON"
10718
+ },
10719
+ {
10720
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10721
+ "relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
10722
+ "relationshipType": "DEPENDS_ON"
10723
+ },
10724
+ {
10725
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10726
+ "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10727
+ "relationshipType": "DEPENDS_ON"
10728
+ },
10729
+ {
10730
+ "spdxElementId": "SPDXRef-Package--kici-dev-core-0.1.15",
10731
+ "relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
10732
+ "relationshipType": "DEPENDS_ON"
10733
+ },
10734
+ {
10735
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10686
10736
  "relatedSpdxElement": "SPDXRef-Package-jsonpath-plus-10.4.0",
10687
10737
  "relationshipType": "DEPENDS_ON"
10688
10738
  },
10689
10739
  {
10690
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.13",
10740
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10691
10741
  "relatedSpdxElement": "SPDXRef-Package-picomatch-4.0.4",
10692
10742
  "relationshipType": "DEPENDS_ON"
10693
10743
  },
10694
10744
  {
10695
- "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.13",
10745
+ "spdxElementId": "SPDXRef-Package--kici-dev-engine-0.1.15",
10696
10746
  "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10697
10747
  "relationshipType": "DEPENDS_ON"
10698
10748
  },
@@ -10728,12 +10778,12 @@
10728
10778
  },
10729
10779
  {
10730
10780
  "spdxElementId": "SPDXRef-RootPackage",
10731
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.13",
10781
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.1.15",
10732
10782
  "relationshipType": "DEPENDS_ON"
10733
10783
  },
10734
10784
  {
10735
10785
  "spdxElementId": "SPDXRef-RootPackage",
10736
- "relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.13",
10786
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.1.15",
10737
10787
  "relationshipType": "DEPENDS_ON"
10738
10788
  },
10739
10789
  {
@@ -10837,102 +10887,107 @@
10837
10887
  "relationshipType": "DEPENDS_ON"
10838
10888
  },
10839
10889
  {
10840
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10890
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10841
10891
  "relatedSpdxElement": "SPDXRef-Package--aws-sdk-client-s3-3.1038.0",
10842
10892
  "relationshipType": "DEPENDS_ON"
10843
10893
  },
10844
10894
  {
10845
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10895
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10896
+ "relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.1.15",
10897
+ "relationshipType": "DEPENDS_ON"
10898
+ },
10899
+ {
10900
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10846
10901
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-api-1.9.1",
10847
10902
  "relationshipType": "DEPENDS_ON"
10848
10903
  },
10849
10904
  {
10850
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10905
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10851
10906
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-metrics-otlp-http-0.217.0",
10852
10907
  "relationshipType": "DEPENDS_ON"
10853
10908
  },
10854
10909
  {
10855
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10910
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10856
10911
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-prometheus-0.217.0",
10857
10912
  "relationshipType": "DEPENDS_ON"
10858
10913
  },
10859
10914
  {
10860
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10915
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10861
10916
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-trace-otlp-http-0.217.0",
10862
10917
  "relationshipType": "DEPENDS_ON"
10863
10918
  },
10864
10919
  {
10865
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10920
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10866
10921
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-instrumentation-runtime-node-0.28.0",
10867
10922
  "relationshipType": "DEPENDS_ON"
10868
10923
  },
10869
10924
  {
10870
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10925
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10871
10926
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-resources-2.7.0",
10872
10927
  "relationshipType": "DEPENDS_ON"
10873
10928
  },
10874
10929
  {
10875
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10930
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10876
10931
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-sdk-node-0.217.0",
10877
10932
  "relationshipType": "DEPENDS_ON"
10878
10933
  },
10879
10934
  {
10880
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10935
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10881
10936
  "relatedSpdxElement": "SPDXRef-Package--opentelemetry-semantic-conventions-1.40.0",
10882
10937
  "relationshipType": "DEPENDS_ON"
10883
10938
  },
10884
10939
  {
10885
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10940
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10886
10941
  "relatedSpdxElement": "SPDXRef-Package-diff-7.0.0",
10887
10942
  "relationshipType": "DEPENDS_ON"
10888
10943
  },
10889
10944
  {
10890
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10945
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10891
10946
  "relatedSpdxElement": "SPDXRef-Package-hono-4.12.18",
10892
10947
  "relationshipType": "DEPENDS_ON"
10893
10948
  },
10894
10949
  {
10895
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10950
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10896
10951
  "relatedSpdxElement": "SPDXRef-Package-kysely-0.29.0",
10897
10952
  "relationshipType": "DEPENDS_ON"
10898
10953
  },
10899
10954
  {
10900
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10955
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10901
10956
  "relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.128.0",
10902
10957
  "relationshipType": "DEPENDS_ON"
10903
10958
  },
10904
10959
  {
10905
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10960
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10906
10961
  "relatedSpdxElement": "SPDXRef-Package-pg-8.20.0",
10907
10962
  "relationshipType": "DEPENDS_ON"
10908
10963
  },
10909
10964
  {
10910
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10965
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10911
10966
  "relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
10912
10967
  "relationshipType": "DEPENDS_ON"
10913
10968
  },
10914
10969
  {
10915
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10970
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10916
10971
  "relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
10917
10972
  "relationshipType": "DEPENDS_ON"
10918
10973
  },
10919
10974
  {
10920
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10975
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10921
10976
  "relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
10922
10977
  "relationshipType": "DEPENDS_ON"
10923
10978
  },
10924
10979
  {
10925
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10980
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10926
10981
  "relatedSpdxElement": "SPDXRef-Package-yaml-2.8.3",
10927
10982
  "relationshipType": "DEPENDS_ON"
10928
10983
  },
10929
10984
  {
10930
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10985
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10931
10986
  "relatedSpdxElement": "SPDXRef-Package-zod-4.3.6",
10932
10987
  "relationshipType": "DEPENDS_ON"
10933
10988
  },
10934
10989
  {
10935
- "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.13",
10990
+ "spdxElementId": "SPDXRef-Package--kici-dev-shared-0.1.15",
10936
10991
  "relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
10937
10992
  "relationshipType": "DEPENDS_ON"
10938
10993
  },