@agent-relay/factory 0.1.50 → 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 +1317 -61
  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
@@ -99,11 +99,12 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
99
99
  repo: string;
100
100
  }[];
101
101
  clonePaths: Record<string, string>;
102
+ default?: string | undefined;
102
103
  org?: string | undefined;
103
104
  names?: string[] | undefined;
104
- default?: string | undefined;
105
105
  cloneRoot?: string | undefined;
106
106
  }, {
107
+ default?: string | undefined;
107
108
  org?: string | undefined;
108
109
  names?: string[] | undefined;
109
110
  overrides?: Record<string, string> | undefined;
@@ -113,7 +114,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
113
114
  pattern: string;
114
115
  repo: string;
115
116
  }[] | undefined;
116
- default?: string | undefined;
117
117
  cloneRoot?: string | undefined;
118
118
  clonePaths?: Record<string, string> | undefined;
119
119
  }>;
@@ -197,6 +197,91 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
197
197
  batchSize?: number | undefined;
198
198
  requestTimeoutMs?: number | undefined;
199
199
  }>>;
200
+ preview: z.ZodOptional<z.ZodEffects<z.ZodObject<{
201
+ provider: z.ZodDefault<z.ZodLiteral<"tailscale-serve">>;
202
+ access: z.ZodDefault<z.ZodLiteral<"tailnet">>;
203
+ services: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
204
+ /** Local HTTP port the repository's development server listens on. */
205
+ port: z.ZodNumber;
206
+ /** Consecutive node-local ports Factory may allocate for concurrent issues. */
207
+ portSpan: z.ZodOptional<z.ZodNumber>;
208
+ /** Optional stable tailnet HTTPS port; otherwise Factory allocates one. */
209
+ httpsPort: z.ZodOptional<z.ZodNumber>;
210
+ /** Foreground command Factory supervises for the issue-lifetime preview. */
211
+ startCommand: z.ZodString;
212
+ }, "strip", z.ZodTypeAny, {
213
+ port: number;
214
+ startCommand: string;
215
+ portSpan?: number | undefined;
216
+ httpsPort?: number | undefined;
217
+ }, {
218
+ port: number;
219
+ startCommand: string;
220
+ portSpan?: number | undefined;
221
+ httpsPort?: number | undefined;
222
+ }>, {
223
+ port: number;
224
+ startCommand: string;
225
+ portSpan?: number | undefined;
226
+ httpsPort?: number | undefined;
227
+ }, {
228
+ port: number;
229
+ startCommand: string;
230
+ portSpan?: number | undefined;
231
+ httpsPort?: number | undefined;
232
+ }>>>;
233
+ tailscaleBinary: z.ZodDefault<z.ZodString>;
234
+ registryPath: z.ZodDefault<z.ZodString>;
235
+ httpsPortRange: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
236
+ }, "strip", z.ZodTypeAny, {
237
+ registryPath: string;
238
+ provider: "tailscale-serve";
239
+ access: "tailnet";
240
+ services: Record<string, {
241
+ port: number;
242
+ startCommand: string;
243
+ portSpan?: number | undefined;
244
+ httpsPort?: number | undefined;
245
+ }>;
246
+ tailscaleBinary: string;
247
+ httpsPortRange: [number, number];
248
+ }, {
249
+ registryPath?: string | undefined;
250
+ provider?: "tailscale-serve" | undefined;
251
+ access?: "tailnet" | undefined;
252
+ services?: Record<string, {
253
+ port: number;
254
+ startCommand: string;
255
+ portSpan?: number | undefined;
256
+ httpsPort?: number | undefined;
257
+ }> | undefined;
258
+ tailscaleBinary?: string | undefined;
259
+ httpsPortRange?: [number, number] | undefined;
260
+ }>, {
261
+ registryPath: string;
262
+ provider: "tailscale-serve";
263
+ access: "tailnet";
264
+ services: Record<string, {
265
+ port: number;
266
+ startCommand: string;
267
+ portSpan?: number | undefined;
268
+ httpsPort?: number | undefined;
269
+ }>;
270
+ tailscaleBinary: string;
271
+ httpsPortRange: [number, number];
272
+ }, {
273
+ registryPath?: string | undefined;
274
+ provider?: "tailscale-serve" | undefined;
275
+ access?: "tailnet" | undefined;
276
+ services?: Record<string, {
277
+ port: number;
278
+ startCommand: string;
279
+ portSpan?: number | undefined;
280
+ httpsPort?: number | undefined;
281
+ }> | undefined;
282
+ tailscaleBinary?: string | undefined;
283
+ httpsPortRange?: [number, number] | undefined;
284
+ }>>;
200
285
  github: z.ZodDefault<z.ZodObject<{
201
286
  identity: z.ZodDefault<z.ZodEnum<["app", "user", "auto"]>>;
202
287
  }, "strip", z.ZodTypeAny, {
@@ -204,6 +289,29 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
204
289
  }, {
205
290
  identity?: "app" | "user" | "auto" | undefined;
206
291
  }>>;
292
+ verification: z.ZodDefault<z.ZodObject<{
293
+ /** Default-on: an auto-merge must have a green live-stack verification verdict. */
294
+ enabled: z.ZodDefault<z.ZodBoolean>;
295
+ descriptorPath: z.ZodDefault<z.ZodString>;
296
+ maxConcurrentEnvironments: z.ZodDefault<z.ZodNumber>;
297
+ maxRunTimeoutMs: z.ZodDefault<z.ZodNumber>;
298
+ maxEnvironmentTtlMs: z.ZodDefault<z.ZodNumber>;
299
+ maxTeardownTimeoutMs: z.ZodDefault<z.ZodNumber>;
300
+ }, "strict", z.ZodTypeAny, {
301
+ enabled: boolean;
302
+ descriptorPath: string;
303
+ maxConcurrentEnvironments: number;
304
+ maxRunTimeoutMs: number;
305
+ maxEnvironmentTtlMs: number;
306
+ maxTeardownTimeoutMs: number;
307
+ }, {
308
+ enabled?: boolean | undefined;
309
+ descriptorPath?: string | undefined;
310
+ maxConcurrentEnvironments?: number | undefined;
311
+ maxRunTimeoutMs?: number | undefined;
312
+ maxEnvironmentTtlMs?: number | undefined;
313
+ maxTeardownTimeoutMs?: number | undefined;
314
+ }>>;
207
315
  terminalState: z.ZodDefault<z.ZodEnum<["done", "human-review"]>>;
