@forgezero/agent 0.1.137 → 0.1.139

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.137";
920
+ var VERSION3 = "0.1.139";
921
921
 
922
922
  // src/agent-heartbeat.ts
923
923
  function readAgentHostMetrics() {
@@ -12,8 +12,14 @@ export interface AttendedPlatformBootstrapResult {
12
12
  export interface AttendedPlatformBootstrapDependencies {
13
13
  cloudflare?: typeof runAttendedCloudflareBootstrap;
14
14
  fleet?: typeof applyOperatorPlatformFleetBootstrap;
15
+ validateInvite?: typeof validatePlatformInvitation;
15
16
  finalize?: typeof finalizeCloudflareBootstrapAcceptance;
16
17
  }
18
+ export declare function validatePlatformInvitation(args: {
19
+ apiOrigin: string;
20
+ inviteUrl: string;
21
+ fetcher?: typeof fetch;
22
+ }): Promise<void>;
17
23
  /**
18
24
  * The sole attended genesis composition boundary. All non-secret coordinates
19
25
  * are checked before the first Cloudflare or SSH mutation. Secret values exist
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.137";
1463
+ var VERSION = "0.1.139";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
@@ -2958,6 +2958,7 @@ var runProvisionOperation = async (operation) => {
2958
2958
  rmSync4(key, { force: true });
2959
2959
  if (result.exitCode !== 0)
2960
2960
  return result;
2961
+ chmodSync2("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
2961
2962
  const codename = os.match(/^VERSION_CODENAME=(.+)$/m)?.[1]?.replace(/^"|"$/g, "");
2962
2963
  if (!codename)
2963
2964
  return { stdout: "Ubuntu codename missing", exitCode: 1 };
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
package/dist/fz-agent.js CHANGED
@@ -5471,6 +5471,7 @@ async function executeSoftwareOperation(operation) {
5471
5471
  ]);
5472
5472
  if (dearmored.exitCode !== 0)
5473
5473
  return dearmored;
5474
+ chmodSync2("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
5474
5475
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
5475
5476
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
5476
5477
  `, { mode: 420 });
@@ -9683,7 +9684,7 @@ async function writeAndCloseProcessInput(input, value) {
9683
9684
  }
9684
9685
 
9685
9686
  // src/version.ts
9686
- var VERSION2 = "0.1.137";
9687
+ var VERSION2 = "0.1.139";
9687
9688
 
9688
9689
  // src/ssh-bootstrap.ts
9689
9690
  function deriveMetalAdmissionProvisioning(lscpu) {
@@ -15432,7 +15433,17 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
15432
15433
  const slots = join10(normalized.root, "slots");
15433
15434
  mkdirSync14(slots, { recursive: true, mode: 493 });
15434
15435
  const slotFile = join10(slots, ".active");
15435
- const previousSlot = existsSync19(slotFile) ? readFileSync14(slotFile, "utf8").trim() : undefined;
15436
+ let previousSlot = existsSync19(slotFile) ? readFileSync14(slotFile, "utf8").trim() : undefined;
15437
+ if (previousSlot !== "blue" && previousSlot !== "green") {
15438
+ previousSlot = undefined;
15439
+ for (const candidate of ["blue", "green"]) {
15440
+ const active = await exec(["/usr/bin/systemctl", "is-active", "--quiet", `forgezero@${candidate}.service`]);
15441
+ if (active.exitCode === 0) {
15442
+ previousSlot = candidate;
15443
+ break;
15444
+ }
15445
+ }
15446
+ }
15436
15447
  const target2 = previousSlot === "blue" ? "green" : "blue";
15437
15448
  const port = target2 === "blue" ? normalized.bluePort : normalized.greenPort;
15438
15449
  const targetLink = join10(slots, target2);
@@ -15465,6 +15476,8 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
15465
15476
  const stopTarget = async () => {
15466
15477
  await exec(["/usr/bin/systemctl", "stop", service]);
15467
15478
  replaceLink(targetLink, previousTarget);
15479
+ if (previousSlot)
15480
+ await exec(["/usr/bin/systemctl", "start", `forgezero@${previousSlot}.service`]);
15468
15481
  };
15469
15482
  if (!healthy) {
15470
15483
  await stopTarget();
@@ -16916,6 +16929,7 @@ var runProvisionOperation = async (operation) => {
16916
16929
  rmSync11(key, { force: true });
16917
16930
  if (result.exitCode !== 0)
16918
16931
  return result;
16932
+ chmodSync18("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
16919
16933
  const codename = os.match(/^VERSION_CODENAME=(.+)$/m)?.[1]?.replace(/^"|"$/g, "");
16920
16934
  if (!codename)
16921
16935
  return { stdout: "Ubuntu codename missing", exitCode: 1 };
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.137";
6010
+ var VERSION2 = "0.1.139";
6011
6011
 
6012
6012
  // src/software.ts
6013
6013
  var PINNED_BUN_VERSION = "1.3.14";
@@ -7875,6 +7875,7 @@ var runProvisionOperation = async (operation) => {
7875
7875
  rmSync3(key, { force: true });
7876
7876
  if (result.exitCode !== 0)
7877
7877
  return result;
7878
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
7878
7879
  const codename = os.match(/^VERSION_CODENAME=(.+)$/m)?.[1]?.replace(/^"|"$/g, "");
7879
7880
  if (!codename)
7880
7881
  return { stdout: "Ubuntu codename missing", exitCode: 1 };
@@ -18401,6 +18402,35 @@ var invitationFrom = (fleet, master) => {
18401
18402
  } catch {}
18402
18403
  throw new Error("platform bootstrap completed without the initial custodian invitation");
18403
18404
  };
18405
+ async function validatePlatformInvitation(args) {
18406
+ let invite;
18407
+ let api;
18408
+ try {
18409
+ invite = new URL(args.inviteUrl);
18410
+ api = new URL(args.apiOrigin);
18411
+ } catch {
18412
+ throw new Error("platform bootstrap produced malformed public invitation coordinates");
18413
+ }
18414
+ const token = invite.searchParams.get("token") ?? "";
18415
+ if (invite.protocol !== "https:" || api.protocol !== "https:" || !/^plt_[a-f0-9]{48}$/.test(token)) {
18416
+ throw new Error("platform bootstrap produced malformed public invitation coordinates");
18417
+ }
18418
+ const endpoint2 = new URL(`/api/onboarding/invite/${encodeURIComponent(token)}`, api);
18419
+ let response;
18420
+ try {
18421
+ response = await (args.fetcher ?? fetch)(endpoint2, {
18422
+ headers: { accept: "application/json" },
18423
+ cache: "no-store",
18424
+ signal: AbortSignal.timeout(15000)
18425
+ });
18426
+ } catch {
18427
+ throw new Error("platform bootstrap invitation could not be verified through public ingress");
18428
+ }
18429
+ const body = await response.json().catch(() => null);
18430
+ if (!response.ok || body?.ok !== true || body.kind !== "platform-bootstrap" || body.claimable !== true) {
18431
+ throw new Error("platform bootstrap invitation is not claimable; the environment was repaired from existing state instead of clean genesis");
18432
+ }
18433
+ }
18404
18434
  async function applyAttendedPlatformBootstrap(fleetRequest, cloudflareRequest, acceptancePath, secrets, dependencies = {}) {
18405
18435
  if (cloudflareRequest.mode !== "apply")
18406
18436
  throw new Error("attended platform bootstrap requires Cloudflare apply mode");
@@ -18425,6 +18455,10 @@ async function applyAttendedPlatformBootstrap(fleetRequest, cloudflareRequest, a
18425
18455
  if (!fleet.ok)
18426
18456
  return { kind: "forgezero-attended-platform-bootstrap", ok: false, edge, fleet };
18427
18457
  const inviteUrl = invitationFrom(fleet, fleetCoordinates.nodes[0].computeReference);
18458
+ await (dependencies.validateInvite ?? validatePlatformInvitation)({
18459
+ apiOrigin: fleetCoordinates.apiOrigin,
18460
+ inviteUrl
18461
+ });
18428
18462
  const acceptance = await (dependencies.finalize ?? finalizeCloudflareBootstrapAcceptance)({
18429
18463
  checkpointPath: edge.checkpointFile,
18430
18464
  acceptancePath
@@ -366,7 +366,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
366
366
  }
367
367
 
368
368
  // src/version.ts
369
- var VERSION = "0.1.137";
369
+ var VERSION = "0.1.139";
370
370
 
371
371
  // src/otel-collector.ts
372
372
  var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
@@ -619,6 +619,7 @@ async function executeSoftwareOperation(operation) {
619
619
  ]);
620
620
  if (dearmored.exitCode !== 0)
621
621
  return dearmored;
622
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
622
623
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
623
624
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
624
625
  `, { mode: 420 });
@@ -619,6 +619,7 @@ async function executeSoftwareOperation(operation) {
619
619
  ]);
620
620
  if (dearmored.exitCode !== 0)
621
621
  return dearmored;
622
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
622
623
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
623
624
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
624
625
  `, { mode: 420 });
@@ -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.137";
1463
+ var VERSION = "0.1.139";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
@@ -2958,6 +2958,7 @@ var runProvisionOperation = async (operation) => {
2958
2958
  rmSync4(key, { force: true });
2959
2959
  if (result.exitCode !== 0)
2960
2960
  return result;
2961
+ chmodSync2("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
2961
2962
  const codename = os.match(/^VERSION_CODENAME=(.+)$/m)?.[1]?.replace(/^"|"$/g, "");
2962
2963
  if (!codename)
2963
2964
  return { stdout: "Ubuntu codename missing", exitCode: 1 };
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
@@ -1260,7 +1261,17 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
1260
1261
  const slots = join2(normalized.root, "slots");
1261
1262
  mkdirSync2(slots, { recursive: true, mode: 493 });
1262
1263
  const slotFile = join2(slots, ".active");
1263
- const previousSlot = existsSync2(slotFile) ? readFileSync2(slotFile, "utf8").trim() : undefined;
1264
+ let previousSlot = existsSync2(slotFile) ? readFileSync2(slotFile, "utf8").trim() : undefined;
1265
+ if (previousSlot !== "blue" && previousSlot !== "green") {
1266
+ previousSlot = undefined;
1267
+ for (const candidate of ["blue", "green"]) {
1268
+ const active = await exec(["/usr/bin/systemctl", "is-active", "--quiet", `forgezero@${candidate}.service`]);
1269
+ if (active.exitCode === 0) {
1270
+ previousSlot = candidate;
1271
+ break;
1272
+ }
1273
+ }
1274
+ }
1264
1275
  const target = previousSlot === "blue" ? "green" : "blue";
1265
1276
  const port = target === "blue" ? normalized.bluePort : normalized.greenPort;
1266
1277
  const targetLink = join2(slots, target);
@@ -1293,6 +1304,8 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
1293
1304
  const stopTarget = async () => {
1294
1305
  await exec(["/usr/bin/systemctl", "stop", service]);
1295
1306
  replaceLink(targetLink, previousTarget);
1307
+ if (previousSlot)
1308
+ await exec(["/usr/bin/systemctl", "start", `forgezero@${previousSlot}.service`]);
1296
1309
  };
1297
1310
  if (!healthy) {
1298
1311
  await stopTarget();
@@ -1318,6 +1318,7 @@ async function executeSoftwareOperation(operation) {
1318
1318
  ]);
1319
1319
  if (dearmored.exitCode !== 0)
1320
1320
  return dearmored;
1321
+ chmodSync4("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
1321
1322
  mkdirSync3("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
1322
1323
  writeFileSync3("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
1323
1324
  `, { mode: 420 });
@@ -3049,7 +3050,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3049
3050
  }
3050
3051
 
3051
3052
  // src/version.ts
3052
- var VERSION3 = "0.1.137";
3053
+ var VERSION3 = "0.1.139";
3053
3054
 
3054
3055
  // src/egress-policy.ts
3055
3056
  import { realpathSync as realpathSync3 } from "node:fs";
@@ -4776,7 +4777,17 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
4776
4777
  const slots = join5(normalized.root, "slots");
4777
4778
  mkdirSync8(slots, { recursive: true, mode: 493 });
4778
4779
  const slotFile = join5(slots, ".active");
4779
- const previousSlot = existsSync8(slotFile) ? readFileSync6(slotFile, "utf8").trim() : undefined;
4780
+ let previousSlot = existsSync8(slotFile) ? readFileSync6(slotFile, "utf8").trim() : undefined;
4781
+ if (previousSlot !== "blue" && previousSlot !== "green") {
4782
+ previousSlot = undefined;
4783
+ for (const candidate of ["blue", "green"]) {
4784
+ const active = await exec(["/usr/bin/systemctl", "is-active", "--quiet", `forgezero@${candidate}.service`]);
4785
+ if (active.exitCode === 0) {
4786
+ previousSlot = candidate;
4787
+ break;
4788
+ }
4789
+ }
4790
+ }
4780
4791
  const target = previousSlot === "blue" ? "green" : "blue";
4781
4792
  const port = target === "blue" ? normalized.bluePort : normalized.greenPort;
4782
4793
  const targetLink = join5(slots, target);
@@ -4809,6 +4820,8 @@ async function activatePlatformRelease(config, requestedRelease, options = {}) {
4809
4820
  const stopTarget = async () => {
4810
4821
  await exec(["/usr/bin/systemctl", "stop", service]);
4811
4822
  replaceLink(targetLink, previousTarget);
4823
+ if (previousSlot)
4824
+ await exec(["/usr/bin/systemctl", "start", `forgezero@${previousSlot}.service`]);
4812
4825
  };
4813
4826
  if (!healthy) {
4814
4827
  await stopTarget();
@@ -5171,6 +5184,7 @@ var runProvisionOperation = async (operation) => {
5171
5184
  rmSync8(key, { force: true });
5172
5185
  if (result.exitCode !== 0)
5173
5186
  return result;
5187
+ chmodSync7("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
5174
5188
  const codename = os.match(/^VERSION_CODENAME=(.+)$/m)?.[1]?.replace(/^"|"$/g, "");
5175
5189
  if (!codename)
5176
5190
  return { stdout: "Ubuntu codename missing", exitCode: 1 };
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
package/dist/provision.js CHANGED
@@ -1318,6 +1318,7 @@ async function executeSoftwareOperation(operation) {
1318
1318
  ]);
1319
1319
  if (dearmored.exitCode !== 0)
1320
1320
  return dearmored;
1321
+ chmodSync4("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
1321
1322
  mkdirSync3("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
1322
1323
  writeFileSync3("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
1323
1324
  `, { mode: 420 });
@@ -3049,7 +3050,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3049
3050
  }
3050
3051
 
3051
3052
  // src/version.ts
3052
- var VERSION3 = "0.1.137";
3053
+ var VERSION3 = "0.1.139";
3053
3054
 
3054
3055
  // src/egress-policy.ts
3055
3056
  import { realpathSync as realpathSync3 } from "node:fs";
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
package/dist/software.js CHANGED
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
package/dist/ubuntu.js CHANGED
@@ -475,6 +475,7 @@ async function executeSoftwareOperation(operation) {
475
475
  ]);
476
476
  if (dearmored.exitCode !== 0)
477
477
  return dearmored;
478
+ chmodSync("/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg", 420);
478
479
  mkdirSync("/etc/apt/sources.list.d", { recursive: true, mode: 493 });
479
480
  writeFileSync("/etc/apt/sources.list.d/cloudflare-client.list", `deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ resolute main
480
481
  `, { mode: 420 });
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.137";
2
+ export declare const VERSION = "0.1.139";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/agent",
3
- "version": "0.1.137",
3
+ "version": "0.1.139",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check": "tsc --noEmit",