@rosthq/cli 0.5.31 → 0.5.32

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.
@@ -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,CAmPnG;AA6cD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
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,CAuPnG;AA+cD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAUxF"}
package/dist/index.js CHANGED
@@ -41637,7 +41637,7 @@ The Compass is drafted, then activated by a human through supersession.
41637
41637
  order: 20,
41638
41638
  title: "Responsibility Graph playbook",
41639
41639
  summary: "How to build a functions-first graph with seats, owners, Stewards, vacancies, and clean authority.",
41640
- version: "2026-06-20.2",
41640
+ version: "2026-06-30.1",
41641
41641
  public: true,
41642
41642
  audiences: ["human", "cli", "mcp", "in_app_agent"],
41643
41643
  stages: ["graph_design", "staffing"],
@@ -41684,6 +41684,8 @@ Each entry opens the same conservative setup flow \u2014 seat placement, Steward
41684
41684
 
41685
41685
  The graph canvas fits the whole structure into the frame when it opens and refits whenever the frame changes \u2014 opening a side panel, resizing the window, or rotating a phone. Zoom moves between three altitudes: a constellation of seat dots when zoomed out, seat cards at the working zoom, and charter detail when zoomed in. Seat cards stay legible on small screens, and the canvas is the one always-dark surface in the otherwise light app. Search the toolbar to fly to any seat by name.
41686
41686
 
41687
+ Seat cards name their active occupants. When a seat has more than one occupant, the card shows the human/agent breakdown instead of only a count, and mixed human-plus-agent staffing is labelled. Use the occupants control on that card to open the detail panel, where each occupant is listed as either the human accountable for the seat or the agent executor, with the Steward chain shown for agent accountability.
41688
+
41687
41689
  The graph is also where you land after onboarding \u2014 it is the mission control for the company, not a separate dashboard. Switch lenses from the toolbar to recolour the same structure four ways:
41688
41690
 
41689
41691
  - **Structure** \u2014 seat type and reporting lines.
@@ -42148,7 +42150,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
42148
42150
  order: 45,
42149
42151
  title: "How agents work",
42150
42152
  summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
42151
- version: "2026-06-27.1",
42153
+ version: "2026-06-30.1",
42152
42154
  public: true,
42153
42155
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42154
42156
  stages: ["staffing", "operating_rhythm"],
@@ -42246,7 +42248,7 @@ Beyond each seat's own manifest, the company can set one ceiling on how much an
42246
42248
 
42247
42249
  ## What humans should review
42248
42250
 
