@vibesdotdev/infra-core 0.0.2 → 1.0.0-rc.11
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.
- package/LICENSE +18 -0
- package/README.md +28 -1
- package/dist/bootstrap/seed.descriptor.d.ts +1 -1
- package/dist/bootstrap/seed.descriptor.d.ts.map +1 -1
- package/dist/bootstrap/seed.descriptor.js +1 -1
- package/dist/bootstrap/seed.descriptor.js.map +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts +1 -1
- package/dist/bootstrap/seed.impl-shape.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.d.ts +1 -3
- package/dist/bootstrap/seed.kind.d.ts.map +1 -1
- package/dist/bootstrap/seed.kind.js +17 -4
- package/dist/bootstrap/seed.kind.js.map +1 -1
- package/dist/bootstrap/seed.runner.d.ts +9 -2
- package/dist/bootstrap/seed.runner.d.ts.map +1 -1
- package/dist/bootstrap/seed.runner.js +37 -18
- package/dist/bootstrap/seed.runner.js.map +1 -1
- package/dist/capped-id.d.ts +19 -0
- package/dist/capped-id.d.ts.map +1 -0
- package/dist/capped-id.js +64 -0
- package/dist/capped-id.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts +23 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js +33 -0
- package/dist/cli/generate/artifact/artifact.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts +24 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js +73 -0
- package/dist/cli/generate/artifact/artifact.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/context.d.ts +17 -0
- package/dist/cli/generate/context.d.ts.map +1 -0
- package/dist/cli/generate/context.js +24 -0
- package/dist/cli/generate/context.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts +30 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js +25 -0
- package/dist/cli/generate/generate/generate.cli-command.descriptor.js.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts +25 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js +64 -0
- package/dist/cli/generate/generate/generate.cli-command.impl.js.map +1 -0
- package/dist/cli/generate/generate-core.d.ts +51 -0
- package/dist/cli/generate/generate-core.d.ts.map +1 -0
- package/dist/cli/generate/generate-core.js +172 -0
- package/dist/cli/generate/generate-core.js.map +1 -0
- package/dist/cli/generate/index.d.ts +5 -0
- package/dist/cli/generate/index.d.ts.map +1 -0
- package/dist/cli/generate/index.js +5 -0
- package/dist/cli/generate/index.js.map +1 -0
- package/dist/credentials/resolve.d.ts +82 -22
- package/dist/credentials/resolve.d.ts.map +1 -1
- package/dist/credentials/resolve.js +251 -77
- package/dist/credentials/resolve.js.map +1 -1
- package/dist/deployment-budget.d.ts +319 -0
- package/dist/deployment-budget.d.ts.map +1 -0
- package/dist/deployment-budget.js +660 -0
- package/dist/deployment-budget.js.map +1 -0
- package/dist/deployment-environment.d.ts +30 -0
- package/dist/deployment-environment.d.ts.map +1 -0
- package/dist/deployment-environment.js +53 -0
- package/dist/deployment-environment.js.map +1 -0
- package/dist/deployment-graph.d.ts +185 -0
- package/dist/deployment-graph.d.ts.map +1 -0
- package/dist/deployment-graph.js +705 -0
- package/dist/deployment-graph.js.map +1 -0
- package/dist/deployment.d.ts +25 -4
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +105 -0
- package/dist/deployment.js.map +1 -1
- package/dist/doks/cloud/base.d.ts +49 -0
- package/dist/doks/cloud/base.d.ts.map +1 -0
- package/dist/doks/cloud/base.js +138 -0
- package/dist/doks/cloud/base.js.map +1 -0
- package/dist/doks/cloud/factory.d.ts +18 -0
- package/dist/doks/cloud/factory.d.ts.map +1 -0
- package/dist/doks/cloud/factory.js +22 -0
- package/dist/doks/cloud/factory.js.map +1 -0
- package/dist/doks/cloud/index.d.ts +5 -0
- package/dist/doks/cloud/index.d.ts.map +1 -0
- package/dist/doks/cloud/index.js +4 -0
- package/dist/doks/cloud/index.js.map +1 -0
- package/dist/doks/types.d.ts +95 -0
- package/dist/doks/types.d.ts.map +1 -0
- package/dist/doks/types.js +14 -0
- package/dist/doks/types.js.map +1 -0
- package/dist/generate/index.d.ts +29 -0
- package/dist/generate/index.d.ts.map +1 -0
- package/dist/generate/index.js +28 -0
- package/dist/generate/index.js.map +1 -0
- package/dist/generate/infra-generate.plugin.d.ts +3 -0
- package/dist/generate/infra-generate.plugin.d.ts.map +1 -0
- package/dist/generate/infra-generate.plugin.js +23 -0
- package/dist/generate/infra-generate.plugin.js.map +1 -0
- package/dist/generate/plugin.d.ts +2 -0
- package/dist/generate/plugin.d.ts.map +1 -0
- package/dist/generate/plugin.js +2 -0
- package/dist/generate/plugin.js.map +1 -0
- package/dist/heartbeat/cron-heartbeat.d.ts +97 -0
- package/dist/heartbeat/cron-heartbeat.d.ts.map +1 -0
- package/dist/heartbeat/cron-heartbeat.js +200 -0
- package/dist/heartbeat/cron-heartbeat.js.map +1 -0
- package/dist/index.d.ts +37 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -14
- package/dist/index.js.map +1 -1
- package/dist/infra.plugin.d.ts +1 -1
- package/dist/infra.plugin.d.ts.map +1 -1
- package/dist/infra.plugin.js +64 -12
- package/dist/infra.plugin.js.map +1 -1
- package/dist/kinds/alerts.kind.d.ts +64 -25
- package/dist/kinds/alerts.kind.d.ts.map +1 -1
- package/dist/kinds/alerts.kind.js +43 -16
- package/dist/kinds/alerts.kind.js.map +1 -1
- package/dist/kinds/artifact.kind.d.ts +58 -10
- package/dist/kinds/artifact.kind.d.ts.map +1 -1
- package/dist/kinds/artifact.kind.js +26 -9
- package/dist/kinds/artifact.kind.js.map +1 -1
- package/dist/kinds/billing.kind.d.ts +88 -0
- package/dist/kinds/billing.kind.d.ts.map +1 -0
- package/dist/kinds/billing.kind.js +48 -0
- package/dist/kinds/billing.kind.js.map +1 -0
- package/dist/kinds/build-job.kind.d.ts +383 -0
- package/dist/kinds/build-job.kind.d.ts.map +1 -0
- package/dist/kinds/build-job.kind.js +218 -0
- package/dist/kinds/build-job.kind.js.map +1 -0
- package/dist/kinds/cache-byte-store.d.ts +23 -0
- package/dist/kinds/cache-byte-store.d.ts.map +1 -0
- package/dist/kinds/cache-byte-store.js +9 -0
- package/dist/kinds/cache-byte-store.js.map +1 -0
- package/dist/kinds/cache.kind.d.ts +38 -94
- package/dist/kinds/cache.kind.d.ts.map +1 -1
- package/dist/kinds/cache.kind.js +39 -50
- package/dist/kinds/cache.kind.js.map +1 -1
- package/dist/kinds/cluster.kind.d.ts +154 -0
- package/dist/kinds/cluster.kind.d.ts.map +1 -0
- package/dist/kinds/cluster.kind.js +99 -0
- package/dist/kinds/cluster.kind.js.map +1 -0
- package/dist/kinds/compute-source.kind.d.ts +155 -0
- package/dist/kinds/compute-source.kind.d.ts.map +1 -0
- package/dist/kinds/compute-source.kind.js +158 -0
- package/dist/kinds/compute-source.kind.js.map +1 -0
- package/dist/kinds/container-registry.kind.d.ts +62 -0
- package/dist/kinds/container-registry.kind.d.ts.map +1 -0
- package/dist/kinds/container-registry.kind.js +47 -0
- package/dist/kinds/container-registry.kind.js.map +1 -0
- package/dist/kinds/database-migrator.kind.d.ts +6 -0
- package/dist/kinds/database-migrator.kind.d.ts.map +1 -0
- package/dist/kinds/database-migrator.kind.js +28 -0
- package/dist/kinds/database-migrator.kind.js.map +1 -0
- package/dist/kinds/database.kind.d.ts +114 -93
- package/dist/kinds/database.kind.d.ts.map +1 -1
- package/dist/kinds/database.kind.js +93 -54
- package/dist/kinds/database.kind.js.map +1 -1
- package/dist/kinds/deployment-provider.kind.d.ts +5 -0
- package/dist/kinds/deployment-provider.kind.d.ts.map +1 -0
- package/dist/kinds/deployment-provider.kind.js +11 -0
- package/dist/kinds/deployment-provider.kind.js.map +1 -0
- package/dist/kinds/discovery.d.ts +5 -12
- package/dist/kinds/discovery.d.ts.map +1 -1
- package/dist/kinds/discovery.js +5 -17
- package/dist/kinds/discovery.js.map +1 -1
- package/dist/kinds/dns.kind.d.ts +162 -0
- package/dist/kinds/dns.kind.d.ts.map +1 -0
- package/dist/kinds/dns.kind.js +54 -0
- package/dist/kinds/dns.kind.js.map +1 -0
- package/dist/kinds/drift.kind.d.ts +115 -0
- package/dist/kinds/drift.kind.d.ts.map +1 -0
- package/dist/kinds/drift.kind.js +60 -0
- package/dist/kinds/drift.kind.js.map +1 -0
- package/dist/kinds/edge-hostname.kind.d.ts +124 -0
- package/dist/kinds/edge-hostname.kind.d.ts.map +1 -0
- package/dist/kinds/edge-hostname.kind.js +87 -0
- package/dist/kinds/edge-hostname.kind.js.map +1 -0
- package/dist/kinds/edge-tls.kind.d.ts +194 -0
- package/dist/kinds/edge-tls.kind.d.ts.map +1 -0
- package/dist/kinds/edge-tls.kind.js +58 -0
- package/dist/kinds/edge-tls.kind.js.map +1 -0
- package/dist/kinds/firewall.kind.d.ts +92 -0
- package/dist/kinds/firewall.kind.d.ts.map +1 -0
- package/dist/kinds/firewall.kind.js +59 -0
- package/dist/kinds/firewall.kind.js.map +1 -0
- package/dist/kinds/git-hosting.kind.d.ts +36 -38
- package/dist/kinds/git-hosting.kind.d.ts.map +1 -1
- package/dist/kinds/git-hosting.kind.js +21 -32
- package/dist/kinds/git-hosting.kind.js.map +1 -1
- package/dist/kinds/index.d.ts +41 -15
- package/dist/kinds/index.d.ts.map +1 -1
- package/dist/kinds/index.js +40 -14
- package/dist/kinds/index.js.map +1 -1
- package/dist/kinds/inventory.kind.d.ts +245 -0
- package/dist/kinds/inventory.kind.d.ts.map +1 -0
- package/dist/kinds/inventory.kind.js +243 -0
- package/dist/kinds/inventory.kind.js.map +1 -0
- package/dist/kinds/load-balancer.kind.d.ts +135 -0
- package/dist/kinds/load-balancer.kind.d.ts.map +1 -0
- package/dist/kinds/load-balancer.kind.js +71 -0
- package/dist/kinds/load-balancer.kind.js.map +1 -0
- package/dist/kinds/logs.kind.d.ts +74 -3
- package/dist/kinds/logs.kind.d.ts.map +1 -1
- package/dist/kinds/logs.kind.js +26 -17
- package/dist/kinds/logs.kind.js.map +1 -1
- package/dist/kinds/nfs.kind.d.ts +67 -0
- package/dist/kinds/nfs.kind.d.ts.map +1 -0
- package/dist/kinds/nfs.kind.js +45 -0
- package/dist/kinds/nfs.kind.js.map +1 -0
- package/dist/kinds/node-pool.kind.d.ts +134 -0
- package/dist/kinds/node-pool.kind.d.ts.map +1 -0
- package/dist/kinds/node-pool.kind.js +88 -0
- package/dist/kinds/node-pool.kind.js.map +1 -0
- package/dist/kinds/object-storage.kind.d.ts +50 -24
- package/dist/kinds/object-storage.kind.d.ts.map +1 -1
- package/dist/kinds/object-storage.kind.js +40 -23
- package/dist/kinds/object-storage.kind.js.map +1 -1
- package/dist/kinds/observability.kind.d.ts +104 -6
- package/dist/kinds/observability.kind.d.ts.map +1 -1
- package/dist/kinds/observability.kind.js +67 -9
- package/dist/kinds/observability.kind.js.map +1 -1
- package/dist/kinds/package-registry.kind.d.ts +139 -33
- package/dist/kinds/package-registry.kind.d.ts.map +1 -1
- package/dist/kinds/package-registry.kind.js +55 -25
- package/dist/kinds/package-registry.kind.js.map +1 -1
- package/dist/kinds/queue.kind.d.ts +67 -63
- package/dist/kinds/queue.kind.d.ts.map +1 -1
- package/dist/kinds/queue.kind.js +55 -33
- package/dist/kinds/queue.kind.js.map +1 -1
- package/dist/kinds/read-descriptor.d.ts +15 -0
- package/dist/kinds/read-descriptor.d.ts.map +1 -0
- package/dist/kinds/read-descriptor.js +11 -0
- package/dist/kinds/read-descriptor.js.map +1 -0
- package/dist/kinds/rum.kind.d.ts +36 -6
- package/dist/kinds/rum.kind.d.ts.map +1 -1
- package/dist/kinds/rum.kind.js +6 -7
- package/dist/kinds/rum.kind.js.map +1 -1
- package/dist/kinds/sandbox.kind.d.ts +136 -40
- package/dist/kinds/sandbox.kind.d.ts.map +1 -1
- package/dist/kinds/sandbox.kind.js +82 -43
- package/dist/kinds/sandbox.kind.js.map +1 -1
- package/dist/kinds/select-compute-source.d.ts +72 -0
- package/dist/kinds/select-compute-source.d.ts.map +1 -0
- package/dist/kinds/select-compute-source.js +170 -0
- package/dist/kinds/select-compute-source.js.map +1 -0
- package/dist/kinds/service-release.kind.d.ts +771 -0
- package/dist/kinds/service-release.kind.d.ts.map +1 -0
- package/dist/kinds/service-release.kind.js +676 -0
- package/dist/kinds/service-release.kind.js.map +1 -0
- package/dist/kinds/spend-guard.kind.d.ts +41 -0
- package/dist/kinds/spend-guard.kind.d.ts.map +1 -0
- package/dist/kinds/spend-guard.kind.js +140 -0
- package/dist/kinds/spend-guard.kind.js.map +1 -0
- package/dist/kinds/utilization.kind.d.ts +88 -0
- package/dist/kinds/utilization.kind.d.ts.map +1 -0
- package/dist/kinds/utilization.kind.js +62 -0
- package/dist/kinds/utilization.kind.js.map +1 -0
- package/dist/kinds/volume.kind.d.ts +54 -0
- package/dist/kinds/volume.kind.d.ts.map +1 -0
- package/dist/kinds/volume.kind.js +39 -0
- package/dist/kinds/volume.kind.js.map +1 -0
- package/dist/kinds/vpc.kind.d.ts +61 -0
- package/dist/kinds/vpc.kind.d.ts.map +1 -0
- package/dist/kinds/vpc.kind.js +51 -0
- package/dist/kinds/vpc.kind.js.map +1 -0
- package/dist/kinds/web-app.kind.d.ts +118 -45
- package/dist/kinds/web-app.kind.d.ts.map +1 -1
- package/dist/kinds/web-app.kind.js +69 -42
- package/dist/kinds/web-app.kind.js.map +1 -1
- package/dist/kinds/worker.kind.d.ts +129 -188
- package/dist/kinds/worker.kind.d.ts.map +1 -1
- package/dist/kinds/worker.kind.js +45 -123
- package/dist/kinds/worker.kind.js.map +1 -1
- package/dist/schemas/database-migration.d.ts +173 -0
- package/dist/schemas/database-migration.d.ts.map +1 -0
- package/dist/schemas/database-migration.js +88 -0
- package/dist/schemas/database-migration.js.map +1 -0
- package/dist/schemas/deployment-environment.d.ts +11 -0
- package/dist/schemas/deployment-environment.d.ts.map +1 -0
- package/dist/schemas/deployment-environment.js +9 -0
- package/dist/schemas/deployment-environment.js.map +1 -0
- package/dist/schemas/deployment-provider.d.ts +383 -0
- package/dist/schemas/deployment-provider.d.ts.map +1 -0
- package/dist/schemas/deployment-provider.js +211 -0
- package/dist/schemas/deployment-provider.js.map +1 -0
- package/dist/schemas/log-stream.d.ts +27 -0
- package/dist/schemas/log-stream.d.ts.map +1 -0
- package/dist/schemas/log-stream.js +31 -0
- package/dist/schemas/log-stream.js.map +1 -0
- package/dist/schemas/spend-guard.d.ts +155 -0
- package/dist/schemas/spend-guard.d.ts.map +1 -0
- package/dist/schemas/spend-guard.js +61 -0
- package/dist/schemas/spend-guard.js.map +1 -0
- package/dist/schemas.d.ts +195 -20
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +151 -31
- package/dist/schemas.js.map +1 -1
- package/dist/service.d.ts +87 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +199 -0
- package/dist/service.js.map +1 -0
- package/dist/settle-work.d.ts +20 -0
- package/dist/settle-work.d.ts.map +1 -0
- package/dist/settle-work.js +22 -0
- package/dist/settle-work.js.map +1 -0
- package/dist/web-app-projection.d.ts +208 -0
- package/dist/web-app-projection.d.ts.map +1 -0
- package/dist/web-app-projection.js +95 -0
- package/dist/web-app-projection.js.map +1 -0
- package/package.json +121 -37
- package/src/bootstrap/index.ts +0 -15
- package/src/bootstrap/seed.descriptor.ts +0 -24
- package/src/bootstrap/seed.impl-shape.ts +0 -5
- package/src/bootstrap/seed.kind.ts +0 -26
- package/src/bootstrap/seed.runner.ts +0 -87
- package/src/credentials/resolve.ts +0 -205
- package/src/deployment.ts +0 -57
- package/src/index.ts +0 -149
- package/src/infra.plugin.ts +0 -54
- package/src/kinds/alerts.kind.ts +0 -164
- package/src/kinds/artifact.kind.ts +0 -96
- package/src/kinds/cache.kind.ts +0 -104
- package/src/kinds/database.kind.ts +0 -120
- package/src/kinds/discovery.ts +0 -26
- package/src/kinds/git-hosting.kind.ts +0 -100
- package/src/kinds/index.ts +0 -139
- package/src/kinds/logs.kind.ts +0 -104
- package/src/kinds/object-storage.kind.ts +0 -101
- package/src/kinds/observability.kind.ts +0 -178
- package/src/kinds/package-registry.kind.ts +0 -95
- package/src/kinds/queue.kind.ts +0 -102
- package/src/kinds/rum.kind.ts +0 -135
- package/src/kinds/sandbox.kind.ts +0 -115
- package/src/kinds/web-app.kind.ts +0 -103
- package/src/kinds/worker.kind.ts +0 -203
- package/src/schemas.ts +0 -127
package/dist/kinds/rum.kind.js
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
* The kind decouples *configuration* (which hostnames, which token,
|
|
13
13
|
* which privacy mode) from *delivery* (how the beacon `<script>` tag
|
|
14
14
|
* lands in the HTML). For SvelteKit apps, the
|
|
15
|
-
* `@vibesdotdev/cloudflare
|
|
16
|
-
* hook that injects the beacon via `transformPageChunk` — no
|
|
15
|
+
* `@vibesdotdev/integrations-cloudflare/svelte/web-analytics` surface provides a
|
|
16
|
+
* `handle` hook that injects the beacon via `transformPageChunk` — no
|
|
17
17
|
* per-app `app.html` edits required once the kind is wired in.
|
|
18
18
|
*/
|
|
19
19
|
import * as z from 'zod/v4';
|
|
20
|
-
import { createRuntimeKind } from '@vibesdotdev/
|
|
21
|
-
import { RuntimeDescriptorSchema } from '@vibesdotdev/
|
|
22
|
-
import {
|
|
20
|
+
import { createRuntimeKind } from '@vibesdotdev/kernel/factory/kind';
|
|
21
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
22
|
+
import { INFRA_DISCOVERY_PATTERNS } from "./discovery.js";
|
|
23
23
|
const RumPrivacySchema = z.object({
|
|
24
24
|
/** Drop EU visitor data at the beacon level (GDPR fast path). */
|
|
25
25
|
excludeEU: z.boolean().default(false),
|
|
@@ -73,8 +73,7 @@ const RumBaseSchema = RuntimeDescriptorSchema.extend({
|
|
|
73
73
|
export const rumKind = createRuntimeKind({
|
|
74
74
|
id: 'infra/rum',
|
|
75
75
|
descriptorSchema: RumBaseSchema,
|
|
76
|
-
|
|
77
|
-
extractStem
|
|
76
|
+
discoveryPatterns: INFRA_DISCOVERY_PATTERNS
|
|
78
77
|
});
|
|
79
78
|
export { RumBaseSchema as InfraRumDescriptorSchema, RumPrivacySchema, RumInjectionSchema };
|
|
80
79
|
//# sourceMappingURL=rum.kind.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rum.kind.js","sourceRoot":"","sources":["../../src/kinds/rum.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"rum.kind.js","sourceRoot":"","sources":["../../src/kinds/rum.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,iEAAiE;IACjE,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,2DAA2D;IAC3D,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,8DAA8D;IAC9D,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC;AAIH;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,UAAU;IACV,gBAAgB;IAChB,eAAe;IACf,QAAQ;CACR,CAAC,CAAC;AAIH,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACpD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC3D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC;IACxC;;;;;;;OAOG;IACH,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;QAClB,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;IACF,2EAA2E;IAC3E,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IACpD,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACvD,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACxC,SAAS,EAAE,KAAK;QAChB,iBAAiB,EAAE,IAAI;QACvB,gBAAgB,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,6EAA6E;IAC7E,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;CAClC,CAAC,CAAC;AA0DH,MAAM,CAAC,MAAM,OAAO,GAAG,iBAAiB,CAAwC;IAC/E,EAAE,EAAE,WAAW;IACf,gBAAgB,EAAE,aAAa;IAC/B,iBAAiB,EAAE,wBAAwB;CAC3C,CAAC,CAAC;AAKH,OAAO,EACN,aAAa,IAAI,wBAAwB,EACzC,gBAAgB,EAChB,kBAAkB,EAClB,CAAC"}
|
|
@@ -5,17 +5,21 @@
|
|
|
5
5
|
* subprocess capabilities. Used for agent code execution, tool sandboxing,
|
|
6
6
|
* and long-running background tasks.
|
|
7
7
|
*
|
|
8
|
-
* Schema shape: strict common base + `config
|
|
8
|
+
* Schema shape: strict common base + an open, adapter-keyed `config`.
|
|
9
9
|
*
|
|
10
10
|
* - The base defines fields universal across every adapter:
|
|
11
11
|
* id/kind/name + the sandbox shape (entrypoint, image, limits,
|
|
12
12
|
* outboundProxy, liveView, persistent, env).
|
|
13
|
-
* - Adapter-specific fields live under `config
|
|
14
|
-
*
|
|
13
|
+
* - Adapter-specific fields live under `config`, keyed by a non-empty
|
|
14
|
+
* `adapter` discriminator. Cloud provider adapter schemas live in their
|
|
15
|
+
* integrations owners (Cloudflare's in `@vibesdotdev/integrations-cloudflare`,
|
|
16
|
+
* DigitalOcean droplet and DOKS job configs in
|
|
17
|
+
* `@vibesdotdev/integrations-digitalocean`); this kind names no cloud
|
|
18
|
+
* provider, so a config for any adapter — including one contributed by a
|
|
19
|
+
* user plugin — parses here, and the adapter validates its own grammar.
|
|
20
|
+
* The local docker adapter is not a cloud integration and is defined here.
|
|
15
21
|
*/
|
|
16
22
|
import * as z from 'zod/v4';
|
|
17
|
-
import type { RuntimeKindDescriptorRecord } from '@vibesdotdev/runtime/schemas/kind';
|
|
18
|
-
import type { RuntimeDescriptor } from '@vibesdotdev/runtime/schemas/descriptor';
|
|
19
23
|
export declare const SandboxOutboundProxySchema: z.ZodObject<{
|
|
20
24
|
binding: z.ZodString;
|
|
21
25
|
workerPath: z.ZodOptional<z.ZodString>;
|
|
@@ -30,27 +34,94 @@ export declare const SandboxResourceLimitsSchema: z.ZodObject<{
|
|
|
30
34
|
timeoutSeconds: z.ZodOptional<z.ZodNumber>;
|
|
31
35
|
}, z.core.$strip>;
|
|
32
36
|
export type SandboxResourceLimits = z.infer<typeof SandboxResourceLimitsSchema>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
/** Host bootstrap accepted by a provisioner; omitted preserves legacy cloud-init callers. */
|
|
38
|
+
export declare const SandboxBootstrapSchema: z.ZodEnum<{
|
|
39
|
+
entrypoint: "entrypoint";
|
|
40
|
+
"cloud-init": "cloud-init";
|
|
41
|
+
}>;
|
|
42
|
+
export type SandboxBootstrap = z.infer<typeof SandboxBootstrapSchema>;
|
|
43
|
+
export interface SandboxProvisionOptions {
|
|
44
|
+
/** Stable noncredential configuration, included in operation identity. */
|
|
45
|
+
env?: Record<string, string>;
|
|
46
|
+
/** Resolve transient authority only when a new process must be started. Never persisted. */
|
|
47
|
+
resolveCredentials?: () => Promise<Record<string, string>>;
|
|
48
|
+
}
|
|
49
|
+
/** Local docker sandbox adapter: a container image plus volume mounts. */
|
|
36
50
|
export declare const DockerSandboxConfigSchema: z.ZodObject<{
|
|
37
51
|
image: z.ZodString;
|
|
38
52
|
volumes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
39
53
|
}, z.core.$strip>;
|
|
40
|
-
export
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
54
|
+
export type DockerSandboxConfig = z.infer<typeof DockerSandboxConfigSchema>;
|
|
55
|
+
/**
|
|
56
|
+
* Adapter-specific configuration: the adapter id plus its own fields. Each
|
|
57
|
+
* adapter package defines and parses its own config schema; this kind names
|
|
58
|
+
* no cloud provider, so a config for any adapter — including one contributed
|
|
59
|
+
* by a user plugin — parses here, and the adapter validates its own grammar.
|
|
60
|
+
*/
|
|
61
|
+
export declare const SandboxConfigSchema: z.ZodObject<{
|
|
62
|
+
adapter: z.ZodString;
|
|
63
|
+
}, z.core.$loose>;
|
|
64
|
+
export type SandboxConfig = z.infer<typeof SandboxConfigSchema>;
|
|
65
|
+
/** Placement a host profile supplies when a launch omits size, region or image. */
|
|
66
|
+
export declare const SandboxHostPlacementDefaultsSchema: z.ZodObject<{
|
|
67
|
+
size: z.ZodOptional<z.ZodString>;
|
|
68
|
+
region: z.ZodOptional<z.ZodString>;
|
|
44
69
|
image: z.ZodOptional<z.ZodString>;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
70
|
+
}, z.core.$strip>;
|
|
71
|
+
export type SandboxHostPlacementDefaults = z.infer<typeof SandboxHostPlacementDefaultsSchema>;
|
|
72
|
+
/**
|
|
73
|
+
* How the provider's `advancePause` stops compute billing:
|
|
74
|
+
* - `snapshot-destroy`: snapshot the disk, then delete the instance; only the
|
|
75
|
+
* snapshot bills while paused (a provider whose stopped instances still bill).
|
|
76
|
+
* - `power-off`: stop the instance in place; the provider stops compute billing.
|
|
77
|
+
*/
|
|
78
|
+
export declare const SandboxPauseStrategySchema: z.ZodEnum<{
|
|
79
|
+
"snapshot-destroy": "snapshot-destroy";
|
|
80
|
+
"power-off": "power-off";
|
|
81
|
+
}>;
|
|
82
|
+
export type SandboxPauseStrategy = z.infer<typeof SandboxPauseStrategySchema>;
|
|
83
|
+
/**
|
|
84
|
+
* The fleet-host profile a provisioner declares: what `vibes fleet launch`
|
|
85
|
+
* may request from it and what it supplies on omission. Generic launch reads
|
|
86
|
+
* only this; a sandbox without a profile is never selected implicitly.
|
|
87
|
+
*/
|
|
88
|
+
export declare const SandboxHostProfileSchema: z.ZodObject<{
|
|
89
|
+
provider: z.ZodString;
|
|
90
|
+
aliases: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
91
|
+
sizes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
92
|
+
gpuSizes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
93
|
+
defaults: z.ZodDefault<z.ZodObject<{
|
|
94
|
+
size: z.ZodOptional<z.ZodString>;
|
|
95
|
+
region: z.ZodOptional<z.ZodString>;
|
|
96
|
+
image: z.ZodOptional<z.ZodString>;
|
|
97
|
+
}, z.core.$strip>>;
|
|
98
|
+
gpuDefaults: z.ZodDefault<z.ZodObject<{
|
|
99
|
+
image: z.ZodOptional<z.ZodString>;
|
|
100
|
+
region: z.ZodOptional<z.ZodString>;
|
|
101
|
+
}, z.core.$strict>>;
|
|
102
|
+
pause: z.ZodOptional<z.ZodEnum<{
|
|
103
|
+
"snapshot-destroy": "snapshot-destroy";
|
|
104
|
+
"power-off": "power-off";
|
|
105
|
+
}>>;
|
|
106
|
+
}, z.core.$strip>;
|
|
107
|
+
export type SandboxHostProfile = z.infer<typeof SandboxHostProfileSchema>;
|
|
108
|
+
/** One fleet-host launch as the selected provider sees it before any paid call. */
|
|
109
|
+
export interface SandboxHostLaunchRequest {
|
|
110
|
+
size: string;
|
|
111
|
+
region: string;
|
|
112
|
+
image: string;
|
|
113
|
+
gpu: boolean;
|
|
114
|
+
sshKeyIds: readonly string[];
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Optional `infra/sandbox` implementation operation: refuse a launch the
|
|
118
|
+
* provider would reject (throw a `CapabilityError`) before the platform is
|
|
119
|
+
* asked to provision. Provider-specific rules live here, never in generic launch.
|
|
120
|
+
*/
|
|
121
|
+
export interface SandboxHostLaunchPreflight {
|
|
122
|
+
preflightHostLaunch(request: SandboxHostLaunchRequest): void | Promise<void>;
|
|
123
|
+
}
|
|
124
|
+
export declare function hasSandboxHostLaunchPreflight(implementation: Partial<SandboxHostLaunchPreflight> | null | undefined): implementation is SandboxHostLaunchPreflight;
|
|
54
125
|
export declare const SandboxDescriptorSchema: z.ZodObject<{
|
|
55
126
|
id: z.ZodString;
|
|
56
127
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -59,9 +130,42 @@ export declare const SandboxDescriptorSchema: z.ZodObject<{
|
|
|
59
130
|
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
60
131
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
61
132
|
priority: z.ZodOptional<z.ZodNumber>;
|
|
133
|
+
capabilityId: z.ZodOptional<z.ZodString>;
|
|
62
134
|
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
63
135
|
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
136
|
+
retention: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
137
|
+
maxAgeDays: z.ZodOptional<z.ZodNumber>;
|
|
138
|
+
maxEntries: z.ZodOptional<z.ZodNumber>;
|
|
139
|
+
maxBytes: z.ZodOptional<z.ZodNumber>;
|
|
140
|
+
cascadeFrom: z.ZodOptional<z.ZodString>;
|
|
141
|
+
ageField: z.ZodOptional<z.ZodString>;
|
|
142
|
+
reason: z.ZodString;
|
|
143
|
+
enforcedBy: z.ZodOptional<z.ZodString>;
|
|
144
|
+
}, z.core.$strip>]>>;
|
|
64
145
|
kind: z.ZodLiteral<"infra/sandbox">;
|
|
146
|
+
bootstrap: z.ZodOptional<z.ZodEnum<{
|
|
147
|
+
entrypoint: "entrypoint";
|
|
148
|
+
"cloud-init": "cloud-init";
|
|
149
|
+
}>>;
|
|
150
|
+
hostProfile: z.ZodOptional<z.ZodObject<{
|
|
151
|
+
provider: z.ZodString;
|
|
152
|
+
aliases: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
153
|
+
sizes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
154
|
+
gpuSizes: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
155
|
+
defaults: z.ZodDefault<z.ZodObject<{
|
|
156
|
+
size: z.ZodOptional<z.ZodString>;
|
|
157
|
+
region: z.ZodOptional<z.ZodString>;
|
|
158
|
+
image: z.ZodOptional<z.ZodString>;
|
|
159
|
+
}, z.core.$strip>>;
|
|
160
|
+
gpuDefaults: z.ZodDefault<z.ZodObject<{
|
|
161
|
+
image: z.ZodOptional<z.ZodString>;
|
|
162
|
+
region: z.ZodOptional<z.ZodString>;
|
|
163
|
+
}, z.core.$strict>>;
|
|
164
|
+
pause: z.ZodOptional<z.ZodEnum<{
|
|
165
|
+
"snapshot-destroy": "snapshot-destroy";
|
|
166
|
+
"power-off": "power-off";
|
|
167
|
+
}>>;
|
|
168
|
+
}, z.core.$strip>>;
|
|
65
169
|
entrypoint: z.ZodOptional<z.ZodString>;
|
|
66
170
|
image: z.ZodOptional<z.ZodString>;
|
|
67
171
|
limits: z.ZodOptional<z.ZodObject<{
|
|
@@ -86,26 +190,18 @@ export declare const SandboxDescriptorSchema: z.ZodObject<{
|
|
|
86
190
|
secret: z.ZodOptional<z.ZodBoolean>;
|
|
87
191
|
description: z.ZodOptional<z.ZodString>;
|
|
88
192
|
storeKey: z.ZodOptional<z.ZodString>;
|
|
193
|
+
storeBinding: z.ZodOptional<z.ZodBoolean>;
|
|
89
194
|
}, z.core.$strip>>>;
|
|
90
|
-
config: z.ZodOptional<z.
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
94
|
-
image: z.ZodString;
|
|
95
|
-
volumes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
96
|
-
adapter: z.ZodLiteral<"docker">;
|
|
97
|
-
}, z.core.$strip>, z.ZodObject<{
|
|
98
|
-
dropletSize: z.ZodString;
|
|
99
|
-
adapter: z.ZodLiteral<"digitalocean-droplet">;
|
|
100
|
-
}, z.core.$strip>]>>;
|
|
195
|
+
config: z.ZodOptional<z.ZodObject<{
|
|
196
|
+
adapter: z.ZodString;
|
|
197
|
+
}, z.core.$loose>>;
|
|
101
198
|
}, z.core.$strip>;
|
|
102
199
|
export type SandboxDescriptor = z.infer<typeof SandboxDescriptorSchema>;
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
export declare const sandboxKind: RuntimeKindDescriptorRecord<
|
|
110
|
-
export {};
|
|
200
|
+
/**
|
|
201
|
+
* No default implementation: a sandbox that cannot provision is no sandbox.
|
|
202
|
+
* Resolving a descriptor whose adapter registered no loader for this scope
|
|
203
|
+
* refuses with the kernel's typed NOT_FOUND, naming the adapter, instead of
|
|
204
|
+
* handing back an inert shell every caller then misreports.
|
|
205
|
+
*/
|
|
206
|
+
export declare const sandboxKind: import("@vibesdotdev/kernel").RuntimeKindDescriptorRecord<unknown>;
|
|
111
207
|
//# sourceMappingURL=sandbox.kind.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sandbox.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAM5B,eAAO,MAAM,0BAA0B;;;;iBAIrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,2BAA2B;;;;;;iBAMtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEhF,6FAA6F;AAC7F,eAAO,MAAM,sBAAsB;;;EAAuC,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,MAAM,WAAW,uBAAuB;IACvC,0EAA0E;IAC1E,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,4FAA4F;IAC5F,kBAAkB,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC3D;AAED,0EAA0E;AAC1E,eAAO,MAAM,yBAAyB;;;iBAKpC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAIhE,mFAAmF;AACnF,eAAO,MAAM,kCAAkC;;;;iBAI7C,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kCAAkC,CAAC,CAAC;AAE9F;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;EAA4C,CAAC;AACpF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;iBAkBnC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,mFAAmF;AACnF,MAAM,WAAW,wBAAwB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IAC1C,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E;AAED,wBAAgB,6BAA6B,CAC5C,cAAc,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI,GAAG,SAAS,GACpE,cAAc,IAAI,0BAA0B,CAE9C;AA+BD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAGlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,oEAItB,CAAC"}
|
|
@@ -5,19 +5,25 @@
|
|
|
5
5
|
* subprocess capabilities. Used for agent code execution, tool sandboxing,
|
|
6
6
|
* and long-running background tasks.
|
|
7
7
|
*
|
|
8
|
-
* Schema shape: strict common base + `config
|
|
8
|
+
* Schema shape: strict common base + an open, adapter-keyed `config`.
|
|
9
9
|
*
|
|
10
10
|
* - The base defines fields universal across every adapter:
|
|
11
11
|
* id/kind/name + the sandbox shape (entrypoint, image, limits,
|
|
12
12
|
* outboundProxy, liveView, persistent, env).
|
|
13
|
-
* - Adapter-specific fields live under `config
|
|
14
|
-
*
|
|
13
|
+
* - Adapter-specific fields live under `config`, keyed by a non-empty
|
|
14
|
+
* `adapter` discriminator. Cloud provider adapter schemas live in their
|
|
15
|
+
* integrations owners (Cloudflare's in `@vibesdotdev/integrations-cloudflare`,
|
|
16
|
+
* DigitalOcean droplet and DOKS job configs in
|
|
17
|
+
* `@vibesdotdev/integrations-digitalocean`); this kind names no cloud
|
|
18
|
+
* provider, so a config for any adapter — including one contributed by a
|
|
19
|
+
* user plugin — parses here, and the adapter validates its own grammar.
|
|
20
|
+
* The local docker adapter is not a cloud integration and is defined here.
|
|
15
21
|
*/
|
|
16
22
|
import * as z from 'zod/v4';
|
|
17
|
-
import { createRuntimeKind } from '@vibesdotdev/
|
|
18
|
-
import { RuntimeDescriptorSchema } from '@vibesdotdev/
|
|
23
|
+
import { createRuntimeKind } from '@vibesdotdev/kernel/factory/kind';
|
|
24
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
19
25
|
import { deploymentEnvRequirementSchema } from "../schemas.js";
|
|
20
|
-
import {
|
|
26
|
+
import { INFRA_DISCOVERY_PATTERNS } from "./discovery.js";
|
|
21
27
|
export const SandboxOutboundProxySchema = z.object({
|
|
22
28
|
binding: z.string().min(1),
|
|
23
29
|
workerPath: z.string().min(1).optional(),
|
|
@@ -30,8 +36,70 @@ export const SandboxResourceLimitsSchema = z.object({
|
|
|
30
36
|
maxSubprocesses: z.number().int().positive().optional(),
|
|
31
37
|
timeoutSeconds: z.number().int().positive().optional()
|
|
32
38
|
});
|
|
39
|
+
/** Host bootstrap accepted by a provisioner; omitted preserves legacy cloud-init callers. */
|
|
40
|
+
export const SandboxBootstrapSchema = z.enum(['cloud-init', 'entrypoint']);
|
|
41
|
+
/** Local docker sandbox adapter: a container image plus volume mounts. */
|
|
42
|
+
export const DockerSandboxConfigSchema = z.object({
|
|
43
|
+
/** Container image. */
|
|
44
|
+
image: z.string(),
|
|
45
|
+
/** Volume mounts (hostPath: containerPath). */
|
|
46
|
+
volumes: z.record(z.string(), z.string()).optional()
|
|
47
|
+
});
|
|
48
|
+
/**
|
|
49
|
+
* Adapter-specific configuration: the adapter id plus its own fields. Each
|
|
50
|
+
* adapter package defines and parses its own config schema; this kind names
|
|
51
|
+
* no cloud provider, so a config for any adapter — including one contributed
|
|
52
|
+
* by a user plugin — parses here, and the adapter validates its own grammar.
|
|
53
|
+
*/
|
|
54
|
+
export const SandboxConfigSchema = z.looseObject({
|
|
55
|
+
adapter: z.string().min(1)
|
|
56
|
+
});
|
|
57
|
+
const SandboxSlugSchema = z.string().trim().min(1);
|
|
58
|
+
/** Placement a host profile supplies when a launch omits size, region or image. */
|
|
59
|
+
export const SandboxHostPlacementDefaultsSchema = z.object({
|
|
60
|
+
size: SandboxSlugSchema.optional(),
|
|
61
|
+
region: SandboxSlugSchema.optional(),
|
|
62
|
+
image: SandboxSlugSchema.optional()
|
|
63
|
+
});
|
|
64
|
+
/**
|
|
65
|
+
* How the provider's `advancePause` stops compute billing:
|
|
66
|
+
* - `snapshot-destroy`: snapshot the disk, then delete the instance; only the
|
|
67
|
+
* snapshot bills while paused (a provider whose stopped instances still bill).
|
|
68
|
+
* - `power-off`: stop the instance in place; the provider stops compute billing.
|
|
69
|
+
*/
|
|
70
|
+
export const SandboxPauseStrategySchema = z.enum(['snapshot-destroy', 'power-off']);
|
|
71
|
+
/**
|
|
72
|
+
* The fleet-host profile a provisioner declares: what `vibes fleet launch`
|
|
73
|
+
* may request from it and what it supplies on omission. Generic launch reads
|
|
74
|
+
* only this; a sandbox without a profile is never selected implicitly.
|
|
75
|
+
*/
|
|
76
|
+
export const SandboxHostProfileSchema = z.object({
|
|
77
|
+
/** Host provider id recorded on the platform host row. */
|
|
78
|
+
provider: SandboxSlugSchema,
|
|
79
|
+
/** Other names a launch may select this profile by. */
|
|
80
|
+
aliases: z.array(SandboxSlugSchema).default([]),
|
|
81
|
+
/** CPU sizes a launch may request. Absent: the provider validates sizes itself. */
|
|
82
|
+
sizes: z.array(SandboxSlugSchema).min(1).optional(),
|
|
83
|
+
/** Sizes admitted only for a GPU launch. */
|
|
84
|
+
gpuSizes: z.array(SandboxSlugSchema).default([]),
|
|
85
|
+
/** Placement for an omitted value on a CPU launch. */
|
|
86
|
+
defaults: SandboxHostPlacementDefaultsSchema.default({}),
|
|
87
|
+
/**
|
|
88
|
+
* Region and image for an omitted value on a GPU launch. A GPU size is never
|
|
89
|
+
* defaulted: an omitted size must not start a paid GPU host.
|
|
90
|
+
*/
|
|
91
|
+
gpuDefaults: SandboxHostPlacementDefaultsSchema.omit({ size: true }).strict().default({}),
|
|
92
|
+
/** Pause semantics of this provider's `advancePause`. Absent: the provider cannot pause. */
|
|
93
|
+
pause: SandboxPauseStrategySchema.optional()
|
|
94
|
+
});
|
|
95
|
+
export function hasSandboxHostLaunchPreflight(implementation) {
|
|
96
|
+
return typeof implementation?.preflightHostLaunch === 'function';
|
|
97
|
+
}
|
|
33
98
|
const SandboxBaseSchema = RuntimeDescriptorSchema.extend({
|
|
34
99
|
kind: z.literal('infra/sandbox'),
|
|
100
|
+
bootstrap: SandboxBootstrapSchema.optional(),
|
|
101
|
+
/** Fleet-host profile; present when this sandbox provisions fleet hosts. */
|
|
102
|
+
hostProfile: SandboxHostProfileSchema.optional(),
|
|
35
103
|
/** Shell or script to run on sandbox start. */
|
|
36
104
|
entrypoint: z.string().optional(),
|
|
37
105
|
/** Container image or template snapshot. */
|
|
@@ -47,48 +115,19 @@ const SandboxBaseSchema = RuntimeDescriptorSchema.extend({
|
|
|
47
115
|
/** Environment variable requirements. */
|
|
48
116
|
env: z.array(deploymentEnvRequirementSchema).optional()
|
|
49
117
|
});
|
|
50
|
-
export const CloudflareSandboxConfigSchema = z.object({
|
|
51
|
-
/** Container image or template snapshot. */
|
|
52
|
-
image: z.string().optional()
|
|
53
|
-
});
|
|
54
|
-
export const DockerSandboxConfigSchema = z.object({
|
|
55
|
-
/** Container image. */
|
|
56
|
-
image: z.string(),
|
|
57
|
-
/** Volume mounts (hostPath: containerPath). */
|
|
58
|
-
volumes: z.record(z.string(), z.string()).optional()
|
|
59
|
-
});
|
|
60
|
-
export const DigitalOceanDropletSandboxConfigSchema = z.object({
|
|
61
|
-
/** Droplet size slug (e.g., 's-2vcpu-2gb'). */
|
|
62
|
-
dropletSize: z.string().min(1)
|
|
63
|
-
});
|
|
64
|
-
export const SandboxConfigSchema = z.union([
|
|
65
|
-
CloudflareSandboxConfigSchema.extend({ adapter: z.literal('cloudflare-sandbox') }),
|
|
66
|
-
DockerSandboxConfigSchema.extend({ adapter: z.literal('docker') }),
|
|
67
|
-
DigitalOceanDropletSandboxConfigSchema.extend({ adapter: z.literal('digitalocean-droplet') })
|
|
68
|
-
]);
|
|
69
118
|
export const SandboxDescriptorSchema = SandboxBaseSchema.extend({
|
|
70
|
-
/**
|
|
71
|
-
* Adapter-specific configuration. Discriminated union — each adapter
|
|
72
|
-
* package defines its own config schema under its discriminator key.
|
|
73
|
-
*/
|
|
119
|
+
/** Adapter-specific configuration, parsed by the adapter that owns it. */
|
|
74
120
|
config: SandboxConfigSchema.optional()
|
|
75
121
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
get config() {
|
|
84
|
-
return this.descriptor;
|
|
85
|
-
}
|
|
86
|
-
}
|
|
122
|
+
/**
|
|
123
|
+
* No default implementation: a sandbox that cannot provision is no sandbox.
|
|
124
|
+
* Resolving a descriptor whose adapter registered no loader for this scope
|
|
125
|
+
* refuses with the kernel's typed NOT_FOUND, naming the adapter, instead of
|
|
126
|
+
* handing back an inert shell every caller then misreports.
|
|
127
|
+
*/
|
|
87
128
|
export const sandboxKind = createRuntimeKind({
|
|
88
129
|
id: 'infra/sandbox',
|
|
89
130
|
descriptorSchema: SandboxDescriptorSchema,
|
|
90
|
-
|
|
91
|
-
discoveryPattern: INFRA_DISCOVERY_PATTERN,
|
|
92
|
-
extractStem
|
|
131
|
+
discoveryPatterns: INFRA_DISCOVERY_PATTERNS
|
|
93
132
|
});
|
|
94
133
|
//# sourceMappingURL=sandbox.kind.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox.kind.js","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sandbox.kind.js","sourceRoot":"","sources":["../../src/kinds/sandbox.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACtD,CAAC,CAAC;AAGH,6FAA6F;AAC7F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AAU3E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjD,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;IACjB,+CAA+C;IAC/C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpD,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,WAAW,CAAC;IAChD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC1B,CAAC,CAAC;AAGH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnD,mFAAmF;AACnF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1D,IAAI,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAGH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC;AAGpF;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChD,0DAA0D;IAC1D,QAAQ,EAAE,iBAAiB;IAC3B,uDAAuD;IACvD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,mFAAmF;IACnF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnD,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAChD,sDAAsD;IACtD,QAAQ,EAAE,kCAAkC,CAAC,OAAO,CAAC,EAAE,CAAC;IACxD;;;OAGG;IACH,WAAW,EAAE,kCAAkC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACzF,4FAA4F;IAC5F,KAAK,EAAE,0BAA0B,CAAC,QAAQ,EAAE;CAC5C,CAAC,CAAC;AAqBH,MAAM,UAAU,6BAA6B,CAC5C,cAAsE;IAEtE,OAAO,OAAO,cAAc,EAAE,mBAAmB,KAAK,UAAU,CAAC;AAClE,CAAC;AAED,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,MAAM,CAAC;IACxD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IAChC,SAAS,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAE5C,4EAA4E;IAC5E,WAAW,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IAEhD,+CAA+C;IAC/C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAEjC,4CAA4C;IAC5C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE5B,uBAAuB;IACvB,MAAM,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAE9C,iEAAiE;IACjE,aAAa,EAAE,0BAA0B,CAAC,QAAQ,EAAE;IAEpD,oDAAoD;IACpD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAEhC,sCAAsC;IACtC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAElC,yCAAyC;IACzC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC;IAC/D,0EAA0E;IAC1E,MAAM,EAAE,mBAAmB,CAAC,QAAQ,EAAE;CACtC,CAAC,CAAC;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,CAAoB;IAC/D,EAAE,EAAE,eAAe;IACnB,gBAAgB,EAAE,uBAAuB;IACzC,iBAAiB,EAAE,wBAAwB;CAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { CostBasis } from '@vibesdotdev/shared/billing/cost-basis';
|
|
2
|
+
import type { ComputeSourceDescriptor, ComputeSourceOs, ComputeSourceArch } from './compute-source.kind.ts';
|
|
3
|
+
export interface ComputeDemand {
|
|
4
|
+
os?: ComputeSourceOs;
|
|
5
|
+
arch?: ComputeSourceArch;
|
|
6
|
+
/** Extra capabilities the job needs; every one must be provided. */
|
|
7
|
+
labels?: readonly string[];
|
|
8
|
+
/**
|
|
9
|
+
* Whether the code about to run has been reviewed. `untrusted` is a fork
|
|
10
|
+
* PR or anything else where the ref is not controlled by the repository
|
|
11
|
+
* owner, and it restricts selection to ephemeral sources.
|
|
12
|
+
*/
|
|
13
|
+
trust: 'trusted' | 'untrusted';
|
|
14
|
+
/** Requesting scope. Required to select a `byo` source. */
|
|
15
|
+
owner?: {
|
|
16
|
+
type: string;
|
|
17
|
+
id: string;
|
|
18
|
+
};
|
|
19
|
+
/** Wall-clock ceiling the lease must be able to cover. */
|
|
20
|
+
maxDurationSeconds?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* What a lease of this length would cost us, in the provider's own terms.
|
|
24
|
+
*
|
|
25
|
+
* Conservative on purpose. `usdPerSecondCpuActive` is only charged while the
|
|
26
|
+
* vCPUs are busy, and we do not measure CPU-seconds in CI, so ranking assumes
|
|
27
|
+
* they are busy the whole time. Assuming idle would rank a CPU-metered source
|
|
28
|
+
* as cheap and then hand us the bill — the failure the caller cannot see. A
|
|
29
|
+
* job that really does idle costs less than this says, never more.
|
|
30
|
+
*
|
|
31
|
+
* `minimumUsd` is applied as a floor rather than added, because that is how a
|
|
32
|
+
* provider minimum actually works: a 10-second droplet costs the minimum, not
|
|
33
|
+
* the minimum plus 10 seconds.
|
|
34
|
+
*
|
|
35
|
+
* When the caller states no duration there is nothing to multiply, so the
|
|
36
|
+
* comparison falls back to the fixed costs — which still orders a free
|
|
37
|
+
* bring-your-own machine below a paid one.
|
|
38
|
+
*/
|
|
39
|
+
export declare function expectedCostUsd(source: ComputeSourceDescriptor, maxDurationSeconds: number | undefined): number;
|
|
40
|
+
/**
|
|
41
|
+
* Which registered compute source should serve this demand.
|
|
42
|
+
*
|
|
43
|
+
* Throws rather than returning undefined: a caller that cannot get the machine
|
|
44
|
+
* class it asked for must stop, not proceed on something else.
|
|
45
|
+
*/
|
|
46
|
+
export declare function selectComputeSource(sources: readonly ComputeSourceDescriptor[], demand: ComputeDemand): ComputeSourceDescriptor;
|
|
47
|
+
/**
|
|
48
|
+
* The cost basis to bill a lease from, in the billing layer's own vocabulary.
|
|
49
|
+
*
|
|
50
|
+
* The rating engine takes `CostBasis[]` and, when given none, falls back to
|
|
51
|
+
* `unknownCostHeuristic` — a $0.0001/compute-second floor doubled by a safety
|
|
52
|
+
* multiplier, or $0.72/hour. Every source we own is cheaper than that: a
|
|
53
|
+
* Cloudflare `standard-4` at full CPU is $0.40/hour and a DigitalOcean
|
|
54
|
+
* `s-2vcpu-4gb` is $0.036/hour. Handing the engine the real number is
|
|
55
|
+
* therefore not a tightening — it stops CI from being billed at up to twenty
|
|
56
|
+
* times what it costs us.
|
|
57
|
+
*
|
|
58
|
+
* Deliberately uses the SAME rate `expectedCostUsd` ranks on, including the
|
|
59
|
+
* assumption that metered CPU is fully active. If selection and the invoice
|
|
60
|
+
* disagreed about what a source costs, one of them would be lying, and the
|
|
61
|
+
* cheaper-looking source would win work it could not afford. The assumption
|
|
62
|
+
* only ever errs toward billing our real exposure rather than under-recovering
|
|
63
|
+
* it, and it still lands well under the heuristic it replaces.
|
|
64
|
+
*
|
|
65
|
+
* `minimumUsd` is NOT expressed here. A provider floor applies to a lease, not
|
|
66
|
+
* to a second, and there is no way to say "per-unit, but never less than X" in
|
|
67
|
+
* a per-unit basis. Folding it into the rate would inflate every long lease.
|
|
68
|
+
* The floor belongs to whatever holds the lease, and this returns only what is
|
|
69
|
+
* true per second.
|
|
70
|
+
*/
|
|
71
|
+
export declare function computeSourceCostBasis(source: ComputeSourceDescriptor): CostBasis[];
|
|
72
|
+
//# sourceMappingURL=select-compute-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select-compute-source.d.ts","sourceRoot":"","sources":["../../src/kinds/select-compute-source.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE5G,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,EAAE,eAAe,CAAC;IACrB,IAAI,CAAC,EAAE,iBAAiB,CAAC;IACzB,oEAAoE;IACpE,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B;;;;OAIG;IACH,KAAK,EAAE,SAAS,GAAG,WAAW,CAAC;IAC/B,2DAA2D;IAC3D,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC5B;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,uBAAuB,EAC/B,kBAAkB,EAAE,MAAM,GAAG,SAAS,GACpC,MAAM,CAMR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,MAAM,EAAE,aAAa,GACnB,uBAAuB,CA+EzB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,EAAE,CAUnF"}
|