208
316
  linear: z.ZodDefault<z.ZodObject<{
209
317
  states: z.ZodDefault<z.ZodDefault<z.ZodObject<{
@@ -310,6 +418,427 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
310
418
  requireLabel?: string | undefined;
311
419
  requireTeamKey?: string | undefined;
312
420
  }>>;
421
+ environments: z.ZodDefault<z.ZodObject<{
422
+ kubernetes: z.ZodOptional<z.ZodDefault<z.ZodEffects<z.ZodObject<{
423
+ connections: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodObject<{
424
+ id: z.ZodString;
425
+ target: z.ZodDefault<z.ZodEnum<["byoc", "managed"]>>;
426
+ customers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
427
+ repositories: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
428
+ credential: z.ZodObject<{
429
+ kind: z.ZodEnum<["kubeconfig", "irsa"]>;
430
+ secretRef: z.ZodEffects<z.ZodString, string, string>;
431
+ }, "strict", z.ZodTypeAny, {
432
+ kind: "kubeconfig" | "irsa";
433
+ secretRef: string;
434
+ }, {
435
+ kind: "kubeconfig" | "irsa";
436
+ secretRef: string;
437
+ }>;
438
+ context: z.ZodOptional<z.ZodString>;
439
+ protectedNamespaces: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
440
+ allowClusterScopedResources: z.ZodDefault<z.ZodBoolean>;
441
+ allowedClusterScopedKinds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
442
+ nodeSelector: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
443
+ tolerations: z.ZodDefault<z.ZodArray<z.ZodObject<{
444
+ key: z.ZodOptional<z.ZodString>;
445
+ operator: z.ZodOptional<z.ZodEnum<["Exists", "Equal"]>>;
446
+ value: z.ZodOptional<z.ZodString>;
447
+ effect: z.ZodOptional<z.ZodEnum<["NoSchedule", "PreferNoSchedule", "NoExecute"]>>;
448
+ tolerationSeconds: z.ZodOptional<z.ZodNumber>;
449
+ }, "strict", z.ZodTypeAny, {
450
+ key?: string | undefined;
451
+ operator?: "Exists" | "Equal" | undefined;
452
+ value?: string | undefined;
453
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
454
+ tolerationSeconds?: number | undefined;
455
+ }, {
456
+ key?: string | undefined;
457
+ operator?: "Exists" | "Equal" | undefined;
458
+ value?: string | undefined;
459
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
460
+ tolerationSeconds?: number | undefined;
461
+ }>, "many">>;
462
+ fidelityCaveat: z.ZodOptional<z.ZodString>;
463
+ }, "strict", z.ZodTypeAny, {
464
+ id: string;
465
+ target: "byoc" | "managed";
466
+ customers: string[];
467
+ repositories: string[];
468
+ credential: {
469
+ kind: "kubeconfig" | "irsa";
470
+ secretRef: string;
471
+ };
472
+ protectedNamespaces: string[];
473
+ allowClusterScopedResources: boolean;
474
+ allowedClusterScopedKinds: string[];
475
+ nodeSelector: Record<string, string>;
476
+ tolerations: {
477
+ key?: string | undefined;
478
+ operator?: "Exists" | "Equal" | undefined;
479
+ value?: string | undefined;
480
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
481
+ tolerationSeconds?: number | undefined;
482
+ }[];
483
+ context?: string | undefined;
484
+ fidelityCaveat?: string | undefined;
485
+ }, {
486
+ id: string;
487
+ credential: {
488
+ kind: "kubeconfig" | "irsa";
489
+ secretRef: string;
490
+ };
491
+ target?: "byoc" | "managed" | undefined;
492
+ customers?: string[] | undefined;
493
+ repositories?: string[] | undefined;
494
+ context?: string | undefined;
495
+ protectedNamespaces?: string[] | undefined;
496
+ allowClusterScopedResources?: boolean | undefined;
497
+ allowedClusterScopedKinds?: string[] | undefined;
498
+ nodeSelector?: Record<string, string> | undefined;
499
+ tolerations?: {
500
+ key?: string | undefined;
501
+ operator?: "Exists" | "Equal" | undefined;
502
+ value?: string | undefined;
503
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
504
+ tolerationSeconds?: number | undefined;
505
+ }[] | undefined;
506
+ fidelityCaveat?: string | undefined;
507
+ }>, {
508
+ id: string;
509
+ target: "byoc" | "managed";
510
+ customers: string[];
511
+ repositories: string[];
512
+ credential: {
513
+ kind: "kubeconfig" | "irsa";
514
+ secretRef: string;
515
+ };
516
+ protectedNamespaces: string[];
517
+ allowClusterScopedResources: boolean;
518
+ allowedClusterScopedKinds: string[];
519
+ nodeSelector: Record<string, string>;
520
+ tolerations: {
521
+ key?: string | undefined;
522
+ operator?: "Exists" | "Equal" | undefined;
523
+ value?: string | undefined;
524
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
525
+ tolerationSeconds?: number | undefined;
526
+ }[];
527
+ context?: string | undefined;
528
+ fidelityCaveat?: string | undefined;
529
+ }, {
530
+ id: string;
531
+ credential: {
532
+ kind: "kubeconfig" | "irsa";
533
+ secretRef: string;
534
+ };
535
+ target?: "byoc" | "managed" | undefined;
536
+ customers?: string[] | undefined;
537
+ repositories?: string[] | undefined;
538
+ context?: string | undefined;
539
+ protectedNamespaces?: string[] | undefined;
540
+ allowClusterScopedResources?: boolean | undefined;
541
+ allowedClusterScopedKinds?: string[] | undefined;
542
+ nodeSelector?: Record<string, string> | undefined;
543
+ tolerations?: {
544
+ key?: string | undefined;
545
+ operator?: "Exists" | "Equal" | undefined;
546
+ value?: string | undefined;
547
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
548
+ tolerationSeconds?: number | undefined;
549
+ }[] | undefined;
550
+ fidelityCaveat?: string | undefined;
551
+ }>, {
552
+ id: string;
553
+ target: "byoc" | "managed";
554
+ customers: string[];
555
+ repositories: string[];
556
+ credential: {
557
+ kind: "kubeconfig" | "irsa";
558
+ secretRef: string;
559
+ };
560
+ protectedNamespaces: string[];
561
+ allowClusterScopedResources: boolean;
562
+ allowedClusterScopedKinds: string[];
563
+ nodeSelector: Record<string, string>;
564
+ tolerations: {
565
+ key?: string | undefined;
566
+ operator?: "Exists" | "Equal" | undefined;
567
+ value?: string | undefined;
568
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
569
+ tolerationSeconds?: number | undefined;
570
+ }[];
571
+ context?: string | undefined;
572
+ fidelityCaveat?: string | undefined;
573
+ }, {
574
+ id: string;
575
+ credential: {
576
+ kind: "kubeconfig" | "irsa";
577
+ secretRef: string;
578
+ };
579
+ target?: "byoc" | "managed" | undefined;
580
+ customers?: string[] | undefined;
581
+ repositories?: string[] | undefined;
582
+ context?: string | undefined;
583
+ protectedNamespaces?: string[] | undefined;
584
+ allowClusterScopedResources?: boolean | undefined;
585
+ allowedClusterScopedKinds?: string[] | undefined;
586
+ nodeSelector?: Record<string, string> | undefined;
587
+ tolerations?: {
588
+ key?: string | undefined;
589
+ operator?: "Exists" | "Equal" | undefined;
590
+ value?: string | undefined;
591
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
592
+ tolerationSeconds?: number | undefined;
593
+ }[] | undefined;
594
+ fidelityCaveat?: string | undefined;
595
+ }>, "many">>;
596
+ defaults: z.ZodDefault<z.ZodObject<{
597
+ ttlMs: z.ZodDefault<z.ZodNumber>;
598
+ readinessTimeoutMs: z.ZodDefault<z.ZodNumber>;
599
+ resourceQuota: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
600
+ limitRange: z.ZodDefault<z.ZodObject<{
601
+ default: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
602
+ defaultRequest: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
603
+ max: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
604
+ }, "strip", z.ZodTypeAny, {
605
+ default: Record<string, string>;
606
+ max: Record<string, string>;
607
+ defaultRequest: Record<string, string>;
608
+ }, {
609
+ default?: Record<string, string> | undefined;
610
+ max?: Record<string, string> | undefined;
611
+ defaultRequest?: Record<string, string> | undefined;
612
+ }>>;
613
+ }, "strict", z.ZodTypeAny, {
614
+ ttlMs: number;
615
+ readinessTimeoutMs: number;
616
+ resourceQuota: Record<string, string>;
617
+ limitRange: {
618
+ default: Record<string, string>;
619
+ max: Record<string, string>;
620
+ defaultRequest: Record<string, string>;
621
+ };
622
+ }, {
623
+ ttlMs?: number | undefined;
624
+ readinessTimeoutMs?: number | undefined;
625
+ resourceQuota?: Record<string, string> | undefined;
626
+ limitRange?: {
627
+ default?: Record<string, string> | undefined;
628
+ max?: Record<string, string> | undefined;
629
+ defaultRequest?: Record<string, string> | undefined;
630
+ } | undefined;
631
+ }>>;
632
+ }, "strict", z.ZodTypeAny, {
633
+ connections: {
634
+ id: string;
635
+ target: "byoc" | "managed";
636
+ customers: string[];
637
+ repositories: string[];
638
+ credential: {
639
+ kind: "kubeconfig" | "irsa";
640
+ secretRef: string;
641
+ };
642
+ protectedNamespaces: string[];
643
+ allowClusterScopedResources: boolean;
644
+ allowedClusterScopedKinds: string[];
645
+ nodeSelector: Record<string, string>;
646
+ tolerations: {
647
+ key?: string | undefined;
648
+ operator?: "Exists" | "Equal" | undefined;
649
+ value?: string | undefined;
650
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
651
+ tolerationSeconds?: number | undefined;
652
+ }[];
653
+ context?: string | undefined;
654
+ fidelityCaveat?: string | undefined;
655
+ }[];
656
+ defaults: {
657
+ ttlMs: number;
658
+ readinessTimeoutMs: number;
659
+ resourceQuota: Record<string, string>;
660
+ limitRange: {
661
+ default: Record<string, string>;
662
+ max: Record<string, string>;
663
+ defaultRequest: Record<string, string>;
664
+ };
665
+ };
666
+ }, {
667
+ connections?: {
668
+ id: string;
669
+ credential: {
670
+ kind: "kubeconfig" | "irsa";
671
+ secretRef: string;
672
+ };
673
+ target?: "byoc" | "managed" | undefined;
674
+ customers?: string[] | undefined;
675
+ repositories?: string[] | undefined;
676
+ context?: string | undefined;
677
+ protectedNamespaces?: string[] | undefined;
678
+ allowClusterScopedResources?: boolean | undefined;
679
+ allowedClusterScopedKinds?: string[] | undefined;
680
+ nodeSelector?: Record<string, string> | undefined;
681
+ tolerations?: {
682
+ key?: string | undefined;
683
+ operator?: "Exists" | "Equal" | undefined;
684
+ value?: string | undefined;
685
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
686
+ tolerationSeconds?: number | undefined;
687
+ }[] | undefined;
688
+ fidelityCaveat?: string | undefined;
689
+ }[] | undefined;
690
+ defaults?: {
691
+ ttlMs?: number | undefined;
692
+ readinessTimeoutMs?: number | undefined;
693
+ resourceQuota?: Record<string, string> | undefined;
694
+ limitRange?: {
695
+ default?: Record<string, string> | undefined;
696
+ max?: Record<string, string> | undefined;
697
+ defaultRequest?: Record<string, string> | undefined;
698
+ } | undefined;
699
+ } | undefined;
700
+ }>, {
701
+ connections: {
702
+ id: string;
703
+ target: "byoc" | "managed";
704
+ customers: string[];
705
+ repositories: string[];
706
+ credential: {
707
+ kind: "kubeconfig" | "irsa";
708
+ secretRef: string;
709
+ };
710
+ protectedNamespaces: string[];
711
+ allowClusterScopedResources: boolean;
712
+ allowedClusterScopedKinds: string[];
713
+ nodeSelector: Record<string, string>;
714
+ tolerations: {
715
+ key?: string | undefined;
716
+ operator?: "Exists" | "Equal" | undefined;
717
+ value?: string | undefined;
718
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
719
+ tolerationSeconds?: number | undefined;
720
+ }[];
721
+ context?: string | undefined;
722
+ fidelityCaveat?: string | undefined;
723
+ }[];
724
+ defaults: {
725
+ ttlMs: number;
726
+ readinessTimeoutMs: number;
727
+ resourceQuota: Record<string, string>;
728
+ limitRange: {
729
+ default: Record<string, string>;
730
+ max: Record<string, string>;
731
+ defaultRequest: Record<string, string>;
732
+ };
733
+ };
734
+ }, {
735
+ connections?: {
736
+ id: string;
737
+ credential: {
738
+ kind: "kubeconfig" | "irsa";
739
+ secretRef: string;
740
+ };
741
+ target?: "byoc" | "managed" | undefined;
742
+ customers?: string[] | undefined;
743
+ repositories?: string[] | undefined;
744
+ context?: string | undefined;
745
+ protectedNamespaces?: string[] | undefined;
746
+ allowClusterScopedResources?: boolean | undefined;
747
+ allowedClusterScopedKinds?: string[] | undefined;
748
+ nodeSelector?: Record<string, string> | undefined;
749
+ tolerations?: {
750
+ key?: string | undefined;
751
+ operator?: "Exists" | "Equal" | undefined;
752
+ value?: string | undefined;
753
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
754
+ tolerationSeconds?: number | undefined;
755
+ }[] | undefined;
756
+ fidelityCaveat?: string | undefined;
757
+ }[] | undefined;
758
+ defaults?: {
759
+ ttlMs?: number | undefined;
760
+ readinessTimeoutMs?: number | undefined;
761
+ resourceQuota?: Record<string, string> | undefined;
762
+ limitRange?: {
763
+ default?: Record<string, string> | undefined;
764
+ max?: Record<string, string> | undefined;
765
+ defaultRequest?: Record<string, string> | undefined;
766
+ } | undefined;
767
+ } | undefined;
768
+ }>>>;
769
+ }, "strict", z.ZodTypeAny, {
770
+ kubernetes?: {
771
+ connections: {
772
+ id: string;
773
+ target: "byoc" | "managed";
774
+ customers: string[];
775
+ repositories: string[];
776
+ credential: {
777
+ kind: "kubeconfig" | "irsa";
778
+ secretRef: string;
779
+ };
780
+ protectedNamespaces: string[];
781
+ allowClusterScopedResources: boolean;
782
+ allowedClusterScopedKinds: string[];
783
+ nodeSelector: Record<string, string>;
784
+ tolerations: {
785
+ key?: string | undefined;
786
+ operator?: "Exists" | "Equal" | undefined;
787
+ value?: string | undefined;
788
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
789
+ tolerationSeconds?: number | undefined;
790
+ }[];
791
+ context?: string | undefined;
792
+ fidelityCaveat?: string | undefined;
793
+ }[];
794
+ defaults: {
795
+ ttlMs: number;
796
+ readinessTimeoutMs: number;
797
+ resourceQuota: Record<string, string>;
798
+ limitRange: {
799
+ default: Record<string, string>;
800
+ max: Record<string, string>;
801
+ defaultRequest: Record<string, string>;
802
+ };
803
+ };
804
+ } | undefined;
805
+ }, {
806
+ kubernetes?: {
807
+ connections?: {
808
+ id: string;
809
+ credential: {
810
+ kind: "kubeconfig" | "irsa";
811
+ secretRef: string;
812
+ };
813
+ target?: "byoc" | "managed" | undefined;
814
+ customers?: string[] | undefined;
815
+ repositories?: string[] | undefined;
816
+ context?: string | undefined;
817
+ protectedNamespaces?: string[] | undefined;
818
+ allowClusterScopedResources?: boolean | undefined;
819
+ allowedClusterScopedKinds?: string[] | undefined;
820
+ nodeSelector?: Record<string, string> | undefined;
821
+ tolerations?: {
822
+ key?: string | undefined;
823
+ operator?: "Exists" | "Equal" | undefined;
824
+ value?: string | undefined;
825
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
826
+ tolerationSeconds?: number | undefined;
827
+ }[] | undefined;
828
+ fidelityCaveat?: string | undefined;
829
+ }[] | undefined;
830
+ defaults?: {
831
+ ttlMs?: number | undefined;
832
+ readinessTimeoutMs?: number | undefined;
833
+ resourceQuota?: Record<string, string> | undefined;
834
+ limitRange?: {
835
+ default?: Record<string, string> | undefined;
836
+ max?: Record<string, string> | undefined;
837
+ defaultRequest?: Record<string, string> | undefined;
838
+ } | undefined;
839
+ } | undefined;
840
+ } | undefined;
841
+ }>>;
313
842
  }, "strip", z.ZodTypeAny, {
314
843
  triage: {
315
844
  maxImplementers: number;
@@ -350,9 +879,9 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
350
879
  repo: string;
351
880
  }[];
352
881
  clonePaths: Record<string, string>;
882
+ default?: string | undefined;
353
883
  org?: string | undefined;
354
884
  names?: string[] | undefined;
355
- default?: string | undefined;
356
885
  cloneRoot?: string | undefined;
357
886
  };
