@vibesdotdev/infra-core 0.0.1 → 1.0.0-rc.4
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 +33 -63
- 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-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.d.ts +8 -4
- package/dist/deployment.d.ts.map +1 -1
- package/dist/deployment.js +30 -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 +34 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -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 +62 -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 +381 -0
- package/dist/kinds/build-job.kind.d.ts.map +1 -0
- package/dist/kinds/build-job.kind.js +216 -0
- package/dist/kinds/build-job.kind.js.map +1 -0
- package/dist/kinds/cache.kind.d.ts +39 -92
- package/dist/kinds/cache.kind.d.ts.map +1 -1
- package/dist/kinds/cache.kind.js +26 -51
- 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 +138 -0
- package/dist/kinds/compute-source.kind.d.ts.map +1 -0
- package/dist/kinds/compute-source.kind.js +145 -0
- package/dist/kinds/compute-source.kind.js.map +1 -0
- package/dist/kinds/compute-sources.descriptors.d.ts +45 -0
- package/dist/kinds/compute-sources.descriptors.d.ts.map +1 -0
- package/dist/kinds/compute-sources.descriptors.js +93 -0
- package/dist/kinds/compute-sources.descriptors.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-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 +23 -34
- package/dist/kinds/git-hosting.kind.js.map +1 -1
- package/dist/kinds/index.d.ts +40 -15
- package/dist/kinds/index.d.ts.map +1 -1
- package/dist/kinds/index.js +39 -14
- package/dist/kinds/index.js.map +1 -1
- package/dist/kinds/inventory.kind.d.ts +326 -0
- package/dist/kinds/inventory.kind.d.ts.map +1 -0
- package/dist/kinds/inventory.kind.js +188 -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 +27 -31
- package/dist/kinds/package-registry.kind.d.ts.map +1 -1
- package/dist/kinds/package-registry.kind.js +13 -26
- 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 -36
- package/dist/kinds/sandbox.kind.d.ts.map +1 -1
- package/dist/kinds/sandbox.kind.js +80 -34
- 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 +40 -0
- package/dist/kinds/spend-guard.kind.d.ts.map +1 -0
- package/dist/kinds/spend-guard.kind.js +133 -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 +115 -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 +291 -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 +336 -0
- package/dist/schemas/deployment-provider.d.ts.map +1 -0
- package/dist/schemas/deployment-provider.js +198 -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 +190 -20
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +137 -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 +132 -0
- package/dist/web-app-projection.d.ts.map +1 -0
- package/dist/web-app-projection.js +93 -0
- package/dist/web-app-projection.js.map +1 -0
- package/package.json +89 -39
- package/SPEC.md +0 -169
- 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
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/cluster
|
|
3
|
+
*
|
|
4
|
+
* Provider-neutral Kubernetes cluster descriptor. The base captures the
|
|
5
|
+
* cross-provider shape (region, version, HA, maintenance, observability,
|
|
6
|
+
* SSO, control-plane firewall, gateway API, routing agent). Adapter-specific
|
|
7
|
+
* fields live under `config`.
|
|
8
|
+
*/
|
|
9
|
+
import * as z from 'zod/v4';
|
|
10
|
+
import type { RuntimeDescriptor } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
11
|
+
import type { KindContext } from '@vibesdotdev/kernel/schemas/kind';
|
|
12
|
+
/**
|
|
13
|
+
* Inline credential reference schema. Mirrors the public Integrations core
|
|
14
|
+
* credential contract without importing a provider implementation.
|
|
15
|
+
* `CredentialReferenceSchema` to avoid a cross-package dependency from
|
|
16
|
+
* `infra-core` to `connector-base`. Connector packages can still resolve
|
|
17
|
+
* these references through the canonical resolver.
|
|
18
|
+
*/
|
|
19
|
+
declare const CredentialReferenceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
20
|
+
source: z.ZodLiteral<"secret">;
|
|
21
|
+
key: z.ZodString;
|
|
22
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
23
|
+
store: z.ZodOptional<z.ZodString>;
|
|
24
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
25
|
+
source: z.ZodLiteral<"env">;
|
|
26
|
+
key: z.ZodString;
|
|
27
|
+
}, z.core.$strip>], "source">;
|
|
28
|
+
export type ClusterCredentialReference = z.infer<typeof CredentialReferenceSchema>;
|
|
29
|
+
export declare const ClusterMaintenancePolicySchema: z.ZodObject<{
|
|
30
|
+
day: z.ZodString;
|
|
31
|
+
startTime: z.ZodString;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
export type ClusterMaintenancePolicy = z.infer<typeof ClusterMaintenancePolicySchema>;
|
|
34
|
+
export declare const ClusterControlPlaneFirewallSchema: z.ZodObject<{
|
|
35
|
+
enabled: z.ZodBoolean;
|
|
36
|
+
allowedAddresses: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
export type ClusterControlPlaneFirewall = z.infer<typeof ClusterControlPlaneFirewallSchema>;
|
|
39
|
+
export declare const ClusterSsoSchema: z.ZodObject<{
|
|
40
|
+
enabled: z.ZodBoolean;
|
|
41
|
+
issuerUrl: z.ZodString;
|
|
42
|
+
clientIdSecretRef: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
43
|
+
source: z.ZodLiteral<"secret">;
|
|
44
|
+
key: z.ZodString;
|
|
45
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
46
|
+
store: z.ZodOptional<z.ZodString>;
|
|
47
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
48
|
+
source: z.ZodLiteral<"env">;
|
|
49
|
+
key: z.ZodString;
|
|
50
|
+
}, z.core.$strip>], "source">;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
export type ClusterSso = z.infer<typeof ClusterSsoSchema>;
|
|
53
|
+
export declare const ClusterObservabilitySchema: z.ZodObject<{
|
|
54
|
+
metrics: z.ZodDefault<z.ZodBoolean>;
|
|
55
|
+
logs: z.ZodDefault<z.ZodBoolean>;
|
|
56
|
+
hubble: z.ZodOptional<z.ZodBoolean>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
export type ClusterObservability = z.infer<typeof ClusterObservabilitySchema>;
|
|
59
|
+
export declare const ClusterVpcRefSchema: z.ZodObject<{
|
|
60
|
+
uuid: z.ZodOptional<z.ZodString>;
|
|
61
|
+
name: z.ZodOptional<z.ZodString>;
|
|
62
|
+
ipRange: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
export type ClusterVpcRef = z.infer<typeof ClusterVpcRefSchema>;
|
|
65
|
+
/**
|
|
66
|
+
* Adapter-specific configuration: the adapter id plus its own fields. Each
|
|
67
|
+
* adapter package defines and parses its own config schema (DigitalOcean's
|
|
68
|
+
* Kubernetes cluster config lives in
|
|
69
|
+
* `@vibesdotdev/integrations-digitalocean`); this kind names no provider,
|
|
70
|
+
* so a config for any adapter — including one contributed by a user
|
|
71
|
+
* plugin — parses here, and the adapter validates its own grammar.
|
|
72
|
+
*/
|
|
73
|
+
export declare const ClusterConfigSchema: z.ZodObject<{
|
|
74
|
+
adapter: z.ZodString;
|
|
75
|
+
}, z.core.$loose>;
|
|
76
|
+
export type ClusterConfig = z.infer<typeof ClusterConfigSchema>;
|
|
77
|
+
export declare const ClusterDescriptorSchema: z.ZodObject<{
|
|
78
|
+
id: z.ZodString;
|
|
79
|
+
name: z.ZodOptional<z.ZodString>;
|
|
80
|
+
description: z.ZodOptional<z.ZodString>;
|
|
81
|
+
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
82
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
83
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
84
|
+
capabilityId: z.ZodOptional<z.ZodString>;
|
|
85
|
+
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
86
|
+
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
87
|
+
retention: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
88
|
+
maxAgeDays: z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
maxEntries: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
maxBytes: z.ZodOptional<z.ZodNumber>;
|
|
91
|
+
cascadeFrom: z.ZodOptional<z.ZodString>;
|
|
92
|
+
ageField: z.ZodOptional<z.ZodString>;
|
|
93
|
+
reason: z.ZodString;
|
|
94
|
+
enforcedBy: z.ZodOptional<z.ZodString>;
|
|
95
|
+
}, z.core.$strip>]>>;
|
|
96
|
+
kind: z.ZodLiteral<"infra/cluster">;
|
|
97
|
+
version: z.ZodOptional<z.ZodString>;
|
|
98
|
+
region: z.ZodOptional<z.ZodString>;
|
|
99
|
+
ha: z.ZodOptional<z.ZodBoolean>;
|
|
100
|
+
autoUpgrade: z.ZodOptional<z.ZodBoolean>;
|
|
101
|
+
surgeUpgrade: z.ZodOptional<z.ZodBoolean>;
|
|
102
|
+
maintenancePolicy: z.ZodOptional<z.ZodObject<{
|
|
103
|
+
day: z.ZodString;
|
|
104
|
+
startTime: z.ZodString;
|
|
105
|
+
}, z.core.$strip>>;
|
|
106
|
+
controlPlaneFirewall: z.ZodOptional<z.ZodObject<{
|
|
107
|
+
enabled: z.ZodBoolean;
|
|
108
|
+
allowedAddresses: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
109
|
+
}, z.core.$strip>>;
|
|
110
|
+
sso: z.ZodOptional<z.ZodObject<{
|
|
111
|
+
enabled: z.ZodBoolean;
|
|
112
|
+
issuerUrl: z.ZodString;
|
|
113
|
+
clientIdSecretRef: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
114
|
+
source: z.ZodLiteral<"secret">;
|
|
115
|
+
key: z.ZodString;
|
|
116
|
+
scope: z.ZodOptional<z.ZodString>;
|
|
117
|
+
store: z.ZodOptional<z.ZodString>;
|
|
118
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
119
|
+
source: z.ZodLiteral<"env">;
|
|
120
|
+
key: z.ZodString;
|
|
121
|
+
}, z.core.$strip>], "source">;
|
|
122
|
+
}, z.core.$strip>>;
|
|
123
|
+
vpc: z.ZodOptional<z.ZodObject<{
|
|
124
|
+
uuid: z.ZodOptional<z.ZodString>;
|
|
125
|
+
name: z.ZodOptional<z.ZodString>;
|
|
126
|
+
ipRange: z.ZodOptional<z.ZodString>;
|
|
127
|
+
}, z.core.$strip>>;
|
|
128
|
+
gatewayApi: z.ZodOptional<z.ZodObject<{
|
|
129
|
+
enabled: z.ZodBoolean;
|
|
130
|
+
}, z.core.$strip>>;
|
|
131
|
+
routingAgent: z.ZodOptional<z.ZodObject<{
|
|
132
|
+
enabled: z.ZodBoolean;
|
|
133
|
+
}, z.core.$strip>>;
|
|
134
|
+
observability: z.ZodOptional<z.ZodObject<{
|
|
135
|
+
metrics: z.ZodDefault<z.ZodBoolean>;
|
|
136
|
+
logs: z.ZodDefault<z.ZodBoolean>;
|
|
137
|
+
hubble: z.ZodOptional<z.ZodBoolean>;
|
|
138
|
+
}, z.core.$strip>>;
|
|
139
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
140
|
+
config: z.ZodOptional<z.ZodObject<{
|
|
141
|
+
adapter: z.ZodString;
|
|
142
|
+
}, z.core.$loose>>;
|
|
143
|
+
}, z.core.$strip>;
|
|
144
|
+
export type ClusterDescriptor = z.infer<typeof ClusterDescriptorSchema>;
|
|
145
|
+
declare class DefaultClusterImplementation {
|
|
146
|
+
readonly descriptor: RuntimeDescriptor;
|
|
147
|
+
readonly context: KindContext;
|
|
148
|
+
/** The descriptor as this kind's schema reads it. */
|
|
149
|
+
readonly config: ClusterDescriptor;
|
|
150
|
+
constructor(descriptor: RuntimeDescriptor, context: KindContext);
|
|
151
|
+
}
|
|
152
|
+
export declare const clusterKind: import("@vibesdotdev/kernel").RuntimeKindDescriptorRecord<DefaultClusterImplementation>;
|
|
153
|
+
export {};
|
|
154
|
+
//# sourceMappingURL=cluster.kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/cluster.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIpE;;;;;;GAMG;AACH,QAAA,MAAM,yBAAyB;;;;;;;;6BAG7B,CAAC;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEnF,eAAO,MAAM,8BAA8B;;;iBAKzC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,eAAO,MAAM,iCAAiC;;;iBAG5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;iBAI3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,eAAO,MAAM,0BAA0B;;;;iBAIrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,mBAAmB;;;;iBAI9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAqBhE;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;iBAE9B,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAElC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,cAAM,4BAA4B;aAIhB,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,WAAW;IAJrC,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;gBAElB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,WAAW;CAKrC;AAED,eAAO,MAAM,WAAW,yFAKtB,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/cluster
|
|
3
|
+
*
|
|
4
|
+
* Provider-neutral Kubernetes cluster descriptor. The base captures the
|
|
5
|
+
* cross-provider shape (region, version, HA, maintenance, observability,
|
|
6
|
+
* SSO, control-plane firewall, gateway API, routing agent). Adapter-specific
|
|
7
|
+
* fields live under `config`.
|
|
8
|
+
*/
|
|
9
|
+
import * as z from 'zod/v4';
|
|
10
|
+
import { createRuntimeKind } from '@vibesdotdev/kernel/factory/kind';
|
|
11
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
12
|
+
import { readKindDescriptor } from "./read-descriptor.js";
|
|
13
|
+
import { INFRA_DISCOVERY_PATTERNS } from "./discovery.js";
|
|
14
|
+
/**
|
|
15
|
+
* Inline credential reference schema. Mirrors the public Integrations core
|
|
16
|
+
* credential contract without importing a provider implementation.
|
|
17
|
+
* `CredentialReferenceSchema` to avoid a cross-package dependency from
|
|
18
|
+
* `infra-core` to `connector-base`. Connector packages can still resolve
|
|
19
|
+
* these references through the canonical resolver.
|
|
20
|
+
*/
|
|
21
|
+
const CredentialReferenceSchema = z.discriminatedUnion('source', [
|
|
22
|
+
z.object({ source: z.literal('secret'), key: z.string(), scope: z.string().optional(), store: z.string().optional() }),
|
|
23
|
+
z.object({ source: z.literal('env'), key: z.string() })
|
|
24
|
+
]);
|
|
25
|
+
export const ClusterMaintenancePolicySchema = z.object({
|
|
26
|
+
/** Day of week (any|monday|...|sunday). */
|
|
27
|
+
day: z.string().min(1),
|
|
28
|
+
/** UTC start time, HH:MM. */
|
|
29
|
+
startTime: z.string().regex(/^\d{2}:\d{2}$/)
|
|
30
|
+
});
|
|
31
|
+
export const ClusterControlPlaneFirewallSchema = z.object({
|
|
32
|
+
enabled: z.boolean(),
|
|
33
|
+
allowedAddresses: z.array(z.string()).default([])
|
|
34
|
+
});
|
|
35
|
+
export const ClusterSsoSchema = z.object({
|
|
36
|
+
enabled: z.boolean(),
|
|
37
|
+
issuerUrl: z.string().url(),
|
|
38
|
+
clientIdSecretRef: CredentialReferenceSchema
|
|
39
|
+
});
|
|
40
|
+
export const ClusterObservabilitySchema = z.object({
|
|
41
|
+
metrics: z.boolean().default(false),
|
|
42
|
+
logs: z.boolean().default(false),
|
|
43
|
+
hubble: z.boolean().optional()
|
|
44
|
+
});
|
|
45
|
+
export const ClusterVpcRefSchema = z.object({
|
|
46
|
+
uuid: z.string().optional(),
|
|
47
|
+
name: z.string().optional(),
|
|
48
|
+
ipRange: z.string().optional()
|
|
49
|
+
});
|
|
50
|
+
const ClusterBaseSchema = RuntimeDescriptorSchema.extend({
|
|
51
|
+
kind: z.literal('infra/cluster'),
|
|
52
|
+
/** Kubernetes version slug (provider-specific). */
|
|
53
|
+
version: z.string().min(1).optional(),
|
|
54
|
+
/** Region slug. */
|
|
55
|
+
region: z.string().min(1).optional(),
|
|
56
|
+
ha: z.boolean().optional(),
|
|
57
|
+
autoUpgrade: z.boolean().optional(),
|
|
58
|
+
surgeUpgrade: z.boolean().optional(),
|
|
59
|
+
maintenancePolicy: ClusterMaintenancePolicySchema.optional(),
|
|
60
|
+
controlPlaneFirewall: ClusterControlPlaneFirewallSchema.optional(),
|
|
61
|
+
sso: ClusterSsoSchema.optional(),
|
|
62
|
+
vpc: ClusterVpcRefSchema.optional(),
|
|
63
|
+
gatewayApi: z.object({ enabled: z.boolean() }).optional(),
|
|
64
|
+
routingAgent: z.object({ enabled: z.boolean() }).optional(),
|
|
65
|
+
observability: ClusterObservabilitySchema.optional(),
|
|
66
|
+
tags: z.array(z.string()).optional()
|
|
67
|
+
});
|
|
68
|
+
/**
|
|
69
|
+
* Adapter-specific configuration: the adapter id plus its own fields. Each
|
|
70
|
+
* adapter package defines and parses its own config schema (DigitalOcean's
|
|
71
|
+
* Kubernetes cluster config lives in
|
|
72
|
+
* `@vibesdotdev/integrations-digitalocean`); this kind names no provider,
|
|
73
|
+
* so a config for any adapter — including one contributed by a user
|
|
74
|
+
* plugin — parses here, and the adapter validates its own grammar.
|
|
75
|
+
*/
|
|
76
|
+
export const ClusterConfigSchema = z.looseObject({
|
|
77
|
+
adapter: z.string().min(1)
|
|
78
|
+
});
|
|
79
|
+
export const ClusterDescriptorSchema = ClusterBaseSchema.extend({
|
|
80
|
+
config: ClusterConfigSchema.optional()
|
|
81
|
+
});
|
|
82
|
+
class DefaultClusterImplementation {
|
|
83
|
+
descriptor;
|
|
84
|
+
context;
|
|
85
|
+
/** The descriptor as this kind's schema reads it. */
|
|
86
|
+
config;
|
|
87
|
+
constructor(descriptor, context) {
|
|
88
|
+
this.descriptor = descriptor;
|
|
89
|
+
this.context = context;
|
|
90
|
+
this.config = readKindDescriptor(ClusterDescriptorSchema, descriptor);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
export const clusterKind = createRuntimeKind({
|
|
94
|
+
id: 'infra/cluster',
|
|
95
|
+
descriptorSchema: ClusterDescriptorSchema,
|
|
96
|
+
defaultImplementation: DefaultClusterImplementation,
|
|
97
|
+
discoveryPatterns: INFRA_DISCOVERY_PATTERNS
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=cluster.kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cluster.kind.js","sourceRoot":"","sources":["../../src/kinds/cluster.kind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/compute-source
|
|
3
|
+
*
|
|
4
|
+
* One registered source we can lease a machine, container or sandbox from.
|
|
5
|
+
*
|
|
6
|
+
* Forge CI and build jobs should not own compute. They state what a job needs
|
|
7
|
+
* and the fleet leases a host; every place a host can come from — a Cloudflare
|
|
8
|
+
* sandbox, a DigitalOcean droplet, an AWS instance, or a machine the user
|
|
9
|
+
* brought themselves — is one descriptor of this kind. That is what keeps
|
|
10
|
+
* "bring your own provider" the same code path as ours rather than a second
|
|
11
|
+
* one, and it is why selection can stay a single policy instead of a branch
|
|
12
|
+
* per caller.
|
|
13
|
+
*
|
|
14
|
+
* Every field states what the source can ACTUALLY provide, mirroring
|
|
15
|
+
* `ci/executor`. A descriptor that overstates itself is how a
|
|
16
|
+
* `runsOn: windows` job quietly runs on linux, so selection filters on these
|
|
17
|
+
* and refuses rather than substitutes.
|
|
18
|
+
*
|
|
19
|
+
* Not to be confused with `infra/inventory`, which is read-only enumeration of
|
|
20
|
+
* existing provider resources. This kind is about where new compute comes from.
|
|
21
|
+
*/
|
|
22
|
+
import * as z from 'zod/v4';
|
|
23
|
+
import type { RuntimeDescriptor } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
24
|
+
import type { KindContext } from '@vibesdotdev/kernel/schemas/kind';
|
|
25
|
+
export declare const ComputeSourceOsSchema: z.ZodEnum<{
|
|
26
|
+
linux: "linux";
|
|
27
|
+
macos: "macos";
|
|
28
|
+
windows: "windows";
|
|
29
|
+
}>;
|
|
30
|
+
export type ComputeSourceOs = z.infer<typeof ComputeSourceOsSchema>;
|
|
31
|
+
export declare const ComputeSourceArchSchema: z.ZodEnum<{
|
|
32
|
+
x64: "x64";
|
|
33
|
+
arm64: "arm64";
|
|
34
|
+
}>;
|
|
35
|
+
export type ComputeSourceArch = z.infer<typeof ComputeSourceArchSchema>;
|
|
36
|
+
/**
|
|
37
|
+
* Who owns the hardware, which decides who pays for it.
|
|
38
|
+
*
|
|
39
|
+
* `vibes` — our inventory, billed to the requesting account in credits.
|
|
40
|
+
* `byo` — the user's own provider. We facilitate; we do not bill compute.
|
|
41
|
+
* Mirrors the `hardware: 'consumer'` path the billing rating engine
|
|
42
|
+
* already short-circuits to zero credits.
|
|
43
|
+
*/
|
|
44
|
+
export declare const ComputeSourceOwnerScopeSchema: z.ZodEnum<{
|
|
45
|
+
vibes: "vibes";
|
|
46
|
+
byo: "byo";
|
|
47
|
+
}>;
|
|
48
|
+
export type ComputeSourceOwnerScope = z.infer<typeof ComputeSourceOwnerScopeSchema>;
|
|
49
|
+
export declare const ComputeSourceCapabilitiesSchema: z.ZodObject<{
|
|
50
|
+
os: z.ZodArray<z.ZodEnum<{
|
|
51
|
+
linux: "linux";
|
|
52
|
+
macos: "macos";
|
|
53
|
+
windows: "windows";
|
|
54
|
+
}>>;
|
|
55
|
+
arch: z.ZodArray<z.ZodEnum<{
|
|
56
|
+
x64: "x64";
|
|
57
|
+
arm64: "arm64";
|
|
58
|
+
}>>;
|
|
59
|
+
labels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
60
|
+
}, z.core.$strip>;
|
|
61
|
+
export type ComputeSourceCapabilities = z.infer<typeof ComputeSourceCapabilitiesSchema>;
|
|
62
|
+
export declare const ComputeSourceDescriptorSchema: z.ZodObject<{
|
|
63
|
+
id: z.ZodString;
|
|
64
|
+
name: z.ZodOptional<z.ZodString>;
|
|
65
|
+
description: z.ZodOptional<z.ZodString>;
|
|
66
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
67
|
+
hardware: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
68
|
+
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
69
|
+
priority: z.ZodOptional<z.ZodNumber>;
|
|
70
|
+
capabilityId: z.ZodOptional<z.ZodString>;
|
|
71
|
+
requiredContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
72
|
+
optionalContext: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
73
|
+
config: z.ZodOptional<z.ZodUnknown>;
|
|
74
|
+
retention: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
75
|
+
maxAgeDays: z.ZodOptional<z.ZodNumber>;
|
|
76
|
+
maxEntries: z.ZodOptional<z.ZodNumber>;
|
|
77
|
+
maxBytes: z.ZodOptional<z.ZodNumber>;
|
|
78
|
+
cascadeFrom: z.ZodOptional<z.ZodString>;
|
|
79
|
+
ageField: z.ZodOptional<z.ZodString>;
|
|
80
|
+
reason: z.ZodString;
|
|
81
|
+
enforcedBy: z.ZodOptional<z.ZodString>;
|
|
82
|
+
}, z.core.$strip>]>>;
|
|
83
|
+
kind: z.ZodLiteral<"infra/compute-source">;
|
|
84
|
+
provides: z.ZodObject<{
|
|
85
|
+
os: z.ZodArray<z.ZodEnum<{
|
|
86
|
+
linux: "linux";
|
|
87
|
+
macos: "macos";
|
|
88
|
+
windows: "windows";
|
|
89
|
+
}>>;
|
|
90
|
+
arch: z.ZodArray<z.ZodEnum<{
|
|
91
|
+
x64: "x64";
|
|
92
|
+
arm64: "arm64";
|
|
93
|
+
}>>;
|
|
94
|
+
labels: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
95
|
+
}, z.core.$strip>;
|
|
96
|
+
ephemeral: z.ZodBoolean;
|
|
97
|
+
cost: z.ZodObject<{
|
|
98
|
+
usdPerSecond: z.ZodNumber;
|
|
99
|
+
usdPerSecondCpuActive: z.ZodOptional<z.ZodNumber>;
|
|
100
|
+
initialUsd: z.ZodOptional<z.ZodNumber>;
|
|
101
|
+
minimumUsd: z.ZodOptional<z.ZodNumber>;
|
|
102
|
+
source: z.ZodEnum<{
|
|
103
|
+
published: "published";
|
|
104
|
+
manual: "manual";
|
|
105
|
+
measured: "measured";
|
|
106
|
+
heuristic: "heuristic";
|
|
107
|
+
}>;
|
|
108
|
+
confidence: z.ZodEnum<{
|
|
109
|
+
low: "low";
|
|
110
|
+
medium: "medium";
|
|
111
|
+
high: "high";
|
|
112
|
+
}>;
|
|
113
|
+
effectiveAt: z.ZodString;
|
|
114
|
+
note: z.ZodOptional<z.ZodString>;
|
|
115
|
+
}, z.core.$strip>;
|
|
116
|
+
ownerScope: z.ZodDefault<z.ZodEnum<{
|
|
117
|
+
vibes: "vibes";
|
|
118
|
+
byo: "byo";
|
|
119
|
+
}>>;
|
|
120
|
+
owner: z.ZodOptional<z.ZodObject<{
|
|
121
|
+
type: z.ZodString;
|
|
122
|
+
id: z.ZodString;
|
|
123
|
+
}, z.core.$strip>>;
|
|
124
|
+
warmPool: z.ZodDefault<z.ZodBoolean>;
|
|
125
|
+
maxLeaseSeconds: z.ZodNumber;
|
|
126
|
+
supportsCancellation: z.ZodDefault<z.ZodBoolean>;
|
|
127
|
+
}, z.core.$strip>;
|
|
128
|
+
export type ComputeSourceDescriptor = z.infer<typeof ComputeSourceDescriptorSchema>;
|
|
129
|
+
declare class DefaultComputeSourceImplementation {
|
|
130
|
+
readonly descriptor: RuntimeDescriptor;
|
|
131
|
+
readonly context: KindContext;
|
|
132
|
+
/** The descriptor as this kind's schema reads it. */
|
|
133
|
+
readonly config: ComputeSourceDescriptor;
|
|
134
|
+
constructor(descriptor: RuntimeDescriptor, context: KindContext);
|
|
135
|
+
}
|
|
136
|
+
export declare const computeSourceKind: import("@vibesdotdev/kernel").RuntimeKindDescriptorRecord<DefaultComputeSourceImplementation>;
|
|
137
|
+
export {};
|
|
138
|
+
//# sourceMappingURL=compute-source.kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-source.kind.d.ts","sourceRoot":"","sources":["../../src/kinds/compute-source.kind.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAG5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQpE,eAAO,MAAM,qBAAqB;;;;EAAwC,CAAC;AAC3E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,eAAO,MAAM,uBAAuB;;;EAA2B,CAAC;AAChE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B;;;EAA2B,CAAC;AACtE,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,+BAA+B;;;;;;;;;;;iBAK1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmFxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,cAAM,kCAAkC;aAItB,UAAU,EAAE,iBAAiB;aAC7B,OAAO,EAAE,WAAW;IAJrC,qDAAqD;IACrD,QAAQ,CAAC,MAAM,EAAE,uBAAuB,CAAC;gBAExB,UAAU,EAAE,iBAAiB,EAC7B,OAAO,EAAE,WAAW;CAKrC;AAED,eAAO,MAAM,iBAAiB,+FAQ5B,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind: infra/compute-source
|
|
3
|
+
*
|
|
4
|
+
* One registered source we can lease a machine, container or sandbox from.
|
|
5
|
+
*
|
|
6
|
+
* Forge CI and build jobs should not own compute. They state what a job needs
|
|
7
|
+
* and the fleet leases a host; every place a host can come from — a Cloudflare
|
|
8
|
+
* sandbox, a DigitalOcean droplet, an AWS instance, or a machine the user
|
|
9
|
+
* brought themselves — is one descriptor of this kind. That is what keeps
|
|
10
|
+
* "bring your own provider" the same code path as ours rather than a second
|
|
11
|
+
* one, and it is why selection can stay a single policy instead of a branch
|
|
12
|
+
* per caller.
|
|
13
|
+
*
|
|
14
|
+
* Every field states what the source can ACTUALLY provide, mirroring
|
|
15
|
+
* `ci/executor`. A descriptor that overstates itself is how a
|
|
16
|
+
* `runsOn: windows` job quietly runs on linux, so selection filters on these
|
|
17
|
+
* and refuses rather than substitutes.
|
|
18
|
+
*
|
|
19
|
+
* Not to be confused with `infra/inventory`, which is read-only enumeration of
|
|
20
|
+
* existing provider resources. This kind is about where new compute comes from.
|
|
21
|
+
*/
|
|
22
|
+
import * as z from 'zod/v4';
|
|
23
|
+
import { createRuntimeKind } from '@vibesdotdev/kernel/factory/kind';
|
|
24
|
+
import { RuntimeDescriptorSchema } from '@vibesdotdev/kernel/schemas/descriptor';
|
|
25
|
+
import { readKindDescriptor } from "./read-descriptor.js";
|
|
26
|
+
import { costBasisConfidenceSchema, costBasisSourceSchema } from '@vibesdotdev/shared/billing/cost-basis';
|
|
27
|
+
import { INFRA_DISCOVERY_PATTERNS } from "./discovery.js";
|
|
28
|
+
export const ComputeSourceOsSchema = z.enum(['linux', 'macos', 'windows']);
|
|
29
|
+
export const ComputeSourceArchSchema = z.enum(['x64', 'arm64']);
|
|
30
|
+
/**
|
|
31
|
+
* Who owns the hardware, which decides who pays for it.
|
|
32
|
+
*
|
|
33
|
+
* `vibes` — our inventory, billed to the requesting account in credits.
|
|
34
|
+
* `byo` — the user's own provider. We facilitate; we do not bill compute.
|
|
35
|
+
* Mirrors the `hardware: 'consumer'` path the billing rating engine
|
|
36
|
+
* already short-circuits to zero credits.
|
|
37
|
+
*/
|
|
38
|
+
export const ComputeSourceOwnerScopeSchema = z.enum(['vibes', 'byo']);
|
|
39
|
+
export const ComputeSourceCapabilitiesSchema = z.object({
|
|
40
|
+
os: z.array(ComputeSourceOsSchema).min(1),
|
|
41
|
+
arch: z.array(ComputeSourceArchSchema).min(1),
|
|
42
|
+
/** Extra capabilities a job may demand, e.g. `gpu`, `docker`, `nested-virt`. */
|
|
43
|
+
labels: z.array(z.string().min(1)).default([])
|
|
44
|
+
});
|
|
45
|
+
export const ComputeSourceDescriptorSchema = RuntimeDescriptorSchema.extend({
|
|
46
|
+
kind: z.literal('infra/compute-source'),
|
|
47
|
+
/** What this source can actually provide. Selection filters on exactly this. */
|
|
48
|
+
provides: ComputeSourceCapabilitiesSchema,
|
|
49
|
+
/**
|
|
50
|
+
* Whether a lease is destroyed after a single job.
|
|
51
|
+
*
|
|
52
|
+
* Deliberately has NO default. Untrusted refs (fork PRs) may only land on
|
|
53
|
+
* ephemeral sources, so this field decides whether a source can run code
|
|
54
|
+
* nobody has reviewed. A default would silently answer that question for a
|
|
55
|
+
* descriptor author who never considered it; requiring it makes the author
|
|
56
|
+
* say so. Guessing either way is wrong — `true` wrongly admits a persistent
|
|
57
|
+
* host, `false` wrongly excludes a genuinely disposable one.
|
|
58
|
+
*/
|
|
59
|
+
ephemeral: z.boolean(),
|
|
60
|
+
/**
|
|
61
|
+
* What this source costs us, quoted from the provider's own price list
|
|
62
|
+
* rather than assigned by hand.
|
|
63
|
+
*
|
|
64
|
+
* An earlier draft ranked on an integer `costTier` somebody picked. That is
|
|
65
|
+
* a guess dressed as a fact, and it drifts the moment a provider changes
|
|
66
|
+
* price. A real rate ranks correctly on its own and is the same number the
|
|
67
|
+
* rating engine bills from, so selection and the invoice can never disagree
|
|
68
|
+
* about which source was cheaper.
|
|
69
|
+
*
|
|
70
|
+
* The field set is dictated by how the two providers actually bill, learned
|
|
71
|
+
* by reading their price lists rather than assumed:
|
|
72
|
+
*
|
|
73
|
+
* * `usdPerSecond` is charged for every second of the lease. On a
|
|
74
|
+
* Cloudflare container that is the PROVISIONED memory and disk, which
|
|
75
|
+
* bill whether or not the job is doing anything.
|
|
76
|
+
* * `usdPerSecondCpuActive` is charged ON TOP, but only while the vCPUs
|
|
77
|
+
* are actually busy. Cloudflare priced CPU on active usage in November
|
|
78
|
+
* 2025; before that it was provisioned like memory. A source that bills
|
|
79
|
+
* CPU as part of a flat rate — a DigitalOcean droplet — omits this.
|
|
80
|
+
* * `initialUsd` is a genuine one-time additive charge for getting the
|
|
81
|
+
* machine at all. Absent means there is none, not that nobody filled it
|
|
82
|
+
* in.
|
|
83
|
+
* * `minimumUsd` is a FLOOR on the whole lease, not a fee added to it.
|
|
84
|
+
* DigitalOcean bills per second but never less than 60 seconds or $0.01,
|
|
85
|
+
* whichever is higher. Modelling that as `initialUsd` would have
|
|
86
|
+
* overcharged every lease by the floor, because setup is additive and a
|
|
87
|
+
* minimum is not. The distinction is the reason both fields exist.
|
|
88
|
+
*
|
|
89
|
+
* A bring-your-own source sets `usdPerSecond: 0`. It costs us nothing
|
|
90
|
+
* because it is not our hardware.
|
|
91
|
+
*/
|
|
92
|
+
cost: z.object({
|
|
93
|
+
usdPerSecond: z.number().nonnegative(),
|
|
94
|
+
usdPerSecondCpuActive: z.number().nonnegative().optional(),
|
|
95
|
+
initialUsd: z.number().nonnegative().optional(),
|
|
96
|
+
minimumUsd: z.number().nonnegative().optional(),
|
|
97
|
+
/**
|
|
98
|
+
* Where this quote came from and how much to trust it. Reuses the
|
|
99
|
+
* billing vocabulary the AI model descriptors already quote prices in,
|
|
100
|
+
* so "published" means the same thing about a droplet as about a token.
|
|
101
|
+
*/
|
|
102
|
+
source: costBasisSourceSchema,
|
|
103
|
+
confidence: costBasisConfidenceSchema,
|
|
104
|
+
/** ISO-8601 instant this quote was read from the provider. */
|
|
105
|
+
effectiveAt: z.string().min(1),
|
|
106
|
+
/** How the number was derived, for whoever has to re-check it later. */
|
|
107
|
+
note: z.string().min(1).optional()
|
|
108
|
+
}),
|
|
109
|
+
ownerScope: ComputeSourceOwnerScopeSchema.default('vibes'),
|
|
110
|
+
/**
|
|
111
|
+
* Billing subject for a `byo` source. Required when `ownerScope` is `byo`:
|
|
112
|
+
* a bring-your-own machine must only be selectable by the scope that
|
|
113
|
+
* brought it, never by another tenant's run.
|
|
114
|
+
*/
|
|
115
|
+
owner: z
|
|
116
|
+
.object({ type: z.string().min(1), id: z.string().min(1) })
|
|
117
|
+
.optional(),
|
|
118
|
+
/** Whether this source can hold idle capacity, making a lease warm. */
|
|
119
|
+
warmPool: z.boolean().default(false),
|
|
120
|
+
/** Longest single lease this source will grant, in seconds. */
|
|
121
|
+
maxLeaseSeconds: z.number().int().positive(),
|
|
122
|
+
/** Whether an in-flight lease can be torn down. */
|
|
123
|
+
supportsCancellation: z.boolean().default(false)
|
|
124
|
+
}).refine((d) => d.ownerScope !== 'byo' || d.owner !== undefined, {
|
|
125
|
+
message: "a 'byo' compute source must declare its owner, otherwise it could be selected by another tenant's run",
|
|
126
|
+
path: ['owner']
|
|
127
|
+
});
|
|
128
|
+
class DefaultComputeSourceImplementation {
|
|
129
|
+
descriptor;
|
|
130
|
+
context;
|
|
131
|
+
/** The descriptor as this kind's schema reads it. */
|
|
132
|
+
config;
|
|
133
|
+
constructor(descriptor, context) {
|
|
134
|
+
this.descriptor = descriptor;
|
|
135
|
+
this.context = context;
|
|
136
|
+
this.config = readKindDescriptor(ComputeSourceDescriptorSchema, descriptor);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
export const computeSourceKind = createRuntimeKind({
|
|
140
|
+
id: 'infra/compute-source',
|
|
141
|
+
descriptorSchema: ComputeSourceDescriptorSchema,
|
|
142
|
+
defaultImplementation: DefaultComputeSourceImplementation,
|
|
143
|
+
discoveryPatterns: INFRA_DISCOVERY_PATTERNS
|
|
144
|
+
});
|
|
145
|
+
//# sourceMappingURL=compute-source.kind.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-source.kind.js","sourceRoot":"","sources":["../../src/kinds/compute-source.kind.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The compute sources we actually own, priced from the providers' own lists.
|
|
3
|
+
*
|
|
4
|
+
* These are data, like `training/executor`'s reference descriptors. They exist
|
|
5
|
+
* so `infra/compute-source` stops being a schema with no rows: selection can
|
|
6
|
+
* only be honest about which machine is cheaper if somebody has written down
|
|
7
|
+
* what the machines cost.
|
|
8
|
+
*
|
|
9
|
+
* Every rate here was read from the provider on 2026-09-08 rather than
|
|
10
|
+
* estimated, and the arithmetic is left in the source so the next person can
|
|
11
|
+
* re-derive it instead of trusting a decimal. Deriving DigitalOcean's rate by
|
|
12
|
+
* hand as `$24/month ÷ 730h ÷ 3600s` gives $0.00000913/s, which is 8% under
|
|
13
|
+
* what DigitalOcean actually charges — the monthly price is a cap, not the
|
|
14
|
+
* basis for the hourly rate. That is exactly the kind of quiet error a
|
|
15
|
+
* hand-typed number produces, and the reason `source` and `effectiveAt` are
|
|
16
|
+
* required fields.
|
|
17
|
+
*
|
|
18
|
+
* Capability claims are deliberately conservative. `labels` is empty on both:
|
|
19
|
+
* an overstated capability is how a job that demands `docker` silently lands
|
|
20
|
+
* somewhere without it, and the kind refuses rather than substitutes. Add a
|
|
21
|
+
* label when someone has verified it, not because it is probably true.
|
|
22
|
+
*/
|
|
23
|
+
import type { ComputeSourceDescriptor } from './compute-source.kind.ts';
|
|
24
|
+
/**
|
|
25
|
+
* Cloudflare Containers `standard-4` — what `forge-ci-worker` runs on today
|
|
26
|
+
* (`wrangler.jsonc`, `instance_type: "standard-4"`): 4 vCPU, 12 GiB memory,
|
|
27
|
+
* 20 GB disk.
|
|
28
|
+
*
|
|
29
|
+
* Cloudflare bills memory and disk on PROVISIONED resources and CPU on ACTIVE
|
|
30
|
+
* usage only (a November 2025 pricing change), so the two rates are split.
|
|
31
|
+
* A CI job is CPU-bound almost by definition, so its real cost sits near
|
|
32
|
+
* `usdPerSecond + usdPerSecondCpuActive`; an idle container costs the floor.
|
|
33
|
+
*/
|
|
34
|
+
export declare const cfContainerStandard4: ComputeSourceDescriptor;
|
|
35
|
+
/**
|
|
36
|
+
* DigitalOcean droplet `s-2vcpu-4gb`: 2 vCPU, 4 GiB memory, 80 GB disk.
|
|
37
|
+
*
|
|
38
|
+
* Billed per second with a floor of 60 seconds or $0.01, whichever is higher.
|
|
39
|
+
* At this size 60 seconds is $0.000595, so $0.01 is always the binding floor —
|
|
40
|
+
* which means a 10-second lease and a 16-minute lease cost the same.
|
|
41
|
+
*/
|
|
42
|
+
export declare const doDropletS2vcpu4gb: ComputeSourceDescriptor;
|
|
43
|
+
/** Every compute source we own, cheapest-first ordering left to the selector. */
|
|
44
|
+
export declare const vibesComputeSources: readonly ComputeSourceDescriptor[];
|
|
45
|
+
//# sourceMappingURL=compute-sources.descriptors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compute-sources.descriptors.d.ts","sourceRoot":"","sources":["../../src/kinds/compute-sources.descriptors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAexE;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,EAAE,uBA4BlC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,uBA6BhC,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,mBAAmB,EAAE,SAAS,uBAAuB,EAGjE,CAAC"}
|