@rosthq/cli 0.5.29 → 0.5.31
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 +85 -45
- package/dist/index.js.map +3 -3
- package/dist/signup.d.ts +8 -2
- package/dist/signup.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;AAerE,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,
|
|
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;AAerE,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,CAmPnG;AA6cD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
|
package/dist/index.js
CHANGED
|
@@ -41758,7 +41758,7 @@ When operating through CLI or MCP, create fewer seats first and ask for confirma
|
|
|
41758
41758
|
order: 30,
|
|
41759
41759
|
title: "Charter design playbook",
|
|
41760
41760
|
summary: "How to draft strong Charters that work for human, agent, and hybrid seats.",
|
|
41761
|
-
version: "2026-06-
|
|
41761
|
+
version: "2026-06-30.1",
|
|
41762
41762
|
public: true,
|
|
41763
41763
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
41764
41764
|
stages: ["charter_design", "staffing"],
|
|
@@ -41815,7 +41815,9 @@ List and read first, then draft, then leave activation to a human.
|
|
|
41815
41815
|
- Draft one: \`{{cli}} command charter.draft --json '{"seat_id":"<seat-id>"}'\` (scope: seat or tenant-admin); draft every eligible seat with \`charter.draft_all\` / \`rost_draft_all_charters\`. Draft commands are not gated \u2014 they produce a draft \`charter_version_id\`. \`charter.draft_all\` only drafts **active** seats and returns the real result: \`{ drafted, skipped, draft_ids, skipped_seats: [{ seat_id, reason }] }\` where \`reason\` is \`seat_not_active\` (the seat is still draft/vacant \u2014 confirm it first) or \`charter_exists\` (it already has a draft/active Charter). Read \`skipped_seats\` to see why a freshly-built graph drafted fewer Charters than it has seats.
|
|
41816
41816
|
- Edit a draft: \`charter.update_draft\` / \`rost_update_charter_draft\` with the \`charter_version_id\` and the new \`doc\`.
|
|
41817
41817
|
|
|
41818
|
-
In the app, \`/charters\` is both a drafting queue and a governance library. It shows active Charters, draft amendments, seats missing Charters, unsigned manifests, and steward-review gaps. Opening a live Charter is a review mode: read the active version, inspect its governance state, and open an amendment draft when the job needs to change. Active Charter content is never silently edited in place.
|
|
41818
|
+
In the app, \`/charters\` is both a drafting queue and a governance library. It shows active Charters, draft amendments, seats missing Charters, unsigned manifests, and steward-review gaps. \`/charters/builder\` is the seat picker for Charter Builder: start there when you need to draft a missing Charter, continue an amendment, or review which seats are still missing operating contracts. Opening a live Charter is a review mode: read the active version, inspect its governance state, and open an amendment draft when the job needs to change. Active Charter content is never silently edited in place.
|
|
41819
|
+
|
|
41820
|
+
Daily and weekly measurable rows can carry Signal metadata: unit, numeric target, direction, cadence, and source. When a human approves a Charter, those structured measurables materialize into tenant Signal definitions for that seat. Free-text, monthly, and quarterly measurable prose remains accountability text until a human converts it into a supported structured Signal or creates the Signal separately.
|
|
41819
41821
|
|
|
41820
41822
|
## When to stop for confirmation
|
|
41821
41823
|
|
|
@@ -42071,7 +42073,7 @@ The dry run is a real sandbox rehearsal, not a stamp. It executes a mock-provide
|
|
|
42071
42073
|
order: 80,
|
|
42072
42074
|
title: "Sync rhythm playbook",
|
|
42073
42075
|
summary: "How Signal, Friction, Cascade, and Sync Briefs turn weekly meetings into decision time.",
|
|
42074
|
-
version: "2026-06-
|
|
42076
|
+
version: "2026-06-30.1",
|
|
42075
42077
|
public: true,
|
|
42076
42078
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42077
42079
|
stages: ["operating_rhythm"],
|
|
@@ -42119,7 +42121,7 @@ The Sync Brief should answer:
|
|
|
42119
42121
|
|
|
42120
42122
|
On screen the brief reads in plain terms: Signal exceptions, goal progress, task review, ranked Friction, and agent activity. Where a section has no source data, it lists gaps to confirm \u2014 the missing inputs a human should know about before the meeting \u2014 rather than a blank section.
|
|
42121
42123
|
|
|
42122
|
-
Before the first brief exists, the Sync pages are readiness views. They show the next scheduled compile and the source areas that will feed it: Signal, Cascade, Tasks, Friction, and Agents. Use those links to add
|
|
42124
|
+
Before the first brief exists, the Sync pages are readiness views. They show the next scheduled compile and the source areas that will feed it: Signal, Cascade, Tasks, Friction, and Agents. Use those links to add missing source data, or use Compile now to run the same idempotent persisted compile operation immediately when the company uses company-wide Sync Briefs. If the company is configured for per-cluster briefs, compile the target cluster from CLI or MCP with a cluster id until the UI offers a cluster selector. Once a brief exists, the page shows whether it covers the current period, when it was compiled, and which sections were omitted or compiled with gaps.
|
|
42123
42125
|
|
|
42124
42126
|
The same readiness model appears around the meeting loop. Steward shows the governance loop even when no decision is waiting: which agent seats are stewarded, how many escalations are open, and recent raised/decided counts. Tasks explains when nothing is due and points to recently completed or agent-blocked work when it exists. The agent fleet shows configuration completeness per staffed agent seat \u2014 steward chain, lane/trigger/substrate, credentials, tools, model, dry run, and go-live \u2014 with links to the exact setup surface rather than a generic action button.
|
|
42125
42127
|
|
|
@@ -42257,7 +42259,7 @@ Use the lower-level commands after health names a finding: \`agent.get_run\` for
|
|
|
42257
42259
|
order: 46,
|
|
42258
42260
|
title: "Tool access and vault",
|
|
42259
42261
|
summary: "How to give agents access to tools without exposing raw credentials or expanding authority by accident.",
|
|
42260
|
-
version: "2026-06-
|
|
42262
|
+
version: "2026-06-30.1",
|
|
42261
42263
|
public: true,
|
|
42262
42264
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42263
42265
|
stages: ["staffing"],
|
|
@@ -42307,15 +42309,15 @@ For an API with no dedicated connector, the generic REST tool lets a seat call a
|
|
|
42307
42309
|
|
|
42308
42310
|
## Gmail connector
|
|
42309
42311
|
|
|
42310
|
-
The native Gmail handlers run inside the same broker boundary as the REST and Slack connectors: every call passes the server guard and writes an audit row, and the vaulted Google OAuth token is bound only inside a credential closure \u2014 the agent never sees it, and both the access and refresh tokens are redacted from anything a handler returns. \`gmail.read\` (read scoped inbox) and \`gmail.draft\` (compose a draft, never send) are autonomous-eligible. \`gmail.send\` is approval-gated: it never sends autonomously \u2014 it holds the action for steward approval. A sandbox dry run previews the intended read/draft/held-send with no Gmail request and without opening the vault. Live external Gmail send stays gated on Google verification and domain cutover (DER-880 / DER-881)
|
|
42312
|
+
The native Gmail handlers run inside the same broker boundary as the REST and Slack connectors: every call passes the server guard and writes an audit row, and the vaulted Google OAuth token is bound only inside a credential closure \u2014 the agent never sees it, and both the access and refresh tokens are redacted from anything a handler returns. \`gmail.read\` (read scoped inbox) and \`gmail.draft\` (compose a draft, never send) are autonomous-eligible when a tenant has a connected Google credential. \`gmail.send\` is approval-gated: it never sends autonomously \u2014 it holds the action for steward approval. A sandbox dry run previews the intended read/draft/held-send with no Gmail request and without opening the vault. For partner demos before Google verification is complete, use sandbox dry runs, setup previews, and approval-held examples as the demo-safe substitute. Live external Gmail send stays gated on Google verification and domain cutover (DER-880 / DER-881).
|
|
42311
42313
|
|
|
42312
42314
|
## Google connector status
|
|
42313
42315
|
|
|
42314
|
-
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 read/draft, bounded Sheets read, and approval-held Sheets write handlers
|
|
42316
|
+
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 read/draft, bounded Sheets read, and approval-held Sheets write handlers run through the guarded broker when Google is connected; connecting Google still does not bypass the signed Charter manifest, tenant policy ceiling, credential vault, or tool-call audit. Sheet grants should use exact signed argument bindings for approved spreadsheet ids and ranges.
|
|
42315
42317
|
|
|
42316
42318
|
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.
|
|
42317
42319
|
|
|
42318
|
-
\`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.
|
|
42320
|
+
\`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, the demo-safe partner path, 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.
|
|
42319
42321
|
|
|
42320
42322
|
## One write-only credential flow across every surface
|
|
42321
42323
|
|
|
@@ -42346,7 +42348,7 @@ There is exactly one way to give a connected tool its credential, and it is the
|
|
|
42346
42348
|
order: 47,
|
|
42347
42349
|
title: "Available tools guide",
|
|
42348
42350
|
summary: "How to think about tool categories available to seats and what each category should be used for.",
|
|
42349
|
-
version: "2026-06-
|
|
42351
|
+
version: "2026-06-30.1",
|
|
42350
42352
|
public: true,
|
|
42351
42353
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42352
42354
|
stages: ["staffing"],
|
|
@@ -42392,14 +42394,14 @@ Agents should explain the job, the required tool category, the minimum permissio
|
|
|
42392
42394
|
|
|
42393
42395
|
Every tool call passes the server-side guard first: the guard checks the call against the seat's signed permission manifest and records a tool-call audit row for **every** call \u2014 allowed, denied, or escalated. Tool selection is never authorization. Only an allowed call reaches its handler. A connected credential is bound into the handler for the duration of the call only; the secret never appears in the result, the audit summary, logs, or the model's context.
|
|
42394
42396
|
|
|
42395
|
-
External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST connector when a signed host/method/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel, and Google handlers for \`gmail.read\`, \`gmail.draft\`, \`sheets.read\`, and approval-held \`sheets.write\` when Google is connected. \`gmail.send\` remains held for approval and live external send stays gated on Google verification. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
|
|
42397
|
+
External connectors are being rolled out provider by provider, conservatively (read and draft before send; write behind approval). A selected tool is only a permission until a live handler exists and the seat has the required credential or binding. Today the built-in execution path supports internal status reporting, the generic REST connector when a signed host/method/path allowlist and credential exist, \`slack.post_message\` for a bound Slack channel, and Google handlers for \`gmail.read\`, \`gmail.draft\`, \`sheets.read\`, and approval-held \`sheets.write\` when Google is connected. \`gmail.send\` remains held for approval and live external send stays gated on Google verification. Before that verification is complete, partner demos should show sandbox dry runs, setup previews, and approval-held examples rather than claim production Google readiness. Other provider entries remain configuration-only until their connector ships, so nothing runs silently.`
|
|
42396
42398
|
},
|
|
42397
42399
|
{
|
|
42398
42400
|
slug: "mcp-and-cli-guide",
|
|
42399
42401
|
order: 48,
|
|
42400
42402
|
title: "CLI and MCP installation guide",
|
|
42401
42403
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
42402
|
-
version: "2026-06-
|
|
42404
|
+
version: "2026-06-30.2",
|
|
42403
42405
|
public: true,
|
|
42404
42406
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
42405
42407
|
stages: ["company_setup", "staffing"],
|
|
@@ -42522,9 +42524,9 @@ Commands below use angle-bracket placeholders. The CLI prints the real, fully-re
|
|
|
42522
42524
|
A {{brand}} **account** (the human identity) is created with Google sign-in \u2014 in the browser at \`/signup\`, or headlessly via \`{{cli}} login --device\` (a human approves the code in any browser). A **company** (tenant) can then be created either way:
|
|
42523
42525
|
|
|
42524
42526
|
- **Browser:** at \`/signup\`, name your company, then return to the CLI.
|
|
42525
|
-
- **Headless (no browser step):** once logged in, run \`{{cli}} signup --company "<name>"\`.
|
|
42527
|
+
- **Headless (no browser step):** once logged in, run \`{{cli}} signup --company "<name>"\`. If the account has no active company yet, this provisions the first company for your session and makes it active, so \`{{cli}} onboard status\` and every other tenant-scoped command work immediately. This is the recommended path for an autonomous agent setting up from scratch.
|
|
42526
42528
|
|
|
42527
|
-
If you run a tenant-scoped command before any company exists, the CLI tells you both options.
|
|
42529
|
+
If you run a tenant-scoped command before any company exists, the CLI tells you both options. \`{{cli}} signup --company\` is not a second-company creation command: running it again returns the active company, names the company you requested, and says that no new company was created. The default output is human-readable; add \`--json\` only when an automation needs the raw command output. To inspect or switch among companies you can already access, use \`{{cli}} tenants\` and \`{{cli}} use <tenant-slug-or-id>\`. Additional company creation is not exposed as a public self-serve CLI path in this milestone.
|
|
42528
42530
|
|
|
42529
42531
|
## Install the CLI
|
|
42530
42532
|
|
|
@@ -42788,7 +42790,7 @@ These are the security posture rules for operating after install \u2014 a checkl
|
|
|
42788
42790
|
| \`{{cli}} login\` | Open browser login and store the CLI session. | User session | \`{{cli}} login\` |
|
|
42789
42791
|
| \`{{cli}} login --device\` | Device-code login for a headless agent: prints a short code + URL, a human approves in any browser, the CLI polls until authorized \u2014 no browser session needed on the agent's machine. | User session | \`{{cli}} login --device\` |
|
|
42790
42792
|
| \`{{cli}} logout\` | Clear the local CLI session. | Local session | \`{{cli}} logout\` |
|
|
42791
|
-
| \`{{cli}} signup [--company "<name>"]\` | With no flag, open/print the web signup page. With \`--company\`,
|
|
42793
|
+
| \`{{cli}} signup [--company "<name>"] [--json]\` | With no flag, open/print the web signup page. With \`--company\`, bootstrap the first company headlessly for the logged-in session. If one is already active, it returns that company and says no new company was created. Add \`--json\` for machine-readable output. | Public (\`--company\` needs a login session) | \`{{cli}} signup --company "Acme"\` |
|
|
42792
42794
|
| \`{{cli}} whoami\` | Show the authenticated user, accessible tenant roles, and the active tenant (\`current_tenant_id\`). | User | \`{{cli}} whoami\` |
|
|
42793
42795
|
| \`{{cli}} tenants\` | List tenants the user can access; the active one is marked \`current\`. | User | \`{{cli}} tenants\` |
|
|
42794
42796
|
| \`{{cli}} use <tenant>\` | Select a tenant slug or id as the active tenant for the session. It persists, so a following \`{{cli}} whoami\` reports it as \`current_tenant_id\`. | User | \`{{cli}} use acme-ops\` |
|
|
@@ -42848,7 +42850,7 @@ The signed-in app exposes the same Skill command surface under **Skills** in the
|
|
|
42848
42850
|
| \`{{cli}} escalation list|get|resolve|reject\` | \`escalation.list\`, \`escalation.get\`, \`escalation.resolve\`, \`escalation.reject\` | Work the steward escalation queue. | Steward | \`{{cli}} escalation list --json\` |
|
|
42849
42851
|
| \`{{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"\` |
|
|
42850
42852
|
| \`{{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\` |
|
|
42851
|
-
| \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke|serve\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\`, runner endpoint APIs | Inspect
|
|
42853
|
+
| \`{{cli}} runner list|status|diagnose|repair|work-orders|revoke|serve\` | \`runner.list\`, \`runner.status\`, \`runner.diagnose\`, \`runner.repair\`, \`work_order.list\`, \`runner.revoke\`, runner endpoint APIs | Inspect heartbeat and execute-readiness evidence, inspect work orders, diagnose offline runners, get repair guidance, revoke a runner, or run the headless local runner loop. | Tenant | \`{{cli}} runner diagnose --runner-id <id> --json\`; \`{{cli}} runner serve --once\` |
|
|
42852
42854
|
| \`{{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\` |
|
|
42853
42855
|
| \`{{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\` |
|
|
42854
42856
|
| \`{{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\` |
|
|
@@ -43007,8 +43009,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
43007
43009
|
| \`rost_configure_agent_tools\` | \`agent.configure_tools\` | Connect or decline proposed tools and stage credential-ingress requests (vault refs only). | Seat or tenant-admin | Never send raw secrets; expect a credential confirmation. |
|
|
43008
43010
|
| \`rost_run_agent_dry_run\` | \`agent.run_dry_run\` | Run the sandbox dry run for a draft agent; durable and idempotent per Charter version. | Seat or tenant-admin | Call after the manifest is signed; ungated by human approval, but precondition-gated on a signed manifest. |
|
|
43009
43011
|
| \`rost_list_mcp_tokens\` | \`mcp_token.list\` | List MCP token metadata (never token material). | Tenant | Call with \`{}\` or \`{"include_revoked":true}\`. |
|
|
43010
|
-
| \`rost_list_runners\` | \`runner.list\` | List local runners and
|
|
43011
|
-
| \`rost_runner_status\` | \`runner.status\` | Read a single runner's capability and state. | Tenant | Call with \`runner_id\`. |
|
|
43012
|
+
| \`rost_list_runners\` | \`runner.list\` | List local runners with heartbeat health, execution readiness, queue counts, and recent result evidence. | Tenant | Call with \`{}\`. |
|
|
43013
|
+
| \`rost_runner_status\` | \`runner.status\` | Read a single runner's capability, heartbeat health, and execute-readiness state. | Tenant | Call with \`runner_id\`. |
|
|
43012
43014
|
| \`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. |
|
|
43013
43015
|
| \`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). |
|
|
43014
43016
|
| \`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. |
|
|
@@ -43554,7 +43556,7 @@ Retrieve the narrowest relevant guide before making a setup recommendation. Pref
|
|
|
43554
43556
|
order: 60,
|
|
43555
43557
|
title: "Cascade guide",
|
|
43556
43558
|
summary: "How to connect company goals to seat-level work without turning {{brand}} into a project-management tool.",
|
|
43557
|
-
version: "2026-06-
|
|
43559
|
+
version: "2026-06-30.1",
|
|
43558
43560
|
public: true,
|
|
43559
43561
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43560
43562
|
stages: ["operating_rhythm"],
|
|
@@ -43614,7 +43616,7 @@ On \`/cascade\`, the screen renders the full goal depth, not just one or two lev
|
|
|
43614
43616
|
|
|
43615
43617
|
## Goal progress and at-risk goals
|
|
43616
43618
|
|
|
43617
|
-
A goal can carry a quantified progress (0-100) distinct from its on/off/done status. Report it with \`goal.set_progress\`; when an agent reports progress it lands as a proposal a human approves before the goal moves. \`goal.list_at_risk\` projects which goals are off pace by comparing progress against the elapsed fraction of the cycle window (deterministic date math, no forecast model). Off-pace goals surface on \`/cascade\`, on the owner home, in the weekly Sync Brief, and as a weekly owner alert. Status-only goals (no progress recorded) are
|
|
43619
|
+
A goal can carry a quantified progress (0-100) distinct from its on/off/done status. Report it with \`goal.set_progress\`; when an agent reports progress it lands as a proposal a human approves before the goal moves. \`goal.list_at_risk\` projects which goals are off pace by comparing progress against the elapsed fraction of the cycle window (deterministic date math, no forecast model). Off-pace goals surface on \`/cascade\`, on the owner home, in the weekly Sync Brief, and as a weekly owner alert. Status-only goals (no progress recorded) are excluded from the projection and render as pending measurement, not as proven on track.
|
|
43618
43620
|
|
|
43619
43621
|
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.
|
|
43620
43622
|
|
|
@@ -43709,7 +43711,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
43709
43711
|
order: 62,
|
|
43710
43712
|
title: "Friction guide",
|
|
43711
43713
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
43712
|
-
version: "2026-06-
|
|
43714
|
+
version: "2026-06-29.1",
|
|
43713
43715
|
public: true,
|
|
43714
43716
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
43715
43717
|
stages: ["operating_rhythm"],
|
|
@@ -44076,7 +44078,7 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
44076
44078
|
order: 75,
|
|
44077
44079
|
title: "Local runner guide",
|
|
44078
44080
|
summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
|
|
44079
|
-
version: "2026-06-
|
|
44081
|
+
version: "2026-06-30.1",
|
|
44080
44082
|
public: true,
|
|
44081
44083
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44082
44084
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -44105,10 +44107,10 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
44105
44107
|
## Inspect and control runners from CLI or MCP
|
|
44106
44108
|
|
|
44107
44109
|
- 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.
|
|
44108
|
-
- Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows
|
|
44110
|
+
- Inspect: \`{{cli}} runner list --json\` / \`runner.list\` / \`rost_list_runners\` shows heartbeat state plus execution readiness. A runner is execute-ready only when it has a live heartbeat, a detected local Claude or Codex runtime, and recent claim/result evidence or active queue processing. \`{{cli}} runner status\` / \`runner.status\` / \`rost_runner_status\` reads one runner with the same execution detail, due queue count, claimed/running counts, and recent result timestamps.
|
|
44109
44111
|
- 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.
|
|
44110
44112
|
- 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).
|
|
44111
|
-
- 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\`.
|
|
44113
|
+
- Work orders: \`{{cli}} runner work-orders\` / \`work_order.list\` / \`rost_list_work_orders\`; queue with \`work_order.enqueue\` / \`rost_enqueue_work_order\` for a live scheduled agent, or use \`agent.run_now\` / \`rost_run_agent_now\` when an operator wants the product to queue and dispatch an immediate live run from a seat id; cancel with \`work_order.cancel\` / \`rost_cancel_work_order\`. The operator Settings page mirrors queued, claimed, running, and recent completed runner evidence so online does not imply can execute.
|
|
44112
44114
|
- Revoke: \`{{cli}} runner revoke\` / \`runner.revoke\` / \`rost_revoke_runner\` so a runner can no longer authenticate.
|
|
44113
44115
|
|
|
44114
44116
|
## Owner-initiated headless pairing
|
|
@@ -44120,6 +44122,7 @@ Use this flow when a headless or desktop runner cannot use the interactive web c
|
|
|
44120
44122
|
3. The runner calls \`POST /api/runner/pairing/claim\` with \`{"user_code":"ABCD-2345"}\`.
|
|
44121
44123
|
4. The response returns \`runner_id\`, \`runner_secret\`, \`name\`, and \`platform\`. Store the runner secret only on the runner machine.
|
|
44122
44124
|
5. The runner sends heartbeats with \`Authorization: Bearer <runner_secret>\` and then claims work orders.
|
|
44125
|
+
6. For a local smoke, run the headless runner in explicit one-shot execute mode: \`RUNNER_EXECUTE=1 RUNNER_ONCE=1 node apps/runner/scripts/headless-runner.mjs\`. It heartbeats once, claims at most one due read-only work order, reports the result, and exits nonzero if no executable work was claimed or result reporting failed. Without \`RUNNER_ONCE=1\`, the headless runner stays alive and continues heartbeating.
|
|
44123
44126
|
|
|
44124
44127
|
## When to stop for confirmation
|
|
44125
44128
|
|
|
@@ -44244,7 +44247,7 @@ Templates may draft. Humans approve. A stock agent should not go live until a hu
|
|
|
44244
44247
|
order: 77,
|
|
44245
44248
|
title: "Troubleshooting guide",
|
|
44246
44249
|
summary: "How users and agents should diagnose common setup, tool, Signal, Friction, and MCP problems.",
|
|
44247
|
-
version: "2026-06-
|
|
44250
|
+
version: "2026-06-29.1",
|
|
44248
44251
|
public: true,
|
|
44249
44252
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44250
44253
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -44283,6 +44286,7 @@ Before calling a command that changes state, discover its exact shape so you do
|
|
|
44283
44286
|
- Escalations are aging: read \`escalation.list\` / \`rost_list_escalations\`; a human resolves through the Steward queue.
|
|
44284
44287
|
- 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\`).
|
|
44285
44288
|
- 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.
|
|
44289
|
+
- Org-intake upload failed: read the safe parse status and reason, then ask the human for a better source file or continue by chat. Browser org intake accepts bounded CSV, text, PDF, DOCX, XLSX, PNG, and JPEG files; extraction failures are retryable and should not be worked around by pasting raw binary, stack traces, secrets, or full customer exports into a prompt.
|
|
44286
44290
|
|
|
44287
44291
|
## Surface-specific failures
|
|
44288
44292
|
|
|
@@ -44296,7 +44300,7 @@ Before calling a command that changes state, discover its exact shape so you do
|
|
|
44296
44300
|
|
|
44297
44301
|
These are the common blockers when adding an agent (see the add-agents guide and the custom agents guide):
|
|
44298
44302
|
|
|
44299
|
-
- Missing Steward: an agent occupancy or go-live is blocked because no Steward chain resolves to a human.
|
|
44303
|
+
- Missing Steward: an agent occupancy or go-live is blocked because no Steward chain resolves to a human. Use the inline steward-chain fix when the builder offers a human-occupied candidate, or name a human Steward on the seat, then retry. The no-orphan-agent rule is enforced server-side; do not route around it.
|
|
44300
44304
|
- Failed dry run: the draft is kept and the failure reason is shown. Read it with \`agent.status\` / \`rost_get_agent_status\`, fix the Charter, manifest, or tool decision, then \`agent.run_dry_run\` again. A passed dry run is required before go-live.
|
|
44301
44305
|
- Declined tool: declining a proposed tool updates the permission manifest and the dry-run task. If the agent then cannot complete the task, either grant a narrower tool or adjust the Charter so the work still routes safely or escalates.
|
|
44302
44306
|
- Expired confirmation: a pending human gate expired before approval. Re-issue the gated command (for example \`agent.create_from_template\`, \`charter.sign_manifest\`, or \`agent.go_live\`) and approve the new confirmation; an agent never approves its own request.
|
|
@@ -44316,7 +44320,7 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
|
|
|
44316
44320
|
order: 78,
|
|
44317
44321
|
title: "AI model data handling guide",
|
|
44318
44322
|
summary: "How {{brand}} cloud agents, local MCP sessions, runners, BYOK, and connected tools handle model-bound data.",
|
|
44319
|
-
version: "2026-06-
|
|
44323
|
+
version: "2026-06-29.1",
|
|
44320
44324
|
public: true,
|
|
44321
44325
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44322
44326
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -44341,27 +44345,27 @@ Name the failing surface, collect evidence, recommend the smallest correction, a
|
|
|
44341
44345
|
{
|
|
44342
44346
|
label: "OpenAI API data controls",
|
|
44343
44347
|
url: "https://developers.openai.com/api/docs/guides/your-data",
|
|
44344
|
-
note: "Official API data-use and retention controls verified 2026-06-
|
|
44348
|
+
note: "Official API data-use and retention controls verified 2026-06-29."
|
|
44345
44349
|
},
|
|
44346
44350
|
{
|
|
44347
44351
|
label: "OpenAI enterprise privacy",
|
|
44348
44352
|
url: "https://openai.com/enterprise-privacy/",
|
|
44349
|
-
note: "Official enterprise privacy and API retention summary verified 2026-06-
|
|
44353
|
+
note: "Official enterprise privacy and API retention summary verified 2026-06-29."
|
|
44350
44354
|
},
|
|
44351
44355
|
{
|
|
44352
44356
|
label: "OpenAI Codex with ChatGPT plan",
|
|
44353
44357
|
url: "https://help.openai.com/en/articles/11369540-using-codex-with-your-chatgpt-plan",
|
|
44354
|
-
note: "Official Codex plan data-control scope verified 2026-06-
|
|
44358
|
+
note: "Official Codex plan data-control scope verified 2026-06-29."
|
|
44355
44359
|
},
|
|
44356
44360
|
{
|
|
44357
44361
|
label: "Anthropic API and data retention",
|
|
44358
44362
|
url: "https://platform.claude.com/docs/en/manage-claude/api-and-data-retention",
|
|
44359
|
-
note: "Official Claude API ZDR, HIPAA, and retention scope verified 2026-06-
|
|
44363
|
+
note: "Official Claude API ZDR, HIPAA, and retention scope verified 2026-06-29."
|
|
44360
44364
|
},
|
|
44361
44365
|
{
|
|
44362
44366
|
label: "Claude Code data usage",
|
|
44363
44367
|
url: "https://code.claude.com/docs/en/data-usage",
|
|
44364
|
-
note: "Official local Claude Code data-flow, training, and retention summary verified 2026-06-
|
|
44368
|
+
note: "Official local Claude Code data-flow, training, and retention summary verified 2026-06-29."
|
|
44365
44369
|
},
|
|
44366
44370
|
{
|
|
44367
44371
|
label: "Reference corpus and docs spec",
|
|
@@ -44464,9 +44468,9 @@ If sensitive data appears by accident, stop, do not repeat it, and route cleanup
|
|
|
44464
44468
|
|
|
44465
44469
|
## Provider policy checkpoints
|
|
44466
44470
|
|
|
44467
|
-
For platform-managed \`cloud\` runs and BYOK Anthropic \`cloud\` runs, check the Anthropic account, workspace, model, and contract. As of 2026-06-
|
|
44471
|
+
For platform-managed \`cloud\` runs and BYOK Anthropic \`cloud\` runs, check the Anthropic account, workspace, model, and contract. As of 2026-06-29, official Anthropic Claude API documentation says retained API data is not used for model training without express permission, that some API features are ZDR-eligible while others are not, and that ZDR, HIPAA readiness, model-specific retention requirements, consumer products, Claude Code, and third-party integrations each have their own scope.
|
|
44468
44472
|
|
|
44469
|
-
For local OpenAI API-key clients running through \`mcp_session\` or \`runner\`, check the customer's OpenAI organization, project, endpoint, and API data controls. As of 2026-06-
|
|
44473
|
+
For local OpenAI API-key clients running through \`mcp_session\` or \`runner\`, check the customer's OpenAI organization, project, endpoint, and API data controls. As of 2026-06-29, official OpenAI API documentation says API data is not used to train or improve OpenAI models unless the customer explicitly opts in, and default abuse-monitoring logs may retain customer content for up to 30 days unless approved controls apply. OpenAI says zero data retention is available only for eligible customers, endpoints, and use cases.
|
|
44470
44474
|
|
|
44471
44475
|
For Codex specifically, first identify whether the operator is using Codex through a ChatGPT Free/Plus/Pro, Business, Enterprise, Edu, API, or other workspace path. Official OpenAI Codex help says ChatGPT training data controls apply to whether content processed through Codex may be used to improve OpenAI models when Codex is used with a ChatGPT plan, and that Pro and Plus conversations may be used unless training is disabled. Do not give a Codex user the OpenAI API answer unless they are actually using an API-governed Codex path.
|
|
44472
44476
|
|
|
@@ -44490,7 +44494,7 @@ When asked about AI data handling:
|
|
|
44490
44494
|
order: 79,
|
|
44491
44495
|
title: "Security model guide",
|
|
44492
44496
|
summary: "How {{brand}} protects tenant data, credentials, tool calls, and human decisions across web, MCP, CLI, and agents.",
|
|
44493
|
-
version: "2026-06-
|
|
44497
|
+
version: "2026-06-29.1",
|
|
44494
44498
|
public: true,
|
|
44495
44499
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
44496
44500
|
stages: ["company_setup", "staffing", "operating_rhythm"],
|
|
@@ -44921,7 +44925,7 @@ This worked document **omits** \`unanswered_boundaries\` and \`seat_type_recomme
|
|
|
44921
44925
|
order: 43,
|
|
44922
44926
|
title: "Agent builder guide",
|
|
44923
44927
|
summary: "The full agent setup sequence on the CLI/MCP path \u2014 seat, steward, job, boundaries, tools, credentials, model, schedule, dry-run, go-live \u2014 with the structured model config and access tiers.",
|
|
44924
|
-
version: "2026-06-
|
|
44928
|
+
version: "2026-06-29.1",
|
|
44925
44929
|
public: true,
|
|
44926
44930
|
audiences: ["cli", "mcp", "in_app_agent"],
|
|
44927
44931
|
stages: ["staffing"],
|
|
@@ -44969,13 +44973,15 @@ Building teams of controlled agent workers is the product's core differentiator.
|
|
|
44969
44973
|
3. **Job** \u2014 what the seat owns. On \`agent.create_custom\` this is the operational answers (what it owns, what success looks like, what it must never do alone); for a strong contract, submit the full Charter directly via \`charter.update_draft\` (see the charter-authoring deep-dive).
|
|
44970
44974
|
4. **Boundaries** \u2014 the Charter's \`decision_authority\` (can-do / must-ask / never / escalate), \`escalation_rules\`, and \`budget\`. Conservative by default: send/spend/irreversible actions are approval-gated or escalated.
|
|
44971
44975
|
5. **Tools** \u2014 pick from the discoverable catalog (\`{{cli}} tools list\`); each tool has a default scope tier and access policy. Connect or decline via \`agent.configure_tools\`. Selecting a tool records permission; live handlers execute later only behind the signed manifest, server guard, required credential or binding, and connector-specific approval boundary.
|
|
44972
|
-
6. **Credentials** \u2014 a tool that needs access declares a credential-ingress request (provider, scope, secret name). The secret itself flows through the vault-backed ingress command as a vault ref \u2014 never paste a secret into a builder command.
|
|
44976
|
+
6. **Credentials and provider readiness** \u2014 a tool that needs access declares a credential-ingress request (provider, scope, secret name). The secret itself flows through the vault-backed ingress command as a vault ref \u2014 never paste a secret into a builder command. For Google-backed tools, inspect the provider readiness shown in Settings or the builder: not connected, connected but untested, connected and tested, or failed. Use \`integration.test\` / \`rost_test_integration_connection\` or the builder Test connection action to refresh the same safe status facts; do not infer authorization from a connected credential.
|
|
44973
44977
|
7. **Operating instructions** \u2014 the runtime composes the agent's context from its Charter; you do not write a system prompt.
|
|
44974
44978
|
8. **Model** \u2014 select the structured model config (see below). Read \`{{cli}} model list\` / \`model.catalog\` first when you are unsure; it returns the recommended default, effort, token price estimates, cost band, and best-fit work for each tier. If \`agent.create_custom\` omits \`model_config\`, {{brand}} recommends a tier from the supplied responsibility answers.
|
|
44975
44979
|
9. **Heartbeat** \u2014 set the schedule (\`schedule_cron\`) for a recurring agent; a live scheduled agent must keep a steward chain.
|
|
44976
44980
|
10. **Dry-run** \u2014 \`agent.run_dry_run\` rehearses in sandbox after the manifest is signed; it is ungated by human approval but requires a signed manifest.
|
|
44977
44981
|
11. **Go-live** \u2014 \`agent.go_live\` is \`human_required\`. Prepare everything and surface the go-live to a human; never go live on a human's behalf.
|
|
44978
44982
|
|
|
44983
|
+
If \`agent_setup.get\` returns \`next_action: "set_steward"\`, use the returned steward-remediation candidates or choose an existing human-occupied seat with \`agent_setup.update --json '{"seat_id":"<agent-seat-id>","steward_seat_id":"<human-seat-id>"}'\`. If no human-occupied candidate exists, create or staff a human seat first. Do not bypass the no-orphan-agent guard; go-live remains blocked until the chain resolves to a person.
|
|
44984
|
+
|
|
44979
44985
|
## Choosing the model (structured config)
|
|
44980
44986
|
|
|
44981
44987
|
The agent's model is a structured object, not a bare string:
|
|
@@ -47611,7 +47617,7 @@ function formatSystemHealth(output) {
|
|
|
47611
47617
|
`signals: off_track=${field(signals, "off_track_count")} pending=${field(signals, "pending_count")}`,
|
|
47612
47618
|
`cascade: recommendations=${field(cascade, "recommendation_count")} warnings=${field(cascade, "warning_count")}`,
|
|
47613
47619
|
`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")}`,
|
|
47614
|
-
`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")}`,
|
|
47620
|
+
`connectivity: runners=${field(connectivity, "runner_count")} offline_runners=${field(connectivity, "offline_runner_count")} not_ready_runners=${field(connectivity, "not_execute_ready_runner_count")} integrations=${field(connectivity, "integration_count")} disconnected_integrations=${field(connectivity, "disconnected_integration_count")} failed_notifications=${field(connectivity, "failed_notification_count")}`,
|
|
47615
47621
|
`sync: latest_brief=${field(sync, "latest_brief_at")} missing_latest_brief=${field(sync, "missing_latest_brief")} flagged_gaps=${field(sync, "flagged_gap_count")}`
|
|
47616
47622
|
);
|
|
47617
47623
|
return lines.join("\n");
|
|
@@ -47754,25 +47760,48 @@ function signupUrl(appUrl2) {
|
|
|
47754
47760
|
return new URL("/signup", ensureTrailingSlash2(appUrl2)).toString();
|
|
47755
47761
|
}
|
|
47756
47762
|
function parseSignupCompany(args) {
|
|
47763
|
+
const json2 = args.includes("--json");
|
|
47757
47764
|
const index = args.indexOf("--company");
|
|
47758
47765
|
if (index === -1) {
|
|
47759
|
-
return { companyName: null };
|
|
47766
|
+
return { companyName: null, json: json2 };
|
|
47760
47767
|
}
|
|
47761
47768
|
const value = args[index + 1];
|
|
47762
47769
|
if (value === void 0 || value.startsWith("--") || value.trim() === "") {
|
|
47763
47770
|
throw new Error(`--company requires a value, e.g. ${cliBrand.binName} signup --company "Acme"`);
|
|
47764
47771
|
}
|
|
47765
|
-
return { companyName: value };
|
|
47772
|
+
return { companyName: value, json: json2 };
|
|
47766
47773
|
}
|
|
47767
|
-
|
|
47774
|
+
var signupProvisionOutputSchema = external_exports.object({
|
|
47775
|
+
tenant_id: external_exports.string().min(1),
|
|
47776
|
+
slug: external_exports.string().min(1),
|
|
47777
|
+
name: external_exports.string().min(1),
|
|
47778
|
+
created: external_exports.boolean()
|
|
47779
|
+
}).loose();
|
|
47780
|
+
async function runSignupProvision(io, client, companyName, run2, options = {}) {
|
|
47768
47781
|
const exitCode = await run2(io, client, "signup.provision_tenant", { company_name: companyName });
|
|
47769
|
-
if (exitCode === 0) {
|
|
47782
|
+
if (exitCode.exitCode === 0) {
|
|
47783
|
+
const parsed = signupProvisionOutputSchema.safeParse(exitCode.output);
|
|
47784
|
+
if (!parsed.success) {
|
|
47785
|
+
return exitCode.exitCode;
|
|
47786
|
+
}
|
|
47787
|
+
if (options.json === true) {
|
|
47788
|
+
io.stdout.write(`${JSON.stringify(parsed.data, null, 2)}
|
|
47789
|
+
`);
|
|
47790
|
+
return exitCode.exitCode;
|
|
47791
|
+
}
|
|
47792
|
+
if (!parsed.data.created) {
|
|
47793
|
+
io.stdout.write(
|
|
47794
|
+
`No new company was created. Your account already has active company '${parsed.data.name}' (${parsed.data.slug}); requested '${companyName}' was not provisioned. Run '${cliBrand.binName} tenants' to see companies or '${cliBrand.binName} use ${parsed.data.slug}' to keep working there.
|
|
47795
|
+
`
|
|
47796
|
+
);
|
|
47797
|
+
return exitCode.exitCode;
|
|
47798
|
+
}
|
|
47770
47799
|
io.stdout.write(
|
|
47771
|
-
`Company '${
|
|
47800
|
+
`Company '${parsed.data.name}' is ready and active. Run '${cliBrand.binName} onboard status' to continue setup.
|
|
47772
47801
|
`
|
|
47773
47802
|
);
|
|
47774
47803
|
}
|
|
47775
|
-
return exitCode;
|
|
47804
|
+
return exitCode.exitCode;
|
|
47776
47805
|
}
|
|
47777
47806
|
async function runSignup(io, appUrl2, openBrowser2 = tryOpenBrowser) {
|
|
47778
47807
|
const url2 = signupUrl(appUrl2);
|
|
@@ -48717,9 +48746,12 @@ async function main(argv = process.argv.slice(2), options = {}) {
|
|
|
48717
48746
|
return 0;
|
|
48718
48747
|
}
|
|
48719
48748
|
let signupCompany = null;
|
|
48749
|
+
let signupJson = false;
|
|
48720
48750
|
if (command === "signup") {
|
|
48721
48751
|
try {
|
|
48722
|
-
|
|
48752
|
+
const signupOptions = parseSignupCompany(args);
|
|
48753
|
+
signupCompany = signupOptions.companyName;
|
|
48754
|
+
signupJson = signupOptions.json;
|
|
48723
48755
|
} catch (error51) {
|
|
48724
48756
|
io.stderr.write(`${redactForLog(error51 instanceof Error ? error51.message : String(error51))}
|
|
48725
48757
|
`);
|
|
@@ -48826,7 +48858,7 @@ Run ${cliBrand.binName} login --device again if the next command asks you to aut
|
|
|
48826
48858
|
await maybePrintSignupBootstrap(io, client, config2.appUrl);
|
|
48827
48859
|
}
|
|
48828
48860
|
if (command === "signup") {
|
|
48829
|
-
return runSignupProvision(io, client, signupCompany, (signupIo, signupClient, commandId, body) =>
|
|
48861
|
+
return runSignupProvision(io, client, signupCompany, (signupIo, signupClient, commandId, body) => executeCommandWithResult(signupIo, signupClient, commandId, body), { json: signupJson });
|
|
48830
48862
|
}
|
|
48831
48863
|
if (command === "whoami") {
|
|
48832
48864
|
return printCommandOutput(io, client, "user.whoami");
|
|
@@ -49159,6 +49191,14 @@ async function printCommandOutput(io, client, commandId, body = {}, format, opti
|
|
|
49159
49191
|
return printCommandError2(io, error51);
|
|
49160
49192
|
}
|
|
49161
49193
|
}
|
|
49194
|
+
async function executeCommandWithResult(io, client, commandId, body = {}) {
|
|
49195
|
+
try {
|
|
49196
|
+
const result = await client.execute(commandId, body);
|
|
49197
|
+
return { exitCode: 0, output: result.output };
|
|
49198
|
+
} catch (error51) {
|
|
49199
|
+
return { exitCode: printCommandError2(io, error51) };
|
|
49200
|
+
}
|
|
49201
|
+
}
|
|
49162
49202
|
function pendingConfirmationFromError2(error51) {
|
|
49163
49203
|
if (!(error51 instanceof CommandClientError) || !error51.response || error51.response.ok || error51.response.error.code !== "COMMAND_CONFIRMATION_REQUIRED") {
|
|
49164
49204
|
return null;
|