@kici-dev/sdk 0.6.1 → 0.7.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/git-types.d.ts +9 -0
- package/dist/git-types.js +20 -1
- package/dist/index.d.ts +20 -5
- package/dist/index.js +2 -2
- package/dist/internal.d.ts +36 -0
- package/dist/internal.js +15 -0
- package/dist/job.js +2 -13
- package/dist/triggers/comment.js +6 -1
- package/dist/triggers/types.d.ts +5 -0
- package/dist/triggers/types.js +7 -1
- package/dist/types.d.ts +32 -6
- package/dist/types.js +26 -6
- package/package.json +8 -3
- package/sbom.spdx.json +25 -25
package/dist/git-types.d.ts
CHANGED
|
@@ -90,6 +90,15 @@ export declare function resolveCredential(perCall: string | GitCredentialRef | u
|
|
|
90
90
|
* pasting the credential itself — which would commit it to a git repository.
|
|
91
91
|
*/
|
|
92
92
|
export declare function assertSecretName(value: string, field: string, subject?: string): void;
|
|
93
|
+
/**
|
|
94
|
+
* Every `<name>Secret` field in a credential map names a secret in qualified
|
|
95
|
+
* `<context>:<secret-name>` form, and never carries the material itself.
|
|
96
|
+
*
|
|
97
|
+
* `subject` is the declaring surface as the author wrote it — `job('build')` or
|
|
98
|
+
* `dynamicJob('reports')` — so a message names the call the author can find.
|
|
99
|
+
* A `<name>Value` sibling is material by design and is not checked here.
|
|
100
|
+
*/
|
|
101
|
+
export declare function validateGitCredentials(subject: string, credentials: GitCredentialMap): void;
|
|
93
102
|
/**
|
|
94
103
|
* Private-registry credentials for pulling a job's container image.
|
|
95
104
|
*
|
package/dist/git-types.js
CHANGED
|
@@ -26,7 +26,26 @@ function resolveCredential(perCall, map) {
|
|
|
26
26
|
function assertSecretName(value, field, subject = "git credential") {
|
|
27
27
|
if (value.startsWith("-----BEGIN") || /^gh[pousr]_/.test(value) || value.startsWith("github_pat_")) throw new Error(`${subject} '${field}' looks like the credential itself, not the name of a secret holding it. Store it with \`kici-admin secret set\` and name it here.`);
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Every `<name>Secret` field in a credential map names a secret in qualified
|
|
31
|
+
* `<context>:<secret-name>` form, and never carries the material itself.
|
|
32
|
+
*
|
|
33
|
+
* `subject` is the declaring surface as the author wrote it — `job('build')` or
|
|
34
|
+
* `dynamicJob('reports')` — so a message names the call the author can find.
|
|
35
|
+
* A `<name>Value` sibling is material by design and is not checked here.
|
|
36
|
+
*/
|
|
37
|
+
function validateGitCredentials(subject, credentials) {
|
|
38
|
+
for (const [alias, ref] of Object.entries(credentials)) {
|
|
39
|
+
const bag = ref;
|
|
40
|
+
for (const [field, value] of Object.entries(bag)) {
|
|
41
|
+
if (!field.endsWith("Secret") || typeof value !== "string") continue;
|
|
42
|
+
assertSecretName(value, `${alias}.${field}`);
|
|
43
|
+
const idx = value.indexOf(":");
|
|
44
|
+
if (idx <= 0 || idx >= value.length - 1 || value.slice(idx + 1).includes(":")) throw new Error(`${subject}: gitCredentials.${alias}.${field} must use qualified <context>:<secret-name> syntax (got: ${value})`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
29
48
|
//#endregion
|
|
30
|
-
export { assertSecretName, resolveCredential };
|
|
49
|
+
export { assertSecretName, resolveCredential, validateGitCredentials };
|
|
31
50
|
|
|
32
51
|
//# sourceMappingURL=git-types.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
export { step } from './step.js';
|
|
2
2
|
export { job } from './job.js';
|
|
3
3
|
export { workflow } from './workflow.js';
|
|
4
|
-
export { parallel, isParallelGroup
|
|
4
|
+
export { parallel, isParallelGroup } from './parallel.js';
|
|
5
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
6
|
+
export { flattenStepInputs } from './parallel.js';
|
|
5
7
|
export type { ParallelGroup, ParallelOptions } from './parallel.js';
|
|
6
8
|
export { invokeSource } from './invoke.js';
|
|
7
9
|
export type { InvokeConfig } from './invoke.js';
|
|
10
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
8
11
|
export { normalizeApproval } from './approval.js';
|
|
9
12
|
export type { ApprovalConfig, ApprovalWhen, ApproverClause, NormalizedApproval, } from './approval.js';
|
|
10
13
|
export { pr, push, tag, comment, review, reviewComment, release, dispatch, create, delete as delete, status, workflowRun, fork, star, watch, webhook, kiciEvent, workflowComplete, workflowsFailedBatch, jobComplete, genericWebhook, schedule, lifecycle, defineDispatchInputs, } from './triggers/index.js';
|
|
@@ -12,19 +15,25 @@ export type { DefinedDispatchInputs, InferDispatchInputs, DispatchInputsMap, Tri
|
|
|
12
15
|
export { onCancel, cleanup, onSuccess, onFailure, beforeStep, afterStep } from './hooks/index.js';
|
|
13
16
|
export type { HookConfig, HookFn, HookInput, HookContext, OutcomeMetadata } from './hooks/index.js';
|
|
14
17
|
export { rule, skip, onlyOnFirstHost, onlyOnLastHost, onlyOnFanoutIndex } from './rules/index.js';
|
|
18
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
15
19
|
export { evaluateRules } from './rules/index.js';
|
|
16
|
-
|
|
20
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
21
|
+
export { createRuleContext } from './rules/index.js';
|
|
22
|
+
export { ChangedFilesUnavailableError } from './rules/index.js';
|
|
17
23
|
export type { CreateRuleContextInput } from './rules/index.js';
|
|
18
24
|
export { isEventType } from './rules/index.js';
|
|
19
25
|
export type { Rule, RuleContext, RuleCheckFn, RuleResult, EventPayload, RuleEvaluationResult, EventBase, PullRequestEventPayload, PushEventPayload, TagEventPayload, CommentEventPayload, ReviewEventPayload, ReviewCommentEventPayload, ReleaseEventPayload, DispatchEventPayload, CreateEventPayload, DeleteEventPayload, StatusEventPayload, WorkflowRunEventPayload, ForkEventPayload, StarEventPayload, WatchEventPayload, WebhookEventPayload, KiciEventPayload, WorkflowCompleteEventPayload, JobCompleteEventPayload, GenericWebhookEventPayload, ScheduleEventPayload, LifecycleEventPayload, GitHubRepository, GitHubUser, GitHubPullRequest, GitHubCommit, GitHubComment, GitHubReview, GitHubRelease, } from './rules/index.js';
|
|
20
26
|
export { validateDag } from './validation/index.js';
|
|
21
27
|
export type { DagNode, DagValidationResult } from './validation/index.js';
|
|
22
28
|
export type { SourceLocation, OutputProxy, Step, StepOptions, StepOptionsBase, StepOptionsPlain, StepOptionsWithCheck, StepRunFn, RetryConfig, NormalizedRetry, BareStepFn, StepInput, OutputSchema, InferOutputs, Job, JobOptions, GenericInitConfig, MiseInitConfig, InitPreset, InitItem, InitConfig, ContainerConfig, RunsOnSelector, RunsOn, RunsOnPick, Workflow, WorkflowOptions, Registry, Trigger, DynamicJobFn, DynamicJobContext, JobOrFactory, } from './types.js';
|
|
23
|
-
export { isDynamicJobFn, dynamicJob, getDynamicJobGroup, getDynamicJobNeeds, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, } from './types.js';
|
|
29
|
+
export { isDynamicJobFn, dynamicJob, getDynamicJobGroup, getDynamicJobNeeds, getDynamicJobGitCredentials, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, DYNAMIC_JOB_GIT_CREDENTIALS_TAG, } from './types.js';
|
|
24
30
|
export type { TaggedDynamicJobFn, ResultAwareDynamicJobConfig, ResultAwareDynamicJobFn, DynamicJobNeed, NeedsWhen, NeedsWhenInput, } from './types.js';
|
|
31
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
25
32
|
export { buildNeedsContext } from './needs-context.js';
|
|
26
33
|
export type { UpstreamSnapshot, NeedsContext, NeedEntry, GroupNeedEntry, InvokeNeedEntry, InvokeResult, } from './needs-context.js';
|
|
27
|
-
export { CacheSpecSchema
|
|
34
|
+
export { CacheSpecSchema } from './cache-types.js';
|
|
35
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
36
|
+
export { normalizeCacheSpecs } from './cache-types.js';
|
|
28
37
|
export type { CacheSpec, CacheInput } from './cache-types.js';
|
|
29
38
|
export type { CacheRestoreResult, CacheApi } from './cache-types.js';
|
|
30
39
|
export { ArtifactNameSchema, ARTIFACT_NAME_MAX_LENGTH } from './artifacts-types.js';
|
|
@@ -36,18 +45,24 @@ export type { DynamicGroupRef } from './dynamic-group.js';
|
|
|
36
45
|
export type { StepContext, Logger, WorkflowInfo, JobInfo, AgentInfo, MatrixJobOutputs, HostJobOutputs, RepoInfo, StepSecretsTyped, KnownSecretKeys, } from './context.js';
|
|
37
46
|
export { isMatrixJobOutputs, isHostJobOutputs } from './context.js';
|
|
38
47
|
export type { FilterContext, FilterFn } from './filter.js';
|
|
48
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
39
49
|
export { createFilterContext } from './filter-context.js';
|
|
40
50
|
export type { CreateFilterContextInput } from './filter-context.js';
|
|
41
51
|
export type { FanoutPosition } from './fanout-context.js';
|
|
52
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
42
53
|
export { buildKiciApi } from './api-types.js';
|
|
43
54
|
export type { KiciApi, KiciApiTransport, InfrastructureApi, InfrastructureListResult, InventoryApi, HostApi, HostInventoryEntry, InventorySelector, } from './api-types.js';
|
|
44
55
|
export { SecretNotFoundError } from './errors.js';
|
|
56
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
45
57
|
export { createStepSecrets } from './secrets.js';
|
|
46
58
|
export type { StepSecrets, TrackedStepSecrets, SecretMeta, SecretFileOptions, MountedFile, StepSecretsFileHost, StepSecretsFileWiring, StepSecretsHandle, StepSecretMountKind, StepSecretMountRecord, } from './secrets.js';
|
|
47
|
-
export { createStepOutputProxy, createJobOutputProxy, createSnapshotOutputProxy, resolveStepOutputs, resolveJobOutputs,
|
|
59
|
+
export { createStepOutputProxy, createJobOutputProxy, createSnapshotOutputProxy, resolveStepOutputs, resolveJobOutputs, getStepOutputsMap, getJobOutputsMap, getStepRefMap, } from './outputs.js';
|
|
60
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
61
|
+
export { setStepOutputsMap, setJobOutputsMap, setStepRefMap } from './outputs.js';
|
|
48
62
|
export type { OutputsMap, StepRefMap } from './outputs.js';
|
|
49
63
|
export type { StaticMatrixArray, StaticMatrixObject, DynamicMatrixFn, DynamicMatrixContext, Matrix, MatrixInclude, MatrixExclude, MatrixValues, } from './matrix/index.js';
|
|
50
64
|
export { isStaticArray, isStaticObject, isDynamicFunction } from './matrix/index.js';
|
|
65
|
+
/** @deprecated Moved to `@kici-dev/sdk/internal` — internal runtime API, not covered by semver. */
|
|
51
66
|
export { expandMatrix, applyIncludeExclude } from './matrix/index.js';
|
|
52
67
|
export { defineEvent, isEventDefinition } from './events/index.js';
|
|
53
68
|
export type { EventDefinition } from './events/index.js';
|
package/dist/index.js
CHANGED
|
@@ -53,7 +53,7 @@ import { isEventType } from "./events/event-payloads.js";
|
|
|
53
53
|
import "./rules/index.js";
|
|
54
54
|
import { validateDag } from "./validation/dag.js";
|
|
55
55
|
import "./validation/index.js";
|
|
56
|
-
import { DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, dynamicJob, getDynamicJobGroup, getDynamicJobNeeds, isDynamicJobFn } from "./types.js";
|
|
56
|
+
import { DYNAMIC_JOB_GIT_CREDENTIALS_TAG, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, dynamicJob, getDynamicJobGitCredentials, getDynamicJobGroup, getDynamicJobNeeds, isDynamicJobFn } from "./types.js";
|
|
57
57
|
import { buildNeedsContext } from "./needs-context.js";
|
|
58
58
|
import { provenanceSubjectIsPath } from "./provenance-types.js";
|
|
59
59
|
import { createStepSecrets } from "./secrets.js";
|
|
@@ -65,4 +65,4 @@ import "./events/index.js";
|
|
|
65
65
|
import { agentVersionConverge } from "./fleet/agent-version-converge.js";
|
|
66
66
|
import { SCALER_EVENT_NAMES, ScaleDownReason, ScalerScaleDownPayload, ScalerScaleUpPayload } from "@kici-dev/engine";
|
|
67
67
|
import { z } from "zod";
|
|
68
|
-
export { ARTIFACT_NAME_MAX_LENGTH, ArtifactNameSchema, CacheSpecSchema, ChangedFilesUnavailableError, DYNAMIC_GROUP_TAG, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, SCALER_EVENT_NAMES, ScaleDownReason, ScalerScaleDownPayload, ScalerScaleUpPayload, SecretNotFoundError, WaitForTimeoutError, afterStep, agentVersionConverge, applyIncludeExclude, assertSecretName, beforeStep, buildAgentCloudInit, buildKiciApi, buildNeedsContext, checkStep, cleanup, comment, create, createFilterContext, createJobOutputProxy, createRuleContext, createSnapshotOutputProxy, createStepOutputProxy, createStepSecrets, defineDispatchInputs, defineEvent, del as delete, dispatch, dynamicGroup, dynamicJob, evaluateRules, expandMatrix, fixture, flattenStepInputs, fork, genericWebhook, getDynamicJobGroup, getDynamicJobNeeds, getJobOutputsMap, getStepOutputsMap, getStepRefMap, idempotent, idempotentStep, invokeSource, isDynamicFunction, isDynamicGroupRef, isDynamicJobFn, isEventDefinition, isEventType, isHostJobOutputs, isMatrixJobOutputs, isParallelGroup, isStaticArray, isStaticObject, job, jobComplete, kiciEvent, lifecycle, normalizeApproval, normalizeCacheSpecs, onCancel, onFailure, onSuccess, onlyOnFanoutIndex, onlyOnFirstHost, onlyOnLastHost, parallel, pr, provenanceSubjectIsPath, push, release, resolveJobOutputs, resolveStepOutputs, restartHost, review, reviewComment, rule, schedule, setJobOutputsMap, setStepOutputsMap, setStepRefMap, skip, star, status, step, tag, validateDag, waitFor, waitForHostAlive, waitForStep, watch, webhook, workflow, workflowComplete, workflowRun, workflowsFailedBatch, z };
|
|
68
|
+
export { ARTIFACT_NAME_MAX_LENGTH, ArtifactNameSchema, CacheSpecSchema, ChangedFilesUnavailableError, DYNAMIC_GROUP_TAG, DYNAMIC_JOB_GIT_CREDENTIALS_TAG, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, SCALER_EVENT_NAMES, ScaleDownReason, ScalerScaleDownPayload, ScalerScaleUpPayload, SecretNotFoundError, WaitForTimeoutError, afterStep, agentVersionConverge, applyIncludeExclude, assertSecretName, beforeStep, buildAgentCloudInit, buildKiciApi, buildNeedsContext, checkStep, cleanup, comment, create, createFilterContext, createJobOutputProxy, createRuleContext, createSnapshotOutputProxy, createStepOutputProxy, createStepSecrets, defineDispatchInputs, defineEvent, del as delete, dispatch, dynamicGroup, dynamicJob, evaluateRules, expandMatrix, fixture, flattenStepInputs, fork, genericWebhook, getDynamicJobGitCredentials, getDynamicJobGroup, getDynamicJobNeeds, getJobOutputsMap, getStepOutputsMap, getStepRefMap, idempotent, idempotentStep, invokeSource, isDynamicFunction, isDynamicGroupRef, isDynamicJobFn, isEventDefinition, isEventType, isHostJobOutputs, isMatrixJobOutputs, isParallelGroup, isStaticArray, isStaticObject, job, jobComplete, kiciEvent, lifecycle, normalizeApproval, normalizeCacheSpecs, onCancel, onFailure, onSuccess, onlyOnFanoutIndex, onlyOnFirstHost, onlyOnLastHost, parallel, pr, provenanceSubjectIsPath, push, release, resolveJobOutputs, resolveStepOutputs, restartHost, review, reviewComment, rule, schedule, setJobOutputsMap, setStepOutputsMap, setStepRefMap, skip, star, status, step, tag, validateDag, waitFor, waitForHostAlive, waitForStep, watch, webhook, workflow, workflowComplete, workflowRun, workflowsFailedBatch, z };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @internal — NOT covered by semver.
|
|
3
|
+
*
|
|
4
|
+
* The runtime ABI between `@kici-dev/sdk` and the KiCI agent, compiler, and
|
|
5
|
+
* orchestrator. Everything here is machinery the execution tiers drive on a
|
|
6
|
+
* workflow's behalf: it installs the maps a `.result` proxy reads, builds the
|
|
7
|
+
* step context a workflow body receives, evaluates its rules, and expands its
|
|
8
|
+
* matrix. A workflow author never calls any of it.
|
|
9
|
+
*
|
|
10
|
+
* It lives on its own subpath because the root barrel is a **compat-protected**
|
|
11
|
+
* surface (`.claude/rules/compatibility.md`): every symbol on it is frozen at
|
|
12
|
+
* v1.0.0 and can only be removed at a major bump. Leaving the runtime ABI there
|
|
13
|
+
* would mean a version handshake, or making the outputs map per-job instead of
|
|
14
|
+
* module-global, is a customer-facing SDK deprecation — with a ledger row and a
|
|
15
|
+
* dual-shape window — for a function no customer ever called. Every internal
|
|
16
|
+
* refactor of the runtime would pay the public-API tax forever.
|
|
17
|
+
*
|
|
18
|
+
* Each symbol also stays on the root barrel, marked `@deprecated`, for the whole
|
|
19
|
+
* 0.x line. The agent resolves the customer's own SDK copy at run time
|
|
20
|
+
* (`workflow-loader.ts`), so a tree carrying an SDK older than this subpath must
|
|
21
|
+
* keep working.
|
|
22
|
+
*
|
|
23
|
+
* Do not import this from a workflow. It carries no compatibility promise and
|
|
24
|
+
* may change shape in any release.
|
|
25
|
+
*/
|
|
26
|
+
export { flattenStepInputs } from './parallel.js';
|
|
27
|
+
export { normalizeApproval } from './approval.js';
|
|
28
|
+
export { evaluateRules, createRuleContext } from './rules/index.js';
|
|
29
|
+
export { buildNeedsContext } from './needs-context.js';
|
|
30
|
+
export { normalizeCacheSpecs } from './cache-types.js';
|
|
31
|
+
export { createFilterContext } from './filter-context.js';
|
|
32
|
+
export { buildKiciApi } from './api-types.js';
|
|
33
|
+
export { createStepSecrets } from './secrets.js';
|
|
34
|
+
export { setStepOutputsMap, setJobOutputsMap, setStepRefMap } from './outputs.js';
|
|
35
|
+
export { expandMatrix, applyIncludeExclude } from './matrix/index.js';
|
|
36
|
+
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "./rolldown-runtime-ClRpJifh.js";
|
|
2
|
+
import { buildKiciApi } from "./api-types.js";
|
|
3
|
+
import { normalizeApproval } from "./approval.js";
|
|
4
|
+
import { normalizeCacheSpecs } from "./cache-types.js";
|
|
5
|
+
import { createFilterContext } from "./filter-context.js";
|
|
6
|
+
import { setJobOutputsMap, setStepOutputsMap, setStepRefMap } from "./outputs.js";
|
|
7
|
+
import { flattenStepInputs } from "./parallel.js";
|
|
8
|
+
import { createRuleContext } from "./rules/context.js";
|
|
9
|
+
import { evaluateRules } from "./rules/evaluator.js";
|
|
10
|
+
import "./rules/index.js";
|
|
11
|
+
import { buildNeedsContext } from "./needs-context.js";
|
|
12
|
+
import { createStepSecrets } from "./secrets.js";
|
|
13
|
+
import { applyIncludeExclude, expandMatrix } from "./matrix/expand.js";
|
|
14
|
+
import "./matrix/index.js";
|
|
15
|
+
export { applyIncludeExclude, buildKiciApi, buildNeedsContext, createFilterContext, createRuleContext, createStepSecrets, evaluateRules, expandMatrix, flattenStepInputs, normalizeApproval, normalizeCacheSpecs, setJobOutputsMap, setStepOutputsMap, setStepRefMap };
|
package/dist/job.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./rolldown-runtime-ClRpJifh.js";
|
|
2
2
|
import { createJobOutputProxy } from "./outputs.js";
|
|
3
|
-
import { assertSecretName } from "./git-types.js";
|
|
3
|
+
import { assertSecretName, validateGitCredentials } from "./git-types.js";
|
|
4
4
|
import { isKnownCapability } from "@kici-dev/engine";
|
|
5
5
|
import { randomUUID } from "node:crypto";
|
|
6
6
|
//#region src/job.ts
|
|
@@ -53,7 +53,7 @@ function job(nameOrOptions, maybeOptions) {
|
|
|
53
53
|
if (options.runsOn !== void 0 && options.runsOnAll !== void 0) throw new Error(`job('${name}'): runsOn and runsOnAll are mutually exclusive`);
|
|
54
54
|
if (options.container !== void 0) validateContainerImageSource(name, options.container);
|
|
55
55
|
if (options.container && typeof options.container === "object" && options.container.auth) validateContainerAuth(name, options.container.auth);
|
|
56
|
-
if (options.gitCredentials) validateGitCredentials(name
|
|
56
|
+
if (options.gitCredentials) validateGitCredentials(`job('${name}')`, options.gitCredentials);
|
|
57
57
|
if (options.invoke === void 0 && options.runsOn === void 0 && options.runsOnAll === void 0) throw new Error(`job('${name}'): one of runsOn or runsOnAll is required`);
|
|
58
58
|
if (options.onUnreachable !== void 0 && options.runsOnAll === void 0) console.warn(`[kici] job('${name}'): onUnreachable is ignored without runsOnAll`);
|
|
59
59
|
if (options.includeUninitialized !== void 0 && options.runsOnAll === void 0) console.warn(`[kici] job('${name}'): includeUninitialized is ignored without runsOnAll`);
|
|
@@ -171,17 +171,6 @@ function validateContainerAuth(name, auth) {
|
|
|
171
171
|
if (idx <= 0 || idx >= value.length - 1 || value.slice(idx + 1).includes(":")) throw new Error(`job('${name}'): container.auth.${field} must use qualified <context>:<secret-name> syntax (got: ${value})`);
|
|
172
172
|
}
|
|
173
173
|
}
|
|
174
|
-
function validateGitCredentials(name, credentials) {
|
|
175
|
-
for (const [alias, ref] of Object.entries(credentials)) {
|
|
176
|
-
const bag = ref;
|
|
177
|
-
for (const [field, value] of Object.entries(bag)) {
|
|
178
|
-
if (!field.endsWith("Secret") || typeof value !== "string") continue;
|
|
179
|
-
assertSecretName(value, `${alias}.${field}`);
|
|
180
|
-
const idx = value.indexOf(":");
|
|
181
|
-
if (idx <= 0 || idx >= value.length - 1 || value.slice(idx + 1).includes(":")) throw new Error(`job('${name}'): gitCredentials.${alias}.${field} must use qualified <context>:<secret-name> syntax (got: ${value})`);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
174
|
//#endregion
|
|
186
175
|
export { job };
|
|
187
176
|
|
package/dist/triggers/comment.js
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
import "../rolldown-runtime-ClRpJifh.js";
|
|
2
2
|
import { asArray, toBranchPattern } from "./types.js";
|
|
3
|
+
import { normalizeRegexFlags } from "@kici-dev/engine";
|
|
3
4
|
//#region src/triggers/comment.ts
|
|
4
5
|
/**
|
|
5
6
|
* Convert a string or RegExp to a BodyMatchPattern.
|
|
6
7
|
* Strings become glob patterns, RegExp becomes regex patterns.
|
|
8
|
+
*
|
|
9
|
+
* `g` and `y` are dropped for the same reason as `toBranchPattern`: the reader
|
|
10
|
+
* memoizes the compiled instance, so a sticky one alternates verdicts between
|
|
11
|
+
* comments.
|
|
7
12
|
*/
|
|
8
13
|
function toBodyMatchPattern(input) {
|
|
9
14
|
if (input instanceof RegExp) return {
|
|
10
15
|
type: "regex",
|
|
11
16
|
pattern: input.source,
|
|
12
|
-
flags: input.flags
|
|
17
|
+
flags: normalizeRegexFlags(input.flags)
|
|
13
18
|
};
|
|
14
19
|
return {
|
|
15
20
|
type: "glob",
|
package/dist/triggers/types.d.ts
CHANGED
|
@@ -600,6 +600,11 @@ export interface PushConfigInput {
|
|
|
600
600
|
/**
|
|
601
601
|
* Convert a string or RegExp to a BranchPattern.
|
|
602
602
|
* Strings become glob patterns, RegExp becomes regex patterns.
|
|
603
|
+
*
|
|
604
|
+
* `g` and `y` are dropped from the author's flags: the matcher memoizes one
|
|
605
|
+
* `RegExp` per (flags, pattern), and a sticky instance carries `lastIndex`
|
|
606
|
+
* between calls — so `/^release-\d+/g` would match `release-1`, miss
|
|
607
|
+
* `release-2`, and match `release-3`, silently skipping every second push.
|
|
603
608
|
*/
|
|
604
609
|
export declare function toBranchPattern(input: string | RegExp): BranchPattern;
|
|
605
610
|
/**
|
package/dist/triggers/types.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../rolldown-runtime-ClRpJifh.js";
|
|
2
|
+
import { normalizeRegexFlags } from "@kici-dev/engine";
|
|
2
3
|
//#region src/triggers/types.ts
|
|
3
4
|
/**
|
|
4
5
|
* Default PR events when pr() is called without explicit events.
|
|
@@ -12,12 +13,17 @@ const DEFAULT_PR_EVENTS = [
|
|
|
12
13
|
/**
|
|
13
14
|
* Convert a string or RegExp to a BranchPattern.
|
|
14
15
|
* Strings become glob patterns, RegExp becomes regex patterns.
|
|
16
|
+
*
|
|
17
|
+
* `g` and `y` are dropped from the author's flags: the matcher memoizes one
|
|
18
|
+
* `RegExp` per (flags, pattern), and a sticky instance carries `lastIndex`
|
|
19
|
+
* between calls — so `/^release-\d+/g` would match `release-1`, miss
|
|
20
|
+
* `release-2`, and match `release-3`, silently skipping every second push.
|
|
15
21
|
*/
|
|
16
22
|
function toBranchPattern(input) {
|
|
17
23
|
if (input instanceof RegExp) return {
|
|
18
24
|
type: "regex",
|
|
19
25
|
pattern: input.source,
|
|
20
|
-
flags: input.flags
|
|
26
|
+
flags: normalizeRegexFlags(input.flags)
|
|
21
27
|
};
|
|
22
28
|
return {
|
|
23
29
|
type: "glob",
|
package/dist/types.d.ts
CHANGED
|
@@ -355,12 +355,16 @@ export interface TaggedDynamicJobFn extends DynamicJobFn {
|
|
|
355
355
|
* Two forms:
|
|
356
356
|
* - **Function form** (event-only): `dynamicJob('shards', async ({ ctx }) => [...])`.
|
|
357
357
|
* Dispatched at webhook time; deterministic from `ctx.event` alone.
|
|
358
|
-
* - **Options form
|
|
359
|
-
*
|
|
360
|
-
* evaluated with the upstreams' frozen outputs
|
|
358
|
+
* - **Options form**: `dynamicJob('reports', { needs, generate, gitCredentials })`.
|
|
359
|
+
* With `needs` it is result-aware — deferred until every job/group in `needs`
|
|
360
|
+
* completes, then `generate` is evaluated with the upstreams' frozen outputs
|
|
361
|
+
* available as `ctx.needs`. `needs` is optional: without it the generator is
|
|
362
|
+
* dispatched at webhook time, as the function form is. `gitCredentials`
|
|
363
|
+
* declares the named credentials every generated job inherits, and only the
|
|
364
|
+
* options form can carry it.
|
|
361
365
|
*
|
|
362
366
|
* @param groupName - The group name (must match what static jobs reference)
|
|
363
|
-
* @param fnOrConfig - The generator function, or a
|
|
367
|
+
* @param fnOrConfig - The generator function, or a `{ needs, generate, gitCredentials }` config
|
|
364
368
|
*/
|
|
365
369
|
export declare function dynamicJob(groupName: string, fnOrConfig: DynamicJobFn | ResultAwareDynamicJobConfig): TaggedDynamicJobFn;
|
|
366
370
|
/**
|
|
@@ -387,10 +391,25 @@ export type DynamicJobNeed = Job | string | DynamicGroupRef | {
|
|
|
387
391
|
* outputs available as `ctx.needs`.
|
|
388
392
|
*/
|
|
389
393
|
export interface ResultAwareDynamicJobConfig {
|
|
390
|
-
/**
|
|
391
|
-
|
|
394
|
+
/**
|
|
395
|
+
* Upstream jobs/groups whose outputs the generator reads via `ctx.needs`.
|
|
396
|
+
* Omit it for an event-only generator that declares `gitCredentials` and
|
|
397
|
+
* nothing else — the generator then runs at webhook time, as the bare
|
|
398
|
+
* function form does.
|
|
399
|
+
*/
|
|
400
|
+
needs?: ReadonlyArray<DynamicJobNeed>;
|
|
392
401
|
/** The generator. Receives `ctx.needs` resolved from the frozen upstream snapshot. */
|
|
393
402
|
generate: DynamicJobFn;
|
|
403
|
+
/**
|
|
404
|
+
* Named git credentials every job this generator produces inherits.
|
|
405
|
+
*
|
|
406
|
+
* A generated job has no lock entry of its own, so it cannot declare its own
|
|
407
|
+
* map: the definitions come back from the agent that evaluated the generator,
|
|
408
|
+
* and a declaration read from there would let job code authorize itself. The
|
|
409
|
+
* generator does live in the lock file, so its map is the ceiling the
|
|
410
|
+
* credential relay holds every generated child to.
|
|
411
|
+
*/
|
|
412
|
+
gitCredentials?: GitCredentialMap;
|
|
394
413
|
}
|
|
395
414
|
/** A {@link DynamicJobFn} tagged with declared needs (result-aware). */
|
|
396
415
|
export interface ResultAwareDynamicJobFn extends TaggedDynamicJobFn {
|
|
@@ -402,6 +421,13 @@ export interface ResultAwareDynamicJobFn extends TaggedDynamicJobFn {
|
|
|
402
421
|
*/
|
|
403
422
|
export declare function getDynamicJobNeeds(fn: DynamicJobFn): ReadonlyArray<DynamicJobNeed> | undefined;
|
|
404
423
|
export { DYNAMIC_JOB_NEEDS_TAG };
|
|
424
|
+
declare const DYNAMIC_JOB_GIT_CREDENTIALS_TAG: unique symbol;
|
|
425
|
+
/**
|
|
426
|
+
* Read the named git credentials a generator declared.
|
|
427
|
+
* Returns undefined for the bare function form, which cannot declare any.
|
|
428
|
+
*/
|
|
429
|
+
export declare function getDynamicJobGitCredentials(fn: DynamicJobFn): GitCredentialMap | undefined;
|
|
430
|
+
export { DYNAMIC_JOB_GIT_CREDENTIALS_TAG };
|
|
405
431
|
/**
|
|
406
432
|
* Container configuration for job execution.
|
|
407
433
|
* When set, all steps run inside the specified container.
|
package/dist/types.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "./rolldown-runtime-ClRpJifh.js";
|
|
2
|
+
import { validateGitCredentials } from "./git-types.js";
|
|
2
3
|
//#region src/types.ts
|
|
3
4
|
/**
|
|
4
5
|
* Type guard to check if a JobOrFactory is a dynamic job generator.
|
|
@@ -14,12 +15,16 @@ const DYNAMIC_JOB_GROUP_TAG = Symbol.for("kici:dynamicJobGroup");
|
|
|
14
15
|
* Two forms:
|
|
15
16
|
* - **Function form** (event-only): `dynamicJob('shards', async ({ ctx }) => [...])`.
|
|
16
17
|
* Dispatched at webhook time; deterministic from `ctx.event` alone.
|
|
17
|
-
* - **Options form
|
|
18
|
-
*
|
|
19
|
-
* evaluated with the upstreams' frozen outputs
|
|
18
|
+
* - **Options form**: `dynamicJob('reports', { needs, generate, gitCredentials })`.
|
|
19
|
+
* With `needs` it is result-aware — deferred until every job/group in `needs`
|
|
20
|
+
* completes, then `generate` is evaluated with the upstreams' frozen outputs
|
|
21
|
+
* available as `ctx.needs`. `needs` is optional: without it the generator is
|
|
22
|
+
* dispatched at webhook time, as the function form is. `gitCredentials`
|
|
23
|
+
* declares the named credentials every generated job inherits, and only the
|
|
24
|
+
* options form can carry it.
|
|
20
25
|
*
|
|
21
26
|
* @param groupName - The group name (must match what static jobs reference)
|
|
22
|
-
* @param fnOrConfig - The generator function, or a
|
|
27
|
+
* @param fnOrConfig - The generator function, or a `{ needs, generate, gitCredentials }` config
|
|
23
28
|
*/
|
|
24
29
|
function dynamicJob(groupName, fnOrConfig) {
|
|
25
30
|
const isConfig = typeof fnOrConfig !== "function";
|
|
@@ -28,10 +33,17 @@ function dynamicJob(groupName, fnOrConfig) {
|
|
|
28
33
|
value: groupName,
|
|
29
34
|
enumerable: false
|
|
30
35
|
});
|
|
31
|
-
if (isConfig) Object.defineProperty(tagged, DYNAMIC_JOB_NEEDS_TAG, {
|
|
36
|
+
if (isConfig && fnOrConfig.needs) Object.defineProperty(tagged, DYNAMIC_JOB_NEEDS_TAG, {
|
|
32
37
|
value: fnOrConfig.needs,
|
|
33
38
|
enumerable: false
|
|
34
39
|
});
|
|
40
|
+
if (isConfig && fnOrConfig.gitCredentials) {
|
|
41
|
+
validateGitCredentials(`dynamicJob('${groupName}')`, fnOrConfig.gitCredentials);
|
|
42
|
+
Object.defineProperty(tagged, DYNAMIC_JOB_GIT_CREDENTIALS_TAG, {
|
|
43
|
+
value: fnOrConfig.gitCredentials,
|
|
44
|
+
enumerable: false
|
|
45
|
+
});
|
|
46
|
+
}
|
|
35
47
|
return tagged;
|
|
36
48
|
}
|
|
37
49
|
/**
|
|
@@ -49,7 +61,15 @@ const DYNAMIC_JOB_NEEDS_TAG = Symbol.for("kici:dynamicJobNeeds");
|
|
|
49
61
|
function getDynamicJobNeeds(fn) {
|
|
50
62
|
return fn[DYNAMIC_JOB_NEEDS_TAG];
|
|
51
63
|
}
|
|
64
|
+
const DYNAMIC_JOB_GIT_CREDENTIALS_TAG = Symbol.for("kici:dynamicJobGitCredentials");
|
|
65
|
+
/**
|
|
66
|
+
* Read the named git credentials a generator declared.
|
|
67
|
+
* Returns undefined for the bare function form, which cannot declare any.
|
|
68
|
+
*/
|
|
69
|
+
function getDynamicJobGitCredentials(fn) {
|
|
70
|
+
return fn[DYNAMIC_JOB_GIT_CREDENTIALS_TAG];
|
|
71
|
+
}
|
|
52
72
|
//#endregion
|
|
53
|
-
export { DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, dynamicJob, getDynamicJobGroup, getDynamicJobNeeds, isDynamicJobFn };
|
|
73
|
+
export { DYNAMIC_JOB_GIT_CREDENTIALS_TAG, DYNAMIC_JOB_GROUP_TAG, DYNAMIC_JOB_NEEDS_TAG, dynamicJob, getDynamicJobGitCredentials, getDynamicJobGroup, getDynamicJobNeeds, isDynamicJobFn };
|
|
54
74
|
|
|
55
75
|
//# sourceMappingURL=types.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kici-dev/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "TypeScript SDK for defining KiCI workflows. Import into `.kici/workflows/*.ts` to declare workflows, jobs, steps, triggers, rules, and matrix configurations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ci",
|
|
@@ -44,6 +44,11 @@
|
|
|
44
44
|
"import": "./dist/index.js",
|
|
45
45
|
"default": "./dist/index.js"
|
|
46
46
|
},
|
|
47
|
+
"./internal": {
|
|
48
|
+
"types": "./dist/internal.d.ts",
|
|
49
|
+
"import": "./dist/internal.js",
|
|
50
|
+
"default": "./dist/internal.js"
|
|
51
|
+
},
|
|
47
52
|
"./testing": {
|
|
48
53
|
"types": "./dist/testing/index.d.ts",
|
|
49
54
|
"import": "./dist/testing/index.js",
|
|
@@ -55,8 +60,8 @@
|
|
|
55
60
|
"yaml": "^2.9.0",
|
|
56
61
|
"zod": "^4.4.3",
|
|
57
62
|
"zx": "^8.8.5",
|
|
58
|
-
"@kici-dev/core": "0.
|
|
59
|
-
"@kici-dev/engine": "0.
|
|
63
|
+
"@kici-dev/core": "0.7.0",
|
|
64
|
+
"@kici-dev/engine": "0.7.0"
|
|
60
65
|
},
|
|
61
66
|
"devDependencies": {
|
|
62
67
|
"@types/micromatch": "^4.0.10"
|
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/sdk@0.
|
|
6
|
-
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fsdk/0.
|
|
5
|
+
"name": "@kici-dev/sdk@0.7.0",
|
|
6
|
+
"documentNamespace": "https://kici.dev/sbom/%40kici-dev%2Fsdk/0.7.0/194e6a78-3e3a-4ad2-b529-3d28614071bf",
|
|
7
7
|
"creationInfo": {
|
|
8
|
-
"created": "2026-09-
|
|
8
|
+
"created": "2026-09-11T07:37:37Z",
|
|
9
9
|
"creators": [
|
|
10
10
|
"Tool: kici-sbom-generator"
|
|
11
11
|
]
|
|
@@ -146,9 +146,9 @@
|
|
|
146
146
|
"homepage": "https://ericsmekens.github.io/jsep/tree/master/packages/regex#readme"
|
|
147
147
|
},
|
|
148
148
|
{
|
|
149
|
-
"SPDXID": "SPDXRef-Package--kici-dev-core-0.
|
|
149
|
+
"SPDXID": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
150
150
|
"name": "@kici-dev/core",
|
|
151
|
-
"versionInfo": "0.
|
|
151
|
+
"versionInfo": "0.7.0",
|
|
152
152
|
"downloadLocation": "NOASSERTION",
|
|
153
153
|
"filesAnalyzed": false,
|
|
154
154
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -159,16 +159,16 @@
|
|
|
159
159
|
{
|
|
160
160
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
161
161
|
"referenceType": "purl",
|
|
162
|
-
"referenceLocator": "pkg:npm/%40kici-dev/core@0.
|
|
162
|
+
"referenceLocator": "pkg:npm/%40kici-dev/core@0.7.0"
|
|
163
163
|
}
|
|
164
164
|
],
|
|
165
165
|
"description": "Light shared utilities for the KiCI stack (logging, errors, formatting, crypto, zx init, the TypeScript ESM loader hook). No server-side dependencies.",
|
|
166
166
|
"homepage": "https://kici.dev"
|
|
167
167
|
},
|
|
168
168
|
{
|
|
169
|
-
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.
|
|
169
|
+
"SPDXID": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
170
170
|
"name": "@kici-dev/engine",
|
|
171
|
-
"versionInfo": "0.
|
|
171
|
+
"versionInfo": "0.7.0",
|
|
172
172
|
"downloadLocation": "NOASSERTION",
|
|
173
173
|
"filesAnalyzed": false,
|
|
174
174
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -179,7 +179,7 @@
|
|
|
179
179
|
{
|
|
180
180
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
181
181
|
"referenceType": "purl",
|
|
182
|
-
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.
|
|
182
|
+
"referenceLocator": "pkg:npm/%40kici-dev/engine@0.7.0"
|
|
183
183
|
}
|
|
184
184
|
],
|
|
185
185
|
"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.",
|
|
@@ -188,7 +188,7 @@
|
|
|
188
188
|
{
|
|
189
189
|
"SPDXID": "SPDXRef-RootPackage",
|
|
190
190
|
"name": "@kici-dev/sdk",
|
|
191
|
-
"versionInfo": "0.
|
|
191
|
+
"versionInfo": "0.7.0",
|
|
192
192
|
"downloadLocation": "NOASSERTION",
|
|
193
193
|
"filesAnalyzed": false,
|
|
194
194
|
"licenseConcluded": "NOASSERTION",
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
{
|
|
200
200
|
"referenceCategory": "PACKAGE-MANAGER",
|
|
201
201
|
"referenceType": "purl",
|
|
202
|
-
"referenceLocator": "pkg:npm/%40kici-dev/sdk@0.
|
|
202
|
+
"referenceLocator": "pkg:npm/%40kici-dev/sdk@0.7.0"
|
|
203
203
|
}
|
|
204
204
|
],
|
|
205
205
|
"description": "TypeScript SDK for defining KiCI workflows. Import into `.kici/workflows/*.ts` to declare workflows, jobs, steps, triggers, rules, and matrix configurations.",
|
|
@@ -1604,73 +1604,73 @@
|
|
|
1604
1604
|
"relationshipType": "DEPENDS_ON"
|
|
1605
1605
|
},
|
|
1606
1606
|
{
|
|
1607
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1607
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1608
1608
|
"relatedSpdxElement": "SPDXRef-Package-oxc-transform-0.140.0",
|
|
1609
1609
|
"relationshipType": "DEPENDS_ON"
|
|
1610
1610
|
},
|
|
1611
1611
|
{
|
|
1612
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1612
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1613
1613
|
"relatedSpdxElement": "SPDXRef-Package-picocolors-1.1.1",
|
|
1614
1614
|
"relationshipType": "DEPENDS_ON"
|
|
1615
1615
|
},
|
|
1616
1616
|
{
|
|
1617
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1617
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1618
1618
|
"relatedSpdxElement": "SPDXRef-Package-winston-daily-rotate-file-5.0.0",
|
|
1619
1619
|
"relationshipType": "DEPENDS_ON"
|
|
1620
1620
|
},
|
|
1621
1621
|
{
|
|
1622
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1622
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1623
1623
|
"relatedSpdxElement": "SPDXRef-Package-winston-3.19.0",
|
|
1624
1624
|
"relationshipType": "DEPENDS_ON"
|
|
1625
1625
|
},
|
|
1626
1626
|
{
|
|
1627
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1627
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1628
1628
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.4.3",
|
|
1629
1629
|
"relationshipType": "DEPENDS_ON"
|
|
1630
1630
|
},
|
|
1631
1631
|
{
|
|
1632
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.
|
|
1632
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1633
1633
|
"relatedSpdxElement": "SPDXRef-Package-zx-8.8.5",
|
|
1634
1634
|
"relationshipType": "DEPENDS_ON"
|
|
1635
1635
|
},
|
|
1636
1636
|
{
|
|
1637
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1637
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1638
1638
|
"relatedSpdxElement": "SPDXRef-Package-jose-6.2.10",
|
|
1639
1639
|
"relationshipType": "DEPENDS_ON"
|
|
1640
1640
|
},
|
|
1641
1641
|
{
|
|
1642
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1642
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1643
1643
|
"relatedSpdxElement": "SPDXRef-Package-jsonpath-plus-10.4.0",
|
|
1644
1644
|
"relationshipType": "DEPENDS_ON"
|
|
1645
1645
|
},
|
|
1646
1646
|
{
|
|
1647
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1647
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1648
1648
|
"relatedSpdxElement": "SPDXRef-Package-picomatch-4.0.7",
|
|
1649
1649
|
"relationshipType": "DEPENDS_ON"
|
|
1650
1650
|
},
|
|
1651
1651
|
{
|
|
1652
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1652
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1653
1653
|
"relatedSpdxElement": "SPDXRef-Package-safe-regex-2.1.1",
|
|
1654
1654
|
"relationshipType": "DEPENDS_ON"
|
|
1655
1655
|
},
|
|
1656
1656
|
{
|
|
1657
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1657
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1658
1658
|
"relatedSpdxElement": "SPDXRef-Package-yaml-2.9.0",
|
|
1659
1659
|
"relationshipType": "DEPENDS_ON"
|
|
1660
1660
|
},
|
|
1661
1661
|
{
|
|
1662
|
-
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.
|
|
1662
|
+
"spdxElementId": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1663
1663
|
"relatedSpdxElement": "SPDXRef-Package-zod-4.4.3",
|
|
1664
1664
|
"relationshipType": "DEPENDS_ON"
|
|
1665
1665
|
},
|
|
1666
1666
|
{
|
|
1667
1667
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
1668
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.
|
|
1668
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-core-0.7.0",
|
|
1669
1669
|
"relationshipType": "DEPENDS_ON"
|
|
1670
1670
|
},
|
|
1671
1671
|
{
|
|
1672
1672
|
"spdxElementId": "SPDXRef-RootPackage",
|
|
1673
|
-
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.
|
|
1673
|
+
"relatedSpdxElement": "SPDXRef-Package--kici-dev-engine-0.7.0",
|
|
1674
1674
|
"relationshipType": "DEPENDS_ON"
|
|
1675
1675
|
},
|
|
1676
1676
|
{
|