@agent-relay/factory 0.1.49 → 0.1.51

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 (173) hide show
  1. package/README.md +93 -11
  2. package/dist/cli/fleet.d.ts +4 -1
  3. package/dist/cli/fleet.d.ts.map +1 -1
  4. package/dist/cli/fleet.js +87 -42
  5. package/dist/cli/fleet.js.map +1 -1
  6. package/dist/config/schema.d.ts +1671 -10
  7. package/dist/config/schema.d.ts.map +1 -1
  8. package/dist/config/schema.js +83 -0
  9. package/dist/config/schema.js.map +1 -1
  10. package/dist/dispatch/templates.d.ts +6 -0
  11. package/dist/dispatch/templates.d.ts.map +1 -1
  12. package/dist/dispatch/templates.js +16 -0
  13. package/dist/dispatch/templates.js.map +1 -1
  14. package/dist/environments/connection-registry.d.ts +617 -0
  15. package/dist/environments/connection-registry.d.ts.map +1 -0
  16. package/dist/environments/connection-registry.js +174 -0
  17. package/dist/environments/connection-registry.js.map +1 -0
  18. package/dist/environments/index.d.ts +21 -0
  19. package/dist/environments/index.d.ts.map +1 -0
  20. package/dist/environments/index.js +11 -0
  21. package/dist/environments/index.js.map +1 -0
  22. package/dist/environments/k6-job.d.ts +64 -0
  23. package/dist/environments/k6-job.d.ts.map +1 -0
  24. package/dist/environments/k6-job.js +376 -0
  25. package/dist/environments/k6-job.js.map +1 -0
  26. package/dist/environments/kubernetes-client.d.ts +72 -0
  27. package/dist/environments/kubernetes-client.d.ts.map +1 -0
  28. package/dist/environments/kubernetes-client.js +337 -0
  29. package/dist/environments/kubernetes-client.js.map +1 -0
  30. package/dist/environments/kubernetes-command.d.ts +30 -0
  31. package/dist/environments/kubernetes-command.d.ts.map +1 -0
  32. package/dist/environments/kubernetes-command.js +108 -0
  33. package/dist/environments/kubernetes-command.js.map +1 -0
  34. package/dist/environments/kubernetes-environment.d.ts +38 -0
  35. package/dist/environments/kubernetes-environment.d.ts.map +1 -0
  36. package/dist/environments/kubernetes-environment.js +333 -0
  37. package/dist/environments/kubernetes-environment.js.map +1 -0
  38. package/dist/environments/kubernetes-provider.d.ts +83 -0
  39. package/dist/environments/kubernetes-provider.d.ts.map +1 -0
  40. package/dist/environments/kubernetes-provider.js +956 -0
  41. package/dist/environments/kubernetes-provider.js.map +1 -0
  42. package/dist/environments/load-harness.d.ts +199 -0
  43. package/dist/environments/load-harness.d.ts.map +1 -0
  44. package/dist/environments/load-harness.js +259 -0
  45. package/dist/environments/load-harness.js.map +1 -0
  46. package/dist/environments/load-profile.d.ts +294 -0
  47. package/dist/environments/load-profile.d.ts.map +1 -0
  48. package/dist/environments/load-profile.js +125 -0
  49. package/dist/environments/load-profile.js.map +1 -0
  50. package/dist/environments/stack-deployer.d.ts +22 -0
  51. package/dist/environments/stack-deployer.d.ts.map +1 -0
  52. package/dist/environments/stack-deployer.js +27 -0
  53. package/dist/environments/stack-deployer.js.map +1 -0
  54. package/dist/environments/stack-descriptor.d.ts +243 -0
  55. package/dist/environments/stack-descriptor.d.ts.map +1 -0
  56. package/dist/environments/stack-descriptor.js +88 -0
  57. package/dist/environments/stack-descriptor.js.map +1 -0
  58. package/dist/environments/verification-pipeline.d.ts +117 -0
  59. package/dist/environments/verification-pipeline.d.ts.map +1 -0
  60. package/dist/environments/verification-pipeline.js +643 -0
  61. package/dist/environments/verification-pipeline.js.map +1 -0
  62. package/dist/environments/verification-stack-deployer.d.ts +73 -0
  63. package/dist/environments/verification-stack-deployer.d.ts.map +1 -0
  64. package/dist/environments/verification-stack-deployer.js +484 -0
  65. package/dist/environments/verification-stack-deployer.js.map +1 -0
  66. package/dist/environments/verification-stack-descriptor.d.ts +1134 -0
  67. package/dist/environments/verification-stack-descriptor.d.ts.map +1 -0
  68. package/dist/environments/verification-stack-descriptor.js +275 -0
  69. package/dist/environments/verification-stack-descriptor.js.map +1 -0
  70. package/dist/environments/verification-stack.d.ts +29 -0
  71. package/dist/environments/verification-stack.d.ts.map +1 -0
  72. package/dist/environments/verification-stack.js +43 -0
  73. package/dist/environments/verification-stack.js.map +1 -0
  74. package/dist/featuremap/generate.d.ts +72 -0
  75. package/dist/featuremap/generate.d.ts.map +1 -0
  76. package/dist/featuremap/generate.js +854 -0
  77. package/dist/featuremap/generate.js.map +1 -0
  78. package/dist/featuremap/index.d.ts +2 -0
  79. package/dist/featuremap/index.d.ts.map +1 -1
  80. package/dist/featuremap/index.js +1 -0
  81. package/dist/featuremap/index.js.map +1 -1
  82. package/dist/featuremap/validate.d.ts +6 -0
  83. package/dist/featuremap/validate.d.ts.map +1 -1
  84. package/dist/featuremap/validate.js +95 -13
  85. package/dist/featuremap/validate.js.map +1 -1
  86. package/dist/fleet/create-fleet.d.ts +2 -0
  87. package/dist/fleet/create-fleet.d.ts.map +1 -1
  88. package/dist/fleet/create-fleet.js +1 -0
  89. package/dist/fleet/create-fleet.js.map +1 -1
  90. package/dist/fleet/internal-fleet-client.d.ts +8 -1
  91. package/dist/fleet/internal-fleet-client.d.ts.map +1 -1
  92. package/dist/fleet/internal-fleet-client.js +31 -6
  93. package/dist/fleet/internal-fleet-client.js.map +1 -1
  94. package/dist/fleet/relay-fleet-client.d.ts +4 -1
  95. package/dist/fleet/relay-fleet-client.d.ts.map +1 -1
  96. package/dist/fleet/relay-fleet-client.js +142 -1
  97. package/dist/fleet/relay-fleet-client.js.map +1 -1
  98. package/dist/git/agent-worktree.d.ts +4 -1
  99. package/dist/git/agent-worktree.d.ts.map +1 -1
  100. package/dist/git/agent-worktree.js +151 -8
  101. package/dist/git/agent-worktree.js.map +1 -1
  102. package/dist/index.d.ts +32 -8
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +15 -3
  105. package/dist/index.js.map +1 -1
  106. package/dist/mount/local-mount-preflight.d.ts.map +1 -1
  107. package/dist/mount/local-mount-preflight.js +6 -2
  108. package/dist/mount/local-mount-preflight.js.map +1 -1
  109. package/dist/mount/relayfile-cloud-mount-client.d.ts +8 -2
  110. package/dist/mount/relayfile-cloud-mount-client.d.ts.map +1 -1
  111. package/dist/mount/relayfile-cloud-mount-client.js +11 -1
  112. package/dist/mount/relayfile-cloud-mount-client.js.map +1 -1
  113. package/dist/node/factory-node.d.ts +2 -0
  114. package/dist/node/factory-node.d.ts.map +1 -1
  115. package/dist/node/factory-node.js +107 -2
  116. package/dist/node/factory-node.js.map +1 -1
  117. package/dist/node/preview-process.d.ts +65 -0
  118. package/dist/node/preview-process.d.ts.map +1 -0
  119. package/dist/node/preview-process.js +431 -0
  120. package/dist/node/preview-process.js.map +1 -0
  121. package/dist/node/tailscale-preview.d.ts +45 -0
  122. package/dist/node/tailscale-preview.d.ts.map +1 -0
  123. package/dist/node/tailscale-preview.js +748 -0
  124. package/dist/node/tailscale-preview.js.map +1 -0
  125. package/dist/observability/events.d.ts +1838 -28
  126. package/dist/observability/events.d.ts.map +1 -1
  127. package/dist/observability/events.js +52 -0
  128. package/dist/observability/events.js.map +1 -1
  129. package/dist/orchestrator/factory.d.ts.map +1 -1
  130. package/dist/orchestrator/factory.js +1416 -78
  131. package/dist/orchestrator/factory.js.map +1 -1
  132. package/dist/orchestrator/index.d.ts +2 -1
  133. package/dist/orchestrator/index.d.ts.map +1 -1
  134. package/dist/orchestrator/index.js +1 -1
  135. package/dist/orchestrator/index.js.map +1 -1
  136. package/dist/orchestrator/reaper.d.ts +24 -0
  137. package/dist/orchestrator/reaper.d.ts.map +1 -1
  138. package/dist/orchestrator/reaper.js +117 -0
  139. package/dist/orchestrator/reaper.js.map +1 -1
  140. package/dist/ports/environment.d.ts +83 -0
  141. package/dist/ports/environment.d.ts.map +1 -0
  142. package/dist/ports/environment.js +2 -0
  143. package/dist/ports/environment.js.map +1 -0
  144. package/dist/ports/fleet.d.ts +68 -1
  145. package/dist/ports/fleet.d.ts.map +1 -1
  146. package/dist/ports/index.d.ts +3 -2
  147. package/dist/ports/index.d.ts.map +1 -1
  148. package/dist/ports/mount.d.ts +9 -0
  149. package/dist/ports/mount.d.ts.map +1 -1
  150. package/dist/ports/state.d.ts +17 -1
  151. package/dist/ports/state.d.ts.map +1 -1
  152. package/dist/ports/worktree.d.ts +14 -0
  153. package/dist/ports/worktree.d.ts.map +1 -1
  154. package/dist/state/file-state-store.js +28 -1
  155. package/dist/state/file-state-store.js.map +1 -1
  156. package/dist/subscriptions/index.d.ts +2 -0
  157. package/dist/subscriptions/index.d.ts.map +1 -1
  158. package/dist/subscriptions/index.js +1 -0
  159. package/dist/subscriptions/index.js.map +1 -1
  160. package/dist/subscriptions/resource-subscriptions.d.ts +77 -0
  161. package/dist/subscriptions/resource-subscriptions.d.ts.map +1 -0
  162. package/dist/subscriptions/resource-subscriptions.js +91 -0
  163. package/dist/subscriptions/resource-subscriptions.js.map +1 -0
  164. package/dist/testing/fakes.d.ts +9 -1
  165. package/dist/testing/fakes.d.ts.map +1 -1
  166. package/dist/testing/fakes.js +40 -0
  167. package/dist/testing/fakes.js.map +1 -1
  168. package/dist/triage/schema.d.ts +32 -32
  169. package/dist/types.d.ts +4 -1
  170. package/dist/types.d.ts.map +1 -1
  171. package/package.json +18 -4
  172. package/schemas/kubernetes-environment-stack.schema.json +86 -0
  173. package/schemas/verification-stack.schema.json +292 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-stack-descriptor.d.ts","sourceRoot":"","sources":["../../src/environments/verification-stack-descriptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,275 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, isAbsolute, relative, resolve, sep } from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { z } from 'zod';