358
887
  models: {
@@ -394,6 +923,14 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
394
923
  instanceName?: string | undefined;
395
924
  outboxPath?: string | undefined;
396
925
  };
926
+ verification: {
927
+ enabled: boolean;
928
+ descriptorPath: string;
929
+ maxConcurrentEnvironments: number;
930
+ maxRunTimeoutMs: number;
931
+ maxEnvironmentTtlMs: number;
932
+ maxTeardownTimeoutMs: number;
933
+ };
397
934
  terminalState: "done" | "human-review";
398
935
  stateIds: {
399
936
  readyForAgent?: string | undefined;
@@ -407,6 +944,43 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
407
944
  requireLabel: string;
408
945
  requireTeamKey: string;
409
946
  };
947
+ environments: {
948
+ kubernetes?: {
949
+ connections: {
950
+ id: string;
951
+ target: "byoc" | "managed";
952
+ customers: string[];
953
+ repositories: string[];
954
+ credential: {
955
+ kind: "kubeconfig" | "irsa";
956
+ secretRef: string;
957
+ };
958
+ protectedNamespaces: string[];
959
+ allowClusterScopedResources: boolean;
960
+ allowedClusterScopedKinds: string[];
961
+ nodeSelector: Record<string, string>;
962
+ tolerations: {
963
+ key?: string | undefined;
964
+ operator?: "Exists" | "Equal" | undefined;
965
+ value?: string | undefined;
966
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
967
+ tolerationSeconds?: number | undefined;
968
+ }[];
969
+ context?: string | undefined;
970
+ fidelityCaveat?: string | undefined;
971
+ }[];
972
+ defaults: {
973
+ ttlMs: number;
974
+ readinessTimeoutMs: number;
975
+ resourceQuota: Record<string, string>;
976
+ limitRange: {
977
+ default: Record<string, string>;
978
+ max: Record<string, string>;
979
+ defaultRequest: Record<string, string>;
980
+ };
981
+ };
982
+ } | undefined;
983
+ };
410
984
  workspaceId?: string | undefined;
411
985
  slack?: {
412
986
  channel: string;
@@ -417,8 +991,22 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
417
991
  conversationCoalesceMs: number;
418
992
  } | undefined;
419
993
  issueSource?: "linear" | "github" | undefined;
994
+ preview?: {
995
+ registryPath: string;
996
+ provider: "tailscale-serve";
997
+ access: "tailnet";
998
+ services: Record<string, {
999
+ port: number;
1000
+ startCommand: string;
1001
+ portSpan?: number | undefined;
1002
+ httpsPort?: number | undefined;
1003
+ }>;
1004
+ tailscaleBinary: string;
1005
+ httpsPortRange: [number, number];
1006
+ } | undefined;
420
1007
  }, {
421
1008
  repos: {
1009
+ default?: string | undefined;
422
1010
  org?: string | undefined;
423
1011
  names?: string[] | undefined;
424
1012
  overrides?: Record<string, string> | undefined;
@@ -428,7 +1016,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
428
1016
  pattern: string;
429
1017
  repo: string;
430
1018
  }[] | undefined;
431
- default?: string | undefined;
432
1019
  cloneRoot?: string | undefined;
433
1020
  clonePaths?: Record<string, string> | undefined;
434
1021
  };
@@ -511,6 +1098,27 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
511
1098
  batchSize?: number | undefined;
512
1099
  requestTimeoutMs?: number | undefined;
513
1100
  } | undefined;
1101
+ preview?: {
1102
+ registryPath?: string | undefined;
1103
+ provider?: "tailscale-serve" | undefined;
1104
+ access?: "tailnet" | undefined;
1105
+ services?: Record<string, {
1106
+ port: number;
1107
+ startCommand: string;
1108
+ portSpan?: number | undefined;
1109
+ httpsPort?: number | undefined;
1110
+ }> | undefined;
1111
+ tailscaleBinary?: string | undefined;
1112
+ httpsPortRange?: [number, number] | undefined;
1113
+ } | undefined;
1114
+ verification?: {
1115
+ enabled?: boolean | undefined;
1116
+ descriptorPath?: string | undefined;
1117
+ maxConcurrentEnvironments?: number | undefined;
1118
+ maxRunTimeoutMs?: number | undefined;
1119
+ maxEnvironmentTtlMs?: number | undefined;
1120
+ maxTeardownTimeoutMs?: number | undefined;
1121
+ } | undefined;
514
1122
  terminalState?: "done" | "human-review" | undefined;
515
1123
  stateIds?: {
516
1124
  readyForAgent?: string | undefined;
@@ -524,6 +1132,43 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
524
1132
  requireLabel?: string | undefined;
525
1133
  requireTeamKey?: string | undefined;
526
1134
  } | undefined;
