@forgezero/agent 0.1.130 → 0.1.132

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.
@@ -917,7 +917,7 @@ async function postSignedNode(options, path, body) {
917
917
  }
918
918
 
919
919
  // src/version.ts
920
- var VERSION3 = "0.1.130";
920
+ var VERSION3 = "0.1.132";
921
921
 
922
922
  // src/agent-heartbeat.ts
923
923
  function readAgentHostMetrics() {
package/dist/bootstrap.js CHANGED
@@ -1460,7 +1460,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1460
1460
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1461
1461
 
1462
1462
  // src/version.ts
1463
- var VERSION = "0.1.130";
1463
+ var VERSION = "0.1.132";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
package/dist/fz-agent.js CHANGED
@@ -9640,7 +9640,7 @@ async function writeAndCloseProcessInput(input, value) {
9640
9640
  }
9641
9641
 
9642
9642
  // src/version.ts
9643
- var VERSION2 = "0.1.130";
9643
+ var VERSION2 = "0.1.132";
9644
9644
 
9645
9645
  // src/ssh-bootstrap.ts
9646
9646
  function deriveMetalAdmissionProvisioning(lscpu) {
@@ -10834,9 +10834,13 @@ function guestBootstrapOperations(profile, attested = Boolean(profile.confidenti
10834
10834
  "/run/forgezero-bun.zip"
10835
10835
  ],
10836
10836
  ["/usr/bin/sha256sum", "--check", "/etc/forgezero/bun.sha256"],
10837
- ["/usr/bin/unzip", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
10837
+ ["/usr/bin/busybox", "unzip", "-o", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
10838
10838
  ["/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/runtime", agentBun],
10839
- ["/usr/bin/install", "-m", "0755", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun"],
10839
+ ["/usr/bin/rm", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
10840
+ ["/usr/bin/cp", "--", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
10841
+ ["/usr/bin/chown", "root:root", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
10842
+ ["/usr/bin/chmod", "0755", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
10843
+ ["/usr/bin/mv", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next", "/usr/local/lib/forgezero/runtime/bun"],
10840
10844
  ["/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/runtime/bun", "/usr/local/bin/bun"],
10841
10845
  [
10842
10846
  "/usr/bin/env",
@@ -10894,7 +10898,7 @@ package_update: true
10894
10898
  ${users}disable_root: true
10895
10899
  # Git is part of the deployment transport, not a tenant-selected prerequisite:
10896
10900
  # every dynamically claimed repository must be cloneable on a clean image.
10897
- packages: [curl, ca-certificates, openssl, openssh-client, git, unzip${claim.spec.confidential ? ", python3" : ""}]
10901
+ packages: [curl, ca-certificates, openssl, openssh-client, git, busybox-static${claim.spec.confidential ? ", python3" : ""}]
10898
10902
  write_files:
10899
10903
  ${enrolmentFiles}${attestationFile}${bunChecksum}runcmd:
10900
10904
  ${bootstrap.map((argv2) => ` - ${JSON.stringify(argv2)}`).join(`
package/dist/fz.js CHANGED
@@ -6007,7 +6007,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
6007
6007
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
6008
6008
 
6009
6009
  // src/version.ts
6010
- var VERSION2 = "0.1.130";
6010
+ var VERSION2 = "0.1.132";
6011
6011
 
6012
6012
  // src/software.ts
6013
6013
  var PINNED_BUN_VERSION = "1.3.14";
@@ -17925,6 +17925,20 @@ var remoteRegularFileExists = async (exec, request, knownHosts, path) => {
17925
17925
  return false;
17926
17926
  throw new Error(`remote initialized-state probe failed${result.output ? `: ${result.output.trim()}` : ""}`);
17927
17927
  };
17928
+ var replaceRemoteFile = async (exec, request, knownHosts, source, destinationPath, mode, label, secret = false) => {
17929
+ const staged = `${destinationPath}.forgezero-next`;
17930
+ try {
17931
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/rm", "-f", "--", staged], label, secret);
17932
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/cp", "--", source, staged], label, secret);
17933
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/chown", "root:root", staged], label, secret);
17934
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/chmod", mode, staged], label, secret);
17935
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/mv", "-f", "--", staged, destinationPath], label, secret);
17936
+ } finally {
17937
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/rm", "-f", "--", staged], label, true).catch(() => {
17938
+ return;
17939
+ });
17940
+ }
17941
+ };
17928
17942
  async function operatorMetalClusterBootstrapCode(requestInput, options = {}) {
17929
17943
  const request = validateMetalRequestValue(requestInput, { validateMetalConfig: false });
17930
17944
  publicIdentity(request.target.identityPublicKeyFile);
@@ -18154,21 +18168,24 @@ async function installPackagedAgent(request, knownHosts, exec, directory, remote
18154
18168
  "--no-install-recommends",
18155
18169
  "ca-certificates",
18156
18170
  "curl",
18157
- "unzip"
18171
+ "busybox-static"
18158
18172
  ], "remote bootstrap prerequisites");
18159
18173
  const archive = await verifiedBunArchive(directory, options.fetch ?? fetch);
18160
18174
  await copy(exec, request, knownHosts, archive, `${remoteTemp}/bun.zip`);
18161
18175
  const digest = await remote(exec, request, knownHosts, ["/usr/bin/sha256sum", `${remoteTemp}/bun.zip`], "remote Bun checksum");
18162
18176
  if (digest.split(/\s+/)[0] !== BUN_RELEASE_SHA256)
18163
18177
  throw new Error("remote Bun checksum mismatch");
18164
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/unzip", "-q", `${remoteTemp}/bun.zip`, "-d", `${remoteTemp}/bun-release`], "remote Bun unpack");
18178
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/busybox", "unzip", "-o", "-q", `${remoteTemp}/bun.zip`, "-d", `${remoteTemp}/bun-release`], "remote Bun unpack");
18179
+ if (!await remoteRegularFileExists(exec, request, knownHosts, `${remoteTemp}/bun-release/bun-linux-x64/bun`)) {
18180
+ throw new Error("remote Bun unpack did not produce the pinned executable");
18181
+ }
18165
18182
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/runtime", "/usr/local/bin"], "remote Bun directory");
18166
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0755", `${remoteTemp}/bun-release/bun-linux-x64/bun`, "/usr/local/lib/forgezero/runtime/bun"], "remote Bun install");
18183
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/bun-release/bun-linux-x64/bun`, "/usr/local/lib/forgezero/runtime/bun", "0755", "remote Bun install");
18167
18184
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/runtime/bun", "/usr/local/bin/bun"], "remote Bun link");
18168
18185
  }
18169
18186
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/agent", REMOTE_STAGE], "remote Agent directories");
18170
18187
  for (const [, name] of artifacts)
18171
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0755", `${remoteTemp}/${name}`, `/usr/local/lib/forgezero/agent/${name}`], "remote Agent install");
18188
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `/usr/local/lib/forgezero/agent/${name}`, "0755", "remote Agent install");
18172
18189
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/agent/fz.js", "/usr/local/bin/fz"], "remote fz link");
18173
18190
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/agent/fz-agent.js", "/usr/local/bin/fz-agent"], "remote fz-agent link");
18174
18191
  }
@@ -18202,9 +18219,9 @@ async function applyOperatorPlatformBootstrap(request, mode, options = {}) {
18202
18219
  for (const bundle of staged.bundleFiles)
18203
18220
  await copy(exec, request, knownHosts, bundle.source, `${remoteTemp}/${bundle.name}`, true);
18204
18221
  for (const name of ["platform-config.json", ...staged.files])
18205
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote bootstrap handoff", true);
18222
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0600", "remote bootstrap handoff", true);
18206
18223
  for (const { name } of staged.bundleFiles)
18207
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0644", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote bootstrap bundle", true);
18224
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0644", "remote bootstrap bundle", true);
18208
18225
  const command = [
18209
18226
  "/usr/bin/sudo",
18210
18227
  "-n",
@@ -18290,7 +18307,7 @@ async function applyOperatorMetalBootstrap(request, mode, options = {}) {
18290
18307
  for (const name of staged.files)
18291
18308
  await copy(exec, request, knownHosts, join11(directory, name), `${remoteTemp}/${name}`, true);
18292
18309
  for (const name of ["metal-config.json", ...staged.files])
18293
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote metal handoff", true);
18310
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0600", "remote metal handoff", true);
18294
18311
  const initialized = await remoteRegularFileExists(exec, request, knownHosts, "/etc/forgezero/metal.initialized.json");
18295
18312
  const output = await remote(exec, request, knownHosts, [
18296
18313
  "/usr/bin/sudo",
@@ -366,7 +366,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
366
366
  }
367
367
 
368
368
  // src/version.ts
369
- var VERSION = "0.1.130";
369
+ var VERSION = "0.1.132";
370
370
 
371
371
  // src/otel-collector.ts
372
372
  var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
@@ -975,9 +975,13 @@ function guestBootstrapOperations(profile, attested = Boolean(profile.confidenti
975
975
  "/run/forgezero-bun.zip"
976
976
  ],
977
977
  ["/usr/bin/sha256sum", "--check", "/etc/forgezero/bun.sha256"],
978
- ["/usr/bin/unzip", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
978
+ ["/usr/bin/busybox", "unzip", "-o", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
979
979
  ["/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/runtime", agentBun],
980
- ["/usr/bin/install", "-m", "0755", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun"],
980
+ ["/usr/bin/rm", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
981
+ ["/usr/bin/cp", "--", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
982
+ ["/usr/bin/chown", "root:root", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
983
+ ["/usr/bin/chmod", "0755", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
984
+ ["/usr/bin/mv", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next", "/usr/local/lib/forgezero/runtime/bun"],
981
985
  ["/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/runtime/bun", "/usr/local/bin/bun"],
982
986
  [
983
987
  "/usr/bin/env",
@@ -1035,7 +1039,7 @@ package_update: true
1035
1039
  ${users}disable_root: true
1036
1040
  # Git is part of the deployment transport, not a tenant-selected prerequisite:
1037
1041
  # every dynamically claimed repository must be cloneable on a clean image.
1038
- packages: [curl, ca-certificates, openssl, openssh-client, git, unzip${claim.spec.confidential ? ", python3" : ""}]
1042
+ packages: [curl, ca-certificates, openssl, openssh-client, git, busybox-static${claim.spec.confidential ? ", python3" : ""}]
1039
1043
  write_files:
1040
1044
  ${enrolmentFiles}${attestationFile}${bunChecksum}runcmd:
1041
1045
  ${bootstrap.map((argv) => ` - ${JSON.stringify(argv)}`).join(`
@@ -975,9 +975,13 @@ function guestBootstrapOperations(profile, attested = Boolean(profile.confidenti
975
975
  "/run/forgezero-bun.zip"
976
976
  ],
977
977
  ["/usr/bin/sha256sum", "--check", "/etc/forgezero/bun.sha256"],
978
- ["/usr/bin/unzip", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
978
+ ["/usr/bin/busybox", "unzip", "-o", "-q", "/run/forgezero-bun.zip", "-d", "/run/forgezero-bun"],
979
979
  ["/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/runtime", agentBun],
980
- ["/usr/bin/install", "-m", "0755", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun"],
980
+ ["/usr/bin/rm", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
981
+ ["/usr/bin/cp", "--", "/run/forgezero-bun/bun-linux-x64/bun", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
982
+ ["/usr/bin/chown", "root:root", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
983
+ ["/usr/bin/chmod", "0755", "/usr/local/lib/forgezero/runtime/bun.forgezero-next"],
984
+ ["/usr/bin/mv", "-f", "--", "/usr/local/lib/forgezero/runtime/bun.forgezero-next", "/usr/local/lib/forgezero/runtime/bun"],
981
985
  ["/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/runtime/bun", "/usr/local/bin/bun"],
982
986
  [
983
987
  "/usr/bin/env",
@@ -1035,7 +1039,7 @@ package_update: true
1035
1039
  ${users}disable_root: true
1036
1040
  # Git is part of the deployment transport, not a tenant-selected prerequisite:
1037
1041
  # every dynamically claimed repository must be cloneable on a clean image.
1038
- packages: [curl, ca-certificates, openssl, openssh-client, git, unzip${claim.spec.confidential ? ", python3" : ""}]
1042
+ packages: [curl, ca-certificates, openssl, openssh-client, git, busybox-static${claim.spec.confidential ? ", python3" : ""}]
1039
1043
  write_files:
1040
1044
  ${enrolmentFiles}${attestationFile}${bunChecksum}runcmd:
1041
1045
  ${bootstrap.map((argv) => ` - ${JSON.stringify(argv)}`).join(`
@@ -1460,7 +1460,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1460
1460
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1461
1461
 
1462
1462
  // src/version.ts
1463
- var VERSION = "0.1.130";
1463
+ var VERSION = "0.1.132";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
@@ -7041,6 +7041,20 @@ var remoteRegularFileExists = async (exec, request, knownHosts, path) => {
7041
7041
  return false;
7042
7042
  throw new Error(`remote initialized-state probe failed${result.output ? `: ${result.output.trim()}` : ""}`);
7043
7043
  };
7044
+ var replaceRemoteFile = async (exec, request, knownHosts, source, destinationPath, mode, label, secret = false) => {
7045
+ const staged = `${destinationPath}.forgezero-next`;
7046
+ try {
7047
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/rm", "-f", "--", staged], label, secret);
7048
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/cp", "--", source, staged], label, secret);
7049
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/chown", "root:root", staged], label, secret);
7050
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/chmod", mode, staged], label, secret);
7051
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/mv", "-f", "--", staged, destinationPath], label, secret);
7052
+ } finally {
7053
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/rm", "-f", "--", staged], label, true).catch(() => {
7054
+ return;
7055
+ });
7056
+ }
7057
+ };
7044
7058
  async function operatorMetalClusterBootstrapCode(requestInput, options = {}) {
7045
7059
  const request = validateMetalRequestValue(requestInput, { validateMetalConfig: false });
7046
7060
  publicIdentity(request.target.identityPublicKeyFile);
@@ -7333,21 +7347,24 @@ async function installPackagedAgent(request, knownHosts, exec, directory, remote
7333
7347
  "--no-install-recommends",
7334
7348
  "ca-certificates",
7335
7349
  "curl",
7336
- "unzip"
7350
+ "busybox-static"
7337
7351
  ], "remote bootstrap prerequisites");
7338
7352
  const archive = await verifiedBunArchive(directory, options.fetch ?? fetch);
7339
7353
  await copy(exec, request, knownHosts, archive, `${remoteTemp}/bun.zip`);
7340
7354
  const digest = await remote(exec, request, knownHosts, ["/usr/bin/sha256sum", `${remoteTemp}/bun.zip`], "remote Bun checksum");
7341
7355
  if (digest.split(/\s+/)[0] !== BUN_RELEASE_SHA256)
7342
7356
  throw new Error("remote Bun checksum mismatch");
7343
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/unzip", "-q", `${remoteTemp}/bun.zip`, "-d", `${remoteTemp}/bun-release`], "remote Bun unpack");
7357
+ await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/busybox", "unzip", "-o", "-q", `${remoteTemp}/bun.zip`, "-d", `${remoteTemp}/bun-release`], "remote Bun unpack");
7358
+ if (!await remoteRegularFileExists(exec, request, knownHosts, `${remoteTemp}/bun-release/bun-linux-x64/bun`)) {
7359
+ throw new Error("remote Bun unpack did not produce the pinned executable");
7360
+ }
7344
7361
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/runtime", "/usr/local/bin"], "remote Bun directory");
7345
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0755", `${remoteTemp}/bun-release/bun-linux-x64/bun`, "/usr/local/lib/forgezero/runtime/bun"], "remote Bun install");
7362
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/bun-release/bun-linux-x64/bun`, "/usr/local/lib/forgezero/runtime/bun", "0755", "remote Bun install");
7346
7363
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/runtime/bun", "/usr/local/bin/bun"], "remote Bun link");
7347
7364
  }
7348
7365
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-d", "-m", "0755", "/usr/local/lib/forgezero/agent", REMOTE_STAGE], "remote Agent directories");
7349
7366
  for (const [, name] of artifacts)
7350
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0755", `${remoteTemp}/${name}`, `/usr/local/lib/forgezero/agent/${name}`], "remote Agent install");
7367
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `/usr/local/lib/forgezero/agent/${name}`, "0755", "remote Agent install");
7351
7368
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/agent/fz.js", "/usr/local/bin/fz"], "remote fz link");
7352
7369
  await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/ln", "-sfn", "/usr/local/lib/forgezero/agent/fz-agent.js", "/usr/local/bin/fz-agent"], "remote fz-agent link");
7353
7370
  }
@@ -7381,9 +7398,9 @@ async function applyOperatorPlatformBootstrap(request, mode, options = {}) {
7381
7398
  for (const bundle of staged.bundleFiles)
7382
7399
  await copy(exec, request, knownHosts, bundle.source, `${remoteTemp}/${bundle.name}`, true);
7383
7400
  for (const name of ["platform-config.json", ...staged.files])
7384
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote bootstrap handoff", true);
7401
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0600", "remote bootstrap handoff", true);
7385
7402
  for (const { name } of staged.bundleFiles)
7386
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0644", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote bootstrap bundle", true);
7403
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0644", "remote bootstrap bundle", true);
7387
7404
  const command = [
7388
7405
  "/usr/bin/sudo",
7389
7406
  "-n",
@@ -7501,7 +7518,7 @@ async function applyOperatorMetalBootstrap(request, mode, options = {}) {
7501
7518
  for (const name of staged.files)
7502
7519
  await copy(exec, request, knownHosts, join6(directory, name), `${remoteTemp}/${name}`, true);
7503
7520
  for (const name of ["metal-config.json", ...staged.files])
7504
- await remote(exec, request, knownHosts, ["/usr/bin/sudo", "-n", "/usr/bin/install", "-m", "0600", `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`], "remote metal handoff", true);
7521
+ await replaceRemoteFile(exec, request, knownHosts, `${remoteTemp}/${name}`, `${REMOTE_STAGE}/${name}`, "0600", "remote metal handoff", true);
7505
7522
  const initialized = await remoteRegularFileExists(exec, request, knownHosts, "/etc/forgezero/metal.initialized.json");
7506
7523
  const output = await remote(exec, request, knownHosts, [
7507
7524
  "/usr/bin/sudo",
@@ -3020,7 +3020,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3020
3020
  }
3021
3021
 
3022
3022
  // src/version.ts
3023
- var VERSION3 = "0.1.130";
3023
+ var VERSION3 = "0.1.132";
3024
3024
 
3025
3025
  // src/egress-policy.ts
3026
3026
  import { realpathSync as realpathSync3 } from "node:fs";
package/dist/provision.js CHANGED
@@ -3020,7 +3020,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3020
3020
  }
3021
3021
 
3022
3022
  // src/version.ts
3023
- var VERSION3 = "0.1.130";
3023
+ var VERSION3 = "0.1.132";
3024
3024
 
3025
3025
  // src/egress-policy.ts
3026
3026
  import { realpathSync as realpathSync3 } from "node:fs";
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  /** One package version shared by both public binaries. Pinned to package.json by tests. */
2
- export declare const VERSION = "0.1.130";
2
+ export declare const VERSION = "0.1.132";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/agent",
3
- "version": "0.1.130",
3
+ "version": "0.1.132",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check": "tsc --noEmit",