@f-o-h/cli 0.1.77 → 0.1.79

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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/foh.js +30 -7
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -4,7 +4,7 @@ AI-operator provisioning CLI for Front Of House.
4
4
 
5
5
  Public mirror: https://github.com/iiko38/front-of-house-cli
6
6
 
7
- Current published baseline: `@f-o-h/cli@0.1.77`
7
+ Current published baseline: `@f-o-h/cli@0.1.79`
8
8
 
9
9
  This mirror is a generated release artifact. The private product monorepo is not
10
10
  published here, and no open-source license is granted unless stated separately.
package/dist/foh.js CHANGED
@@ -32987,7 +32987,7 @@ var StdioServerTransport = class {
32987
32987
  };
32988
32988
 
32989
32989
  // src/lib/cli-version.ts
32990
- var CLI_VERSION = "0.1.77";
32990
+ var CLI_VERSION = "0.1.79";
32991
32991
 
32992
32992
  // src/commands/mcp-serve.ts
32993
32993
  var DEFAULT_TIMEOUT_MS = 12e4;
@@ -36829,6 +36829,13 @@ function registerOpsRecommendationCommands(ops) {
36829
36829
  }
36830
36830
 
36831
36831
  // src/commands/ops-reporting.ts
36832
+ function appendSetupPreviewContext(params, opts) {
36833
+ if (opts.agencyName) params.set("agency_name", String(opts.agencyName));
36834
+ if (opts.sourceUrl) params.set("source_url", String(opts.sourceUrl));
36835
+ if (opts.branchLocation) params.set("branch_location", String(opts.branchLocation));
36836
+ if (opts.tools) params.set("tools", String(opts.tools));
36837
+ if (opts.targetMode) params.set("target_mode", String(opts.targetMode));
36838
+ }
36832
36839
  function registerOpsReportingCommands(reporting) {
36833
36840
  reporting.command("kb-usage").description("Show KB usage aggregate report").requiredOption("--agent <id>", "Agent ID").option("--days <n>", "Lookback window in days", "7").option("--org <id>", "Org ID (default: stored org from foh org use)").option("--api-url <url>", "API base URL override").option("--json", "Output as JSON").action(async (opts) => withCommandErrorHandling(async () => {
36834
36841
  const params = new URLSearchParams({
@@ -36875,18 +36882,20 @@ function registerOpsReportingCommands(reporting) {
36875
36882
  });
36876
36883
  format(data, { json: opts.json ?? false });
36877
36884
  }));
36878
- reporting.command("launch-packet").description("Show latest customer launch packet and grouped go-live blockers").option("--environment <value>", "Environment filter").option("--org <id>", "Org ID (default: stored org from foh org use)").option("--api-url <url>", "API base URL override").option("--json", "Output as JSON").action(async (opts) => withCommandErrorHandling(async () => {
36885
+ reporting.command("launch-packet").description("Show latest customer launch packet and grouped go-live blockers").option("--environment <value>", "Environment filter").option("--agency-name <name>", "Agency name for setup-preview fallback when no release packet exists").option("--source-url <url>", "Official source URL for setup-preview fallback").option("--branch-location <value>", "Branch/location for setup-preview fallback").option("--tools <csv>", "Requested tool surface for setup-preview fallback").option("--target-mode <mode>", "Target exposure mode for setup-preview fallback").option("--org <id>", "Org ID (default: stored org from foh org use)").option("--api-url <url>", "API base URL override").option("--json", "Output as JSON").action(async (opts) => withCommandErrorHandling(async () => {
36879
36886
  const params = new URLSearchParams();
36880
36887
  if (opts.environment) params.set("environment", String(opts.environment));
36888
+ appendSetupPreviewContext(params, opts);
36881
36889
  const data = await apiFetch(withQuery("/v1/console/release-launch-packet", params), {
36882
36890
  orgId: opts.org,
36883
36891
  apiUrlOverride: opts.apiUrl
36884
36892
  });
36885
36893
  format(data, { json: opts.json ?? false });
36886
36894
  }));
36887
- reporting.command("launch-packet-skeletons").description("Generate customer launch evidence skeletons from latest launch packet blockers").option("--environment <value>", "Environment filter").option("--org <id>", "Org ID (default: stored org from foh org use)").option("--api-url <url>", "API base URL override").option("--json", "Output as JSON").action(async (opts) => withCommandErrorHandling(async () => {
36895
+ reporting.command("launch-packet-skeletons").description("Generate customer launch evidence skeletons from latest launch packet blockers").option("--environment <value>", "Environment filter").option("--agency-name <name>", "Agency name for setup-preview fallback when no release packet exists").option("--source-url <url>", "Official source URL for setup-preview fallback").option("--branch-location <value>", "Branch/location for setup-preview fallback").option("--tools <csv>", "Requested tool surface for setup-preview fallback").option("--target-mode <mode>", "Target exposure mode for setup-preview fallback").option("--org <id>", "Org ID (default: stored org from foh org use)").option("--api-url <url>", "API base URL override").option("--json", "Output as JSON").action(async (opts) => withCommandErrorHandling(async () => {
36888
36896
  const params = new URLSearchParams();
36889
36897
  if (opts.environment) params.set("environment", String(opts.environment));
36898
+ appendSetupPreviewContext(params, opts);
36890
36899
  const data = await apiFetch(withQuery("/v1/console/release-launch-packet/evidence-skeletons", params), {
36891
36900
  orgId: opts.org,
36892
36901
  apiUrlOverride: opts.apiUrl
@@ -37047,7 +37056,7 @@ function registerDiag(program3) {
37047
37056
  let healthStatus = null;
37048
37057
  if (apiUrl) {
37049
37058
  try {
37050
- const healthUrl = `${String(apiUrl).replace(/\/$/, "")}/v1/health`;
37059
+ const healthUrl = `${String(apiUrl).replace(/\/$/, "")}/health`;
37051
37060
  const healthRes = await fetch(healthUrl);
37052
37061
  healthStatus = healthRes.status;
37053
37062
  checks.push({
@@ -39831,20 +39840,24 @@ function readExternalAgentMetadata(runDir) {
39831
39840
  collectDocsFrom(parsed.docs_pages_observed, docs);
39832
39841
  collectDocsFrom(parsed.docs_used, docs);
39833
39842
  collectDocsFrom(parsed.public_docs_used, docs);
39843
+ const blockerReasonCodes = Array.isArray(parsed.blocker_reason_codes) ? parsed.blocker_reason_codes.map((code) => String(code || "").trim()).filter(Boolean) : [];
39834
39844
  return {
39835
39845
  path: filename,
39836
- docs_pages_used: Array.from(docs).sort()
39846
+ docs_pages_used: Array.from(docs).sort(),
39847
+ blocker_reason_codes: Array.from(new Set(blockerReasonCodes)).sort()
39837
39848
  };
39838
39849
  } catch {
39839
39850
  return {
39840
39851
  path: filename,
39841
- docs_pages_used: []
39852
+ docs_pages_used: [],
39853
+ blocker_reason_codes: []
39842
39854
  };
39843
39855
  }
39844
39856
  }
39845
39857
  return {
39846
39858
  path: null,
39847
- docs_pages_used: []
39859
+ docs_pages_used: [],
39860
+ blocker_reason_codes: []
39848
39861
  };
39849
39862
  }
39850
39863
 
@@ -40476,6 +40489,15 @@ function classifyExternalAgentRun(input) {
40476
40489
  if (hasCommandReason(/agent_limit_reached/i)) {
40477
40490
  return { status: "hold", reasonCode: "eval_org_agent_limit_reached" };
40478
40491
  }
40492
+ const agentMetadata = readExternalAgentMetadata(input.run.run_dir);
40493
+ const metadataBlockerCodes = agentMetadata.blocker_reason_codes;
40494
+ const hasMetadataBlocker = (pattern) => metadataBlockerCodes.some((reason) => pattern.test(reason));
40495
+ if (hasMetadataBlocker(/^customer_owned_requirement_unverified:/i)) {
40496
+ return { status: "hold", reasonCode: "customer_owned_requirements_unverified_expected_hold" };
40497
+ }
40498
+ if (hasMetadataBlocker(/^api_health:/i) && metadataBlockerCodes.some((reason) => /^customer_owned_requirement_unverified:/i.test(reason))) {
40499
+ return { status: "hold", reasonCode: "customer_owned_requirements_unverified_expected_hold" };
40500
+ }
40479
40501
  const lastMessage = readIfExists(input.run.outputs.last_message);
40480
40502
  const stderr = readIfExists(input.run.outputs.stderr);
40481
40503
  const combined = `${lastMessage}
@@ -41108,6 +41130,7 @@ function resolvePrivateRepoRoot(input) {
41108
41130
  }
41109
41131
  function promptVersionFromPath(promptPath) {
41110
41132
  const raw = (0, import_fs19.readFileSync)(promptPath, "utf8");
41133
+ if (raw.includes("arbitrary-agency setup context") || raw.includes("Mission: prove whether an arbitrary estate agency") || raw.includes("ops reporting agency-setup-preview")) return "arbitrary-agency-setup-release.v1";
41111
41134
  if (raw.includes("Do not assume access to the private source repository")) return "blank-setup.v1";
41112
41135
  return "unknown";
41113
41136
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@f-o-h/cli",
3
- "version": "0.1.77",
3
+ "version": "0.1.79",
4
4
  "description": "FOH CLI - AI-operator provisioning tool for Front Of House",
5
5
  "license": "UNLICENSED",
6
6
  "bin": {