@namzu/sandbox 14.0.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/CHANGELOG.md +924 -0
  2. package/README.md +369 -14
  3. package/dist/backends/aci-standby-pool/index.d.ts.map +1 -1
  4. package/dist/backends/aci-standby-pool/index.js +13 -1
  5. package/dist/backends/aci-standby-pool/index.js.map +1 -1
  6. package/dist/backends/docker/index.d.ts +169 -6
  7. package/dist/backends/docker/index.d.ts.map +1 -1
  8. package/dist/backends/docker/index.js +499 -85
  9. package/dist/backends/docker/index.js.map +1 -1
  10. package/dist/backends/firecracker/index.d.ts.map +1 -1
  11. package/dist/backends/firecracker/index.js +12 -2
  12. package/dist/backends/firecracker/index.js.map +1 -1
  13. package/dist/backends/firecracker/protocol.d.ts +459 -8
  14. package/dist/backends/firecracker/protocol.d.ts.map +1 -1
  15. package/dist/backends/firecracker/protocol.js +136 -0
  16. package/dist/backends/firecracker/protocol.js.map +1 -1
  17. package/dist/backends/firecracker/transport.d.ts +539 -6
  18. package/dist/backends/firecracker/transport.d.ts.map +1 -1
  19. package/dist/backends/firecracker/transport.js +1171 -24
  20. package/dist/backends/firecracker/transport.js.map +1 -1
  21. package/dist/backends/kubernetes/egress-policy.d.ts +1181 -13
  22. package/dist/backends/kubernetes/egress-policy.d.ts.map +1 -1
  23. package/dist/backends/kubernetes/egress-policy.js +2350 -31
  24. package/dist/backends/kubernetes/egress-policy.js.map +1 -1
  25. package/dist/backends/kubernetes/identity.d.ts +193 -0
  26. package/dist/backends/kubernetes/identity.d.ts.map +1 -0
  27. package/dist/backends/kubernetes/identity.js +147 -0
  28. package/dist/backends/kubernetes/identity.js.map +1 -0
  29. package/dist/backends/kubernetes/index.d.ts +678 -33
  30. package/dist/backends/kubernetes/index.d.ts.map +1 -1
  31. package/dist/backends/kubernetes/index.js +1180 -95
  32. package/dist/backends/kubernetes/index.js.map +1 -1
  33. package/dist/backends/kubernetes/ingress-policy.d.ts +375 -0
  34. package/dist/backends/kubernetes/ingress-policy.d.ts.map +1 -0
  35. package/dist/backends/kubernetes/ingress-policy.js +1050 -0
  36. package/dist/backends/kubernetes/ingress-policy.js.map +1 -0
  37. package/dist/backends/kubernetes/k8s-client.d.ts +213 -4
  38. package/dist/backends/kubernetes/k8s-client.d.ts.map +1 -1
  39. package/dist/backends/kubernetes/k8s-client.js +359 -52
  40. package/dist/backends/kubernetes/k8s-client.js.map +1 -1
  41. package/dist/backends/kubernetes/lease.d.ts +40 -14
  42. package/dist/backends/kubernetes/lease.d.ts.map +1 -1
  43. package/dist/backends/kubernetes/lease.js +68 -18
  44. package/dist/backends/kubernetes/lease.js.map +1 -1
  45. package/dist/backends/kubernetes/objects.d.ts +423 -3
  46. package/dist/backends/kubernetes/objects.d.ts.map +1 -1
  47. package/dist/backends/kubernetes/objects.js +364 -2
  48. package/dist/backends/kubernetes/objects.js.map +1 -1
  49. package/dist/backends/kubernetes/per-sandbox-policy.d.ts +219 -0
  50. package/dist/backends/kubernetes/per-sandbox-policy.d.ts.map +1 -0
  51. package/dist/backends/kubernetes/per-sandbox-policy.js +375 -0
  52. package/dist/backends/kubernetes/per-sandbox-policy.js.map +1 -0
  53. package/dist/backends/kubernetes/rbac.d.ts +153 -0
  54. package/dist/backends/kubernetes/rbac.d.ts.map +1 -0
  55. package/dist/backends/kubernetes/rbac.js +177 -0
  56. package/dist/backends/kubernetes/rbac.js.map +1 -0
  57. package/dist/backends/kubernetes/sandbox.d.ts +81 -14
  58. package/dist/backends/kubernetes/sandbox.d.ts.map +1 -1
  59. package/dist/backends/kubernetes/sandbox.js +149 -15
  60. package/dist/backends/kubernetes/sandbox.js.map +1 -1
  61. package/dist/backends/kubernetes/transport.d.ts +935 -9
  62. package/dist/backends/kubernetes/transport.d.ts.map +1 -1
  63. package/dist/backends/kubernetes/transport.js +1958 -62
  64. package/dist/backends/kubernetes/transport.js.map +1 -1
  65. package/dist/backends/kubernetes/workspace.d.ts +1149 -18
  66. package/dist/backends/kubernetes/workspace.d.ts.map +1 -1
  67. package/dist/backends/kubernetes/workspace.js +2825 -186
  68. package/dist/backends/kubernetes/workspace.js.map +1 -1
  69. package/dist/backends/remote-execution-controller.d.ts +14 -0
  70. package/dist/backends/remote-execution-controller.d.ts.map +1 -1
  71. package/dist/backends/remote-execution-controller.js.map +1 -1
  72. package/dist/index.d.ts +294 -18
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +280 -10
  75. package/dist/index.js.map +1 -1
  76. package/dist/testing/sandbox-conformance.d.ts +39 -5
  77. package/dist/testing/sandbox-conformance.d.ts.map +1 -1
  78. package/dist/testing/sandbox-conformance.js +436 -5
  79. package/dist/testing/sandbox-conformance.js.map +1 -1
  80. package/package.json +3 -3
  81. package/src/backends/aci-standby-pool/index.ts +16 -1
  82. package/src/backends/docker/index.ts +617 -100
  83. package/src/backends/firecracker/index.ts +14 -2
  84. package/src/backends/firecracker/protocol.ts +514 -6
  85. package/src/backends/firecracker/transport.ts +1492 -40
  86. package/src/backends/kubernetes/egress-policy.ts +3334 -55
  87. package/src/backends/kubernetes/identity.ts +261 -0
  88. package/src/backends/kubernetes/index.ts +1785 -127
  89. package/src/backends/kubernetes/ingress-policy.ts +1344 -0
  90. package/src/backends/kubernetes/k8s-client.ts +444 -54
  91. package/src/backends/kubernetes/lease.ts +75 -19
  92. package/src/backends/kubernetes/objects.ts +626 -6
  93. package/src/backends/kubernetes/per-sandbox-policy.ts +497 -0
  94. package/src/backends/kubernetes/rbac.ts +192 -0
  95. package/src/backends/kubernetes/sandbox.ts +218 -20
  96. package/src/backends/kubernetes/transport.ts +2733 -124
  97. package/src/backends/kubernetes/workspace.ts +4476 -222
  98. package/src/backends/remote-execution-controller.ts +14 -0
  99. package/src/index.ts +668 -19
  100. package/src/testing/sandbox-conformance.ts +540 -5