5
+ import { ProcessCommandRunner } from './kubernetes-command.js';
6
+ export const DEFAULT_VERIFICATION_STACK_PATH = '.factory/verification-stack.yaml';
7
+ export const VERIFICATION_STACK_API_VERSION = 'factory.agentworkforce.dev/v1alpha1';
8
+ export const VERIFICATION_STACK_KIND = 'VerificationStack';
9
+ export const DEFAULT_VERIFICATION_E2E_IMAGE = 'node:22.17.0-alpine3.22@sha256:fc3e945f920b7e3000cd1af86c4ae406ec70c72f328b667baf0f3a8910d69eed';
10
+ /** File URL that works from both the source checkout and the published dist. */
11
+ export const VERIFICATION_STACK_JSON_SCHEMA_URL = new URL('../../schemas/verification-stack.schema.json', import.meta.url);
12
+ const dnsNameSchema = z.string().trim().min(1).max(63).regex(/^[a-z0-9](?:[-a-z0-9]*[a-z0-9])?$/u, 'must be a lowercase DNS label (letters, numbers, and hyphens)');
13
+ const relativePathSchema = z.string().trim().min(1).refine((value) => !isAbsolute(value) && !value.split(/[\\/]/u).includes('..'), 'must be a path inside the repository');
14
+ const durationFields = {
15
+ timeoutSeconds: z.number().int().min(1).max(3_600).default(120),
16
+ intervalSeconds: z.number().min(0.1).max(60).default(2),
17
+ };
18
+ const pinnedImageSchema = z.string().trim().regex(/@sha256:[a-f0-9]{64}$/u, 'must pin an OCI image by sha256 digest');
19
+ const httpProbeSchema = z.object({
20
+ type: z.literal('http'),
21
+ service: dnsNameSchema.optional(),
22
+ port: z.number().int().min(1).max(65_535),
23
+ path: z.string().startsWith('/').default('/'),
24
+ scheme: z.enum(['http', 'https']).default('http'),
25
+ expectedStatuses: z.array(z.number().int().min(100).max(599)).min(1).default([200]),
26
+ ...durationFields,
27
+ }).strict();
28
+ const tcpProbeSchema = z.object({
29
+ type: z.literal('tcp'),
30
+ service: dnsNameSchema.optional(),
31
+ port: z.number().int().min(1).max(65_535),
32
+ ...durationFields,
33
+ }).strict();
34
+ const execProbeSchema = z.object({
35
+ type: z.literal('exec'),
36
+ target: z.string().trim().min(1).optional(),
37
+ container: dnsNameSchema.optional(),
38
+ command: z.array(z.string().min(1)).min(1),
39
+ ...durationFields,
40
+ }).strict();
41
+ export const VerificationProbeSchema = z.discriminatedUnion('type', [
42
+ httpProbeSchema,
43
+ tcpProbeSchema,
44
+ execProbeSchema,
45
+ ]);
46
+ const helmSourceSchema = z.object({
47
+ type: z.literal('helm'),
48
+ chart: z.string().trim().min(1),
49
+ release: dnsNameSchema.optional(),
50
+ valuesFiles: z.array(relativePathSchema).default([]),
51
+ }).strict();
52
+ const kustomizeSourceSchema = z.object({
53
+ type: z.literal('kustomize'),
54
+ path: relativePathSchema,
55
+ }).strict();
56
+ const manifestsSourceSchema = z.object({
57
+ type: z.literal('manifests'),
58
+ paths: z.array(relativePathSchema).min(1),
59
+ }).strict();
60
+ const composeSourceSchema = z.object({
61
+ type: z.literal('docker-compose'),
62
+ path: relativePathSchema,
63
+ }).strict();
64
+ export const VerificationStackSourceSchema = z.discriminatedUnion('type', [
65
+ helmSourceSchema,
66
+ kustomizeSourceSchema,
67
+ manifestsSourceSchema,
68
+ composeSourceSchema,
69
+ ]);
70
+ const referenceSchema = z.object({
71
+ ref: z.string().trim().min(1),
72
+ optional: z.boolean().default(false),
73
+ }).strict();
74
+ const referenceDataKeySchema = z.string().min(1).max(253).regex(/^[A-Za-z0-9._-]+$/u, 'must contain only letters, numbers, dots, underscores, and hyphens');
75
+ const materializedReferenceSchema = z.object({
76
+ name: dnsNameSchema,
77
+ data: z.record(referenceDataKeySchema, referenceSchema).refine((data) => Object.keys(data).length > 0, 'must declare at least one referenced key'),
78
+ }).strict();
79
+ const serviceSchema = z.object({
80
+ name: dnsNameSchema,
81
+ workload: z.object({
82
+ kind: z.enum(['deployment', 'statefulset', 'daemonset']),
83
+ name: dnsNameSchema.optional(),
84
+ }).strict(),
85
+ readiness: VerificationProbeSchema,
86
+ health: VerificationProbeSchema.optional(),
87
+ }).strict();
88
+ const execSeedSchema = z.object({
89
+ type: z.literal('exec'),
90
+ name: dnsNameSchema,
91
+ service: dnsNameSchema,
92
+ container: dnsNameSchema.optional(),
93
+ command: z.array(z.string().min(1)).min(1),
94
+ timeoutSeconds: z.number().int().min(1).max(3_600).default(120),
95
+ }).strict();
96
+ const jobSeedSchema = z.object({
97
+ type: z.literal('job'),
98
+ name: dnsNameSchema,
99
+ manifest: relativePathSchema,
100
+ job: dnsNameSchema,
101
+ timeoutSeconds: z.number().int().min(1).max(3_600).default(120),
102
+ }).strict();
103
+ const seedSchema = z.discriminatedUnion('type', [execSeedSchema, jobSeedSchema]);
104
+ const endpointSchema = z.object({
105
+ name: dnsNameSchema,
106
+ service: dnsNameSchema,
107
+ port: z.number().int().min(1).max(65_535),
108
+ protocol: z.enum(['http', 'https']).default('http'),
109
+ path: z.string().startsWith('/').default('/'),
110
+ }).strict();
111
+ const verificationGateSchema = z.object({
112
+ environmentTtlSeconds: z.number().int().min(1).max(24 * 60 * 60).default(15 * 60),
113
+ e2e: z.object({
114
+ image: pinnedImageSchema.default(DEFAULT_VERIFICATION_E2E_IMAGE),
115
+ command: z.string().trim().min(1),
116
+ args: z.array(z.string()).default([]),
117
+ env: z.record(z.string()).default({}),
118
+ timeoutSeconds: z.number().int().min(1).max(60 * 60).default(5 * 60),
119
+ }).strict(),
120
+ load: z.object({
121
+ profile: relativePathSchema,
122
+ timeoutSeconds: z.number().int().min(1).max(60 * 60).default(5 * 60),
123
+ k6Image: pinnedImageSchema.optional(),
124
+ }).strict(),
125
+ overallTimeoutSeconds: z.number().int().min(1).max(2 * 60 * 60).default(15 * 60),
126
+ teardownTimeoutSeconds: z.number().int().min(1).max(30 * 60).default(2 * 60),
127
+ }).strict();
128
+ export const VerificationStackDescriptorSchema = z.object({
129
+ apiVersion: z.literal(VERIFICATION_STACK_API_VERSION),
130
+ kind: z.literal(VERIFICATION_STACK_KIND),
131
+ name: dnsNameSchema,
132
+ source: VerificationStackSourceSchema,
133
+ secrets: z.array(materializedReferenceSchema).default([]),
134
+ config: z.array(materializedReferenceSchema).default([]),
135
+ services: z.array(serviceSchema).min(1),
136
+ seeds: z.array(seedSchema).default([]),
137
+ endpoints: z.array(endpointSchema).default([]),
138
+ /** Required when this descriptor participates in Factory's live merge gate. */
139
+ verification: verificationGateSchema.optional(),
140
+ }).strict().superRefine((descriptor, context) => {
141
+ uniqueNames(descriptor.services, 'services', context);
142
+ uniqueNames(descriptor.secrets, 'secrets', context);
143
+ uniqueNames(descriptor.config, 'config', context);
144
+ uniqueNames(descriptor.seeds, 'seeds', context);
145
+ uniqueNames(descriptor.endpoints, 'endpoints', context);
146
+ const services = new Set(descriptor.services.map((service) => service.name));
147
+ descriptor.seeds.forEach((seed, index) => {
148
+ if (seed.type === 'exec' && !services.has(seed.service)) {
149
+ context.addIssue({
150
+ code: z.ZodIssueCode.custom,
151
+ path: ['seeds', index, 'service'],
152
+ message: `references undeclared service ${JSON.stringify(seed.service)}`,
153
+ });
154
+ }
155
+ });
156
+ descriptor.endpoints.forEach((endpoint, index) => {
157
+ if (!services.has(endpoint.service)) {
158
+ context.addIssue({
159
+ code: z.ZodIssueCode.custom,
160
+ path: ['endpoints', index, 'service'],
161
+ message: `references undeclared service ${JSON.stringify(endpoint.service)}`,
162
+ });
163
+ }
164
+ });
165
+ });
166
+ export class VerificationStackDescriptorError extends Error {
167
+ constructor(message, options) {
168
+ super(message, options);
169
+ this.name = 'VerificationStackDescriptorError';
170
+ }
171
+ }
172
+ export function loadVerificationStack(input, source = '<input>') {
173
+ const parsed = VerificationStackDescriptorSchema.safeParse(input);
174
+ if (parsed.success)
175
+ return parsed.data;
176
+ const details = parsed.error.issues.map((issue) => {
177
+ const path = issue.path.length ? issue.path.join('.') : '<root>';
178
+ return `- ${path}: ${issue.message}`;
179
+ }).join('\n');
180
+ throw new VerificationStackDescriptorError(`Invalid verification-stack descriptor ${source}:\n${details}`, { cause: parsed.error });
181
+ }
182
+ export function parseVerificationStack(text, source = '<input>') {
183
+ let input;
184
+ try {
185
+ input = parseYaml(text);
186
+ }
187
+ catch (cause) {
188
+ throw new VerificationStackDescriptorError(`Could not parse verification-stack descriptor ${source}: ${errorMessage(cause)}`, { cause });
189
+ }
190
+ return loadVerificationStack(input, source);
191
+ }
192
+ export async function loadVerificationStackFile(filePath) {
193
+ const absolutePath = resolve(filePath);
194
+ let text;
195
+ try {
196
+ text = await readFile(absolutePath, 'utf8');
197
+ }
198
+ catch (cause) {
199
+ throw new VerificationStackDescriptorError(`Could not read verification-stack descriptor ${absolutePath}: ${errorMessage(cause)}`, { cause });
200
+ }
201
+ return {
202
+ descriptor: parseVerificationStack(text, absolutePath),
203
+ descriptorPath: absolutePath,
204
+ rootDir: dirname(absolutePath),
205
+ };
206
+ }
207
+ /** Resolve the default or overridden descriptor from a checkout or an arbitrary Git ref. */
208
+ export async function resolveVerificationStackDescriptor(options) {
209
+ const repoPath = resolve(options.repoPath);
210
+ const descriptorPath = validateDescriptorPath(options.descriptorPath ?? DEFAULT_VERIFICATION_STACK_PATH);
211
+ if (!options.ref) {
212
+ const absolutePath = resolveInside(repoPath, descriptorPath);
213
+ const loaded = await loadVerificationStackFile(absolutePath);
214
+ return { ...loaded, rootDir: repoPath, descriptorPath };
215
+ }
216
+ const runner = options.commandRunner ?? new ProcessCommandRunner();
217
+ let commit;
218
+ try {
219
+ const result = await runner.run('git', [
220
+ '-C', repoPath, 'rev-parse', '--verify', `${options.ref}^{commit}`,
221
+ ]);
222
+ commit = result.stdout.trim();
223
+ }
224
+ catch (cause) {
225
+ throw new VerificationStackDescriptorError(`Could not resolve verification-stack Git ref ${JSON.stringify(options.ref)} in ${repoPath}: ${errorMessage(cause)}`, { cause });
226
+ }
227
+ try {
228
+ const result = await runner.run('git', ['-C', repoPath, 'show', `${commit}:${descriptorPath}`]);
229
+ return {
230
+ descriptor: parseVerificationStack(result.stdout, `${options.ref}:${descriptorPath}`),
231
+ descriptorPath,
232
+ rootDir: repoPath,
233
+ ref: commit,
234
+ };
235
+ }
236
+ catch (cause) {
237
+ if (cause instanceof VerificationStackDescriptorError)
238
+ throw cause;
239
+ throw new VerificationStackDescriptorError(`Could not read verification-stack descriptor ${descriptorPath} at ${JSON.stringify(options.ref)}: ${errorMessage(cause)}`, { cause });
240
+ }
241
+ }
242
+ function uniqueNames(values, field, context) {
243
+ const seen = new Set();
244
+ values.forEach((value, index) => {
245
+ if (seen.has(value.name)) {
246
+ context.addIssue({
247
+ code: z.ZodIssueCode.custom,
248
+ path: [field, index, 'name'],
249
+ message: `duplicate name ${JSON.stringify(value.name)}`,
250
+ });
251
+ }
252
+ seen.add(value.name);
253
+ });
254
+ }
255
+ function validateDescriptorPath(value) {
256
+ if (!value || isAbsolute(value) || value.split(/[\\/]/u).includes('..')) {
257
+ throw new VerificationStackDescriptorError(`verification-stack descriptor path must stay inside the repository: ${JSON.stringify(value)}`);
258
+ }
259
+ return value.replaceAll('\\', '/');
260
+ }
261
+ export function resolveVerificationStackAsset(rootDir, assetPath) {
262
+ return resolveInside(rootDir, assetPath);
263
+ }
264
+ function resolveInside(root, child) {
265
+ const absolute = resolve(root, child);
266
+ const fromRoot = relative(root, absolute);
267
+ if (fromRoot === '..' || fromRoot.startsWith(`..${sep}`) || isAbsolute(fromRoot)) {
268
+ throw new VerificationStackDescriptorError(`verification-stack asset path escapes the repository: ${JSON.stringify(child)}`);
269
+ }
270
+ return absolute;
271
+ }
272
+ function errorMessage(error) {
273
+ return error instanceof Error ? error.message : String(error);
274
+ }
275
+ //# sourceMappingURL=verification-stack-descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-stack-descriptor.js","sourceRoot":"","sources":["../../src/environments/verification-stack-descriptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { type LoadedVerificationStack } from './verification-stack-descriptor.js';
2
+ export interface ResolvedVerificationStack {
3
+ descriptorPath: string;
4
+ repositoryPath: string;
5
+ loaded: LoadedVerificationStack;
6
+ environmentTtlMs: number;
7
+ e2e: {
8
+ image: string;
9
+ command: string;
10
+ args: string[];
11
+ env: Record<string, string>;
12
+ timeoutMs: number;
13
+ };
14
+ load: {
15
+ profilePath: string;
16
+ timeoutMs: number;
17
+ k6Image?: string;
18
+ };
19
+ timeouts: {
20
+ overallMs: number;
21
+ teardownMs: number;
22
+ };
23
+ }
24
+ /**
25
+ * Resolve the repository-owned deployment descriptor and require the live-gate
26
+ * section used by the provision → deploy → E2E → load pipeline.
27
+ */
28
+ export declare function loadVerificationGateStack(repositoryPath: string, descriptorPath?: string): Promise<ResolvedVerificationStack>;
29
+ //# sourceMappingURL=verification-stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-stack.d.ts","sourceRoot":"","sources":["../../src/environments/verification-stack.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,oCAAoC,CAAA;AAE3C,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,uBAAuB,CAAA;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,EAAE,MAAM,EAAE,CAAA;QACd,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC3B,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;IACD,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,cAAc,EAAE,MAAM,EACtB,cAAc,SAAqC,GAClD,OAAO,CAAC,yBAAyB,CAAC,CAwCpC"}
@@ -0,0 +1,43 @@
1
+ import { resolve } from 'node:path';
2
+ import { resolveVerificationStackAsset, resolveVerificationStackDescriptor, } from './verification-stack-descriptor.js';
3
+ /**
4
+ * Resolve the repository-owned deployment descriptor and require the live-gate
5
+ * section used by the provision → deploy → E2E → load pipeline.
6
+ */
7
+ export async function loadVerificationGateStack(repositoryPath, descriptorPath = '.factory/verification-stack.yaml') {
8
+ const root = resolve(repositoryPath);
9
+ const loaded = await resolveVerificationStackDescriptor({
10
+ repoPath: root,
11
+ descriptorPath,
12
+ });
13
+ const gate = loaded.descriptor.verification;
14
+ if (!gate) {
15
+ throw new Error(`Verification stack ${loaded.descriptorPath} does not declare the required verification section`);
16
+ }
17
+ if (loaded.descriptor.endpoints.length === 0) {
18
+ throw new Error(`Verification stack ${loaded.descriptorPath} must expose at least one endpoint for E2E and load stages`);
19
+ }
20
+ return {
21
+ descriptorPath: loaded.descriptorPath,
22
+ repositoryPath: root,
23
+ loaded,
24
+ environmentTtlMs: gate.environmentTtlSeconds * 1_000,
25
+ e2e: {
26
+ image: gate.e2e.image,
27
+ command: gate.e2e.command,
28
+ args: gate.e2e.args,
29
+ env: gate.e2e.env,
30
+ timeoutMs: gate.e2e.timeoutSeconds * 1_000,
31
+ },
32
+ load: {
33
+ profilePath: resolveVerificationStackAsset(loaded.rootDir, gate.load.profile),
34
+ timeoutMs: gate.load.timeoutSeconds * 1_000,
35
+ ...(gate.load.k6Image ? { k6Image: gate.load.k6Image } : {}),
36
+ },
37
+ timeouts: {
38
+ overallMs: gate.overallTimeoutSeconds * 1_000,
39
+ teardownMs: gate.teardownTimeoutSeconds * 1_000,
40
+ },
41
+ };
42
+ }
43
+ //# sourceMappingURL=verification-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-stack.js","sourceRoot":"","sources":["../../src/environments/verification-stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GAEnC,MAAM,oCAAoC,CAAA;AAyB3C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,cAAsB,EACtB,cAAc,GAAG,kCAAkC;IAEnD,MAAM,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,MAAM,kCAAkC,CAAC;QACtD,QAAQ,EAAE,IAAI;QACd,cAAc;KACf,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,YAAY,CAAA;IAC3C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,cAAc,qDAAqD,CACjG,CAAA;IACH,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,CAAC,cAAc,4DAA4D,CACxG,CAAA;IACH,CAAC;IAED,OAAO;QACL,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,IAAI;QACpB,MAAM;QACN,gBAAgB,EAAE,IAAI,CAAC,qBAAqB,GAAG,KAAK;QACpD,GAAG,EAAE;YACH,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK;YACrB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO;YACzB,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG;YACjB,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,KAAK;SAC3C;QACD,IAAI,EAAE;YACJ,WAAW,EAAE,6BAA6B,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7E,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK;YAC3C,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,IAAI,CAAC,qBAAqB,GAAG,KAAK;YAC7C,UAAU,EAAE,IAAI,CAAC,sBAAsB,GAAG,KAAK;SAChD;KACF,CAAA;AACH,CAAC"}
@@ -0,0 +1,72 @@
1
+ import type { Logger } from '../ports/system.js';
2
+ import { type FeatureCriticality } from './validate.js';
3
+ export { FEATURE_MAP_MANIFEST_PATH } from './validate.js';
4
+ export type FeatureMapCriticality = FeatureCriticality;
5
+ export type FeatureMapVerifyTier = 1 | 2 | 3 | 4 | 5 | 6;
6
+ export interface FeatureMapFeature {
7
+ id: string;
8
+ name: string;
9
+ cli?: string;
10
+ api?: string;
11
+ description: string;
12
+ location: string;
13
+ verifyTier: FeatureMapVerifyTier;
14
+ criticality: FeatureMapCriticality;
15
+ }
16
+ export interface ParsedFeatureMapManifest {
17
+ version: string;
18
+ categoryIds: string[];
19
+ categoryProcedures: Record<string, string>;
20
+ features: FeatureMapFeature[];
21
+ }
22
+ export interface StaleFeatureLocation {
23
+ featureId: string;
24
+ location: string;
25
+ reason: 'missing' | 'outside-repo';
26
+ }
27
+ export interface FeatureMapGenerationOptions {
28
+ /** Hard wall-clock budget for discovery, inference, validation, and persistence. */
29
+ timeoutMs?: number;
30
+ /** Per-dispatch growth cap. */
31
+ maxNewEntries?: number;
32
+ /** Total generated plus hand-authored feature cap. */
33
+ maxManifestFeatures?: number;
34
+ /** Maximum touched files considered after glob expansion. */
35
+ maxTouchedFiles?: number;
36
+ /** Maximum directory entries inspected while expanding globs. */
37
+ maxScannedPaths?: number;
38
+ /** Files larger than this receive a path-derived fallback entry without being read. */
39
+ maxSourceBytes?: number;
40
+ /** Existing manifests larger than this are not read or changed. */
41
+ maxManifestBytes?: number;
42
+ /** Existing locations checked for drift on one invocation. */
43
+ maxStaleChecks?: number;
44
+ logger?: Pick<Logger, 'warn'>;
45
+ now?: () => Date;
46
+ }
47
+ export interface FeatureMapGenerationInput extends FeatureMapGenerationOptions {
48
+ repoPath: string;
49
+ touchedFileGlobs: readonly string[];
50
+ }
51
+ export type FeatureMapGenerationStatus = 'created' | 'updated' | 'unchanged' | 'failed' | 'timed-out';
52
+ export interface FeatureMapGenerationResult {
53
+ ok: boolean;
54
+ status: FeatureMapGenerationStatus;
55
+ manifestPath: string;
56
+ added: FeatureMapFeature[];
57
+ staleLocations: StaleFeatureLocation[];
58
+ touchedFiles: string[];
59
+ warnings: string[];
60
+ error?: string;
61
+ }
62
+ /**
63
+ * Lazily create or extend a repository's feature manifest from touched files.
64
+ *
65
+ * The function intentionally never rejects. Dispatch callers can record a
66
+ * failed/timed-out result and continue their primary work unchanged.
67
+ */
68
+ export declare function generateFeatureMap(input: FeatureMapGenerationInput): Promise<FeatureMapGenerationResult>;
69
+ export declare function generateFeatureMap(repoPath: string, touchedFileGlobs: readonly string[], options?: FeatureMapGenerationOptions): Promise<FeatureMapGenerationResult>;
70
+ /** Parse through the shared validator consumed by the feature guardian and CI. */
71
+ export declare function parseFeatureMapManifest(raw: string): ParsedFeatureMapManifest;
72
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/featuremap/generate.ts"],"names":[],"mappings":"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"}