42249
- 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, loaded Skill versions, 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.
42251
+ The Agents page shows fleet health first: live state, work evidence, failed runs, open held actions, cost, and the next operator action. Work evidence distinguishes fresh real runs, stale runs, no completed run yet, queued or running work orders, and recent failures. A failure link opens the failed run itself; queued or stale rows route the operator to the seat's agent operations instead of pretending there is a hidden run to inspect. The page 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, loaded Skill versions, 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. For a live agent, the seat page's agent operations panel can queue one immediate governed run through the same \`agent.run_now\` command path used by CLI and MCP; it does not expand authority or change the saved schedule.
42250
42252
 
42251
42253
  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.
42252
42254
 
@@ -42401,7 +42403,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42401
42403
  order: 48,
42402
42404
  title: "CLI and MCP installation guide",
42403
42405
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42404
- version: "2026-06-30.2",
42406
+ version: "2026-06-30.3",
42405
42407
  public: true,
42406
42408
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42407
42409
  stages: ["company_setup", "staffing"],
@@ -42524,9 +42526,10 @@ Commands below use angle-bracket placeholders. The CLI prints the real, fully-re
42524
42526
  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:
42525
42527
 
42526
42528
  - **Browser:** at \`/signup\`, name your company, then return to the CLI.
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.
42529
+ - **Headless first company (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.
42530
+ - **Additional entitled company:** from an existing active company session, run \`{{cli}} tenant create --company "<name>" [--json]\`. This creates a clean additional company only when the account has an active \`tenant.create.additional\` entitlement. A denied attempt returns a clean refusal and creates no tenant row.
42528
42531
 
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.
42532
+ If you run a tenant-scoped command before any company exists, the CLI tells you both first-company 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>\`.
42530
42533
 
42531
42534
  ## Install the CLI
42532
42535
 
@@ -42604,10 +42607,11 @@ This is the install/auth quickstart \u2014 it gets you logged in, MCP registered
42604
42607
  3. Create your company if you have none yet: \`{{cli}} signup --company "<name>"\` (no browser step)
42605
42608
  4. List tenants: \`{{cli}} tenants\`
42606
42609
  5. Select a tenant when needed: \`{{cli}} use <tenant-slug-or-id>\`
42607
- 6. Read the agent map: \`{{cli}} reference get agent-reference-map\` (the full canonical setup order lives here)
42608
- 7. Register MCP for the client (pick a scope \u2014 \`--scope\` is required): \`{{cli}} mcp install --client claude-code --scope tenant-admin\` for setup, or \`--scope seat --seat-id <id>\` for a narrower seat token
42609
- 8. Inspect onboarding: \`{{cli}} onboard status\`
42610
- 9. Get the guided agent prompt: \`{{cli}} onboard run\`
42610
+ 6. For an entitled additional clean company, create it from an active company session: \`{{cli}} tenant create --company "<name>"\`
42611
+ 7. Read the agent map: \`{{cli}} reference get agent-reference-map\` (the full canonical setup order lives here)
42612
+ 8. Register MCP for the client (pick a scope \u2014 \`--scope\` is required): \`{{cli}} mcp install --client claude-code --scope tenant-admin\` for setup, or \`--scope seat --seat-id <id>\` for a narrower seat token
42613
+ 9. Inspect onboarding: \`{{cli}} onboard status\`
42614
+ 10. Get the guided agent prompt: \`{{cli}} onboard run\`
42611
42615
 
42612
42616
  Or use the one-shot helper: \`{{cli}} init\` logs in when needed, optionally selects a tenant, installs MCP, and prints the onboarding prompt. It does not run every numbered step above (it does not create your company or call \`onboard status\`) \u2014 it gets you logged in, registered, and handed the onboarding prompt. As the first-run helper it defaults to a **tenant-admin** token (no seats exist yet), so unlike a direct \`mcp install\` it does not need \`--scope\`; pass \`--scope seat --seat-id <id>\` if you already have a seat to scope it to:
42613
42617
 
@@ -42791,6 +42795,7 @@ These are the security posture rules for operating after install \u2014 a checkl
42791
42795
  | \`{{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\` |
42792
42796
  | \`{{cli}} logout\` | Clear the local CLI session. | Local session | \`{{cli}} logout\` |
42793
42797
  | \`{{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"\` |
42798
+ | \`{{cli}} tenant create --company "<name>" [--json]\` | Create an additional clean company from an existing active company session. Requires \`tenant.create.additional\`; denied attempts create no tenant. Add \`--json\` for machine-readable output. | Logged-in tenant owner with entitlement | \`{{cli}} tenant create --company "Acme East"\` |
42794
42799
  | \`{{cli}} whoami\` | Show the authenticated user, accessible tenant roles, and the active tenant (\`current_tenant_id\`). | User | \`{{cli}} whoami\` |
42795
42800
  | \`{{cli}} tenants\` | List tenants the user can access; the active one is marked \`current\`. | User | \`{{cli}} tenants\` |
42796
42801
  | \`{{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\` |
@@ -47777,6 +47782,13 @@ var signupProvisionOutputSchema = external_exports.object({
47777
47782
  name: external_exports.string().min(1),
47778
47783
  created: external_exports.boolean()
47779
47784
  }).loose();
47785
+ var tenantCreateOutputSchema = signupProvisionOutputSchema.extend({
47786
+ source_tenant_id: external_exports.string().min(1),
47787
+ entitlement_id: external_exports.string().min(1),
47788
+ accounting_event_id: external_exports.string().min(1),
47789
+ active: external_exports.boolean(),
47790
+ next_action: external_exports.string().min(1)
47791
+ }).loose();
47780
47792
  async function runSignupProvision(io, client, companyName, run2, options = {}) {
47781
47793
  const exitCode = await run2(io, client, "signup.provision_tenant", { company_name: companyName });
47782
47794
  if (exitCode.exitCode === 0) {
@@ -47803,6 +47815,40 @@ async function runSignupProvision(io, client, companyName, run2, options = {}) {
47803
47815
  }
47804
47816
  return exitCode.exitCode;
47805
47817
  }
47818
+ async function runTenantCreate(io, client, args, run2) {
47819
+ const [action, ...rest] = args;
47820
+ if (action !== "create") {
47821
+ io.stderr.write(`Usage: ${cliBrand.binName} tenant create --company "<name>" [--json]
47822
+ `);
47823
+ return 1;
47824
+ }
47825
+ const json2 = rest.includes("--json");
47826
+ const companyIndex = rest.indexOf("--company");
47827
+ const companyName = companyIndex === -1 ? void 0 : rest[companyIndex + 1];
47828
+ if (!companyName || companyName.startsWith("--") || companyName.trim() === "") {
47829
+ io.stderr.write(`--company requires a value, e.g. ${cliBrand.binName} tenant create --company "Acme Ops"
47830
+ `);
47831
+ return 1;
47832
+ }
47833
+ const exitCode = await run2(io, client, "tenant.create", { company_name: companyName });
47834
+ if (exitCode.exitCode === 0) {
47835
+ const parsed = tenantCreateOutputSchema.safeParse(exitCode.output);
47836
+ if (!parsed.success) {
47837
+ io.stderr.write("tenant.create returned an unexpected response shape.\n");
47838
+ return 1;
47839
+ }
47840
+ if (json2) {
47841
+ io.stdout.write(`${JSON.stringify(parsed.data, null, 2)}
47842
+ `);
47843
+ return exitCode.exitCode;
47844
+ }
47845
+ io.stdout.write(
47846
+ `Company '${parsed.data.name}' is ready and active (${parsed.data.slug}). ${parsed.data.next_action}
47847
+ `
47848
+ );
47849
+ }
47850
+ return exitCode.exitCode;
47851
+ }
47806
47852
  async function runSignup(io, appUrl2, openBrowser2 = tryOpenBrowser) {
47807
47853
  const url2 = signupUrl(appUrl2);
47808
47854
  await openBrowser2(url2);
@@ -48860,6 +48906,9 @@ Run ${cliBrand.binName} login --device again if the next command asks you to aut
48860
48906
  if (command === "signup") {
48861
48907
  return runSignupProvision(io, client, signupCompany, (signupIo, signupClient, commandId, body) => executeCommandWithResult(signupIo, signupClient, commandId, body), { json: signupJson });
48862
48908
  }
48909
+ if (command === "tenant") {
48910
+ return runTenantCreate(io, client, args, (tenantIo, tenantClient, commandId, body) => executeCommandWithResult(tenantIo, tenantClient, commandId, body));
48911
+ }
48863
48912
  if (command === "whoami") {
48864
48913
  return printCommandOutput(io, client, "user.whoami");
48865
48914
  }
@@ -49256,7 +49305,7 @@ function parseJsonBody(args) {
49256
49305
  return JSON.parse(body);
49257
49306
  }
49258
49307
  function isCommand(value) {
49259
- return value === "login" || value === "logout" || value === "signup" || value === "whoami" || value === "tenants" || value === "use" || value === "command" || value === "onboard" || value === "mcp" || value === "skills" || value === "init" || value === "docs" || value === "reference" || value === "doctor" || value === "help";
49308
+ return value === "login" || value === "logout" || value === "signup" || value === "tenant" || value === "whoami" || value === "tenants" || value === "use" || value === "command" || value === "onboard" || value === "mcp" || value === "skills" || value === "init" || value === "docs" || value === "reference" || value === "doctor" || value === "help";
49260
49309
  }
49261
49310
  function printUsage(io) {
49262
49311
  io.stdout.write([
@@ -49264,6 +49313,7 @@ function printUsage(io) {
49264
49313
  `${cliBrand.binName} login --device`,
49265
49314
  `${cliBrand.binName} logout`,
49266
49315
  `${cliBrand.binName} signup [--company "<name>"]`,
49316
+ `${cliBrand.binName} tenant create --company "<name>" [--json]`,
49267
49317
  `${cliBrand.binName} whoami`,
49268
49318
  `${cliBrand.binName} tenants`,
49269
49319
  `${cliBrand.binName} use <tenant>`,