@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,333 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { parseAllDocuments } from 'yaml';
4
+ import { DEFAULT_MANAGED_FIDELITY_CAVEAT, KubernetesGuardrailDefaultsSchema, } from './connection-registry.js';
5
+ import { createKubernetesGuardrailResources } from './kubernetes-provider.js';
6
+ export const FACTORY_ENVIRONMENT_MANAGED_LABEL = 'factory.agent-relay.dev/managed';
7
+ export const FACTORY_ENVIRONMENT_ID_LABEL = 'factory.agent-relay.dev/environment';
8
+ export const FACTORY_ENVIRONMENT_EXPIRES_ANNOTATION = 'factory.agent-relay.dev/expires-at';
9
+ export const FACTORY_ENVIRONMENT_REPOSITORY_ANNOTATION = 'factory.agent-relay.dev/repository';
10
+ const MAX_OUTPUT_BYTES = 1024 * 1024;
11
+ export function defaultKubectlEnvironmentRunner(executable = 'kubectl') {
12
+ return async (args, options = {}) => await new Promise((resolve, reject) => {
13
+ const child = spawn(executable, args, { stdio: ['pipe', 'pipe', 'pipe'] });
14
+ let stdout = '';
15
+ let stderr = '';
16
+ let settled = false;
17
+ let forceTimer;
18
+ const finish = (error) => {
19
+ if (settled)
20
+ return;
21
+ settled = true;
22
+ options.signal?.removeEventListener('abort', abort);
23
+ if (!error && forceTimer)
24
+ clearTimeout(forceTimer);
25
+ if (error)
26
+ reject(error);
27
+ else
28
+ resolve({ stdout, stderr });
29
+ };
30
+ const stop = () => {
31
+ if (child.exitCode !== null)
32
+ return;
33
+ child.kill('SIGTERM');
34
+ forceTimer = setTimeout(() => child.kill('SIGKILL'), 2_000);
35
+ forceTimer.unref();
36
+ };
37
+ const abort = () => {
38
+ stop();
39
+ finish(new VerificationEnvironmentAbortError());
40
+ };
41
+ options.signal?.addEventListener('abort', abort, { once: true });
42
+ if (options.signal?.aborted)
43
+ return abort();
44
+ child.stdout.setEncoding('utf8');
45
+ child.stderr.setEncoding('utf8');
46
+ child.stdout.on('data', (chunk) => { stdout = boundedAppend(stdout, chunk); });
47
+ child.stderr.on('data', (chunk) => { stderr = boundedAppend(stderr, chunk); });
48
+ child.once('error', (error) => finish(error));
49
+ child.once('close', (code) => {
50
+ if (forceTimer)
51
+ clearTimeout(forceTimer);
52
+ if (code === 0)
53
+ finish();
54
+ else
55
+ finish(new Error(`${executable} ${args.join(' ')} exited with ${code ?? 'no status'}: ${stderr.trim().slice(-4_000) || 'no stderr'}`));
56
+ });
57
+ if (!options.signal?.aborted)
58
+ child.stdin.end(options.input);
59
+ });
60
+ }
61
+ export class VerificationEnvironmentAbortError extends Error {
62
+ constructor() {
63
+ super('verification environment operation aborted');
64
+ this.name = 'VerificationEnvironmentAbortError';
65
+ }
66
+ }
67
+ export class KubectlEnvironmentProvider {
68
+ #executable;
69
+ #run;
70
+ #portForwards = new Map();
71
+ constructor(options = {}) {
72
+ this.#executable = options.executable ?? 'kubectl';
73
+ this.#run = options.runner ?? defaultKubectlEnvironmentRunner(this.#executable);
74
+ }
75
+ async provision(input) {
76
+ const context = contextArgs(input.kubeContext);
77
+ const listed = await this.#run([
78
+ ...context,
79
+ 'get', 'namespaces',
80
+ '--selector', `${FACTORY_ENVIRONMENT_MANAGED_LABEL}=true`,
81
+ '--output', 'json',
82
+ ], { signal: input.signal });
83
+ const active = activeNamespaceCount(listed.stdout);
84
+ if (active >= input.maxActiveEnvironments) {
85
+ throw new Error(`verification environment concurrency cap reached (${active}/${input.maxActiveEnvironments})`);
86
+ }
87
+ const id = dnsLabel(`${input.namespacePrefix}-${input.runId}`).slice(0, 63);
88
+ const expiresAt = new Date(Date.now() + input.ttlMs).toISOString();
89
+ const namespace = {
90
+ apiVersion: 'v1',
91
+ kind: 'Namespace',
92
+ metadata: {
93
+ name: id,
94
+ labels: {
95
+ [FACTORY_ENVIRONMENT_MANAGED_LABEL]: 'true',
96
+ [FACTORY_ENVIRONMENT_ID_LABEL]: dnsLabel(input.runId).slice(0, 63),
97
+ 'pod-security.kubernetes.io/enforce': 'restricted',
98
+ 'pod-security.kubernetes.io/enforce-version': 'latest',
99
+ 'pod-security.kubernetes.io/audit': 'restricted',
100
+ 'pod-security.kubernetes.io/warn': 'restricted',
101
+ },
102
+ annotations: {
103
+ [FACTORY_ENVIRONMENT_EXPIRES_ANNOTATION]: expiresAt,
104
+ [FACTORY_ENVIRONMENT_REPOSITORY_ANNOTATION]: input.repository,
105
+ },
106
+ },
107
+ };
108
+ try {
109
+ // A collision must fail; applying here could adopt and relabel an
110
+ // unrelated namespace selected by a caller-controlled run id.
111
+ await this.#run([...context, 'create', '--filename', '-'], {
112
+ input: JSON.stringify(namespace),
113
+ signal: input.signal,
114
+ });
115
+ const connection = verificationKubernetesConnection({
116
+ context: input.kubeContext,
117
+ repository: input.repository,
118
+ });
119
+ const guardrails = createKubernetesGuardrailResources(id, connection, KubernetesGuardrailDefaultsSchema.parse({}));
120
+ await this.#run([
121
+ ...context,
122
+ '--namespace', id,
123
+ 'apply', '--filename', '-',
124
+ ], {
125
+ input: JSON.stringify({ apiVersion: 'v1', kind: 'List', items: guardrails }),
126
+ signal: input.signal,
127
+ });
128
+ }
129
+ catch (error) {
130
+ await this.#run([
131
+ ...context,
132
+ 'delete', 'namespace', id,
133
+ '--ignore-not-found=true',
134
+ '--wait=false',
135
+ ]).catch(() => undefined);
136
+ throw error;
137
+ }
138
+ return {
139
+ id,
140
+ namespace: id,
141
+ endpoints: {},
142
+ internalEndpoints: {},
143
+ ...(input.kubeContext ? { kubeContext: input.kubeContext } : {}),
144
+ expiresAt,
145
+ };
146
+ }
147
+ async deploy(environment, input) {
148
+ const resources = (await Promise.all(input.manifests.map(async ({ path }) => resourcesFromManifest(path, environment.namespace)))).flat();
149
+ await this.#run([
150
+ ...contextArgs(environment.kubeContext),
151
+ '--namespace', environment.namespace,
152
+ 'apply', '--filename', '-',
153
+ ], {
154
+ input: JSON.stringify({ apiVersion: 'v1', kind: 'List', items: resources }),
155
+ signal: input.signal,
156
+ });
157
+ for (const check of input.readiness) {
158
+ await this.#run([
159
+ ...contextArgs(environment.kubeContext),
160
+ '--namespace', environment.namespace,
161
+ 'wait', check.resource,
162
+ `--for=condition=${check.condition}`,
163
+ `--timeout=${Math.max(1, Math.ceil(check.timeoutMs / 1_000))}s`,
164
+ ], { signal: input.signal });
165
+ }
166
+ const endpoints = {};
167
+ const internalEndpoints = {};
168
+ for (const [name, endpoint] of Object.entries(input.endpoints)) {
169
+ const suffix = normalizeEndpointPath(endpoint.path);
170
+ internalEndpoints[name] = `${endpoint.scheme}://${endpoint.service}.${environment.namespace}.svc.cluster.local:${endpoint.port}${suffix}`;
171
+ endpoints[name] = endpoint.portForward
172
+ ? `${endpoint.scheme}://127.0.0.1:${await this.#startPortForward(environment, endpoint.service, endpoint.port, input.signal)}${suffix}`
173
+ : internalEndpoints[name];
174
+ }
175
+ return { ...environment, endpoints, internalEndpoints };
176
+ }
177
+ async teardown(environment, options = {}) {
178
+ this.#stopPortForwards(environment.id);
179
+ await this.#run([
180
+ ...contextArgs(environment.kubeContext),
181
+ 'delete', 'namespace', environment.namespace,
182
+ '--ignore-not-found=true',
183
+ '--wait=true',
184
+ ], { signal: options.signal });
185
+ }
186
+ async #startPortForward(environment, service, port, signal) {
187
+ return await new Promise((resolve, reject) => {
188
+ const child = spawn(this.#executable, [
189
+ ...contextArgs(environment.kubeContext),
190
+ '--namespace', environment.namespace,
191
+ 'port-forward', `service/${service}`, `:${port}`,
192
+ '--address', '127.0.0.1',
193
+ ], { stdio: ['pipe', 'pipe', 'pipe'] });
194
+ const forwards = this.#portForwards.get(environment.id) ?? [];
195
+ forwards.push(child);
196
+ this.#portForwards.set(environment.id, forwards);
197
+ let output = '';
198
+ let settled = false;
199
+ const timeout = setTimeout(() => finish(new Error(`timed out starting port-forward for service/${service}`)), 30_000);
200
+ const abort = () => finish(new VerificationEnvironmentAbortError());
201
+ const finish = (error, localPort) => {
202
+ if (settled)
203
+ return;
204
+ settled = true;
205
+ clearTimeout(timeout);
206
+ signal?.removeEventListener('abort', abort);
207
+ if (error) {
208
+ stopChildProcess(child);
209
+ reject(error);
210
+ }
211
+ else {
212
+ resolve(localPort);
213
+ }
214
+ };
215
+ const inspect = (chunk) => {
216
+ if (settled)
217
+ return;
218
+ output = boundedAppend(output, chunk.toString());
219
+ const match = /Forwarding from 127\.0\.0\.1:(\d+)\s+->/u.exec(output);
220
+ if (match) {
221
+ output = '';
222
+ finish(undefined, Number(match[1]));
223
+ }
224
+ };
225
+ child.stdout.on('data', inspect);
226
+ child.stderr.on('data', inspect);
227
+ child.once('error', (error) => finish(error));
228
+ child.once('close', (code) => {
229
+ if (!settled)
230
+ finish(new Error(`port-forward for service/${service} exited with ${code ?? 'no status'}: ${output.trim().slice(-4_000)}`));
231
+ });
232
+ signal?.addEventListener('abort', abort, { once: true });
233
+ if (signal?.aborted)
234
+ abort();
235
+ });
236
+ }
237
+ #stopPortForwards(environmentId) {
238
+ for (const child of this.#portForwards.get(environmentId) ?? []) {
239
+ stopChildProcess(child);
240
+ }
241
+ this.#portForwards.delete(environmentId);
242
+ }
243
+ }
244
+ export function verificationKubernetesConnection(input) {
245
+ return {
246
+ id: 'factory-verification-gate',
247
+ target: 'managed',
248
+ customers: ['*'],
249
+ repositories: [input.repository],
250
+ credentialKind: 'kubeconfig',
251
+ kubeconfigPath: input.kubeconfig ?? '',
252
+ ...(input.context ? { context: input.context } : {}),
253
+ protectedNamespaces: ['default', 'prod', 'production'],
254
+ allowClusterScopedResources: false,
255
+ allowedClusterScopedKinds: [],
256
+ nodeSelector: {},
257
+ tolerations: [],
258
+ fidelityCaveat: DEFAULT_MANAGED_FIDELITY_CAVEAT,
259
+ };
260
+ }
261
+ function stopChildProcess(child) {
262
+ if (child.exitCode !== null)
263
+ return;
264
+ child.kill('SIGTERM');
265
+ const force = setTimeout(() => child.kill('SIGKILL'), 2_000);
266
+ force.unref();
267
+ child.once('close', () => clearTimeout(force));
268
+ }
269
+ async function resourcesFromManifest(path, namespace) {
270
+ const documents = parseAllDocuments(await readFile(path, 'utf8'));
271
+ const resources = [];
272
+ for (const document of documents) {
273
+ if (document.errors.length > 0) {
274
+ throw new Error(`Invalid Kubernetes manifest ${path}: ${document.errors.map((error) => error.message).join('; ')}`);
275
+ }
276
+ const value = document.toJSON();
277
+ if (value === null || value === undefined)
278
+ continue;
279
+ for (const resource of flattenResource(value)) {
280
+ const kind = typeof resource.kind === 'string' ? resource.kind : '';
281
+ if (!kind || typeof resource.apiVersion !== 'string') {
282
+ throw new Error(`Kubernetes manifest ${path} contains a resource without apiVersion/kind`);
283
+ }
284
+ if (CLUSTER_SCOPED_KINDS.has(kind)) {
285
+ throw new Error(`Verification manifests may not create cluster-scoped ${kind} resources`);
286
+ }
287
+ const metadata = asRecord(resource.metadata);
288
+ resource.metadata = { ...metadata, namespace };
289
+ resources.push(resource);
290
+ }
291
+ }
292
+ return resources;
293
+ }
294
+ function flattenResource(value) {
295
+ const resource = asRecord(value);
296
+ if (resource.kind === 'List' && Array.isArray(resource.items)) {
297
+ return resource.items.flatMap(flattenResource);
298
+ }
299
+ return [resource];
300
+ }
301
+ const CLUSTER_SCOPED_KINDS = new Set([
302
+ 'APIService',
303
+ 'ClusterRole',
304
+ 'ClusterRoleBinding',
305
+ 'CustomResourceDefinition',
306
+ 'MutatingWebhookConfiguration',
307
+ 'Namespace',
308
+ 'Node',
309
+ 'PersistentVolume',
310
+ 'PriorityClass',
311
+ 'StorageClass',
312
+ 'ValidatingWebhookConfiguration',
313
+ ]);
314
+ function activeNamespaceCount(stdout) {
315
+ try {
316
+ const value = JSON.parse(stdout);
317
+ return (value.items ?? []).filter((item) => !item.metadata?.deletionTimestamp).length;
318
+ }
319
+ catch (error) {
320
+ throw new Error(`kubectl returned invalid namespace inventory: ${error instanceof Error ? error.message : String(error)}`);
321
+ }
322
+ }
323
+ const contextArgs = (context) => context ? ['--context', context] : [];
324
+ const normalizeEndpointPath = (path) => !path ? '' : path.startsWith('/') ? path : `/${path}`;
325
+ const dnsLabel = (value) => value
326
+ .toLowerCase()
327
+ .replace(/[^a-z0-9-]+/gu, '-')
328
+ .replace(/^-+|-+$/gu, '') || 'verification';
329
+ const boundedAppend = (current, chunk) => `${current}${chunk}`.slice(-MAX_OUTPUT_BYTES);
330
+ const asRecord = (value) => value !== null && typeof value === 'object' && !Array.isArray(value)
331
+ ? value
332
+ : {};
333
+ //# sourceMappingURL=kubernetes-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes-environment.js","sourceRoot":"","sources":["../../src/environments/kubernetes-environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import type { Environment, EnvironmentProvider, EnvironmentStatus, ProvisionEnvironmentSpec } from '../ports/environment.js';
2
+ import type { Logger } from '../ports/system.js';
3
+ import { KubernetesConnectionRegistry, type KubernetesGuardrailDefaults, type ResolvedKubernetesConnection } from './connection-registry.js';
4
+ import { type KubernetesClient, type KubernetesResource } from './kubernetes-client.js';
5
+ import { type KubernetesStackDescriptorInput } from './stack-descriptor.js';
6
+ export declare const KUBERNETES_MANAGED_BY_LABEL = "app.kubernetes.io/managed-by";
7
+ export declare const KUBERNETES_ENVIRONMENT_ID_LABEL = "factory.agentworkforce.dev/environment-id";
8
+ export declare const KUBERNETES_OWNER_ID_LABEL = "factory.agentworkforce.dev/owner-id";
9
+ export declare const KUBERNETES_EXPIRES_AT_LABEL = "factory.agentworkforce.dev/expires-at";
10
+ export declare const KUBERNETES_OWNER_ID_ANNOTATION = "factory.agentworkforce.dev/owner-id";
11
+ export declare const KUBERNETES_CUSTOMER_ID_ANNOTATION = "factory.agentworkforce.dev/customer-id";
12
+ export declare const KUBERNETES_REPOSITORY_ANNOTATION = "factory.agentworkforce.dev/repository";
13
+ export declare const KUBERNETES_CONNECTION_ID_ANNOTATION = "factory.agentworkforce.dev/connection-id";
14
+ export declare const KUBERNETES_TARGET_ANNOTATION = "factory.agentworkforce.dev/target";
15
+ export declare const KUBERNETES_CREATED_AT_ANNOTATION = "factory.agentworkforce.dev/created-at";
16
+ export declare const KUBERNETES_ENDPOINTS_ANNOTATION = "factory.agentworkforce.dev/endpoints";
17
+ export declare const KUBERNETES_CLUSTER_RESOURCES_ANNOTATION = "factory.agentworkforce.dev/cluster-resources";
18
+ export interface KubernetesStackProvisionInput {
19
+ descriptor: KubernetesStackDescriptorInput;
20
+ repoRoot: string;
21
+ }
22
+ export interface KubernetesProvisionSpec extends Omit<ProvisionEnvironmentSpec, 'stack'> {
23
+ target?: 'byoc' | 'managed';
24
+ stack: KubernetesStackProvisionInput;
25
+ }
26
+ export interface KubernetesStackSecretResolver {
27
+ resolve(reference: string): Promise<string>;
28
+ }
29
+ export declare class EnvironmentKubernetesStackSecretResolver implements KubernetesStackSecretResolver {
30
+ #private;
31
+ constructor(env?: NodeJS.ProcessEnv);
32
+ resolve(reference: string): Promise<string>;
33
+ }
34
+ export interface KubernetesEnvironmentProviderOptions {
35
+ registry: KubernetesConnectionRegistry;
36
+ client?: KubernetesClient;
37
+ secretResolver?: KubernetesStackSecretResolver;
38
+ defaults?: Partial<KubernetesGuardrailDefaults>;
39
+ now?: () => Date;
40
+ randomId?: () => string;
41
+ logger?: Logger;
42
+ ownerIsAlive?: (ownerId: string) => Promise<boolean | undefined>;
43
+ }
44
+ export interface KubernetesReapReport {
45
+ reaped: Array<{
46
+ id: string;
47
+ connectionId: string;
48
+ reason: 'ttl-expired' | 'owner-gone';
49
+ }>;
50
+ skipped: Array<{
51
+ id?: string;
52
+ connectionId: string;
53
+ reason: string;
54
+ }>;
55
+ }
56
+ /** Namespace-isolated Kubernetes provider for customer EKS and managed fallback clusters. */
57
+ export declare class KubernetesEnvironmentProvider implements EnvironmentProvider {
58
+ #private;
59
+ constructor(options: KubernetesEnvironmentProviderOptions);
60
+ provision(spec: KubernetesProvisionSpec): Promise<Environment>;
61
+ status(id: string): Promise<EnvironmentStatus>;
62
+ endpoints(id: string): Promise<Record<string, string>>;
63
+ destroy(id: string): Promise<void>;
64
+ reap(): Promise<KubernetesReapReport>;
65
+ }
66
+ export declare class KubernetesEnvironmentReaper {
67
+ #private;
68
+ constructor(provider: KubernetesEnvironmentProvider, options?: {
69
+ intervalMs?: number;
70
+ });
71
+ start(): void;
72
+ stop(): Promise<void>;
73
+ }
74
+ interface GuardrailResourceOptions {
75
+ namespace: string;
76
+ environmentId: string;
77
+ connection: ResolvedKubernetesConnection;
78
+ descriptorAllowsClusterScope: boolean;
79
+ }
80
+ export declare function enforceKubernetesResourceSafety(input: KubernetesResource[], options: GuardrailResourceOptions): KubernetesResource[];
81
+ export declare function createKubernetesGuardrailResources(namespace: string, connection: ResolvedKubernetesConnection, defaultsInput: KubernetesGuardrailDefaults): KubernetesResource[];
82
+ export {};
83
+ //# sourceMappingURL=kubernetes-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes-provider.d.ts","sourceRoot":"","sources":["../../src/environments/kubernetes-provider.ts"],"names":[],"mappings":"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"}