@forgezero/agent 0.1.120 → 0.1.122

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.120";
920
+ var VERSION3 = "0.1.122";
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.120";
1463
+ var VERSION = "0.1.122";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
@@ -6,6 +6,11 @@ export type RepositoryOperation = 'dev-reset' | 'db-backup' | 'db-recover' | 'db
6
6
  * error instead of a silently ignored mutation bypass such as --force.
7
7
  */
8
8
  export declare function unsupportedRepositoryCliOption(argv: readonly string[]): string | undefined;
9
+ export declare function forwardedRepositoryOperationArguments(options: {
10
+ apply: boolean;
11
+ json: boolean;
12
+ disposableFleetConfirmation?: string;
13
+ }, args: readonly string[]): string[];
9
14
  export interface ResolvedRepositoryOperation {
10
15
  operation: RepositoryOperation;
11
16
  root: string;
@@ -4,6 +4,9 @@ export declare const COMMUNITY_REHEARSAL_ROOT = "/opt/forgezero-rehearsals/commu
4
4
  export declare const COMMUNITY_DATABASE_ROOT = "/var/lib/forgezero-rehearsal-cluster";
5
5
  export declare const COMMUNITY_CREDENTIAL_PARENT = "/etc/forgezero-rehearsal";
6
6
  export declare const COMMUNITY_CREDENTIAL_ROOT = "/etc/forgezero-rehearsal/creds";
7
+ export declare const COMMUNITY_REHEARSAL_STARTER_PORT = 18528;
8
+ export declare const COMMUNITY_REHEARSAL_COORDINATOR_PORT = 18529;
9
+ export declare const COMMUNITY_REHEARSAL_API_PORT = 18787;
7
10
  export interface CommunityRehearsalNode {
8
11
  name: string;
9
12
  address: string;
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -568,6 +572,9 @@ var COMMUNITY_REHEARSAL_ROOT = "/opt/forgezero-rehearsals/community-cluster-api"
568
572
  var COMMUNITY_DATABASE_ROOT = "/var/lib/forgezero-rehearsal-cluster";
569
573
  var COMMUNITY_CREDENTIAL_PARENT = "/etc/forgezero-rehearsal";
570
574
  var COMMUNITY_CREDENTIAL_ROOT = "/etc/forgezero-rehearsal/creds";
575
+ var COMMUNITY_REHEARSAL_STARTER_PORT = 18528;
576
+ var COMMUNITY_REHEARSAL_COORDINATOR_PORT = 18529;
577
+ var COMMUNITY_REHEARSAL_API_PORT = 18787;
571
578
  var RELEASE = /^[a-f0-9]{64}$/;
572
579
  var SAFE_NAME = /^[a-z][a-z0-9-]{0,62}$/;
573
580
  async function ensureCommunityRehearsalArango(execute = executeSoftwareOperation) {
@@ -647,7 +654,7 @@ function parseCommunityRehearsalHostRequest(value) {
647
654
  }
648
655
  var databaseUnit = (node, topology) => {
649
656
  const starter = topology.find((entry) => entry.starter);
650
- const join2 = node.starter ? "" : ` --starter.join=${starter.address}`;
657
+ const join2 = node.starter ? "" : ` --starter.join=${starter.address}:${COMMUNITY_REHEARSAL_STARTER_PORT}`;
651
658
  const role = node.agency ? "" : " --cluster.start-agent=false --cluster.start-coordinator=true --cluster.start-dbserver=true";
652
659
  return `[Unit]
653
660
  Description=ForgeZero isolated Community ${COMMUNITY_REHEARSAL_VERSION} rehearsal cluster
@@ -659,7 +666,7 @@ Type=simple
659
666
  User=arangodb
660
667
  Group=arangodb
661
668
  LoadCredentialEncrypted=arangodb-jwt:${COMMUNITY_CREDENTIAL_ROOT}/arangodb-jwt.cred
662
- ExecStart=/usr/bin/arangodb --starter.mode=cluster --starter.address=${node.address} --starter.host=${node.address} --starter.data-dir=${COMMUNITY_DATABASE_ROOT} --starter.disable-ipv6 --auth.jwt-secret=%d/arangodb-jwt${join2}${role}
669
+ ExecStart=/usr/bin/arangodb --starter.mode=cluster --starter.address=${node.address} --starter.host=${node.address} --starter.port=${COMMUNITY_REHEARSAL_STARTER_PORT} --starter.data-dir=${COMMUNITY_DATABASE_ROOT} --starter.disable-ipv6 --auth.jwt-secret=%d/arangodb-jwt${join2}${role}
663
670
  Restart=always
664
671
  RestartSec=5
665
672
  LimitNOFILE=100000
@@ -683,8 +690,8 @@ WantedBy=multi-user.target
683
690
  `;
684
691
  };
685
692
  var apiUnit = (node, topology) => {
686
- const urls = topology.map(({ address }) => `http://${address}:8529`).join(",");
687
- const readPreferred = topology.filter(({ readPreferred: readPreferred2 }) => readPreferred2).map(({ address }) => `http://${address}:8529`).join(",");
693
+ const urls = topology.map(({ address }) => `http://${address}:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}`).join(",");
694
+ const readPreferred = topology.filter(({ readPreferred: readPreferred2 }) => readPreferred2).map(({ address }) => `http://${address}:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}`).join(",");
688
695
  return `[Unit]
689
696
  Description=ForgeZero typed Community cluster rehearsal API
690
697
  After=forgezero-rehearsal-db.service network-online.target
@@ -697,9 +704,9 @@ Group=forgezero
697
704
  WorkingDirectory=${COMMUNITY_REHEARSAL_ROOT}/current
698
705
  LoadCredentialEncrypted=arangodb-jwt:${COMMUNITY_CREDENTIAL_ROOT}/arangodb-jwt.cred
699
706
  Environment=HOST=127.0.0.1
700
- Environment=PORT=8787
707
+ Environment=PORT=${COMMUNITY_REHEARSAL_API_PORT}
701
708
  Environment=NODE_NAME=${node.name}
702
- Environment=ARANGO_URL=http://127.0.0.1:8529
709
+ Environment=ARANGO_URL=http://127.0.0.1:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}
703
710
  Environment=ARANGO_URLS=${urls}
704
711
  Environment=ARANGO_READ_PREFERRED_URLS=${readPreferred}
705
712
  Environment=ARANGO_READ_PREFERRED_FALLBACK=error
@@ -800,7 +807,7 @@ async function applyOperations(operations) {
800
807
  }
801
808
  }
802
809
  var responseFor = async (request) => {
803
- const base = "http://127.0.0.1:8787";
810
+ const base = `http://127.0.0.1:${COMMUNITY_REHEARSAL_API_PORT}`;
804
811
  if (request.operation === "health")
805
812
  return fetch(`${base}/health`, { signal: AbortSignal.timeout(15000) });
806
813
  if (request.operation === "init")
@@ -862,7 +869,7 @@ async function runCommunityRehearsalHost(request) {
862
869
  }
863
870
  if (request.action === "database-ready" || request.action === "starter-ready" || request.action === "api-ready") {
864
871
  const starter = topology.find((entry) => entry.starter);
865
- const url = request.action === "database-ready" ? "http://127.0.0.1:8529/_api/version" : request.action === "starter-ready" ? `http://${starter.address}:8528/version` : "http://127.0.0.1:8787/health";
872
+ const url = request.action === "database-ready" ? `http://127.0.0.1:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}/_api/version` : request.action === "starter-ready" ? `http://${starter.address}:${COMMUNITY_REHEARSAL_STARTER_PORT}/version` : `http://127.0.0.1:${COMMUNITY_REHEARSAL_API_PORT}/health`;
866
873
  const response2 = await fetch(url, { signal: AbortSignal.timeout(2000) }).catch(() => {
867
874
  return;
868
875
  });
@@ -886,7 +893,10 @@ export {
886
893
  parseCommunityRehearsalHostRequest,
887
894
  ensureCommunityRehearsalArango,
888
895
  COMMUNITY_REHEARSAL_VERSION,
896
+ COMMUNITY_REHEARSAL_STARTER_PORT,
889
897
  COMMUNITY_REHEARSAL_ROOT,
898
+ COMMUNITY_REHEARSAL_COORDINATOR_PORT,
899
+ COMMUNITY_REHEARSAL_API_PORT,
890
900
  COMMUNITY_DATABASE_ROOT,
891
901
  COMMUNITY_CREDENTIAL_ROOT,
892
902
  COMMUNITY_CREDENTIAL_PARENT
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -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 SoftwareRequirement } from './software';
3
+ import { type ManagedSoftwareEvidence, 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,7 +74,9 @@ 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. */
77
+ /** Exact distinct catalogue entries successfully managed on this compute. */
78
+ managedSoftware: readonly ManagedSoftwareEvidence[];
79
+ /** Derived compatibility count; managedSoftware remains authoritative. */
78
80
  paidManagedSoftwareCount: number;
79
81
  release: string;
80
82
  ok: boolean;
package/dist/fz-agent.js CHANGED
@@ -5075,7 +5075,11 @@ var softwareBillingClass = (requirement) => {
5075
5075
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
5076
5076
  return entry.billingClass;
5077
5077
  };
5078
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
5078
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
5079
+ const billingClass = softwareBillingClass(requirement);
5080
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
5081
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
5082
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
5079
5083
  var UBUNTU_2604_X64 = [
5080
5084
  { requirement: { id: "bun", version: "1.3.14" } },
5081
5085
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -8307,7 +8311,7 @@ function createDeploymentManager(options) {
8307
8311
  const planPath = join2(release, DEPLOY_PLAN_FILE);
8308
8312
  if (existsSync4(planPath)) {
8309
8313
  const plan = parseDeploymentPlan(readDefinition(planPath));
8310
- const paidManagedSoftware = new Set;
8314
+ const managedSoftware2 = new Map;
8311
8315
  for (const workflow of Object.values(plan.spec.workflows))
8312
8316
  for (const stage2 of Object.values(workflow.stages)) {
8313
8317
  if (stage2.strategy.mode === "rolling" || stage2.strategy.mode === "canary" || Object.values(stage2.steps).some((step2) => step2.scope.kind === "target-batches")) {
@@ -8468,10 +8472,8 @@ function createDeploymentManager(options) {
8468
8472
  return { id: id2, version: requirement2.version };
8469
8473
  });
8470
8474
  await options.ensureSoftware(requirements);
8471
- for (const requirement2 of requirements) {
8472
- if (countPaidManagedSoftware([requirement2]) === 1) {
8473
- paidManagedSoftware.add(`${requirement2.id}@${requirement2.version}`);
8474
- }
8475
+ for (const evidence of managedSoftwareEvidence(requirements)) {
8476
+ managedSoftware2.set(`${evidence.id}@${evidence.version}`, evidence);
8475
8477
  }
8476
8478
  return { changed: true };
8477
8479
  },
@@ -8707,7 +8709,8 @@ function createDeploymentManager(options) {
8707
8709
  phases: [phase],
8708
8710
  execution: deploymentExecution([phase]),
8709
8711
  resolvedTargets,
8710
- paidManagedSoftwareCount: paidManagedSoftware.size,
8712
+ managedSoftware: [...managedSoftware2.values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version)),
8713
+ paidManagedSoftwareCount: [...managedSoftware2.values()].filter((item) => item.billingClass === "paid-managed").length,
8711
8714
  ...capacity2 ? { capacity: capacity2 } : {}
8712
8715
  };
8713
8716
  }
@@ -8816,6 +8819,7 @@ function createDeploymentManager(options) {
8816
8819
  }
8817
8820
  };
8818
8821
  }
8822
+ const managedSoftware = managedSoftwareEvidence(selectedProfile.software);
8819
8823
  return {
8820
8824
  key: options.key,
8821
8825
  repository: options.repository,
@@ -8824,7 +8828,8 @@ function createDeploymentManager(options) {
8824
8828
  definitionDigest,
8825
8829
  definitionVersion: 2,
8826
8830
  profile: options.profile,
8827
- paidManagedSoftwareCount: countPaidManagedSoftware(selectedProfile.software),
8831
+ managedSoftware,
8832
+ paidManagedSoftwareCount: managedSoftware.filter((item) => item.billingClass === "paid-managed").length,
8828
8833
  release,
8829
8834
  ok: true,
8830
8835
  phases,
@@ -9153,6 +9158,7 @@ async function pullDeploymentOnce(options) {
9153
9158
  definitionDigest: result.definitionDigest,
9154
9159
  definitionVersion: result.definitionVersion,
9155
9160
  profile: result.profile,
9161
+ managedSoftware: result.managedSoftware,
9156
9162
  paidManagedSoftwareCount: result.paidManagedSoftwareCount,
9157
9163
  execution: result.execution,
9158
9164
  ...result.resolvedTargets ? { resolvedTargets: result.resolvedTargets.map((target) => ({
@@ -9634,7 +9640,7 @@ async function writeAndCloseProcessInput(input, value) {
9634
9640
  }
9635
9641
 
9636
9642
  // src/version.ts
9637
- var VERSION2 = "0.1.120";
9643
+ var VERSION2 = "0.1.122";
9638
9644
 
9639
9645
  // src/ssh-bootstrap.ts
9640
9646
  class SshBootstrapError extends Error {
@@ -17114,6 +17120,9 @@ var COMMUNITY_REHEARSAL_ROOT = "/opt/forgezero-rehearsals/community-cluster-api"
17114
17120
  var COMMUNITY_DATABASE_ROOT = "/var/lib/forgezero-rehearsal-cluster";
17115
17121
  var COMMUNITY_CREDENTIAL_PARENT = "/etc/forgezero-rehearsal";
17116
17122
  var COMMUNITY_CREDENTIAL_ROOT = "/etc/forgezero-rehearsal/creds";
17123
+ var COMMUNITY_REHEARSAL_STARTER_PORT = 18528;
17124
+ var COMMUNITY_REHEARSAL_COORDINATOR_PORT = 18529;
17125
+ var COMMUNITY_REHEARSAL_API_PORT = 18787;
17117
17126
  var RELEASE = /^[a-f0-9]{64}$/;
17118
17127
  var SAFE_NAME2 = /^[a-z][a-z0-9-]{0,62}$/;
17119
17128
  async function ensureCommunityRehearsalArango(execute3 = executeSoftwareOperation) {
@@ -17193,7 +17202,7 @@ function parseCommunityRehearsalHostRequest(value) {
17193
17202
  }
17194
17203
  var databaseUnit = (node, topology) => {
17195
17204
  const starter = topology.find((entry) => entry.starter);
17196
- const join12 = node.starter ? "" : ` --starter.join=${starter.address}`;
17205
+ const join12 = node.starter ? "" : ` --starter.join=${starter.address}:${COMMUNITY_REHEARSAL_STARTER_PORT}`;
17197
17206
  const role = node.agency ? "" : " --cluster.start-agent=false --cluster.start-coordinator=true --cluster.start-dbserver=true";
17198
17207
  return `[Unit]
17199
17208
  Description=ForgeZero isolated Community ${COMMUNITY_REHEARSAL_VERSION} rehearsal cluster
@@ -17205,7 +17214,7 @@ Type=simple
17205
17214
  User=arangodb
17206
17215
  Group=arangodb
17207
17216
  LoadCredentialEncrypted=arangodb-jwt:${COMMUNITY_CREDENTIAL_ROOT}/arangodb-jwt.cred
17208
- ExecStart=/usr/bin/arangodb --starter.mode=cluster --starter.address=${node.address} --starter.host=${node.address} --starter.data-dir=${COMMUNITY_DATABASE_ROOT} --starter.disable-ipv6 --auth.jwt-secret=%d/arangodb-jwt${join12}${role}
17217
+ ExecStart=/usr/bin/arangodb --starter.mode=cluster --starter.address=${node.address} --starter.host=${node.address} --starter.port=${COMMUNITY_REHEARSAL_STARTER_PORT} --starter.data-dir=${COMMUNITY_DATABASE_ROOT} --starter.disable-ipv6 --auth.jwt-secret=%d/arangodb-jwt${join12}${role}
17209
17218
  Restart=always
17210
17219
  RestartSec=5
17211
17220
  LimitNOFILE=100000
@@ -17229,8 +17238,8 @@ WantedBy=multi-user.target
17229
17238
  `;
17230
17239
  };
17231
17240
  var apiUnit = (node, topology) => {
17232
- const urls = topology.map(({ address }) => `http://${address}:8529`).join(",");
17233
- const readPreferred = topology.filter(({ readPreferred: readPreferred2 }) => readPreferred2).map(({ address }) => `http://${address}:8529`).join(",");
17241
+ const urls = topology.map(({ address }) => `http://${address}:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}`).join(",");
17242
+ const readPreferred = topology.filter(({ readPreferred: readPreferred2 }) => readPreferred2).map(({ address }) => `http://${address}:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}`).join(",");
17234
17243
  return `[Unit]
17235
17244
  Description=ForgeZero typed Community cluster rehearsal API
17236
17245
  After=forgezero-rehearsal-db.service network-online.target
@@ -17243,9 +17252,9 @@ Group=forgezero
17243
17252
  WorkingDirectory=${COMMUNITY_REHEARSAL_ROOT}/current
17244
17253
  LoadCredentialEncrypted=arangodb-jwt:${COMMUNITY_CREDENTIAL_ROOT}/arangodb-jwt.cred
17245
17254
  Environment=HOST=127.0.0.1
17246
- Environment=PORT=8787
17255
+ Environment=PORT=${COMMUNITY_REHEARSAL_API_PORT}
17247
17256
  Environment=NODE_NAME=${node.name}
17248
- Environment=ARANGO_URL=http://127.0.0.1:8529
17257
+ Environment=ARANGO_URL=http://127.0.0.1:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}
17249
17258
  Environment=ARANGO_URLS=${urls}
17250
17259
  Environment=ARANGO_READ_PREFERRED_URLS=${readPreferred}
17251
17260
  Environment=ARANGO_READ_PREFERRED_FALLBACK=error
@@ -17346,7 +17355,7 @@ async function applyOperations(operations) {
17346
17355
  }
17347
17356
  }
17348
17357
  var responseFor = async (request) => {
17349
- const base = "http://127.0.0.1:8787";
17358
+ const base = `http://127.0.0.1:${COMMUNITY_REHEARSAL_API_PORT}`;
17350
17359
  if (request.operation === "health")
17351
17360
  return fetch(`${base}/health`, { signal: AbortSignal.timeout(15000) });
17352
17361
  if (request.operation === "init")
@@ -17408,7 +17417,7 @@ async function runCommunityRehearsalHost(request) {
17408
17417
  }
17409
17418
  if (request.action === "database-ready" || request.action === "starter-ready" || request.action === "api-ready") {
17410
17419
  const starter = topology.find((entry) => entry.starter);
17411
- const url = request.action === "database-ready" ? "http://127.0.0.1:8529/_api/version" : request.action === "starter-ready" ? `http://${starter.address}:8528/version` : "http://127.0.0.1:8787/health";
17420
+ const url = request.action === "database-ready" ? `http://127.0.0.1:${COMMUNITY_REHEARSAL_COORDINATOR_PORT}/_api/version` : request.action === "starter-ready" ? `http://${starter.address}:${COMMUNITY_REHEARSAL_STARTER_PORT}/version` : `http://127.0.0.1:${COMMUNITY_REHEARSAL_API_PORT}/health`;
17412
17421
  const response2 = await fetch(url, { signal: AbortSignal.timeout(2000) }).catch(() => {
17413
17422
  return;
17414
17423
  });
package/dist/fz.js CHANGED
@@ -4844,7 +4844,7 @@ var UPDATE_RETRY_BASE_MS = 5 * 60000;
4844
4844
  var UPDATE_RETRY_MAX_MS = 24 * 60 * 60000;
4845
4845
 
4846
4846
  // src/version.ts
4847
- var VERSION2 = "0.1.120";
4847
+ var VERSION2 = "0.1.122";
4848
4848
 
4849
4849
  // src/software.ts
4850
4850
  var PINNED_BUN_VERSION = "1.3.14";
@@ -18488,6 +18488,14 @@ function unsupportedRepositoryCliOption(argv2) {
18488
18488
  }
18489
18489
  return;
18490
18490
  }
18491
+ function forwardedRepositoryOperationArguments(options, args) {
18492
+ return [
18493
+ ...options.apply ? ["--apply"] : [],
18494
+ ...options.json ? ["--json"] : [],
18495
+ ...options.disposableFleetConfirmation ? [`--confirm-disposable-fleet=${options.disposableFleetConfirmation}`] : [],
18496
+ ...args
18497
+ ];
18498
+ }
18491
18499
  function manifestName(root) {
18492
18500
  const manifestPath = join12(root, "package.json");
18493
18501
  if (!existsSync12(manifestPath)) {
@@ -20436,11 +20444,7 @@ function repositoryOperationArguments(options, args) {
20436
20444
  throw new Error("--root requires a repository path.");
20437
20445
  if (unsupported)
20438
20446
  throw new Error(`${unsupported} is not valid for repository maintenance commands.`);
20439
- return [
20440
- ...options.apply ? ["--apply"] : [],
20441
- ...options.json ? ["--json"] : [],
20442
- ...args
20443
- ];
20447
+ return forwardedRepositoryOperationArguments(options, args);
20444
20448
  }
20445
20449
  async function cmdDev(options, args) {
20446
20450
  if ((args[0] ?? "") !== "reset" || args.length !== 1) {
@@ -366,7 +366,7 @@ function systemdAgentEgressDirectives(loopbackTcpPorts = []) {
366
366
  }
367
367
 
368
368
  // src/version.ts
369
- var VERSION = "0.1.120";
369
+ var VERSION = "0.1.122";
370
370
 
371
371
  // src/otel-collector.ts
372
372
  var FORGEZERO_OTEL_COLLECTOR_UNIT = "forgezero-otel-collector.service";
@@ -219,7 +219,11 @@ var softwareBillingClass = (requirement) => {
219
219
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
220
220
  return entry.billingClass;
221
221
  };
222
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
222
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
223
+ const billingClass = softwareBillingClass(requirement);
224
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
225
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
226
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
223
227
  var UBUNTU_2604_X64 = [
224
228
  { requirement: { id: "bun", version: "1.3.14" } },
225
229
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -219,7 +219,11 @@ var softwareBillingClass = (requirement) => {
219
219
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
220
220
  return entry.billingClass;
221
221
  };
222
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
222
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
223
+ const billingClass = softwareBillingClass(requirement);
224
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
225
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
226
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
223
227
  var UBUNTU_2604_X64 = [
224
228
  { requirement: { id: "bun", version: "1.3.14" } },
225
229
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -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.120";
1463
+ var VERSION = "0.1.122";
1464
1464
 
1465
1465
  // src/software.ts
1466
1466
  var PINNED_BUN_VERSION = "1.3.14";
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -922,7 +922,11 @@ var softwareBillingClass = (requirement) => {
922
922
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
923
923
  return entry.billingClass;
924
924
  };
925
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
925
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
926
+ const billingClass = softwareBillingClass(requirement);
927
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
928
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
929
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
926
930
  var UBUNTU_2604_X64 = [
927
931
  { requirement: { id: "bun", version: "1.3.14" } },
928
932
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -3016,7 +3020,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3016
3020
  }
3017
3021
 
3018
3022
  // src/version.ts
3019
- var VERSION3 = "0.1.120";
3023
+ var VERSION3 = "0.1.122";
3020
3024
 
3021
3025
  // src/egress-policy.ts
3022
3026
  import { realpathSync as realpathSync3 } from "node:fs";
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
package/dist/provision.js CHANGED
@@ -922,7 +922,11 @@ var softwareBillingClass = (requirement) => {
922
922
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
923
923
  return entry.billingClass;
924
924
  };
925
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
925
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
926
+ const billingClass = softwareBillingClass(requirement);
927
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
928
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
929
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
926
930
  var UBUNTU_2604_X64 = [
927
931
  { requirement: { id: "bun", version: "1.3.14" } },
928
932
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -3016,7 +3020,7 @@ function requestSoftware(requirements, socketPath = DEFAULT_SOFTWARE_HELPER_SOCK
3016
3020
  }
3017
3021
 
3018
3022
  // src/version.ts
3019
- var VERSION3 = "0.1.120";
3023
+ var VERSION3 = "0.1.122";
3020
3024
 
3021
3025
  // src/egress-policy.ts
3022
3026
  import { realpathSync as realpathSync3 } from "node:fs";
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -15,6 +15,8 @@ export interface SoftwareCatalogEntry extends SoftwareRequirement {
15
15
  /** What promotes this coordinate beyond an unreviewed candidate. */
16
16
  evidence: 'reviewed-strategy-and-tests';
17
17
  }
18
+ /** Browser-safe evidence for one distinct managed software coordinate. */
19
+ export type ManagedSoftwareEvidence = Pick<SoftwareCatalogEntry, 'id' | 'version' | 'billingClass'>;
18
20
  export interface OsCatalogEntry {
19
21
  id: 'ubuntu';
20
22
  version: '24.04' | '26.04';
@@ -57,6 +59,8 @@ export declare const KATA_CONTAINERS_VERSION = "4.0.0";
57
59
  export declare const OS_CATALOG: readonly OsCatalogEntry[];
58
60
  export declare const SOFTWARE_CATALOG: readonly SoftwareCatalogEntry[];
59
61
  export declare const softwareBillingClass: (requirement: SoftwareRequirement) => SoftwareCatalogEntry["billingClass"];
62
+ /** Canonical inventory reported after a successful deployment. */
63
+ export declare const managedSoftwareEvidence: (requirements: readonly SoftwareRequirement[]) => ManagedSoftwareEvidence[];
60
64
  /** Counts distinct paid software instances managed on one compute. */
61
65
  export declare const countPaidManagedSoftware: (requirements: readonly SoftwareRequirement[]) => number;
62
66
  export declare const softwareSpawnFailure: (cause: unknown, argv: readonly string[]) => SoftwareCommandResult | undefined;
package/dist/software.js CHANGED
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
@@ -556,6 +560,7 @@ export {
556
560
  softwareBillingClass,
557
561
  runSoftwareCommand,
558
562
  observeSoftwareHost,
563
+ managedSoftwareEvidence,
559
564
  executeSoftwareOperation,
560
565
  ensureSoftwareRequirements,
561
566
  countPaidManagedSoftware,
package/dist/ubuntu.js CHANGED
@@ -79,7 +79,11 @@ var softwareBillingClass = (requirement) => {
79
79
  throw new Error(`unsupported software billing coordinate: ${requirement.id}@${requirement.version}`);
80
80
  return entry.billingClass;
81
81
  };
82
- var countPaidManagedSoftware = (requirements) => new Set(requirements.filter((requirement) => softwareBillingClass(requirement) === "paid-managed").map((requirement) => `${requirement.id}@${requirement.version}`)).size;
82
+ var managedSoftwareEvidence = (requirements) => [...new Map(requirements.map((requirement) => {
83
+ const billingClass = softwareBillingClass(requirement);
84
+ return [`${requirement.id}@${requirement.version}`, { ...requirement, billingClass }];
85
+ })).values()].sort((left, right) => left.id.localeCompare(right.id) || left.version.localeCompare(right.version));
86
+ var countPaidManagedSoftware = (requirements) => managedSoftwareEvidence(requirements).filter((requirement) => requirement.billingClass === "paid-managed").length;
83
87
  var UBUNTU_2604_X64 = [
84
88
  { requirement: { id: "bun", version: "1.3.14" } },
85
89
  { requirement: { id: "docker", version: "ubuntu-26.04" } },
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.120";
2
+ export declare const VERSION = "0.1.122";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgezero/agent",
3
- "version": "0.1.120",
3
+ "version": "0.1.122",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "check": "tsc --noEmit",