@rosthq/cli 0.7.83 → 0.7.85

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.
@@ -1,2 +1,2 @@
1
- export declare function readCliVersion(): Promise<string | null>;
1
+ export declare function readCliVersion(embeddedVersion?: string | undefined): Promise<string | null>;
2
2
  //# sourceMappingURL=cli-version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-version.d.ts","sourceRoot":"","sources":["../src/cli-version.ts"],"names":[],"mappings":"AAgBA,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQ7D"}
1
+ {"version":3,"file":"cli-version.d.ts","sourceRoot":"","sources":["../src/cli-version.ts"],"names":[],"mappings":"AA0BA,wBAAsB,cAAc,CAClC,eAAe,GAAE,MAAM,GAAG,SAAuF,GAChH,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAWxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAwBrE,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAK1C,WAAW,CAAC,EAAE,OAAO,CAAC;IAOtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD,CAAC;AAcF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CA0RnG;AA0hBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAoB,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAyBrE,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAK1C,WAAW,CAAC,EAAE,OAAO,CAAC;IAOtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD,CAAC;AAcF,KAAK,WAAW,GAAG;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,KAAK,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,mBAAmB,CAAC;IACzC,cAAc,CAAC,EAAE,OAAO,yBAAyB,CAAC;CACnD,CAAC;AAEF,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkSnG;AA0hBD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
package/dist/index.js CHANGED
@@ -37796,10 +37796,30 @@ function windowsClearScript(target) {
37796
37796
  ].join("\n");
37797
37797
  }
37798
37798
 
37799
+ // src/cli-version.ts
37800
+ import { readFile as readFile2 } from "node:fs/promises";
37801
+ import { dirname, resolve } from "node:path";
37802
+ import { fileURLToPath } from "node:url";
37803
+ var packageMetadataSchema = external_exports.object({
37804
+ version: external_exports.string()
37805
+ });
37806
+ async function readCliVersion(embeddedVersion = typeof __ROST_CLI_VERSION__ === "string" ? __ROST_CLI_VERSION__ : void 0) {
37807
+ if (embeddedVersion !== void 0) {
37808
+ return embeddedVersion;
37809
+ }
37810
+ const packageJsonPath = resolve(dirname(fileURLToPath(import.meta.url)), "../package.json");
37811
+ try {
37812
+ const metadata = packageMetadataSchema.parse(JSON.parse(await readFile2(packageJsonPath, "utf8")));
37813
+ return metadata.version;
37814
+ } catch {
37815
+ return null;
37816
+ }
37817
+ }
37818
+
37799
37819
  // ../../packages/prompts/src/index.ts
37800
37820
  import { readFileSync } from "node:fs";
37801
- import { dirname, join } from "node:path";
37802
- import { fileURLToPath } from "node:url";
37821
+ import { dirname as dirname2, join } from "node:path";
37822
+ import { fileURLToPath as fileURLToPath2 } from "node:url";
37803
37823
 
37804
37824
  // ../../packages/protocol/src/cron.ts
37805
37825
  var uintPattern = /^\d+$/;
@@ -44876,6 +44896,30 @@ var softwareTaskSummarySchema = external_exports.object({
44876
44896
  completed_at: external_exports.string().nullable(),
44877
44897
  created_at: external_exports.string()
44878
44898
  });
