@forgezero/agent 0.1.51 → 0.1.53

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.
@@ -749,7 +749,7 @@ async function postSignedNode(options, path, body) {
749
749
  }
750
750
 
751
751
  // src/version.ts
752
- var VERSION3 = "0.1.51";
752
+ var VERSION3 = "0.1.53";
753
753
 
754
754
  // src/agent-heartbeat.ts
755
755
  var unquote = (value) => value.replace(/^['"]|['"]$/g, "");
package/dist/bootstrap.js CHANGED
@@ -1207,7 +1207,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1207
1207
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1208
1208
 
1209
1209
  // src/version.ts
1210
- var VERSION = "0.1.51";
1210
+ var VERSION = "0.1.53";
1211
1211
 
1212
1212
  // src/software.ts
1213
1213
  var PINNED_BUN_VERSION = "1.3.14";
@@ -41,8 +41,17 @@ var UBUNTU_2604_X64 = [
41
41
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
42
42
  ];
43
43
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
44
- var run = async (argv, env = {}) => {
45
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
44
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
45
+ var runSoftwareCommand = async (argv, env = {}) => {
46
+ let child;
47
+ try {
48
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
49
+ } catch (cause) {
50
+ const failure = softwareSpawnFailure(cause, argv);
51
+ if (failure)
52
+ return failure;
53
+ throw cause;
54
+ }
46
55
  const [stdout, stderr, exitCode] = await Promise.all([
47
56
  new Response(child.stdout).text(),
48
57
  new Response(child.stderr).text(),
@@ -50,6 +59,7 @@ var run = async (argv, env = {}) => {
50
59
  ]);
51
60
  return { exitCode, output: `${stdout}${stderr}` };
52
61
  };
62
+ var run = runSoftwareCommand;
53
63
  var download = async (url, destination, sha256) => {
54
64
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
55
65
  if (!response.ok)
@@ -78,7 +88,7 @@ async function executeSoftwareOperation(operation) {
78
88
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
79
89
  }
80
90
  if (software === "arangodb") {
81
- const binary = await run(["/usr/bin/arangod", "--version"]);
91
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
82
92
  if (!successful(binary, /3\.11\.14/))
83
93
  return { ...binary, exitCode: 1 };
84
94
  const [active, enabled] = await Promise.all([
@@ -377,7 +387,7 @@ function planCommunityRehearsalPrepare(request) {
377
387
  const node = exactNode(request.node);
378
388
  const releaseRoot = `${COMMUNITY_REHEARSAL_ROOT}/releases/${request.release}`;
379
389
  return [
380
- { kind: "exec", argv: ["/usr/bin/arangod", "--version"] },
390
+ { kind: "exec", argv: ["/usr/sbin/arangod", "--version"] },
381
391
  { kind: "exec", argv: ["/usr/bin/systemctl", "stop", "forgezero-community-api.service"], accepted: [0, 5] },
382
392
  { kind: "exec", argv: ["/usr/bin/systemctl", "stop", "forgezero-rehearsal-db.service"], accepted: [0, 5] },
383
393
  { kind: "remove-tree", path: COMMUNITY_DATABASE_ROOT },
@@ -432,7 +442,7 @@ async function applyOperations(operations) {
432
442
  const result = await exec(operation.argv, operation.stdin);
433
443
  if (!(operation.accepted ?? [0]).includes(result.exitCode))
434
444
  throw new Error(`${operation.argv[0]} failed (${result.exitCode}): ${result.output.trim()}`);
435
- if (operation.argv[0] === "/usr/bin/arangod" && !result.output.split(/\r?\n/, 1)[0]?.includes(COMMUNITY_REHEARSAL_VERSION)) {
445
+ if (operation.argv[0] === "/usr/sbin/arangod" && !result.output.split(/\r?\n/, 1)[0]?.includes(COMMUNITY_REHEARSAL_VERSION)) {
436
446
  throw new Error(`community rehearsal requires ArangoDB ${COMMUNITY_REHEARSAL_VERSION}`);
437
447
  }
438
448
  }
@@ -41,8 +41,17 @@ var UBUNTU_2604_X64 = [
41
41
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
42
42
  ];
43
43
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
44
- var run = async (argv, env = {}) => {
45
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
44
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
45
+ var runSoftwareCommand = async (argv, env = {}) => {
46
+ let child;
47
+ try {
48
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
49
+ } catch (cause) {
50
+ const failure = softwareSpawnFailure(cause, argv);
51
+ if (failure)
52
+ return failure;
53
+ throw cause;
54
+ }
46
55
  const [stdout, stderr, exitCode] = await Promise.all([
47
56
  new Response(child.stdout).text(),
48
57
  new Response(child.stderr).text(),
@@ -50,6 +59,7 @@ var run = async (argv, env = {}) => {
50
59
  ]);
51
60
  return { exitCode, output: `${stdout}${stderr}` };
52
61
  };
62
+ var run = runSoftwareCommand;
53
63
  var download = async (url, destination, sha256) => {
54
64
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
55
65
  if (!response.ok)
@@ -78,7 +88,7 @@ async function executeSoftwareOperation(operation) {
78
88
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
79
89
  }
80
90
  if (software === "arangodb") {
81
- const binary = await run(["/usr/bin/arangod", "--version"]);
91
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
82
92
  if (!successful(binary, /3\.11\.14/))
83
93
  return { ...binary, exitCode: 1 };
84
94
  const [active, enabled] = await Promise.all([
@@ -41,8 +41,17 @@ var UBUNTU_2604_X64 = [
41
41
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
42
42
  ];
43
43
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
44
- var run = async (argv, env = {}) => {
45
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
44
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
45
+ var runSoftwareCommand = async (argv, env = {}) => {
46
+ let child;
47
+ try {
48
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
49
+ } catch (cause) {
50
+ const failure = softwareSpawnFailure(cause, argv);
51
+ if (failure)
52
+ return failure;
53
+ throw cause;
54
+ }
46
55
  const [stdout, stderr, exitCode] = await Promise.all([
47
56
  new Response(child.stdout).text(),
48
57
  new Response(child.stderr).text(),
@@ -50,6 +59,7 @@ var run = async (argv, env = {}) => {
50
59
  ]);
51
60
  return { exitCode, output: `${stdout}${stderr}` };
52
61
  };
62
+ var run = runSoftwareCommand;
53
63
  var download = async (url, destination, sha256) => {
54
64
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
55
65
  if (!response.ok)
@@ -78,7 +88,7 @@ async function executeSoftwareOperation(operation) {
78
88
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
79
89
  }
80
90
  if (software === "arangodb") {
81
- const binary = await run(["/usr/bin/arangod", "--version"]);
91
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
82
92
  if (!successful(binary, /3\.11\.14/))
83
93
  return { ...binary, exitCode: 1 };
84
94
  const [active, enabled] = await Promise.all([
package/dist/fz-agent.js CHANGED
@@ -4990,8 +4990,17 @@ var UBUNTU_2604_X64 = [
4990
4990
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
4991
4991
  ];
4992
4992
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
4993
- var run = async (argv, env = {}) => {
4994
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
4993
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
4994
+ var runSoftwareCommand = async (argv, env = {}) => {
4995
+ let child;
4996
+ try {
4997
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
4998
+ } catch (cause) {
4999
+ const failure = softwareSpawnFailure(cause, argv);
5000
+ if (failure)
5001
+ return failure;
5002
+ throw cause;
5003
+ }
4995
5004
  const [stdout, stderr, exitCode] = await Promise.all([
4996
5005
  new Response(child.stdout).text(),
4997
5006
  new Response(child.stderr).text(),
@@ -4999,6 +5008,7 @@ var run = async (argv, env = {}) => {
4999
5008
  ]);
5000
5009
  return { exitCode, output: `${stdout}${stderr}` };
5001
5010
  };
5011
+ var run = runSoftwareCommand;
5002
5012
  var download = async (url, destination, sha2562) => {
5003
5013
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
5004
5014
  if (!response.ok)
@@ -5027,7 +5037,7 @@ async function executeSoftwareOperation(operation) {
5027
5037
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
5028
5038
  }
5029
5039
  if (software === "arangodb") {
5030
- const binary = await run(["/usr/bin/arangod", "--version"]);
5040
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
5031
5041
  if (!successful(binary, /3\.11\.14/))
5032
5042
  return { ...binary, exitCode: 1 };
5033
5043
  const [active, enabled] = await Promise.all([
@@ -7000,7 +7010,7 @@ function assertSupportedGuestImage(imageKey) {
7000
7010
  }
7001
7011
 
7002
7012
  // src/version.ts
7003
- var VERSION = "0.1.51";
7013
+ var VERSION = "0.1.53";
7004
7014
 
7005
7015
  // src/ssh-bootstrap.ts
7006
7016
  class SshBootstrapError extends Error {
@@ -13342,7 +13352,7 @@ function planCommunityRehearsalPrepare(request) {
13342
13352
  const node = exactNode(request.node);
13343
13353
  const releaseRoot = `${COMMUNITY_REHEARSAL_ROOT}/releases/${request.release}`;
13344
13354
  return [
13345
- { kind: "exec", argv: ["/usr/bin/arangod", "--version"] },
13355
+ { kind: "exec", argv: ["/usr/sbin/arangod", "--version"] },
13346
13356
  { kind: "exec", argv: ["/usr/bin/systemctl", "stop", "forgezero-community-api.service"], accepted: [0, 5] },
13347
13357
  { kind: "exec", argv: ["/usr/bin/systemctl", "stop", "forgezero-rehearsal-db.service"], accepted: [0, 5] },
13348
13358
  { kind: "remove-tree", path: COMMUNITY_DATABASE_ROOT },
@@ -13397,7 +13407,7 @@ async function applyOperations(operations) {
13397
13407
  const result = await exec(operation.argv, operation.stdin);
13398
13408
  if (!(operation.accepted ?? [0]).includes(result.exitCode))
13399
13409
  throw new Error(`${operation.argv[0]} failed (${result.exitCode}): ${result.output.trim()}`);
13400
- if (operation.argv[0] === "/usr/bin/arangod" && !result.output.split(/\r?\n/, 1)[0]?.includes(COMMUNITY_REHEARSAL_VERSION)) {
13410
+ if (operation.argv[0] === "/usr/sbin/arangod" && !result.output.split(/\r?\n/, 1)[0]?.includes(COMMUNITY_REHEARSAL_VERSION)) {
13401
13411
  throw new Error(`community rehearsal requires ArangoDB ${COMMUNITY_REHEARSAL_VERSION}`);
13402
13412
  }
13403
13413
  }
package/dist/fz.js CHANGED
@@ -4830,7 +4830,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
4830
4830
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
4831
4831
 
4832
4832
  // src/version.ts
4833
- var VERSION2 = "0.1.51";
4833
+ var VERSION2 = "0.1.53";
4834
4834
 
4835
4835
  // src/software.ts
4836
4836
  var PINNED_BUN_VERSION = "1.3.14";
@@ -292,7 +292,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
292
292
  }
293
293
 
294
294
  // src/version.ts
295
- var VERSION = "0.1.51";
295
+ var VERSION = "0.1.53";
296
296
 
297
297
  // src/otel-collector.ts
298
298
  var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
@@ -1207,7 +1207,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
1207
1207
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
1208
1208
 
1209
1209
  // src/version.ts
1210
- var VERSION = "0.1.51";
1210
+ var VERSION = "0.1.53";
1211
1211
 
1212
1212
  // src/software.ts
1213
1213
  var PINNED_BUN_VERSION = "1.3.14";
@@ -719,8 +719,17 @@ var UBUNTU_2604_X64 = [
719
719
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
720
720
  ];
721
721
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
722
- var run = async (argv, env = {}) => {
723
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
722
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
723
+ var runSoftwareCommand = async (argv, env = {}) => {
724
+ let child;
725
+ try {
726
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
727
+ } catch (cause) {
728
+ const failure = softwareSpawnFailure(cause, argv);
729
+ if (failure)
730
+ return failure;
731
+ throw cause;
732
+ }
724
733
  const [stdout, stderr, exitCode] = await Promise.all([
725
734
  new Response(child.stdout).text(),
726
735
  new Response(child.stderr).text(),
@@ -728,6 +737,7 @@ var run = async (argv, env = {}) => {
728
737
  ]);
729
738
  return { exitCode, output: `${stdout}${stderr}` };
730
739
  };
740
+ var run = runSoftwareCommand;
731
741
  var download = async (url, destination, sha256) => {
732
742
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
733
743
  if (!response.ok)
@@ -756,7 +766,7 @@ async function executeSoftwareOperation(operation) {
756
766
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
757
767
  }
758
768
  if (software === "arangodb") {
759
- const binary = await run(["/usr/bin/arangod", "--version"]);
769
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
760
770
  if (!successful(binary, /3\.11\.14/))
761
771
  return { ...binary, exitCode: 1 };
762
772
  const [active, enabled] = await Promise.all([
@@ -1697,7 +1707,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
1697
1707
  }
1698
1708
 
1699
1709
  // src/version.ts
1700
- var VERSION3 = "0.1.51";
1710
+ var VERSION3 = "0.1.53";
1701
1711
 
1702
1712
  // src/egress-policy.ts
1703
1713
  import { realpathSync as realpathSync2 } from "node:fs";
package/dist/provision.js CHANGED
@@ -719,8 +719,17 @@ var UBUNTU_2604_X64 = [
719
719
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
720
720
  ];
721
721
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
722
- var run = async (argv, env = {}) => {
723
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
722
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
723
+ var runSoftwareCommand = async (argv, env = {}) => {
724
+ let child;
725
+ try {
726
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
727
+ } catch (cause) {
728
+ const failure = softwareSpawnFailure(cause, argv);
729
+ if (failure)
730
+ return failure;
731
+ throw cause;
732
+ }
724
733
  const [stdout, stderr, exitCode] = await Promise.all([
725
734
  new Response(child.stdout).text(),
726
735
  new Response(child.stderr).text(),
@@ -728,6 +737,7 @@ var run = async (argv, env = {}) => {
728
737
  ]);
729
738
  return { exitCode, output: `${stdout}${stderr}` };
730
739
  };
740
+ var run = runSoftwareCommand;
731
741
  var download = async (url, destination, sha256) => {
732
742
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
733
743
  if (!response.ok)
@@ -756,7 +766,7 @@ async function executeSoftwareOperation(operation) {
756
766
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
757
767
  }
758
768
  if (software === "arangodb") {
759
- const binary = await run(["/usr/bin/arangod", "--version"]);
769
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
760
770
  if (!successful(binary, /3\.11\.14/))
761
771
  return { ...binary, exitCode: 1 };
762
772
  const [active, enabled] = await Promise.all([
@@ -1697,7 +1707,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
1697
1707
  }
1698
1708
 
1699
1709
  // src/version.ts
1700
- var VERSION3 = "0.1.51";
1710
+ var VERSION3 = "0.1.53";
1701
1711
 
1702
1712
  // src/egress-policy.ts
1703
1713
  import { realpathSync as realpathSync2 } from "node:fs";
@@ -41,8 +41,17 @@ var UBUNTU_2604_X64 = [
41
41
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
42
42
  ];
43
43
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
44
- var run = async (argv, env = {}) => {
45
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
44
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
45
+ var runSoftwareCommand = async (argv, env = {}) => {
46
+ let child;
47
+ try {
48
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
49
+ } catch (cause) {
50
+ const failure = softwareSpawnFailure(cause, argv);
51
+ if (failure)
52
+ return failure;
53
+ throw cause;
54
+ }
46
55
  const [stdout, stderr, exitCode] = await Promise.all([
47
56
  new Response(child.stdout).text(),
48
57
  new Response(child.stderr).text(),
@@ -50,6 +59,7 @@ var run = async (argv, env = {}) => {
50
59
  ]);
51
60
  return { exitCode, output: `${stdout}${stderr}` };
52
61
  };
62
+ var run = runSoftwareCommand;
53
63
  var download = async (url, destination, sha256) => {
54
64
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
55
65
  if (!response.ok)
@@ -78,7 +88,7 @@ async function executeSoftwareOperation(operation) {
78
88
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
79
89
  }
80
90
  if (software === "arangodb") {
81
- const binary = await run(["/usr/bin/arangod", "--version"]);
91
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
82
92
  if (!successful(binary, /3\.11\.14/))
83
93
  return { ...binary, exitCode: 1 };
84
94
  const [active, enabled] = await Promise.all([
@@ -46,6 +46,8 @@ export declare const BUN_RELEASE_SHA256 = "951ee2aee855f08595aeec6225226a298d3fe
46
46
  /** Public, command-free catalog. Root strategies remain private below. */
47
47
  export declare const OS_CATALOG: readonly OsCatalogEntry[];
48
48
  export declare const SOFTWARE_CATALOG: readonly SoftwareCatalogEntry[];
49
+ export declare const softwareSpawnFailure: (cause: unknown, argv: readonly string[]) => SoftwareCommandResult | undefined;
50
+ export declare const runSoftwareCommand: (argv: readonly string[], env?: Record<string, string>) => Promise<SoftwareCommandResult>;
49
51
  /** Closed, fixed-argv privileged strategy executor. No repository value becomes a command. */
50
52
  export declare function executeSoftwareOperation(operation: SoftwareOperation): Promise<SoftwareCommandResult>;
51
53
  export declare function observeSoftwareHost(osRelease?: string, architecture?: NodeJS.Architecture): SoftwareObservation;
package/dist/software.js CHANGED
@@ -41,8 +41,17 @@ var UBUNTU_2604_X64 = [
41
41
  { requirement: { id: "openssh-client", version: "ubuntu-26.04" } }
42
42
  ];
43
43
  var path = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
44
- var run = async (argv, env = {}) => {
45
- const child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
44
+ var softwareSpawnFailure = (cause, argv) => cause.code === "ENOENT" ? { exitCode: 127, output: `executable is absent: ${argv[0]}` } : undefined;
45
+ var runSoftwareCommand = async (argv, env = {}) => {
46
+ let child;
47
+ try {
48
+ child = Bun.spawn([...argv], { stdout: "pipe", stderr: "pipe", env: { PATH: path, LANG: "C", LC_ALL: "C", ...env } });
49
+ } catch (cause) {
50
+ const failure = softwareSpawnFailure(cause, argv);
51
+ if (failure)
52
+ return failure;
53
+ throw cause;
54
+ }
46
55
  const [stdout, stderr, exitCode] = await Promise.all([
47
56
  new Response(child.stdout).text(),
48
57
  new Response(child.stderr).text(),
@@ -50,6 +59,7 @@ var run = async (argv, env = {}) => {
50
59
  ]);
51
60
  return { exitCode, output: `${stdout}${stderr}` };
52
61
  };
62
+ var run = runSoftwareCommand;
53
63
  var download = async (url, destination, sha256) => {
54
64
  const response = await fetch(url, { redirect: "follow", signal: AbortSignal.timeout(120000) });
55
65
  if (!response.ok)
@@ -78,7 +88,7 @@ async function executeSoftwareOperation(operation) {
78
88
  return binary.exitCode === 0 ? run(["/usr/bin/systemctl", "is-active", "--quiet", "nginx.service"]) : binary;
79
89
  }
80
90
  if (software === "arangodb") {
81
- const binary = await run(["/usr/bin/arangod", "--version"]);
91
+ const binary = await run(["/usr/sbin/arangod", "--version"]);
82
92
  if (!successful(binary, /3\.11\.14/))
83
93
  return { ...binary, exitCode: 1 };
84
94
  const [active, enabled] = await Promise.all([
@@ -237,6 +247,8 @@ async function ensureSoftwareRequirements(requirementsInput, options) {
237
247
  }
238
248
  export {
239
249
  validateSoftwareRequirements,
250
+ softwareSpawnFailure,
251
+ runSoftwareCommand,
240
252
  observeSoftwareHost,
241
253
  executeSoftwareOperation,
242
254
  ensureSoftwareRequirements,
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.51";
2
+ export declare const VERSION = "0.1.53";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/agent",
3
- "version": "0.1.51",
3
+ "version": "0.1.53",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check": "tsc --noEmit",