@kici-dev/orchestrator 0.3.0 → 0.4.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/cli.js +55 -11
- package/dist/secrets/pg-secret-store.d.ts +20 -2
- package/dist/server.js +50 -28
- package/dist/standalone.js +49 -28
- package/installer-image-digests.json +3 -3
- package/package.json +4 -4
- package/sbom.spdx.json +52 -52
package/dist/cli.js
CHANGED
|
@@ -7,10 +7,10 @@ import * as fs$1 from "node:fs";
|
|
|
7
7
|
import fs, { chmodSync, closeSync, constants, createReadStream, createWriteStream, existsSync, mkdirSync, mkdtempSync, openSync, promises, readFileSync, realpathSync, rmSync, statSync, unwatchFile, watchFile, writeFileSync } from "node:fs";
|
|
8
8
|
import { Command, Option } from "commander";
|
|
9
9
|
import { AgentPlatform, BaseColdStore, ChunkLru, addLogsToArchive, chunkObjectKey, clearDispatchQueueDirect, computeChunkId, computeMigrationsHash, createContextTemplateDirect, createDb, createDbRole, createLogger, createPool, createReadOnlyDbUser, createS3Client, decodeChunk, decrypt, deleteContextDirect, deriveKey, diagnoseExitCode, dropAndCreateDatabase, emitKiciEventDirect, encodeKeySegment, encrypt, ensureDatabase, formatBytes, formatUptime, isSchemaCurrent, kiciMkdtemp, listCheckRunTrackingDirect, listContextsDirect, listExecutionRunsDirect, listQueueDirect, listRegistrationsDirect, maskDatabaseUrl, parseDatabaseUrl, parseManifest, prunePeerCredentialsDirect, purgeContextsDirect, purgeScopedSecretsDirect, purgeSecretBackendsDirect, purgeStaleExecutionDirect, purgeStaleSourcesDirect, registerWorkflowManualDirect, resetRaftStateDirect, seedContextBindingDirect, seedContextDirect, setContextPolicyDirect, setContextSecretDirect, sha256, showContextDirect, showExecutionRunDirect, showQueueEntryDirect, showRegistrationDirect, splitAgentPlatform, storeMigrationContentHash, tablePrefix, toErrorMessage } from "@kici-dev/shared";
|
|
10
|
+
import { AccessLogSource, DEFAULT_APPROVAL_EXPIRY_HOURS, ExecutionJobStatus, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, OrchestratorMode, PLATFORM_CONNECTED_MODES, PRIVILEGED_ROOT_LABEL, ScalerBackendType, ScalerEventType, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, WS_MAX_PAYLOAD_BYTES, accessLogWarmSqlCase, agentLabelOf, assertValidSecretKey, attestationVerifyStatusSchema, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, matcherSatisfiedBy, minAccessLogWarmDays, minSecretAuditLogWarmDays, parseHostPropertyAssignments, scalerAgentLabels, scalerPlatformSchema, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve } from "@kici-dev/engine";
|
|
10
11
|
import crypto$1, { createDecipheriv, createHash, createHmac, createPublicKey, generateKeyPairSync, hkdfSync, randomBytes, randomUUID } from "node:crypto";
|
|
11
12
|
import { createInterface } from "node:readline";
|
|
12
13
|
import { sql } from "kysely";
|
|
13
|
-
import { AccessLogSource, DEFAULT_APPROVAL_EXPIRY_HOURS, ExecutionJobStatus, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, OrchestratorMode, PLATFORM_CONNECTED_MODES, PRIVILEGED_ROOT_LABEL, ScalerBackendType, ScalerEventType, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, WS_MAX_PAYLOAD_BYTES, accessLogWarmSqlCase, agentLabelOf, attestationVerifyStatusSchema, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, matcherSatisfiedBy, minAccessLogWarmDays, minSecretAuditLogWarmDays, parseHostPropertyAssignments, scalerAgentLabels, scalerPlatformSchema, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve } from "@kici-dev/engine";
|
|
14
14
|
import { access, chmod, constants as constants$1, copyFile, link, mkdir, open, readFile, readdir, rm, stat, writeFile } from "node:fs/promises";
|
|
15
15
|
import { parse, stringify } from "yaml";
|
|
16
16
|
import { z } from "zod";
|
|
@@ -783,17 +783,36 @@ var PgSecretStore = class PgSecretStore {
|
|
|
783
783
|
}
|
|
784
784
|
return result;
|
|
785
785
|
}
|
|
786
|
-
/**
|
|
787
|
-
* Set (create or update) a secret in a scope.
|
|
788
|
-
* Encrypts the value with AAD = "orgId:scope:key".
|
|
789
|
-
*/
|
|
790
786
|
/** Check if a scope is internal/operational (always allowed regardless of toggle). */
|
|
791
787
|
isInternalScope(scope) {
|
|
792
788
|
const colonIdx = scope.indexOf(":");
|
|
793
789
|
const path = colonIdx >= 0 ? scope.slice(colonIdx + 1) : scope;
|
|
794
790
|
return path.startsWith("__source__/") || path.startsWith("__webhook__/");
|
|
795
791
|
}
|
|
792
|
+
/**
|
|
793
|
+
* Set (create or update) a secret in a scope.
|
|
794
|
+
* Encrypts the value with AAD = "orgId:scope:key".
|
|
795
|
+
*
|
|
796
|
+
* Rejects a key outside `[A-Za-z0-9._-]` before doing anything else. The AAD
|
|
797
|
+
* is a plain concatenation, so a `:` in the key would let two distinct
|
|
798
|
+
* locations render one AAD (scope 'b' + key 'c:d' equals scope 'b:c' + key
|
|
799
|
+
* 'd') and a ciphertext written at one would authenticate at the other. The
|
|
800
|
+
* check sits ahead of the customerSecretsEnabled gate so internal scopes get
|
|
801
|
+
* no exemption — the binding has to hold for every writer.
|
|
802
|
+
*
|
|
803
|
+
* Callers pass a bare scope path, so the AAD's middle field is colon-free
|
|
804
|
+
* too: the admin route and the dashboard handler both run the scope
|
|
805
|
+
* validator immediately before calling in, and `source-store` builds its
|
|
806
|
+
* scope from a uuid. That precondition is what makes the whole triple
|
|
807
|
+
* recoverable, and it is the caller's to keep — this method does not
|
|
808
|
+
* re-check it.
|
|
809
|
+
*
|
|
810
|
+
* Write-path only: getSecrets, listKeys, deleteSecret, deleteScope,
|
|
811
|
+
* renameScope, getAllSecrets and createScope stay unvalidated, which is what
|
|
812
|
+
* keeps a key stored before this rule readable and deletable.
|
|
813
|
+
*/
|
|
796
814
|
async setSecret(orgId, scope, key, value) {
|
|
815
|
+
assertValidSecretKey(key);
|
|
797
816
|
if (!this.customerSecretsEnabled && !this.isInternalScope(scope)) throw new Error("PG customer secrets are disabled. Use an external secret backend or enable pgCustomerSecrets in config.");
|
|
798
817
|
const aad = `${orgId}:${scope}:${key}`;
|
|
799
818
|
const encrypted = encrypt(value, this.masterKey, this.keyVersion, aad);
|
|
@@ -1491,6 +1510,7 @@ function registerSecretCommands(program, getClient) {
|
|
|
1491
1510
|
}
|
|
1492
1511
|
const dbUrl = resolveDirectDbUrl$10(opts.databaseUrl);
|
|
1493
1512
|
if (dbUrl) {
|
|
1513
|
+
assertValidSecretKey(key);
|
|
1494
1514
|
await setContextSecretDirect(dbUrl, {
|
|
1495
1515
|
orgId,
|
|
1496
1516
|
context: scope,
|
|
@@ -10131,6 +10151,21 @@ function parseLocalConfig(s) {
|
|
|
10131
10151
|
const parsed = LocalSourceConfigSchema.safeParse(raw);
|
|
10132
10152
|
return parsed.success ? parsed.data : null;
|
|
10133
10153
|
}
|
|
10154
|
+
/**
|
|
10155
|
+
* Read a local source's stored config over whichever transport the caller is
|
|
10156
|
+
* already on — direct DB when `--database-url` / KICI_DATABASE_URL is in play,
|
|
10157
|
+
* otherwise the admin API. Used to preserve `repoBasePath` when only the clone
|
|
10158
|
+
* base is being changed; returns null when the id names no local source.
|
|
10159
|
+
*/
|
|
10160
|
+
async function readLocalSourceConfig(id, databaseUrl, getClient) {
|
|
10161
|
+
const dbUrl = resolveDirectDbUrl$9(databaseUrl);
|
|
10162
|
+
if (dbUrl) {
|
|
10163
|
+
const row = await withGenericManager(dbUrl, (mgr) => mgr.getById(id));
|
|
10164
|
+
return row ? parseLocalConfig(row) : null;
|
|
10165
|
+
}
|
|
10166
|
+
const { source } = await getClient().getGenericSource(id);
|
|
10167
|
+
return parseLocalConfig(source);
|
|
10168
|
+
}
|
|
10134
10169
|
function safeParse(value) {
|
|
10135
10170
|
try {
|
|
10136
10171
|
return JSON.parse(value);
|
|
@@ -10676,17 +10711,26 @@ function registerSourceCommands(program, getClient) {
|
|
|
10676
10711
|
try {
|
|
10677
10712
|
const data = {};
|
|
10678
10713
|
if (opts.name) data.name = opts.name;
|
|
10679
|
-
if (opts.path !== void 0) {
|
|
10680
|
-
|
|
10681
|
-
|
|
10714
|
+
if (opts.path !== void 0 || opts.cloneUrlBase !== void 0) {
|
|
10715
|
+
let repoBasePath = opts.path;
|
|
10716
|
+
if (repoBasePath === void 0) {
|
|
10717
|
+
const existing = await readLocalSourceConfig(id, opts.databaseUrl, getClient);
|
|
10718
|
+
if (!existing) {
|
|
10719
|
+
console.error(`Error: no local source with id ${id}`);
|
|
10720
|
+
process.exit(1);
|
|
10721
|
+
}
|
|
10722
|
+
repoBasePath = existing.repoBasePath;
|
|
10723
|
+
}
|
|
10724
|
+
if (!path.isAbsolute(repoBasePath)) {
|
|
10725
|
+
console.error(`Error: --path must be an absolute path: ${repoBasePath}`);
|
|
10682
10726
|
process.exit(1);
|
|
10683
10727
|
}
|
|
10684
|
-
const localConfig = { repoBasePath
|
|
10728
|
+
const localConfig = { repoBasePath };
|
|
10685
10729
|
if (opts.cloneUrlBase) localConfig.cloneUrlBase = opts.cloneUrlBase;
|
|
10686
10730
|
data.localConfig = localConfig;
|
|
10687
10731
|
}
|
|
10688
10732
|
if (Object.keys(data).length === 0) {
|
|
10689
|
-
console.error("Error: no fields to update. Provide --path and/or --
|
|
10733
|
+
console.error("Error: no fields to update. Provide --path, --name, and/or --clone-url-base.");
|
|
10690
10734
|
process.exit(1);
|
|
10691
10735
|
}
|
|
10692
10736
|
const dbUrl = resolveDirectDbUrl$9(opts.databaseUrl);
|
|
@@ -18402,7 +18446,7 @@ async function refreshAgentPackages(storage, version, opts, deps) {
|
|
|
18402
18446
|
const ALL_PLATFORMS = AgentPlatform.options;
|
|
18403
18447
|
/** The orchestrator's own version (single-version invariant) = the packaged agent version. */
|
|
18404
18448
|
function resolveKiciVersion() {
|
|
18405
|
-
return "0.
|
|
18449
|
+
return "0.4.0";
|
|
18406
18450
|
}
|
|
18407
18451
|
/** Parse the --platform value: default set | single | CSV | `all`. */
|
|
18408
18452
|
function parsePlatforms(raw) {
|
|
@@ -60,12 +60,30 @@ export declare class PgSecretStore implements SecretStore {
|
|
|
60
60
|
* Get all secrets for a scope as decrypted key-value pairs.
|
|
61
61
|
*/
|
|
62
62
|
getSecrets(orgId: string, scope: string): Promise<Record<string, string>>;
|
|
63
|
+
/** Check if a scope is internal/operational (always allowed regardless of toggle). */
|
|
64
|
+
private isInternalScope;
|
|
63
65
|
/**
|
|
64
66
|
* Set (create or update) a secret in a scope.
|
|
65
67
|
* Encrypts the value with AAD = "orgId:scope:key".
|
|
68
|
+
*
|
|
69
|
+
* Rejects a key outside `[A-Za-z0-9._-]` before doing anything else. The AAD
|
|
70
|
+
* is a plain concatenation, so a `:` in the key would let two distinct
|
|
71
|
+
* locations render one AAD (scope 'b' + key 'c:d' equals scope 'b:c' + key
|
|
72
|
+
* 'd') and a ciphertext written at one would authenticate at the other. The
|
|
73
|
+
* check sits ahead of the customerSecretsEnabled gate so internal scopes get
|
|
74
|
+
* no exemption — the binding has to hold for every writer.
|
|
75
|
+
*
|
|
76
|
+
* Callers pass a bare scope path, so the AAD's middle field is colon-free
|
|
77
|
+
* too: the admin route and the dashboard handler both run the scope
|
|
78
|
+
* validator immediately before calling in, and `source-store` builds its
|
|
79
|
+
* scope from a uuid. That precondition is what makes the whole triple
|
|
80
|
+
* recoverable, and it is the caller's to keep — this method does not
|
|
81
|
+
* re-check it.
|
|
82
|
+
*
|
|
83
|
+
* Write-path only: getSecrets, listKeys, deleteSecret, deleteScope,
|
|
84
|
+
* renameScope, getAllSecrets and createScope stay unvalidated, which is what
|
|
85
|
+
* keeps a key stored before this rule readable and deletable.
|
|
66
86
|
*/
|
|
67
|
-
/** Check if a scope is internal/operational (always allowed regardless of toggle). */
|
|
68
|
-
private isInternalScope;
|
|
69
87
|
setSecret(orgId: string, scope: string, key: string, value: string): Promise<void>;
|
|
70
88
|
/**
|
|
71
89
|
* Delete a secret from a scope.
|
package/dist/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { AgentDeliveryMode, AgentPlatform, BaseColdStore, ChunkRequestWaiter, RingBuffer, addLogsToArchive, chunkBuffer, computeBackoffDelay, computeMigrationsHash, createDb, createHealthRoutes, createLogger, createMeter, createMetricsRoutes, createPool, createS3Client, decrypt, decryptJson, deriveKey, encodeKeySegment, encrypt, enrichRequestContext, formatDuration, getPrometheusExporter, getReconnectDelay, getRequestContext, guardStartup, initTelemetry, isPgUniqueViolation, logger, parseDatabaseUrl, redactConfig, requestContext, serializeError, setServiceName, setupGracefulShutdown, sha256, storeMigrationContentHash, toErrorMessage, validateRequiredTools } from "@kici-dev/shared";
|
|
3
|
-
import { ALLOWED_SYSTEM_VARS, ARTIFACT_NAME_MAX_LENGTH, AccessLogAction, AccessLogOutcome, AccessLogSource, AccessLogTargetType, ActorType, AgentFailureCategory, ApprovalDecision, ArtifactCompleteAckOutcome, ArtifactDownloadOutcome, ArtifactUploadOutcome, AttestationOrigin, BREAKING_FLOOR, CANONICAL_STATUSES, CacheRefScope, CheckMode, CheckRunConclusion, CheckStepOutcome, ConcurrencyStrategy, ContextDeleteErrorCode, ContextGateRejectReason, DASHBOARD_REQUEST_TYPE_SET, DEFAULT_APPROVAL_EXPIRY_HOURS, DEFAULT_CONCURRENCY_STRATEGY, DEFAULT_HOLD_EXPIRY_SECONDS, DashboardResponseErrorCode, DeploymentContainerRuntimeSchema, DeploymentModeSchema, EVENT_LOG_PAYLOAD_CHUNK_BYTES, EventLogPayloadStreamError, EventLogSource, EventLogStatus, ExecutionJobStatus, ExecutionRunStatus, ExecutionStepStatus, FanoutCause, FanoutError, HeldRunQueueType, HoldScope, HoldType, INIT_LABEL, InitFailureCategory, InventorySelectorSchema, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, LabelMatcher, LockFileParseError, LogStream, MIN_PROTOCOL_VERSION, ORCH_AGENT_CAPABILITIES, ORCH_CAPABILITIES, OWN_INGRESS_MODES, OrchLogPhase, OrchRole, OrchestratorMode, PLATFORM_CONNECTED_MODES, PLATFORM_TAINT_LABELS, PLATFORM_TO_ORCH_RECOGNIZED_TYPES, PRIVILEGED_ROOT_LABEL, PROTOCOL_VERSION, PayloadOmittedReason, RELAY_INGRESS_MODES, RegisterableTriggerType, RunFailureClass, SCHEMA_VERSION, SECURITY_HOLD_JOB_IDS, SSH_TRANSPORT_CAPABILITY, ScalerBackendType, ScalerEventType, ScalerEventType as ScalerEventType$1, SourceOrigin, SourceSubtype, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, TimeoutReason, TriggerSource, VariantKind, WEBHOOK_RELAY_MAX_BODY_BYTES, WS_CLOSE_AGENT_AUTH_FAILED, WS_CLOSE_AUTH_TIMEOUT, WS_CLOSE_DISPATCH_ACK_TIMEOUT, WS_CLOSE_GOING_AWAY, WS_CLOSE_HEARTBEAT_TIMEOUT, WS_CLOSE_INVALID_MESSAGE, WS_CLOSE_PROTOCOL_ERROR, WS_CLOSE_UNAUTHORIZED, WS_MAX_PAYLOAD_BYTES, WebhookRelayResult, WsRateLimiter, accessLogWarmSqlCase, agentAuthRequestSchema, agentLabelOf, agentToOrchestratorMessageSchema, agentTypeLabel, approvalTimeoutSecondsSchema, artifactInvalidNameError, assertValidScopeName, attestationVerifyStatusSchema, buildTrustedPassthroughEnv, buildUnsupportedMessageNack, canonicalizeCapability, checkArtifactName, coerceDispatchInputs, collectDiscriminatorTypes, createWorkflowDecision, dashboardArtifactsListResponseSchema, dashboardAttestationGetResponseSchema, dashboardAttestationsListAllResponseSchema, dashboardAttestationsListResponseSchema, dashboardRunDetailApiResponseSchema, dashboardStepLogsApiResponseSchema, deriveOsArchLabels, derivePlatformTaints, fanoutEnvelopeFields, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, githubIngressPath, githubWebhookPath, hasPlatformCapability, hostLabel, hostSatisfiesTarget, hostToScalerPlatform, installGateJobId, isFailureStatus, isKnownCapability, isLockDynamicJobFn, isLockInlineValue, isLockParallelStep, isLockStaticJob, isSelfReportedLabel, joinRequestSchema, logPullPlatformToOrchSchema, matchAllWorkflows, matchScopePattern, matchWorkflowsForEvent, matcherSatisfiedBy, materializeFanout, materializeResolvedHosts, materializeResolvedMatrix, matrixEnvelopeFields, mergeOrderedMaps, minAccessLogWarmDays, minSecretAuditLogWarmDays, normalizePersistedHoldType, partitionMatchers, peerAuthRequestSchema, peerFromPeerMessageSchema, peerHelloResponseSchema, peerHelloSchema, persistedHoldTypeSpellings, platformToOrchestratorMessageSchema, platformToOsArchLabels, platformToTaints, resolveRoleLabels, resolveScheduleInputs, resolveSecretsWithProvenance, scalerAgentLabels, scalerLabel, scalerPlatformSchema, scheduleTriggerKey, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve, stateReplaySchema, stringifyActor, trustedContributorHoldReason, unknownContributorHoldReason, validateScopeName, wrapUntrusted } from "@kici-dev/engine";
|
|
3
|
+
import { ALLOWED_SYSTEM_VARS, ARTIFACT_NAME_MAX_LENGTH, AccessLogAction, AccessLogOutcome, AccessLogSource, AccessLogTargetType, ActorType, AgentFailureCategory, ApprovalDecision, ArtifactCompleteAckOutcome, ArtifactDownloadOutcome, ArtifactUploadOutcome, AttestationOrigin, BREAKING_FLOOR, CANONICAL_STATUSES, CacheRefScope, CheckMode, CheckRunConclusion, CheckStepOutcome, ConcurrencyStrategy, ContextDeleteErrorCode, ContextGateRejectReason, DASHBOARD_REQUEST_TYPE_SET, DEFAULT_APPROVAL_EXPIRY_HOURS, DEFAULT_CONCURRENCY_STRATEGY, DEFAULT_HOLD_EXPIRY_SECONDS, DashboardResponseErrorCode, DeploymentContainerRuntimeSchema, DeploymentModeSchema, EVENT_LOG_PAYLOAD_CHUNK_BYTES, EventLogPayloadStreamError, EventLogSource, EventLogStatus, ExecutionJobStatus, ExecutionRunStatus, ExecutionStepStatus, FanoutCause, FanoutError, HeldRunQueueType, HoldScope, HoldType, INIT_LABEL, InitFailureCategory, InventorySelectorSchema, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, LabelMatcher, LockFileParseError, LogStream, MIN_PROTOCOL_VERSION, ORCH_AGENT_CAPABILITIES, ORCH_CAPABILITIES, OWN_INGRESS_MODES, OrchLogPhase, OrchRole, OrchestratorMode, PLATFORM_CONNECTED_MODES, PLATFORM_TAINT_LABELS, PLATFORM_TO_ORCH_RECOGNIZED_TYPES, PRIVILEGED_ROOT_LABEL, PROTOCOL_VERSION, PayloadOmittedReason, RELAY_INGRESS_MODES, RegisterableTriggerType, RunFailureClass, SCHEMA_VERSION, SECURITY_HOLD_JOB_IDS, SSH_TRANSPORT_CAPABILITY, ScalerBackendType, ScalerEventType, ScalerEventType as ScalerEventType$1, SourceOrigin, SourceSubtype, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, TimeoutReason, TriggerSource, VariantKind, WEBHOOK_RELAY_MAX_BODY_BYTES, WS_CLOSE_AGENT_AUTH_FAILED, WS_CLOSE_AUTH_TIMEOUT, WS_CLOSE_DISPATCH_ACK_TIMEOUT, WS_CLOSE_GOING_AWAY, WS_CLOSE_HEARTBEAT_TIMEOUT, WS_CLOSE_INVALID_MESSAGE, WS_CLOSE_PROTOCOL_ERROR, WS_CLOSE_UNAUTHORIZED, WS_MAX_PAYLOAD_BYTES, WebhookRelayResult, WsRateLimiter, accessLogWarmSqlCase, agentAuthRequestSchema, agentLabelOf, agentToOrchestratorMessageSchema, agentTypeLabel, approvalTimeoutSecondsSchema, artifactInvalidNameError, assertValidScopeName, assertValidSecretKey, attestationVerifyStatusSchema, buildTrustedPassthroughEnv, buildUnsupportedMessageNack, canonicalizeCapability, checkArtifactName, coerceDispatchInputs, collectDiscriminatorTypes, createWorkflowDecision, dashboardArtifactsListResponseSchema, dashboardAttestationGetResponseSchema, dashboardAttestationsListAllResponseSchema, dashboardAttestationsListResponseSchema, dashboardRunDetailApiResponseSchema, dashboardStepLogsApiResponseSchema, deriveOsArchLabels, derivePlatformTaints, fanoutEnvelopeFields, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, githubIngressPath, githubWebhookPath, hasPlatformCapability, hostLabel, hostSatisfiesTarget, hostToScalerPlatform, installGateJobId, isFailureStatus, isKnownCapability, isLockDynamicJobFn, isLockInlineValue, isLockParallelStep, isLockStaticJob, isSelfReportedLabel, joinRequestSchema, logPullPlatformToOrchSchema, matchAllWorkflows, matchScopePattern, matchWorkflowsForEvent, matcherSatisfiedBy, materializeFanout, materializeResolvedHosts, materializeResolvedMatrix, matrixEnvelopeFields, mergeOrderedMaps, minAccessLogWarmDays, minSecretAuditLogWarmDays, normalizePersistedHoldType, partitionMatchers, peerAuthRequestSchema, peerFromPeerMessageSchema, peerHelloResponseSchema, peerHelloSchema, persistedHoldTypeSpellings, platformToOrchestratorMessageSchema, platformToOsArchLabels, platformToTaints, resolveRoleLabels, resolveScheduleInputs, resolveSecretsWithProvenance, scalerAgentLabels, scalerLabel, scalerPlatformSchema, scheduleTriggerKey, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve, stateReplaySchema, stringifyActor, trustedContributorHoldReason, unknownContributorHoldReason, validateScopeName, validateSecretKey, wrapUntrusted } from "@kici-dev/engine";
|
|
4
4
|
import { X509Certificate, createCipheriv, createDecipheriv, createHash, createHmac, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
|
5
5
|
import * as fs$1 from "node:fs";
|
|
6
6
|
import { chmodSync, closeSync, createReadStream, createWriteStream, fsyncSync, mkdirSync, mkdtempSync, openSync, promises, readFileSync, renameSync, rmSync, statSync, unwatchFile, watchFile, writeFileSync, writeSync } from "node:fs";
|
|
@@ -19137,17 +19137,36 @@ var init_pg_secret_store = __esmMin((() => {
|
|
|
19137
19137
|
}
|
|
19138
19138
|
return result;
|
|
19139
19139
|
}
|
|
19140
|
-
/**
|
|
19141
|
-
* Set (create or update) a secret in a scope.
|
|
19142
|
-
* Encrypts the value with AAD = "orgId:scope:key".
|
|
19143
|
-
*/
|
|
19144
19140
|
/** Check if a scope is internal/operational (always allowed regardless of toggle). */
|
|
19145
19141
|
isInternalScope(scope) {
|
|
19146
19142
|
const colonIdx = scope.indexOf(":");
|
|
19147
19143
|
const path = colonIdx >= 0 ? scope.slice(colonIdx + 1) : scope;
|
|
19148
19144
|
return path.startsWith("__source__/") || path.startsWith("__webhook__/");
|
|
19149
19145
|
}
|
|
19146
|
+
/**
|
|
19147
|
+
* Set (create or update) a secret in a scope.
|
|
19148
|
+
* Encrypts the value with AAD = "orgId:scope:key".
|
|
19149
|
+
*
|
|
19150
|
+
* Rejects a key outside `[A-Za-z0-9._-]` before doing anything else. The AAD
|
|
19151
|
+
* is a plain concatenation, so a `:` in the key would let two distinct
|
|
19152
|
+
* locations render one AAD (scope 'b' + key 'c:d' equals scope 'b:c' + key
|
|
19153
|
+
* 'd') and a ciphertext written at one would authenticate at the other. The
|
|
19154
|
+
* check sits ahead of the customerSecretsEnabled gate so internal scopes get
|
|
19155
|
+
* no exemption — the binding has to hold for every writer.
|
|
19156
|
+
*
|
|
19157
|
+
* Callers pass a bare scope path, so the AAD's middle field is colon-free
|
|
19158
|
+
* too: the admin route and the dashboard handler both run the scope
|
|
19159
|
+
* validator immediately before calling in, and `source-store` builds its
|
|
19160
|
+
* scope from a uuid. That precondition is what makes the whole triple
|
|
19161
|
+
* recoverable, and it is the caller's to keep — this method does not
|
|
19162
|
+
* re-check it.
|
|
19163
|
+
*
|
|
19164
|
+
* Write-path only: getSecrets, listKeys, deleteSecret, deleteScope,
|
|
19165
|
+
* renameScope, getAllSecrets and createScope stay unvalidated, which is what
|
|
19166
|
+
* keeps a key stored before this rule readable and deletable.
|
|
19167
|
+
*/
|
|
19150
19168
|
async setSecret(orgId, scope, key, value) {
|
|
19169
|
+
assertValidSecretKey(key);
|
|
19151
19170
|
if (!this.customerSecretsEnabled && !this.isInternalScope(scope)) throw new Error("PG customer secrets are disabled. Use an external secret backend or enable pgCustomerSecrets in config.");
|
|
19152
19171
|
const aad = `${orgId}:${scope}:${key}`;
|
|
19153
19172
|
const encrypted = encrypt(value, this.masterKey, this.keyVersion, aad);
|
|
@@ -29773,6 +29792,8 @@ function createAdminRoutes(deps) {
|
|
|
29773
29792
|
const resolved = await routeScope(scope);
|
|
29774
29793
|
const scopeError = validateScopeName(resolved.path);
|
|
29775
29794
|
if (scopeError) return c.json({ error: scopeError }, 400);
|
|
29795
|
+
const keyError = validateSecretKey(key);
|
|
29796
|
+
if (keyError) return c.json({ error: keyError }, 400);
|
|
29776
29797
|
await resolved.store.setSecret(orgId, resolved.path, key, parsed.value);
|
|
29777
29798
|
await deps.auditLogger.log({
|
|
29778
29799
|
action: "setSecret",
|
|
@@ -34396,15 +34417,15 @@ var init_admin_config = __esmMin((() => {
|
|
|
34396
34417
|
function createHealthRoutes$1(deps = {}) {
|
|
34397
34418
|
return createHealthRoutes({
|
|
34398
34419
|
livenessInfo: () => ({
|
|
34399
|
-
version: "0.
|
|
34400
|
-
buildDate: "2026-08-
|
|
34401
|
-
buildCommit: "
|
|
34402
|
-
sdkVersion: "0.
|
|
34420
|
+
version: "0.4.0",
|
|
34421
|
+
buildDate: "2026-08-09T15:20:50.779Z",
|
|
34422
|
+
buildCommit: "ffd489464",
|
|
34423
|
+
sdkVersion: "0.4.0",
|
|
34403
34424
|
sdkBundleHash: "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f",
|
|
34404
|
-
sharedVersion: "0.
|
|
34425
|
+
sharedVersion: "0.4.0",
|
|
34405
34426
|
sharedBundleHash: "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188",
|
|
34406
|
-
engineVersion: "0.
|
|
34407
|
-
engineBundleHash: "
|
|
34427
|
+
engineVersion: "0.4.0",
|
|
34428
|
+
engineBundleHash: "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89"
|
|
34408
34429
|
}),
|
|
34409
34430
|
readinessCheck: deps.db ? async () => {
|
|
34410
34431
|
const checks = {};
|
|
@@ -34439,7 +34460,7 @@ function createCapabilitiesRoutes() {
|
|
|
34439
34460
|
const app = new Hono();
|
|
34440
34461
|
app.get("/api/v1/capabilities", (c) => {
|
|
34441
34462
|
const manifest = {
|
|
34442
|
-
orchestratorVersion: "0.
|
|
34463
|
+
orchestratorVersion: "0.4.0",
|
|
34443
34464
|
protocolVersion: PROTOCOL_VERSION,
|
|
34444
34465
|
minProtocolVersion: MIN_PROTOCOL_VERSION
|
|
34445
34466
|
};
|
|
@@ -37058,7 +37079,7 @@ var init_app = __esmMin((() => {
|
|
|
37058
37079
|
init_log_chunk_sink();
|
|
37059
37080
|
init_agent_metrics_aggregator();
|
|
37060
37081
|
logger$57 = createLogger({ prefix: "app" });
|
|
37061
|
-
ORCHESTRATOR_VERSION$2 = "0.
|
|
37082
|
+
ORCHESTRATOR_VERSION$2 = "0.4.0";
|
|
37062
37083
|
SourceLocationStore = class {
|
|
37063
37084
|
cache = /* @__PURE__ */ new Map();
|
|
37064
37085
|
key(workflowName, jobName) {
|
|
@@ -46250,7 +46271,7 @@ var logger$44, SOFTWARE_VERSION$1, PeerClient$1;
|
|
|
46250
46271
|
var init_peer_client = __esmMin((() => {
|
|
46251
46272
|
init_peer_crypto();
|
|
46252
46273
|
logger$44 = createLogger({ prefix: "peer-client" });
|
|
46253
|
-
SOFTWARE_VERSION$1 = "0.
|
|
46274
|
+
SOFTWARE_VERSION$1 = "0.4.0";
|
|
46254
46275
|
PeerClient$1 = class {
|
|
46255
46276
|
ws = null;
|
|
46256
46277
|
_state = "disconnected";
|
|
@@ -48213,7 +48234,7 @@ var init_peer_handler = __esmMin((() => {
|
|
|
48213
48234
|
init_peer_crypto();
|
|
48214
48235
|
init_join_token();
|
|
48215
48236
|
logger$42 = createLogger({ prefix: "peer-handler" });
|
|
48216
|
-
SOFTWARE_VERSION = "0.
|
|
48237
|
+
SOFTWARE_VERSION = "0.4.0";
|
|
48217
48238
|
RATE_LIMIT_MAX = 5;
|
|
48218
48239
|
RATE_LIMIT_WINDOW_MS = 6e4;
|
|
48219
48240
|
}));
|
|
@@ -70553,6 +70574,7 @@ var init_dashboard_context_handler = __esmMin((() => {
|
|
|
70553
70574
|
try {
|
|
70554
70575
|
const { store, scope } = await this.resolveStoreForScope(msg.scope);
|
|
70555
70576
|
assertValidScopeName(scope);
|
|
70577
|
+
assertValidSecretKey(msg.key);
|
|
70556
70578
|
await store.setSecret(this.deps.orgId, scope, msg.key, resolved.plaintext);
|
|
70557
70579
|
this.recordAccess(msg.actor, "secret.set", {
|
|
70558
70580
|
type: "secret_scope",
|
|
@@ -75590,14 +75612,14 @@ var init_worker_core = __esmMin((() => {
|
|
|
75590
75612
|
init_peer_outbox();
|
|
75591
75613
|
init_worker_outbox_relay();
|
|
75592
75614
|
init_app_on_error();
|
|
75593
|
-
ORCHESTRATOR_VERSION$1 = "0.
|
|
75594
|
-
WORKER_BUILD_COMMIT = "
|
|
75595
|
-
WORKER_SDK_VERSION = "0.
|
|
75615
|
+
ORCHESTRATOR_VERSION$1 = "0.4.0";
|
|
75616
|
+
WORKER_BUILD_COMMIT = "ffd489464";
|
|
75617
|
+
WORKER_SDK_VERSION = "0.4.0";
|
|
75596
75618
|
WORKER_SDK_BUNDLE_HASH = "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f";
|
|
75597
|
-
WORKER_SHARED_VERSION = "0.
|
|
75619
|
+
WORKER_SHARED_VERSION = "0.4.0";
|
|
75598
75620
|
WORKER_SHARED_BUNDLE_HASH = "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188";
|
|
75599
|
-
WORKER_ENGINE_VERSION = "0.
|
|
75600
|
-
WORKER_ENGINE_BUNDLE_HASH = "
|
|
75621
|
+
WORKER_ENGINE_VERSION = "0.4.0";
|
|
75622
|
+
WORKER_ENGINE_BUNDLE_HASH = "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89";
|
|
75601
75623
|
logger$2 = createLogger({ prefix: "worker" });
|
|
75602
75624
|
DRAIN_TIMEOUT_MS = 3e5;
|
|
75603
75625
|
}));
|
|
@@ -75621,14 +75643,14 @@ var init_worker_core = __esmMin((() => {
|
|
|
75621
75643
|
init_verify_inbound();
|
|
75622
75644
|
init_ingest_overflow_types();
|
|
75623
75645
|
init_scope_routing();
|
|
75624
|
-
const ORCHESTRATOR_VERSION = "0.
|
|
75625
|
-
const BUILD_COMMIT = "
|
|
75626
|
-
const SDK_VERSION = "0.
|
|
75646
|
+
const ORCHESTRATOR_VERSION = "0.4.0";
|
|
75647
|
+
const BUILD_COMMIT = "ffd489464";
|
|
75648
|
+
const SDK_VERSION = "0.4.0";
|
|
75627
75649
|
const SDK_BUNDLE_HASH = "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f";
|
|
75628
|
-
const SHARED_VERSION = "0.
|
|
75650
|
+
const SHARED_VERSION = "0.4.0";
|
|
75629
75651
|
const SHARED_BUNDLE_HASH = "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188";
|
|
75630
|
-
const ENGINE_VERSION = "0.
|
|
75631
|
-
const ENGINE_BUNDLE_HASH = "
|
|
75652
|
+
const ENGINE_VERSION = "0.4.0";
|
|
75653
|
+
const ENGINE_BUNDLE_HASH = "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89";
|
|
75632
75654
|
const otelSdk = initTelemetry({
|
|
75633
75655
|
serviceName: "kici-orchestrator",
|
|
75634
75656
|
otlpEndpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT
|
package/dist/standalone.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import { AgentDeliveryMode, AgentPlatform, BaseColdStore, ChunkRequestWaiter, addLogsToArchive, chunkBuffer, computeBackoffDelay, computeMigrationsHash, createDb, createHealthRoutes, createLogger, createMeter, createMetricsRoutes, createPool, createS3Client, decrypt, deriveKey, encodeKeySegment, encrypt, enrichRequestContext, formatDuration, getPrometheusExporter, getReconnectDelay, getRequestContext, guardStartup, initTelemetry, isPgUniqueViolation, logger, parseDatabaseUrl, redactConfig, requestContext, serializeError, setServiceName, setupGracefulShutdown, sha256, storeMigrationContentHash, toErrorMessage, validateRequiredTools } from "@kici-dev/shared";
|
|
3
|
-
import { ALLOWED_SYSTEM_VARS, ARTIFACT_NAME_MAX_LENGTH, AccessLogAction, AccessLogOutcome, AccessLogSource, AccessLogTargetType, ActorType, AgentFailureCategory, ArtifactCompleteAckOutcome, ArtifactDownloadOutcome, ArtifactUploadOutcome, AttestationOrigin, BREAKING_FLOOR, CANONICAL_STATUSES, CacheRefScope, CheckMode, CheckRunConclusion, CheckStepOutcome, ConcurrencyStrategy, ContextDeleteErrorCode, ContextGateRejectReason, DEFAULT_APPROVAL_EXPIRY_HOURS, DEFAULT_CONCURRENCY_STRATEGY, DEFAULT_HOLD_EXPIRY_SECONDS, EventLogSource, EventLogStatus, ExecutionJobStatus, ExecutionRunStatus, ExecutionStepStatus, FanoutCause, FanoutError, HoldScope, HoldType, INIT_LABEL, InitFailureCategory, InventorySelectorSchema, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, LabelMatcher, LockFileParseError, LogStream, MIN_PROTOCOL_VERSION, ORCH_AGENT_CAPABILITIES, OWN_INGRESS_MODES, OrchLogPhase, OrchestratorMode, PLATFORM_CONNECTED_MODES, PLATFORM_TAINT_LABELS, PRIVILEGED_ROOT_LABEL, PROTOCOL_VERSION, PayloadOmittedReason, RegisterableTriggerType, RunFailureClass, SCHEMA_VERSION, SECURITY_HOLD_JOB_IDS, SSH_TRANSPORT_CAPABILITY, ScalerBackendType, ScalerEventType, ScalerEventType as ScalerEventType$1, SourceOrigin, SourceSubtype, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, TimeoutReason, TriggerSource, VariantKind, WS_CLOSE_AGENT_AUTH_FAILED, WS_CLOSE_AUTH_TIMEOUT, WS_CLOSE_DISPATCH_ACK_TIMEOUT, WS_CLOSE_GOING_AWAY, WS_CLOSE_HEARTBEAT_TIMEOUT, WS_CLOSE_INVALID_MESSAGE, WS_CLOSE_PROTOCOL_ERROR, WS_CLOSE_UNAUTHORIZED, WS_MAX_PAYLOAD_BYTES, WebhookRelayResult, WsRateLimiter, accessLogWarmSqlCase, agentAuthRequestSchema, agentLabelOf, agentToOrchestratorMessageSchema, agentTypeLabel, approvalTimeoutSecondsSchema, artifactInvalidNameError, attestationVerifyStatusSchema, buildTrustedPassthroughEnv, canonicalizeCapability, checkArtifactName, deriveOsArchLabels, derivePlatformTaints, fanoutEnvelopeFields, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, githubIngressPath, hostLabel, hostSatisfiesTarget, hostToScalerPlatform, installGateJobId, isFailureStatus, isKnownCapability, isLockDynamicJobFn, isLockInlineValue, isLockParallelStep, isLockStaticJob, isSelfReportedLabel, matchAllWorkflows, matchScopePattern, matchWorkflowsForEvent, matcherSatisfiedBy, materializeFanout, materializeResolvedHosts, materializeResolvedMatrix, matrixEnvelopeFields, mergeOrderedMaps, minAccessLogWarmDays, minSecretAuditLogWarmDays, partitionMatchers, peerAuthRequestSchema, peerFromPeerMessageSchema, peerHelloResponseSchema, peerHelloSchema, platformToOsArchLabels, platformToTaints, resolveRoleLabels, resolveScheduleInputs, resolveSecretsWithProvenance, scalerAgentLabels, scalerLabel, scalerPlatformSchema, scheduleTriggerKey, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve, trustedContributorHoldReason, unknownContributorHoldReason, validateScopeName, wrapUntrusted } from "@kici-dev/engine";
|
|
3
|
+
import { ALLOWED_SYSTEM_VARS, ARTIFACT_NAME_MAX_LENGTH, AccessLogAction, AccessLogOutcome, AccessLogSource, AccessLogTargetType, ActorType, AgentFailureCategory, ArtifactCompleteAckOutcome, ArtifactDownloadOutcome, ArtifactUploadOutcome, AttestationOrigin, BREAKING_FLOOR, CANONICAL_STATUSES, CacheRefScope, CheckMode, CheckRunConclusion, CheckStepOutcome, ConcurrencyStrategy, ContextDeleteErrorCode, ContextGateRejectReason, DEFAULT_APPROVAL_EXPIRY_HOURS, DEFAULT_CONCURRENCY_STRATEGY, DEFAULT_HOLD_EXPIRY_SECONDS, EventLogSource, EventLogStatus, ExecutionJobStatus, ExecutionRunStatus, ExecutionStepStatus, FanoutCause, FanoutError, HoldScope, HoldType, INIT_LABEL, InitFailureCategory, InventorySelectorSchema, KICI_AGENT_ENV_PREFIX, KNOWN_ROLES, LabelMatcher, LockFileParseError, LogStream, MIN_PROTOCOL_VERSION, ORCH_AGENT_CAPABILITIES, OWN_INGRESS_MODES, OrchLogPhase, OrchestratorMode, PLATFORM_CONNECTED_MODES, PLATFORM_TAINT_LABELS, PRIVILEGED_ROOT_LABEL, PROTOCOL_VERSION, PayloadOmittedReason, RegisterableTriggerType, RunFailureClass, SCHEMA_VERSION, SECURITY_HOLD_JOB_IDS, SSH_TRANSPORT_CAPABILITY, ScalerBackendType, ScalerEventType, ScalerEventType as ScalerEventType$1, SourceOrigin, SourceSubtype, TERMINAL_JOB_STATES, TERMINAL_RUN_STATES, TimeoutReason, TriggerSource, VariantKind, WS_CLOSE_AGENT_AUTH_FAILED, WS_CLOSE_AUTH_TIMEOUT, WS_CLOSE_DISPATCH_ACK_TIMEOUT, WS_CLOSE_GOING_AWAY, WS_CLOSE_HEARTBEAT_TIMEOUT, WS_CLOSE_INVALID_MESSAGE, WS_CLOSE_PROTOCOL_ERROR, WS_CLOSE_UNAUTHORIZED, WS_MAX_PAYLOAD_BYTES, WebhookRelayResult, WsRateLimiter, accessLogWarmSqlCase, agentAuthRequestSchema, agentLabelOf, agentToOrchestratorMessageSchema, agentTypeLabel, approvalTimeoutSecondsSchema, artifactInvalidNameError, assertValidSecretKey, attestationVerifyStatusSchema, buildTrustedPassthroughEnv, canonicalizeCapability, checkArtifactName, deriveOsArchLabels, derivePlatformTaints, fanoutEnvelopeFields, flattenActor, getAccessLogColdDays, getSecretAuditLogColdDays, githubIngressPath, hostLabel, hostSatisfiesTarget, hostToScalerPlatform, installGateJobId, isFailureStatus, isKnownCapability, isLockDynamicJobFn, isLockInlineValue, isLockParallelStep, isLockStaticJob, isSelfReportedLabel, matchAllWorkflows, matchScopePattern, matchWorkflowsForEvent, matcherSatisfiedBy, materializeFanout, materializeResolvedHosts, materializeResolvedMatrix, matrixEnvelopeFields, mergeOrderedMaps, minAccessLogWarmDays, minSecretAuditLogWarmDays, partitionMatchers, peerAuthRequestSchema, peerFromPeerMessageSchema, peerHelloResponseSchema, peerHelloSchema, platformToOsArchLabels, platformToTaints, resolveRoleLabels, resolveScheduleInputs, resolveSecretsWithProvenance, scalerAgentLabels, scalerLabel, scalerPlatformSchema, scheduleTriggerKey, secretAuditLogWarmSqlCase, shouldRecordAccess, shouldRecordSecretResolve, trustedContributorHoldReason, unknownContributorHoldReason, validateScopeName, validateSecretKey, wrapUntrusted } from "@kici-dev/engine";
|
|
4
4
|
import * as os$1 from "node:os";
|
|
5
5
|
import os, { cpus, freemem, homedir, hostname, release, tmpdir, totalmem, uptime, userInfo } from "node:os";
|
|
6
6
|
import { X509Certificate, createCipheriv, createDecipheriv, createHash, createHmac, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes, randomUUID, timingSafeEqual } from "node:crypto";
|
|
@@ -1269,7 +1269,7 @@ var logger$113, SOFTWARE_VERSION$1, PeerClient$1;
|
|
|
1269
1269
|
var init_peer_client = __esmMin((() => {
|
|
1270
1270
|
init_peer_crypto();
|
|
1271
1271
|
logger$113 = createLogger({ prefix: "peer-client" });
|
|
1272
|
-
SOFTWARE_VERSION$1 = "0.
|
|
1272
|
+
SOFTWARE_VERSION$1 = "0.4.0";
|
|
1273
1273
|
PeerClient$1 = class {
|
|
1274
1274
|
ws = null;
|
|
1275
1275
|
_state = "disconnected";
|
|
@@ -3232,7 +3232,7 @@ var init_peer_handler = __esmMin((() => {
|
|
|
3232
3232
|
init_peer_crypto();
|
|
3233
3233
|
init_join_token();
|
|
3234
3234
|
logger$111 = createLogger({ prefix: "peer-handler" });
|
|
3235
|
-
SOFTWARE_VERSION = "0.
|
|
3235
|
+
SOFTWARE_VERSION = "0.4.0";
|
|
3236
3236
|
RATE_LIMIT_MAX = 5;
|
|
3237
3237
|
RATE_LIMIT_WINDOW_MS = 6e4;
|
|
3238
3238
|
}));
|
|
@@ -30004,17 +30004,36 @@ var init_pg_secret_store = __esmMin((() => {
|
|
|
30004
30004
|
}
|
|
30005
30005
|
return result;
|
|
30006
30006
|
}
|
|
30007
|
-
/**
|
|
30008
|
-
* Set (create or update) a secret in a scope.
|
|
30009
|
-
* Encrypts the value with AAD = "orgId:scope:key".
|
|
30010
|
-
*/
|
|
30011
30007
|
/** Check if a scope is internal/operational (always allowed regardless of toggle). */
|
|
30012
30008
|
isInternalScope(scope) {
|
|
30013
30009
|
const colonIdx = scope.indexOf(":");
|
|
30014
30010
|
const path = colonIdx >= 0 ? scope.slice(colonIdx + 1) : scope;
|
|
30015
30011
|
return path.startsWith("__source__/") || path.startsWith("__webhook__/");
|
|
30016
30012
|
}
|
|
30013
|
+
/**
|
|
30014
|
+
* Set (create or update) a secret in a scope.
|
|
30015
|
+
* Encrypts the value with AAD = "orgId:scope:key".
|
|
30016
|
+
*
|
|
30017
|
+
* Rejects a key outside `[A-Za-z0-9._-]` before doing anything else. The AAD
|
|
30018
|
+
* is a plain concatenation, so a `:` in the key would let two distinct
|
|
30019
|
+
* locations render one AAD (scope 'b' + key 'c:d' equals scope 'b:c' + key
|
|
30020
|
+
* 'd') and a ciphertext written at one would authenticate at the other. The
|
|
30021
|
+
* check sits ahead of the customerSecretsEnabled gate so internal scopes get
|
|
30022
|
+
* no exemption — the binding has to hold for every writer.
|
|
30023
|
+
*
|
|
30024
|
+
* Callers pass a bare scope path, so the AAD's middle field is colon-free
|
|
30025
|
+
* too: the admin route and the dashboard handler both run the scope
|
|
30026
|
+
* validator immediately before calling in, and `source-store` builds its
|
|
30027
|
+
* scope from a uuid. That precondition is what makes the whole triple
|
|
30028
|
+
* recoverable, and it is the caller's to keep — this method does not
|
|
30029
|
+
* re-check it.
|
|
30030
|
+
*
|
|
30031
|
+
* Write-path only: getSecrets, listKeys, deleteSecret, deleteScope,
|
|
30032
|
+
* renameScope, getAllSecrets and createScope stay unvalidated, which is what
|
|
30033
|
+
* keeps a key stored before this rule readable and deletable.
|
|
30034
|
+
*/
|
|
30017
30035
|
async setSecret(orgId, scope, key, value) {
|
|
30036
|
+
assertValidSecretKey(key);
|
|
30018
30037
|
if (!this.customerSecretsEnabled && !this.isInternalScope(scope)) throw new Error("PG customer secrets are disabled. Use an external secret backend or enable pgCustomerSecrets in config.");
|
|
30019
30038
|
const aad = `${orgId}:${scope}:${key}`;
|
|
30020
30039
|
const encrypted = encrypt(value, this.masterKey, this.keyVersion, aad);
|
|
@@ -40190,6 +40209,8 @@ function createAdminRoutes(deps) {
|
|
|
40190
40209
|
const resolved = await routeScope(scope);
|
|
40191
40210
|
const scopeError = validateScopeName(resolved.path);
|
|
40192
40211
|
if (scopeError) return c.json({ error: scopeError }, 400);
|
|
40212
|
+
const keyError = validateSecretKey(key);
|
|
40213
|
+
if (keyError) return c.json({ error: keyError }, 400);
|
|
40193
40214
|
await resolved.store.setSecret(orgId, resolved.path, key, parsed.value);
|
|
40194
40215
|
await deps.auditLogger.log({
|
|
40195
40216
|
action: "setSecret",
|
|
@@ -44813,15 +44834,15 @@ var init_admin_config = __esmMin((() => {
|
|
|
44813
44834
|
function createHealthRoutes$1(deps = {}) {
|
|
44814
44835
|
return createHealthRoutes({
|
|
44815
44836
|
livenessInfo: () => ({
|
|
44816
|
-
version: "0.
|
|
44817
|
-
buildDate: "2026-08-
|
|
44818
|
-
buildCommit: "
|
|
44819
|
-
sdkVersion: "0.
|
|
44837
|
+
version: "0.4.0",
|
|
44838
|
+
buildDate: "2026-08-09T15:20:50.779Z",
|
|
44839
|
+
buildCommit: "ffd489464",
|
|
44840
|
+
sdkVersion: "0.4.0",
|
|
44820
44841
|
sdkBundleHash: "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f",
|
|
44821
|
-
sharedVersion: "0.
|
|
44842
|
+
sharedVersion: "0.4.0",
|
|
44822
44843
|
sharedBundleHash: "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188",
|
|
44823
|
-
engineVersion: "0.
|
|
44824
|
-
engineBundleHash: "
|
|
44844
|
+
engineVersion: "0.4.0",
|
|
44845
|
+
engineBundleHash: "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89"
|
|
44825
44846
|
}),
|
|
44826
44847
|
readinessCheck: deps.db ? async () => {
|
|
44827
44848
|
const checks = {};
|
|
@@ -44856,7 +44877,7 @@ function createCapabilitiesRoutes() {
|
|
|
44856
44877
|
const app = new Hono();
|
|
44857
44878
|
app.get("/api/v1/capabilities", (c) => {
|
|
44858
44879
|
const manifest = {
|
|
44859
|
-
orchestratorVersion: "0.
|
|
44880
|
+
orchestratorVersion: "0.4.0",
|
|
44860
44881
|
protocolVersion: PROTOCOL_VERSION,
|
|
44861
44882
|
minProtocolVersion: MIN_PROTOCOL_VERSION
|
|
44862
44883
|
};
|
|
@@ -47475,7 +47496,7 @@ var init_app = __esmMin((() => {
|
|
|
47475
47496
|
init_log_chunk_sink();
|
|
47476
47497
|
init_agent_metrics_aggregator();
|
|
47477
47498
|
logger$31 = createLogger({ prefix: "app" });
|
|
47478
|
-
ORCHESTRATOR_VERSION$2 = "0.
|
|
47499
|
+
ORCHESTRATOR_VERSION$2 = "0.4.0";
|
|
47479
47500
|
SourceLocationStore = class {
|
|
47480
47501
|
cache = /* @__PURE__ */ new Map();
|
|
47481
47502
|
key(workflowName, jobName) {
|
|
@@ -64901,14 +64922,14 @@ var init_worker_core = __esmMin((() => {
|
|
|
64901
64922
|
init_peer_outbox();
|
|
64902
64923
|
init_worker_outbox_relay();
|
|
64903
64924
|
init_app_on_error();
|
|
64904
|
-
ORCHESTRATOR_VERSION$1 = "0.
|
|
64905
|
-
WORKER_BUILD_COMMIT = "
|
|
64906
|
-
WORKER_SDK_VERSION = "0.
|
|
64925
|
+
ORCHESTRATOR_VERSION$1 = "0.4.0";
|
|
64926
|
+
WORKER_BUILD_COMMIT = "ffd489464";
|
|
64927
|
+
WORKER_SDK_VERSION = "0.4.0";
|
|
64907
64928
|
WORKER_SDK_BUNDLE_HASH = "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f";
|
|
64908
|
-
WORKER_SHARED_VERSION = "0.
|
|
64929
|
+
WORKER_SHARED_VERSION = "0.4.0";
|
|
64909
64930
|
WORKER_SHARED_BUNDLE_HASH = "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188";
|
|
64910
|
-
WORKER_ENGINE_VERSION = "0.
|
|
64911
|
-
WORKER_ENGINE_BUNDLE_HASH = "
|
|
64931
|
+
WORKER_ENGINE_VERSION = "0.4.0";
|
|
64932
|
+
WORKER_ENGINE_BUNDLE_HASH = "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89";
|
|
64912
64933
|
logger$2 = createLogger({ prefix: "worker" });
|
|
64913
64934
|
DRAIN_TIMEOUT_MS = 3e5;
|
|
64914
64935
|
}));
|
|
@@ -64932,14 +64953,14 @@ var init_worker_core = __esmMin((() => {
|
|
|
64932
64953
|
* Graceful shutdown:
|
|
64933
64954
|
* agent WS -> heartbeat -> HTTP -> DB
|
|
64934
64955
|
*/
|
|
64935
|
-
const ORCHESTRATOR_VERSION = "0.
|
|
64936
|
-
const BUILD_COMMIT = "
|
|
64937
|
-
const SDK_VERSION = "0.
|
|
64956
|
+
const ORCHESTRATOR_VERSION = "0.4.0";
|
|
64957
|
+
const BUILD_COMMIT = "ffd489464";
|
|
64958
|
+
const SDK_VERSION = "0.4.0";
|
|
64938
64959
|
const SDK_BUNDLE_HASH = "fcd0a836aa1cb92debd93e0254450614d123b3748511aa4148d956fd72a7c29f";
|
|
64939
|
-
const SHARED_VERSION = "0.
|
|
64960
|
+
const SHARED_VERSION = "0.4.0";
|
|
64940
64961
|
const SHARED_BUNDLE_HASH = "f16fa528a8a9ef1bed8df369f0e88efafca8a9954a749005299fdbcdb93fa188";
|
|
64941
|
-
const ENGINE_VERSION = "0.
|
|
64942
|
-
const ENGINE_BUNDLE_HASH = "
|
|
64962
|
+
const ENGINE_VERSION = "0.4.0";
|
|
64963
|
+
const ENGINE_BUNDLE_HASH = "31e2d5c327284e1cac908d7f85cf6d878bbf87ea0da93ed09c6205ada6935f89";
|
|
64943
64964
|
const otelSdk = initTelemetry({
|
|
64944
64965
|
serviceName: "kici-orchestrator",
|
|
64945
64966
|
otlpEndpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.
|
|
2
|
+
"version": "0.4.0",
|
|
3
3
|
"images": {
|
|
4
|
-
"kici-agent": "sha256:
|
|
5
|
-
"kici-orchestrator": "sha256:
|
|
4
|
+
"kici-agent": "sha256:60f463973e2fa02c4e1d9311c9214e679269fa6ead3135b4c826789ca0278cbf",
|
|
5
|
+
"kici-orchestrator": "sha256:75312fc8bee960384aa2c57ff72cf2fe65bcd52d222278632c79a5f14ccd3e27"
|
|
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.4.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",
|
|
@@ -84,8 +84,8 @@
|
|
|
84
84
|
"ws": "^8.21.1",
|
|
85
85
|
"yaml": "^2.9.0",
|
|
86
86
|
"zod": "^4.4.3",
|
|
87
|
-
"@kici-dev/
|
|
88
|
-
"@kici-dev/
|
|
87
|
+
"@kici-dev/engine": "0.4.0",
|
|
88
|
+
"@kici-dev/shared": "0.4.0"
|
|
89
89
|
},
|
|
90
90
|
"kici": {
|
|
91
91
|
"metrics": {
|
|
@@ -100,7 +100,7 @@
|
|
|
100
100
|
"@types/dockerode": "^4.0.1",
|
|
101
101
|
"@types/ws": "^8.18.1",
|
|
102
102
|
"kysely-ctl": "^0.21.0",
|
|
103
|
-
"@kici-dev/agent": "0.
|
|
103
|
+
"@kici-dev/agent": "0.4.0"
|
|
104
104
|
},
|
|
105
105
|
"scripts": {
|
|
106
106
|
"build": "node ../../scripts/build-service.mjs && tsgo --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.
|
|
6
|
-
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Forchestrator/0.
|
|
5
|
+
"name": "@kici-dev/orchestrator@0.4.0",
|
|
6
|
+
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Forchestrator/0.4.0/2bd64076-f4f1-416e-9ca2-c7c843d5d0a1",
|
|
7
7
|
"creationInfo": {
|
|
8
|
-
"created": "2026-08-
|
|
8
|
+
"created": "2026-08-09T16:03:04Z",
|
|
9
9
|
"creators": [
|
|
10
10
|
"Tool: kici-sbom-generator"
|
|
11
11
|
]
|
|
@@ -1018,9 +1018,9 @@
|
|
|
1018
1018
|
"homepage": "https://ericsmekens.github.io/jsep/tree/master/packages/regex#readme"
|
|
1019
1019
|
},
|
|
1020
1020
|
{
|
|
1021
|
-
"SPDXID": "SPDXRef-Package--kici-dev-core-0.
|
|
1021
|
+
"SPDXID": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
1022
1022
|
"name": "@kici-dev/core",
|
|
1023
|
-
"versionInfo": "0.
|
|
1023
|
+
"versionInfo": "0.4.0",
|
|
1024
1024
|
"downloadLocation": "NOASSERTION",
|
|
1025
1025
|
"filesAnalyzed": false,
|
|
1026
1026
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1031,16 +1031,16 @@
|
|
|
1031
1031
|
{
|
|
1032
1032
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1033
1033
|
"referenceType": "purl",
|
|
1034
|
-
"referenceLocator": "pkg:npm/%40kici-dev/core@0.
|
|
1034
|
+
"referenceLocator": "pkg:npm/%40kici-dev/core@0.4.0"
|
|
1035
1035
|
}
|
|
1036
1036
|
],
|
|
1037
1037
|
"description": "Light shared utilities for the KiCI stack (logging, errors, formatting, crypto, zx init, the TypeScript ESM loader hook). No server-side dependencies.",
|
|
1038
1038
|
"homepage": "https://kici.dev"
|
|
1039
1039
|
},
|
|
1040
1040
|
{
|
|
1041
|
-
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.
|
|
1041
|
+
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
1042
1042
|
"name": "@kici-dev/engine",
|
|
1043
|
-
"versionInfo": "0.
|
|
1043
|
+
"versionInfo": "0.4.0",
|
|
1044
1044
|
"downloadLocation": "NOASSERTION",
|
|
1045
1045
|
"filesAnalyzed": false,
|
|
1046
1046
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1051,7 +1051,7 @@
|
|
|
1051
1051
|
{
|
|
1052
1052
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1053
1053
|
"referenceType": "purl",
|
|
1054
|
-
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.
|
|
1054
|
+
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.4.0"
|
|
1055
1055
|
}
|
|
1056
1056
|
],
|
|
1057
1057
|
"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.",
|
|
@@ -1060,7 +1060,7 @@
|
|
|
1060
1060
|
{
|
|
1061
1061
|
"SPDXID": "SPDXRef-RootPackage",
|
|
1062
1062
|
"name": "@kici-dev/orchestrator",
|
|
1063
|
-
"versionInfo": "0.
|
|
1063
|
+
"versionInfo": "0.4.0",
|
|
1064
1064
|
"downloadLocation": "NOASSERTION",
|
|
1065
1065
|
"filesAnalyzed": false,
|
|
1066
1066
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1071,16 +1071,16 @@
|
|
|
1071
1071
|
{
|
|
1072
1072
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1073
1073
|
"referenceType": "purl",
|
|
1074
|
-
"referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.
|
|
1074
|
+
"referenceLocator": "pkg:npm/%40kici-dev/orchestrator@0.4.0"
|
|
1075
1075
|
}
|
|
1076
1076
|
],
|
|
1077
1077
|
"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.",
|
|
1078
1078
|
"homepage": "https://kici.dev"
|
|
1079
1079
|
},
|
|
1080
1080
|
{
|
|
1081
|
-
"SPDXID": "SPDXRef-Package--kici-dev-shared-0.
|
|
1081
|
+
"SPDXID": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
1082
1082
|
"name": "@kici-dev/shared",
|
|
1083
|
-
"versionInfo": "0.
|
|
1083
|
+
"versionInfo": "0.4.0",
|
|
1084
1084
|
"downloadLocation": "NOASSERTION",
|
|
1085
1085
|
"filesAnalyzed": false,
|
|
1086
1086
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -1091,7 +1091,7 @@
|
|
|
1091
1091
|
{
|
|
1092
1092
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
1093
1093
|
"referenceType": "purl",
|
|
1094
|
-
"referenceLocator": "pkg:npm/%40kici-dev/shared@0.
|
|
1094
|
+
"referenceLocator": "pkg:npm/%40kici-dev/shared@0.4.0"
|
|
1095
1095
|
}
|
|
1096
1096
|
],
|
|
1097
1097
|
"description": "Shared utilities for the KiCI CI/CD stack — logging, zx setup, crypto, telemetry, health and metrics routes. No business logic.",
|
|
@@ -7768,57 +7768,57 @@
|
|
|
7768
7768
|
"relationshipType": "DEPENDS_ON"
|
|
7769
7769
|
},
|
|
7770
7770
|
{
|
|
7771
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7771
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7772
7772
|
"relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.140.0",
|
|
7773
7773
|
"relationshipType": "DEPENDS_ON"
|
|
7774
7774
|
},
|
|
7775
7775
|
{
|
|
7776
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7776
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7777
7777
|
"relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
|
|
7778
7778
|
"relationshipType": "DEPENDS_ON"
|
|
7779
7779
|
},
|
|
7780
7780
|
{
|
|
7781
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7781
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7782
7782
|
"relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
|
|
7783
7783
|
"relationshipType": "DEPENDS_ON"
|
|
7784
7784
|
},
|
|
7785
7785
|
{
|
|
7786
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7786
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7787
7787
|
"relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
|
|
7788
7788
|
"relationshipType": "DEPENDS_ON"
|
|
7789
7789
|
},
|
|
7790
7790
|
{
|
|
7791
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7791
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7792
7792
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.4.3",
|
|
7793
7793
|
"relationshipType": "DEPENDS_ON"
|
|
7794
7794
|
},
|
|
7795
7795
|
{
|
|
7796
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
7796
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7797
7797
|
"relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
|
|
7798
7798
|
"relationshipType": "DEPENDS_ON"
|
|
7799
7799
|
},
|
|
7800
7800
|
{
|
|
7801
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
7801
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7802
7802
|
"relatedSpdxElement": "SPDXRef-Package-jose-6.2.3",
|
|
7803
7803
|
"relationshipType": "DEPENDS_ON"
|
|
7804
7804
|
},
|
|
7805
7805
|
{
|
|
7806
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
7806
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7807
7807
|
"relatedSpdxElement": "SPDXRef-Package-jsonpath-plus-10.4.0",
|
|
7808
7808
|
"relationshipType": "DEPENDS_ON"
|
|
7809
7809
|
},
|
|
7810
7810
|
{
|
|
7811
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
7811
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7812
7812
|
"relatedSpdxElement": "SPDXRef-Package-picomatch-4.0.5",
|
|
7813
7813
|
"relationshipType": "DEPENDS_ON"
|
|
7814
7814
|
},
|
|
7815
7815
|
{
|
|
7816
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
7816
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7817
7817
|
"relatedSpdxElement": "SPDXRef-Package-safe-regex-2.1.1",
|
|
7818
7818
|
"relationshipType": "DEPENDS_ON"
|
|
7819
7819
|
},
|
|
7820
7820
|
{
|
|
7821
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
7821
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7822
7822
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.4.3",
|
|
7823
7823
|
"relationshipType": "DEPENDS_ON"
|
|
7824
7824
|
},
|
|
@@ -7854,12 +7854,12 @@
|
|
|
7854
7854
|
},
|
|
7855
7855
|
{
|
|
7856
7856
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
7857
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.
|
|
7857
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7858
7858
|
"relationshipType": "DEPENDS_ON"
|
|
7859
7859
|
},
|
|
7860
7860
|
{
|
|
7861
7861
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
7862
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.
|
|
7862
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7863
7863
|
"relationshipType": "DEPENDS_ON"
|
|
7864
7864
|
},
|
|
7865
7865
|
{
|
|
@@ -7968,117 +7968,117 @@
|
|
|
7968
7968
|
"relationshipType": "DEPENDS_ON"
|
|
7969
7969
|
},
|
|
7970
7970
|
{
|
|
7971
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7971
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7972
7972
|
"relatedSpdxElement": "SPDXRef-Package--aws-sdk-client-s3-3.1090.0",
|
|
7973
7973
|
"relationshipType": "DEPENDS_ON"
|
|
7974
7974
|
},
|
|
7975
7975
|
{
|
|
7976
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7977
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.
|
|
7976
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7977
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.4.0",
|
|
7978
7978
|
"relationshipType": "DEPENDS_ON"
|
|
7979
7979
|
},
|
|
7980
7980
|
{
|
|
7981
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7982
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.
|
|
7981
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7982
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.4.0",
|
|
7983
7983
|
"relationshipType": "DEPENDS_ON"
|
|
7984
7984
|
},
|
|
7985
7985
|
{
|
|
7986
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7986
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7987
7987
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-api-1.9.1",
|
|
7988
7988
|
"relationshipType": "DEPENDS_ON"
|
|
7989
7989
|
},
|
|
7990
7990
|
{
|
|
7991
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7991
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7992
7992
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-metrics-otlp-http-0.221.0",
|
|
7993
7993
|
"relationshipType": "DEPENDS_ON"
|
|
7994
7994
|
},
|
|
7995
7995
|
{
|
|
7996
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
7996
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
7997
7997
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-prometheus-0.221.0",
|
|
7998
7998
|
"relationshipType": "DEPENDS_ON"
|
|
7999
7999
|
},
|
|
8000
8000
|
{
|
|
8001
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8001
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8002
8002
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-exporter-trace-otlp-http-0.221.0",
|
|
8003
8003
|
"relationshipType": "DEPENDS_ON"
|
|
8004
8004
|
},
|
|
8005
8005
|
{
|
|
8006
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8006
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8007
8007
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-instrumentation-runtime-node-0.34.0",
|
|
8008
8008
|
"relationshipType": "DEPENDS_ON"
|
|
8009
8009
|
},
|
|
8010
8010
|
{
|
|
8011
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8011
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8012
8012
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-resources-2.10.0",
|
|
8013
8013
|
"relationshipType": "DEPENDS_ON"
|
|
8014
8014
|
},
|
|
8015
8015
|
{
|
|
8016
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8016
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8017
8017
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-sdk-node-0.221.0",
|
|
8018
8018
|
"relationshipType": "DEPENDS_ON"
|
|
8019
8019
|
},
|
|
8020
8020
|
{
|
|
8021
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8021
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8022
8022
|
"relatedSpdxElement": "SPDXRef-Package--opentelemetry-semantic-conventions-1.43.0",
|
|
8023
8023
|
"relationshipType": "DEPENDS_ON"
|
|
8024
8024
|
},
|
|
8025
8025
|
{
|
|
8026
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8026
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8027
8027
|
"relatedSpdxElement": "SPDXRef-Package-archiver-8.0.0",
|
|
8028
8028
|
"relationshipType": "DEPENDS_ON"
|
|
8029
8029
|
},
|
|
8030
8030
|
{
|
|
8031
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8031
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8032
8032
|
"relatedSpdxElement": "SPDXRef-Package-diff-9.0.0",
|
|
8033
8033
|
"relationshipType": "DEPENDS_ON"
|
|
8034
8034
|
},
|
|
8035
8035
|
{
|
|
8036
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8036
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8037
8037
|
"relatedSpdxElement": "SPDXRef-Package-hono-4.12.32",
|
|
8038
8038
|
"relationshipType": "DEPENDS_ON"
|
|
8039
8039
|
},
|
|
8040
8040
|
{
|
|
8041
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8041
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8042
8042
|
"relatedSpdxElement": "SPDXRef-Package-kysely-0.29.4",
|
|
8043
8043
|
"relationshipType": "DEPENDS_ON"
|
|
8044
8044
|
},
|
|
8045
8045
|
{
|
|
8046
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8046
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8047
8047
|
"relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.140.0",
|
|
8048
8048
|
"relationshipType": "DEPENDS_ON"
|
|
8049
8049
|
},
|
|
8050
8050
|
{
|
|
8051
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8051
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8052
8052
|
"relatedSpdxElement": "SPDXRef-Package-pg-8.22.0",
|
|
8053
8053
|
"relationshipType": "DEPENDS_ON"
|
|
8054
8054
|
},
|
|
8055
8055
|
{
|
|
8056
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8056
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8057
8057
|
"relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
|
|
8058
8058
|
"relationshipType": "DEPENDS_ON"
|
|
8059
8059
|
},
|
|
8060
8060
|
{
|
|
8061
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8061
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8062
8062
|
"relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
|
|
8063
8063
|
"relationshipType": "DEPENDS_ON"
|
|
8064
8064
|
},
|
|
8065
8065
|
{
|
|
8066
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8066
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8067
8067
|
"relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
|
|
8068
8068
|
"relationshipType": "DEPENDS_ON"
|
|
8069
8069
|
},
|
|
8070
8070
|
{
|
|
8071
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8071
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8072
8072
|
"relatedSpdxElement": "SPDXRef-Package-yaml-2.9.0",
|
|
8073
8073
|
"relationshipType": "DEPENDS_ON"
|
|
8074
8074
|
},
|
|
8075
8075
|
{
|
|
8076
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8076
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8077
8077
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.4.3",
|
|
8078
8078
|
"relationshipType": "DEPENDS_ON"
|
|
8079
8079
|
},
|
|
8080
8080
|
{
|
|
8081
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.
|
|
8081
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-shared-0.4.0",
|
|
8082
8082
|
"relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
|
|
8083
8083
|
"relationshipType": "DEPENDS_ON"
|
|
8084
8084
|
},
|