@aviaratech/ai-delivery 0.1.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.
Files changed (140) hide show
  1. package/CONTRIBUTING.md +47 -0
  2. package/LICENSE +21 -0
  3. package/README.md +84 -0
  4. package/dist/agent.d.ts +17 -0
  5. package/dist/agent.js +16 -0
  6. package/dist/agent.js.map +1 -0
  7. package/dist/cli.d.ts +2 -0
  8. package/dist/cli.js +314 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/cliResult.d.ts +2 -0
  11. package/dist/cliResult.js +12 -0
  12. package/dist/cliResult.js.map +1 -0
  13. package/dist/cliResult.test.d.ts +1 -0
  14. package/dist/cliResult.test.js +30 -0
  15. package/dist/cliResult.test.js.map +1 -0
  16. package/dist/config/deliveryConfig.d.ts +113 -0
  17. package/dist/config/deliveryConfig.js +261 -0
  18. package/dist/config/deliveryConfig.js.map +1 -0
  19. package/dist/config/deliveryConfig.test.d.ts +1 -0
  20. package/dist/config/deliveryConfig.test.js +355 -0
  21. package/dist/config/deliveryConfig.test.js.map +1 -0
  22. package/dist/delivery/common.d.ts +28 -0
  23. package/dist/delivery/common.js +117 -0
  24. package/dist/delivery/common.js.map +1 -0
  25. package/dist/delivery/delivery.test.d.ts +1 -0
  26. package/dist/delivery/delivery.test.js +234 -0
  27. package/dist/delivery/delivery.test.js.map +1 -0
  28. package/dist/delivery/evidence.d.ts +92 -0
  29. package/dist/delivery/evidence.js +126 -0
  30. package/dist/delivery/evidence.js.map +1 -0
  31. package/dist/delivery/index.d.ts +8 -0
  32. package/dist/delivery/index.js +5 -0
  33. package/dist/delivery/index.js.map +1 -0
  34. package/dist/delivery/policy.d.ts +237 -0
  35. package/dist/delivery/policy.js +246 -0
  36. package/dist/delivery/policy.js.map +1 -0
  37. package/dist/delivery/stage.d.ts +125 -0
  38. package/dist/delivery/stage.js +218 -0
  39. package/dist/delivery/stage.js.map +1 -0
  40. package/dist/dispatch.d.ts +15 -0
  41. package/dist/dispatch.js +397 -0
  42. package/dist/dispatch.js.map +1 -0
  43. package/dist/errors.d.ts +4 -0
  44. package/dist/errors.js +9 -0
  45. package/dist/errors.js.map +1 -0
  46. package/dist/genericCompatibility.test.d.ts +1 -0
  47. package/dist/genericCompatibility.test.js +92 -0
  48. package/dist/genericCompatibility.test.js.map +1 -0
  49. package/dist/git.d.ts +13 -0
  50. package/dist/git.js +65 -0
  51. package/dist/git.js.map +1 -0
  52. package/dist/github/client.d.ts +34 -0
  53. package/dist/github/client.js +143 -0
  54. package/dist/github/client.js.map +1 -0
  55. package/dist/github/commandIdentityPolicy.d.ts +13 -0
  56. package/dist/github/commandIdentityPolicy.js +46 -0
  57. package/dist/github/commandIdentityPolicy.js.map +1 -0
  58. package/dist/github/nativeIssueMetadata.d.ts +78 -0
  59. package/dist/github/nativeIssueMetadata.js +249 -0
  60. package/dist/github/nativeIssueMetadata.js.map +1 -0
  61. package/dist/github/projectDelivery.d.ts +68 -0
  62. package/dist/github/projectDelivery.js +540 -0
  63. package/dist/github/projectDelivery.js.map +1 -0
  64. package/dist/github/relationships.d.ts +69 -0
  65. package/dist/github/relationships.js +395 -0
  66. package/dist/github/relationships.js.map +1 -0
  67. package/dist/github/repo.d.ts +8 -0
  68. package/dist/github/repo.js +34 -0
  69. package/dist/github/repo.js.map +1 -0
  70. package/dist/index.d.ts +2 -0
  71. package/dist/index.js +3 -0
  72. package/dist/index.js.map +1 -0
  73. package/dist/issue.d.ts +86 -0
  74. package/dist/issue.js +347 -0
  75. package/dist/issue.js.map +1 -0
  76. package/dist/lifecycle.test.d.ts +1 -0
  77. package/dist/lifecycle.test.js +1118 -0
  78. package/dist/lifecycle.test.js.map +1 -0
  79. package/dist/logger.d.ts +21 -0
  80. package/dist/logger.js +86 -0
  81. package/dist/logger.js.map +1 -0
  82. package/dist/mcp/index.d.ts +5 -0
  83. package/dist/mcp/index.js +46 -0
  84. package/dist/mcp/index.js.map +1 -0
  85. package/dist/mcp/tools.d.ts +162 -0
  86. package/dist/mcp/tools.js +154 -0
  87. package/dist/mcp/tools.js.map +1 -0
  88. package/dist/pr.d.ts +146 -0
  89. package/dist/pr.js +972 -0
  90. package/dist/pr.js.map +1 -0
  91. package/dist/pr.test.d.ts +1 -0
  92. package/dist/pr.test.js +252 -0
  93. package/dist/pr.test.js.map +1 -0
  94. package/dist/review.d.ts +104 -0
  95. package/dist/review.js +228 -0
  96. package/dist/review.js.map +1 -0
  97. package/dist/review.test.d.ts +1 -0
  98. package/dist/review.test.js +327 -0
  99. package/dist/review.test.js.map +1 -0
  100. package/dist/services/agentReadinessService.d.ts +17 -0
  101. package/dist/services/agentReadinessService.js +225 -0
  102. package/dist/services/agentReadinessService.js.map +1 -0
  103. package/dist/services/deliveryAdmission.d.ts +33 -0
  104. package/dist/services/deliveryAdmission.js +122 -0
  105. package/dist/services/deliveryAdmission.js.map +1 -0
  106. package/dist/services/deliveryRecordService.d.ts +47 -0
  107. package/dist/services/deliveryRecordService.js +199 -0
  108. package/dist/services/deliveryRecordService.js.map +1 -0
  109. package/dist/services/legacyIssueMigration.d.ts +46 -0
  110. package/dist/services/legacyIssueMigration.js +313 -0
  111. package/dist/services/legacyIssueMigration.js.map +1 -0
  112. package/dist/services/worktreeRegistry.d.ts +67 -0
  113. package/dist/services/worktreeRegistry.js +545 -0
  114. package/dist/services/worktreeRegistry.js.map +1 -0
  115. package/dist/terminalMessages.d.ts +13 -0
  116. package/dist/terminalMessages.js +43 -0
  117. package/dist/terminalMessages.js.map +1 -0
  118. package/dist/utils/atomicJson.d.ts +6 -0
  119. package/dist/utils/atomicJson.js +78 -0
  120. package/dist/utils/atomicJson.js.map +1 -0
  121. package/dist/utils/filesystem.d.ts +9 -0
  122. package/dist/utils/filesystem.js +19 -0
  123. package/dist/utils/filesystem.js.map +1 -0
  124. package/dist/utils/lockfile.d.ts +12 -0
  125. package/dist/utils/lockfile.js +78 -0
  126. package/dist/utils/lockfile.js.map +1 -0
  127. package/dist/verification.d.ts +24 -0
  128. package/dist/verification.js +227 -0
  129. package/dist/verification.js.map +1 -0
  130. package/dist/worktree.d.ts +44 -0
  131. package/dist/worktree.js +255 -0
  132. package/dist/worktree.js.map +1 -0
  133. package/package.json +82 -0
  134. package/plugins/ai-delivery/.claude-plugin/plugin.json +6 -0
  135. package/plugins/ai-delivery/.mcp.json +8 -0
  136. package/plugins/ai-delivery/README.md +5 -0
  137. package/plugins/ai-delivery/dist/mcp-launcher.js +22 -0
  138. package/plugins/ai-delivery/skills/intake-create/SKILL.md +26 -0
  139. package/plugins/ai-delivery/skills/pr-handoff/SKILL.md +28 -0
  140. package/plugins/ai-delivery/skills/worktree-lifecycle/SKILL.md +24 -0
