@rosthq/cli 0.5.16 → 0.5.17
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 +67 -18
- package/dist/index.js.map +3 -3
- package/dist/operations.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -41830,7 +41830,7 @@ Drafting can be assisted by agents. Activation is a human decision. When authori
|
|
|
41830
41830
|
order: 40,
|
|
41831
41831
|
title: "Agent staffing playbook",
|
|
41832
41832
|
summary: "How to decide whether a seat should be human, agent, or hybrid, and how to go live safely.",
|
|
41833
|
-
version: "2026-06-
|
|
41833
|
+
version: "2026-06-20.1",
|
|
41834
41834
|
public: true,
|
|
41835
41835
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41836
41836
|
stages: ["staffing"],
|
|
@@ -41891,6 +41891,12 @@ Two creation paths, both draft-first. Read the stock-agents guide for templates
|
|
|
41891
41891
|
- Run on demand: \`{{cli}} agent run-now --seat-id <seat-id>\` / \`agent.run_now\` / \`rost_run_agent_now\` queues an immediate live run without changing the saved schedule. Cloud agents dispatch to the Inngest executor; runner agents queue work for the paired runner. The command is ungated but still requires a live staffed agent and the normal server-side tool guard.
|
|
41892
41892
|
- Audit what an agent did (Trust Card): \`{{cli}} command agent.list_runs --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_runs\` returns the seat's run history with per-run tool-call and guard-held counts; \`{{cli}} agent get-run --seat-id <seat-id> --run-id <run-id>\` / \`agent.get_run\` / \`rost_get_agent_run_diagnostics\` reads one run's transcript reference, token/cost usage, outcome, and product-visible run errors; \`{{cli}} command agent.list_tool_calls --json '{"seat_id":"<seat-id>"}'\` / \`rost_list_agent_tool_calls\` returns the tool-call ledger with each call's guard result. Both list commands include a \`denied_tool_call_count\` rollup \u2014 the actions held because they exceeded the charter. Pass \`{"seat_id":"<seat-id>","held_only":true}\` to \`agent.list_tool_calls\` for only the held calls. The web seat page shows the same facts as a Trust Card.
|
|
41893
41893
|
|
|
41894
|
+
## Review readiness before go-live
|
|
41895
|
+
|
|
41896
|
+
The fleet page and seat page should make readiness inspectable, not implied. A staffed agent row shows whether the Steward chain, lane or runtime substrate, vaulted credentials, granted tools, model config, sandbox dry run, and go-live state are complete. Each missing item links to the exact setup surface that fixes it: seat staffing, the Charter Builder, agent operations, runner settings, vault settings, or tool configuration.
|
|
41897
|
+
|
|
41898
|
+
After an agent runs, review its completed work as well as its telemetry. Seat pages combine explicit deliverables, work-log evidence, and successful run summaries into a readable output trail with safe evidence links labelled as internal, Linear, GitHub, or external. Held confirmations and escalations remain visible until decided or expired: confirmations can be approved or rejected from the seat page, while escalations link to the Steward queue for the human decision.
|
|
41899
|
+
|
|
41894
41900
|
## When to stop for confirmation
|
|
41895
41901
|
|
|
41896
41902
|
\`agent.create_from_template\`, \`agent.create_custom\`, \`staffing.assign_user\`, \`agent.go_live\`, \`agent.update_schedule\`, and \`mcp_token.create\` are \`human_required\`; \`agent.configure_tools\` and \`credential.ingress\` are \`credential_flow\` (both gate through the vault-backed credential path with human approval; \`agent.configure_tools\` stages the request and only \`credential.ingress\` takes the raw secret, as a vault reference); \`agent.decommission\` is \`dangerous\`. \`agent.run_now\` is not human-gated because it does not expand authority or change the schedule; it only queues an immediate run for an already-live agent. An agent may draft, configure (with vault refs), dry-run, and request an on-demand run; the human approves go-live, credentials, schedule changes, and decommission. \`run_dry_run\` is ungated by human approval, but it is **precondition-gated**: the seat's permission manifest must be signed first (\`charter.sign_manifest\`). Attempting a dry run before sign-off returns a clean \`COMMAND_PRECONDITION_FAILED\` naming \`charter.sign_manifest\`, not a generic failure. Go-live after a passed dry run is \`human_required\`. See the confirmations guide.
|
|
@@ -42133,7 +42139,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
|
|
|
42133
42139
|
order: 45,
|
|
42134
42140
|
title: "How agents work",
|
|
42135
42141
|
summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
|
|
42136
|
-
version: "2026-06-20.
|
|
42142
|
+
version: "2026-06-20.4",
|
|
42137
42143
|
public: true,
|
|
42138
42144
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42139
42145
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -42225,20 +42231,20 @@ Before an agent goes live, the sandbox dry run rehearses this against fake data
|
|
|
42225
42231
|
|
|
42226
42232
|
## What humans should review
|
|
42227
42233
|
|
|
42228
|
-
The Agents page shows fleet health first: live state, recent runs, failed runs, open held actions, last activity, cost, and the next operator action. A seat's Trust Card drills into the same facts: run history, one-run detail, tool-call outcomes, product-visible errors, transcript references, and held confirmations or escalations. Open confirmations stay visible until they are decided or expire, even when they are older than the default activity window. Approving or rejecting a held confirmation from the seat page is scoped to that seat; rejection can include a short reason.
|
|
42234
|
+
The Agents page shows fleet health first: live state, recent runs, failed runs, open held actions, last activity, cost, and the next operator action. It also shows configuration completeness for each staffed agent seat: Steward chain, lane or runtime substrate, vaulted credentials, granted tools, model config, sandbox dry run, and go-live state, each with a remediation link when incomplete. A seat's Trust Card drills into the same facts: run history, one-run detail, tool-call outcomes, product-visible errors, transcript references, and held confirmations or escalations. Open confirmations stay visible until they are decided or expire, even when they are older than the default activity window. Approving or rejecting a held confirmation from the seat page is scoped to that seat; rejection can include a short reason.
|
|
42229
42235
|
|
|
42230
|
-
Review the first dry runs, fleet overview, tool-call audit rows, escalations, and Signal impact. The fleet view at \`/agents\` shows every staffed agent seat at a glance; the agent-native equivalents are \`{{cli}} command agent.list_fleet --json '{}'\` / \`rost_list_agent_fleet\` for the compact overview, and \`{{cli}} agent fleet-digest --json\` / \`agent.fleet_digest\` / \`rost_get_dogfood_fleet_health_digest\` for the daily dogfood evidence bundle. The digest returns live/idle state, 24h/7d turns, 7d/30d spend, recent failed runs, unresolved product errors, failed notifications, and a next action per seat. Fleet real-turn counts use the same seat-run association as \`agent.list_runs\`, filtered to real runs. Scheduled agents are checked in rounded five-minute buckets, so a minute-level cron inside the bucket queues one work order for that bucket rather than one order per minute. Sandbox dry runs do not count as real turns. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
|
|
42236
|
+
Review the first dry runs, fleet overview, tool-call audit rows, escalations, deliverables, and Signal impact. A seat's completed-work area combines explicit deliverables, work-log evidence, and successful run summaries into one operator-facing trail with safe links labelled as internal, Linear, GitHub, or external. The fleet view at \`/agents\` shows every staffed agent seat at a glance; the agent-native equivalents are \`{{cli}} command agent.list_fleet --json '{}'\` / \`rost_list_agent_fleet\` for the compact overview, and \`{{cli}} agent fleet-digest --json\` / \`agent.fleet_digest\` / \`rost_get_dogfood_fleet_health_digest\` for the daily dogfood evidence bundle. The digest returns live/idle state, 24h/7d turns, 7d/30d spend, recent failed runs, unresolved product errors, failed notifications, and a next action per seat. Fleet real-turn counts use the same seat-run association as \`agent.list_runs\`, filtered to real runs. Scheduled agents are checked in rounded five-minute buckets, so a minute-level cron inside the bucket queues one work order for that bucket rather than one order per minute. Sandbox dry runs do not count as real turns. If the agent is repeatedly blocked, revise the Charter or split the seat. If the agent is taking too much judgment, narrow its autonomous scope.`
|
|
42231
42237
|
},
|
|
42232
42238
|
{
|
|
42233
42239
|
slug: "tool-access-and-vault",
|
|
42234
42240
|
order: 46,
|
|
42235
42241
|
title: "Tool access and vault",
|
|
42236
42242
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42237
|
-
version: "2026-06-20.
|
|
42243
|
+
version: "2026-06-20.5",
|
|
42238
42244
|
public: true,
|
|
42239
42245
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42240
42246
|
stages: ["staffing"],
|
|
42241
|
-
relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "integration.list", "integration.status", "integration.test", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
|
|
42247
|
+
relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "integration.list", "integration.readiness", "integration.status", "integration.test", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
|
|
42242
42248
|
legal: {
|
|
42243
42249
|
publicRisk: "low",
|
|
42244
42250
|
notes: [
|
|
@@ -42288,6 +42294,8 @@ Google can be connected from Settings once the workspace OAuth app is configured
|
|
|
42288
42294
|
|
|
42289
42295
|
CLI and MCP can inspect connector readiness without seeing secrets: \`integration.list\` / \`rost_list_integrations\` lists connected providers and health metadata, \`integration.status\` / \`rost_get_integration_status\` reads one provider by id or name, and \`integration.test\` / \`rost_test_integration_connection\` runs the installed provider-specific health check. For Google, the test refreshes the vaulted OAuth credential and reads the Gmail profile, then records only account, scope, and health metadata.
|
|
42290
42296
|
|
|
42297
|
+
\`integration.readiness\` / \`{{cli}} integration readiness --provider google --json\` / \`rost_check_integration_readiness\` returns the same setup checklist Settings shows: OAuth env and callback status, tenant connection state, granted scopes, latest test state, external verification/CASA caveats, handler availability, and the next Linear issue or action. The checklist is metadata-only. It never returns access tokens, refresh tokens, client secrets, vault refs, or raw provider responses.
|
|
42298
|
+
|
|
42291
42299
|
## One write-only credential flow across every surface
|
|
42292
42300
|
|
|
42293
42301
|
There is exactly one way to give a connected tool its credential, and it is the same on every surface (agent setup, Charter Builder, CLI, MCP). Connecting a tool only authorizes the access \u2014 it never captures a secret. When a connected tool needs a credential, you stage a vault-backed *request* (provider, scope, and a credential name \u2014 all labels, never the secret). You then provide the actual secret separately through the vault-backed ingress flow from Settings. No {{brand}} surface ever has a field that accepts raw secret material, so a secret can never reach a prompt, log, event, or tool argument.
|
|
@@ -42370,7 +42378,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
42370
42378
|
order: 48,
|
|
42371
42379
|
title: "CLI and MCP installation guide",
|
|
42372
42380
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42373
|
-
version: "2026-06-20.
|
|
42381
|
+
version: "2026-06-20.11",
|
|
42374
42382
|
public: true,
|
|
42375
42383
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42376
42384
|
stages: ["company_setup", "staffing"],
|
|
@@ -42409,7 +42417,11 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
42409
42417
|
"agent.fleet_digest",
|
|
42410
42418
|
"agent.get_run",
|
|
42411
42419
|
"agent.list_runs",
|
|
42412
|
-
"agent.list_tool_calls"
|
|
42420
|
+
"agent.list_tool_calls",
|
|
42421
|
+
"integration.list",
|
|
42422
|
+
"integration.readiness",
|
|
42423
|
+
"integration.status",
|
|
42424
|
+
"integration.test"
|
|
42413
42425
|
],
|
|
42414
42426
|
legal: {
|
|
42415
42427
|
publicRisk: "low",
|
|
@@ -42783,7 +42795,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
|
|
|
42783
42795
|
| \`{{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\` |
|
|
42784
42796
|
| \`{{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\` |
|
|
42785
42797
|
| \`{{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\` |
|
|
42786
|
-
| \`{{cli}} integration list|status|test\` | \`integration.list\`, \`integration.status\`, \`integration.test\` | List connector metadata, read one connector's health, and run the provider-specific connection test without exposing credentials. | Tenant | \`{{cli}} integration
|
|
42798
|
+
| \`{{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\` |
|
|
42787
42799
|
| \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
|
|
42788
42800
|
| \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
|
|
42789
42801
|
| \`{{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. 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\` |
|
|
@@ -42917,6 +42929,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42917
42929
|
| \`rost_send_test_notification\` | \`notification.test\` | Emit an in-app test notification to the acting human. | Tenant | Call with \`{}\`. |
|
|
42918
42930
|
| \`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\`. |
|
|
42919
42931
|
| \`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. |
|
|
42932
|
+
| \`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. |
|
|
42920
42933
|
| \`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>"}\`. |
|
|
42921
42934
|
| \`rost_test_integration_connection\` | \`integration.test\` | Run the provider-specific connection test and update integration health. | Tenant | Call with \`{"provider":"google"}\`; result is bounded metadata only. |
|
|
42922
42935
|
| \`rost_invite_member\` | \`member.invite\` | Create a pending tenant invite for a human teammate. | Tenant | Call with \`email\` and \`role\`. |
|
|
@@ -43144,7 +43157,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
|
|
|
43144
43157
|
order: 60,
|
|
43145
43158
|
title: "Cascade guide",
|
|
43146
43159
|
summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
|
|
43147
|
-
version: "2026-06-20.
|
|
43160
|
+
version: "2026-06-20.2",
|
|
43148
43161
|
public: true,
|
|
43149
43162
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43150
43163
|
stages: ["operating_rhythm"],
|
|
@@ -43197,6 +43210,10 @@ Cascade warnings are advisory, not blockers. They point to setup that should be
|
|
|
43197
43210
|
- Agent goal missing human accountability parent: an agent-owned goal has no human or hybrid goal in its ancestry.
|
|
43198
43211
|
- Orphaned goal branch: the owner seat or parent chain no longer reaches an active Compass objective.
|
|
43199
43212
|
|
|
43213
|
+
On \`/cascade\`, the screen renders the full goal depth, not just one or two levels. Off-track descendant branches stay open so the operator can see why a parent rolled up to risk.
|
|
43214
|
+
|
|
43215
|
+
On human and function seat pages, goal visibility includes both direct goals and descendant seat goals from the Responsibility Graph subtree, so a manager can review team progress without double-owning the agent's work.
|
|
43216
|
+
|
|
43200
43217
|
## What does not belong
|
|
43201
43218
|
|
|
43202
43219
|
Do not put every task into Cascade. Small errands, private notes, and work with no strategic connection should stay out. Cascade should answer whether the company is moving toward its stated outcomes.
|
|
@@ -43288,7 +43305,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
43288
43305
|
order: 62,
|
|
43289
43306
|
title: "Friction guide",
|
|
43290
43307
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
43291
|
-
version: "2026-06-
|
|
43308
|
+
version: "2026-06-20.1",
|
|
43292
43309
|
public: true,
|
|
43293
43310
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43294
43311
|
stages: ["operating_rhythm"],
|
|
@@ -43337,6 +43354,8 @@ Friction is where operational issues become visible. A good Friction item is spe
|
|
|
43337
43354
|
|
|
43338
43355
|
Agents should file Friction when a measurable breaks, a tool fails, a repeated exception appears, or the Charter says a condition must be escalated. The agent should attach evidence and avoid deciding beyond its scope.
|
|
43339
43356
|
|
|
43357
|
+
In the app, operational evidence is summarized for humans instead of shown as the primary interface. Incident fields, proposed tool calls, schedules, payload labels, and source links render as readable fields with raw details tucked behind supporting context when useful. Secret-shaped values stay redacted.
|
|
43358
|
+
|
|
43340
43359
|
## Operate Friction, tasks, and escalations from CLI or MCP
|
|
43341
43360
|
|
|
43342
43361
|
Friction, tasks, and escalations are the issue-to-action loop. A seat files, a task carries the work, and an escalation routes a decision a seat cannot make alone.
|
|
@@ -43358,7 +43377,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
43358
43377
|
order: 70,
|
|
43359
43378
|
title: "Steward queue guide",
|
|
43360
43379
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
43361
|
-
version: "2026-06-
|
|
43380
|
+
version: "2026-06-20.1",
|
|
43362
43381
|
public: true,
|
|
43363
43382
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43364
43383
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43395,6 +43414,8 @@ Read the seat, Charter, evidence, and recommended action. Decide the narrow ques
|
|
|
43395
43414
|
|
|
43396
43415
|
In the app, the evidence is shown as a legible card, not raw data: a proposed tool call lists the tool and its summarized arguments, and any attached context shows as labeled fields. Values that read like credentials are redacted, so you can decide without seeing secret material.
|
|
43397
43416
|
|
|
43417
|
+
When nothing is waiting, the Steward page still proves the governance loop. It shows which agent or hybrid seats the human stewards, how many escalations were raised or decided recently, and whether any are open. That empty state is an operating summary, not a dead end.
|
|
43418
|
+
|
|
43398
43419
|
## Work the queue from CLI or MCP
|
|
43399
43420
|
|
|
43400
43421
|
The Steward reads the queue from any surface but decides as a human.
|
|
@@ -43471,11 +43492,11 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
|
|
|
43471
43492
|
order: 72,
|
|
43472
43493
|
title: "Settings guide",
|
|
43473
43494
|
summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
|
|
43474
|
-
version: "2026-06-20.
|
|
43495
|
+
version: "2026-06-20.7",
|
|
43475
43496
|
public: true,
|
|
43476
43497
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43477
43498
|
stages: ["company_setup", "staffing"],
|
|
43478
|
-
relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "integration.list", "integration.status", "integration.test", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update"],
|
|
43499
|
+
relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "integration.list", "integration.readiness", "integration.status", "integration.test", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update"],
|
|
43479
43500
|
legal: { publicRisk: "low", notes: ["{{brand}}-native settings guidance."] },
|
|
43480
43501
|
sources: [
|
|
43481
43502
|
{
|
|
@@ -43505,11 +43526,11 @@ Start with members and invites, then provider and channel connections, then MCP
|
|
|
43505
43526
|
|
|
43506
43527
|
Settings lifecycle timestamps are display metadata for tokens, connected machines, integrations, and stored credentials. They may be emitted by the database as either timestamp values or strings, but Settings renders them as safe labels rather than treating timestamp formatting failures as page-level failures.
|
|
43507
43528
|
|
|
43508
|
-
When a settings source is temporarily unavailable, the app keeps the route open and marks affected sections as unavailable instead of showing raw errors or stale-looking editable values. Budget and Sync Brief controls stay read-only until their server-backed data can be loaded.
|
|
43529
|
+
When a settings source is temporarily unavailable, the app keeps the route open and marks affected sections as unavailable instead of showing raw errors or stale-looking editable values. Budget and Sync Brief controls stay read-only until their server-backed data can be loaded. Notification timestamps and integration test timestamps follow the same safe-label rule, so a malformed or missing timestamp becomes \`Unknown\` or unavailable copy rather than a page crash.
|
|
43509
43530
|
|
|
43510
43531
|
## Integration health
|
|
43511
43532
|
|
|
43512
|
-
\`integration.list\` lists connector metadata for CLI and MCP operators, \`integration.status\` reads one provider or integration id, and \`integration.test\` runs the installed provider-specific health check. These commands return account labels, scopes, capabilities, timestamps, and health only; they never return vault references, access tokens, refresh tokens, or raw provider responses. Google's test refreshes the vaulted OAuth credential and reads the Gmail profile as the minimal live check. Settings exposes the same Google
|
|
43533
|
+
\`integration.list\` lists connector metadata for CLI and MCP operators, \`integration.readiness\` returns the setup checklist, \`integration.status\` reads one provider or integration id, and \`integration.test\` runs the installed provider-specific health check. These commands return account labels, scopes, capabilities, timestamps, checklist status, DER-coded next actions, and health only; they never return vault references, access tokens, refresh tokens, client secrets, or raw provider responses. Google's test refreshes the vaulted OAuth credential and reads the Gmail profile as the minimal live check. Settings exposes the same Google readiness facts and test action beside Connect/Reconnect, showing whether OAuth env, callback registration, tenant connection, scopes, tests, Google verification/CASA, and Gmail/Sheets handler slices are ready or still waiting on DER-880, DER-881, DER-866, DER-867, or DER-869.
|
|
43513
43534
|
|
|
43514
43535
|
Reconnects keep historical rows for audit, but provider status in Settings, CLI, and MCP prefers the current connected row first, then the latest error or disconnected row.
|
|
43515
43536
|
|
|
@@ -43772,7 +43793,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
|
|
|
43772
43793
|
order: 77,
|
|
43773
43794
|
title: "Troubleshooting guide",
|
|
43774
43795
|
summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
|
|
43775
|
-
version: "2026-06-
|
|
43796
|
+
version: "2026-06-20.1",
|
|
43776
43797
|
public: true,
|
|
43777
43798
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43778
43799
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -43805,10 +43826,12 @@ Before calling a command that changes state, discover its exact shape so you do
|
|
|
43805
43826
|
- Onboarding seems stuck: call \`onboarding.status\` / \`rost_onboard_status\` and inspect missing graph, Charter, Compass, or staffing steps.
|
|
43806
43827
|
- Graph looks wrong: read \`graph.get\` / \`rost://graph\` to confirm seat ids, parents, and occupancy before mutating.
|
|
43807
43828
|
- Agent cannot act: check the Charter, permission manifest, Steward chain, and token scope with \`agent.status\` / \`rost_get_agent_status\` and \`seat.get\`.
|
|
43829
|
+
- Agent looks incomplete: open the fleet row on \`/agents\` and follow the configuration readiness links for the missing Steward chain, lane/substrate, credentials, tools, model config, sandbox dry run, or go-live state.
|
|
43808
43830
|
- Signal looks wrong: read \`signal.list\` / \`rost_list_signals\` and check owner seat, cadence, target, and evidence.
|
|
43809
43831
|
- Friction is noisy: read \`friction.list\` and check whether the underlying Charter or measurable is unclear.
|
|
43810
43832
|
- Escalations are aging: read \`escalation.list\` / \`rost_list_escalations\`; a human resolves through the Steward queue.
|
|
43811
43833
|
- MCP access fails: revoke and recreate the narrowest token after checking scope (\`mcp_token.revoke\` then \`{{cli}} mcp install --client <client> --scope seat --seat-id <seat-id>\`; standalone \`mcp install\` requires an explicit \`--scope\`).
|
|
43834
|
+
- Settings section unavailable: keep the route open, read which section is marked unavailable, and retry or fix that source directly. Do not treat a missing Settings panel as permission to write blind values; budget and Sync Brief settings stay read-only until their data loads.
|
|
43812
43835
|
|
|
43813
43836
|
## Surface-specific failures
|
|
43814
43837
|
|
|
@@ -45775,6 +45798,17 @@ var integrationWrapper = (context, args) => dispatch(context, "integration", arg
|
|
|
45775
45798
|
return integrations.map((entry) => formatIntegrationLine(asRecord(entry))).join("\n");
|
|
45776
45799
|
});
|
|
45777
45800
|
},
|
|
45801
|
+
readiness: (ctx, rest) => {
|
|
45802
|
+
const parsed = parseFlags(rest);
|
|
45803
|
+
const body = withOptional({}, { provider: optionalValue(parsed, "provider") });
|
|
45804
|
+
return execute(ctx, parsed, "integration.readiness", body, (output) => {
|
|
45805
|
+
const connectors = asArray(asRecord(output).connectors);
|
|
45806
|
+
if (connectors.length === 0) {
|
|
45807
|
+
return "No connector readiness facts found.";
|
|
45808
|
+
}
|
|
45809
|
+
return connectors.map((entry) => formatIntegrationReadiness(asRecord(entry))).join("\n\n");
|
|
45810
|
+
});
|
|
45811
|
+
},
|
|
45778
45812
|
status: (ctx, rest) => {
|
|
45779
45813
|
const parsed = parseFlags(rest);
|
|
45780
45814
|
const body = integrationLookupBody(parsed);
|
|
@@ -45808,9 +45842,24 @@ function integrationLookupBody(parsed) {
|
|
|
45808
45842
|
function formatIntegrationLine(record2) {
|
|
45809
45843
|
return `${field(record2, "provider")} status=${field(record2, "status")} account=${field(record2, "account_email")} last_test=${field(record2, "last_test_result")} id=${field(record2, "id")}`;
|
|
45810
45844
|
}
|
|
45845
|
+
function formatIntegrationReadiness(record2) {
|
|
45846
|
+
const checks = asArray(record2.checks).map((entry) => {
|
|
45847
|
+
const check2 = asRecord(entry);
|
|
45848
|
+
const issue2 = field(check2, "linear_issue") === "\u2014" ? "" : ` ${field(check2, "linear_issue")}`;
|
|
45849
|
+
return ` - ${field(check2, "label")}: ${field(check2, "status")}${issue2} \u2014 ${field(check2, "detail")}`;
|
|
45850
|
+
});
|
|
45851
|
+
const actions = asArray(record2.next_actions).map((entry) => ` - ${String(entry)}`);
|
|
45852
|
+
return [
|
|
45853
|
+
`${field(record2, "provider")} readiness=${field(record2, "overall_status")} id=${field(record2, "integration_id")}`,
|
|
45854
|
+
field(record2, "summary"),
|
|
45855
|
+
checks.length > 0 ? ["checks:", ...checks].join("\n") : "",
|
|
45856
|
+
actions.length > 0 ? ["next:", ...actions].join("\n") : ""
|
|
45857
|
+
].filter((line) => line.length > 0).join("\n");
|
|
45858
|
+
}
|
|
45811
45859
|
function integrationUsage(bin) {
|
|
45812
|
-
return `Usage: ${bin} integration list|status|test [--json]
|
|
45860
|
+
return `Usage: ${bin} integration list|readiness|status|test [--json]
|
|
45813
45861
|
${bin} integration list [--provider <name>]
|
|
45862
|
+
${bin} integration readiness [--provider google]
|
|
45814
45863
|
${bin} integration status --provider <name>
|
|
45815
45864
|
${bin} integration test --provider <name>`;
|
|
45816
45865
|
}
|