@rosthq/cli 0.5.17 → 0.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -42378,7 +42378,7 @@ External connectors are being rolled out provider by provider, conservatively (r
42378
42378
  order: 48,
42379
42379
  title: "CLI and MCP installation guide",
42380
42380
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
42381
- version: "2026-06-20.11",
42381
+ version: "2026-06-20.12",
42382
42382
  public: true,
42383
42383
  audiences: ["human", "cli", "mcp", "in_app_agent"],
42384
42384
  stages: ["company_setup", "staffing"],
@@ -42801,6 +42801,7 @@ These ergonomic wrappers (including the \`{{cli}} agent\` group) require **{{cli
42801
42801
  | \`{{cli}} agent templates|create|setup|tools|dry-run|go-live|status|run-now|fleet-digest|get-run|show\` | \`agent_template.list\`, \`agent.create_from_template\`, \`agent.create_custom\`, \`agent_setup.get\`, \`agent_setup.update\`, \`agent.configure_tools\`, \`agent.run_dry_run\`, \`agent.go_live\`, \`agent.status\`, \`agent.run_now\`, \`agent.fleet_digest\`, \`agent.get_run\`, \`agent.show_markdown\` | Run the full agent setup and operation flow: list templates, create a draft from a template or guided custom answers (with \`--model\` and \`--effort\`), read or answer setup state, connect or decline tools, dry-run, go live, run on demand, capture the fleet-health digest, read one run's transcript/error diagnostics, and show a markdown readout. Create and go-live stop at human gates; the dry-run is ungated by human approval but requires a signed manifest first. | Tenant and seat | \`{{cli}} agent fleet-digest --json\` |
42802
42802
  | \`{{cli}} tools list\` | \`tool.catalog\` | List the discoverable tool catalog the builder reads (id, scope tiers, credential requirement, access policy, and execution-boundary guidance). | Tenant | \`{{cli}} tools list --json\` |
42803
42803
  | \`{{cli}} skills list|get|file|assigned|check-dependencies\` | \`skill.list\`, \`skill.get\`, \`skill.file.get\`, \`skill.assigned.list\`, \`skill.check_dependencies\` | Discover reusable Skills, read descriptors and stored package files, list approved Seat assignments, and compare required/optional tool dependencies with a Seat's signed Charter manifest. Skills are instructions, not authority. | Tenant and seat | \`{{cli}} skills list --json\`; \`{{cli}} skills file --slug invoice-review --path SKILL.md\` |
42804
+ | \`{{cli}} skills create|update-draft|import|publish|assign|revoke\` | \`skill.create\`, \`skill.update_draft\`, \`skill.import_github\`, \`skill.import_upload\`, \`skill.publish\`, \`skill.assign_to_seat\`, \`skill.revoke_from_seat\` | Create or import bounded text Skill packages, publish reviewed immutable versions, propose or approve Seat assignments, and revoke future use without deleting historical activations. Publish, revoke, and approved assignment stop at human confirmation; blocked required tools cannot be approved. | Tenant and seat | \`{{cli}} skills import github --url https://github.com/acme/skills/tree/main/ap --json\`; \`{{cli}} skills assign --seat-id <id> --slug invoice-review --json\` |
42804
42805
  | \`{{cli}} model list\` | \`model.catalog\` | List guided model tiers with recommendations, token prices, cost bands, best-fit work, and model ids for \`--model\`. | Tenant | \`{{cli}} model list --json\` |
42805
42806
  | \`{{cli}} compass show\` | \`compass.show_markdown\` | Render the current Compass as a clean markdown card for review. | Tenant | \`{{cli}} compass show --markdown\` |
42806
42807
  | \`{{cli}} charter show\` | \`charter.show_markdown\` | Render a seat's Charter as a clean markdown card for review. | Tenant | \`{{cli}} charter show --seat-id <id> --markdown\` |
@@ -42971,6 +42972,13 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
42971
42972
  | \`rost_get_skill_file\` | \`skill.file.get\` | Read stored Skill package file content by slug and package path; paths resolve only inside the stored package payload. Seat-scoped reads are available through \`rost://skills/{slug}/files/{path}\`. | Tenant-admin | Call with \`{"slug":"invoice-review","path":"SKILL.md"}\`. |
42972
42973
  | \`rost_list_assigned_skills\` | \`skill.assigned.list\` | List approved Skill assignments for a Seat, including immutable version, dependency status, rationale, and approval time. Seat-scoped reads are available through \`rost://seat/{id}/skills\`. | Tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`. |
42973
42974
  | \`rost_check_skill_dependencies\` | \`skill.check_dependencies\` | Compare a Skill version's required and optional tools with a Seat's active or draft Charter permission manifest. Returns ready/blocked/warning and suggested \`agent.configure_tools\` input; it never grants permissions. | Tenant-admin | Call with \`{"seat_id":"<seat-id>","slug":"invoice-review"}\`. |
42975
+ | \`rost_create_skill\` | \`skill.create\` | Create a tenant Skill draft or pending-review Skill from a bounded text package. | Tenant-admin | Call with \`{"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}\`. |
42976
+ | \`rost_update_skill_draft\` | \`skill.update_draft\` | Replace or create the current unpublished draft version for an existing Skill. | Tenant-admin | Call with \`{"slug":"invoice-review","package":{"files":[{"path":"SKILL.md","content":"..."}]}}\`. |
42977
+ | \`rost_import_github_skill\` | \`skill.import_github\` | Import a public GitHub Skill package into pending review or draft after validation. | Tenant-admin | Call with \`{"url":"https://github.com/acme/skills/tree/main/ap","status":"pending_review"}\`. |
42978
+ | \`rost_import_uploaded_skill\` | \`skill.import_upload\` | Import a bounded structured text package. MCP does not accept direct binary uploads in this release. | Tenant-admin | Call with \`{"package":{"files":[{"path":"SKILL.md","content":"..."}]},"status":"draft"}\`. |
42979
+ | \`rost_publish_skill\` | \`skill.publish\` | Human-gated publication of an unpublished Skill version. Published versions are immutable and assignable. | Tenant-admin | Call with \`{"slug":"invoice-review"}\`; non-interactive callers receive a confirmation handoff. |
42980
+ | \`rost_assign_skill_to_seat\` | \`skill.assign_to_seat\` | Propose or human-approve a published Skill version for a Seat after dependency checks. Missing required tools block approval; optional tools warn. | Tenant-admin | Call with \`{"seat_id":"<seat-id>","slug":"invoice-review","status":"proposed","rationale":"Use for AP exception work."}\`. |
42981
+ | \`rost_revoke_skill_from_seat\` | \`skill.revoke_from_seat\` | Human-gated revocation that stops future Skill use without deleting historical activations. | Tenant-admin | Call with \`{"assignment_id":"<assignment-id>"}\`; non-interactive callers receive a confirmation handoff. |
42974
42982
  | \`rost_list_model_catalog\` | \`model.catalog\` | List guided model tiers \u2014 recommendations, token prices, cost bands, best-fit work, and model ids for \`--model\`. | Tenant | Call with \`{}\`. |
42975
42983
 
42976
42984
  ### Seat-scoped operating tools
@@ -45097,6 +45105,7 @@ function parseSemver(value) {
45097
45105
  }
45098
45106
 
45099
45107
  // src/operations.ts
45108
+ import { readFileSync as readFileSync2 } from "node:fs";
45100
45109
  var UsageError = class extends Error {
45101
45110
  };
45102
45111
  function parseFlags(args, booleanFlags = /* @__PURE__ */ new Set()) {
@@ -46241,7 +46250,89 @@ function formatDependencyCheck(output) {
46241
46250
  render("optional", asArray(record2.optional))
46242
46251
  ].join("\n");
46243
46252
  }
46253
+ function packageFromSkillFile(filePath) {
46254
+ return {
46255
+ files: [{ path: "SKILL.md", content: readFileSync2(filePath, "utf8") }]
46256
+ };
46257
+ }
46258
+ function formatSkillWrite(label) {
46259
+ return (output) => {
46260
+ const skill = asRecord(asRecord(output).skill);
46261
+ const warnings = asArray(asRecord(skill.validation).warnings).length;
46262
+ return [
46263
+ `${label}: \`${field(skill, "slug")}\` v${field(skill, "version")} (${field(skill, "skill_version_id")})`,
46264
+ `status: ${field(skill, "status")}`,
46265
+ `content_sha256: ${field(skill, "content_sha256")}`,
46266
+ `validation_warnings: ${warnings}`
46267
+ ].join("\n");
46268
+ };
46269
+ }
46270
+ function formatAssignment(output) {
46271
+ const record2 = asRecord(output);
46272
+ const assignment = asRecord(record2.assignment);
46273
+ return [
46274
+ `Skill assignment ${field(record2, "approval_status")}: \`${field(assignment, "slug")}\` v${field(assignment, "version")} \u2192 seat ${field(assignment, "seat_id")}`,
46275
+ `assignment_id: ${field(assignment, "assignment_id")}`,
46276
+ `skill_version_id: ${field(assignment, "skill_version_id")}`,
46277
+ `dependency_status: ${field(asRecord(record2.dependency_status), "status")}`,
46278
+ `next: ${field(record2, "local_sync_next_step")}`
46279
+ ].join("\n");
46280
+ }
46281
+ function formatRevocation(output) {
46282
+ const record2 = asRecord(output);
46283
+ return [
46284
+ `Skill assignment revoked: \`${field(record2, "slug")}\` from seat ${field(record2, "seat_id")}`,
46285
+ `assignment_id: ${field(record2, "assignment_id")}`,
46286
+ `skill_version_id: ${field(record2, "skill_version_id")}`,
46287
+ `next: ${field(record2, "local_sync_next_step")}`
46288
+ ].join("\n");
46289
+ }
46244
46290
  var skillsWrapper = (context, args) => dispatch(context, "skills", args, {
46291
+ create: (ctx, rest) => {
46292
+ const parsed = parseFlags(rest);
46293
+ const body = withOptional({ package: packageFromSkillFile(requireValue2(parsed, "file")) }, {
46294
+ status: optionalValue(parsed, "status")
46295
+ });
46296
+ return execute(ctx, parsed, "skill.create", body, formatSkillWrite("Skill draft created"));
46297
+ },
46298
+ "update-draft": (ctx, rest) => {
46299
+ const parsed = parseFlags(rest);
46300
+ const body = withOptional({
46301
+ slug: requireValue2(parsed, "slug"),
46302
+ package: packageFromSkillFile(requireValue2(parsed, "file"))
46303
+ }, {
46304
+ status: optionalValue(parsed, "status")
46305
+ });
46306
+ return execute(ctx, parsed, "skill.update_draft", body, formatSkillWrite("Skill draft updated"));
46307
+ },
46308
+ publish: (ctx, rest) => {
46309
+ const parsed = parseFlags(rest, /* @__PURE__ */ new Set(["allow-warnings"]));
46310
+ const body = withOptional({ allow_warnings: parsed.flags.has("allow-warnings") }, {
46311
+ slug: optionalValue(parsed, "slug"),
46312
+ skill_version_id: optionalValue(parsed, "skill-version-id")
46313
+ });
46314
+ return execute(ctx, parsed, "skill.publish", body, formatSkillWrite("Skill published"));
46315
+ },
46316
+ import: (ctx, rest) => {
46317
+ const [kind, ...remaining] = rest;
46318
+ if (kind === "github") {
46319
+ const parsed = parseFlags(remaining);
46320
+ const body = withOptional({ url: requireValue2(parsed, "url") }, {
46321
+ ref: optionalValue(parsed, "ref"),
46322
+ path: optionalValue(parsed, "path"),
46323
+ status: optionalValue(parsed, "status")
46324
+ });
46325
+ return execute(ctx, parsed, "skill.import_github", body, formatSkillWrite("GitHub skill imported"));
46326
+ }
46327
+ if (kind === "upload") {
46328
+ const parsed = parseFlags(remaining);
46329
+ const body = withOptional({ package: packageFromSkillFile(requireValue2(parsed, "file")) }, {
46330
+ status: optionalValue(parsed, "status")
46331
+ });
46332
+ return execute(ctx, parsed, "skill.import_upload", body, formatSkillWrite("Uploaded skill imported"));
46333
+ }
46334
+ throw new UsageError(`Usage: ${ctx.binName} skills import github|upload ...`);
46335
+ },
46245
46336
  list: (ctx, rest) => {
46246
46337
  const parsed = parseFlags(rest, /* @__PURE__ */ new Set(["include-archived"]));
46247
46338
  const body = withOptional({}, {
@@ -46273,15 +46364,46 @@ var skillsWrapper = (context, args) => dispatch(context, "skills", args, {
46273
46364
  skill_version_id: optionalValue(parsed, "skill-version-id")
46274
46365
  });
46275
46366
  return execute(ctx, parsed, "skill.check_dependencies", body, formatDependencyCheck);
46367
+ },
46368
+ assign: (ctx, rest) => {
46369
+ const parsed = parseFlags(rest, /* @__PURE__ */ new Set(["approve", "allow-blocked-proposal"]));
46370
+ const body = withOptional({
46371
+ seat_id: requireValue2(parsed, "seat-id"),
46372
+ status: parsed.flags.has("approve") ? "approved" : "proposed",
46373
+ rationale: optionalValue(parsed, "rationale") ?? "Skill assignment requested from the CLI.",
46374
+ allow_blocked_proposal: parsed.flags.has("allow-blocked-proposal")
46375
+ }, {
46376
+ slug: optionalValue(parsed, "slug") ?? optionalValue(parsed, "skill"),
46377
+ skill_version_id: optionalValue(parsed, "skill-version-id")
46378
+ });
46379
+ return execute(ctx, parsed, "skill.assign_to_seat", body, formatAssignment);
46380
+ },
46381
+ revoke: (ctx, rest) => {
46382
+ const parsed = parseFlags(rest);
46383
+ const body = withOptional({}, {
46384
+ assignment_id: optionalValue(parsed, "assignment-id"),
46385
+ seat_id: optionalValue(parsed, "seat-id"),
46386
+ slug: optionalValue(parsed, "slug") ?? optionalValue(parsed, "skill"),
46387
+ skill_version_id: optionalValue(parsed, "skill-version-id"),
46388
+ rationale: optionalValue(parsed, "rationale")
46389
+ });
46390
+ return execute(ctx, parsed, "skill.revoke_from_seat", body, formatRevocation);
46276
46391
  }
46277
46392
  }, skillsUsage(context.binName));
46278
46393
  function skillsUsage(bin) {
46279
- return `Usage: ${bin} skills list|get|file|assigned|check-dependencies [--json]
46394
+ return `Usage: ${bin} skills create|update-draft|publish|import|list|get|file|assigned|check-dependencies|assign|revoke [--json]
46395
+ ${bin} skills create --file ./SKILL.md [--status draft|pending_review]
46396
+ ${bin} skills update-draft --slug <slug> --file ./SKILL.md [--status draft|pending_review]
46397
+ ${bin} skills import github --url <github-url> [--ref <ref>] [--path <dir>] [--status draft|pending_review]
46398
+ ${bin} skills import upload --file ./SKILL.md [--status draft|pending_review]
46399
+ ${bin} skills publish (--slug <slug>|--skill-version-id <id>) [--allow-warnings]
46280
46400
  ${bin} skills list [--status draft|pending_review|published|archived] [--visibility private|seat|tenant] [--query <text>]
46281
46401
  ${bin} skills get --slug <slug>
46282
46402
  ${bin} skills file --slug <slug> --path SKILL.md
46283
46403
  ${bin} skills assigned [--seat-id <id>] [--seat <id>]
46284
- ${bin} skills check-dependencies --seat-id <id> (--slug <slug>|--skill-version-id <id>)`;
46404
+ ${bin} skills check-dependencies --seat-id <id> (--slug <slug>|--skill-version-id <id>)
46405
+ ${bin} skills assign --seat-id <id> (--slug <slug>|--skill-version-id <id>) [--approve] [--allow-blocked-proposal]
46406
+ ${bin} skills revoke (--assignment-id <id>|--seat-id <id> --slug <slug>)`;
46285
46407
  }
46286
46408
  var modelWrapper = (context, args) => dispatch(context, "model", args, {
46287
46409
  list: (ctx, rest) => {