@forgezero/agent 0.1.117 → 0.1.119
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/README.md +7 -3
- package/dist/agent-heartbeat.js +1 -1
- package/dist/bootstrap.js +1 -1
- package/dist/community-rehearsal-host.js +24 -17
- package/dist/definition.js +24 -17
- package/dist/deploy-compiler.d.ts +10 -1
- package/dist/deploy-compiler.js +32 -4
- package/dist/deploy-file.js +24 -17
- package/dist/deploy-plan-runner.js +19 -2
- package/dist/deploy-plan.js +19 -2
- package/dist/deploy.d.ts +10 -1
- package/dist/deployment.d.ts +13 -2
- package/dist/fz-agent.js +55 -20
- package/dist/fz.js +93 -29
- package/dist/index.d.ts +1 -1
- package/dist/metal-bootstrap.js +1 -1
- package/dist/metal-helper-socket.js +24 -17
- package/dist/metal-provision.js +24 -17
- package/dist/operator-bootstrap.js +1 -1
- package/dist/platform-bootstrap-runtime.js +24 -17
- package/dist/platform-fleet-verification.js +25 -18
- package/dist/platform-genesis.js +24 -17
- package/dist/provision.js +25 -18
- package/dist/software-helper.js +24 -17
- package/dist/software.d.ts +4 -0
- package/dist/software.js +26 -17
- package/dist/ubuntu.js +24 -17
- package/dist/version.d.ts +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
and commit the generator and rendered files together.
|
|
6
6
|
-->
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# Compute Agent and CLI
|
|
9
9
|
|
|
10
10
|
The node agent deploys on a compute; tenant mode also holds one complete project across environments in RAM and serves it over a group-scoped unix socket, while platform mode never duplicates the API vault.
|
|
11
11
|
|
|
@@ -99,8 +99,12 @@ export default defineDeployment({
|
|
|
99
99
|
resources: { cpuCores: input.ref('cpuCores'), memoryMiB: input.ref('memoryMiB'), storageGiB: input.ref('storageGiB') },
|
|
100
100
|
os: 'ubuntu-24.04', runtime: 'oci-runc', sharing: 'shared', reuse: 'prefer',
|
|
101
101
|
provisioning: {
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
regionKey: 'default', imageKey: 'ubuntu-24.04-x64', environmentKey: 'production', ownership: 'platform',
|
|
103
|
+
resources: {
|
|
104
|
+
physicalCores: 1, vcpu: 2, memoryGib: 2, diskGib: 16,
|
|
105
|
+
egressGuaranteedMbps: 100, egressBurstMbps: 200, confidential: false
|
|
106
|
+
},
|
|
107
|
+
monthlyAmountCents: '1200', maxMonthlySpendMinor: '25000'
|
|
104
108
|
},
|
|
105
109
|
connectivity: {
|
|
106
110
|
private: { mode: 'private-lan' },
|
package/dist/agent-heartbeat.js
CHANGED
package/dist/bootstrap.js
CHANGED
|
@@ -55,24 +55,31 @@ var OS_CATALOG = [
|
|
|
55
55
|
}
|
|
56
56
|
];
|
|
57
57
|
var SOFTWARE_CATALOG = [
|
|
58
|
-
{ id: "bun", version: "1.3.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
-
{ id: "docker", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
-
{ id: "containerd", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
-
{ id: "kata-containers", version: "4.0.0", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
-
{ id: "nginx", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
-
{ id: "arangodb", version: "3.11.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
-
{ id: "cloudflared", version: "2026.7.3", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
-
{ id: "cloudflare-warp", version: "2026.6.822.0-min", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
-
{ id: "ufw", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
-
{ id: "openssh-client", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
-
{ id: "git", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
-
{ id: "docker", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
-
{ id: "containerd", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
-
{ id: "nginx", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
-
{ id: "ufw", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
-
{ id: "openssh-client", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
-
{ id: "git", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
58
|
+
{ id: "bun", version: "1.3.14", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
+
{ id: "docker", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
+
{ id: "containerd", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
+
{ id: "kata-containers", version: "4.0.0", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
+
{ id: "nginx", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
+
{ id: "arangodb", version: "3.11.14", billingClass: "paid-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
+
{ id: "cloudflared", version: "2026.7.3", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
+
{ id: "cloudflare-warp", version: "2026.6.822.0-min", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
+
{ id: "ufw", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
+
{ id: "openssh-client", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
+
{ id: "git", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
+
{ id: "docker", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
+
{ id: "containerd", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
+
{ id: "nginx", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
+
{ id: "ufw", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
+
{ id: "openssh-client", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
+
{ id: "git", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
75
75
|
];
|
|
76
|
+
var softwareBillingClass = (requirement) => {
|
|
77
|
+
const entry = SOFTWARE_CATALOG.find((candidate) => candidate.id === requirement.id && candidate.version === requirement.version);
|
|
78
|
+
if (!entry)
|
|
79
|
+
throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
|
|
80
|
+
return entry.billingClass;
|
|
81
|
+
};
|
|
82
|
+
var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
|
|
76
83
|
var UBUNTU_2604_X64 = [
|
|
77
84
|
{ requirement: { id: "bun", version: "1.3.14" } },
|
|
78
85
|
{ requirement: { id: "docker", version: "ubuntu-26.04" } },
|
package/dist/definition.js
CHANGED
|
@@ -55,24 +55,31 @@ var OS_CATALOG = [
|
|
|
55
55
|
}
|
|
56
56
|
];
|
|
57
57
|
var SOFTWARE_CATALOG = [
|
|
58
|
-
{ id: "bun", version: "1.3.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
-
{ id: "docker", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
-
{ id: "containerd", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
-
{ id: "kata-containers", version: "4.0.0", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
-
{ id: "nginx", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
-
{ id: "arangodb", version: "3.11.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
-
{ id: "cloudflared", version: "2026.7.3", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
-
{ id: "cloudflare-warp", version: "2026.6.822.0-min", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
-
{ id: "ufw", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
-
{ id: "openssh-client", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
-
{ id: "git", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
-
{ id: "docker", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
-
{ id: "containerd", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
-
{ id: "nginx", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
-
{ id: "ufw", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
-
{ id: "openssh-client", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
-
{ id: "git", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
58
|
+
{ id: "bun", version: "1.3.14", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
+
{ id: "docker", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
+
{ id: "containerd", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
+
{ id: "kata-containers", version: "4.0.0", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
+
{ id: "nginx", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
+
{ id: "arangodb", version: "3.11.14", billingClass: "paid-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
+
{ id: "cloudflared", version: "2026.7.3", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
+
{ id: "cloudflare-warp", version: "2026.6.822.0-min", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
+
{ id: "ufw", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
+
{ id: "openssh-client", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
+
{ id: "git", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
+
{ id: "docker", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
+
{ id: "containerd", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
+
{ id: "nginx", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
+
{ id: "ufw", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
+
{ id: "openssh-client", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
+
{ id: "git", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
75
75
|
];
|
|
76
|
+
var softwareBillingClass = (requirement) => {
|
|
77
|
+
const entry = SOFTWARE_CATALOG.find((candidate) => candidate.id === requirement.id && candidate.version === requirement.version);
|
|
78
|
+
if (!entry)
|
|
79
|
+
throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
|
|
80
|
+
return entry.billingClass;
|
|
81
|
+
};
|
|
82
|
+
var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
|
|
76
83
|
var UBUNTU_2604_X64 = [
|
|
77
84
|
{ requirement: { id: "bun", version: "1.3.14" } },
|
|
78
85
|
{ requirement: { id: "docker", version: "ubuntu-26.04" } },
|
|
@@ -10,12 +10,21 @@ export interface DeploymentCompilation {
|
|
|
10
10
|
}
|
|
11
11
|
export type DeploymentInitRuntime = 'native' | 'containerd' | 'kata-snp';
|
|
12
12
|
export interface DeploymentInitProvisioning {
|
|
13
|
-
planKey: string;
|
|
14
13
|
regionKey: string;
|
|
15
14
|
imageKey: string;
|
|
16
15
|
environmentKey: string;
|
|
17
16
|
ownership: 'platform' | 'tenant-metal';
|
|
18
17
|
metalHostname?: string;
|
|
18
|
+
resources: {
|
|
19
|
+
physicalCores: number;
|
|
20
|
+
vcpu: number;
|
|
21
|
+
memoryGib: number;
|
|
22
|
+
diskGib: number;
|
|
23
|
+
egressGuaranteedMbps: number;
|
|
24
|
+
egressBurstMbps: number;
|
|
25
|
+
confidential: boolean;
|
|
26
|
+
};
|
|
27
|
+
monthlyAmountCents: string;
|
|
19
28
|
maxMonthlySpendMinor: string;
|
|
20
29
|
}
|
|
21
30
|
export interface DeploymentInitOptions {
|
package/dist/deploy-compiler.js
CHANGED
|
@@ -910,13 +910,30 @@ function compileDeployment(sourceValue) {
|
|
|
910
910
|
fail(`deployment.spec.targets.${targetName}.allocation.execution`, "cannot satisfy required confidential compute.");
|
|
911
911
|
if (target.provisioning !== undefined) {
|
|
912
912
|
const provisioning = object(target.provisioning, `deployment.spec.targets.${targetName}.provisioning`);
|
|
913
|
-
exact3(provisioning, ["
|
|
914
|
-
for (const key of ["
|
|
913
|
+
exact3(provisioning, ["regionKey", "imageKey", "environmentKey", "ownership", "metalHostname", "resources", "monthlyAmountCents", "maxMonthlySpendMinor"], `deployment.spec.targets.${targetName}.provisioning`);
|
|
914
|
+
for (const key of ["regionKey", "imageKey", "environmentKey"])
|
|
915
915
|
named(provisioning[key], `deployment.spec.targets.${targetName}.provisioning.${key}`);
|
|
916
916
|
if (!["platform", "tenant-metal"].includes(String(provisioning.ownership)) || provisioning.ownership === "tenant-metal" !== Boolean(provisioning.metalHostname))
|
|
917
917
|
fail(`deployment.spec.targets.${targetName}.provisioning.ownership`, "must bind platform capacity or one tenant metal hostname.");
|
|
918
918
|
if (provisioning.metalHostname !== undefined && !/^(?=.{1,253}$)[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?$/.test(String(provisioning.metalHostname)))
|
|
919
919
|
fail(`deployment.spec.targets.${targetName}.provisioning.metalHostname`, "is invalid.");
|
|
920
|
+
const provisionedResources = object(provisioning.resources, `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
921
|
+
exact3(provisionedResources, ["physicalCores", "vcpu", "memoryGib", "diskGib", "egressGuaranteedMbps", "egressBurstMbps", "confidential"], `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
922
|
+
integer(provisionedResources.physicalCores, `deployment.spec.targets.${targetName}.provisioning.resources.physicalCores`, 1, 1024);
|
|
923
|
+
integer(provisionedResources.vcpu, `deployment.spec.targets.${targetName}.provisioning.resources.vcpu`, 1, 4096);
|
|
924
|
+
integer(provisionedResources.memoryGib, `deployment.spec.targets.${targetName}.provisioning.resources.memoryGib`, 1, 4194304);
|
|
925
|
+
integer(provisionedResources.diskGib, `deployment.spec.targets.${targetName}.provisioning.resources.diskGib`, 1, 1048576);
|
|
926
|
+
integer(provisionedResources.egressGuaranteedMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressGuaranteedMbps`, 0, 1e7);
|
|
927
|
+
integer(provisionedResources.egressBurstMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressBurstMbps`, Number(provisionedResources.egressGuaranteedMbps), 1e7);
|
|
928
|
+
if (typeof provisionedResources.confidential !== "boolean")
|
|
929
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be boolean.");
|
|
930
|
+
if (typeof capacity.cpuCores === "number" && Number(provisionedResources.vcpu) < capacity.cpuCores || typeof capacity.memoryMiB === "number" && Number(provisionedResources.memoryGib) * 1024 < capacity.memoryMiB || typeof capacity.storageGiB === "number" && Number(provisionedResources.diskGib) < capacity.storageGiB) {
|
|
931
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources`, "must satisfy the per-slot allocation minimum.");
|
|
932
|
+
}
|
|
933
|
+
if ((selector.confidentialCompute === "required" || allocation.execution === "oci-kata-qemu-snp") && provisionedResources.confidential !== true)
|
|
934
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be true for confidential execution.");
|
|
935
|
+
if (typeof provisioning.monthlyAmountCents !== "string" || !/^\d{1,18}$/.test(provisioning.monthlyAmountCents))
|
|
936
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.monthlyAmountCents`, "must be a bounded USD-cent amount.");
|
|
920
937
|
if (typeof provisioning.maxMonthlySpendMinor !== "string" || !/^\d{1,18}$/.test(provisioning.maxMonthlySpendMinor))
|
|
921
938
|
fail(`deployment.spec.targets.${targetName}.provisioning.maxMonthlySpendMinor`, "must be a bounded decimal minor-unit amount.");
|
|
922
939
|
}
|
|
@@ -1266,13 +1283,24 @@ function initCoordinates(options) {
|
|
|
1266
1283
|
throw new Error("reuse require cannot include provisioning coordinates");
|
|
1267
1284
|
if (options.provisioning !== undefined) {
|
|
1268
1285
|
for (const [label, value] of Object.entries({
|
|
1269
|
-
plan: options.provisioning.planKey,
|
|
1270
1286
|
region: options.provisioning.regionKey,
|
|
1271
1287
|
image: options.provisioning.imageKey,
|
|
1272
1288
|
environment: options.provisioning.environmentKey
|
|
1273
1289
|
}))
|
|
1274
1290
|
if (!/^[a-z][a-z0-9-]{0,62}$/.test(value))
|
|
1275
1291
|
throw new Error(`deployment provisioning ${label} must be a lowercase typed name`);
|
|
1292
|
+
const resources = options.provisioning.resources;
|
|
1293
|
+
for (const [label, value] of Object.entries(resources).filter(([key]) => key !== "confidential")) {
|
|
1294
|
+
if (!Number.isSafeInteger(value) || Number(value) < 0)
|
|
1295
|
+
throw new Error(`deployment provisioning ${label} must be a non-negative integer`);
|
|
1296
|
+
}
|
|
1297
|
+
if (resources.physicalCores < 1 || resources.vcpu < result.cpuCores || resources.memoryGib * 1024 < result.memoryMiB || resources.diskGib < result.storageGiB || resources.egressBurstMbps < resources.egressGuaranteedMbps) {
|
|
1298
|
+
throw new Error("deployment provisioning resources must satisfy the target allocation and bandwidth bounds");
|
|
1299
|
+
}
|
|
1300
|
+
if (result.isolation === "sev-snp" && !resources.confidential)
|
|
1301
|
+
throw new Error("deployment provisioning must provide confidential capacity for sev-snp");
|
|
1302
|
+
if (!/^\d{1,18}$/.test(options.provisioning.monthlyAmountCents))
|
|
1303
|
+
throw new Error("deployment provisioning monthly amount must be a bounded USD-cent amount");
|
|
1276
1304
|
if (!/^\d{1,18}$/.test(options.provisioning.maxMonthlySpendMinor))
|
|
1277
1305
|
throw new Error("deployment provisioning monthly spend must be a bounded decimal minor-unit amount");
|
|
1278
1306
|
if (options.provisioning.ownership === "tenant-metal" && !options.provisioning.metalHostname)
|
|
@@ -1289,7 +1317,7 @@ function defaultTypeScriptDeployment(name, options = {}) {
|
|
|
1289
1317
|
const execution = selected.runtime === "native" ? "native" : selected.runtime === "containerd" ? "oci-runc" : "oci-kata-qemu-snp";
|
|
1290
1318
|
const hostPackageVersion = selected.operatingSystem === "ubuntu-24.04" ? "ubuntu-24.04" : "ubuntu-26.04";
|
|
1291
1319
|
const provisioningBlock = selected.provisioning === undefined ? "" : `,
|
|
1292
|
-
provisioning: {
|
|
1320
|
+
provisioning: { regionKey: '${selected.provisioning.regionKey}', imageKey: '${selected.provisioning.imageKey}', environmentKey: '${selected.provisioning.environmentKey}', ownership: '${selected.provisioning.ownership}',${selected.provisioning.metalHostname ? ` metalHostname: '${selected.provisioning.metalHostname}',` : ""} resources: ${JSON.stringify(selected.provisioning.resources)}, monthlyAmountCents: '${selected.provisioning.monthlyAmountCents}', maxMonthlySpendMinor: '${selected.provisioning.maxMonthlySpendMinor}' }`;
|
|
1293
1321
|
const requirementBlock = selected.runtime === "native" ? `bun: providers.bun.require()` : selected.runtime === "containerd" ? `containerd: providers.containerd.require({ version: '${hostPackageVersion}' }),
|
|
1294
1322
|
nginx: providers.nginx.require({ version: '${hostPackageVersion}' })` : `containerd: providers.containerd.require(),
|
|
1295
1323
|
kata: providers.kata.require(),
|
package/dist/deploy-file.js
CHANGED
|
@@ -55,24 +55,31 @@ var OS_CATALOG = [
|
|
|
55
55
|
}
|
|
56
56
|
];
|
|
57
57
|
var SOFTWARE_CATALOG = [
|
|
58
|
-
{ id: "bun", version: "1.3.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
-
{ id: "docker", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
-
{ id: "containerd", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
-
{ id: "kata-containers", version: "4.0.0", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
-
{ id: "nginx", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
-
{ id: "arangodb", version: "3.11.14", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
-
{ id: "cloudflared", version: "2026.7.3", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
-
{ id: "cloudflare-warp", version: "2026.6.822.0-min", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
-
{ id: "ufw", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
-
{ id: "openssh-client", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
-
{ id: "git", version: "ubuntu-26.04", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
-
{ id: "docker", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
-
{ id: "containerd", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
-
{ id: "nginx", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
-
{ id: "ufw", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
-
{ id: "openssh-client", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
-
{ id: "git", version: "ubuntu-24.04", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
58
|
+
{ id: "bun", version: "1.3.14", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
59
|
+
{ id: "docker", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
60
|
+
{ id: "containerd", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
61
|
+
{ id: "kata-containers", version: "4.0.0", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
62
|
+
{ id: "nginx", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
63
|
+
{ id: "arangodb", version: "3.11.14", billingClass: "paid-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
64
|
+
{ id: "cloudflared", version: "2026.7.3", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
65
|
+
{ id: "cloudflare-warp", version: "2026.6.822.0-min", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
66
|
+
{ id: "ufw", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
67
|
+
{ id: "openssh-client", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
68
|
+
{ id: "git", version: "ubuntu-26.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "26.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
69
|
+
{ id: "docker", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
70
|
+
{ id: "containerd", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
71
|
+
{ id: "nginx", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
72
|
+
{ id: "ufw", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
73
|
+
{ id: "openssh-client", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" },
|
|
74
|
+
{ id: "git", version: "ubuntu-24.04", billingClass: "free-managed", status: "active", os: "ubuntu", osVersion: "24.04", architecture: "x64", evidence: "reviewed-strategy-and-tests" }
|
|
75
75
|
];
|
|
76
|
+
var softwareBillingClass = (requirement) => {
|
|
77
|
+
const entry = SOFTWARE_CATALOG.find((candidate) => candidate.id === requirement.id && candidate.version === requirement.version);
|
|
78
|
+
if (!entry)
|
|
79
|
+
throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
|
|
80
|
+
return entry.billingClass;
|
|
81
|
+
};
|
|
82
|
+
var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
|
|
76
83
|
var UBUNTU_2604_X64 = [
|
|
77
84
|
{ requirement: { id: "bun", version: "1.3.14" } },
|
|
78
85
|
{ requirement: { id: "docker", version: "ubuntu-26.04" } },
|
|
@@ -910,13 +910,30 @@ function compileDeployment(sourceValue) {
|
|
|
910
910
|
fail(`deployment.spec.targets.${targetName}.allocation.execution`, "cannot satisfy required confidential compute.");
|
|
911
911
|
if (target.provisioning !== undefined) {
|
|
912
912
|
const provisioning = object(target.provisioning, `deployment.spec.targets.${targetName}.provisioning`);
|
|
913
|
-
exact3(provisioning, ["
|
|
914
|
-
for (const key of ["
|
|
913
|
+
exact3(provisioning, ["regionKey", "imageKey", "environmentKey", "ownership", "metalHostname", "resources", "monthlyAmountCents", "maxMonthlySpendMinor"], `deployment.spec.targets.${targetName}.provisioning`);
|
|
914
|
+
for (const key of ["regionKey", "imageKey", "environmentKey"])
|
|
915
915
|
named(provisioning[key], `deployment.spec.targets.${targetName}.provisioning.${key}`);
|
|
916
916
|
if (!["platform", "tenant-metal"].includes(String(provisioning.ownership)) || provisioning.ownership === "tenant-metal" !== Boolean(provisioning.metalHostname))
|
|
917
917
|
fail(`deployment.spec.targets.${targetName}.provisioning.ownership`, "must bind platform capacity or one tenant metal hostname.");
|
|
918
918
|
if (provisioning.metalHostname !== undefined && !/^(?=.{1,253}$)[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?$/.test(String(provisioning.metalHostname)))
|
|
919
919
|
fail(`deployment.spec.targets.${targetName}.provisioning.metalHostname`, "is invalid.");
|
|
920
|
+
const provisionedResources = object(provisioning.resources, `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
921
|
+
exact3(provisionedResources, ["physicalCores", "vcpu", "memoryGib", "diskGib", "egressGuaranteedMbps", "egressBurstMbps", "confidential"], `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
922
|
+
integer(provisionedResources.physicalCores, `deployment.spec.targets.${targetName}.provisioning.resources.physicalCores`, 1, 1024);
|
|
923
|
+
integer(provisionedResources.vcpu, `deployment.spec.targets.${targetName}.provisioning.resources.vcpu`, 1, 4096);
|
|
924
|
+
integer(provisionedResources.memoryGib, `deployment.spec.targets.${targetName}.provisioning.resources.memoryGib`, 1, 4194304);
|
|
925
|
+
integer(provisionedResources.diskGib, `deployment.spec.targets.${targetName}.provisioning.resources.diskGib`, 1, 1048576);
|
|
926
|
+
integer(provisionedResources.egressGuaranteedMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressGuaranteedMbps`, 0, 1e7);
|
|
927
|
+
integer(provisionedResources.egressBurstMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressBurstMbps`, Number(provisionedResources.egressGuaranteedMbps), 1e7);
|
|
928
|
+
if (typeof provisionedResources.confidential !== "boolean")
|
|
929
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be boolean.");
|
|
930
|
+
if (typeof capacity.cpuCores === "number" && Number(provisionedResources.vcpu) < capacity.cpuCores || typeof capacity.memoryMiB === "number" && Number(provisionedResources.memoryGib) * 1024 < capacity.memoryMiB || typeof capacity.storageGiB === "number" && Number(provisionedResources.diskGib) < capacity.storageGiB) {
|
|
931
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources`, "must satisfy the per-slot allocation minimum.");
|
|
932
|
+
}
|
|
933
|
+
if ((selector.confidentialCompute === "required" || allocation.execution === "oci-kata-qemu-snp") && provisionedResources.confidential !== true)
|
|
934
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be true for confidential execution.");
|
|
935
|
+
if (typeof provisioning.monthlyAmountCents !== "string" || !/^\d{1,18}$/.test(provisioning.monthlyAmountCents))
|
|
936
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.monthlyAmountCents`, "must be a bounded USD-cent amount.");
|
|
920
937
|
if (typeof provisioning.maxMonthlySpendMinor !== "string" || !/^\d{1,18}$/.test(provisioning.maxMonthlySpendMinor))
|
|
921
938
|
fail(`deployment.spec.targets.${targetName}.provisioning.maxMonthlySpendMinor`, "must be a bounded decimal minor-unit amount.");
|
|
922
939
|
}
|
package/dist/deploy-plan.js
CHANGED
|
@@ -910,13 +910,30 @@ function compileDeployment(sourceValue) {
|
|
|
910
910
|
fail(`deployment.spec.targets.${targetName}.allocation.execution`, "cannot satisfy required confidential compute.");
|
|
911
911
|
if (target.provisioning !== undefined) {
|
|
912
912
|
const provisioning = object(target.provisioning, `deployment.spec.targets.${targetName}.provisioning`);
|
|
913
|
-
exact3(provisioning, ["
|
|
914
|
-
for (const key of ["
|
|
913
|
+
exact3(provisioning, ["regionKey", "imageKey", "environmentKey", "ownership", "metalHostname", "resources", "monthlyAmountCents", "maxMonthlySpendMinor"], `deployment.spec.targets.${targetName}.provisioning`);
|
|
914
|
+
for (const key of ["regionKey", "imageKey", "environmentKey"])
|
|
915
915
|
named(provisioning[key], `deployment.spec.targets.${targetName}.provisioning.${key}`);
|
|
916
916
|
if (!["platform", "tenant-metal"].includes(String(provisioning.ownership)) || provisioning.ownership === "tenant-metal" !== Boolean(provisioning.metalHostname))
|
|
917
917
|
fail(`deployment.spec.targets.${targetName}.provisioning.ownership`, "must bind platform capacity or one tenant metal hostname.");
|
|
918
918
|
if (provisioning.metalHostname !== undefined && !/^(?=.{1,253}$)[A-Za-z0-9](?:[A-Za-z0-9.-]*[A-Za-z0-9])?$/.test(String(provisioning.metalHostname)))
|
|
919
919
|
fail(`deployment.spec.targets.${targetName}.provisioning.metalHostname`, "is invalid.");
|
|
920
|
+
const provisionedResources = object(provisioning.resources, `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
921
|
+
exact3(provisionedResources, ["physicalCores", "vcpu", "memoryGib", "diskGib", "egressGuaranteedMbps", "egressBurstMbps", "confidential"], `deployment.spec.targets.${targetName}.provisioning.resources`);
|
|
922
|
+
integer(provisionedResources.physicalCores, `deployment.spec.targets.${targetName}.provisioning.resources.physicalCores`, 1, 1024);
|
|
923
|
+
integer(provisionedResources.vcpu, `deployment.spec.targets.${targetName}.provisioning.resources.vcpu`, 1, 4096);
|
|
924
|
+
integer(provisionedResources.memoryGib, `deployment.spec.targets.${targetName}.provisioning.resources.memoryGib`, 1, 4194304);
|
|
925
|
+
integer(provisionedResources.diskGib, `deployment.spec.targets.${targetName}.provisioning.resources.diskGib`, 1, 1048576);
|
|
926
|
+
integer(provisionedResources.egressGuaranteedMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressGuaranteedMbps`, 0, 1e7);
|
|
927
|
+
integer(provisionedResources.egressBurstMbps, `deployment.spec.targets.${targetName}.provisioning.resources.egressBurstMbps`, Number(provisionedResources.egressGuaranteedMbps), 1e7);
|
|
928
|
+
if (typeof provisionedResources.confidential !== "boolean")
|
|
929
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be boolean.");
|
|
930
|
+
if (typeof capacity.cpuCores === "number" && Number(provisionedResources.vcpu) < capacity.cpuCores || typeof capacity.memoryMiB === "number" && Number(provisionedResources.memoryGib) * 1024 < capacity.memoryMiB || typeof capacity.storageGiB === "number" && Number(provisionedResources.diskGib) < capacity.storageGiB) {
|
|
931
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources`, "must satisfy the per-slot allocation minimum.");
|
|
932
|
+
}
|
|
933
|
+
if ((selector.confidentialCompute === "required" || allocation.execution === "oci-kata-qemu-snp") && provisionedResources.confidential !== true)
|
|
934
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.resources.confidential`, "must be true for confidential execution.");
|
|
935
|
+
if (typeof provisioning.monthlyAmountCents !== "string" || !/^\d{1,18}$/.test(provisioning.monthlyAmountCents))
|
|
936
|
+
fail(`deployment.spec.targets.${targetName}.provisioning.monthlyAmountCents`, "must be a bounded USD-cent amount.");
|
|
920
937
|
if (typeof provisioning.maxMonthlySpendMinor !== "string" || !/^\d{1,18}$/.test(provisioning.maxMonthlySpendMinor))
|
|
921
938
|
fail(`deployment.spec.targets.${targetName}.provisioning.maxMonthlySpendMinor`, "must be a bounded decimal minor-unit amount.");
|
|
922
939
|
}
|
package/dist/deploy.d.ts
CHANGED
|
@@ -185,12 +185,21 @@ export interface TargetDefinition {
|
|
|
185
185
|
};
|
|
186
186
|
/** Required only when the control plane may create capacity after reuse is exhausted. */
|
|
187
187
|
provisioning?: {
|
|
188
|
-
planKey: string;
|
|
189
188
|
regionKey: string;
|
|
190
189
|
imageKey: string;
|
|
191
190
|
environmentKey: string;
|
|
192
191
|
ownership: 'platform' | 'tenant-metal';
|
|
193
192
|
metalHostname?: string;
|
|
193
|
+
resources: {
|
|
194
|
+
physicalCores: number;
|
|
195
|
+
vcpu: number;
|
|
196
|
+
memoryGib: number;
|
|
197
|
+
diskGib: number;
|
|
198
|
+
egressGuaranteedMbps: number;
|
|
199
|
+
egressBurstMbps: number;
|
|
200
|
+
confidential: boolean;
|
|
201
|
+
};
|
|
202
|
+
monthlyAmountCents: string;
|
|
194
203
|
maxMonthlySpendMinor: string;
|
|
195
204
|
};
|
|
196
205
|
/** Per-slot connectivity intent. Credential names resolve through the scoped Vault, never to plan values. */
|
package/dist/deployment.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type DrainReport, type QueueTask } from '@forgezero/runtime/queue';
|
|
2
2
|
import { type GitHostResolver } from './git-egress';
|
|
3
|
-
import type
|
|
3
|
+
import { type SoftwareRequirement } from './software';
|
|
4
4
|
import type { DeploymentService } from './definition';
|
|
5
5
|
import type { ServiceActivationState } from './service-supervisor';
|
|
6
6
|
import type { ContainerActivateRequest, ContainerBuildRequest, ContainerBuildResult } from './container-supervisor';
|
|
@@ -74,6 +74,8 @@ export interface DeploymentResult {
|
|
|
74
74
|
profile: string;
|
|
75
75
|
/** Resolved only from the validated plan and its bounded inputs at this revision. */
|
|
76
76
|
resolvedTargets?: readonly ResolvedDeploymentTarget[];
|
|
77
|
+
/** Distinct paid catalogue entries successfully managed on this compute. */
|
|
78
|
+
paidManagedSoftwareCount: number;
|
|
77
79
|
release: string;
|
|
78
80
|
ok: boolean;
|
|
79
81
|
phases: readonly RunResult[];
|
|
@@ -123,12 +125,21 @@ export interface ResolvedDeploymentTarget {
|
|
|
123
125
|
existing: 'prefer' | 'require';
|
|
124
126
|
};
|
|
125
127
|
provisioning?: {
|
|
126
|
-
planKey: string;
|
|
127
128
|
regionKey: string;
|
|
128
129
|
imageKey: string;
|
|
129
130
|
environmentKey: string;
|
|
130
131
|
ownership: 'platform' | 'tenant-metal';
|
|
131
132
|
metalHostname?: string;
|
|
133
|
+
resources: {
|
|
134
|
+
physicalCores: number;
|
|
135
|
+
vcpu: number;
|
|
136
|
+
memoryGib: number;
|
|
137
|
+
diskGib: number;
|
|
138
|
+
egressGuaranteedMbps: number;
|
|
139
|
+
egressBurstMbps: number;
|
|
140
|
+
confidential: boolean;
|
|
141
|
+
};
|
|
142
|
+
monthlyAmountCents: string;
|
|
132
143
|
maxMonthlySpendMinor: string;
|
|
133
144
|
};
|
|
134
145
|
connectivity?: {
|