@rosthq/cli 0.5.12 → 0.5.14
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.d.ts.map +1 -1
- package/dist/index.js +113 -15
- package/dist/index.js.map +2 -2
- package/dist/operations.d.ts +1 -1
- package/dist/operations.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,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;AAYrE,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;CACvB,CAAC;AAEF,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,CA+LnG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,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;AAYrE,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;CACvB,CAAC;AAEF,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,CA+LnG;AAoZD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
|
package/dist/index.js
CHANGED
|
@@ -41896,7 +41896,7 @@ No orphan agents. No raw secrets in prompts, logs, or tool arguments. No durable
|
|
|
41896
41896
|
order: 41,
|
|
41897
41897
|
title: "Add agents to your Responsibility Graph",
|
|
41898
41898
|
summary: "The visual journey for adding an agent seat: where to start, choosing a mode, placing the seat, naming a Steward, setup, the safety gates, and go-live.",
|
|
41899
|
-
version: "2026-06-
|
|
41899
|
+
version: "2026-06-20.1",
|
|
41900
41900
|
public: true,
|
|
41901
41901
|
audiences: ["human", "in_app_agent"],
|
|
41902
41902
|
stages: ["staffing"],
|
|
@@ -42051,7 +42051,7 @@ The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provide
|
|
|
42051
42051
|
order: 80,
|
|
42052
42052
|
title: "Sync rhythm playbook",
|
|
42053
42053
|
summary: "How Signal, Friction, Cascade, and Sync Briefs turn weekly meetings into decision time.",
|
|
42054
|
-
version: "2026-06-
|
|
42054
|
+
version: "2026-06-20.1",
|
|
42055
42055
|
public: true,
|
|
42056
42056
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42057
42057
|
stages: ["operating_rhythm"],
|
|
@@ -42217,11 +42217,11 @@ Review the first dry runs, fleet overview, tool-call audit rows, escalations, an
|
|
|
42217
42217
|
order: 46,
|
|
42218
42218
|
title: "Tool access and vault",
|
|
42219
42219
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42220
|
-
version: "2026-06-20.
|
|
42220
|
+
version: "2026-06-20.4",
|
|
42221
42221
|
public: true,
|
|
42222
42222
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42223
42223
|
stages: ["staffing"],
|
|
42224
|
-
relatedCommandIds: ["charter.sign_manifest", "credential.ingress", "agent.configure_tools", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "confirmation.approve"],
|
|
42224
|
+
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"],
|
|
42225
42225
|
legal: {
|
|
42226
42226
|
publicRisk: "low",
|
|
42227
42227
|
notes: [
|
|
@@ -42265,6 +42265,12 @@ For an API with no dedicated connector, the generic REST tool lets a seat call a
|
|
|
42265
42265
|
|
|
42266
42266
|
\`slack.post_message\` reuses the connected Slack workspace credential and the seat's Slack channel binding. A live call posts only to that bound channel, through the server-side guard and vault-bound bot token. If the bound channel is marked sensitive, the handler escalates for human approval instead of posting. A sandbox dry run makes no Slack request and does not open the vault.
|
|
42267
42267
|
|
|
42268
|
+
## Google connector status
|
|
42269
|
+
|
|
42270
|
+
Google can be connected from Settings once the workspace OAuth app is configured. The connection flow requests offline access for Gmail read/compose and Sheets, stores the returned credential in the vault, and records only account and scope metadata in the integration row. The test action refreshes the vaulted credential and performs a minimal Gmail profile read. Gmail and Sheets agent tools remain configuration-only until their guarded handlers ship; connecting Google does not by itself let an agent read mail or edit a sheet.
|
|
42271
|
+
|
|
42272
|
+
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.
|
|
42273
|
+
|
|
42268
42274
|
## One write-only credential flow across every surface
|
|
42269
42275
|
|
|
42270
42276
|
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.
|
|
@@ -42280,6 +42286,7 @@ There is exactly one way to give a connected tool its credential, and it is the
|
|
|
42280
42286
|
## Connect tools and credentials from CLI or MCP
|
|
42281
42287
|
|
|
42282
42288
|
- Stage tools on a draft agent: \`agent.configure_tools\` / \`rost_configure_agent_tools\` \u2014 connect or decline proposed tools and stage credential-ingress requests. Pass vault references, never raw secret material.
|
|
42289
|
+
- Inspect connector readiness: \`integration.list\` / \`rost_list_integrations\`, \`integration.status\` / \`rost_get_integration_status\`, and \`integration.test\` / \`rost_test_integration_connection\` return provider metadata and health only.
|
|
42283
42290
|
- Store a secret: \`credential.ingress\` / \`rost_store_credential\` (scope: seat) persists only a vault reference. \`credential.ingress\` is \`credential_flow\` \u2014 it returns a pending confirmation and runs only with a real human-provided secret, captured as a vault reference. (Because it redacts that secret, the pending confirmation also shows a high-risk badge \u2014 see the confirmations guide for badge-versus-level.)
|
|
42284
42291
|
- Sign the manifest: \`charter.sign_manifest\` / \`rost_sign_charter_manifest\` requests human confirmation for the seat's permission manifest.
|
|
42285
42292
|
- Mint local access: prefer \`{{cli}} mcp install\` for users; \`mcp_token.create\` is \`human_required\` and returns the token once. List metadata with \`mcp_token.list\` (never token material); revoke with \`mcp_token.revoke\`.
|
|
@@ -42342,7 +42349,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
42342
42349
|
order: 48,
|
|
42343
42350
|
title: "CLI and MCP installation guide",
|
|
42344
42351
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42345
|
-
version: "2026-06-20.
|
|
42352
|
+
version: "2026-06-20.7",
|
|
42346
42353
|
public: true,
|
|
42347
42354
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42348
42355
|
stages: ["company_setup", "staffing"],
|
|
@@ -42411,7 +42418,7 @@ The MCP server is remote and token-backed. There is no local MCP daemon to insta
|
|
|
42411
42418
|
A headless agent cannot complete setup unattended. Two things always require a human, so plan to announce the handoff rather than stall silently:
|
|
42412
42419
|
|
|
42413
42420
|
- **Device-code approval at first login.** \`{{cli}} login --device\` prints a code; a human must open the workspace URL in a browser, sign in with Google, match the code, and approve.
|
|
42414
|
-
- **Durable gated commands.** Setting or approving a Charter, staffing a seat, and taking an agent live each
|
|
42421
|
+
- **Durable gated commands.** Setting or approving a Charter, staffing a seat, and taking an agent live each require a human approval boundary (an agent never approves its own request \u2014 see the confirmations-guide). In a **headless/agent** session, or over MCP, the command surfaces the \`confirmation_id\` and an \`approveVia\` URL for a human and stops. When a logged-in human runs \`{{cli}} command <id>\` from an **interactive TTY**, the official CLI completes that returned confirmation inline by calling \`confirmation.approve\` and printing the approved command output. (\`{{cli}} mcp install\` follows the same interactive rule for token minting, with \`--skip-permissions\` / \`{{envPrefix}}_CLI_SKIP_PERMISSIONS=1\` as an explicit headless loosening \u2014 see Approving the token mint below.)
|
|
42415
42422
|
|
|
42416
42423
|
Treat these as blocking prerequisites: the agent prepares the request and waits for the human approver.
|
|
42417
42424
|
|
|
@@ -42754,6 +42761,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
|
|
|
42754
42761
|
| \`{{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\` |
|
|
42755
42762
|
| \`{{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\` |
|
|
42756
42763
|
| \`{{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\` |
|
|
42764
|
+
| \`{{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 test --provider google --json\` |
|
|
42757
42765
|
| \`{{cli}} settings get|update\` | \`settings.get\`, \`settings.update\` | Read tenant settings; update budget caps. | Tenant | \`{{cli}} settings get --json\` |
|
|
42758
42766
|
| \`{{cli}} member invite|update|remove\` | \`member.invite\`, \`member.update\`, \`member.remove\` | Manage tenant members. | Tenant | \`{{cli}} member invite --email ops@example.com --role member\` |
|
|
42759
42767
|
| \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|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.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, 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 get-run --seat-id <seat-id> --run-id <run-id> --json\` |
|
|
@@ -42875,7 +42883,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42875
42883
|
| \`rost_list_mcp_tokens\` | \`mcp_token.list\` | List MCP token metadata (never token material). | Tenant | Call with \`{}\` or \`{"include_revoked":true}\`. |
|
|
42876
42884
|
| \`rost_list_runners\` | \`runner.list\` | List local runners and their online/offline/revoked state. | Tenant | Call with \`{}\`. |
|
|
42877
42885
|
| \`rost_runner_status\` | \`runner.status\` | Read a single runner's capability and state. | Tenant | Call with \`runner_id\`. |
|
|
42878
|
-
| \`rost_start_runner_pairing\` | \`runner.pairing.start\` | Open a runner pairing session and return the human pairing code. | Tenant | Call with \`name\` and \`platform
|
|
42886
|
+
| \`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. |
|
|
42879
42887
|
| \`rost_revoke_runner\` | \`runner.revoke\` | Revoke a runner so it can no longer authenticate. | Tenant | Call with \`runner_id\`; expect human confirmation. |
|
|
42880
42888
|
| \`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\`. |
|
|
42881
42889
|
| \`rost_enqueue_work_order\` | \`work_order.enqueue\` | Queue a work order for a live scheduled agent. | Tenant | Call with \`agent_id\`. |
|
|
@@ -42884,6 +42892,9 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
42884
42892
|
| \`rost_update_notification_settings\` | \`notification.settings.update\` | Update tenant notification preferences. | Tenant | Call with the fields to change. |
|
|
42885
42893
|
| \`rost_send_test_notification\` | \`notification.test\` | Emit an in-app test notification to the acting human. | Tenant | Call with \`{}\`. |
|
|
42886
42894
|
| \`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\`. |
|
|
42895
|
+
| \`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. |
|
|
42896
|
+
| \`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>"}\`. |
|
|
42897
|
+
| \`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. |
|
|
42887
42898
|
| \`rost_invite_member\` | \`member.invite\` | Create a pending tenant invite for a human teammate. | Tenant | Call with \`email\` and \`role\`. |
|
|
42888
42899
|
| \`rost_update_member_role\` | \`member.update\` | Change a tenant member's role. | Tenant | Call with \`member_id\` and \`role\`; expect human confirmation. |
|
|
42889
42900
|
| \`rost_remove_member\` | \`member.remove\` | Remove a tenant member. | Tenant | Call with \`member_id\`; blocked if it would orphan an agent steward chain. |
|
|
@@ -43360,7 +43371,7 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
43360
43371
|
order: 71,
|
|
43361
43372
|
title: "Confirmations and human gates guide",
|
|
43362
43373
|
summary: "How {{brand}} routes authority-changing work through human confirmation, and why agents never approve their own requests.",
|
|
43363
|
-
version: "2026-06-
|
|
43374
|
+
version: "2026-06-20.1",
|
|
43364
43375
|
public: true,
|
|
43365
43376
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43366
43377
|
stages: ["graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
@@ -43393,7 +43404,7 @@ The \`dangerous\` confirmation **level** is rare and is not the same as the **ri
|
|
|
43393
43404
|
|
|
43394
43405
|
## What a gated command returns over MCP
|
|
43395
43406
|
|
|
43396
|
-
A gated command does not mutate when an agent calls it. It returns a pending confirmation with the command id, a risk level, and an \`approveVia\` block containing a web URL and the exact \`{{cli}} command confirmation.approve --json ...\` line. The human approves through the web link or the CLI; the agent surfaces the link and stops.
|
|
43407
|
+
A gated command does not mutate when an agent calls it. It returns a pending confirmation with the command id, a risk level, and an \`approveVia\` block containing a web URL and the exact \`{{cli}} command confirmation.approve --json ...\` line. The human approves through the web link or the CLI; the agent surfaces the link and stops. A logged-in human at an interactive CLI can run their own gated \`{{cli}} command <id>\` without copy-pasting the approval command because the CLI completes the returned confirmation inline.
|
|
43397
43408
|
|
|
43398
43409
|
\`\`\`bash
|
|
43399
43410
|
# Human approves a pending confirmation
|
|
@@ -43415,11 +43426,11 @@ Stop before: approving a Charter, signing a manifest, connecting a tool or crede
|
|
|
43415
43426
|
order: 72,
|
|
43416
43427
|
title: "Settings guide",
|
|
43417
43428
|
summary: "How to use Settings as the control plane for company access, channels, providers, tokens, and operating defaults.",
|
|
43418
|
-
version: "2026-06-
|
|
43429
|
+
version: "2026-06-20.1",
|
|
43419
43430
|
public: true,
|
|
43420
43431
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43421
43432
|
stages: ["company_setup", "staffing"],
|
|
43422
|
-
relatedCommandIds: ["onboarding.create_invite", "mcp_token.create", "mcp_token.revoke", "mcp_token.list", "settings.get", "settings.update", "settings.sync_brief_scope.get", "settings.sync_brief_scope.update"],
|
|
43433
|
+
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"],
|
|
43423
43434
|
legal: { publicRisk: "low", notes: ["{{brand}}-native settings guidance."] },
|
|
43424
43435
|
sources: [
|
|
43425
43436
|
{
|
|
@@ -43447,6 +43458,10 @@ Start with members and invites, then provider and channel connections, then MCP
|
|
|
43447
43458
|
- Stored credentials (vault references only) and tool access approvals.
|
|
43448
43459
|
- Operating defaults, including Sync Brief scope.
|
|
43449
43460
|
|
|
43461
|
+
## Integration health
|
|
43462
|
+
|
|
43463
|
+
\`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.
|
|
43464
|
+
|
|
43450
43465
|
## Sync Brief scope
|
|
43451
43466
|
|
|
43452
43467
|
The weekly Sync Brief compiles either company-wide or per cluster. Company-wide is one brief covering the whole company and is the default for a new company. Per cluster compiles one brief per cluster, scoped to each cluster's seats; pick it when clusters run their own weekly sync. Per cluster falls back to a single company-wide brief when the company has no clusters, so the rhythm never produces zero briefs. The owner sets this at onboarding and can change it later in Settings.
|
|
@@ -43540,7 +43555,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
43540
43555
|
order: 75,
|
|
43541
43556
|
title: "Local runner guide",
|
|
43542
43557
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
43543
|
-
version: "2026-06-
|
|
43558
|
+
version: "2026-06-20.1",
|
|
43544
43559
|
public: true,
|
|
43545
43560
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43546
43561
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -43568,7 +43583,7 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
43568
43583
|
|
|
43569
43584
|
## Inspect and control runners from CLI or MCP
|
|
43570
43585
|
|
|
43571
|
-
- Pair a new runner: \`runner.pairing.start\` / \`rost_start_runner_pairing\` with \`name\` and \`platform\` returns a human pairing code.
|
|
43586
|
+
- 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.
|
|
43572
43587
|
- 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.
|
|
43573
43588
|
- 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\`.
|
|
43574
43589
|
- Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
|
|
@@ -43577,7 +43592,7 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
43577
43592
|
|
|
43578
43593
|
Use this flow when a headless or desktop runner cannot use the interactive web confirmation flow.
|
|
43579
43594
|
|
|
43580
|
-
1. The owner runs \`runner.pairing.start\` or \`rost_start_runner_pairing\` with the runner \`name\` and \`platform\`.
|
|
43595
|
+
1. The owner/admin runs \`runner.pairing.start\` or \`rost_start_runner_pairing\` with the runner \`name\` and \`platform\`.
|
|
43581
43596
|
2. The owner gives the returned \`user_code\` to the runner through a trusted out-of-band channel.
|
|
43582
43597
|
3. The runner calls \`POST /api/runner/pairing/claim\` with \`{"user_code":"ABCD-2345"}\`.
|
|
43583
43598
|
4. The response returns \`runner_id\`, \`runner_secret\`, \`name\`, and \`platform\`. Store the runner secret only on the runner machine.
|
|
@@ -43585,7 +43600,7 @@ Use this flow when a headless or desktop runner cannot use the interactive web c
|
|
|
43585
43600
|
|
|
43586
43601
|
## When to stop for confirmation
|
|
43587
43602
|
|
|
43588
|
-
\`runner.
|
|
43603
|
+
\`runner.pairing.start\`, \`work_order.enqueue\`, and \`agent.run_now\` are \`none\`, so they do not create a separate pending confirmation, but \`runner.pairing.start\` is still owner/admin-only at the command authorization layer. \`runner.revoke\` and \`work_order.cancel\` are \`human_required\`. List and status reads are not gated. Revoking a runner or cancelling work is the human-approved act. An agent inspects runner state and proposes the action.
|
|
43589
43604
|
|
|
43590
43605
|
## Guardrails
|
|
43591
43606
|
|
|
@@ -45697,6 +45712,57 @@ function notificationUsage(bin) {
|
|
|
45697
45712
|
${bin} notification test
|
|
45698
45713
|
${bin} notification errors [--limit <n>]`;
|
|
45699
45714
|
}
|
|
45715
|
+
var integrationWrapper = (context, args) => dispatch(context, "integration", args, {
|
|
45716
|
+
list: (ctx, rest) => {
|
|
45717
|
+
const parsed = parseFlags(rest);
|
|
45718
|
+
const body = withOptional({}, { provider: optionalValue(parsed, "provider") });
|
|
45719
|
+
return execute(ctx, parsed, "integration.list", body, (output) => {
|
|
45720
|
+
const integrations = asArray(asRecord(output).integrations);
|
|
45721
|
+
if (integrations.length === 0) {
|
|
45722
|
+
return "No integrations are connected.";
|
|
45723
|
+
}
|
|
45724
|
+
return integrations.map((entry) => formatIntegrationLine(asRecord(entry))).join("\n");
|
|
45725
|
+
});
|
|
45726
|
+
},
|
|
45727
|
+
status: (ctx, rest) => {
|
|
45728
|
+
const parsed = parseFlags(rest);
|
|
45729
|
+
const body = integrationLookupBody(parsed);
|
|
45730
|
+
return execute(ctx, parsed, "integration.status", body, (output) => {
|
|
45731
|
+
const integration = asRecord(output).integration;
|
|
45732
|
+
if (integration === null) {
|
|
45733
|
+
return "Integration not found.";
|
|
45734
|
+
}
|
|
45735
|
+
return formatIntegrationLine(asRecord(integration));
|
|
45736
|
+
});
|
|
45737
|
+
},
|
|
45738
|
+
test: (ctx, rest) => {
|
|
45739
|
+
const parsed = parseFlags(rest);
|
|
45740
|
+
const body = integrationLookupBody(parsed);
|
|
45741
|
+
return execute(ctx, parsed, "integration.test", body, (output) => {
|
|
45742
|
+
const record2 = asRecord(output);
|
|
45743
|
+
return `${field(record2, "provider")} ${field(record2, "status")} (ok=${field(record2, "ok")}) ${field(record2, "message")}`;
|
|
45744
|
+
});
|
|
45745
|
+
}
|
|
45746
|
+
}, integrationUsage(context.binName));
|
|
45747
|
+
function integrationLookupBody(parsed) {
|
|
45748
|
+
const body = withOptional({}, {
|
|
45749
|
+
provider: optionalValue(parsed, "provider"),
|
|
45750
|
+
integration_id: optionalValue(parsed, "integration-id")
|
|
45751
|
+
});
|
|
45752
|
+
if (Object.keys(body).length === 0) {
|
|
45753
|
+
throw new UsageError("Provide --provider or --integration-id.");
|
|
45754
|
+
}
|
|
45755
|
+
return body;
|
|
45756
|
+
}
|
|
45757
|
+
function formatIntegrationLine(record2) {
|
|
45758
|
+
return `${field(record2, "provider")} status=${field(record2, "status")} account=${field(record2, "account_email")} last_test=${field(record2, "last_test_result")} id=${field(record2, "id")}`;
|
|
45759
|
+
}
|
|
45760
|
+
function integrationUsage(bin) {
|
|
45761
|
+
return `Usage: ${bin} integration list|status|test [--json]
|
|
45762
|
+
${bin} integration list [--provider <name>]
|
|
45763
|
+
${bin} integration status --provider <name>
|
|
45764
|
+
${bin} integration test --provider <name>`;
|
|
45765
|
+
}
|
|
45700
45766
|
var settingsWrapper = (context, args) => dispatch(context, "settings", args, {
|
|
45701
45767
|
get: (ctx, rest) => {
|
|
45702
45768
|
const parsed = parseFlags(rest);
|
|
@@ -46060,6 +46126,7 @@ var OPERATION_GROUPS = [
|
|
|
46060
46126
|
"sync",
|
|
46061
46127
|
"runner",
|
|
46062
46128
|
"notification",
|
|
46129
|
+
"integration",
|
|
46063
46130
|
"settings",
|
|
46064
46131
|
"member",
|
|
46065
46132
|
"agent",
|
|
@@ -46078,6 +46145,7 @@ var wrappers = {
|
|
|
46078
46145
|
sync: syncWrapper,
|
|
46079
46146
|
runner: runnerWrapper,
|
|
46080
46147
|
notification: notificationWrapper,
|
|
46148
|
+
integration: integrationWrapper,
|
|
46081
46149
|
settings: settingsWrapper,
|
|
46082
46150
|
member: memberWrapper,
|
|
46083
46151
|
agent: agentWrapper,
|
|
@@ -46099,6 +46167,7 @@ var groupUsageBuilders = {
|
|
|
46099
46167
|
sync: syncUsage,
|
|
46100
46168
|
runner: runnerUsage,
|
|
46101
46169
|
notification: notificationUsage,
|
|
46170
|
+
integration: integrationUsage,
|
|
46102
46171
|
settings: settingsUsage,
|
|
46103
46172
|
member: memberUsage,
|
|
46104
46173
|
agent: agentUsage,
|
|
@@ -46616,9 +46685,38 @@ async function printCommandOutput(io, client, commandId, body = {}, format, opti
|
|
|
46616
46685
|
`);
|
|
46617
46686
|
return 0;
|
|
46618
46687
|
} catch (error51) {
|
|
46688
|
+
if (io.interactive === true) {
|
|
46689
|
+
const pending = pendingConfirmationFromError(error51);
|
|
46690
|
+
if (pending && pending.commandId === commandId) {
|
|
46691
|
+
io.stderr.write(`Approving ${pending.commandId} confirmation ${pending.confirmationId} as the interactive CLI user.
|
|
46692
|
+
`);
|
|
46693
|
+
try {
|
|
46694
|
+
const approved = await client.execute("confirmation.approve", { confirmation_id: pending.confirmationId });
|
|
46695
|
+
const approvedOutput = asRecord2(approved.output).output ?? approved.output;
|
|
46696
|
+
const rendered = format ? format(approvedOutput) : JSON.stringify(approvedOutput, null, 2);
|
|
46697
|
+
io.stdout.write(`${rendered}
|
|
46698
|
+
`);
|
|
46699
|
+
return 0;
|
|
46700
|
+
} catch (approvalError) {
|
|
46701
|
+
return printCommandError(io, approvalError);
|
|
46702
|
+
}
|
|
46703
|
+
}
|
|
46704
|
+
}
|
|
46619
46705
|
return printCommandError(io, error51);
|
|
46620
46706
|
}
|
|
46621
46707
|
}
|
|
46708
|
+
function pendingConfirmationFromError(error51) {
|
|
46709
|
+
if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
|
|
46710
|
+
return null;
|
|
46711
|
+
}
|
|
46712
|
+
const details = asRecord2(error51.response.error.details);
|
|
46713
|
+
const confirmationId = details.confirmationId;
|
|
46714
|
+
const commandId = details.commandId;
|
|
46715
|
+
if (typeof confirmationId !== "string" || confirmationId.length === 0 || typeof commandId !== "string" || commandId.length === 0) {
|
|
46716
|
+
return null;
|
|
46717
|
+
}
|
|
46718
|
+
return { confirmationId, commandId };
|
|
46719
|
+
}
|
|
46622
46720
|
function printCommandError(io, error51) {
|
|
46623
46721
|
if (error51 instanceof CommandClientError && error51.response && !error51.response.ok) {
|
|
46624
46722
|
const help = error51.response.error.help;
|