1135
+ environments?: {
1136
+ kubernetes?: {
1137
+ connections?: {
1138
+ id: string;
1139
+ credential: {
1140
+ kind: "kubeconfig" | "irsa";
1141
+ secretRef: string;
1142
+ };
1143
+ target?: "byoc" | "managed" | undefined;
1144
+ customers?: string[] | undefined;
1145
+ repositories?: string[] | undefined;
1146
+ context?: string | undefined;
1147
+ protectedNamespaces?: string[] | undefined;
1148
+ allowClusterScopedResources?: boolean | undefined;
1149
+ allowedClusterScopedKinds?: string[] | undefined;
1150
+ nodeSelector?: Record<string, string> | undefined;
1151
+ tolerations?: {
1152
+ key?: string | undefined;
1153
+ operator?: "Exists" | "Equal" | undefined;
1154
+ value?: string | undefined;
1155
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
1156
+ tolerationSeconds?: number | undefined;
1157
+ }[] | undefined;
1158
+ fidelityCaveat?: string | undefined;
1159
+ }[] | undefined;
1160
+ defaults?: {
1161
+ ttlMs?: number | undefined;
1162
+ readinessTimeoutMs?: number | undefined;
1163
+ resourceQuota?: Record<string, string> | undefined;
1164
+ limitRange?: {
1165
+ default?: Record<string, string> | undefined;
1166
+ max?: Record<string, string> | undefined;
1167
+ defaultRequest?: Record<string, string> | undefined;
1168
+ } | undefined;
1169
+ } | undefined;
1170
+ } | undefined;
1171
+ } | undefined;
527
1172
  }>, {
528
1173
  subscription: {
529
1174
  labels: string[];
@@ -531,6 +1176,19 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
531
1176
  projects: string[];
532
1177
  assignees: string[];
533
1178
  };
1179
+ preview: {
1180
+ registryPath: string;
1181
+ provider: "tailscale-serve";
1182
+ access: "tailnet";
1183
+ services: Record<string, {
1184
+ port: number;
1185
+ startCommand: string;
1186
+ portSpan?: number | undefined;
1187
+ httpsPort?: number | undefined;
1188
+ }>;
1189
+ tailscaleBinary: string;
1190
+ httpsPortRange: [number, number];
1191
+ } | undefined;
534
1192
  repos: {
535
1193
  default?: string | undefined;
536
1194
  byLabel: {
@@ -608,6 +1266,14 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
608
1266
  instanceName?: string | undefined;
609
1267
  outboxPath?: string | undefined;
610
1268
  };
1269
+ verification: {
1270
+ enabled: boolean;
1271
+ descriptorPath: string;
1272
+ maxConcurrentEnvironments: number;
1273
+ maxRunTimeoutMs: number;
1274
+ maxEnvironmentTtlMs: number;
1275
+ maxTeardownTimeoutMs: number;
1276
+ };
611
1277
  terminalState: "done" | "human-review";
612
1278
  stateIds: {
613
1279
  readyForAgent?: string | undefined;
@@ -621,6 +1287,43 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
621
1287
  requireLabel: string;
622
1288
  requireTeamKey: string;
623
1289
  };
1290
+ environments: {
1291
+ kubernetes?: {
1292
+ connections: {
1293
+ id: string;
1294
+ target: "byoc" | "managed";
1295
+ customers: string[];
1296
+ repositories: string[];
1297
+ credential: {
1298
+ kind: "kubeconfig" | "irsa";
1299
+ secretRef: string;
1300
+ };
1301
+ protectedNamespaces: string[];
1302
+ allowClusterScopedResources: boolean;
1303
+ allowedClusterScopedKinds: string[];
1304
+ nodeSelector: Record<string, string>;
1305
+ tolerations: {
1306
+ key?: string | undefined;
1307
+ operator?: "Exists" | "Equal" | undefined;
1308
+ value?: string | undefined;
1309
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
1310
+ tolerationSeconds?: number | undefined;
1311
+ }[];
1312
+ context?: string | undefined;
1313
+ fidelityCaveat?: string | undefined;
1314
+ }[];
1315
+ defaults: {
1316
+ ttlMs: number;
1317
+ readinessTimeoutMs: number;
1318
+ resourceQuota: Record<string, string>;
1319
+ limitRange: {
1320
+ default: Record<string, string>;
1321
+ max: Record<string, string>;
1322
+ defaultRequest: Record<string, string>;
1323
+ };
1324
+ };
1325
+ } | undefined;
1326
+ };
624
1327
  workspaceId?: string | undefined;
625
1328
  slack?: {
626
1329
  channel: string;
@@ -633,6 +1336,7 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
633
1336
  issueSource?: "linear" | "github" | undefined;
634
1337
  }, {
635
1338
  repos: {
1339
+ default?: string | undefined;
636
1340
  org?: string | undefined;
637
1341
  names?: string[] | undefined;
638
1342
  overrides?: Record<string, string> | undefined;
@@ -642,7 +1346,6 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
642
1346
  pattern: string;
643
1347
  repo: string;
644
1348
  }[] | undefined;
645
- default?: string | undefined;
646
1349
  cloneRoot?: string | undefined;
647
1350
  clonePaths?: Record<string, string> | undefined;
648
1351
  };
@@ -725,6 +1428,27 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
725
1428
  batchSize?: number | undefined;
726
1429
  requestTimeoutMs?: number | undefined;
727
1430
  } | undefined;
1431
+ preview?: {
1432
+ registryPath?: string | undefined;
1433
+ provider?: "tailscale-serve" | undefined;
1434
+ access?: "tailnet" | undefined;
1435
+ services?: Record<string, {
1436
+ port: number;
1437
+ startCommand: string;
1438
+ portSpan?: number | undefined;
1439
+ httpsPort?: number | undefined;
1440
+ }> | undefined;
1441
+ tailscaleBinary?: string | undefined;
1442
+ httpsPortRange?: [number, number] | undefined;
1443
+ } | undefined;
1444
+ verification?: {
1445
+ enabled?: boolean | undefined;
1446
+ descriptorPath?: string | undefined;
1447
+ maxConcurrentEnvironments?: number | undefined;
1448
+ maxRunTimeoutMs?: number | undefined;
1449
+ maxEnvironmentTtlMs?: number | undefined;
1450
+ maxTeardownTimeoutMs?: number | undefined;
1451
+ } | undefined;
728
1452
  terminalState?: "done" | "human-review" | undefined;
729
1453
  stateIds?: {
730
1454
  readyForAgent?: string | undefined;
@@ -738,6 +1462,43 @@ export declare const WorkspaceConfigSchema: z.ZodEffects<z.ZodObject<{
738
1462
  requireLabel?: string | undefined;
739
1463
  requireTeamKey?: string | undefined;
740
1464
  } | undefined;
1465
+ environments?: {
1466
+ kubernetes?: {
1467
+ connections?: {
1468
+ id: string;
1469
+ credential: {
1470
+ kind: "kubeconfig" | "irsa";
1471
+ secretRef: string;
1472
+ };
1473
+ target?: "byoc" | "managed" | undefined;
1474
+ customers?: string[] | undefined;
1475
+ repositories?: string[] | undefined;
1476
+ context?: string | undefined;
1477
+ protectedNamespaces?: string[] | undefined;
1478
+ allowClusterScopedResources?: boolean | undefined;
1479
+ allowedClusterScopedKinds?: string[] | undefined;
1480
+ nodeSelector?: Record<string, string> | undefined;
1481
+ tolerations?: {
1482
+ key?: string | undefined;
1483
+ operator?: "Exists" | "Equal" | undefined;
1484
+ value?: string | undefined;
1485
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
1486
+ tolerationSeconds?: number | undefined;
1487
+ }[] | undefined;
1488
+ fidelityCaveat?: string | undefined;
1489
+ }[] | undefined;
1490
+ defaults?: {
1491
+ ttlMs?: number | undefined;
1492
+ readinessTimeoutMs?: number | undefined;
1493
+ resourceQuota?: Record<string, string> | undefined;
1494
+ limitRange?: {
1495
+ default?: Record<string, string> | undefined;
1496
+ max?: Record<string, string> | undefined;
1497
+ defaultRequest?: Record<string, string> | undefined;
1498
+ } | undefined;
1499
+ } | undefined;
1500
+ } | undefined;
1501
+ } | undefined;
741
1502
  }>;
742
1503
  export declare const NodeConfigSchema: z.ZodEffects<z.ZodObject<{
743
1504
  workspaceId: z.ZodOptional<z.ZodString>;
@@ -747,18 +1508,129 @@ export declare const NodeConfigSchema: z.ZodEffects<z.ZodObject<{
747
1508
  dryRun: z.ZodDefault<z.ZodBoolean>;
748
1509
  factoryLoopHeartbeatPath: z.ZodOptional<z.ZodString>;
749
1510
  factoryLoopRegistryPath: z.ZodOptional<z.ZodString>;
1511
+ preview: z.ZodOptional<z.ZodEffects<z.ZodObject<{
1512
+ provider: z.ZodDefault<z.ZodLiteral<"tailscale-serve">>;
1513
+ access: z.ZodDefault<z.ZodLiteral<"tailnet">>;
1514
+ services: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
1515
+ /** Local HTTP port the repository's development server listens on. */
1516
+ port: z.ZodNumber;
1517
+ /** Consecutive node-local ports Factory may allocate for concurrent issues. */
1518
+ portSpan: z.ZodOptional<z.ZodNumber>;
1519
+ /** Optional stable tailnet HTTPS port; otherwise Factory allocates one. */
1520
+ httpsPort: z.ZodOptional<z.ZodNumber>;
1521
+ /** Foreground command Factory supervises for the issue-lifetime preview. */
1522
+ startCommand: z.ZodString;
1523
+ }, "strip", z.ZodTypeAny, {
1524
+ port: number;
1525
+ startCommand: string;
1526
+ portSpan?: number | undefined;
1527
+ httpsPort?: number | undefined;
1528
+ }, {
1529
+ port: number;
1530
+ startCommand: string;
1531
+ portSpan?: number | undefined;
1532
+ httpsPort?: number | undefined;
1533
+ }>, {
1534
+ port: number;
1535
+ startCommand: string;
1536
+ portSpan?: number | undefined;
1537
+ httpsPort?: number | undefined;
1538
+ }, {
1539
+ port: number;
1540
+ startCommand: string;
1541
+ portSpan?: number | undefined;
1542
+ httpsPort?: number | undefined;
1543
+ }>>>;
1544
+ tailscaleBinary: z.ZodDefault<z.ZodString>;
1545
+ registryPath: z.ZodDefault<z.ZodString>;
1546
+ httpsPortRange: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
1547
+ }, "strip", z.ZodTypeAny, {
1548
+ registryPath: string;
1549
+ provider: "tailscale-serve";
1550
+ access: "tailnet";
1551
+ services: Record<string, {
1552
+ port: number;
1553
+ startCommand: string;
1554
+ portSpan?: number | undefined;
1555
+ httpsPort?: number | undefined;
1556
+ }>;
1557
+ tailscaleBinary: string;
1558
+ httpsPortRange: [number, number];
1559
+ }, {
1560
+ registryPath?: string | undefined;
1561
+ provider?: "tailscale-serve" | undefined;
1562
+ access?: "tailnet" | undefined;
1563
+ services?: Record<string, {
1564
+ port: number;
1565
+ startCommand: string;
1566
+ portSpan?: number | undefined;
1567
+ httpsPort?: number | undefined;
1568
+ }> | undefined;
1569
+ tailscaleBinary?: string | undefined;
1570
+ httpsPortRange?: [number, number] | undefined;
1571
+ }>, {
1572
+ registryPath: string;
1573
+ provider: "tailscale-serve";
1574
+ access: "tailnet";
1575
+ services: Record<string, {
1576
+ port: number;
1577
+ startCommand: string;
1578
+ portSpan?: number | undefined;
1579
+ httpsPort?: number | undefined;
1580
+ }>;
1581
+ tailscaleBinary: string;
1582
+ httpsPortRange: [number, number];
1583
+ }, {
1584
+ registryPath?: string | undefined;
1585
+ provider?: "tailscale-serve" | undefined;
1586
+ access?: "tailnet" | undefined;
1587
+ services?: Record<string, {
1588
+ port: number;
1589
+ startCommand: string;
1590
+ portSpan?: number | undefined;
1591
+ httpsPort?: number | undefined;
1592
+ }> | undefined;
1593
+ tailscaleBinary?: string | undefined;
1594
+ httpsPortRange?: [number, number] | undefined;
1595
+ }>>;
750
1596
  }, "strip", z.ZodTypeAny, {
751
1597
  clonePaths: Record<string, string>;
752
1598
  capabilities: string[];
753
1599
  dryRun: boolean;
754
1600
  cloneRoot?: string | undefined;
755
1601
  workspaceId?: string | undefined;
1602
+ preview?: {
1603
+ registryPath: string;
1604
+ provider: "tailscale-serve";
1605
+ access: "tailnet";
1606
+ services: Record<string, {
1607
+ port: number;
1608
+ startCommand: string;
1609
+ portSpan?: number | undefined;
1610
+ httpsPort?: number | undefined;
1611
+ }>;
1612
+ tailscaleBinary: string;
1613
+ httpsPortRange: [number, number];
1614
+ } | undefined;
756
1615
  factoryLoopHeartbeatPath?: string | undefined;
757
1616
  factoryLoopRegistryPath?: string | undefined;
758
1617
  }, {
759
1618
  cloneRoot?: string | undefined;
760
1619
  clonePaths?: Record<string, string> | undefined;
761
1620
  workspaceId?: string | undefined;
1621
+ preview?: {
1622
+ registryPath?: string | undefined;
1623
+ provider?: "tailscale-serve" | undefined;
1624
+ access?: "tailnet" | undefined;
1625
+ services?: Record<string, {
1626
+ port: number;
1627
+ startCommand: string;
1628
+ portSpan?: number | undefined;
1629
+ httpsPort?: number | undefined;
1630
+ }> | undefined;
1631
+ tailscaleBinary?: string | undefined;
1632
+ httpsPortRange?: [number, number] | undefined;
1633
+ } | undefined;
762
1634
  capabilities?: string[] | undefined;
763
1635
  dryRun?: boolean | undefined;
764
1636
  factoryLoopHeartbeatPath?: string | undefined;
@@ -768,6 +1640,19 @@ export declare const NodeConfigSchema: z.ZodEffects<z.ZodObject<{
768
1640
  clonePaths: Record<string, string>;
769
1641
  factoryLoopHeartbeatPath: string | undefined;
770
1642
  factoryLoopRegistryPath: string | undefined;
1643
+ preview: {
1644
+ registryPath: string;
1645
+ provider: "tailscale-serve";
1646
+ access: "tailnet";
1647
+ services: Record<string, {
1648
+ port: number;
1649
+ startCommand: string;
1650
+ portSpan?: number | undefined;
1651
+ httpsPort?: number | undefined;
1652
+ }>;
1653
+ tailscaleBinary: string;
1654
+ httpsPortRange: [number, number];
1655
+ } | undefined;
771
1656
  capabilities: string[];
772
1657
  dryRun: boolean;
773
1658
  workspaceId?: string | undefined;
@@ -775,6 +1660,19 @@ export declare const NodeConfigSchema: z.ZodEffects<z.ZodObject<{
775
1660
  cloneRoot?: string | undefined;
776
1661
  clonePaths?: Record<string, string> | undefined;
777
1662
  workspaceId?: string | undefined;
1663
+ preview?: {
1664
+ registryPath?: string | undefined;
1665
+ provider?: "tailscale-serve" | undefined;
1666
+ access?: "tailnet" | undefined;
1667
+ services?: Record<string, {
1668
+ port: number;
1669
+ startCommand: string;
1670
+ portSpan?: number | undefined;
1671
+ httpsPort?: number | undefined;
1672
+ }> | undefined;
1673
+ tailscaleBinary?: string | undefined;
1674
+ httpsPortRange?: [number, number] | undefined;
1675
+ } | undefined;
778
1676
  capabilities?: string[] | undefined;
779
1677
  dryRun?: boolean | undefined;
780
1678
  factoryLoopHeartbeatPath?: string | undefined;
@@ -877,11 +1775,12 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
877
1775
  repo: string;
878
1776
  }[];
879
1777
  clonePaths: Record<string, string>;
1778
+ default?: string | undefined;
880
1779
  org?: string | undefined;
881
1780
  names?: string[] | undefined;
882
- default?: string | undefined;
883
1781
  cloneRoot?: string | undefined;
884
1782
  }, {
1783
+ default?: string | undefined;
885
1784
  org?: string | undefined;
886
1785
  names?: string[] | undefined;
887
1786
  overrides?: Record<string, string> | undefined;
@@ -891,7 +1790,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
891
1790
  pattern: string;
892
1791
  repo: string;
893
1792
  }[] | undefined;
894
- default?: string | undefined;
895
1793
  cloneRoot?: string | undefined;
896
1794
  clonePaths?: Record<string, string> | undefined;
897
1795
  }>;
@@ -982,6 +1880,29 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
982
1880
  }, {
983
1881
  identity?: "app" | "user" | "auto" | undefined;
984
1882
  }>>;
