@agent-relay/factory 0.1.50 → 0.1.52

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 (177) 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 +1362 -65
  131. package/dist/orchestrator/factory.js.map +1 -1
  132. package/dist/orchestrator/failure-classifier.d.ts +13 -0
  133. package/dist/orchestrator/failure-classifier.d.ts.map +1 -0
  134. package/dist/orchestrator/failure-classifier.js +14 -0
  135. package/dist/orchestrator/failure-classifier.js.map +1 -0
  136. package/dist/orchestrator/index.d.ts +2 -1
  137. package/dist/orchestrator/index.d.ts.map +1 -1
  138. package/dist/orchestrator/index.js +1 -1
  139. package/dist/orchestrator/index.js.map +1 -1
  140. package/dist/orchestrator/reaper.d.ts +24 -0
  141. package/dist/orchestrator/reaper.d.ts.map +1 -1
  142. package/dist/orchestrator/reaper.js +117 -0
  143. package/dist/orchestrator/reaper.js.map +1 -1
  144. package/dist/ports/environment.d.ts +83 -0
  145. package/dist/ports/environment.d.ts.map +1 -0
  146. package/dist/ports/environment.js +2 -0
  147. package/dist/ports/environment.js.map +1 -0
  148. package/dist/ports/fleet.d.ts +68 -1
  149. package/dist/ports/fleet.d.ts.map +1 -1
  150. package/dist/ports/index.d.ts +3 -2
  151. package/dist/ports/index.d.ts.map +1 -1
  152. package/dist/ports/mount.d.ts +9 -0
  153. package/dist/ports/mount.d.ts.map +1 -1
  154. package/dist/ports/state.d.ts +17 -1
  155. package/dist/ports/state.d.ts.map +1 -1
  156. package/dist/ports/worktree.d.ts +14 -0
  157. package/dist/ports/worktree.d.ts.map +1 -1
  158. package/dist/state/file-state-store.js +28 -1
  159. package/dist/state/file-state-store.js.map +1 -1
  160. package/dist/subscriptions/index.d.ts +2 -0
  161. package/dist/subscriptions/index.d.ts.map +1 -1
  162. package/dist/subscriptions/index.js +1 -0
  163. package/dist/subscriptions/index.js.map +1 -1
  164. package/dist/subscriptions/resource-subscriptions.d.ts +77 -0
  165. package/dist/subscriptions/resource-subscriptions.d.ts.map +1 -0
  166. package/dist/subscriptions/resource-subscriptions.js +91 -0
  167. package/dist/subscriptions/resource-subscriptions.js.map +1 -0
  168. package/dist/testing/fakes.d.ts +9 -1
  169. package/dist/testing/fakes.d.ts.map +1 -1
  170. package/dist/testing/fakes.js +40 -0
  171. package/dist/testing/fakes.js.map +1 -1
  172. package/dist/triage/schema.d.ts +32 -32
  173. package/dist/types.d.ts +4 -1
  174. package/dist/types.d.ts.map +1 -1
  175. package/package.json +18 -4
  176. package/schemas/kubernetes-environment-stack.schema.json +86 -0
  177. package/schemas/verification-stack.schema.json +292 -0
