@rosthq/cli 0.7.84 → 0.7.86
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.
- package/dist/generator/groups.d.ts.map +1 -1
- package/dist/index.js +40 -9
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;
|
|
1
|
+
{"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;AAosCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAmPjD,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43827,6 +43827,17 @@ var runnerPostureSchema = external_exports.object({
|
|
|
43827
43827
|
network: external_exports.enum(["allow", "deny", "unknown"]),
|
|
43828
43828
|
capability_set: external_exports.array(external_exports.string())
|
|
43829
43829
|
}).strict();
|
|
43830
|
+
var runnerCapacityStateSchema = external_exports.enum(["available", "near_cap", "exhausted", "unknown"]);
|
|
43831
|
+
var runnerCapacitySchema = external_exports.object({
|
|
43832
|
+
account_alias: external_exports.string().nullable(),
|
|
43833
|
+
state: runnerCapacityStateSchema,
|
|
43834
|
+
raw_state: external_exports.string().nullable(),
|
|
43835
|
+
// Null until the harness gains rate-limit error classification (out of scope for DER-1588);
|
|
43836
|
+
// surfaced now so a fleet reader picks it up automatically once it starts being set.
|
|
43837
|
+
rate_limited_until: isoDateTime6.nullable(),
|
|
43838
|
+
has_observation: external_exports.boolean(),
|
|
43839
|
+
freshness: external_exports.enum(["fresh", "stale"])
|
|
43840
|
+
}).strict();
|
|
43830
43841
|
var runnerSummarySchema = external_exports.object({
|
|
43831
43842
|
id: uuid8,
|
|
43832
43843
|
name: external_exports.string(),
|
|
@@ -43836,6 +43847,7 @@ var runnerSummarySchema = external_exports.object({
|
|
|
43836
43847
|
cli_version: external_exports.string().nullable(),
|
|
43837
43848
|
posture: runnerPostureSchema,
|
|
43838
43849
|
execution: runnerExecutionReadinessSchema,
|
|
43850
|
+
capacity: runnerCapacitySchema,
|
|
43839
43851
|
paired_at: isoDateTime6.nullable(),
|
|
43840
43852
|
last_heartbeat_at: isoDateTime6.nullable(),
|
|
43841
43853
|
revoked_at: isoDateTime6.nullable(),
|
|
@@ -44219,6 +44231,8 @@ var systemHealthConnectivitySectionSchema = external_exports.object({
|
|
|
44219
44231
|
runner_count: external_exports.number().int().nonnegative(),
|
|
44220
44232
|
offline_runner_count: external_exports.number().int().nonnegative(),
|
|
44221
44233
|
not_execute_ready_runner_count: external_exports.number().int().nonnegative(),
|
|
44234
|
+
// DER-1588: fleet-wide near-cap/at-limit warning, driven off the runner capacity badge.
|
|
44235
|
+
near_cap_or_exhausted_runner_count: external_exports.number().int().nonnegative(),
|
|
44222
44236
|
integration_count: external_exports.number().int().nonnegative(),
|
|
44223
44237
|
disconnected_integration_count: external_exports.number().int().nonnegative(),
|
|
44224
44238
|
failed_notification_count: external_exports.number().int().nonnegative()
|
|
@@ -45727,7 +45741,12 @@ var softwareGithubAutomationPolicyInputSchema = external_exports.object({
|
|
|
45727
45741
|
// are identical to the union (`SoftwareGithubAction | SoftwareAutomationMode`).
|
|
45728
45742
|
requires_human_for: external_exports.array(external_exports.enum([...softwareGithubActionSchema.options, ...softwareAutomationModeSchema.options])).max(20).refine((values) => values.includes("deploy_production"), {
|
|
45729
45743
|
message: "production deploy must remain human-gated"
|
|
45730
|
-
})
|
|
45744
|
+
}),
|
|
45745
|
+
// DER-1266: optional per-policy inferred-risk tolerance. When set and the server-inferred
|
|
45746
|
+
// risk EXCEEDS this level, rule 5 (ADR-0018 §5) downgrades the effective automation mode
|
|
45747
|
+
// to plan_only. Omitted/null = the fixed riskModeCeilingFor table (no change for existing
|
|
45748
|
+
// policies). Conservative-by-default (invariant #10): this can only tighten, never loosen.
|
|
45749
|
+
max_risk: softwareRiskLevelSchema.nullable().optional()
|
|
45731
45750
|
}).strict();
|
|
45732
45751
|
var softwareGithubConnectedRepositoryInputSchema = external_exports.object({
|
|
45733
45752
|
repository_id: external_exports.number().int().positive(),
|
|
@@ -45799,7 +45818,8 @@ var softwareGithubInstallationListOutputSchema = external_exports.object({
|
|
|
45799
45818
|
var softwareGithubAutomationPolicyUpsertOutputSchema = external_exports.object({
|
|
45800
45819
|
policy_id: uuid11,
|
|
45801
45820
|
software_project_id: uuid11,
|
|
45802
|
-
automation_mode_ceiling: softwareAutomationModeSchema
|
|
45821
|
+
automation_mode_ceiling: softwareAutomationModeSchema,
|
|
45822
|
+
max_risk: softwareRiskLevelSchema.nullable()
|
|
45803
45823
|
});
|
|
45804
45824
|
var softwareGithubInstallationTokenCreateInputSchema = external_exports.object({
|
|
45805
45825
|
software_project_id: uuid11,
|
|
@@ -46406,6 +46426,8 @@ var WORK_VERBS = [
|
|
|
46406
46426
|
var workVerbSchema = external_exports.enum(WORK_VERBS);
|
|
46407
46427
|
var WORK_OUTCOMES = ["success", "warning", "error", "held"];
|
|
46408
46428
|
var workOutcomeSchema = external_exports.enum(WORK_OUTCOMES);
|
|
46429
|
+
var RESOLUTION_ATTRIBUTIONS = ["agent_self", "escalated_human"];
|
|
46430
|
+
var resolutionAttributionSchema = external_exports.enum(RESOLUTION_ATTRIBUTIONS);
|
|
46409
46431
|
var objectKindSchema = external_exports.string().trim().min(1).max(128);
|
|
46410
46432
|
var externalIdSchema = external_exports.string().trim().min(1).max(512);
|
|
46411
46433
|
var labelSchema = external_exports.string().trim().min(1).max(200);
|
|
@@ -46541,6 +46563,12 @@ var workDetailsSchemas = {
|
|
|
46541
46563
|
currency: external_exports.string().length(3).optional(),
|
|
46542
46564
|
unit: external_exports.string().max(64).optional(),
|
|
46543
46565
|
lead_time_days: external_exports.number().int().nonnegative().optional()
|
|
46566
|
+
}).strict(),
|
|
46567
|
+
// DER-1574: the resolution-attribution marker for a record that closes out an
|
|
46568
|
+
// `escalated`/`held` item — see RESOLUTION_ATTRIBUTIONS above.
|
|
46569
|
+
escalation_resolution: external_exports.object({
|
|
46570
|
+
resolved_by: resolutionAttributionSchema,
|
|
46571
|
+
resolution_note: external_exports.string().trim().min(1).max(2e3).optional()
|
|
46544
46572
|
}).strict()
|
|
46545
46573
|
};
|
|
46546
46574
|
|
|
@@ -47949,7 +47977,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
47949
47977
|
order: 48,
|
|
47950
47978
|
title: "CLI and MCP installation guide",
|
|
47951
47979
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
47952
|
-
version: "2026-07-15.
|
|
47980
|
+
version: "2026-07-15.5",
|
|
47953
47981
|
public: true,
|
|
47954
47982
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
47955
47983
|
stages: ["company_setup", "staffing"],
|
|
@@ -48721,7 +48749,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48721
48749
|
| \`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"}\`. |
|
|
48722
48750
|
| \`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"}\`. |
|
|
48723
48751
|
| \`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. |
|
|
48724
|
-
| \`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"]}\`. |
|
|
48752
|
+
| \`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"}\`. |
|
|
48725
48753
|
| \`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"}\`. |
|
|
48726
48754
|
| \`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. |
|
|
48727
48755
|
| \`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\`. |
|
|
@@ -49992,7 +50020,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
49992
50020
|
order: 75,
|
|
49993
50021
|
title: "Local runner guide",
|
|
49994
50022
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
49995
|
-
version: "2026-07-
|
|
50023
|
+
version: "2026-07-16.1",
|
|
49996
50024
|
public: true,
|
|
49997
50025
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
49998
50026
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -50069,7 +50097,7 @@ A Forge turn should load its context in one order: build context first, then Ski
|
|
|
50069
50097
|
## Inspect and control runners from CLI or MCP
|
|
50070
50098
|
|
|
50071
50099
|
- Pair a new runner: \`runner.pairing.start\` / \`rost_start_runner_pairing\` with \`name\` and \`platform\` returns a human pairing code. This is owner/admin-only because it mints a short-lived runner pairing session that leads to machine credentials.
|
|
50072
|
-
- Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows heartbeat state plus execution readiness. A runner is execute-ready only when it has a live heartbeat, a detected local Claude or Codex runtime, and recent claim/result evidence or active queue processing. Settings and runner status/list surfaces also project the runner CLI version, sandbox posture, network posture, and reported capability set from heartbeat so operators can see whether the machine is current and still running with the expected guardrails. \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner with the same execution detail, due queue count, claimed/running counts, and recent result timestamps.
|
|
50100
|
+
- Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows heartbeat state plus execution readiness. A runner is execute-ready only when it has a live heartbeat, a detected local Claude or Codex runtime, and recent claim/result evidence or active queue processing. Settings and runner status/list surfaces also project the runner CLI version, sandbox posture, network posture, and reported capability set from heartbeat so operators can see whether the machine is current and still running with the expected guardrails. \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner with the same execution detail, due queue count, claimed/running counts, and recent result timestamps. Both surfaces also project a \`capacity\` view: the runner's active model-account alias, a badge state (\`available\`, \`near_cap\`, \`exhausted\`, or \`unknown\`), a rate-limited-until timestamp when the harness has classified one, and a fresh/stale refreshability flag mirroring heartbeat recency. The badge reads \`unknown\` \u2014 never a fabricated \`available\` \u2014 whenever no capacity observation has been recorded yet or the runner reported a state {{brand}} does not recognize; real 5-hour/weekly usage percentages and reset timestamps are not collected yet, so this view never claims a percentage it does not have. Settings > Connected machines and the Health dashboard's Connectivity tile (a fleet-wide near-cap/at-limit count) surface the same signal.
|
|
50073
50101
|
- Diagnose (DER-949): \`{{cli}} runner diagnose --runner-id <id>\` / \`runner.diagnose\` / \`rost_diagnose_runner\` returns health, capabilities, and repair guidance without exposing secrets. Use when a runner is offline or stale to get actionable next steps.
|
|
50074
50102
|
- Repair steps (DER-949): \`{{cli}} runner repair --runner-id <id> [--issue restart|re_pair|revoke_stale|missing_cli_runtime]\` / \`runner.repair\` / \`rost_repair_runner\` returns focused repair instructions. The optional \`issue\` flag narrows to a specific kind of repair (restart the app, re-pair, revoke a stale runner, or install a missing CLI runtime).
|
|
50075
50103
|
- Work orders: \`{{cli}} runner work-orders\` / \`work_order.list\` / \`rost_list_work_orders\`; queue with \`work_order.enqueue\` / \`rost_enqueue_work_order\` for a live scheduled agent, or use \`agent.run_now\` / \`rost_run_agent_now\` when an operator wants the product to queue and dispatch an immediate live run from a seat id; cancel with \`work_order.cancel\` / \`rost_cancel_work_order\`. The operator Settings page mirrors queued, claimed, running, and recent completed runner evidence so online does not imply can execute.
|
|
@@ -52157,7 +52185,7 @@ var COMMAND_MANIFEST = [
|
|
|
52157
52185
|
{ "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." },
|
|
52158
52186
|
{ "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." },
|
|
52159
52187
|
{ "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." },
|
|
52160
|
-
{ "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." },
|
|
52188
|
+
{ "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." },
|
|
52161
52189
|
{ "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." },
|
|
52162
52190
|
{ "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." },
|
|
52163
52191
|
{ "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." },
|
|
@@ -52984,17 +53012,20 @@ function renderRunnerList(output) {
|
|
|
52984
53012
|
return runners.map((runner) => {
|
|
52985
53013
|
const record2 = asRecord(runner);
|
|
52986
53014
|
const posture = asRecord(record2.posture);
|
|
53015
|
+
const capacity = asRecord(record2.capacity);
|
|
52987
53016
|
const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
|
|
52988
|
-
return `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (${field(record2, "platform")}) cli=${field(record2, "cli_version")} sandbox=${field(posture, "sandbox")} network=${field(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""}`;
|
|
53017
|
+
return `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (${field(record2, "platform")}) cli=${field(record2, "cli_version")} sandbox=${field(posture, "sandbox")} network=${field(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""} capacity=${field(capacity, "state")} account=${field(capacity, "account_alias")} freshness=${field(capacity, "freshness")}`;
|
|
52989
53018
|
}).join("\n");
|
|
52990
53019
|
}
|
|
52991
53020
|
function renderRunnerStatus(output) {
|
|
52992
53021
|
const record2 = asRecord(output);
|
|
52993
53022
|
const posture = asRecord(record2.posture);
|
|
53023
|
+
const capacity = asRecord(record2.capacity);
|
|
52994
53024
|
const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
|
|
52995
53025
|
const lines = [
|
|
52996
53026
|
`${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (last heartbeat ${field(record2, "last_heartbeat_at")}).`,
|
|
52997
|
-
`cli_version: ${field(record2, "cli_version")} sandbox: ${field(posture, "sandbox")} network: ${field(posture, "network")}
|
|
53027
|
+
`cli_version: ${field(record2, "cli_version")} sandbox: ${field(posture, "sandbox")} network: ${field(posture, "network")}`,
|
|
53028
|
+
`capacity: ${field(capacity, "state")} account: ${field(capacity, "account_alias")} freshness: ${field(capacity, "freshness")} rate_limited_until: ${field(capacity, "rate_limited_until")}`
|
|
52998
53029
|
];
|
|
52999
53030
|
if (capabilitySet.length > 0) {
|
|
53000
53031
|
lines.push(`capabilities: ${capabilitySet}`);
|