1883
+ verification: z.ZodDefault<z.ZodObject<{
1884
+ /** Default-on: an auto-merge must have a green live-stack verification verdict. */
1885
+ enabled: z.ZodDefault<z.ZodBoolean>;
1886
+ descriptorPath: z.ZodDefault<z.ZodString>;
1887
+ maxConcurrentEnvironments: z.ZodDefault<z.ZodNumber>;
1888
+ maxRunTimeoutMs: z.ZodDefault<z.ZodNumber>;
1889
+ maxEnvironmentTtlMs: z.ZodDefault<z.ZodNumber>;
1890
+ maxTeardownTimeoutMs: z.ZodDefault<z.ZodNumber>;
1891
+ }, "strict", z.ZodTypeAny, {
1892
+ enabled: boolean;
1893
+ descriptorPath: string;
1894
+ maxConcurrentEnvironments: number;
1895
+ maxRunTimeoutMs: number;
1896
+ maxEnvironmentTtlMs: number;
1897
+ maxTeardownTimeoutMs: number;
1898
+ }, {
1899
+ enabled?: boolean | undefined;
1900
+ descriptorPath?: string | undefined;
1901
+ maxConcurrentEnvironments?: number | undefined;
1902
+ maxRunTimeoutMs?: number | undefined;
1903
+ maxEnvironmentTtlMs?: number | undefined;
1904
+ maxTeardownTimeoutMs?: number | undefined;
1905
+ }>>;
985
1906
  terminalState: z.ZodDefault<z.ZodEnum<["done", "human-review"]>>;