@@ -0,0 +1,294 @@
1
+ import { z } from 'zod';
2
+ export declare const LoadThresholdsSchema: z.ZodEffects<z.ZodObject<{
3
+ maxP95LatencyMs: z.ZodOptional<z.ZodNumber>;
4
+ maxP99LatencyMs: z.ZodOptional<z.ZodNumber>;
5
+ maxErrorRate: z.ZodOptional<z.ZodNumber>;
6
+ minThroughputRps: z.ZodOptional<z.ZodNumber>;
7
+ }, "strict", z.ZodTypeAny, {
8
+ maxP95LatencyMs?: number | undefined;
9
+ maxP99LatencyMs?: number | undefined;
10
+ maxErrorRate?: number | undefined;
11
+ minThroughputRps?: number | undefined;
12
+ }, {
13
+ maxP95LatencyMs?: number | undefined;
14
+ maxP99LatencyMs?: number | undefined;
15
+ maxErrorRate?: number | undefined;
16
+ minThroughputRps?: number | undefined;
17
+ }>, {
18
+ maxP95LatencyMs?: number | undefined;
19
+ maxP99LatencyMs?: number | undefined;
20
+ maxErrorRate?: number | undefined;
21
+ minThroughputRps?: number | undefined;
22
+ }, {
23
+ maxP95LatencyMs?: number | undefined;
24
+ maxP99LatencyMs?: number | undefined;
25
+ maxErrorRate?: number | undefined;
26
+ minThroughputRps?: number | undefined;
27
+ }>;
28
+ export type LoadThresholds = z.infer<typeof LoadThresholdsSchema>;
29
+ export declare const LoadTargetSchema: z.ZodEffects<z.ZodObject<{
30
+ name: z.ZodString;
31
+ endpoint: z.ZodOptional<z.ZodString>;
32
+ url: z.ZodOptional<z.ZodString>;
33
+ path: z.ZodOptional<z.ZodString>;
34
+ method: z.ZodDefault<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]>>;
35
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
36
+ body: z.ZodOptional<z.ZodUnknown>;
37
+ expectedStatuses: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
38
+ weight: z.ZodDefault<z.ZodNumber>;
39
+ }, "strict", z.ZodTypeAny, {
40
+ name: string;
41
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
42
+ weight: number;
43
+ path?: string | undefined;
44
+ url?: string | undefined;
45
+ body?: unknown;
46
+ endpoint?: string | undefined;
47
+ headers?: Record<string, string> | undefined;
48
+ expectedStatuses?: number[] | undefined;
49
+ }, {
50
+ name: string;
51
+ path?: string | undefined;
52
+ url?: string | undefined;
53
+ body?: unknown;
54
+ endpoint?: string | undefined;
55
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
56
+ headers?: Record<string, string> | undefined;
57
+ expectedStatuses?: number[] | undefined;
58
+ weight?: number | undefined;
59
+ }>, {
60
+ name: string;
61
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
62
+ weight: number;
63
+ path?: string | undefined;
64
+ url?: string | undefined;
65
+ body?: unknown;
66
+ endpoint?: string | undefined;
67
+ headers?: Record<string, string> | undefined;
68
+ expectedStatuses?: number[] | undefined;
69
+ }, {
70
+ name: string;
71
+ path?: string | undefined;
72
+ url?: string | undefined;
73
+ body?: unknown;
74
+ endpoint?: string | undefined;
75
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
76
+ headers?: Record<string, string> | undefined;
77
+ expectedStatuses?: number[] | undefined;
78
+ weight?: number | undefined;
79
+ }>;
80
+ export type LoadTarget = z.input<typeof LoadTargetSchema>;
81
+ export type ResolvedLoadTargetProfile = z.output<typeof LoadTargetSchema>;
82
+ export declare const LoadProfileSchema: z.ZodEffects<z.ZodObject<{
83
+ name: z.ZodString;
84
+ targets: z.ZodArray<z.ZodEffects<z.ZodObject<{
85
+ name: z.ZodString;
86
+ endpoint: z.ZodOptional<z.ZodString>;
87
+ url: z.ZodOptional<z.ZodString>;
88
+ path: z.ZodOptional<z.ZodString>;
89
+ method: z.ZodDefault<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]>>;
90
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
91
+ body: z.ZodOptional<z.ZodUnknown>;
92
+ expectedStatuses: z.ZodOptional<z.ZodArray<z.ZodNumber, "many">>;
93
+ weight: z.ZodDefault<z.ZodNumber>;
94
+ }, "strict", z.ZodTypeAny, {
95
+ name: string;
96
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
97
+ weight: number;
98
+ path?: string | undefined;
99
+ url?: string | undefined;
100
+ body?: unknown;
101
+ endpoint?: string | undefined;
102
+ headers?: Record<string, string> | undefined;
103
+ expectedStatuses?: number[] | undefined;
104
+ }, {
105
+ name: string;
106
+ path?: string | undefined;
107
+ url?: string | undefined;
108
+ body?: unknown;
109
+ endpoint?: string | undefined;
110
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
111
+ headers?: Record<string, string> | undefined;
112
+ expectedStatuses?: number[] | undefined;
113
+ weight?: number | undefined;
114
+ }>, {
115
+ name: string;
116
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
117
+ weight: number;
118
+ path?: string | undefined;
119
+ url?: string | undefined;
120
+ body?: unknown;
121
+ endpoint?: string | undefined;
122
+ headers?: Record<string, string> | undefined;
123
+ expectedStatuses?: number[] | undefined;
124
+ }, {
125
+ name: string;
126
+ path?: string | undefined;
127
+ url?: string | undefined;
128
+ body?: unknown;
129
+ endpoint?: string | undefined;
130
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
131
+ headers?: Record<string, string> | undefined;
132
+ expectedStatuses?: number[] | undefined;
133
+ weight?: number | undefined;
134
+ }>, "many">;
135
+ vus: z.ZodOptional<z.ZodNumber>;
136
+ maxVus: z.ZodOptional<z.ZodNumber>;
137
+ rps: z.ZodOptional<z.ZodNumber>;
138
+ duration: z.ZodEffects<z.ZodString, string, string>;
139
+ ramp: z.ZodOptional<z.ZodObject<{
140
+ up: z.ZodEffects<z.ZodString, string, string>;
141
+ down: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
142
+ }, "strict", z.ZodTypeAny, {
143
+ up: string;
144
+ down?: string | undefined;
145
+ }, {
146
+ up: string;
147
+ down?: string | undefined;
148
+ }>>;
149
+ thresholds: z.ZodEffects<z.ZodObject<{
150
+ maxP95LatencyMs: z.ZodOptional<z.ZodNumber>;
151
+ maxP99LatencyMs: z.ZodOptional<z.ZodNumber>;
152
+ maxErrorRate: z.ZodOptional<z.ZodNumber>;
153
+ minThroughputRps: z.ZodOptional<z.ZodNumber>;
154
+ }, "strict", z.ZodTypeAny, {
155
+ maxP95LatencyMs?: number | undefined;
156
+ maxP99LatencyMs?: number | undefined;
157
+ maxErrorRate?: number | undefined;
158
+ minThroughputRps?: number | undefined;
159
+ }, {
160
+ maxP95LatencyMs?: number | undefined;
161
+ maxP99LatencyMs?: number | undefined;
162
+ maxErrorRate?: number | undefined;
163
+ minThroughputRps?: number | undefined;
164
+ }>, {
165
+ maxP95LatencyMs?: number | undefined;
166
+ maxP99LatencyMs?: number | undefined;
167
+ maxErrorRate?: number | undefined;
168
+ minThroughputRps?: number | undefined;
169
+ }, {
170
+ maxP95LatencyMs?: number | undefined;
171
+ maxP99LatencyMs?: number | undefined;
172
+ maxErrorRate?: number | undefined;
173
+ minThroughputRps?: number | undefined;
174
+ }>;
175
+ histogramBucketsMs: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
176
+ }, "strict", z.ZodTypeAny, {
177
+ duration: string;
178
+ name: string;
179
+ targets: {
180
+ name: string;
181
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
182
+ weight: number;
183
+ path?: string | undefined;
184
+ url?: string | undefined;
185
+ body?: unknown;
186
+ endpoint?: string | undefined;
187
+ headers?: Record<string, string> | undefined;
188
+ expectedStatuses?: number[] | undefined;
189
+ }[];
190
+ thresholds: {
191
+ maxP95LatencyMs?: number | undefined;
192
+ maxP99LatencyMs?: number | undefined;
193
+ maxErrorRate?: number | undefined;
194
+ minThroughputRps?: number | undefined;
195
+ };
196
+ histogramBucketsMs: number[];
197
+ vus?: number | undefined;
198
+ maxVus?: number | undefined;
199
+ rps?: number | undefined;
200
+ ramp?: {
201
+ up: string;
202
+ down?: string | undefined;
203
+ } | undefined;
204
+ }, {
205
+ duration: string;
206
+ name: string;
207
+ targets: {
208
+ name: string;
209
+ path?: string | undefined;
210
+ url?: string | undefined;
211
+ body?: unknown;
212
+ endpoint?: string | undefined;
213
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
214
+ headers?: Record<string, string> | undefined;
215
+ expectedStatuses?: number[] | undefined;
216
+ weight?: number | undefined;
217
+ }[];
218
+ thresholds: {
219
+ maxP95LatencyMs?: number | undefined;
220
+ maxP99LatencyMs?: number | undefined;
221
+ maxErrorRate?: number | undefined;
222
+ minThroughputRps?: number | undefined;
223
+ };
224
+ vus?: number | undefined;
225
+ maxVus?: number | undefined;
226
+ rps?: number | undefined;
227
+ ramp?: {
228
+ up: string;
229
+ down?: string | undefined;
230
+ } | undefined;
231
+ histogramBucketsMs?: number[] | undefined;
232
+ }>, {
233
+ duration: string;
234
+ name: string;
235
+ targets: {
236
+ name: string;
237
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
238
+ weight: number;
239
+ path?: string | undefined;
240
+ url?: string | undefined;
241
+ body?: unknown;
242
+ endpoint?: string | undefined;
243
+ headers?: Record<string, string> | undefined;
244
+ expectedStatuses?: number[] | undefined;
245
+ }[];
246
+ thresholds: {
247
+ maxP95LatencyMs?: number | undefined;
248
+ maxP99LatencyMs?: number | undefined;
249
+ maxErrorRate?: number | undefined;
250
+ minThroughputRps?: number | undefined;
251
+ };
252
+ histogramBucketsMs: number[];
253
+ vus?: number | undefined;
254
+ maxVus?: number | undefined;
255
+ rps?: number | undefined;
256
+ ramp?: {
257
+ up: string;
258
+ down?: string | undefined;
259
+ } | undefined;
260
+ }, {
261
+ duration: string;
262
+ name: string;
263
+ targets: {
264
+ name: string;
265
+ path?: string | undefined;
266
+ url?: string | undefined;
267
+ body?: unknown;
268
+ endpoint?: string | undefined;
269
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS" | undefined;
270
+ headers?: Record<string, string> | undefined;
271
+ expectedStatuses?: number[] | undefined;
272
+ weight?: number | undefined;
273
+ }[];
274
+ thresholds: {
275
+ maxP95LatencyMs?: number | undefined;
276
+ maxP99LatencyMs?: number | undefined;
277
+ maxErrorRate?: number | undefined;
278
+ minThroughputRps?: number | undefined;
279
+ };
280
+ vus?: number | undefined;
281
+ maxVus?: number | undefined;
282
+ rps?: number | undefined;
283
+ ramp?: {
284
+ up: string;
285
+ down?: string | undefined;
286
+ } | undefined;
287
+ histogramBucketsMs?: number[] | undefined;
288
+ }>;
289
+ /** Declarative profile input. Schema defaults make method, weight, and histogram buckets optional. */
290
+ export type LoadProfile = z.input<typeof LoadProfileSchema>;
291
+ export type ResolvedLoadProfile = z.output<typeof LoadProfileSchema>;
292
+ export declare function loadLoadProfile(path: string): Promise<ResolvedLoadProfile>;
293
+ export declare function durationToMilliseconds(value: string): number;
294
+ //# sourceMappingURL=load-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-profile.d.ts","sourceRoot":"","sources":["../../src/environments/load-profile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyB3B,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAA;AACzD,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAEzE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsD5B,CAAA;AAEF,sGAAsG;AACtG,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEpE,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiBhF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW5D"}
@@ -0,0 +1,125 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { parse as parseYaml } from 'yaml';
3
+ import { z } from 'zod';
4
+ const duration = z.string().trim().regex(/^\d+(?:\.\d+)?(?:ms|s|m|h)$/u, 'must be a k6 duration such as 500ms, 30s, 5m, or 1h').refine((value) => !/^0+(?:\.0+)?(?:ms|s|m|h)$/u.test(value), 'must be greater than zero');
5
+ const positiveFinite = z.number().finite().positive();
6
+ const nonNegativeFinite = z.number().finite().nonnegative();
7
+ export const LoadThresholdsSchema = z.object({
8
+ maxP95LatencyMs: positiveFinite.optional(),
9
+ maxP99LatencyMs: positiveFinite.optional(),
10
+ maxErrorRate: z.number().finite().min(0).max(1).optional(),
11
+ minThroughputRps: nonNegativeFinite.optional(),
12
+ }).strict().refine((thresholds) => Object.values(thresholds).some((value) => value !== undefined), { message: 'at least one SLO threshold is required' });
13
+ export const LoadTargetSchema = z.object({
14
+ name: z.string().trim().min(1).max(80),
15
+ endpoint: z.string().trim().min(1).optional(),
16
+ url: z.string().url().optional(),
17
+ path: z.string().optional(),
18
+ method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']).default('GET'),
19
+ headers: z.record(z.string()).optional(),
20
+ body: z.unknown().optional(),
21
+ expectedStatuses: z.array(z.number().int().min(100).max(599)).min(1).optional(),
22
+ weight: z.number().int().positive().max(10_000).default(1),
23
+ }).strict().superRefine((target, context) => {
24
+ if ((target.endpoint === undefined) === (target.url === undefined)) {
25
+ context.addIssue({
26
+ code: z.ZodIssueCode.custom,
27
+ path: ['endpoint'],
28
+ message: 'set exactly one of endpoint or url',
29
+ });
30
+ }
31
+ if (target.url !== undefined && !/^https?:\/\//u.test(target.url)) {
32
+ context.addIssue({
33
+ code: z.ZodIssueCode.custom,
34
+ path: ['url'],
35
+ message: 'only http and https targets are supported',
36
+ });
37
+ }
38
+ });
39
+ export const LoadProfileSchema = z.object({
40
+ name: z.string().trim().min(1).max(80),
41
+ targets: z.array(LoadTargetSchema).min(1),
42
+ vus: z.number().int().positive().max(100_000).optional(),
43
+ maxVus: z.number().int().positive().max(100_000).optional(),
44
+ rps: z.number().int().positive().max(1_000_000).optional(),
45
+ duration,
46
+ ramp: z.object({
47
+ up: duration,
48
+ down: duration.optional(),
49
+ }).strict().optional(),
50
+ thresholds: LoadThresholdsSchema,
51
+ histogramBucketsMs: z.array(positiveFinite).min(1).max(50)
52
+ .default([1, 5, 10, 25, 50, 100, 250, 500, 1_000, 2_000, 5_000]),
53
+ }).strict().superRefine((profile, context) => {
54
+ if (profile.vus === undefined && profile.rps === undefined) {
55
+ context.addIssue({
56
+ code: z.ZodIssueCode.custom,
57
+ path: ['vus'],
58
+ message: 'set vus, rps, or both',
59
+ });
60
+ }
61
+ if (profile.maxVus !== undefined && profile.rps === undefined) {
62
+ context.addIssue({
63
+ code: z.ZodIssueCode.custom,
64
+ path: ['maxVus'],
65
+ message: 'maxVus is only used with an rps profile',
66
+ });
67
+ }
68
+ const preAllocatedVus = profile.rps === undefined
69
+ ? undefined
70
+ : (profile.vus ?? profile.rps);
71
+ if (profile.maxVus !== undefined && preAllocatedVus !== undefined && profile.maxVus < preAllocatedVus) {
72
+ context.addIssue({
73
+ code: z.ZodIssueCode.custom,
74
+ path: ['maxVus'],
75
+ message: 'maxVus must be greater than or equal to the preallocated vus',
76
+ });
77
+ }
78
+ const sortedBuckets = [...profile.histogramBucketsMs].sort((left, right) => left - right);
79
+ if (sortedBuckets.some((bucket, index) => bucket !== profile.histogramBucketsMs[index])) {
80
+ context.addIssue({
81
+ code: z.ZodIssueCode.custom,
82
+ path: ['histogramBucketsMs'],
83
+ message: 'histogram buckets must be in ascending order',
84
+ });
85
+ }
86
+ if (new Set(profile.histogramBucketsMs).size !== profile.histogramBucketsMs.length) {
87
+ context.addIssue({
88
+ code: z.ZodIssueCode.custom,
89
+ path: ['histogramBucketsMs'],
90
+ message: 'histogram buckets must be unique',
91
+ });
92
+ }
93
+ });
94
+ export async function loadLoadProfile(path) {
95
+ const source = await readFile(path, 'utf8');
96
+ let value;
97
+ try {
98
+ value = parseYaml(source);
99
+ }
100
+ catch (error) {
101
+ throw new Error(`Could not parse load profile ${path}: ${error instanceof Error ? error.message : String(error)}`);
102
+ }
103
+ const parsed = LoadProfileSchema.safeParse(value);
104
+ if (!parsed.success) {
105
+ const issues = parsed.error.issues
106
+ .map((issue) => `${issue.path.join('.') || '<root>'}: ${issue.message}`)
107
+ .join('; ');
108
+ throw new Error(`Invalid load profile ${path}: ${issues}`);
109
+ }
110
+ return parsed.data;
111
+ }
112
+ export function durationToMilliseconds(value) {
113
+ const match = /^(\d+(?:\.\d+)?)(ms|s|m|h)$/u.exec(value);
114
+ if (!match)
115
+ throw new Error(`Invalid duration: ${value}`);
116
+ const amount = Number(match[1]);
117
+ const multiplier = {
118
+ ms: 1,
119
+ s: 1_000,
120
+ m: 60_000,
121
+ h: 3_600_000,
122
+ }[match[2]];
123
+ return amount * multiplier;
124
+ }
125
+ //# sourceMappingURL=load-profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-profile.js","sourceRoot":"","sources":["../../src/environments/load-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Environment } from '../ports/environment.js';
2
+ import type { KubernetesEnvironmentProvider } from './kubernetes-provider.js';
3
+ import { type KubernetesStackDescriptorInput } from './stack-descriptor.js';
4
+ export interface DeployKubernetesStackInput {
5
+ customerId: string;
6
+ repository: string;
7
+ ownerId: string;
8
+ repoRoot: string;
9
+ ttl?: number;
10
+ }
11
+ /**
12
+ * Substrate-neutral callers select a descriptor; this deployer routes the
13
+ * Kubernetes kind and preserves its explicit BYOC/managed target.
14
+ */
15
+ export declare class StackDeployer {
16
+ #private;
17
+ constructor(providers: {
18
+ kubernetes: KubernetesEnvironmentProvider;
19
+ });
20
+ deploy(descriptorInput: KubernetesStackDescriptorInput, input: DeployKubernetesStackInput): Promise<Environment>;
21
+ }
22
+ //# sourceMappingURL=stack-deployer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-deployer.d.ts","sourceRoot":"","sources":["../../src/environments/stack-deployer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,6BAA6B,EAA2B,MAAM,0BAA0B,CAAA;AACtG,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,uBAAuB,CAAA;AAE9B,MAAM,WAAW,0BAA0B;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,qBAAa,aAAa;;gBAGZ,SAAS,EAAE;QAAE,UAAU,EAAE,6BAA6B,CAAA;KAAE;IAI9D,MAAM,CACV,eAAe,EAAE,8BAA8B,EAC/C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC,WAAW,CAAC;CAexB"}
@@ -0,0 +1,27 @@
1
+ import { KubernetesStackDescriptorSchema, } from './stack-descriptor.js';
2
+ /**
3
+ * Substrate-neutral callers select a descriptor; this deployer routes the
4
+ * Kubernetes kind and preserves its explicit BYOC/managed target.
5
+ */
6
+ export class StackDeployer {
7
+ #kubernetes;
8
+ constructor(providers) {
9
+ this.#kubernetes = providers.kubernetes;
10
+ }
11
+ async deploy(descriptorInput, input) {
12
+ const descriptor = KubernetesStackDescriptorSchema.parse(descriptorInput);
13
+ const spec = {
14
+ customerId: input.customerId,
15
+ repository: input.repository,
16
+ ownerId: input.ownerId,
17
+ ...(input.ttl === undefined ? {} : { ttl: input.ttl }),
18
+ target: descriptor.target,
19
+ stack: {
20
+ descriptor,
21
+ repoRoot: input.repoRoot,
22
+ },
23
+ };
24
+ return await this.#kubernetes.provision(spec);
25
+ }
26
+ }
27
+ //# sourceMappingURL=stack-deployer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack-deployer.js","sourceRoot":"","sources":["../../src/environments/stack-deployer.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,+BAA+B,GAEhC,MAAM,uBAAuB,CAAA;AAU9B;;;GAGG;AACH,MAAM,OAAO,aAAa;IACf,WAAW,CAA+B;IAEnD,YAAY,SAAwD;QAClE,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,UAAU,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CACV,eAA+C,EAC/C,KAAiC;QAEjC,MAAM,UAAU,GAAG,+BAA+B,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;QACzE,MAAM,IAAI,GAA4B;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;YACtD,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,KAAK,EAAE;gBACL,UAAU;gBACV,QAAQ,EAAE,KAAK,CAAC,QAAQ;aACzB;SACF,CAAA;QACD,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC/C,CAAC;CACF"}