44899
+ var softwarePlanArtifactTaskSummarySchema = external_exports.object({
44900
+ task_key: external_exports.string(),
44901
+ title: external_exports.string(),
44902
+ depends_on: external_exports.array(external_exports.string()).default([]),
44903
+ parallelizable: external_exports.boolean().default(false),
44904
+ est_turns: external_exports.number().int().nullable().default(null),
44905
+ files_likely: external_exports.array(external_exports.string()).default([]),
44906
+ verification: external_exports.array(external_exports.string()).default([])
44907
+ });
44908
+ var softwarePlanArtifactChangesetSummarySchema = external_exports.object({
44909
+ ordinal: external_exports.number().int(),
44910
+ title: external_exports.string(),
44911
+ split_criterion: external_exports.string(),
44912
+ task_keys: external_exports.array(external_exports.string()).default([])
44913
+ });
44914
+ var softwarePlanArtifactSummarySchema = external_exports.object({
44915
+ scope: external_exports.string(),
44916
+ plan_steps: external_exports.array(external_exports.string()).default([]),
44917
+ files_or_systems: external_exports.array(external_exports.string()).default([]),
44918
+ verification: external_exports.array(external_exports.string()).default([]),
44919
+ risks: external_exports.array(external_exports.string()).default([]),
44920
+ tasks: external_exports.array(softwarePlanArtifactTaskSummarySchema).default([]),
44921
+ changesets: external_exports.array(softwarePlanArtifactChangesetSummarySchema).default([])
44922
+ });
44879
44923
  var softwarePlanVersionSummarySchema = external_exports.object({
44880
44924
  id: uuid11,
44881
44925
  build_request_id: uuid11,
@@ -44888,6 +44932,7 @@ var softwarePlanVersionSummarySchema = external_exports.object({
44888
44932
  question: external_exports.string(),
44889
44933
  answer: external_exports.string()
44890
44934
  })).default([]),
44935
+ planning_artifact: softwarePlanArtifactSummarySchema.nullable(),
44891
44936
  created_by_seat_id: uuid11.nullable(),
44892
44937
  created_at: external_exports.string()
44893
44938
  });
@@ -45682,7 +45727,12 @@ var softwareGithubAutomationPolicyInputSchema = external_exports.object({
45682
45727
  // are identical to the union (`SoftwareGithubAction | SoftwareAutomationMode`).
45683
45728
  requires_human_for: external_exports.array(external_exports.enum([...softwareGithubActionSchema.options, ...softwareAutomationModeSchema.options])).max(20).refine((values) => values.includes("deploy_production"), {
45684
45729
  message: "production deploy must remain human-gated"
45685
- })
45730
+ }),
45731
+ // DER-1266: optional per-policy inferred-risk tolerance. When set and the server-inferred
45732
+ // risk EXCEEDS this level, rule 5 (ADR-0018 §5) downgrades the effective automation mode
45733
+ // to plan_only. Omitted/null = the fixed riskModeCeilingFor table (no change for existing
45734
+ // policies). Conservative-by-default (invariant #10): this can only tighten, never loosen.
45735
+ max_risk: softwareRiskLevelSchema.nullable().optional()
45686
45736
  }).strict();
