@rosthq/cli 0.5.23 → 0.5.25

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/index.js CHANGED
@@ -42384,7 +42384,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42384
42384
  order: 48,
42385
42385
  title: "CLI and MCP installation guide",
42386
42386
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42387
- version: "2026-06-21.13",
42387
+ version: "2026-06-21.15",
42388
42388
  public: true,
42389
42389
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42390
42390
  stages: ["company_setup", "staffing"],
@@ -42421,6 +42421,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42421
42421
  "agent.status",
42422
42422
  "agent.list_fleet",
42423
42423
  "agent.fleet_digest",
42424
+ "system.health",
42424
42425
  "agent.get_run",
42425
42426
  "agent.list_runs",
42426
42427
  "agent.list_tool_calls",
@@ -42448,7 +42449,12 @@ External connectors are being rolled out provider by provider, conservatively (r
42448
42449
  "deliverable.list",
42449
42450
  "deliverable.get",
42450
42451
  "deliverable.create",
42451
- "deliverable.attach"
42452
+ "deliverable.attach",
42453
+ "error_log.list",
42454
+ "error_log.resolve",
42455
+ "error_log.supersede",
42456
+ "runner.diagnose",
42457
+ "runner.repair"
42452
42458
  ],
42453
42459
  legal: {
42454
42460
  publicRisk: "low",
@@ -42821,10 +42827,12 @@ The signed-in app exposes the same Skill command surface under **Skills** in the
42821
42827
  | \`{{cli}} goal list|create|update|status|reparent|drop\` | \`goal.list\`, \`goal.create\`, \`goal.update\`, \`goal.set_status\`, \`goal.reparent\`, \`goal.drop\` | Manage Cascade goals. Scope varies by verb: \`status\` is seat-scoped, \`list\`/\`create\` need a tenant token, and \`update\`/\`reparent\`/\`drop\` require tenant-admin. | Seat to tenant-admin | \`{{cli}} goal list --json\` |
42822
42828
  | \`{{cli}} friction list|file|resolve|link\` | \`friction.list\`, \`friction.file_issue\`, \`friction.resolve\`, \`friction.link_task\` | File and resolve Friction issues. | Seat | \`{{cli}} friction list --status open --json\` |
42823
42829
  | \`{{cli}} escalation list|get|resolve|reject\` | \`escalation.list\`, \`escalation.get\`, \`escalation.resolve\`, \`escalation.reject\` | Work the steward escalation queue. | Steward | \`{{cli}} escalation list --json\` |
42830
+ | \`{{cli}} error list|resolve|supersede\` | \`error_log.list\`, \`error_log.resolve\`, \`error_log.supersede\` | List active, acknowledged, resolved, or superseded product error logs and let a human acknowledge, resolve, or supersede stale errors with evidence links. | Tenant | \`{{cli}} error list --resolved active --json\`; \`{{cli}} error resolve --error-log-id <id> --reason "Fixed in PR #123"\` |
42824
42831
  | \`{{cli}} sync brief|compile|complete\` | \`sync.brief.get\`, \`sync.brief.compile\`, \`sync.run.complete\` | Compile, read, and complete a weekly Sync. | Tenant | \`{{cli}} sync brief --json\` |
42825
- | \`{{cli}} runner list|status|work-orders|revoke\` | \`runner.list\`, \`runner.status\`, \`work_order.list\`, \`runner.revoke\` | Inspect runners and work orders; revoke a runner. | Tenant | \`{{cli}} runner list --json\` |
42832
+ | \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\` | Inspect runners and work orders, diagnose offline runners, get repair guidance, and revoke a runner. | Tenant | \`{{cli}} runner diagnose --runner-id <id> --json\` |
42826
42833
  | \`{{cli}} notification settings|test|errors\` | \`notification.settings.get\`, \`notification.test\`, \`notification.list_errors\` | Read notification settings, send a test, and list failed deliveries with linked product error source, seat id, and run id when available. | Tenant | \`{{cli}} notification errors --limit 10 --json\` |
42827
42834
  | \`{{cli}} integration list|readiness|status|test\` | \`integration.list\`, \`integration.readiness\`, \`integration.status\`, \`integration.test\` | List connector metadata, read the setup-readiness checklist, read one connector's health, and run the provider-specific connection test without exposing credentials. | Tenant | \`{{cli}} integration readiness --provider google --json\` |
42835
+ | \`{{cli}} system health\` | \`system.health\` | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | \`{{cli}} system health --json\`; \`{{cli}} system health --seat <id> --json\` |
42828
42836
  | \`{{cli}} settings get|update|product-learning|rename\` | \`settings.get\`, \`settings.update\`, \`settings.product_learning.get\`, \`settings.product_learning.update\`, \`tenant.rename\` | Read tenant settings, update budget caps, read or update product-learning participation, and rename the company. Budget and product-learning updates stop at human confirmation in non-interactive CLI/MCP sessions; company rename is owner-only and human-gated. | Tenant / Tenant-admin for updates | \`{{cli}} settings product-learning get --json\`; \`{{cli}} settings product-learning update --mode disabled --json\`; \`{{cli}} settings rename --company "Acme Operations"\` |
42829
42837
  | \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
42830
42838
  | \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|show\` | \`agent_template.list\`, \`agent.create_from_template\`, \`agent.create_custom\`, \`agent_setup.get\`, \`agent_setup.update\`, \`agent.configure_tools\`, \`agent.run_dry_run\`, \`agent.go_live\`, \`agent.status\`, \`agent.run_now\`, \`agent.fleet_digest\`, \`agent.get_run\`, \`agent.show_markdown\` | Run the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with \`--model\` and \`--effort\`), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Human CLI dry-runs print the rehearsal transcript and, when present, the per-tool preview labels (\`Would run\`, \`Blocked\`, \`Escalated\`) before go-live. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent fleet-digest --json\` |
@@ -42951,6 +42959,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42951
42959
  | \`rost_get_agent_status\` | \`agent.status\` | Read agent lane, live state, steward chain, dry-run result, Runner availability. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`. |
42952
42960
  | \`rost_list_agent_fleet\` | \`agent.list_fleet\` | Read every staffed agent seat at once: lane, live state, last real turn, 24h/7d real turns, measurable status, escalations, and 7-day spend. | Tenant | Call with \`{}\`; counts use the same seat-run association as \`agent.list_runs\`, with sandbox dry runs excluded from real turns. |
42953
42961
  | \`rost_get_dogfood_fleet_health_digest\` | \`agent.fleet_digest\` | Capture the daily dogfood fleet-health digest: live/idle state, 24h/7d turns, spend, recent failed runs, unresolved errors, failed notifications, and next actions. | Tenant | Call with \`{}\`; optional \`window_hours\` bounds recent failed-run evidence, while \`error_limit\` caps linked evidence per seat. |
42962
+ | \`rost_system_health\` | \`system.health\` | Read the scoped system-health snapshot across agent runs, unresolved errors, Signals, Cascade setup, work loop, integrations, runners, notifications, and Sync Brief readiness. | Tenant, member, or seat token | Call with \`{}\`; optional \`seat_id\` narrows inside the caller's server-derived scope. |
42954
42963
  | \`rost_run_agent_now\` | \`agent.run_now\` | Queue an immediate run for a live staffed agent without changing its saved schedule; cloud lane dispatches to the executor and runner lane queues for the paired runner. | Tenant | Call with \`{"seat_id":"<seat-id>"}\`. |
42955
42964
  | \`rost_list_agent_runs\` | \`agent.list_runs\` | Read a seat's agent run history (status, lane, model, cost, per-run Skill activation, tool-call, and guard-held counts) plus the seat's run/tool-call rollup including held-action count. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`; pass \`limit\` for a deeper window. |
42956
42965
  | \`rost_get_agent_run_diagnostics\` | \`agent.get_run\` | Read one run's diagnostic record: transcript reference, token/cost usage, outcome, linked product-visible run errors, and loaded Skill activation file metadata. File hashes/sizes identify the immutable source package, while model prompt text may be bounded or truncated. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","run_id":"<run-id>"}\`. |
@@ -42974,6 +42983,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42974
42983
  | \`rost_list_mcp_tokens\` | \`mcp_token.list\` | List MCP token metadata (never token material). | Tenant | Call with \`{}\` or \`{"include_revoked":true}\`. |
42975
42984
  | \`rost_list_runners\` | \`runner.list\` | List local runners and their online/offline/revoked state. | Tenant | Call with \`{}\`. |
42976
42985
  | \`rost_runner_status\` | \`runner.status\` | Read a single runner's capability and state. | Tenant | Call with \`runner_id\`. |
42986
+ | \`rost_diagnose_runner\` | \`runner.diagnose\` | Return runner health, capabilities, and repair guidance without secrets. | Tenant | Call with \`runner_id\`; actionable repair guidance exposes restart, re-pair, or missing CLI steps. |
42987
+ | \`rost_runner_repair_guidance\` | \`runner.repair\` | Return focused repair steps for a runner: restart, re-pair, revoke stale, or install missing CLI runtime. | Tenant | Call with \`runner_id\` and optional \`issue\` (restart, re_pair, revoke_stale, missing_cli_runtime). |
42977
42988
  | \`rost_start_runner_pairing\` | \`runner.pairing.start\` | Open a runner pairing session and return the human pairing code. | Tenant-admin | Call with \`name\` and \`platform\`; owner/admin only. |
42978
42989
  | \`rost_revoke_runner\` | \`runner.revoke\` | Revoke a runner so it can no longer authenticate. | Tenant | Call with \`runner_id\`; expect human confirmation. |
42979
42990
  | \`rost_list_work_orders\` | \`work_order.list\` | List runner/cloud work orders for the tenant. | Tenant | Call with optional \`status\`, \`agent_id\`, or \`runner_id\`. |
@@ -42983,6 +42994,9 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42983
42994
  | \`rost_update_notification_settings\` | \`notification.settings.update\` | Update tenant notification preferences. | Tenant | Call with the fields to change. |
42984
42995
  | \`rost_send_test_notification\` | \`notification.test\` | Emit an in-app test notification to the acting human. | Tenant | Call with \`{}\`. |
42985
42996
  | \`rost_list_notification_errors\` | \`notification.list_errors\` | List recent failed notification deliveries with linked \`error_log_id\`, source, seat id, and run id when available. | Tenant | Call with optional \`limit\`; \`source=run\` rows can be followed with \`agent.get_run\`. |
42997
+ | \`rost_list_error_logs\` | \`error_log.list\` | List product error logs by seat, source, severity, and active/resolved state. | Tenant | Call with \`{"resolved":"active"}\` before acknowledging stale failures. |
42998
+ | \`rost_resolve_error_log\` | \`error_log.resolve\` | Acknowledge or resolve an error log with a required human reason and optional task, issue, or PR link. | Tenant | Call with \`error_log_id\`, \`reason\`, and \`disposition\` \`acknowledged\` or \`resolved\`. |
42999
+ | \`rost_supersede_error_log\` | \`error_log.supersede\` | Mark an older error log as superseded by a newer in-tenant error log. | Tenant | Call with \`error_log_id\`, \`new_error_log_id\`, and \`reason\`. |
42986
43000
  | \`rost_list_integrations\` | \`integration.list\` | List connected integration metadata and latest health state. | Tenant | Call with \`{}\` or \`{"provider":"google"}\`; no secrets or vault refs are returned. |
42987
43001
  | \`rost_check_integration_readiness\` | \`integration.readiness\` | Return the connector setup checklist: OAuth env/callback, tenant connection, scopes, latest test state, external verification/CASA, handler availability, and DER-coded next actions. | Tenant | Call with \`{"provider":"google"}\`; metadata only, no secrets or vault refs. |
42988
43002
  | \`rost_get_integration_status\` | \`integration.status\` | Read one integration's metadata by provider or integration id. | Tenant | Call with \`{"provider":"google"}\` or \`{"integration_id":"<id>"}\`. |
@@ -43990,11 +44004,11 @@ Every notification should include the seat, cause, evidence, and requested decis
43990
44004
  order: 75,
43991
44005
  title: "Local runner guide",
43992
44006
  summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
43993
- version: "2026-06-20.1",
44007
+ version: "2026-06-21.1",
43994
44008
  public: true,
43995
44009
  audiences: ["human", "cli", "mcp", "in_app_agent"],
43996
44010
  stages: ["staffing", "operating_rhythm"],
43997
- relatedCommandIds: ["mcp_token.create", "mcp_token.revoke", "runner.list", "runner.status", "runner.pairing.start", "runner.revoke", "work_order.list", "work_order.enqueue", "work_order.cancel", "confirmation.approve"],
44011
+ relatedCommandIds: ["mcp_token.create", "mcp_token.revoke", "runner.list", "runner.status", "runner.diagnose", "runner.repair", "runner.pairing.start", "runner.revoke", "work_order.list", "work_order.enqueue", "work_order.cancel", "confirmation.approve"],
43998
44012
  legal: { publicRisk: "low", notes: ["{{brand}}-native local-runner guidance."] },
43999
44013
  sources: [
44000
44014
  {
@@ -44020,6 +44034,8 @@ The local runner is for human-controlled local agent work. It should retrieve {{
44020
44034
 
44021
44035
  - 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.
44022
44036
  - Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows online/offline/revoked state; \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner.
44037
+ - 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.
44038
+ - 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).
44023
44039
  - 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\`.
44024
44040
  - Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
44025
44041
 
@@ -46365,6 +46381,53 @@ var runnerWrapper = (context, args) => dispatch(context, "runner", args, {
46365
46381
  return `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (last heartbeat ${field(record2, "last_heartbeat_at")}).`;
46366
46382
  });
46367
46383
  },
46384
+ diagnose: (ctx, rest) => {
46385
+ const parsed = parseFlags(rest);
46386
+ const runnerId = requireValue2(parsed, "runner-id");
46387
+ return execute(ctx, parsed, "runner.diagnose", { runner_id: runnerId }, (output) => {
46388
+ const record2 = asRecord(output);
46389
+ const guidance = asArray(record2.repair_guidance);
46390
+ const lines = [
46391
+ `Runner ${field(record2, "name")} (${field(record2, "id")})`,
46392
+ `health: ${field(record2, "health")} platform: ${field(record2, "platform")}`,
46393
+ `paired_at: ${field(record2, "paired_at")} last_heartbeat: ${field(record2, "last_heartbeat_at")}`,
46394
+ `capabilities: claude=${String(asRecord(record2.capabilities).claude)} codex=${String(asRecord(record2.capabilities).codex)}`,
46395
+ `revocation_state: ${field(record2, "revocation_state")}`
46396
+ ];
46397
+ if (guidance.length > 0) {
46398
+ lines.push("repair_guidance:");
46399
+ guidance.forEach((step) => {
46400
+ const s = asRecord(step);
46401
+ lines.push(` ${field(s, "action")}: ${field(s, "detail")}`);
46402
+ });
46403
+ }
46404
+ return lines.join("\n");
46405
+ });
46406
+ },
46407
+ repair: (ctx, rest) => {
46408
+ const parsed = parseFlags(rest);
46409
+ const runnerId = requireValue2(parsed, "runner-id");
46410
+ const issue2 = optionalValue(parsed, "issue");
46411
+ const body = issue2 ? { runner_id: runnerId, issue: issue2 } : { runner_id: runnerId };
46412
+ return execute(ctx, parsed, "runner.repair", body, (output) => {
46413
+ const record2 = asRecord(output);
46414
+ const steps = asArray(record2.repair_steps);
46415
+ const lines = [
46416
+ `Runner ${field(record2, "runner_name")} (${field(record2, "runner_id")}) health: ${field(record2, "runner_health")}`,
46417
+ `requires_human: ${field(record2, "requires_human")}`
46418
+ ];
46419
+ if (steps.length > 0) {
46420
+ lines.push("repair_steps:");
46421
+ steps.forEach((step) => {
46422
+ const s = asRecord(step);
46423
+ lines.push(` ${field(s, "action")}`);
46424
+ lines.push(` command: ${field(s, "command")}`);
46425
+ lines.push(` detail: ${field(s, "detail")}`);
46426
+ });
46427
+ }
46428
+ return lines.join("\n");
46429
+ });
46430
+ },
46368
46431
  "work-orders": (ctx, rest) => {
46369
46432
  const parsed = parseFlags(rest);
46370
46433
  const body = withOptional({}, {
@@ -46394,9 +46457,11 @@ var runnerWrapper = (context, args) => dispatch(context, "runner", args, {
46394
46457
  }
46395
46458
  }, runnerUsage(context.binName));
46396
46459
  function runnerUsage(bin) {
46397
- return `Usage: ${bin} runner list|status|work-orders|revoke [--json]
46460
+ return `Usage: ${bin} runner list|status|diagnose|repair|work-orders|revoke [--json]
46398
46461
  ${bin} runner list [--include-revoked]
46399
46462
  ${bin} runner status --runner-id <id>
46463
+ ${bin} runner diagnose --runner-id <id>
46464
+ ${bin} runner repair --runner-id <id> [--issue restart|re_pair|revoke_stale|missing_cli_runtime]
46400
46465
  ${bin} runner work-orders [--status <s>] [--agent-id <id>] [--runner-id <id>] [--limit <n>]
46401
46466
  ${bin} runner revoke --runner-id <id>`;
46402
46467
  }
