@kici-dev/engine 0.1.14 → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +13 -1
  2. package/dist/approval/types.d.ts +56 -0
  3. package/dist/approval/types.js +42 -0
  4. package/dist/audit/access-log-policy.js +14 -0
  5. package/dist/audit/retention-policy.js +10 -0
  6. package/dist/environment/types.d.ts +8 -0
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.js +10 -8
  9. package/dist/labels.d.ts +7 -0
  10. package/dist/labels.js +11 -2
  11. package/dist/metrics/metric-catalog.generated.d.ts +50 -0
  12. package/dist/metrics/metric-catalog.generated.js +60 -0
  13. package/dist/protocol/analytics-events.d.ts +16 -0
  14. package/dist/protocol/analytics-events.js +20 -0
  15. package/dist/protocol/dashboard-write-operations.d.ts +4 -1
  16. package/dist/protocol/dashboard-write-operations.js +11 -1
  17. package/dist/protocol/messages/access-log.d.ts +26 -0
  18. package/dist/protocol/messages/access-log.js +5 -0
  19. package/dist/protocol/messages/actor.d.ts +2 -0
  20. package/dist/protocol/messages/actor.js +12 -2
  21. package/dist/protocol/messages/auth.d.ts +1 -0
  22. package/dist/protocol/messages/capabilities.d.ts +1 -0
  23. package/dist/protocol/messages/dashboard-global-workflows.d.ts +2 -0
  24. package/dist/protocol/messages/dashboard.d.ts +619 -6
  25. package/dist/protocol/messages/dashboard.js +179 -10
  26. package/dist/protocol/messages/event-log.d.ts +4 -0
  27. package/dist/protocol/messages/event-log.js +4 -0
  28. package/dist/protocol/messages/execution-status.d.ts +56 -3
  29. package/dist/protocol/messages/execution-status.js +44 -4
  30. package/dist/protocol/messages/orchestrator-agent.d.ts +284 -0
  31. package/dist/protocol/messages/orchestrator-agent.js +202 -4
  32. package/dist/protocol/messages/peer.d.ts +89 -0
  33. package/dist/protocol/messages/peer.js +50 -2
  34. package/dist/protocol/messages/platform-orchestrator.d.ts +168 -6
  35. package/dist/protocol/messages/platform-orchestrator.js +15 -56
  36. package/dist/protocol/messages/run-events.d.ts +1 -0
  37. package/dist/provenance/schema.d.ts +407 -0
  38. package/dist/provenance/schema.js +143 -0
  39. package/dist/provider/index.d.ts +1 -0
  40. package/dist/provider/index.js +2 -1
  41. package/dist/provider/lock-file-parse-error.d.ts +14 -0
  42. package/dist/provider/lock-file-parse-error.js +22 -0
  43. package/dist/trigger/types.d.ts +29 -1
  44. package/dist/trigger/types.js +4 -1
  45. package/dist/ws/close-codes.d.ts +7 -0
  46. package/dist/ws/close-codes.js +8 -1
  47. package/package.json +19 -8
  48. package/sbom.spdx.json +5 -5
@@ -4,10 +4,8 @@ import { orchCapabilitiesSchema } from "./capabilities.js";
4
4
  import { authFailureSchema, authRequestSchema, authSuccessSchema } from "./auth.js";
5
5
  import { executionStatusSchema, jobStatusForwardSchema, stateReplaySchema, stepStatusForwardSchema } from "./execution-status.js";
6
6
  import { sourceDeregisterAckSchema, sourceDeregisterSchema, sourceRegistrationAckSchema, sourceRegistrationSchema } from "./source-registration.js";
7
- import { dashboardAccessLogListRequestSchema } from "./access-log.js";
8
- import { dashboardOrchLogsRequestSchema, jobContextMessageSchema, runEventMessageSchema } from "./run-events.js";
9
- import { globalWorkflowsGetRequestSchema, globalWorkflowsUpdateRequestSchema } from "./dashboard-global-workflows.js";
10
- import { backendGetRequestSchema, backendSyncRequestSchema, backendTestRequestSchema, backendsListRequestSchema, backendsSyncAllRequestSchema, dashboardDiagnosticsRequestSchema, dashboardEventDlqCountRequestSchema, dashboardEventDlqDiscardRequestSchema, dashboardEventDlqListRequestSchema, dashboardEventDlqRetryRequestSchema, dashboardEventLogDetailRequestSchema, dashboardEventLogListRequestSchema, dashboardEventLogPayloadStreamRequestSchema, dashboardPayloadRequestSchema, dashboardRunDetailRequestSchema, dashboardScalerAgentsRequestSchema, dashboardScalerCapacityRequestSchema, dashboardStepLogsRequestSchema, envBindingsListRequestSchema, envBindingsSetRequestSchema, envCreateRequestSchema, envDeleteRequestSchema, envGetRequestSchema, envHistoryRequestSchema, envListRequestSchema, envSecretDeleteRequestSchema, envSecretScopeCreateRequestSchema, envSecretScopeDeleteRequestSchema, envSecretScopeRenameRequestSchema, envSecretSetRequestSchema, envSecretsListRequestSchema, envSourceOverrideDeleteRequestSchema, envSourceOverrideSetRequestSchema, envSourceOverridesListRequestSchema, envUpdateRequestSchema, envVarDeleteRequestSchema, envVarSetRequestSchema, envVarsListRequestSchema, heldRunApproveRequestSchema, heldRunRejectRequestSchema, heldRunsListRequestSchema, manualScheduleRequestSchema, registrationDeleteRequestSchema, registrationDisableRequestSchema, registrationsListRequestSchema, runCancelRequestSchema, runRerunRequestSchema } from "./dashboard.js";
7
+ import { jobContextMessageSchema, runEventMessageSchema } from "./run-events.js";
8
+ import { dashboardPlatformToOrchSchema } from "./dashboard.js";
11
9
  import { z } from "zod";