45687
45737
  var softwareGithubConnectedRepositoryInputSchema = external_exports.object({
45688
45738
  repository_id: external_exports.number().int().positive(),
@@ -45754,7 +45804,8 @@ var softwareGithubInstallationListOutputSchema = external_exports.object({
45754
45804
  var softwareGithubAutomationPolicyUpsertOutputSchema = external_exports.object({
45755
45805
  policy_id: uuid11,
45756
45806
  software_project_id: uuid11,
45757
- automation_mode_ceiling: softwareAutomationModeSchema
45807
+ automation_mode_ceiling: softwareAutomationModeSchema,
45808
+ max_risk: softwareRiskLevelSchema.nullable()
45758
45809
  });
45759
45810
  var softwareGithubInstallationTokenCreateInputSchema = external_exports.object({
45760
45811
  software_project_id: uuid11,
@@ -46717,7 +46768,7 @@ var eventEnvelopeReaderSchema = external_exports.discriminatedUnion("type", [
46717
46768
  ]);
46718
46769
 
46719
46770
  // ../../packages/prompts/src/index.ts
46720
- var promptRoot = join(dirname(fileURLToPath(import.meta.url)), "..", "prompts");
46771
+ var promptRoot = join(dirname2(fileURLToPath2(import.meta.url)), "..", "prompts");
46721
46772
  function loadPromptBody(filename) {
46722
46773
  const raw = readFileSync(join(promptRoot, filename), "utf8");
46723
46774
  return raw.replace(/^---\n[\s\S]*?\n---\n?/, "").trim();
@@ -47078,7 +47129,7 @@ Treat AICOS as a coordinator over the operating system. It can become more usefu
47078
47129
  order: 20,
47079
47130
  title: "Responsibility Graph playbook",
47080
47131
  summary: "How to build a functions-first graph with seats, owners, Stewards, vacancies, and clean authority.",
47081
- version: "2026-07-14.1",
47132
+ version: "2026-07-14.2",
47082
47133
  public: true,
47083
47134
  audiences: ["human", "cli", "mcp", "in_app_agent"],
47084
47135
  stages: ["graph_design", "staffing"],
@@ -47126,7 +47177,7 @@ Seats that do not reach the single root through the resolved parent chain are li
47126
47177
 
47127
47178
  ## Forge Developer Team seats are pinned
47128
47179
 
47129
- Seats under \`forge.developer_team\` are resolved by Forge build dispatch using their exact path, so they cannot be reparented or merged from the graph, CLI, or MCP \u2014 moving a seat (or an ancestor whose subtree holds them) would eject them from dispatch, and no command can restore the path. To change who is accountable for one of these seats, update its steward with \`agent_setup.update\`; the reporting path stays fixed. To stand the team down, use the governed Forge team teardown flow, not a merge or decommission.
47180
+ Seats under \`forge.developer_team\` are resolved by Forge build dispatch using their exact path, so they cannot be reparented or merged from the graph, CLI, or MCP \u2014 moving a seat (or an ancestor whose subtree holds them) would eject them from dispatch, and no command can restore the path. To change who is accountable for one of these seats, update its steward with \`agent_setup.update\`; the reporting path stays fixed. To stand the team down, use the governed Forge team teardown flow, not a merge or decommission. The web canvas surfaces this pin visibly: a lock badge on the seat card (Responsibility Chart and Cascade views) and in the seat inspector panel, with a tooltip explaining the seat can't be moved, merged, or reparented \u2014 so the restriction is visible before a user hits the guard, not only as an error after the fact.
47130
47181
 
47131
47182
  ## Add an agent from the graph
47132
47183
 
@@ -47904,7 +47955,7 @@ External connectors are being rolled out provider by provider, conservatively (r
47904
47955
  order: 48,
47905
47956
  title: "CLI and MCP installation guide",
47906
47957
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
47907
- version: "2026-07-15.3",
47958
+ version: "2026-07-15.5",
47908
47959
  public: true,
47909
47960
  audiences: ["human", "cli", "mcp", "in_app_agent"],
47910
47961
  stages: ["company_setup", "staffing"],
@@ -48424,6 +48475,7 @@ Skills wrapper help:
48424
48475
  | \`{{cli}} mcp install --client cursor --scope tenant-admin\` | Mint a tenant-admin MCP token and print Cursor JSON. | Tenant | \`{{cli}} mcp install --client cursor --scope tenant-admin\` |
48425
48476
  | \`{{cli}} mcp install --client <client> --scope seat --seat-id <seat-id>\` | Mint a token limited to one seat (the narrowest scope \u2014 prefer for day-to-day). | Seat | \`{{cli}} mcp install --client codex --scope seat --seat-id <seat-id>\` |
48426
48477
  | \`{{cli}} --help\` | Print top-level CLI help. | Public help | \`{{cli}} --help\` |
48478
+ | \`{{cli}} --version\` / \`{{cli}} -v\` | Print the installed CLI's own version and exit \u2014 no usage text, no auth. | Public help | \`{{cli}} --version\` |
48427
48479
 
48428
48480
  ## MCP tool and resource catalog
48429
48481
 
@@ -48675,7 +48727,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
48675
48727
  | \`rost_list_forge_secret_requests\` | \`software_factory.secret_request.list\` | List missing-secret requests and their approval Task ids/statuses. It returns request metadata only \u2014 no secret values and no vault refs. | Tenant | Call with \`{}\` or \`{"status":"pending"}\`. |
48676
48728
  | \`rost_grant_a_forge_secret\` | \`software_factory.secret.grant\` | A human grants a seat scoped access to a project secret by vault ref (Postgres stores only the pointer, never secret material). Owner-only and human-gated. | Tenant-admin | Call with \`{"software_project_id":"<project-id>","environment":"production","seat_id":"<seat-id>","action":"vercel.env.sync","key_name":"OPENAI_API_KEY","vault_ref":"infisical://prod/OPENAI_API_KEY"}\`. |
48677
48729
  | \`rost_revoke_a_forge_secret_grant\` | \`software_factory.secret.revoke\` | Revoke a Forge secret grant (teardown \u2014 cut a compromised seat's access immediately). Owner-only and human-gated. | Tenant-admin | Call with \`{"grant_id":"<grant-id>"}\`; non-interactive callers receive a confirmation handoff. |
48678
- | \`rost_set_a_forge_github_automation_policy\` | \`software_factory.github.policy.upsert\` | Set the server-side GitHub automation policy: allowed actions, automation-mode ceiling, and operations requiring humans. The allowed-actions and human-gated-actions lists are stored server-side as structured JSON arrays. Owner-only and human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks on its default branch and refuses otherwise. | Tenant-admin | Call with \`{"software_project_id":"<project-id>","automation_mode_ceiling":"pr_only","allowed_actions":["webhook_intake","installation_token"],"requires_human_for":["deploy_production"]}\`. |
48730
+ | \`rost_set_a_forge_github_automation_policy\` | \`software_factory.github.policy.upsert\` | Set the server-side GitHub automation policy: allowed actions, automation-mode ceiling, and operations requiring humans. The allowed-actions and human-gated-actions lists are stored server-side as structured JSON arrays. Owner-only and human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks on its default branch and refuses otherwise. Optional \`max_risk\` (\`low\`\\|\`medium\`\\|\`high\`\\|\`critical\`) tightens the fixed inferred-risk\u2192mode-ceiling table per policy \u2014 an inferred risk strictly above \`max_risk\` is capped to \`plan_only\`; unset keeps the existing fixed-table behavior exactly, and \`critical\` inferred risk always stays \`plan_only\` regardless of \`max_risk\` (invariant #10, tighten-only). | Tenant-admin | Call with \`{"software_project_id":"<project-id>","automation_mode_ceiling":"pr_only","allowed_actions":["webhook_intake","installation_token"],"requires_human_for":["deploy_production"],"max_risk":"medium"}\`. |
48679
48731
  | \`rost_create_a_forge_github_installation_token\` | \`software_factory.github.installation_token.create\` | Mint a short-lived GitHub App installation token for one bound repository after policy evaluation. The token is returned once and never stored. | Tenant | Call with \`{"software_project_id":"<project-id>","repository_id":789,"requested_actions":["read"],"requested_automation_mode":"plan_only"}\`. |
48680
48732
  | \`rost_list_forge_github_installations\` | \`software_factory.github.installation.list\` | List connected GitHub App installations and each repository's bind state (connected or active) with the Forge project it maps to. Read-only. | Tenant | Call with \`{}\`; a \`connected\` repository is verified but not yet bound to a project. |
48681
48733
  | \`rost_list_forge_vercel_links\` | \`software_factory.vercel.project.list\` | List connected Vercel accounts/teams and linked existing Vercel projects. Read-only; no OAuth tokens or vault refs are returned. | Tenant | Call with \`{}\`; tenant admins connect/link from \`/forge/settings/vercel\`. |
@@ -51810,25 +51862,6 @@ function helpText() {
51810
51862
  import { mkdir as mkdir2, readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
51811
51863
  import { homedir as homedir2 } from "node:os";
51812
51864
  import path2 from "node:path";
51813
-
51814
- // src/cli-version.ts
51815
- import { readFile as readFile2 } from "node:fs/promises";
51816
- import { dirname as dirname2, resolve } from "node:path";
51817
- import { fileURLToPath as fileURLToPath2 } from "node:url";
51818
- var packageMetadataSchema = external_exports.object({
51819
- version: external_exports.string()
51820
- });
51821
- async function readCliVersion() {
51822
- const packageJsonPath = resolve(dirname2(fileURLToPath2(import.meta.url)), "../package.json");
51823
- try {
51824
- const metadata = packageMetadataSchema.parse(JSON.parse(await readFile2(packageJsonPath, "utf8")));
51825
- return metadata.version;
51826
- } catch {
51827
- return null;
51828
- }
51829
- }
51830
-
51831
- // src/update-check.ts
51832
51865
  var latestPackageSchema = external_exports.object({
51833
51866
  version: external_exports.string()
51834
51867
  });
@@ -52130,7 +52163,7 @@ var COMMAND_MANIFEST = [
52130
52163
  { "id": "software_factory.github.installation.bind", "namespace": "software_factory", "action": "github.installation.bind", "title": "Bind Forge GitHub repositories to projects", "description": "Bind already-connected GitHub repositories to Forge projects. Owner-only and human-gated; operates on repositories already verified and connected in this tenant, so no GitHub re-authorization is required. Available any time, add or re-map bindings.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }], "hasComplexInput": true, "help": "Bind already-connected GitHub repositories to Forge projects from the Forge GitHub settings flow. Owner-only and human-gated; no GitHub re-authorization required." },
52131
52164
  { "id": "software_factory.github.installation.connect", "namespace": "software_factory", "action": "github.installation.connect", "title": "Connect a Forge GitHub installation", "description": "Record a proven GitHub App installation and its verified repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated; starts from the authenticated Forge GitHub settings flow. Idempotent \u2014 re-connecting reconciles metadata and never unbinds an already-bound repository.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "account_login", "flag": "account-login", "type": "string", "required": true }, { "name": "account_id", "flag": "account-id", "type": "integer", "required": true }, { "name": "account_type", "flag": "account-type", "type": "string", "required": true }], "hasComplexInput": true, "help": "Record a verified GitHub App installation and its repositories as connected (unbound) so they can be bound to Forge projects later. Owner-only and human-gated." },
52132
52165
  { "id": "software_factory.github.installation.list", "namespace": "software_factory", "action": "github.installation.list", "title": "List Forge GitHub installations", "description": "List connected GitHub App installations and their repositories with bind state (connected or active) and the Forge project each bound repository maps to. Read-only; requires the Forge add-on.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }], "hasComplexInput": false, "help": "List connected GitHub App installations and each repository's bind state (connected or active) with the Forge project it maps to. Read-only." },
52133
- { "id": "software_factory.github.policy.upsert", "namespace": "software_factory", "action": "github.policy.upsert", "title": "Set a Forge GitHub automation policy", "description": "Set the server-side policy for GitHub actions and automation-mode ceilings. Owner-only and human-gated; production deploy remains human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks configured \u2014 it refuses otherwise.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": false }, { "name": "automation_mode_ceiling", "flag": "automation-mode-ceiling", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "allowed_actions", "flag": "allowed-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requires_human_for", "flag": "requires-human-for", "type": "array", "required": true, "itemType": "string" }], "hasComplexInput": false, "help": "Set Forge's server-side GitHub automation policy for actions, mode ceilings, and human-gated operations." },
52166
+ { "id": "software_factory.github.policy.upsert", "namespace": "software_factory", "action": "github.policy.upsert", "title": "Set a Forge GitHub automation policy", "description": "Set the server-side policy for GitHub actions and automation-mode ceilings. Owner-only and human-gated; production deploy remains human-gated. Raising the ceiling to a merge-capable mode (merge_after_checks or higher) first verifies the bound repository has required status checks configured \u2014 it refuses otherwise.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "software_project_id", "flag": "software-project-id", "type": "string", "required": true }, { "name": "authority_profile_id", "flag": "authority-profile-id", "type": "string", "required": false }, { "name": "automation_mode_ceiling", "flag": "automation-mode-ceiling", "type": "enum", "required": false, "enumValues": ["plan_only", "pr_only", "merge_after_checks", "deploy_preview", "deploy_production"] }, { "name": "allowed_actions", "flag": "allowed-actions", "type": "array", "required": true, "itemType": "string" }, { "name": "requires_human_for", "flag": "requires-human-for", "type": "array", "required": true, "itemType": "string" }, { "name": "max_risk", "flag": "max-risk", "type": "enum", "required": false, "enumValues": ["low", "medium", "high", "critical"] }], "hasComplexInput": false, "help": "Set Forge's server-side GitHub automation policy for actions, mode ceilings, and human-gated operations." },
52134
52167
  { "id": "software_factory.github.repository.unbind", "namespace": "software_factory", "action": "github.repository.unbind", "title": "Unbind a Forge GitHub repository", "description": "Remove a GitHub repository's Forge project binding. By default the repository stays connected (unbound) and can be re-bound later; pass disconnect to remove it entirely. Owner-only and human-gated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "app_slug", "flag": "app-slug", "type": "string", "required": false }, { "name": "installation_id", "flag": "installation-id", "type": "integer", "required": true }, { "name": "repository_id", "flag": "repository-id", "type": "integer", "required": true }, { "name": "disconnect", "flag": "disconnect", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Remove a GitHub repository's Forge project binding; the repository stays connected for re-binding unless disconnect is set. Owner-only and human-gated." },
52135
52168
  { "id": "software_factory.phase.advance", "namespace": "software_factory", "action": "phase.advance", "title": "Advance a Forge build request phase", "description": "Advance a build request to the next phase, enforcing the closed phase state machine server-side (an illegal transition is rejected). Writes a phase-run row and updates the current phase. Entitlement-gated.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "to_phase", "flag": "to-phase", "type": "enum", "required": true, "enumValues": ["intake", "discovery_scoping", "plan_review", "implementation", "plan_conformance_review", "security_review", "qa_verification", "release_preview", "merge_or_deploy_gate", "closeout"] }, { "name": "owning_seat_id", "flag": "owning-seat-id", "type": "string", "required": false }, { "name": "note", "flag": "note", "type": "string", "required": false }], "hasComplexInput": false, "help": "Advance a build request to its next phase; the server enforces the closed phase state machine and rejects an illegal transition." },
52136
52169
  { "id": "software_factory.plan.approve", "namespace": "software_factory", "action": "plan.approve", "title": "Approve a Forge plan", "description": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated (invariant #7).", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "build_request_id", "flag": "build-request-id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "A human approves the current plan at the plan_review gate; records a human decision and advances the request to implementation. Owner-only and human-gated." },
@@ -58395,6 +58428,12 @@ async function main(argv = process.argv.slice(2), options = {}) {
58395
58428
  const deviceLogin = options.deviceLogin ?? loginWithDeviceCode;
58396
58429
  const refreshSession = options.refreshSession ?? refreshCliSessionIfNeeded;
58397
58430
  const [rawCommand, ...args] = argv;
58431
+ if (rawCommand === "--version" || rawCommand === "-v") {
58432
+ const version4 = await readCliVersion();
58433
+ io.stdout.write(`${version4 ?? "unknown"}
58434
+ `);
58435
+ return 0;
58436
+ }
58398
58437
  const command = rawCommand === "--help" || rawCommand === "-h" ? "help" : rawCommand;
58399
58438
  if (isSecretBlockedNamespace(command) || isSecretBlockedCommand(args[0] === void 0 ? void 0 : `${command}.${args[0]}`)) {
58400
58439
  io.stderr.write(`${SECRET_ARGV_GUIDANCE}