@@ -1 +1 @@
1
- {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/backends/kubernetes/objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objects.d.ts","sourceRoot":"","sources":["../../../src/backends/kubernetes/objects.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@
21
21
  * - `extensions.agents.x-k8s.io` → sandboxtemplates, sandboxwarmpools,
22
22
  * sandboxclaims
23
23
  */
24
+ import { createHash } from 'node:crypto';
24
25
  /** Group serving the `Sandbox` kind. */
25
26
  export const SANDBOX_API_GROUP = 'agents.x-k8s.io';
26
27
  /** Group serving `SandboxTemplate`, `SandboxWarmPool` and `SandboxClaim`. */
@@ -37,6 +38,17 @@ export const READY_CONDITION = 'Ready';
37
38
  export function isConditionTrue(conditions, type) {
38
39
  return conditions?.some((c) => c.type === type && c.status === 'True') === true;
39
40
  }
41
+ /** The pod's own address, whichever of the two fields this cluster fills. */
42
+ export function readPodIP(pod) {
43
+ const status = pod?.status;
44
+ if (typeof status?.podIP === 'string' && status.podIP !== '')
45
+ return status.podIP;
46
+ for (const entry of status?.podIPs ?? []) {
47
+ if (typeof entry?.ip === 'string' && entry.ip !== '')
48
+ return entry.ip;
49
+ }
50
+ return undefined;
51
+ }
40
52
  /**
41
53
  * A pod whose uid is still worth binding to: not being deleted, and not in a
42
54
  * phase it cannot leave.
@@ -109,6 +121,307 @@ export function isPodStopped(pod) {
109
121
  * `docs/sdk/kubernetes-sandbox.md`'s egress section.
110
122
  */
111
123
  export const SANDBOX_TEMPLATE_LABEL_KEY = 'sandbox.namzu.ai/template';
124
+ /**
125
+ * Backend-owned annotation naming when a Sandbox's `spec.operatingMode` was
126
+ * last changed BY THIS BACKEND, RFC 3339.
127
+ *
128
+ * It exists because nothing already on the object answers the question, and
129
+ * an inventory that never wakes a workspace is the reason to ask it: a
130
+ * retention pass deleting the workspaces nobody has resumed for a month reads
131
+ * this and `metadata.creationTimestamp` and nothing else.
132
+ *
133
+ * The obvious candidate is the controller's own `Suspended` condition and its
134
+ * `lastTransitionTime`, and upstream's `sandbox_types.go` rules it out in the
135
+ * same breath it documents it: "the controller does not currently remove this
136
+ * condition when the Sandbox is resumed", so after a resume the condition is
137
+ * still True and its timestamp still names the suspend that preceded it. The
138
+ * `Ready` condition's timestamp is no better — it moves for every pod that
139
+ * comes and goes, a crash-restart included, and a workspace whose pod
140
+ * restarted has not changed operating mode at all.
141
+ *
142
+ * So the two patches that DO change the mode stamp the moment they were sent,
143
+ * and the value is exactly that: the host's clock at the moment it asked, not
144
+ * the cluster's at the moment it applied. It is an inventory column, never a
145
+ * lock or an ordering, and nothing in this backend reads it back to make a
146
+ * decision. A Sandbox whose mode has never been changed since it was created
147
+ * carries no annotation at all, and is reported without one rather than with
148
+ * a guess.
149
+ *
150
+ * Same prefix as {@link SANDBOX_TEMPLATE_LABEL_KEY}, for the same reason.
151
+ */
152
+ export const OPERATING_MODE_CHANGED_AT_ANNOTATION_KEY = 'sandbox.namzu.ai/operating-mode-changed-at';
153
+ /**
154
+ * Backend-owned annotation carrying the HOLDER EPOCH: a decimal integer the
155
+ * host raises whenever authority over this workspace moves to another
156
+ * process.
157
+ *
158
+ * A workspace id is a name, not a lock, and a host that drives one workspace
159
+ * from more than one process has to decide which of them may suspend, resume
160
+ * or delete it. Checking its own epoch and then calling `suspend()` does not
161
+ * close the race, because the write that follows is a separate request and
162
+ * the API server accepts it. So the epoch is stored HERE, on the object every
163
+ * lifecycle write targets, and every such write carries it as a condition in
164
+ * the same request — see {@link buildHolderEpochPatch}.
165
+ *
166
+ * The rule: a write carrying epoch `e` applies when the stored epoch is `<=
167
+ * e`, and sets the stored epoch to `e` in the same request. A stored epoch
168
+ * greater than `e` refuses it. An object with NO annotation reads as 0, so
169
+ * every workspace created before this existed accepts its first
170
+ * epoch-carrying write.
171
+ *
172
+ * It is the caller's number, never this backend's: nothing here invents,
173
+ * increments or persists an epoch of its own, and a call that passes none
174
+ * sends exactly the requests it always sent.
175
+ *
176
+ * Same prefix as {@link SANDBOX_TEMPLATE_LABEL_KEY} and
177
+ * {@link OPERATING_MODE_CHANGED_AT_ANNOTATION_KEY}, for the same reason.
178
+ */
179
+ export const HOLDER_EPOCH_ANNOTATION_KEY = 'sandbox.namzu.ai/holder-epoch';
180
+ /**
181
+ * Backend-owned annotation carrying a hash of the pod template a Sandbox was
182
+ * last built with.
183
+ *
184
+ * A Sandbox's `spec.podTemplate` is a COPY of the SandboxTemplate's, taken
185
+ * once, and the controller rebuilds every replacement pod from that copy
186
+ * rather than from the template — so a workspace kept for weeks runs the pod
187
+ * spec it was created with, and an edit to the template (a new image tag, a
188
+ * memory limit, a grace period, an env entry) reaches only workspaces created
189
+ * after it. Nothing on the object answers "is this copy still the template's
190
+ * current one": the two are separate objects with separate
191
+ * `resourceVersion`s, and comparing the templates field by field on every
192
+ * open would be a second, weaker copy of the overlay rules.
193
+ *
194
+ * So the value is a hash of exactly what was written: the template's
195
+ * `podTemplate` AFTER this backend's own overlays (the template label and the
196
+ * configured `runtimeClassName`), which is the object the Sandbox carries.
197
+ * Hashing before the overlays would report drift on every workspace whose
198
+ * RuntimeClass this backend chose.
199
+ *
200
+ * Written by the workspace paths only — the create POST and the refresh patch
201
+ * — and read back as `templateRevision` on a handle. A task sandbox is
202
+ * ephemeral and has nothing to drift from, so its create body is unchanged.
203
+ * A workspace created before this existed carries no annotation and reports
204
+ * `templateRevision: undefined`, which reads honestly as "unknown", never as
205
+ * "current".
206
+ *
207
+ * Same prefix as {@link SANDBOX_TEMPLATE_LABEL_KEY}, for the same reason.
208
+ */
209
+ export const POD_TEMPLATE_HASH_ANNOTATION_KEY = 'sandbox.namzu.ai/pod-template-hash';
210
+ /** Object keys in code-unit order, so the hash does not depend on a locale. */
211
+ function compareKeys(left, right) {
212
+ if (left < right)
213
+ return -1;
214
+ return left > right ? 1 : 0;
215
+ }
216
+ /**
217
+ * The same JSON with its object keys sorted, recursively.
218
+ *
219
+ * `JSON.stringify` preserves insertion order, and the two pod templates this
220
+ * hash has to compare never have the same one: one comes back from the API
221
+ * server's own serialisation of a stored object and the other is built here
222
+ * by spreading a template's members into a fresh object. Without this, every
223
+ * comparison would report drift that does not exist.
224
+ */
225
+ function canonicalJson(value) {
226
+ if (Array.isArray(value))
227
+ return value.map(canonicalJson);
228
+ if (typeof value !== 'object' || value === null)
229
+ return value;
230
+ const canonical = {};
231
+ for (const key of Object.keys(value).sort(compareKeys)) {
232
+ const member = value[key];
233
+ if (member === undefined)
234
+ continue;
235
+ canonical[key] = canonicalJson(member);
236
+ }
237
+ return canonical;
238
+ }
239
+ /**
240
+ * `sha256:<hex>` over the pod template, for
241
+ * {@link POD_TEMPLATE_HASH_ANNOTATION_KEY}.
242
+ *
243
+ * It is an identity, not a checksum of anything security-relevant: two hosts
244
+ * running the same release against the same template must compute the same
245
+ * string, and a template edit must change it. Nothing here compares it
246
+ * against a value an untrusted party chose.
247
+ */
248
+ export function podTemplateHash(podTemplate) {
249
+ const digest = createHash('sha256')
250
+ .update(JSON.stringify(canonicalJson(podTemplate)))
251
+ .digest('hex');
252
+ return `sha256:${digest}`;
253
+ }
254
+ /**
255
+ * One JSON Pointer reference token (RFC 6901 §3): `~` becomes `~0` and `/`
256
+ * becomes `~1`, in that order — the reverse order would turn a literal `~1`
257
+ * into a slash.
258
+ *
259
+ * An annotation key always contains a `/` (`sandbox.namzu.ai/holder-epoch`),
260
+ * so the pointer to one is unusable without this.
261
+ */
262
+ export function escapeJsonPointerSegment(token) {
263
+ return token.replace(/~/g, '~0').replace(/\//g, '~1');
264
+ }
265
+ /** Pointer to one annotation on an object's own metadata. */
266
+ export function annotationPointer(key) {
267
+ return `/metadata/annotations/${escapeJsonPointerSegment(key)}`;
268
+ }
269
+ /** Decimal, no sign, no padding, no exponent — what this backend writes. */
270
+ const HOLDER_EPOCH_PATTERN = /^(?:0|[1-9][0-9]*)$/;
271
+ /** Read {@link HOLDER_EPOCH_ANNOTATION_KEY} off an object's metadata. */
272
+ export function readHolderEpoch(meta) {
273
+ const annotations = meta?.annotations;
274
+ const resourceVersion = typeof meta?.resourceVersion === 'string' && meta.resourceVersion !== ''
275
+ ? meta.resourceVersion
276
+ : undefined;
277
+ const stored = annotations?.[HOLDER_EPOCH_ANNOTATION_KEY];
278
+ const base = {
279
+ hasAnnotations: annotations !== undefined,
280
+ ...(resourceVersion !== undefined ? { resourceVersion } : {}),
281
+ };
282
+ if (typeof stored !== 'string')
283
+ return { ...base, epoch: 0 };
284
+ if (!HOLDER_EPOCH_PATTERN.test(stored))
285
+ return { ...base, annotation: stored };
286
+ const parsed = Number(stored);
287
+ if (!Number.isSafeInteger(parsed))
288
+ return { ...base, annotation: stored };
289
+ return { ...base, epoch: parsed, annotation: stored };
290
+ }
291
+ /**
292
+ * Read {@link POD_TEMPLATE_HASH_ANNOTATION_KEY} off an object's metadata.
293
+ *
294
+ * Absent — an object created before this existed, or one an older release
295
+ * refreshed — is `undefined`, which reads as "unknown" everywhere it is
296
+ * consumed. It is deliberately never compared as an empty string: a
297
+ * revision nobody recorded is not a revision that differs.
298
+ */
299
+ export function readPodTemplateHash(meta) {
300
+ const stored = meta?.annotations?.[POD_TEMPLATE_HASH_ANNOTATION_KEY];
301
+ return typeof stored === 'string' && stored !== '' ? stored : undefined;
302
+ }
303
+ /** A stored epoch of `epoch` or lower lets a write carrying `epoch` through. */
304
+ export function holderEpochAllows(reading, epoch) {
305
+ return reading.epoch !== undefined && reading.epoch <= epoch;
306
+ }
307
+ /**
308
+ * The one conditional-write builder this backend has, and the only place a
309
+ * JSON Patch body is composed.
310
+ *
311
+ * Every clause is decided from ONE read, and the whole thing goes up as one
312
+ * request: the condition and the mutation are in the same body, so there is
313
+ * no window between checking and writing for another holder to fit into.
314
+ *
315
+ * Three shapes, decided by what that read saw:
316
+ *
317
+ * - the object carries the epoch annotation ⇒ `test` it by its exact stored
318
+ * string, then `add` the new value over it;
319
+ * - the object carries annotations but not this one ⇒ `test`
320
+ * `/metadata/resourceVersion` instead, then `add` the member;
321
+ * - the object carries no `metadata.annotations` at all ⇒ the same
322
+ * `resourceVersion` test, then `add` the map whole, because there is no
323
+ * member to add one to.
324
+ *
325
+ * The `resourceVersion` fallback is the migration case and nothing more: it
326
+ * fires once, on a workspace created before this release, and from the first
327
+ * epoch write onwards the annotation is what is tested. That matters because
328
+ * a controller status write moves `resourceVersion` without touching the
329
+ * annotation, and under the annotation test those are simply not conditions
330
+ * this write is interested in.
331
+ *
332
+ * A call carrying NO epoch skips all three: it tests only what
333
+ * {@link HolderEpochPatchInput.tests} carries and writes no epoch annotation,
334
+ * which is how a workspace refresh conditions itself on `spec.operatingMode`
335
+ * without fencing a host that never asked for a fence.
336
+ *
337
+ * Every `test` precedes every mutation, which RFC 6902 requires of a
338
+ * condition: operations apply in order, so a `test` written after an `add`
339
+ * would be testing this patch's own work. Mutations go up in a fixed order —
340
+ * annotations, then `spec.podTemplate`, then `spec.operatingMode` — so the
341
+ * body a given input produces is one body and a test can assert it.
342
+ */
343
+ export function buildHolderEpochPatch(input) {
344
+ const { reading, epoch } = input;
345
+ const epochPointer = annotationPointer(HOLDER_EPOCH_ANNOTATION_KEY);
346
+ const tests = [];
347
+ if (epoch === undefined) {
348
+ // Unfenced: the caller's own clauses are the whole condition, and an
349
+ // unconditional JSON patch is refused rather than sent. Every caller
350
+ // on this branch is conditioning on something — a refresh on
351
+ // `spec.operatingMode` — and one that passed nothing would be asking
352
+ // for a blind write in the one builder that exists to prevent them.
353
+ if ((input.tests ?? []).length === 0) {
354
+ throw new Error('kubernetes: cannot build a conditional patch that carries neither a holder epoch nor a test clause — there is nothing to condition the write on.');
355
+ }
356
+ }
357
+ else if (reading.annotation !== undefined) {
358
+ tests.push({ op: 'test', path: epochPointer, value: reading.annotation });
359
+ }
360
+ else if (reading.resourceVersion !== undefined) {
361
+ tests.push({ op: 'test', path: '/metadata/resourceVersion', value: reading.resourceVersion });
362
+ }
363
+ else {
364
+ // Unreachable from every call site here — each one builds from an
365
+ // object it just read, and the API server sets `resourceVersion` on
366
+ // every object it serves. It throws rather than sending an
367
+ // UNCONDITIONAL patch, because a fenced write that quietly stopped
368
+ // being fenced is the defect this whole path exists to prevent.
369
+ throw new Error('kubernetes: cannot build a holder-epoch patch from an object that carries neither the holder-epoch annotation nor a metadata.resourceVersion — there is nothing to condition the write on.');
370
+ }
371
+ tests.push(...(input.tests ?? []));
372
+ const mutations = [];
373
+ // Every annotation this body writes, in one place: the epoch when the
374
+ // write is fenced, the mode stamp when the mode moves, and whatever else
375
+ // the caller is landing atomically with them.
376
+ const annotations = {
377
+ ...(epoch !== undefined ? { [HOLDER_EPOCH_ANNOTATION_KEY]: String(epoch) } : {}),
378
+ ...(input.operatingModeChangedAt !== undefined
379
+ ? { [OPERATING_MODE_CHANGED_AT_ANNOTATION_KEY]: input.operatingModeChangedAt }
380
+ : {}),
381
+ ...input.annotations,
382
+ };
383
+ const keys = Object.keys(annotations);
384
+ if (keys.length > 0) {
385
+ if (!reading.hasAnnotations) {
386
+ // No member to add one to, so the map goes up whole — and a whole
387
+ // map REPLACES whatever is there, so this one operation is the only
388
+ // mutation in this builder that can erase another writer's work.
389
+ // The window is real: between the GET that saw no annotations and
390
+ // this patch, another process can stamp one without moving
391
+ // `spec.operatingMode` — a suspend carrying a holder epoch onto an
392
+ // already-Suspended object does exactly that — and an unconditional
393
+ // whole-map `add` would silently unfence the workspace it took.
394
+ // `resourceVersion` is what closes it. The fenced path already
395
+ // tests it on this branch (an object with no annotations has no
396
+ // epoch annotation to test); this adds the same clause for an
397
+ // UNFENCED caller, whose own clauses are about `spec` and say
398
+ // nothing about `metadata`.
399
+ if (!tests.some((test) => test.path === '/metadata/resourceVersion')) {
400
+ if (reading.resourceVersion === undefined) {
401
+ throw new Error('kubernetes: cannot add a metadata.annotations map to an object that carries no metadata.resourceVersion — a whole-map write with nothing to condition it on would overwrite annotations written since the read.');
402
+ }
403
+ tests.push({
404
+ op: 'test',
405
+ path: '/metadata/resourceVersion',
406
+ value: reading.resourceVersion,
407
+ });
408
+ }
409
+ mutations.push({ op: 'add', path: '/metadata/annotations', value: annotations });
410
+ }
411
+ else {
412
+ for (const key of keys) {
413
+ mutations.push({ op: 'add', path: annotationPointer(key), value: annotations[key] });
414
+ }
415
+ }
416
+ }
417
+ if (input.podTemplate !== undefined) {
418
+ mutations.push({ op: 'add', path: '/spec/podTemplate', value: input.podTemplate });
419
+ }
420
+ if (input.operatingMode !== undefined) {
421
+ mutations.push({ op: 'add', path: '/spec/operatingMode', value: input.operatingMode });
422
+ }
423
+ return [...tests, ...mutations];
424
+ }
112
425
  /** `{ [SANDBOX_TEMPLATE_LABEL_KEY]: sandboxTemplateName }`, as a matchLabels-ready object. */
113
426
  export function sandboxTemplateLabel(sandboxTemplateName) {
114
427
  return { [SANDBOX_TEMPLATE_LABEL_KEY]: sandboxTemplateName };
@@ -132,6 +445,13 @@ export function claimCollectionPath(namespace) {
132
445
  export function claimPath(namespace, name) {
133
446
  return `${claimCollectionPath(namespace)}/${segment(name)}`;
134
447
  }
448
+ /** The claims collection, narrowed to a `labelSelector` — same shape as {@link podListPath}. */
449
+ export function claimListPath(namespace, labelSelector) {
450
+ return `${claimCollectionPath(namespace)}?labelSelector=${encodeURIComponent(labelSelector)}`;
451
+ }
452
+ export function warmPoolPath(namespace, name) {
453
+ return `/apis/${SANDBOX_EXTENSIONS_API_GROUP}/${SANDBOX_API_VERSION}/namespaces/${segment(namespace)}/sandboxwarmpools/${segment(name)}`;
454
+ }
135
455
  export function sandboxCollectionPath(namespace) {
136
456
  return `/apis/${SANDBOX_API_GROUP}/${SANDBOX_API_VERSION}/namespaces/${segment(namespace)}/sandboxes`;
137
457
  }
@@ -141,16 +461,58 @@ export function sandboxPath(namespace, name) {
141
461
  export function sandboxTemplatePath(namespace, name) {
142
462
  return `/apis/${SANDBOX_EXTENSIONS_API_GROUP}/${SANDBOX_API_VERSION}/namespaces/${segment(namespace)}/sandboxtemplates/${segment(name)}`;
143
463
  }
464
+ /**
465
+ * The PVC the controller creates for one `volumeClaimTemplates` entry:
466
+ * `<entry name>-<sandbox name>`, in the Sandbox's own namespace.
467
+ *
468
+ * Written out here rather than derived at each call site because it is a
469
+ * NAME the controller owns, not one this backend chooses — a release that
470
+ * changes it breaks every read of it at once, and the one place to notice
471
+ * that is a function whose whole body is the convention.
472
+ */
473
+ export function persistentVolumeClaimPath(namespace, sandboxName, claimTemplateName) {
474
+ return `/api/v1/namespaces/${segment(namespace)}/persistentvolumeclaims/${segment(`${claimTemplateName}-${sandboxName}`)}`;
475
+ }
144
476
  export function podPath(namespace, name) {
145
477
  return `/api/v1/namespaces/${segment(namespace)}/pods/${segment(name)}`;
146
478
  }
479
+ /** The whole pods collection, unfiltered. Read by `readKubernetesTaskCapacity` alone. */
480
+ export function podCollectionPath(namespace) {
481
+ return `/api/v1/namespaces/${segment(namespace)}/pods`;
482
+ }
147
483
  export function podListPath(namespace, labelSelector) {
148
484
  return `/api/v1/namespaces/${segment(namespace)}/pods?labelSelector=${encodeURIComponent(labelSelector)}`;
149
485
  }
486
+ export function networkPolicyCollectionPath(namespace) {
487
+ return `/apis/${CORE_NETWORK_POLICY_API_GROUP}/${CORE_NETWORK_POLICY_API_VERSION}/namespaces/${segment(namespace)}/networkpolicies`;
488
+ }
150
489
  export function networkPolicyPath(namespace, name) {
151
- return `/apis/${CORE_NETWORK_POLICY_API_GROUP}/${CORE_NETWORK_POLICY_API_VERSION}/namespaces/${segment(namespace)}/networkpolicies/${segment(name)}`;
490
+ return `${networkPolicyCollectionPath(namespace)}/${segment(name)}`;
491
+ }
492
+ export function ciliumNetworkPolicyCollectionPath(namespace) {
493
+ return `/apis/${CILIUM_NETWORK_POLICY_API_GROUP}/${CILIUM_NETWORK_POLICY_API_VERSION}/namespaces/${segment(namespace)}/ciliumnetworkpolicies`;
152
494
  }
153
495
  export function ciliumNetworkPolicyPath(namespace, name) {
154
- return `/apis/${CILIUM_NETWORK_POLICY_API_GROUP}/${CILIUM_NETWORK_POLICY_API_VERSION}/namespaces/${segment(namespace)}/ciliumnetworkpolicies/${segment(name)}`;
496
+ return `${ciliumNetworkPolicyCollectionPath(namespace)}/${segment(name)}`;
497
+ }
498
+ /**
499
+ * Core Kubernetes' own admission-policy resources — `ValidatingAdmissionPolicy`
500
+ * and its binding, both CLUSTER-scoped and both stock since v1.30, so a
501
+ * cluster that serves this group needs nothing installed.
502
+ *
503
+ * Read by exactly one caller: the per-sandbox policy fence
504
+ * (`per-sandbox-policy.ts`), which refuses to write a `CiliumNetworkPolicy`
505
+ * at all unless an operator has applied the policy that bounds what this
506
+ * host may write. Never written by this backend — the fence is the operator's
507
+ * object, reviewed by whoever has cluster-admin, and a host that could create
508
+ * its own fence would not have one.
509
+ */
510
+ export const ADMISSION_REGISTRATION_API_GROUP = 'admissionregistration.k8s.io';
511
+ export const ADMISSION_REGISTRATION_API_VERSION = 'v1';
512
+ export function validatingAdmissionPolicyPath(name) {
513
+ return `/apis/${ADMISSION_REGISTRATION_API_GROUP}/${ADMISSION_REGISTRATION_API_VERSION}/validatingadmissionpolicies/${segment(name)}`;
514
+ }
515
+ export function validatingAdmissionPolicyBindingPath(name) {
516
+ return `/apis/${ADMISSION_REGISTRATION_API_GROUP}/${ADMISSION_REGISTRATION_API_VERSION}/validatingadmissionpolicybindings/${segment(name)}`;
155
517
  }
156
518
  //# sourceMappingURL=objects.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/backends/kubernetes/objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"objects.js","sourceRoot":"","sources":["../../../src/backends/kubernetes/objects.ts"],"names":[],"mappings":"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"}