12
10
  //#region src/protocol/messages/platform-orchestrator.ts
13
11
  /** Trust policy update pushed from Platform to orchestrator when policy or identity links change. */
@@ -46,7 +44,18 @@ const trustPolicyUpdateSchema = z.object({
46
44
  "read",
47
45
  "write",
48
46
  "admin"
49
- ]))
47
+ ])),
48
+ /**
49
+ * Operator-defined teams and their member user ids. The orchestrator has no
50
+ * identity store, so team membership is delivered here (next to
51
+ * `identityLinks`) and cached in-memory. The approval resolver matches a
52
+ * `{team}` clause by looking up the team's members in this list.
53
+ * `.default([])` keeps an older Platform that doesn't send it valid.
54
+ */
55
+ teamMemberships: z.array(z.object({
56
+ teamName: z.string(),
57
+ memberUserIds: z.array(z.string())
58
+ })).default([])
50
59
  });
51
60
  /**
52
61
  * Internal shape of a fully-reassembled, HMAC-verified webhook relay handed
@@ -329,57 +338,7 @@ const platformToOrchestratorMessageSchema = z.discriminatedUnion("type", [
329
338
  peerDiscoverSchema,
330
339
  peerUpdateSchema,
331
340
  staleCheckrunCleanupSchema,
332
- dashboardRunDetailRequestSchema,
333
- dashboardStepLogsRequestSchema,
334
- runRerunRequestSchema,
335
- manualScheduleRequestSchema,
336
- runCancelRequestSchema,
337
- dashboardPayloadRequestSchema,
338
- dashboardOrchLogsRequestSchema,
339
- envListRequestSchema,
340
- envGetRequestSchema,
341
- envCreateRequestSchema,
342
- envUpdateRequestSchema,
343
- envDeleteRequestSchema,
344
- envVarsListRequestSchema,
345
- envVarSetRequestSchema,
346
- envVarDeleteRequestSchema,
347
- envSourceOverridesListRequestSchema,
348
- envSourceOverrideSetRequestSchema,
349
- envSourceOverrideDeleteRequestSchema,
350
- envBindingsListRequestSchema,
351
- envBindingsSetRequestSchema,
352
- envSecretsListRequestSchema,
353
- envSecretSetRequestSchema,
354
- envSecretDeleteRequestSchema,
355
- envSecretScopeCreateRequestSchema,
356
- envSecretScopeRenameRequestSchema,
357
- envSecretScopeDeleteRequestSchema,
358
- envHistoryRequestSchema,
359
- heldRunsListRequestSchema,
360
- heldRunApproveRequestSchema,
361
- heldRunRejectRequestSchema,
362
- registrationsListRequestSchema,
363
- registrationDisableRequestSchema,
364
- registrationDeleteRequestSchema,
365
- dashboardDiagnosticsRequestSchema,
366
- dashboardScalerCapacityRequestSchema,
367
- dashboardScalerAgentsRequestSchema,
368
- backendsListRequestSchema,
369
- backendGetRequestSchema,
370
- backendsSyncAllRequestSchema,
371
- backendSyncRequestSchema,
372
- backendTestRequestSchema,
373
- dashboardEventLogListRequestSchema,
374
- dashboardEventLogDetailRequestSchema,
375
- dashboardEventLogPayloadStreamRequestSchema,
376
- dashboardEventDlqListRequestSchema,
377
- dashboardEventDlqCountRequestSchema,
378
- dashboardEventDlqRetryRequestSchema,
379
- dashboardEventDlqDiscardRequestSchema,
380
- globalWorkflowsGetRequestSchema,
381
- globalWorkflowsUpdateRequestSchema,
382
- dashboardAccessLogListRequestSchema
341
+ ...dashboardPlatformToOrchSchema.options
383
342
  ]);
384
343
  /** All messages that flow from Orchestrator to Platform.
385
344
  *
@@ -136,6 +136,7 @@ export declare const dashboardOrchLogsRequestSchema: z.ZodObject<{
136
136
  type: z.ZodLiteral<"platform_operator">;
137
137
  sub: z.ZodString;
138
138
  reason: z.ZodString;
139
+ sessionId: z.ZodOptional<z.ZodString>;
139
140
  }, z.core.$strip>, z.ZodObject<{
140
141
  type: z.ZodLiteral<"system">;
141
142
  component: z.ZodString;
@@ -0,0 +1,407 @@
1
+ /**
2
+ * SLSA v1.0 build-provenance schema for KiCI.
3
+ *
4
+ * Models the in-toto Statement v1 envelope and the SLSA v1.0 provenance
5
+ * predicate as Zod schemas, plus a KiCI-specialized statement schema that pins
6
+ * the KiCI literals and types the KiCI-owned build parameters. This is the
7
+ * single source of truth shared by the agent (produces attestations) and the
8
+ * `kici verify-attestation` CLI (consumes them).
9
+ *
10
+ * Pure schema + types — no Node-only dependencies, so the dashboard can import
11
+ * it for typed artifact rendering. Exported at the subpath
12
+ * `@kici-dev/engine/provenance/schema`.
13
+ *
14
+ * Spec references:
15
+ * - in-toto Statement v1: https://github.com/in-toto/attestation/blob/main/spec/v1/statement.md
16
+ * - SLSA v1.0 provenance: https://slsa.dev/spec/v1.0/provenance
17
+ */
18
+ import { z } from 'zod';
19
+ /** in-toto Statement `_type` value (pinned). */
20
+ export declare const IN_TOTO_STATEMENT_TYPE = "https://in-toto.io/Statement/v1";
21
+ /** SLSA v1.0 provenance `predicateType` value (pinned). */
22
+ export declare const SLSA_PROVENANCE_PREDICATE_TYPE = "https://slsa.dev/provenance/v1";
23
+ /** KiCI workflow `buildType` URI (we own this namespace). */
24
+ export declare const KICI_WORKFLOW_BUILD_TYPE = "https://kici.dev/buildtypes/workflow/v1";
25
+ /**
26
+ * Known digest algorithms KiCI emits or tests reference. The digest map itself
27
+ * (`digestSetSchema`) keeps its keys open for forward-compatibility; this enum
28
+ * documents the common set so producer code and tests don't repeat literals.
29
+ */
30
+ export declare const DigestAlgorithm: z.ZodEnum<{
31
+ sha256: "sha256";
32
+ sha512: "sha512";
33
+ sha1: "sha1";
34
+ gitCommit: "gitCommit";
35
+ dirHash: "dirHash";
36
+ }>;
37
+ export type DigestAlgorithm = z.infer<typeof DigestAlgorithm>;
38
+ /**
39
+ * in-toto digest set: a map of algorithm name → lowercase-hex digest. Keys are
40
+ * open (forward-compat); at least one entry is required.
41
+ */
42
+ export declare const digestSetSchema: z.ZodRecord<z.ZodString, z.ZodString>;
43
+ export type DigestSet = z.infer<typeof digestSetSchema>;
44
+ /**
45
+ * in-toto ResourceDescriptor. Reused for `resolvedDependencies` and
46
+ * `byproducts`. Per spec, at least one of name / uri / digest must be present.
47
+ */
48
+ export declare const resourceDescriptorSchema: z.ZodObject<{
49
+ name: z.ZodOptional<z.ZodString>;
50
+ uri: z.ZodOptional<z.ZodString>;
51
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
52
+ content: z.ZodOptional<z.ZodString>;
53
+ downloadLocation: z.ZodOptional<z.ZodString>;
54
+ mediaType: z.ZodOptional<z.ZodString>;
55
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
56
+ }, z.core.$strip>;
57
+ export type ResourceDescriptor = z.infer<typeof resourceDescriptorSchema>;
58
+ /**
59
+ * in-toto Statement subject entry: a resource descriptor that MUST carry a
60
+ * digest (the verifier matches the subject digest against the artifact).
61
+ */
62
+ export declare const subjectSchema: z.ZodObject<{
63
+ name: z.ZodOptional<z.ZodString>;
64
+ uri: z.ZodOptional<z.ZodString>;
65
+ digest: z.ZodRecord<z.ZodString, z.ZodString>;
66
+ mediaType: z.ZodOptional<z.ZodString>;
67
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
68
+ }, z.core.$strip>;
69
+ export type Subject = z.infer<typeof subjectSchema>;
70
+ /** SLSA `builder`: identity of the build platform. `id` is a required URI. */
71
+ export declare const builderSchema: z.ZodObject<{
72
+ id: z.ZodString;
73
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
74
+ name: z.ZodOptional<z.ZodString>;
75
+ uri: z.ZodOptional<z.ZodString>;
76
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
77
+ content: z.ZodOptional<z.ZodString>;
78
+ downloadLocation: z.ZodOptional<z.ZodString>;
79
+ mediaType: z.ZodOptional<z.ZodString>;
80
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
81
+ }, z.core.$strip>>>;
82
+ version: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
83
+ }, z.core.$strip>;
84
+ export type Builder = z.infer<typeof builderSchema>;
85
+ /** SLSA `metadata`: build-invocation metadata. */
86
+ export declare const buildMetadataSchema: z.ZodObject<{
87
+ invocationId: z.ZodOptional<z.ZodString>;
88
+ startedOn: z.ZodOptional<z.ZodString>;
89
+ finishedOn: z.ZodOptional<z.ZodString>;
90
+ }, z.core.$strip>;
91
+ export type BuildMetadata = z.infer<typeof buildMetadataSchema>;
92
+ /** SLSA `buildDefinition`. `buildType` + `externalParameters` are required. */
93
+ export declare const buildDefinitionSchema: z.ZodObject<{
94
+ buildType: z.ZodString;
95
+ externalParameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
96
+ internalParameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
97
+ resolvedDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
98
+ name: z.ZodOptional<z.ZodString>;
99
+ uri: z.ZodOptional<z.ZodString>;
100
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
101
+ content: z.ZodOptional<z.ZodString>;
102
+ downloadLocation: z.ZodOptional<z.ZodString>;
103
+ mediaType: z.ZodOptional<z.ZodString>;
104
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
105
+ }, z.core.$strip>>>;
106
+ }, z.core.$strip>;
107
+ export type BuildDefinition = z.infer<typeof buildDefinitionSchema>;
108
+ /** SLSA `runDetails`. `builder` is required. */
109
+ export declare const runDetailsSchema: z.ZodObject<{
110
+ builder: z.ZodObject<{
111
+ id: z.ZodString;
112
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
113
+ name: z.ZodOptional<z.ZodString>;
114
+ uri: z.ZodOptional<z.ZodString>;
115
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
116
+ content: z.ZodOptional<z.ZodString>;
117
+ downloadLocation: z.ZodOptional<z.ZodString>;
118
+ mediaType: z.ZodOptional<z.ZodString>;
119
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
120
+ }, z.core.$strip>>>;
121
+ version: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
122
+ }, z.core.$strip>;
123
+ metadata: z.ZodOptional<z.ZodObject<{
124
+ invocationId: z.ZodOptional<z.ZodString>;
125
+ startedOn: z.ZodOptional<z.ZodString>;
126
+ finishedOn: z.ZodOptional<z.ZodString>;
127
+ }, z.core.$strip>>;
128
+ byproducts: z.ZodOptional<z.ZodArray<z.ZodObject<{
129
+ name: z.ZodOptional<z.ZodString>;
130
+ uri: z.ZodOptional<z.ZodString>;
131
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
132
+ content: z.ZodOptional<z.ZodString>;
133
+ downloadLocation: z.ZodOptional<z.ZodString>;
134
+ mediaType: z.ZodOptional<z.ZodString>;
135
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
136
+ }, z.core.$strip>>>;
137
+ }, z.core.$strip>;
138
+ export type RunDetails = z.infer<typeof runDetailsSchema>;
139
+ /** SLSA v1.0 provenance predicate. */
140
+ export declare const slsaProvenancePredicateSchema: z.ZodObject<{
141
+ buildDefinition: z.ZodObject<{
142
+ buildType: z.ZodString;
143
+ externalParameters: z.ZodRecord<z.ZodString, z.ZodUnknown>;
144
+ internalParameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
145
+ resolvedDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
146
+ name: z.ZodOptional<z.ZodString>;
147
+ uri: z.ZodOptional<z.ZodString>;
148
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
149
+ content: z.ZodOptional<z.ZodString>;
150
+ downloadLocation: z.ZodOptional<z.ZodString>;
151
+ mediaType: z.ZodOptional<z.ZodString>;
152
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
153
+ }, z.core.$strip>>>;
154
+ }, z.core.$strip>;
155
+ runDetails: z.ZodObject<{
156
+ builder: z.ZodObject<{
157
+ id: z.ZodString;
158
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
159
+ name: z.ZodOptional<z.ZodString>;
160
+ uri: z.ZodOptional<z.ZodString>;
161
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
162
+ content: z.ZodOptional<z.ZodString>;
163
+ downloadLocation: z.ZodOptional<z.ZodString>;
164
+ mediaType: z.ZodOptional<z.ZodString>;
165
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
166
+ }, z.core.$strip>>>;
167
+ version: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
168
+ }, z.core.$strip>;
169
+ metadata: z.ZodOptional<z.ZodObject<{
170
+ invocationId: z.ZodOptional<z.ZodString>;
171
+ startedOn: z.ZodOptional<z.ZodString>;
172
+ finishedOn: z.ZodOptional<z.ZodString>;
173
+ }, z.core.$strip>>;
174
+ byproducts: z.ZodOptional<z.ZodArray<z.ZodObject<{
175
+ name: z.ZodOptional<z.ZodString>;
176
+ uri: z.ZodOptional<z.ZodString>;
177
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
178
+ content: z.ZodOptional<z.ZodString>;
179
+ downloadLocation: z.ZodOptional<z.ZodString>;
180
+ mediaType: z.ZodOptional<z.ZodString>;
181
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
182
+ }, z.core.$strip>>>;
183
+ }, z.core.$strip>;
184
+ }, z.core.$strip>;
185
+ export type SlsaProvenancePredicate = z.infer<typeof slsaProvenancePredicateSchema>;
186
+ /** Predicate-agnostic in-toto Statement v1 envelope. */
187
+ export declare const inTotoStatementSchema: z.ZodObject<{
188
+ _type: z.ZodLiteral<"https://in-toto.io/Statement/v1">;
189
+ subject: z.ZodArray<z.ZodObject<{
190
+ name: z.ZodOptional<z.ZodString>;
191
+ uri: z.ZodOptional<z.ZodString>;
192
+ digest: z.ZodRecord<z.ZodString, z.ZodString>;
193
+ mediaType: z.ZodOptional<z.ZodString>;
194
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
195
+ }, z.core.$strip>>;
196
+ predicateType: z.ZodString;
197
+ predicate: z.ZodRecord<z.ZodString, z.ZodUnknown>;
198
+ }, z.core.$strip>;
199
+ export type InTotoStatement = z.infer<typeof inTotoStatementSchema>;
200
+ /** KiCI workflow external parameters: the workflow source coordinates. */
201
+ export declare const kiciWorkflowExternalParametersSchema: z.ZodObject<{
202
+ workflow: z.ZodObject<{
203
+ repository: z.ZodString;
204
+ ref: z.ZodString;
205
+ path: z.ZodString;
206
+ }, z.core.$strip>;
207
+ }, z.core.$loose>;
208
+ export type KiciWorkflowExternalParameters = z.infer<typeof kiciWorkflowExternalParametersSchema>;
209
+ /** KiCI workflow internal parameters: run-scoped build context. */
210
+ export declare const kiciWorkflowInternalParametersSchema: z.ZodObject<{
211
+ commit: z.ZodOptional<z.ZodString>;
212
+ runId: z.ZodOptional<z.ZodString>;
213
+ jobId: z.ZodOptional<z.ZodString>;
214
+ }, z.core.$loose>;
215
+ export type KiciWorkflowInternalParameters = z.infer<typeof kiciWorkflowInternalParametersSchema>;
216
+ /** KiCI build definition: pins the buildType and types the workflow params. */
217
+ export declare const kiciBuildDefinitionSchema: z.ZodObject<{
218
+ resolvedDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
219
+ name: z.ZodOptional<z.ZodString>;
220
+ uri: z.ZodOptional<z.ZodString>;
221
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
222
+ content: z.ZodOptional<z.ZodString>;
223
+ downloadLocation: z.ZodOptional<z.ZodString>;
224
+ mediaType: z.ZodOptional<z.ZodString>;
225
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
226
+ }, z.core.$strip>>>;
227
+ buildType: z.ZodLiteral<"https://kici.dev/buildtypes/workflow/v1">;
228
+ externalParameters: z.ZodObject<{
229
+ workflow: z.ZodObject<{
230
+ repository: z.ZodString;
231
+ ref: z.ZodString;
232
+ path: z.ZodString;
233
+ }, z.core.$strip>;
234
+ }, z.core.$loose>;
235
+ internalParameters: z.ZodOptional<z.ZodObject<{
236
+ commit: z.ZodOptional<z.ZodString>;
237
+ runId: z.ZodOptional<z.ZodString>;
238
+ jobId: z.ZodOptional<z.ZodString>;
239
+ }, z.core.$loose>>;
240
+ }, z.core.$strip>;
241
+ export type KiciBuildDefinition = z.infer<typeof kiciBuildDefinitionSchema>;
242
+ /** KiCI run details: types builder.version with the KiCI component versions. */
243
+ export declare const kiciRunDetailsSchema: z.ZodObject<{
244
+ metadata: z.ZodOptional<z.ZodObject<{
245
+ invocationId: z.ZodOptional<z.ZodString>;
246
+ startedOn: z.ZodOptional<z.ZodString>;
247
+ finishedOn: z.ZodOptional<z.ZodString>;
248
+ }, z.core.$strip>>;
249
+ byproducts: z.ZodOptional<z.ZodArray<z.ZodObject<{
250
+ name: z.ZodOptional<z.ZodString>;
251
+ uri: z.ZodOptional<z.ZodString>;
252
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
253
+ content: z.ZodOptional<z.ZodString>;
254
+ downloadLocation: z.ZodOptional<z.ZodString>;
255
+ mediaType: z.ZodOptional<z.ZodString>;
256
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
257
+ }, z.core.$strip>>>;
258
+ builder: z.ZodObject<{
259
+ id: z.ZodString;
260
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
261
+ name: z.ZodOptional<z.ZodString>;
262
+ uri: z.ZodOptional<z.ZodString>;
263
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
264
+ content: z.ZodOptional<z.ZodString>;
265
+ downloadLocation: z.ZodOptional<z.ZodString>;
266
+ mediaType: z.ZodOptional<z.ZodString>;
267
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
268
+ }, z.core.$strip>>>;
269
+ version: z.ZodOptional<z.ZodObject<{
270
+ 'kici-orchestrator': z.ZodString;
271
+ 'kici-agent': z.ZodString;
272
+ }, z.core.$loose>>;
273
+ }, z.core.$strip>;
274
+ }, z.core.$strip>;
275
+ export type KiciRunDetails = z.infer<typeof kiciRunDetailsSchema>;
276
+ /** KiCI SLSA provenance predicate. */
277
+ export declare const kiciProvenancePredicateSchema: z.ZodObject<{
278
+ buildDefinition: z.ZodObject<{
279
+ resolvedDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
280
+ name: z.ZodOptional<z.ZodString>;
281
+ uri: z.ZodOptional<z.ZodString>;
282
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
283
+ content: z.ZodOptional<z.ZodString>;
284
+ downloadLocation: z.ZodOptional<z.ZodString>;
285
+ mediaType: z.ZodOptional<z.ZodString>;
286
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
287
+ }, z.core.$strip>>>;
288
+ buildType: z.ZodLiteral<"https://kici.dev/buildtypes/workflow/v1">;
289
+ externalParameters: z.ZodObject<{
290
+ workflow: z.ZodObject<{
291
+ repository: z.ZodString;
292
+ ref: z.ZodString;
293
+ path: z.ZodString;
294
+ }, z.core.$strip>;
295
+ }, z.core.$loose>;
296
+ internalParameters: z.ZodOptional<z.ZodObject<{
297
+ commit: z.ZodOptional<z.ZodString>;
298
+ runId: z.ZodOptional<z.ZodString>;
299
+ jobId: z.ZodOptional<z.ZodString>;
300
+ }, z.core.$loose>>;
301
+ }, z.core.$strip>;
302
+ runDetails: z.ZodObject<{
303
+ metadata: z.ZodOptional<z.ZodObject<{
304
+ invocationId: z.ZodOptional<z.ZodString>;
305
+ startedOn: z.ZodOptional<z.ZodString>;
306
+ finishedOn: z.ZodOptional<z.ZodString>;
307
+ }, z.core.$strip>>;
308
+ byproducts: z.ZodOptional<z.ZodArray<z.ZodObject<{
309
+ name: z.ZodOptional<z.ZodString>;
310
+ uri: z.ZodOptional<z.ZodString>;
311
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
312
+ content: z.ZodOptional<z.ZodString>;
313
+ downloadLocation: z.ZodOptional<z.ZodString>;
314
+ mediaType: z.ZodOptional<z.ZodString>;
315
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
316
+ }, z.core.$strip>>>;
317
+ builder: z.ZodObject<{
318
+ id: z.ZodString;
319
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
320
+ name: z.ZodOptional<z.ZodString>;
321
+ uri: z.ZodOptional<z.ZodString>;
322
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
323
+ content: z.ZodOptional<z.ZodString>;
324
+ downloadLocation: z.ZodOptional<z.ZodString>;
325
+ mediaType: z.ZodOptional<z.ZodString>;
326
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
327
+ }, z.core.$strip>>>;
328
+ version: z.ZodOptional<z.ZodObject<{
329
+ 'kici-orchestrator': z.ZodString;
330
+ 'kici-agent': z.ZodString;
331
+ }, z.core.$loose>>;
332
+ }, z.core.$strip>;
333
+ }, z.core.$strip>;
334
+ }, z.core.$strip>;
335
+ export type KiciProvenancePredicate = z.infer<typeof kiciProvenancePredicateSchema>;
336
+ /** KiCI provenance Statement: pins `_type` + `predicateType` + KiCI predicate. */
337
+ export declare const kiciProvenanceStatementSchema: z.ZodObject<{
338
+ _type: z.ZodLiteral<"https://in-toto.io/Statement/v1">;
339
+ subject: z.ZodArray<z.ZodObject<{
340
+ name: z.ZodOptional<z.ZodString>;
341
+ uri: z.ZodOptional<z.ZodString>;
342
+ digest: z.ZodRecord<z.ZodString, z.ZodString>;
343
+ mediaType: z.ZodOptional<z.ZodString>;
344
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
345
+ }, z.core.$strip>>;
346
+ predicateType: z.ZodLiteral<"https://slsa.dev/provenance/v1">;
347
+ predicate: z.ZodObject<{
348
+ buildDefinition: z.ZodObject<{
349
+ resolvedDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
350
+ name: z.ZodOptional<z.ZodString>;
351
+ uri: z.ZodOptional<z.ZodString>;
352
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
353
+ content: z.ZodOptional<z.ZodString>;
354
+ downloadLocation: z.ZodOptional<z.ZodString>;
355
+ mediaType: z.ZodOptional<z.ZodString>;
356
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
357
+ }, z.core.$strip>>>;
358
+ buildType: z.ZodLiteral<"https://kici.dev/buildtypes/workflow/v1">;
359
+ externalParameters: z.ZodObject<{
360
+ workflow: z.ZodObject<{
361
+ repository: z.ZodString;
362
+ ref: z.ZodString;
363
+ path: z.ZodString;
364
+ }, z.core.$strip>;
365
+ }, z.core.$loose>;
366
+ internalParameters: z.ZodOptional<z.ZodObject<{
367
+ commit: z.ZodOptional<z.ZodString>;
368
+ runId: z.ZodOptional<z.ZodString>;
369
+ jobId: z.ZodOptional<z.ZodString>;
370
+ }, z.core.$loose>>;
371
+ }, z.core.$strip>;
372
+ runDetails: z.ZodObject<{
373
+ metadata: z.ZodOptional<z.ZodObject<{
374
+ invocationId: z.ZodOptional<z.ZodString>;
375
+ startedOn: z.ZodOptional<z.ZodString>;
376
+ finishedOn: z.ZodOptional<z.ZodString>;
377
+ }, z.core.$strip>>;
378
+ byproducts: z.ZodOptional<z.ZodArray<z.ZodObject<{
379
+ name: z.ZodOptional<z.ZodString>;
380
+ uri: z.ZodOptional<z.ZodString>;
381
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
382
+ content: z.ZodOptional<z.ZodString>;
383
+ downloadLocation: z.ZodOptional<z.ZodString>;
384
+ mediaType: z.ZodOptional<z.ZodString>;
385
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
386
+ }, z.core.$strip>>>;
387
+ builder: z.ZodObject<{
388
+ id: z.ZodString;
389
+ builderDependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
390
+ name: z.ZodOptional<z.ZodString>;
391
+ uri: z.ZodOptional<z.ZodString>;
392
+ digest: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
393
+ content: z.ZodOptional<z.ZodString>;
394
+ downloadLocation: z.ZodOptional<z.ZodString>;
395
+ mediaType: z.ZodOptional<z.ZodString>;
396
+ annotations: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
397
+ }, z.core.$strip>>>;
398
+ version: z.ZodOptional<z.ZodObject<{
399
+ 'kici-orchestrator': z.ZodString;
400
+ 'kici-agent': z.ZodString;
401
+ }, z.core.$loose>>;
402
+ }, z.core.$strip>;
403
+ }, z.core.$strip>;
404
+ }, z.core.$strip>;
405
+ }, z.core.$strip>;
406
+ export type KiciProvenanceStatement = z.infer<typeof kiciProvenanceStatementSchema>;
407
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1,143 @@
1
+ import "../chunk-gOLHoazu.js";
2
+ import { z } from "zod";
3
+ //#region src/provenance/schema.ts
4
+ /**
5
+ * SLSA v1.0 build-provenance schema for KiCI.
6
+ *
7
+ * Models the in-toto Statement v1 envelope and the SLSA v1.0 provenance
8
+ * predicate as Zod schemas, plus a KiCI-specialized statement schema that pins
9
+ * the KiCI literals and types the KiCI-owned build parameters. This is the
10
+ * single source of truth shared by the agent (produces attestations) and the
11
+ * `kici verify-attestation` CLI (consumes them).
12
+ *
13
+ * Pure schema + types — no Node-only dependencies, so the dashboard can import
14
+ * it for typed artifact rendering. Exported at the subpath
15
+ * `@kici-dev/engine/provenance/schema`.
16
+ *
17
+ * Spec references:
18
+ * - in-toto Statement v1: https://github.com/in-toto/attestation/blob/main/spec/v1/statement.md
19
+ * - SLSA v1.0 provenance: https://slsa.dev/spec/v1.0/provenance
20
+ */
21
+ /** in-toto Statement `_type` value (pinned). */
22
+ const IN_TOTO_STATEMENT_TYPE = "https://in-toto.io/Statement/v1";
23
+ /** SLSA v1.0 provenance `predicateType` value (pinned). */
24
+ const SLSA_PROVENANCE_PREDICATE_TYPE = "https://slsa.dev/provenance/v1";
25
+ /** KiCI workflow `buildType` URI (we own this namespace). */
26
+ const KICI_WORKFLOW_BUILD_TYPE = "https://kici.dev/buildtypes/workflow/v1";
27
+ /**
28
+ * Known digest algorithms KiCI emits or tests reference. The digest map itself
29
+ * (`digestSetSchema`) keeps its keys open for forward-compatibility; this enum
30
+ * documents the common set so producer code and tests don't repeat literals.
31
+ */
32
+ const DigestAlgorithm = z.enum([
33
+ "sha256",
34
+ "sha512",
35
+ "sha1",
36
+ "gitCommit",
37
+ "dirHash"
38
+ ]);
39
+ /** Lowercase hex string (in-toto requires lowercase-hex digest encoding). */
40
+ const lowercaseHex = z.string().regex(/^[0-9a-f]+$/, "digest value must be lowercase hex");
41
+ /**
42
+ * in-toto digest set: a map of algorithm name → lowercase-hex digest. Keys are
43
+ * open (forward-compat); at least one entry is required.
44
+ */
45
+ const digestSetSchema = z.record(z.string().min(1), lowercaseHex).refine((d) => Object.keys(d).length > 0, { message: "digest must contain at least one algorithm" });
46
+ /**
47
+ * in-toto ResourceDescriptor. Reused for `resolvedDependencies` and
48
+ * `byproducts`. Per spec, at least one of name / uri / digest must be present.
49
+ */
50
+ const resourceDescriptorSchema = z.object({
51
+ name: z.string().optional(),
52
+ uri: z.string().optional(),
53
+ digest: digestSetSchema.optional(),
54
+ content: z.string().optional(),
55
+ downloadLocation: z.string().optional(),
56
+ mediaType: z.string().optional(),
57
+ annotations: z.record(z.string(), z.unknown()).optional()
58
+ }).refine((rd) => rd.name !== void 0 || rd.uri !== void 0 || rd.digest !== void 0, { message: "resource descriptor requires at least one of name, uri, or digest" });
59
+ /**
60
+ * in-toto Statement subject entry: a resource descriptor that MUST carry a
61
+ * digest (the verifier matches the subject digest against the artifact).
62
+ */
63
+ const subjectSchema = z.object({
64
+ name: z.string().optional(),
65
+ uri: z.string().optional(),
66
+ digest: digestSetSchema,
67
+ mediaType: z.string().optional(),
68
+ annotations: z.record(z.string(), z.unknown()).optional()
69
+ });
70
+ /** SLSA `builder`: identity of the build platform. `id` is a required URI. */
71
+ const builderSchema = z.object({
72
+ id: z.string(),
73
+ builderDependencies: z.array(resourceDescriptorSchema).optional(),
74
+ version: z.record(z.string(), z.string()).optional()
75
+ });
76
+ /** SLSA `metadata`: build-invocation metadata. */
77
+ const buildMetadataSchema = z.object({
78
+ invocationId: z.string().optional(),
79
+ startedOn: z.string().datetime({ offset: true }).optional(),
80
+ finishedOn: z.string().datetime({ offset: true }).optional()
81
+ });
82
+ /** SLSA `buildDefinition`. `buildType` + `externalParameters` are required. */
83
+ const buildDefinitionSchema = z.object({
84
+ buildType: z.string(),
85
+ externalParameters: z.record(z.string(), z.unknown()),
86
+ internalParameters: z.record(z.string(), z.unknown()).optional(),
87
+ resolvedDependencies: z.array(resourceDescriptorSchema).optional()
88
+ });
89
+ /** SLSA `runDetails`. `builder` is required. */
90
+ const runDetailsSchema = z.object({
91
+ builder: builderSchema,
92
+ metadata: buildMetadataSchema.optional(),
93
+ byproducts: z.array(resourceDescriptorSchema).optional()
94
+ });
95
+ /** SLSA v1.0 provenance predicate. */
96
+ const slsaProvenancePredicateSchema = z.object({
97
+ buildDefinition: buildDefinitionSchema,
98
+ runDetails: runDetailsSchema
99
+ });
100
+ /** Predicate-agnostic in-toto Statement v1 envelope. */
101
+ const inTotoStatementSchema = z.object({
102
+ _type: z.literal(IN_TOTO_STATEMENT_TYPE),
103
+ subject: z.array(subjectSchema).min(1),
104
+ predicateType: z.string(),
105
+ predicate: z.record(z.string(), z.unknown())
106
+ });
107
+ /** KiCI workflow external parameters: the workflow source coordinates. */
108
+ const kiciWorkflowExternalParametersSchema = z.object({ workflow: z.object({
109
+ repository: z.string(),
110
+ ref: z.string(),
111
+ path: z.string()
112
+ }) }).passthrough();
113
+ /** KiCI workflow internal parameters: run-scoped build context. */
114
+ const kiciWorkflowInternalParametersSchema = z.object({
115
+ commit: z.string().optional(),
116
+ runId: z.string().optional(),
117
+ jobId: z.string().optional()
118
+ }).passthrough();
119
+ /** KiCI build definition: pins the buildType and types the workflow params. */
120
+ const kiciBuildDefinitionSchema = buildDefinitionSchema.extend({
121
+ buildType: z.literal(KICI_WORKFLOW_BUILD_TYPE),
122
+ externalParameters: kiciWorkflowExternalParametersSchema,
123
+ internalParameters: kiciWorkflowInternalParametersSchema.optional()
124
+ });
125
+ /** KiCI run details: types builder.version with the KiCI component versions. */
126
+ const kiciRunDetailsSchema = runDetailsSchema.extend({ builder: builderSchema.extend({ version: z.object({
127
+ "kici-orchestrator": z.string(),
128
+ "kici-agent": z.string()
129
+ }).passthrough().optional() }) });
130
+ /** KiCI SLSA provenance predicate. */
131
+ const kiciProvenancePredicateSchema = z.object({
132
+ buildDefinition: kiciBuildDefinitionSchema,
133
+ runDetails: kiciRunDetailsSchema
134
+ });
135
+ /** KiCI provenance Statement: pins `_type` + `predicateType` + KiCI predicate. */
136
+ const kiciProvenanceStatementSchema = inTotoStatementSchema.extend({
137
+ predicateType: z.literal(SLSA_PROVENANCE_PREDICATE_TYPE),
138
+ predicate: kiciProvenancePredicateSchema
139
+ });
140
+ //#endregion
141
+ export { DigestAlgorithm, IN_TOTO_STATEMENT_TYPE, KICI_WORKFLOW_BUILD_TYPE, SLSA_PROVENANCE_PREDICATE_TYPE, buildDefinitionSchema, buildMetadataSchema, builderSchema, digestSetSchema, inTotoStatementSchema, kiciBuildDefinitionSchema, kiciProvenancePredicateSchema, kiciProvenanceStatementSchema, kiciRunDetailsSchema, kiciWorkflowExternalParametersSchema, kiciWorkflowInternalParametersSchema, resourceDescriptorSchema, runDetailsSchema, slsaProvenancePredicateSchema, subjectSchema };
142
+
143
+ //# sourceMappingURL=schema.js.map
@@ -14,6 +14,7 @@
14
14
  export type { ProviderType } from './types.js';
15
15
  export type { WebhookNormalizer, AccessCacheInvalidation } from './webhook-normalizer.js';
16
16
  export type { LockFileFetcher } from './lock-file-fetcher.js';
17
+ export { LockFileParseError } from './lock-file-parse-error.js';
17
18
  export type { ChangedFilesFetcher } from './changed-files-fetcher.js';
18
19
  export type { CloneTokenProvider, ProviderGitAuth } from './clone-token-provider.js';
19
20
  export type { RepoUrlBuilder } from './repo-url-builder.js';
@@ -1,3 +1,4 @@
1
1
  import "../chunk-gOLHoazu.js";
2
+ import { LockFileParseError } from "./lock-file-parse-error.js";
2
3
  import { CheckRunConclusion } from "./check-run-conclusion.js";
3
- export { CheckRunConclusion };
4
+ export { CheckRunConclusion, LockFileParseError };