986
1907
  linear: z.ZodDefault<z.ZodObject<{
987
1908
  states: z.ZodDefault<z.ZodDefault<z.ZodObject<{
@@ -1088,6 +2009,427 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1088
2009
  requireLabel?: string | undefined;
1089
2010
  requireTeamKey?: string | undefined;
1090
2011
  }>>;
2012
+ environments: z.ZodDefault<z.ZodObject<{
2013
+ kubernetes: z.ZodOptional<z.ZodDefault<z.ZodEffects<z.ZodObject<{
2014
+ connections: z.ZodDefault<z.ZodArray<z.ZodEffects<z.ZodEffects<z.ZodObject<{
2015
+ id: z.ZodString;
2016
+ target: z.ZodDefault<z.ZodEnum<["byoc", "managed"]>>;
2017
+ customers: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2018
+ repositories: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2019
+ credential: z.ZodObject<{
2020
+ kind: z.ZodEnum<["kubeconfig", "irsa"]>;
2021
+ secretRef: z.ZodEffects<z.ZodString, string, string>;
2022
+ }, "strict", z.ZodTypeAny, {
2023
+ kind: "kubeconfig" | "irsa";
2024
+ secretRef: string;
2025
+ }, {
2026
+ kind: "kubeconfig" | "irsa";
2027
+ secretRef: string;
2028
+ }>;
2029
+ context: z.ZodOptional<z.ZodString>;
2030
+ protectedNamespaces: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2031
+ allowClusterScopedResources: z.ZodDefault<z.ZodBoolean>;
2032
+ allowedClusterScopedKinds: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
2033
+ nodeSelector: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2034
+ tolerations: z.ZodDefault<z.ZodArray<z.ZodObject<{
2035
+ key: z.ZodOptional<z.ZodString>;
2036
+ operator: z.ZodOptional<z.ZodEnum<["Exists", "Equal"]>>;
2037
+ value: z.ZodOptional<z.ZodString>;
2038
+ effect: z.ZodOptional<z.ZodEnum<["NoSchedule", "PreferNoSchedule", "NoExecute"]>>;
2039
+ tolerationSeconds: z.ZodOptional<z.ZodNumber>;
2040
+ }, "strict", z.ZodTypeAny, {
2041
+ key?: string | undefined;
2042
+ operator?: "Exists" | "Equal" | undefined;
2043
+ value?: string | undefined;
2044
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2045
+ tolerationSeconds?: number | undefined;
2046
+ }, {
2047
+ key?: string | undefined;
2048
+ operator?: "Exists" | "Equal" | undefined;
2049
+ value?: string | undefined;
2050
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2051
+ tolerationSeconds?: number | undefined;
2052
+ }>, "many">>;
2053
+ fidelityCaveat: z.ZodOptional<z.ZodString>;
2054
+ }, "strict", z.ZodTypeAny, {
2055
+ id: string;
2056
+ target: "byoc" | "managed";
2057
+ customers: string[];
2058
+ repositories: string[];
2059
+ credential: {
2060
+ kind: "kubeconfig" | "irsa";
2061
+ secretRef: string;
2062
+ };
2063
+ protectedNamespaces: string[];
2064
+ allowClusterScopedResources: boolean;
2065
+ allowedClusterScopedKinds: string[];
2066
+ nodeSelector: Record<string, string>;
2067
+ tolerations: {
2068
+ key?: string | undefined;
2069
+ operator?: "Exists" | "Equal" | undefined;
2070
+ value?: string | undefined;
2071
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2072
+ tolerationSeconds?: number | undefined;
2073
+ }[];
2074
+ context?: string | undefined;
2075
+ fidelityCaveat?: string | undefined;
2076
+ }, {
2077
+ id: string;
2078
+ credential: {
2079
+ kind: "kubeconfig" | "irsa";
2080
+ secretRef: string;
2081
+ };
2082
+ target?: "byoc" | "managed" | undefined;
2083
+ customers?: string[] | undefined;
2084
+ repositories?: string[] | undefined;
2085
+ context?: string | undefined;
2086
+ protectedNamespaces?: string[] | undefined;
2087
+ allowClusterScopedResources?: boolean | undefined;
2088
+ allowedClusterScopedKinds?: string[] | undefined;
2089
+ nodeSelector?: Record<string, string> | undefined;
2090
+ tolerations?: {
2091
+ key?: string | undefined;
2092
+ operator?: "Exists" | "Equal" | undefined;
2093
+ value?: string | undefined;
2094
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2095
+ tolerationSeconds?: number | undefined;
2096
+ }[] | undefined;
2097
+ fidelityCaveat?: string | undefined;
2098
+ }>, {
2099
+ id: string;
2100
+ target: "byoc" | "managed";
2101
+ customers: string[];
2102
+ repositories: string[];
2103
+ credential: {
2104
+ kind: "kubeconfig" | "irsa";
2105
+ secretRef: string;
2106
+ };
2107
+ protectedNamespaces: string[];
2108
+ allowClusterScopedResources: boolean;
2109
+ allowedClusterScopedKinds: string[];
2110
+ nodeSelector: Record<string, string>;
2111
+ tolerations: {
2112
+ key?: string | undefined;
2113
+ operator?: "Exists" | "Equal" | undefined;
2114
+ value?: string | undefined;
2115
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2116
+ tolerationSeconds?: number | undefined;
2117
+ }[];
2118
+ context?: string | undefined;
2119
+ fidelityCaveat?: string | undefined;
2120
+ }, {
2121
+ id: string;
2122
+ credential: {
2123
+ kind: "kubeconfig" | "irsa";
2124
+ secretRef: string;
2125
+ };
2126
+ target?: "byoc" | "managed" | undefined;
2127
+ customers?: string[] | undefined;
2128
+ repositories?: string[] | undefined;
2129
+ context?: string | undefined;
2130
+ protectedNamespaces?: string[] | undefined;
2131
+ allowClusterScopedResources?: boolean | undefined;
2132
+ allowedClusterScopedKinds?: string[] | undefined;
2133
+ nodeSelector?: Record<string, string> | undefined;
2134
+ tolerations?: {
2135
+ key?: string | undefined;
2136
+ operator?: "Exists" | "Equal" | undefined;
2137
+ value?: string | undefined;
2138
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2139
+ tolerationSeconds?: number | undefined;
2140
+ }[] | undefined;
2141
+ fidelityCaveat?: string | undefined;
2142
+ }>, {
2143
+ id: string;
2144
+ target: "byoc" | "managed";
2145
+ customers: string[];
2146
+ repositories: string[];
2147
+ credential: {
2148
+ kind: "kubeconfig" | "irsa";
2149
+ secretRef: string;
2150
+ };
2151
+ protectedNamespaces: string[];
2152
+ allowClusterScopedResources: boolean;
2153
+ allowedClusterScopedKinds: string[];
2154
+ nodeSelector: Record<string, string>;
2155
+ tolerations: {
2156
+ key?: string | undefined;
2157
+ operator?: "Exists" | "Equal" | undefined;
2158
+ value?: string | undefined;
2159
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2160
+ tolerationSeconds?: number | undefined;
2161
+ }[];
2162
+ context?: string | undefined;
2163
+ fidelityCaveat?: string | undefined;
2164
+ }, {
2165
+ id: string;
2166
+ credential: {
2167
+ kind: "kubeconfig" | "irsa";
2168
+ secretRef: string;
2169
+ };
2170
+ target?: "byoc" | "managed" | undefined;
2171
+ customers?: string[] | undefined;
2172
+ repositories?: string[] | undefined;
2173
+ context?: string | undefined;
2174
+ protectedNamespaces?: string[] | undefined;
2175
+ allowClusterScopedResources?: boolean | undefined;
2176
+ allowedClusterScopedKinds?: string[] | undefined;
2177
+ nodeSelector?: Record<string, string> | undefined;
2178
+ tolerations?: {
2179
+ key?: string | undefined;
2180
+ operator?: "Exists" | "Equal" | undefined;
2181
+ value?: string | undefined;
2182
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2183
+ tolerationSeconds?: number | undefined;
2184
+ }[] | undefined;
2185
+ fidelityCaveat?: string | undefined;
2186
+ }>, "many">>;
2187
+ defaults: z.ZodDefault<z.ZodObject<{
2188
+ ttlMs: z.ZodDefault<z.ZodNumber>;
2189
+ readinessTimeoutMs: z.ZodDefault<z.ZodNumber>;
2190
+ resourceQuota: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2191
+ limitRange: z.ZodDefault<z.ZodObject<{
2192
+ default: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2193
+ defaultRequest: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2194
+ max: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodString>>;
2195
+ }, "strip", z.ZodTypeAny, {
2196
+ default: Record<string, string>;
2197
+ max: Record<string, string>;
2198
+ defaultRequest: Record<string, string>;
2199
+ }, {
2200
+ default?: Record<string, string> | undefined;
2201
+ max?: Record<string, string> | undefined;
2202
+ defaultRequest?: Record<string, string> | undefined;
2203
+ }>>;
2204
+ }, "strict", z.ZodTypeAny, {
2205
+ ttlMs: number;
2206
+ readinessTimeoutMs: number;
2207
+ resourceQuota: Record<string, string>;
2208
+ limitRange: {
2209
+ default: Record<string, string>;
2210
+ max: Record<string, string>;
2211
+ defaultRequest: Record<string, string>;
2212
+ };
2213
+ }, {
2214
+ ttlMs?: number | undefined;
2215
+ readinessTimeoutMs?: number | undefined;
2216
+ resourceQuota?: Record<string, string> | undefined;
2217
+ limitRange?: {
2218
+ default?: Record<string, string> | undefined;
2219
+ max?: Record<string, string> | undefined;
2220
+ defaultRequest?: Record<string, string> | undefined;
2221
+ } | undefined;
2222
+ }>>;
2223
+ }, "strict", z.ZodTypeAny, {
2224
+ connections: {
2225
+ id: string;
2226
+ target: "byoc" | "managed";
2227
+ customers: string[];
2228
+ repositories: string[];
2229
+ credential: {
2230
+ kind: "kubeconfig" | "irsa";
2231
+ secretRef: string;
2232
+ };
2233
+ protectedNamespaces: string[];
2234
+ allowClusterScopedResources: boolean;
2235
+ allowedClusterScopedKinds: string[];
2236
+ nodeSelector: Record<string, string>;
2237
+ tolerations: {
2238
+ key?: string | undefined;
2239
+ operator?: "Exists" | "Equal" | undefined;
2240
+ value?: string | undefined;
2241
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2242
+ tolerationSeconds?: number | undefined;
2243
+ }[];
2244
+ context?: string | undefined;
2245
+ fidelityCaveat?: string | undefined;
2246
+ }[];
2247
+ defaults: {
2248
+ ttlMs: number;
2249
+ readinessTimeoutMs: number;
2250
+ resourceQuota: Record<string, string>;
2251
+ limitRange: {
2252
+ default: Record<string, string>;
2253
+ max: Record<string, string>;
2254
+ defaultRequest: Record<string, string>;
2255
+ };
2256
+ };
2257
+ }, {
2258
+ connections?: {
2259
+ id: string;
2260
+ credential: {
2261
+ kind: "kubeconfig" | "irsa";
2262
+ secretRef: string;
2263
+ };
2264
+ target?: "byoc" | "managed" | undefined;
2265
+ customers?: string[] | undefined;
2266
+ repositories?: string[] | undefined;
2267
+ context?: string | undefined;
2268
+ protectedNamespaces?: string[] | undefined;
2269
+ allowClusterScopedResources?: boolean | undefined;
2270
+ allowedClusterScopedKinds?: string[] | undefined;
2271
+ nodeSelector?: Record<string, string> | undefined;
2272
+ tolerations?: {
2273
+ key?: string | undefined;
2274
+ operator?: "Exists" | "Equal" | undefined;
2275
+ value?: string | undefined;
2276
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2277
+ tolerationSeconds?: number | undefined;
2278
+ }[] | undefined;
2279
+ fidelityCaveat?: string | undefined;
2280
+ }[] | undefined;
2281
+ defaults?: {
2282
+ ttlMs?: number | undefined;
2283
+ readinessTimeoutMs?: number | undefined;
2284
+ resourceQuota?: Record<string, string> | undefined;
2285
+ limitRange?: {
2286
+ default?: Record<string, string> | undefined;
2287
+ max?: Record<string, string> | undefined;
2288
+ defaultRequest?: Record<string, string> | undefined;
2289
+ } | undefined;
2290
+ } | undefined;
2291
+ }>, {
2292
+ connections: {
2293
+ id: string;
2294
+ target: "byoc" | "managed";
2295
+ customers: string[];
2296
+ repositories: string[];
2297
+ credential: {
2298
+ kind: "kubeconfig" | "irsa";
2299
+ secretRef: string;
2300
+ };
2301
+ protectedNamespaces: string[];
2302
+ allowClusterScopedResources: boolean;
2303
+ allowedClusterScopedKinds: string[];
2304
+ nodeSelector: Record<string, string>;
2305
+ tolerations: {
2306
+ key?: string | undefined;
2307
+ operator?: "Exists" | "Equal" | undefined;
2308
+ value?: string | undefined;
2309
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2310
+ tolerationSeconds?: number | undefined;
2311
+ }[];
2312
+ context?: string | undefined;
2313
+ fidelityCaveat?: string | undefined;
2314
+ }[];
2315
+ defaults: {
2316
+ ttlMs: number;
2317
+ readinessTimeoutMs: number;
2318
+ resourceQuota: Record<string, string>;
2319
+ limitRange: {
2320
+ default: Record<string, string>;
2321
+ max: Record<string, string>;
2322
+ defaultRequest: Record<string, string>;
2323
+ };
2324
+ };
2325
+ }, {
2326
+ connections?: {
2327
+ id: string;
2328
+ credential: {
2329
+ kind: "kubeconfig" | "irsa";
2330
+ secretRef: string;
2331
+ };
2332
+ target?: "byoc" | "managed" | undefined;
2333
+ customers?: string[] | undefined;
2334
+ repositories?: string[] | undefined;
2335
+ context?: string | undefined;
2336
+ protectedNamespaces?: string[] | undefined;
2337
+ allowClusterScopedResources?: boolean | undefined;
2338
+ allowedClusterScopedKinds?: string[] | undefined;
2339
+ nodeSelector?: Record<string, string> | undefined;
2340
+ tolerations?: {
2341
+ key?: string | undefined;
2342
+ operator?: "Exists" | "Equal" | undefined;
2343
+ value?: string | undefined;
2344
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2345
+ tolerationSeconds?: number | undefined;
2346
+ }[] | undefined;
2347
+ fidelityCaveat?: string | undefined;
2348
+ }[] | undefined;
2349
+ defaults?: {
2350
+ ttlMs?: number | undefined;
2351
+ readinessTimeoutMs?: number | undefined;
2352
+ resourceQuota?: Record<string, string> | undefined;
2353
+ limitRange?: {
2354
+ default?: Record<string, string> | undefined;
2355
+ max?: Record<string, string> | undefined;
2356
+ defaultRequest?: Record<string, string> | undefined;
2357
+ } | undefined;
2358
+ } | undefined;
2359
+ }>>>;
2360
+ }, "strict", z.ZodTypeAny, {
2361
+ kubernetes?: {
2362
+ connections: {
2363
+ id: string;
2364
+ target: "byoc" | "managed";
2365
+ customers: string[];
2366
+ repositories: string[];
2367
+ credential: {
2368
+ kind: "kubeconfig" | "irsa";
2369
+ secretRef: string;
2370
+ };
2371
+ protectedNamespaces: string[];
2372
+ allowClusterScopedResources: boolean;
2373
+ allowedClusterScopedKinds: string[];
2374
+ nodeSelector: Record<string, string>;
2375
+ tolerations: {
2376
+ key?: string | undefined;
2377
+ operator?: "Exists" | "Equal" | undefined;
2378
+ value?: string | undefined;
2379
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2380
+ tolerationSeconds?: number | undefined;
2381
+ }[];
2382
+ context?: string | undefined;
2383
+ fidelityCaveat?: string | undefined;
2384
+ }[];
2385
+ defaults: {
2386
+ ttlMs: number;
2387
+ readinessTimeoutMs: number;
2388
+ resourceQuota: Record<string, string>;
2389
+ limitRange: {
2390
+ default: Record<string, string>;
2391
+ max: Record<string, string>;
2392
+ defaultRequest: Record<string, string>;
2393
+ };
2394
+ };
2395
+ } | undefined;
2396
+ }, {
2397
+ kubernetes?: {
2398
+ connections?: {
2399
+ id: string;
2400
+ credential: {
2401
+ kind: "kubeconfig" | "irsa";
2402
+ secretRef: string;
2403
+ };
2404
+ target?: "byoc" | "managed" | undefined;
2405
+ customers?: string[] | undefined;
2406
+ repositories?: string[] | undefined;
2407
+ context?: string | undefined;
2408
+ protectedNamespaces?: string[] | undefined;
2409
+ allowClusterScopedResources?: boolean | undefined;
2410
+ allowedClusterScopedKinds?: string[] | undefined;
2411
+ nodeSelector?: Record<string, string> | undefined;
2412
+ tolerations?: {
2413
+ key?: string | undefined;
2414
+ operator?: "Exists" | "Equal" | undefined;
2415
+ value?: string | undefined;
2416
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2417
+ tolerationSeconds?: number | undefined;
2418
+ }[] | undefined;
2419
+ fidelityCaveat?: string | undefined;
2420
+ }[] | undefined;
2421
+ defaults?: {
2422
+ ttlMs?: number | undefined;
2423
+ readinessTimeoutMs?: number | undefined;
2424
+ resourceQuota?: Record<string, string> | undefined;
2425
+ limitRange?: {
2426
+ default?: Record<string, string> | undefined;
2427
+ max?: Record<string, string> | undefined;
2428
+ defaultRequest?: Record<string, string> | undefined;
2429
+ } | undefined;
2430
+ } | undefined;
2431
+ } | undefined;
2432
+ }>>;
1091
2433
  } & {
1092
2434
  workspaceId: z.ZodOptional<z.ZodString>;
1093
2435
  capabilities: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
@@ -1096,6 +2438,91 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1096
2438
  dryRun: z.ZodDefault<z.ZodBoolean>;
1097
2439
  factoryLoopHeartbeatPath: z.ZodOptional<z.ZodString>;
1098
2440
  factoryLoopRegistryPath: z.ZodOptional<z.ZodString>;
2441
+ preview: z.ZodOptional<z.ZodEffects<z.ZodObject<{
2442
+ provider: z.ZodDefault<z.ZodLiteral<"tailscale-serve">>;
2443
+ access: z.ZodDefault<z.ZodLiteral<"tailnet">>;
2444
+ services: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
2445
+ /** Local HTTP port the repository's development server listens on. */
2446
+ port: z.ZodNumber;
2447
+ /** Consecutive node-local ports Factory may allocate for concurrent issues. */
2448
+ portSpan: z.ZodOptional<z.ZodNumber>;
2449
+ /** Optional stable tailnet HTTPS port; otherwise Factory allocates one. */
2450
+ httpsPort: z.ZodOptional<z.ZodNumber>;
2451
+ /** Foreground command Factory supervises for the issue-lifetime preview. */
2452
+ startCommand: z.ZodString;
2453
+ }, "strip", z.ZodTypeAny, {
2454
+ port: number;
2455
+ startCommand: string;
2456
+ portSpan?: number | undefined;
2457
+ httpsPort?: number | undefined;
2458
+ }, {
2459
+ port: number;
2460
+ startCommand: string;
2461
+ portSpan?: number | undefined;
2462
+ httpsPort?: number | undefined;
2463
+ }>, {
2464
+ port: number;
2465
+ startCommand: string;
2466
+ portSpan?: number | undefined;
2467
+ httpsPort?: number | undefined;
2468
+ }, {
2469
+ port: number;
2470
+ startCommand: string;
2471
+ portSpan?: number | undefined;
2472
+ httpsPort?: number | undefined;
2473
+ }>>>;
2474
+ tailscaleBinary: z.ZodDefault<z.ZodString>;
2475
+ registryPath: z.ZodDefault<z.ZodString>;
2476
+ httpsPortRange: z.ZodDefault<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
2477
+ }, "strip", z.ZodTypeAny, {
2478
+ registryPath: string;
2479
+ provider: "tailscale-serve";
2480
+ access: "tailnet";
2481
+ services: Record<string, {
2482
+ port: number;
2483
+ startCommand: string;
2484
+ portSpan?: number | undefined;
2485
+ httpsPort?: number | undefined;
2486
+ }>;
2487
+ tailscaleBinary: string;
2488
+ httpsPortRange: [number, number];
2489
+ }, {
2490
+ registryPath?: string | undefined;
2491
+ provider?: "tailscale-serve" | undefined;
2492
+ access?: "tailnet" | undefined;
2493
+ services?: Record<string, {
2494
+ port: number;
2495
+ startCommand: string;
2496
+ portSpan?: number | undefined;
2497
+ httpsPort?: number | undefined;
2498
+ }> | undefined;
2499
+ tailscaleBinary?: string | undefined;
2500
+ httpsPortRange?: [number, number] | undefined;
2501
+ }>, {
2502
+ registryPath: string;
2503
+ provider: "tailscale-serve";
2504
+ access: "tailnet";
2505
+ services: Record<string, {
2506
+ port: number;
2507
+ startCommand: string;
2508
+ portSpan?: number | undefined;
2509
+ httpsPort?: number | undefined;
2510
+ }>;
2511
+ tailscaleBinary: string;
2512
+ httpsPortRange: [number, number];
2513
+ }, {
2514
+ registryPath?: string | undefined;
2515
+ provider?: "tailscale-serve" | undefined;
2516
+ access?: "tailnet" | undefined;
2517
+ services?: Record<string, {
2518
+ port: number;
2519
+ startCommand: string;
2520
+ portSpan?: number | undefined;
2521
+ httpsPort?: number | undefined;
2522
+ }> | undefined;
2523
+ tailscaleBinary?: string | undefined;
2524
+ httpsPortRange?: [number, number] | undefined;
2525
+ }>>;
1099
2526
  }, "strip", z.ZodTypeAny, {
1100
2527
  clonePaths: Record<string, string>;
1101
2528
  triage: {
@@ -1137,9 +2564,9 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1137
2564
  repo: string;
1138
2565
  }[];
1139
2566
  clonePaths: Record<string, string>;
2567
+ default?: string | undefined;
1140
2568
  org?: string | undefined;
1141
2569
  names?: string[] | undefined;
1142
- default?: string | undefined;
1143
2570
  cloneRoot?: string | undefined;
1144
2571
  };