@@ -47119,6 +47184,73 @@ function modelUsage(bin) {
47119
47184
  return `Usage: ${bin} model list [--json]
47120
47185
  ${bin} model list \u2014 guided model tiers with recommendations, token prices, cost bands, and model ids for --model.`;
47121
47186
  }
47187
+ var errorWrapper = (context, args) => dispatch(context, "error", args, {
47188
+ list: (ctx, rest) => {
47189
+ const parsed = parseFlags(rest);
47190
+ const body = withOptional({}, {
47191
+ seat_id: optionalValue(parsed, "seat-id"),
47192
+ source: optionalValue(parsed, "source"),
47193
+ severity: optionalValue(parsed, "severity"),
47194
+ resolved: optionalValue(parsed, "resolved"),
47195
+ limit: optionalNumber(parsed, "limit")
47196
+ });
47197
+ return execute(ctx, parsed, "error_log.list", body, (output) => {
47198
+ const record2 = asRecord(output);
47199
+ const errors = asArray(record2.errors);
47200
+ if (errors.length === 0) {
47201
+ return "No error logs matching the filter.";
47202
+ }
47203
+ return errors.map((entry) => {
47204
+ const r = asRecord(entry);
47205
+ const disposition = field(r, "disposition");
47206
+ const marker = disposition === "active" ? "*" : " ";
47207
+ const severityLabel = field(r, "severity").charAt(0).toUpperCase();
47208
+ return `${marker} ${field(r, "error_log_id")} [${severityLabel}] ${field(r, "source")} ${disposition} ${field(r, "code")} ${field(r, "message")} ${field(r, "created_at")}`;
47209
+ }).join("\n") + (field(record2, "total") !== "" ? `
47210
+ Total: ${field(record2, "total")}` : "");
47211
+ });
47212
+ },
47213
+ resolve: (ctx, rest) => {
47214
+ const parsed = parseFlags(rest);
47215
+ const errorLogId = requireValue2(parsed, "error-log-id");
47216
+ const reason = requireValue2(parsed, "reason");
47217
+ const body = withOptional({
47218
+ error_log_id: errorLogId,
47219
+ reason
47220
+ }, {
47221
+ disposition: optionalValue(parsed, "disposition"),
47222
+ linked_task_id: optionalValue(parsed, "linked-task-id"),
47223
+ linked_issue_id: optionalValue(parsed, "linked-issue-id"),
47224
+ linked_pr_ref: optionalValue(parsed, "linked-pr-ref")
47225
+ });
47226
+ return execute(ctx, parsed, "error_log.resolve", body, (output) => {
47227
+ const record2 = asRecord(output);
47228
+ return `Resolved error ${field(record2, "error_log_id")} as ${field(record2, "disposition")} at ${field(record2, "resolved_at")}.`;
47229
+ });
47230
+ },
47231
+ supersede: (ctx, rest) => {
47232
+ const parsed = parseFlags(rest);
47233
+ const body = withOptional({
47234
+ error_log_id: requireValue2(parsed, "error-log-id"),
47235
+ new_error_log_id: requireValue2(parsed, "new-error-log-id"),
47236
+ reason: requireValue2(parsed, "reason")
47237
+ }, {
47238
+ linked_task_id: optionalValue(parsed, "linked-task-id"),
47239
+ linked_issue_id: optionalValue(parsed, "linked-issue-id"),
47240
+ linked_pr_ref: optionalValue(parsed, "linked-pr-ref")
47241
+ });
47242
+ return execute(ctx, parsed, "error_log.supersede", body, (output) => {
47243
+ const record2 = asRecord(output);
47244
+ return `Superseded error ${field(record2, "error_log_id")} \u2192 ${field(record2, "superseded_by_id")} at ${field(record2, "resolved_at")}.`;
47245
+ });
47246
+ }
47247
+ }, errorUsage(context.binName));
47248
+ function errorUsage(bin) {
47249
+ return `Usage: ${bin} error list|resolve|supersede [--json]
47250
+ ${bin} error list [--seat-id <id>] [--source run|llm|tool|mcp|runner|integration|job|web] [--severity warning|error|critical] [--resolved active|acknowledged|resolved|all] [--limit <n>]
47251
+ ${bin} error resolve --error-log-id <id> --reason <text> [--disposition acknowledged|resolved] [--linked-task-id <id>] [--linked-issue-id <id>] [--linked-pr-ref <url>]
47252
+ ${bin} error supersede --error-log-id <id> --new-error-log-id <id> --reason <text> [--linked-task-id <id>] [--linked-issue-id <id>] [--linked-pr-ref <url>]`;
47253
+ }
47122
47254
  var compassWrapper = (context, args) => dispatch(context, "compass", args, {
47123
47255
  show: (ctx, rest) => {
47124
47256
  const parsed = parseFlags(rest, /* @__PURE__ */ new Set(["markdown"]));
@@ -47221,6 +47353,51 @@ function deliverableUsage(bin) {
47221
47353
  ${bin} deliverable create --title <text> [--kind brief|work_evidence|artifact|report|other] [--summary <text>] [--content <text>]
47222
47354
  ${bin} deliverable attach --title <text> [--run-id <id>] [--task-id <id>] [--work-order-id <id>] [--kind brief|work_evidence|artifact|report|other] [--summary <text>] [--content <text>]`;
47223
47355
  }
47356
+ function formatSystemHealth(output) {
47357
+ const record2 = asRecord(output);
47358
+ const scope = asRecord(record2.scope);
47359
+ const sections = asRecord(record2.sections);
47360
+ const actions = asArray(record2.top_actions);
47361
+ const findings = asArray(record2.findings);
47362
+ const lines = [
47363
+ `verdict: ${field(record2, "verdict")} scope: ${field(scope, "mode")} seats: ${field(scope, "total_seat_count")} findings: ${findings.length}`
47364
+ ];
47365
+ if (actions.length > 0) {
47366
+ lines.push("top_actions:");
47367
+ for (const action of actions) {
47368
+ const item = asRecord(action);
47369
+ lines.push(` ${field(item, "label")} command=${field(item, "command_id")} cli=${field(item, "cli")}`);
47370
+ }
47371
+ }
47372
+ const fleet = asRecord(sections.fleet);
47373
+ const runs = asRecord(sections.runs);
47374
+ const signals = asRecord(sections.signals);
47375
+ const cascade = asRecord(sections.cascade_setup);
47376
+ const workLoop = asRecord(sections.work_loop);
47377
+ const connectivity = asRecord(sections.connectivity);
47378
+ const sync = asRecord(sections.sync);
47379
+ lines.push(
47380
+ `fleet: agents=${field(fleet, "agent_count")} live=${field(fleet, "live_count")} stale=${field(fleet, "stale_count")} setup_gaps=${field(fleet, "setup_gap_count")}`,
47381
+ `runs: failed_24h=${field(runs, "failed_24h")} failed_7d=${field(runs, "failed_7d")} unresolved_errors=${field(runs, "unresolved_error_count")}`,
47382
+ `signals: off_track=${field(signals, "off_track_count")} pending=${field(signals, "pending_count")}`,
47383
+ `cascade: recommendations=${field(cascade, "recommendation_count")} warnings=${field(cascade, "warning_count")}`,
47384
+ `work_loop: open_issues=${field(workLoop, "open_issue_count")} friction_without_task=${field(workLoop, "friction_without_task_count")} open_or_stalled_tasks=${field(workLoop, "open_or_stalled_task_count")}`,
47385
+ `connectivity: runners=${field(connectivity, "runner_count")} offline_runners=${field(connectivity, "offline_runner_count")} integrations=${field(connectivity, "integration_count")} disconnected_integrations=${field(connectivity, "disconnected_integration_count")} failed_notifications=${field(connectivity, "failed_notification_count")}`,
47386
+ `sync: latest_brief=${field(sync, "latest_brief_at")} missing_latest_brief=${field(sync, "missing_latest_brief")} flagged_gaps=${field(sync, "flagged_gap_count")}`
47387
+ );
47388
+ return lines.join("\n");
47389
+ }
47390
+ var systemWrapper = (context, args) => dispatch(context, "system", args, {
47391
+ health: (ctx, rest) => {
47392
+ const parsed = parseFlags(rest);
47393
+ const body = withOptional({}, { seat_id: parsed.seat });
47394
+ return execute(ctx, parsed, "system.health", body, formatSystemHealth);
47395
+ }
47396
+ }, systemUsage(context.binName));
47397
+ function systemUsage(bin) {
47398
+ return `Usage: ${bin} system health [--seat <id>] [--json]
47399
+ ${bin} system health [--seat <id>]`;
47400
+ }
47224
47401
  var OPERATION_GROUPS = [
47225
47402
  "task",
47226
47403
  "status",
@@ -47228,6 +47405,7 @@ var OPERATION_GROUPS = [
47228
47405
  "goal",
47229
47406
  "friction",
47230
47407
  "escalation",
47408
+ "error",
47231
47409
  "sync",
47232
47410
  "runner",
47233
47411
  "notification",
@@ -47240,7 +47418,8 @@ var OPERATION_GROUPS = [
47240
47418
  "model",
47241
47419
  "compass",
47242
47420
  "charter",
47243
- "deliverable"
47421
+ "deliverable",
47422
+ "system"
47244
47423
  ];
47245
47424
  var wrappers = {
47246
47425
  task: taskWrapper,
@@ -47249,6 +47428,7 @@ var wrappers = {
47249
47428
  goal: goalWrapper,
47250
47429
  friction: frictionWrapper,
47251
47430
  escalation: escalationWrapper,
47431
+ error: errorWrapper,
47252
47432
  sync: syncWrapper,
47253
47433
  runner: runnerWrapper,
47254
47434
  notification: notificationWrapper,
@@ -47261,7 +47441,8 @@ var wrappers = {
47261
47441
  model: modelWrapper,
47262
47442
  compass: compassWrapper,
47263
47443
  charter: charterWrapper,
47264
- deliverable: deliverableWrapper
47444
+ deliverable: deliverableWrapper,
47445
+ system: systemWrapper
47265
47446
  };
47266
47447
  function isOperationGroup(value) {
47267
47448
  return value !== void 0 && OPERATION_GROUPS.includes(value);
@@ -47273,6 +47454,7 @@ var groupUsageBuilders = {
47273
47454
  goal: goalUsage,
47274
47455
  friction: frictionUsage,
47275
47456
  escalation: escalationUsage,
47457
+ error: errorUsage,
47276
47458
  sync: syncUsage,
47277
47459
  runner: runnerUsage,
47278
47460
  notification: notificationUsage,
@@ -47285,7 +47467,8 @@ var groupUsageBuilders = {
47285
47467
  model: modelUsage,
47286
47468
  compass: compassUsage,
47287
47469
  charter: charterUsage,
47288
- deliverable: deliverableUsage
47470
+ deliverable: deliverableUsage,
47471
+ system: systemUsage
47289
47472
  };
47290
47473
  function operationGroupUsage(group, bin) {
47291
47474
  return usageWithSchemaFooter(groupUsageBuilders[group](bin), bin);
@@ -47306,8 +47489,9 @@ function operationUsageLines(bin) {
47306
47489
  `${bin} goal list|create|update|status|reparent|drop`,
47307
47490
  `${bin} friction list|file|resolve|link`,
47308
47491
  `${bin} escalation list|get|resolve|reject`,
47492
+ `${bin} error list|resolve|supersede`,
47309
47493
  `${bin} sync brief|compile|complete`,
47310
- `${bin} runner list|status|work-orders|revoke`,
47494
+ `${bin} runner list|status|diagnose|repair|work-orders|revoke`,
47311
47495
  `${bin} notification settings|test|errors`,
47312
47496
  `${bin} settings get|update|product-learning|rename`,
47313
47497
  `${bin} member invite|update|remove`,