@@ -0,0 +1,237 @@
1
+ import { z } from 'zod';
2
+ import type { Coordinate } from './common.js';
3
+ export declare const RepositoryStageDefinitionSchema: z.ZodObject<{
4
+ attestationKey: z.ZodOptional<z.ZodString>;
5
+ commands: z.ZodArray<z.ZodObject<{
6
+ argv: z.ZodArray<z.ZodString>;
7
+ label: z.ZodString;
8
+ }, z.core.$strict>>;
9
+ dependsOn: z.ZodArray<z.ZodString>;
10
+ id: z.ZodString;
11
+ resourceClass: z.ZodEnum<{
12
+ source_only: "source_only";
13
+ focused_node: "focused_node";
14
+ canonical_verify: "canonical_verify";
15
+ model: "model";
16
+ postgres_docker: "postgres_docker";
17
+ }>;
18
+ semanticInputKeys: z.ZodArray<z.ZodString>;
19
+ }, z.core.$strict>;
20
+ export type RepositoryStageDefinition = z.infer<typeof RepositoryStageDefinitionSchema>;
21
+ export declare const RepositoryPolicyEvidenceSchema: z.ZodObject<{
22
+ artifacts: z.ZodArray<z.ZodObject<{
23
+ digest: z.ZodString;
24
+ path: z.ZodString;
25
+ producer: z.ZodString;
26
+ }, z.core.$strict>>;
27
+ base: z.ZodObject<{
28
+ sha: z.ZodString;
29
+ tree: z.ZodString;
30
+ }, z.core.$strict>;
31
+ configDigest: z.ZodString;
32
+ evidenceId: z.ZodString;
33
+ head: z.ZodObject<{
34
+ sha: z.ZodString;
35
+ tree: z.ZodString;
36
+ }, z.core.$strict>;
37
+ opaquePayload: z.ZodString;
38
+ policyDigest: z.ZodString;
39
+ producer: z.ZodString;
40
+ repository: z.ZodString;
41
+ schemaVersion: z.ZodLiteral<"ai-delivery.policy-evidence@1">;
42
+ }, z.core.$strict>;
43
+ export type RepositoryPolicyEvidence = z.infer<typeof RepositoryPolicyEvidenceSchema>;
44
+ export declare const RepositoryPolicyClassificationSchema: z.ZodObject<{
45
+ policyDigest: z.ZodString;
46
+ policyEvidence: z.ZodObject<{
47
+ artifacts: z.ZodArray<z.ZodObject<{
48
+ digest: z.ZodString;
49
+ path: z.ZodString;
50
+ producer: z.ZodString;
51
+ }, z.core.$strict>>;
52
+ base: z.ZodObject<{
53
+ sha: z.ZodString;
54
+ tree: z.ZodString;
55
+ }, z.core.$strict>;
56
+ configDigest: z.ZodString;
57
+ evidenceId: z.ZodString;
58
+ head: z.ZodObject<{
59
+ sha: z.ZodString;
60
+ tree: z.ZodString;
61
+ }, z.core.$strict>;
62
+ opaquePayload: z.ZodString;
63
+ policyDigest: z.ZodString;
64
+ producer: z.ZodString;
65
+ repository: z.ZodString;
66
+ schemaVersion: z.ZodLiteral<"ai-delivery.policy-evidence@1">;
67
+ }, z.core.$strict>;
68
+ requiredStages: z.ZodArray<z.ZodObject<{
69
+ attestationKey: z.ZodOptional<z.ZodString>;
70
+ commands: z.ZodArray<z.ZodObject<{
71
+ argv: z.ZodArray<z.ZodString>;
72
+ label: z.ZodString;
73
+ }, z.core.$strict>>;
74
+ dependsOn: z.ZodArray<z.ZodString>;
75
+ id: z.ZodString;
76
+ resourceClass: z.ZodEnum<{
77
+ source_only: "source_only";
78
+ focused_node: "focused_node";
79
+ canonical_verify: "canonical_verify";
80
+ model: "model";
81
+ postgres_docker: "postgres_docker";
82
+ }>;
83
+ semanticInputKeys: z.ZodArray<z.ZodString>;
84
+ }, z.core.$strict>>;
85
+ risk: z.ZodEnum<{
86
+ high: "high";
87
+ standard: "standard";
88
+ }>;
89
+ }, z.core.$strict>;
90
+ export type RepositoryPolicyClassification = z.infer<typeof RepositoryPolicyClassificationSchema>;
91
+ export declare const RepositoryPolicyBoundarySchema: z.ZodObject<{
92
+ additionalConstraints: z.ZodObject<{
93
+ exactBaseHeadLease: z.ZodBoolean;
94
+ requiredAttestationIds: z.ZodArray<z.ZodString>;
95
+ }, z.core.$strict>;
96
+ boundaryId: z.ZodString;
97
+ classificationReceiptId: z.ZodString;
98
+ configDigest: z.ZodString;
99
+ currentBase: z.ZodObject<{
100
+ sha: z.ZodString;
101
+ tree: z.ZodString;
102
+ }, z.core.$strict>;
103
+ currentHead: z.ZodObject<{
104
+ sha: z.ZodString;
105
+ tree: z.ZodString;
106
+ }, z.core.$strict>;
107
+ phase: z.ZodEnum<{
108
+ verify: "verify";
109
+ publish: "publish";
110
+ merge: "merge";
111
+ }>;
112
+ policyEvidenceId: z.ZodString;
113
+ schemaVersion: z.ZodLiteral<"ai-delivery.policy-boundary@1">;
114
+ stageReceiptSetHash: z.ZodString;
115
+ }, z.core.$strict>;
116
+ export type RepositoryPolicyBoundary = z.infer<typeof RepositoryPolicyBoundarySchema>;
117
+ export interface RepositoryDeliveryPolicy {
118
+ readonly schemaVersion: 'RepositoryDeliveryPolicy@1';
119
+ classifyExactRange(input: {
120
+ repository: string;
121
+ baseSha: string;
122
+ baseTree: string;
123
+ headSha: string;
124
+ headTree: string;
125
+ changedPaths: readonly string[];
126
+ configDigest: string;
127
+ }): RepositoryPolicyClassification;
128
+ validateBoundary(input: {
129
+ phase: 'verify' | 'publish' | 'merge';
130
+ classificationReceiptId: string;
131
+ policyEvidence: RepositoryPolicyEvidence;
132
+ currentBase: Coordinate;
133
+ currentHead: Coordinate;
134
+ configDigest: string;
135
+ stageReceiptIds: readonly {
136
+ receiptId: string;
137
+ stageId: string;
138
+ }[];
139
+ }): RepositoryPolicyBoundary;
140
+ }
141
+ export declare const RepositoryClassificationReceiptSchema: z.ZodObject<{
142
+ base: z.ZodObject<{
143
+ sha: z.ZodString;
144
+ tree: z.ZodString;
145
+ }, z.core.$strict>;
146
+ changedPaths: z.ZodArray<z.ZodString>;
147
+ configDigest: z.ZodString;
148
+ head: z.ZodObject<{
149
+ sha: z.ZodString;
150
+ tree: z.ZodString;
151
+ }, z.core.$strict>;
152
+ policyDigest: z.ZodString;
153
+ policyEvidence: z.ZodObject<{
154
+ artifacts: z.ZodArray<z.ZodObject<{
155
+ digest: z.ZodString;
156
+ path: z.ZodString;
157
+ producer: z.ZodString;
158
+ }, z.core.$strict>>;
159
+ base: z.ZodObject<{
160
+ sha: z.ZodString;
161
+ tree: z.ZodString;
162
+ }, z.core.$strict>;
163
+ configDigest: z.ZodString;
164
+ evidenceId: z.ZodString;
165
+ head: z.ZodObject<{
166
+ sha: z.ZodString;
167
+ tree: z.ZodString;
168
+ }, z.core.$strict>;
169
+ opaquePayload: z.ZodString;
170
+ policyDigest: z.ZodString;
171
+ producer: z.ZodString;
172
+ repository: z.ZodString;
173
+ schemaVersion: z.ZodLiteral<"ai-delivery.policy-evidence@1">;
174
+ }, z.core.$strict>;
175
+ receiptId: z.ZodString;
176
+ repository: z.ZodString;
177
+ requiredStages: z.ZodArray<z.ZodObject<{
178
+ attestationKey: z.ZodOptional<z.ZodString>;
179
+ commands: z.ZodArray<z.ZodObject<{
180
+ argv: z.ZodArray<z.ZodString>;
181
+ label: z.ZodString;
182
+ }, z.core.$strict>>;
183
+ dependsOn: z.ZodArray<z.ZodString>;
184
+ id: z.ZodString;
185
+ resourceClass: z.ZodEnum<{
186
+ source_only: "source_only";
187
+ focused_node: "focused_node";
188
+ canonical_verify: "canonical_verify";
189
+ model: "model";
190
+ postgres_docker: "postgres_docker";
191
+ }>;
192
+ semanticInputKeys: z.ZodArray<z.ZodString>;
193
+ }, z.core.$strict>>;
194
+ risk: z.ZodEnum<{
195
+ high: "high";
196
+ standard: "standard";
197
+ }>;
198
+ schemaVersion: z.ZodLiteral<"ai-delivery.classification@1">;
199
+ }, z.core.$strict>;
200
+ export type RepositoryClassificationReceipt = z.infer<typeof RepositoryClassificationReceiptSchema>;
201
+ export declare function loadSelectedRepositoryPolicy(input: {
202
+ repoRoot: string;
203
+ policySourcePath: string;
204
+ }): Promise<{
205
+ policy: RepositoryDeliveryPolicy;
206
+ policyDigest: `sha256:${string}`;
207
+ }>;
208
+ export declare function classifyRepositoryExactRange(input: {
209
+ repoRoot: string;
210
+ repository: string;
211
+ base: Coordinate;
212
+ head: Coordinate;
213
+ changedPaths: readonly string[];
214
+ configDigest: string;
215
+ policySourcePath: string;
216
+ policy: RepositoryDeliveryPolicy;
217
+ }): RepositoryClassificationReceipt;
218
+ export declare function assertRepositoryClassificationCurrent(input: {
219
+ repoRoot: string;
220
+ classification: RepositoryClassificationReceipt;
221
+ configDigest: string;
222
+ policySourcePath: string;
223
+ }): void;
224
+ export declare function validateRepositoryPolicyBoundary(input: {
225
+ repoRoot: string;
226
+ classification: RepositoryClassificationReceipt;
227
+ configDigest: string;
228
+ currentBase: Coordinate;
229
+ currentHead: Coordinate;
230
+ phase: 'verify' | 'publish' | 'merge';
231
+ policySourcePath: string;
232
+ policy: RepositoryDeliveryPolicy;
233
+ stageReceiptIds: readonly {
234
+ receiptId: string;
235
+ stageId: string;
236
+ }[];
237
+ }): RepositoryPolicyBoundary;
@@ -0,0 +1,246 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { pathToFileURL } from 'node:url';
3
+ import { z } from 'zod';
4
+ import { assertArtifact, assertExactRange, CoordinateSchema, DigestSchema, digestBytes, digestValue, git, isUniqueSorted, RepositorySchema, resolveRepositoryFile, stableJson, StageIdSchema, } from './common.js';
5
+ const ArtifactSchema = z
6
+ .object({ digest: DigestSchema, path: z.string().min(1), producer: z.string().min(1) })
7
+ .strict();
8
+ export const RepositoryStageDefinitionSchema = z
9
+ .object({
10
+ attestationKey: z.string().min(1).optional(),
11
+ commands: z.array(z.object({ argv: z.array(z.string().min(1)).min(1), label: z.string().min(1) }).strict()),
12
+ dependsOn: z.array(StageIdSchema),
13
+ id: StageIdSchema,
14
+ resourceClass: z.enum(['source_only', 'focused_node', 'canonical_verify', 'model', 'postgres_docker']),
15
+ semanticInputKeys: z.array(z.string().min(1)).min(1),
16
+ })
17
+ .strict();
18
+ export const RepositoryPolicyEvidenceSchema = z
19
+ .object({
20
+ artifacts: z.array(ArtifactSchema).min(1),
21
+ base: CoordinateSchema,
22
+ configDigest: DigestSchema,
23
+ evidenceId: DigestSchema,
24
+ head: CoordinateSchema,
25
+ opaquePayload: z.string().min(1),
26
+ policyDigest: DigestSchema,
27
+ producer: z.string().min(1),
28
+ repository: RepositorySchema,
29
+ schemaVersion: z.literal('ai-delivery.policy-evidence@1'),
30
+ })
31
+ .strict()
32
+ .superRefine((value, ctx) => {
33
+ const { evidenceId, ...content } = value;
34
+ if (evidenceId !== digestValue(content) || !isUniqueSorted(value.artifacts.map((a) => a.path)))
35
+ ctx.addIssue({ code: 'custom', message: 'Policy evidence identity or artifacts are invalid.' });
36
+ });
37
+ export const RepositoryPolicyClassificationSchema = z
38
+ .object({
39
+ policyDigest: DigestSchema,
40
+ policyEvidence: RepositoryPolicyEvidenceSchema,
41
+ requiredStages: z.array(RepositoryStageDefinitionSchema).min(1),
42
+ risk: z.enum(['standard', 'high']),
43
+ })
44
+ .strict()
45
+ .superRefine((value, ctx) => {
46
+ const seen = new Set();
47
+ for (const stage of value.requiredStages) {
48
+ if (seen.has(stage.id) ||
49
+ stage.dependsOn.some((d) => !seen.has(d)) ||
50
+ new Set(stage.dependsOn).size !== stage.dependsOn.length ||
51
+ !isUniqueSorted(stage.semanticInputKeys) ||
52
+ (stage.commands.length === 0) !== (stage.attestationKey !== undefined))
53
+ ctx.addIssue({ code: 'custom', message: 'Policy stages must be unique, ordered and proof complete.' });
54
+ seen.add(stage.id);
55
+ }
56
+ });
57
+ export const RepositoryPolicyBoundarySchema = z
58
+ .object({
59
+ additionalConstraints: z
60
+ .object({ exactBaseHeadLease: z.boolean(), requiredAttestationIds: z.array(DigestSchema) })
61
+ .strict(),
62
+ boundaryId: DigestSchema,
63
+ classificationReceiptId: DigestSchema,
64
+ configDigest: DigestSchema,
65
+ currentBase: CoordinateSchema,
66
+ currentHead: CoordinateSchema,
67
+ phase: z.enum(['verify', 'publish', 'merge']),
68
+ policyEvidenceId: DigestSchema,
69
+ schemaVersion: z.literal('ai-delivery.policy-boundary@1'),
70
+ stageReceiptSetHash: DigestSchema,
71
+ })
72
+ .strict()
73
+ .superRefine((value, ctx) => {
74
+ const { boundaryId, ...content } = value;
75
+ if (boundaryId !== digestValue(content) || !isUniqueSorted(value.additionalConstraints.requiredAttestationIds))
76
+ ctx.addIssue({ code: 'custom', message: 'Policy boundary identity or attestation inventory is invalid.' });
77
+ });
78
+ export const RepositoryClassificationReceiptSchema = z
79
+ .object({
80
+ base: CoordinateSchema,
81
+ changedPaths: z.array(z.string().min(1)),
82
+ configDigest: DigestSchema,
83
+ head: CoordinateSchema,
84
+ policyDigest: DigestSchema,
85
+ policyEvidence: RepositoryPolicyEvidenceSchema,
86
+ receiptId: DigestSchema,
87
+ repository: RepositorySchema,
88
+ requiredStages: z.array(RepositoryStageDefinitionSchema).min(1),
89
+ risk: z.enum(['standard', 'high']),
90
+ schemaVersion: z.literal('ai-delivery.classification@1'),
91
+ })
92
+ .strict()
93
+ .superRefine((value, ctx) => {
94
+ const { receiptId, ...content } = value;
95
+ if (receiptId !== digestValue(content) ||
96
+ !isUniqueSorted(value.changedPaths) ||
97
+ (value.base.sha !== value.head.sha && value.changedPaths.length === 0) ||
98
+ value.policyEvidence.repository !== value.repository ||
99
+ stableJson(value.policyEvidence.base) !== stableJson(value.base) ||
100
+ stableJson(value.policyEvidence.head) !== stableJson(value.head) ||
101
+ value.policyEvidence.configDigest !== value.configDigest ||
102
+ value.policyEvidence.policyDigest !== value.policyDigest ||
103
+ !RepositoryPolicyClassificationSchema.safeParse({
104
+ policyDigest: value.policyDigest,
105
+ policyEvidence: value.policyEvidence,
106
+ requiredStages: value.requiredStages,
107
+ risk: value.risk,
108
+ }).success)
109
+ ctx.addIssue({ code: 'custom', message: 'Repository classification is unbound or invalid.' });
110
+ });
111
+ export async function loadSelectedRepositoryPolicy(input) {
112
+ const path = resolveRepositoryFile(input.repoRoot, input.policySourcePath);
113
+ git(input.repoRoot, ['ls-files', '--error-unmatch', '--', input.policySourcePath]);
114
+ const policyDigest = digestBytes(readFileSync(path));
115
+ const loaded = await import(`${pathToFileURL(path).href}?policy=${policyDigest.slice(7)}`);
116
+ const policy = loaded.default;
117
+ if (policy === null ||
118
+ typeof policy !== 'object' ||
119
+ policy.schemaVersion !== 'RepositoryDeliveryPolicy@1' ||
120
+ typeof policy.classifyExactRange !== 'function' ||
121
+ typeof policy.validateBoundary !== 'function')
122
+ throw new Error('Selected repository policy module is missing or invalid.');
123
+ return { policy: policy, policyDigest };
124
+ }
125
+ function selectedPolicyDigest(repoRoot, policySourcePath) {
126
+ const path = resolveRepositoryFile(repoRoot, policySourcePath);
127
+ git(repoRoot, ['ls-files', '--error-unmatch', '--', policySourcePath]);
128
+ return digestBytes(readFileSync(path));
129
+ }
130
+ export function classifyRepositoryExactRange(input) {
131
+ if (input.policy.schemaVersion !== 'RepositoryDeliveryPolicy@1')
132
+ throw new Error('Unknown repository policy version.');
133
+ const base = CoordinateSchema.parse(input.base);
134
+ const head = CoordinateSchema.parse(input.head);
135
+ const repository = RepositorySchema.parse(input.repository);
136
+ const configDigest = DigestSchema.parse(input.configDigest);
137
+ const changedPaths = [...input.changedPaths].sort();
138
+ assertExactRange({ repoRoot: input.repoRoot, base, head, changedPaths });
139
+ const policyDigest = selectedPolicyDigest(input.repoRoot, input.policySourcePath);
140
+ const selected = RepositoryPolicyClassificationSchema.parse(input.policy.classifyExactRange({
141
+ repository,
142
+ baseSha: base.sha,
143
+ baseTree: base.tree,
144
+ headSha: head.sha,
145
+ headTree: head.tree,
146
+ changedPaths,
147
+ configDigest,
148
+ }));
149
+ if (selected.policyDigest !== policyDigest ||
150
+ selected.policyEvidence.policyDigest !== policyDigest ||
151
+ selected.policyEvidence.repository !== repository ||
152
+ stableJson(selected.policyEvidence.base) !== stableJson(base) ||
153
+ stableJson(selected.policyEvidence.head) !== stableJson(head) ||
154
+ selected.policyEvidence.configDigest !== configDigest)
155
+ throw new Error('Selected policy did not bind the exact repository, config, source and policy bytes.');
156
+ for (const artifact of selected.policyEvidence.artifacts)
157
+ assertArtifact(input.repoRoot, artifact);
158
+ const content = {
159
+ base,
160
+ changedPaths,
161
+ configDigest,
162
+ head,
163
+ policyDigest,
164
+ policyEvidence: selected.policyEvidence,
165
+ repository,
166
+ requiredStages: selected.requiredStages,
167
+ risk: selected.risk,
168
+ schemaVersion: 'ai-delivery.classification@1',
169
+ };
170
+ return RepositoryClassificationReceiptSchema.parse({ ...content, receiptId: digestValue(content) });
171
+ }
172
+ export function assertRepositoryClassificationCurrent(input) {
173
+ const classification = RepositoryClassificationReceiptSchema.parse(input.classification);
174
+ if (input.configDigest !== classification.configDigest ||
175
+ selectedPolicyDigest(input.repoRoot, input.policySourcePath) !== classification.policyDigest)
176
+ throw new Error('Repository classification is stale against config or policy source.');
177
+ assertExactRange({
178
+ repoRoot: input.repoRoot,
179
+ base: classification.base,
180
+ head: classification.head,
181
+ changedPaths: classification.changedPaths,
182
+ });
183
+ for (const artifact of classification.policyEvidence.artifacts)
184
+ assertArtifact(input.repoRoot, artifact);
185
+ }
186
+ export function validateRepositoryPolicyBoundary(input) {
187
+ const classification = RepositoryClassificationReceiptSchema.parse(input.classification);
188
+ const base = CoordinateSchema.parse(input.currentBase);
189
+ const head = CoordinateSchema.parse(input.currentHead);
190
+ if (input.policy.schemaVersion !== 'RepositoryDeliveryPolicy@1' ||
191
+ input.configDigest !== classification.configDigest ||
192
+ selectedPolicyDigest(input.repoRoot, input.policySourcePath) !== classification.policyDigest ||
193
+ stableJson(base) !== stableJson(classification.base) ||
194
+ stableJson(head) !== stableJson(classification.head))
195
+ throw new Error('Repository policy boundary is stale against source, config or policy.');
196
+ assertRepositoryClassificationCurrent({
197
+ repoRoot: input.repoRoot,
198
+ classification,
199
+ configDigest: input.configDigest,
200
+ policySourcePath: input.policySourcePath,
201
+ });
202
+ const selected = RepositoryPolicyClassificationSchema.parse(input.policy.classifyExactRange({
203
+ repository: classification.repository,
204
+ baseSha: base.sha,
205
+ baseTree: base.tree,
206
+ headSha: head.sha,
207
+ headTree: head.tree,
208
+ changedPaths: classification.changedPaths,
209
+ configDigest: classification.configDigest,
210
+ }));
211
+ if (stableJson(selected) !==
212
+ stableJson({
213
+ policyDigest: classification.policyDigest,
214
+ policyEvidence: classification.policyEvidence,
215
+ requiredStages: classification.requiredStages,
216
+ risk: classification.risk,
217
+ }))
218
+ throw new Error('Repository policy no longer selects the classified stage plan.');
219
+ const stageReceiptIds = input.stageReceiptIds.map((entry) => ({
220
+ receiptId: DigestSchema.parse(entry.receiptId),
221
+ stageId: StageIdSchema.parse(entry.stageId),
222
+ }));
223
+ if (stageReceiptIds.length !== classification.requiredStages.length ||
224
+ stageReceiptIds.some((entry, index) => entry.stageId !== classification.requiredStages[index]?.id))
225
+ throw new Error('Policy boundary lacks complete ordered stage receipts.');
226
+ const boundary = RepositoryPolicyBoundarySchema.parse(input.policy.validateBoundary({
227
+ phase: input.phase,
228
+ classificationReceiptId: classification.receiptId,
229
+ policyEvidence: classification.policyEvidence,
230
+ currentBase: base,
231
+ currentHead: head,
232
+ configDigest: classification.configDigest,
233
+ stageReceiptIds,
234
+ }));
235
+ if (boundary.policyEvidenceId !== classification.policyEvidence.evidenceId ||
236
+ boundary.classificationReceiptId !== classification.receiptId ||
237
+ boundary.configDigest !== classification.configDigest ||
238
+ boundary.phase !== input.phase ||
239
+ stableJson(boundary.currentBase) !== stableJson(base) ||
240
+ stableJson(boundary.currentHead) !== stableJson(head) ||
241
+ boundary.stageReceiptSetHash !== digestValue(stageReceiptIds) ||
242
+ boundary.additionalConstraints.requiredAttestationIds.some((id) => !stageReceiptIds.some((stage) => stage.receiptId === id)))
243
+ throw new Error('Repository policy boundary returned unbound constraints.');
244
+ return boundary;
245
+ }
246
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/delivery/policy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { z } from 'zod';
2
+ import type { RepositoryClassificationReceipt } from './policy.js';
3
+ export declare const RepositoryStageInputSchema: z.ZodObject<{
4
+ classificationReceiptId: z.ZodString;
5
+ definitionHash: z.ZodString;
6
+ environmentDigest: z.ZodString;
7
+ inputId: z.ZodString;
8
+ policyDigest: z.ZodString;
9
+ schemaVersion: z.ZodLiteral<"ai-delivery.stage-input@1">;
10
+ semanticInputs: z.ZodArray<z.ZodObject<{
11
+ digest: z.ZodString;
12
+ key: z.ZodString;
13
+ }, z.core.$strict>>;
14
+ stageId: z.ZodString;
15
+ upstream: z.ZodArray<z.ZodObject<{
16
+ receiptId: z.ZodString;
17
+ stageId: z.ZodString;
18
+ }, z.core.$strict>>;
19
+ }, z.core.$strict>;
20
+ export type RepositoryStageInput = z.infer<typeof RepositoryStageInputSchema>;
21
+ export declare const RepositoryStageReceiptSchema: z.ZodObject<{
22
+ artifacts: z.ZodArray<z.ZodObject<{
23
+ digest: z.ZodString;
24
+ path: z.ZodString;
25
+ }, z.core.$strict>>;
26
+ commands: z.ZodArray<z.ZodObject<{
27
+ exitCode: z.ZodNumber;
28
+ label: z.ZodString;
29
+ outputDigest: z.ZodString;
30
+ }, z.core.$strict>>;
31
+ completedAt: z.ZodISODateTime;
32
+ input: z.ZodObject<{
33
+ classificationReceiptId: z.ZodString;
34
+ definitionHash: z.ZodString;
35
+ environmentDigest: z.ZodString;
36
+ inputId: z.ZodString;
37
+ policyDigest: z.ZodString;
38
+ schemaVersion: z.ZodLiteral<"ai-delivery.stage-input@1">;
39
+ semanticInputs: z.ZodArray<z.ZodObject<{
40
+ digest: z.ZodString;
41
+ key: z.ZodString;
42
+ }, z.core.$strict>>;
43
+ stageId: z.ZodString;
44
+ upstream: z.ZodArray<z.ZodObject<{
45
+ receiptId: z.ZodString;
46
+ stageId: z.ZodString;
47
+ }, z.core.$strict>>;
48
+ }, z.core.$strict>;
49
+ receiptId: z.ZodString;
50
+ result: z.ZodLiteral<"passed">;
51
+ schemaVersion: z.ZodLiteral<"ai-delivery.stage-receipt@1">;
52
+ startedAt: z.ZodISODateTime;
53
+ }, z.core.$strict>;
54
+ export type RepositoryStageReceipt = z.infer<typeof RepositoryStageReceiptSchema>;
55
+ export declare const RepositoryStageAggregateSchema: z.ZodObject<{
56
+ aggregateId: z.ZodString;
57
+ classificationReceiptId: z.ZodString;
58
+ policyDigest: z.ZodString;
59
+ result: z.ZodLiteral<"passed">;
60
+ schemaVersion: z.ZodLiteral<"ai-delivery.stage-aggregate@1">;
61
+ stages: z.ZodArray<z.ZodObject<{
62
+ inputId: z.ZodString;
63
+ receiptId: z.ZodString;
64
+ stageId: z.ZodString;
65
+ }, z.core.$strict>>;
66
+ }, z.core.$strict>;
67
+ export type RepositoryStageAggregate = z.infer<typeof RepositoryStageAggregateSchema>;
68
+ export declare function createRepositoryStageInput(input: {
69
+ classification: RepositoryClassificationReceipt;
70
+ environmentDigest: string;
71
+ semanticInputs: readonly {
72
+ digest: string;
73
+ key: string;
74
+ }[];
75
+ stageId: string;
76
+ upstream: readonly {
77
+ receiptId: string;
78
+ stageId: string;
79
+ }[];
80
+ }): RepositoryStageInput;
81
+ export declare function createRepositoryStageReceipt(input: {
82
+ artifacts: readonly {
83
+ digest: string;
84
+ path: string;
85
+ }[];
86
+ classification: RepositoryClassificationReceipt;
87
+ commands: readonly {
88
+ exitCode: number;
89
+ label: string;
90
+ outputDigest: string;
91
+ }[];
92
+ completedAt: string;
93
+ stageInput: RepositoryStageInput;
94
+ startedAt: string;
95
+ }): RepositoryStageReceipt;
96
+ export declare function createRepositoryStageAggregate(input: {
97
+ classification: RepositoryClassificationReceipt;
98
+ receipts: readonly RepositoryStageReceipt[];
99
+ }): RepositoryStageAggregate;
100
+ export declare function writeRepositoryCommandOutput(input: {
101
+ bytes: Buffer;
102
+ gitCommonDir: string;
103
+ }): `sha256:${string}`;
104
+ export declare function assertRepositoryStageProof(input: {
105
+ gitCommonDir: string;
106
+ receipt: RepositoryStageReceipt;
107
+ repoRoot: string;
108
+ }): void;
109
+ export declare function writeRepositoryStageCheckpoint(input: {
110
+ gitCommonDir: string;
111
+ receipt: RepositoryStageReceipt;
112
+ repoRoot: string;
113
+ }): string;
114
+ export declare function loadRepositoryStageCheckpoint(input: {
115
+ gitCommonDir: string;
116
+ stageInput: RepositoryStageInput;
117
+ repoRoot: string;
118
+ classification: RepositoryClassificationReceipt;
119
+ configDigest: string;
120
+ policySourcePath: string;
121
+ }): RepositoryStageReceipt | undefined;
122
+ export declare function writeRepositoryStageAggregate(input: {
123
+ gitCommonDir: string;
124
+ aggregate: RepositoryStageAggregate;
125
+ }): string;