1145
2572
  models: {
@@ -1181,6 +2608,14 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1181
2608
  instanceName?: string | undefined;
1182
2609
  outboxPath?: string | undefined;
1183
2610
  };
2611
+ verification: {
2612
+ enabled: boolean;
2613
+ descriptorPath: string;
2614
+ maxConcurrentEnvironments: number;
2615
+ maxRunTimeoutMs: number;
2616
+ maxEnvironmentTtlMs: number;
2617
+ maxTeardownTimeoutMs: number;
2618
+ };
1184
2619
  terminalState: "done" | "human-review";
1185
2620
  stateIds: {
1186
2621
  readyForAgent?: string | undefined;
@@ -1194,6 +2629,43 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1194
2629
  requireLabel: string;
1195
2630
  requireTeamKey: string;
1196
2631
  };
2632
+ environments: {
2633
+ kubernetes?: {
2634
+ connections: {
2635
+ id: string;
2636
+ target: "byoc" | "managed";
2637
+ customers: string[];
2638
+ repositories: string[];
2639
+ credential: {
2640
+ kind: "kubeconfig" | "irsa";
2641
+ secretRef: string;
2642
+ };
2643
+ protectedNamespaces: string[];
2644
+ allowClusterScopedResources: boolean;
2645
+ allowedClusterScopedKinds: string[];
2646
+ nodeSelector: Record<string, string>;
2647
+ tolerations: {
2648
+ key?: string | undefined;
2649
+ operator?: "Exists" | "Equal" | undefined;
2650
+ value?: string | undefined;
2651
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2652
+ tolerationSeconds?: number | undefined;
2653
+ }[];
2654
+ context?: string | undefined;
2655
+ fidelityCaveat?: string | undefined;
2656
+ }[];
2657
+ defaults: {
2658
+ ttlMs: number;
2659
+ readinessTimeoutMs: number;
2660
+ resourceQuota: Record<string, string>;
2661
+ limitRange: {
2662
+ default: Record<string, string>;
2663
+ max: Record<string, string>;
2664
+ defaultRequest: Record<string, string>;
2665
+ };
2666
+ };
2667
+ } | undefined;
2668
+ };
1197
2669
  capabilities: string[];
1198
2670
  dryRun: boolean;
1199
2671
  cloneRoot?: string | undefined;
@@ -1207,10 +2679,24 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1207
2679
  conversationCoalesceMs: number;
1208
2680
  } | undefined;
1209
2681
  issueSource?: "linear" | "github" | undefined;
2682
+ preview?: {
2683
+ registryPath: string;
2684
+ provider: "tailscale-serve";
2685
+ access: "tailnet";
2686
+ services: Record<string, {
2687
+ port: number;
2688
+ startCommand: string;
2689
+ portSpan?: number | undefined;
2690
+ httpsPort?: number | undefined;
2691
+ }>;
2692
+ tailscaleBinary: string;
2693
+ httpsPortRange: [number, number];
2694
+ } | undefined;
1210
2695
  factoryLoopHeartbeatPath?: string | undefined;
1211
2696
  factoryLoopRegistryPath?: string | undefined;
1212
2697
  }, {
1213
2698
  repos: {
2699
+ default?: string | undefined;
1214
2700
  org?: string | undefined;
1215
2701
  names?: string[] | undefined;
1216
2702
  overrides?: Record<string, string> | undefined;
@@ -1220,7 +2706,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1220
2706
  pattern: string;
1221
2707
  repo: string;
1222
2708
  }[] | undefined;
1223
- default?: string | undefined;
1224
2709
  cloneRoot?: string | undefined;
1225
2710
  clonePaths?: Record<string, string> | undefined;
1226
2711
  };
@@ -1305,6 +2790,27 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1305
2790
  batchSize?: number | undefined;
1306
2791
  requestTimeoutMs?: number | undefined;
1307
2792
  } | undefined;
2793
+ preview?: {
2794
+ registryPath?: string | undefined;
2795
+ provider?: "tailscale-serve" | undefined;
2796
+ access?: "tailnet" | undefined;
2797
+ services?: Record<string, {
2798
+ port: number;
2799
+ startCommand: string;
2800
+ portSpan?: number | undefined;
2801
+ httpsPort?: number | undefined;
2802
+ }> | undefined;
2803
+ tailscaleBinary?: string | undefined;
2804
+ httpsPortRange?: [number, number] | undefined;
2805
+ } | undefined;
2806
+ verification?: {
2807
+ enabled?: boolean | undefined;
2808
+ descriptorPath?: string | undefined;
2809
+ maxConcurrentEnvironments?: number | undefined;
2810
+ maxRunTimeoutMs?: number | undefined;
2811
+ maxEnvironmentTtlMs?: number | undefined;
2812
+ maxTeardownTimeoutMs?: number | undefined;
2813
+ } | undefined;
1308
2814
  terminalState?: "done" | "human-review" | undefined;
1309
2815
  stateIds?: {
1310
2816
  readyForAgent?: string | undefined;
@@ -1318,6 +2824,43 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1318
2824
  requireLabel?: string | undefined;
1319
2825
  requireTeamKey?: string | undefined;
1320
2826
  } | undefined;
2827
+ environments?: {
2828
+ kubernetes?: {
2829
+ connections?: {
2830
+ id: string;
2831
+ credential: {
2832
+ kind: "kubeconfig" | "irsa";
2833
+ secretRef: string;
2834
+ };
2835
+ target?: "byoc" | "managed" | undefined;
2836
+ customers?: string[] | undefined;
2837
+ repositories?: string[] | undefined;
2838
+ context?: string | undefined;
2839
+ protectedNamespaces?: string[] | undefined;
2840
+ allowClusterScopedResources?: boolean | undefined;
2841
+ allowedClusterScopedKinds?: string[] | undefined;
2842
+ nodeSelector?: Record<string, string> | undefined;
2843
+ tolerations?: {
2844
+ key?: string | undefined;
2845
+ operator?: "Exists" | "Equal" | undefined;
2846
+ value?: string | undefined;
2847
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
2848
+ tolerationSeconds?: number | undefined;
2849
+ }[] | undefined;
2850
+ fidelityCaveat?: string | undefined;
2851
+ }[] | undefined;
2852
+ defaults?: {
2853
+ ttlMs?: number | undefined;
2854
+ readinessTimeoutMs?: number | undefined;
2855
+ resourceQuota?: Record<string, string> | undefined;
2856
+ limitRange?: {
2857
+ default?: Record<string, string> | undefined;
2858
+ max?: Record<string, string> | undefined;
2859
+ defaultRequest?: Record<string, string> | undefined;
2860
+ } | undefined;
2861
+ } | undefined;
2862
+ } | undefined;
2863
+ } | undefined;
1321
2864
  capabilities?: string[] | undefined;
1322
2865
  dryRun?: boolean | undefined;
1323
2866
  factoryLoopHeartbeatPath?: string | undefined;
@@ -1342,6 +2885,19 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1342
2885
  maxConsecutiveFailures: number;
1343
2886
  heartbeatStaleMs: number;
1344
2887
  };
2888
+ preview: {
2889
+ registryPath: string;
2890
+ provider: "tailscale-serve";
2891
+ access: "tailnet";
2892
+ services: Record<string, {
2893
+ port: number;
2894
+ startCommand: string;
2895
+ portSpan?: number | undefined;
2896
+ httpsPort?: number | undefined;
2897
+ }>;
2898
+ tailscaleBinary: string;
2899
+ httpsPortRange: [number, number];
2900
+ } | undefined;
1345
2901
  repos: {
1346
2902
  default?: string | undefined;
1347
2903
  byLabel: {
@@ -1414,6 +2970,14 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1414
2970
  instanceName?: string | undefined;
1415
2971
  outboxPath?: string | undefined;
1416
2972
  };
2973
+ verification: {
2974
+ enabled: boolean;
2975
+ descriptorPath: string;
2976
+ maxConcurrentEnvironments: number;
2977
+ maxRunTimeoutMs: number;
2978
+ maxEnvironmentTtlMs: number;
2979
+ maxTeardownTimeoutMs: number;
2980
+ };
1417
2981
  terminalState: "done" | "human-review";
1418
2982
  stateIds: {
1419
2983
  readyForAgent?: string | undefined;
@@ -1427,6 +2991,43 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1427
2991
  requireLabel: string;
1428
2992
  requireTeamKey: string;
1429
2993
  };
2994
+ environments: {
2995
+ kubernetes?: {
2996
+ connections: {
2997
+ id: string;
2998
+ target: "byoc" | "managed";
2999
+ customers: string[];
3000
+ repositories: string[];
3001
+ credential: {
3002
+ kind: "kubeconfig" | "irsa";
3003
+ secretRef: string;
3004
+ };
3005
+ protectedNamespaces: string[];
3006
+ allowClusterScopedResources: boolean;
3007
+ allowedClusterScopedKinds: string[];
3008
+ nodeSelector: Record<string, string>;
3009
+ tolerations: {
3010
+ key?: string | undefined;
3011
+ operator?: "Exists" | "Equal" | undefined;
3012
+ value?: string | undefined;
3013
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
3014
+ tolerationSeconds?: number | undefined;
3015
+ }[];
3016
+ context?: string | undefined;
3017
+ fidelityCaveat?: string | undefined;
3018
+ }[];
3019
+ defaults: {
3020
+ ttlMs: number;
3021
+ readinessTimeoutMs: number;
3022
+ resourceQuota: Record<string, string>;
3023
+ limitRange: {
3024
+ default: Record<string, string>;
3025
+ max: Record<string, string>;
3026
+ defaultRequest: Record<string, string>;
3027
+ };
3028
+ };
3029
+ } | undefined;
3030
+ };
1430
3031
  capabilities: string[];
1431
3032
  dryRun: boolean;
1432
3033
  workspaceId?: string | undefined;
@@ -1441,6 +3042,7 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1441
3042
  issueSource?: "linear" | "github" | undefined;
1442
3043
  }, {
1443
3044
  repos: {
3045
+ default?: string | undefined;
1444
3046
  org?: string | undefined;
1445
3047
  names?: string[] | undefined;
1446
3048
  overrides?: Record<string, string> | undefined;
@@ -1450,7 +3052,6 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1450
3052
  pattern: string;
1451
3053
  repo: string;
1452
3054
  }[] | undefined;
1453
- default?: string | undefined;
1454
3055
  cloneRoot?: string | undefined;
1455
3056
  clonePaths?: Record<string, string> | undefined;
1456
3057
  };
@@ -1535,6 +3136,27 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1535
3136
  batchSize?: number | undefined;
1536
3137
  requestTimeoutMs?: number | undefined;
1537
3138
  } | undefined;
3139
+ preview?: {
3140
+ registryPath?: string | undefined;
3141
+ provider?: "tailscale-serve" | undefined;
3142
+ access?: "tailnet" | undefined;
3143
+ services?: Record<string, {
3144
+ port: number;
3145
+ startCommand: string;
3146
+ portSpan?: number | undefined;
3147
+ httpsPort?: number | undefined;
3148
+ }> | undefined;
3149
+ tailscaleBinary?: string | undefined;
3150
+ httpsPortRange?: [number, number] | undefined;
3151
+ } | undefined;
3152
+ verification?: {
3153
+ enabled?: boolean | undefined;
3154
+ descriptorPath?: string | undefined;
3155
+ maxConcurrentEnvironments?: number | undefined;
3156
+ maxRunTimeoutMs?: number | undefined;
3157
+ maxEnvironmentTtlMs?: number | undefined;
3158
+ maxTeardownTimeoutMs?: number | undefined;
3159
+ } | undefined;
1538
3160
  terminalState?: "done" | "human-review" | undefined;
1539
3161
  stateIds?: {
1540
3162
  readyForAgent?: string | undefined;
@@ -1548,6 +3170,43 @@ export declare const FactoryConfigSchema: z.ZodEffects<z.ZodObject<{
1548
3170
  requireLabel?: string | undefined;
1549
3171
  requireTeamKey?: string | undefined;
1550
3172
  } | undefined;
3173
+ environments?: {
3174
+ kubernetes?: {
3175
+ connections?: {
3176
+ id: string;
3177
+ credential: {
3178
+ kind: "kubeconfig" | "irsa";
3179
+ secretRef: string;
3180
+ };
3181
+ target?: "byoc" | "managed" | undefined;
3182
+ customers?: string[] | undefined;
3183
+ repositories?: string[] | undefined;
3184
+ context?: string | undefined;
3185
+ protectedNamespaces?: string[] | undefined;
3186
+ allowClusterScopedResources?: boolean | undefined;
3187
+ allowedClusterScopedKinds?: string[] | undefined;
3188
+ nodeSelector?: Record<string, string> | undefined;
3189
+ tolerations?: {
3190
+ key?: string | undefined;
3191
+ operator?: "Exists" | "Equal" | undefined;
3192
+ value?: string | undefined;
3193
+ effect?: "NoSchedule" | "PreferNoSchedule" | "NoExecute" | undefined;
3194
+ tolerationSeconds?: number | undefined;
3195
+ }[] | undefined;
3196
+ fidelityCaveat?: string | undefined;
3197
+ }[] | undefined;
3198
+ defaults?: {
3199
+ ttlMs?: number | undefined;
3200
+ readinessTimeoutMs?: number | undefined;
3201
+ resourceQuota?: Record<string, string> | undefined;
3202
+ limitRange?: {
3203
+ default?: Record<string, string> | undefined;
3204
+ max?: Record<string, string> | undefined;
3205
+ defaultRequest?: Record<string, string> | undefined;
3206
+ } | undefined;
3207
+ } | undefined;
3208
+ } | undefined;
3209
+ } | undefined;
1551
3210
  capabilities?: string[] | undefined;
1552
3211
  dryRun?: boolean | undefined;
1553
3212
  factoryLoopHeartbeatPath?: string | undefined;
@@ -1564,4 +3223,6 @@ export declare function loadFactoryConfig(input: unknown): LoadedFactoryConfig;
1564
3223
  export type WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;
1565
3224
  export type NodeConfig = z.infer<typeof NodeConfigSchema>;
1566
3225
  export type FactoryConfig = z.infer<typeof FactoryConfigSchema>;
3226
+ export type PreviewConfig = NonNullable<FactoryConfig['preview']>;
3227
+ export type PreviewServiceConfig = PreviewConfig['services'][string];
1567
3228
  //# sourceMappingURL=schema.d.ts.map