@rosthq/cli 0.7.85 → 0.7.87

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":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;AAgsCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAmPjD,CAAC"}
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../src/generator/groups.ts"],"names":[],"mappings":"AAuCA,OAAO,EAAgB,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAM1D,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAKhF,CAAC;AAosCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAmPjD,CAAC"}
package/dist/index.js CHANGED
@@ -41861,14 +41861,20 @@ var taskCreateInputSchema = external_exports.object({
41861
41861
  description: external_exports.string().trim().min(1),
41862
41862
  goal_id: uuidSchema9.optional(),
41863
41863
  acceptance_criteria: external_exports.array(external_exports.string().min(1)).optional(),
41864
- due_on: dateOnlySchema.optional()
41864
+ due_on: dateOnlySchema.optional(),
41865
+ // DER-1379: deterministic idempotency key; agent/scheduled producers only
41866
+ // (humans/null keep today's behavior); exact structural match.
41867
+ source_key: external_exports.string().trim().min(1).max(200).optional()
41865
41868
  }).strict();
41866
41869
  var taskCreateOutputSchema = external_exports.object({
41867
41870
  task_id: uuidSchema9,
41868
41871
  owner_seat_id: uuidSchema9,
41869
41872
  from_seat_id: uuidSchema9.nullable(),
41870
41873
  status: external_exports.string(),
41871
- due_on: external_exports.string().nullable()
41874
+ due_on: external_exports.string().nullable(),
41875
+ // DER-1379: true when this was an idempotent no-op returning an existing
41876
+ // active task (agent + matching source_key); false for a normal create.
41877
+ already_filed: external_exports.boolean().default(false)
41872
41878
  }).strict();
41873
41879
  var taskUpdateInputSchema = external_exports.object({
41874
41880
  task_id: uuidSchema9,
@@ -43827,6 +43833,17 @@ var runnerPostureSchema = external_exports.object({
43827
43833
  network: external_exports.enum(["allow", "deny", "unknown"]),
43828
43834
  capability_set: external_exports.array(external_exports.string())
43829
43835
  }).strict();
43836
+ var runnerCapacityStateSchema = external_exports.enum(["available", "near_cap", "exhausted", "unknown"]);
43837
+ var runnerCapacitySchema = external_exports.object({
43838
+ account_alias: external_exports.string().nullable(),
43839
+ state: runnerCapacityStateSchema,
43840
+ raw_state: external_exports.string().nullable(),
43841
+ // Null until the harness gains rate-limit error classification (out of scope for DER-1588);
43842
+ // surfaced now so a fleet reader picks it up automatically once it starts being set.
43843
+ rate_limited_until: isoDateTime6.nullable(),
43844
+ has_observation: external_exports.boolean(),
43845
+ freshness: external_exports.enum(["fresh", "stale"])
43846
+ }).strict();
43830
43847
  var runnerSummarySchema = external_exports.object({
43831
43848
  id: uuid8,
43832
43849
  name: external_exports.string(),
@@ -43836,6 +43853,7 @@ var runnerSummarySchema = external_exports.object({
43836
43853
  cli_version: external_exports.string().nullable(),
43837
43854
  posture: runnerPostureSchema,
43838
43855
  execution: runnerExecutionReadinessSchema,
43856
+ capacity: runnerCapacitySchema,
43839
43857
  paired_at: isoDateTime6.nullable(),
43840
43858
  last_heartbeat_at: isoDateTime6.nullable(),
43841
43859
  revoked_at: isoDateTime6.nullable(),
@@ -44219,6 +44237,8 @@ var systemHealthConnectivitySectionSchema = external_exports.object({
44219
44237
  runner_count: external_exports.number().int().nonnegative(),
44220
44238
  offline_runner_count: external_exports.number().int().nonnegative(),
44221
44239
  not_execute_ready_runner_count: external_exports.number().int().nonnegative(),
44240
+ // DER-1588: fleet-wide near-cap/at-limit warning, driven off the runner capacity badge.
44241
+ near_cap_or_exhausted_runner_count: external_exports.number().int().nonnegative(),
44222
44242
  integration_count: external_exports.number().int().nonnegative(),
44223
44243
  disconnected_integration_count: external_exports.number().int().nonnegative(),
44224
44244
  failed_notification_count: external_exports.number().int().nonnegative()
@@ -46253,6 +46273,9 @@ var statusRecordOutputSchema = external_exports.object({
46253
46273
  event_id: uuidSchema19,
46254
46274
  type: external_exports.literal("status")
46255
46275
  }).strict();
46276
+ var frictionFileIssueInputSchema = issueEventPayloadSchema.extend({
46277
+ source_key: external_exports.string().trim().min(1).max(200).optional()
46278
+ }).strict();
46256
46279
  var duplicateFrictionCandidateSchema = external_exports.object({
46257
46280
  issue_id: uuidSchema19,
46258
46281
  summary: external_exports.string().min(1),
@@ -46266,7 +46289,10 @@ var frictionFileIssueOutputSchema = external_exports.object({
46266
46289
  // DER-1522: likely-duplicate candidates detected before creation. Recommend,
46267
46290
  // never block — filing always proceeds; empty when nothing crossed the
46268
46291
  // conservative threshold (or the actor is not an agent).
46269
- duplicate_candidates: external_exports.array(duplicateFrictionCandidateSchema).default([])
46292
+ duplicate_candidates: external_exports.array(duplicateFrictionCandidateSchema).default([]),
46293
+ // DER-1379: true when this was an idempotent no-op returning an existing
46294
+ // active issue (agent + matching source_key); false for a normal file.
46295
+ already_filed: external_exports.boolean().default(false)
46270
46296
  }).strict();
46271
46297
  var workLogInputSchema = external_exports.object({
46272
46298
  note: external_exports.string().min(1)
@@ -46412,6 +46438,8 @@ var WORK_VERBS = [
46412
46438
  var workVerbSchema = external_exports.enum(WORK_VERBS);
46413
46439
  var WORK_OUTCOMES = ["success", "warning", "error", "held"];
46414
46440
  var workOutcomeSchema = external_exports.enum(WORK_OUTCOMES);
46441
+ var RESOLUTION_ATTRIBUTIONS = ["agent_self", "escalated_human"];
46442
+ var resolutionAttributionSchema = external_exports.enum(RESOLUTION_ATTRIBUTIONS);
46415
46443
  var objectKindSchema = external_exports.string().trim().min(1).max(128);
46416
46444
  var externalIdSchema = external_exports.string().trim().min(1).max(512);
46417
46445
  var labelSchema = external_exports.string().trim().min(1).max(200);
@@ -46547,6 +46575,12 @@ var workDetailsSchemas = {
46547
46575
  currency: external_exports.string().length(3).optional(),
46548
46576
  unit: external_exports.string().max(64).optional(),
46549
46577
  lead_time_days: external_exports.number().int().nonnegative().optional()
46578
+ }).strict(),
46579
+ // DER-1574: the resolution-attribution marker for a record that closes out an
46580
+ // `escalated`/`held` item — see RESOLUTION_ATTRIBUTIONS above.
46581
+ escalation_resolution: external_exports.object({
46582
+ resolved_by: resolutionAttributionSchema,
46583
+ resolution_note: external_exports.string().trim().min(1).max(2e3).optional()
46550
46584
  }).strict()
46551
46585
  };
46552
46586
 
@@ -47955,7 +47989,7 @@ External connectors are being rolled out provider by provider, conservatively (r
47955
47989
  order: 48,
47956
47990
  title: "CLI and MCP installation guide",
47957
47991
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
47958
- version: "2026-07-15.5",
47992
+ version: "2026-07-16.1",
47959
47993
  public: true,
47960
47994
  audiences: ["human", "cli", "mcp", "in_app_agent"],
47961
47995
  stages: ["company_setup", "staffing"],
@@ -48659,7 +48693,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
48659
48693
  | \`rost_update_friction_issue_status\` | \`friction.update_status\` | Move a non-terminal issue between open and diagnosing. | Seat or tenant-admin | Call with \`issue_id\` and \`status\`. |
48660
48694
  | \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
48661
48695
  | \`rost_link_task_to_friction_issue\` | \`friction.link_task\` | Attach an existing task as an issue's action task. | Seat or tenant-admin | Call with \`issue_id\` and \`task_id\`. |
48662
- | \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin | \`none\` \u2014 human-created tasks go live directly; ordinary agent-created tasks become draft proposals; bounded Trusted proposals become offered or, for same-Steward live agent seats, in progress. |
48696
+ | \`rost_create_task\` | \`task.create\` | Create a task (a commitment between seats). | Seat or tenant-admin | \`none\` \u2014 human-created tasks go live directly; ordinary agent-created tasks become draft proposals; bounded Trusted proposals become offered or, for same-Steward live agent seats, in progress. Agent/scheduled producers may pass an optional \`source_key\` so a repeat proposal is an idempotent no-op (\`already_filed:true\`, no duplicate task). |
48663
48697
  | \`rost_update_task\` | \`task.update\` | Reschedule, reassign, or edit a non-terminal task. | Owner (tenant-admin) | Pass \`task_id\` plus at least one of \`due_on\`/\`owner_seat_id\`/\`title\`/\`description\`; terminal tasks reject. |
48664
48698
  | \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
48665
48699
  | \`rost_get_sync_brief\` | \`sync.brief.get\` | Read the latest or a specific Sync Brief and agenda. | Seat or tenant-admin | Call with \`{}\` or \`{"sync_brief_id":"<id>"}\`. |
@@ -48775,7 +48809,7 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
48775
48809
  | \`rost_report_status\` | \`status.record\` | Write a status event. | Seat | Call with a concise status payload. |
48776
48810
  | \`rost_complete_task\` | \`task.complete\` | Complete a task and record evidence. | Seat | Call with \`task_id\` and evidence. |
48777
48811
  | \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with severity, reason, and requested decision. |
48778
- | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with title, severity, and impact. |
48812
+ | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with title, severity, and impact. Agent/scheduled producers may pass an optional \`source_key\` for deterministic idempotency \u2014 a repeat filing with the same key returns the existing open issue with \`already_filed:true\` and creates nothing new. |
48779
48813
  | \`rost_log_work\` | \`work.log\` | Record a lightweight free-text work breadcrumb for the seat. For structured, per-entity, queryable business activity (a client might ask "which ones?"), use \`rost_record_work\` instead. | Seat | Call with summary and evidence. |
48780
48814
  | \`rost_report_a_signal_reading\` | \`signal.report\` | Propose one draft reading for this seat's own agent-sourced measurable. The reading lands unconfirmed for human review. | Seat | Call with \`{"measurable_id":"<id>","value":42,"note":"read off the source","confidence":"high"}\`. |
48781
48815
  | \`rost_create_agent_deliverable\` | \`deliverable.create\` | Create a scrubbed durable work output for the acting seat. | Seat | Call with title, kind, summary/content, and optional safe links. |
@@ -49998,7 +50032,7 @@ Every notification should include the seat, cause, evidence, and requested decis
49998
50032
  order: 75,
49999
50033
  title: "Local runner guide",
50000
50034
  summary: "How local agent sessions and runner surfaces should operate through {{brand}} without bypassing Charters or audit.",
50001
- version: "2026-07-10.1",
50035
+ version: "2026-07-16.1",
50002
50036
  public: true,
50003
50037
  audiences: ["human", "cli", "mcp", "in_app_agent"],
50004
50038
  stages: ["staffing", "operating_rhythm"],
@@ -50075,7 +50109,7 @@ A Forge turn should load its context in one order: build context first, then Ski
50075
50109
  ## Inspect and control runners from CLI or MCP
50076
50110
 
50077
50111
  - 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.
50078
- - 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. Settings and runner status/list surfaces also project the runner CLI version, sandbox posture, network posture, and reported capability set from heartbeat so operators can see whether the machine is current and still running with the expected guardrails. \`{{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.
50112
+ - 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. Settings and runner status/list surfaces also project the runner CLI version, sandbox posture, network posture, and reported capability set from heartbeat so operators can see whether the machine is current and still running with the expected guardrails. \`{{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. Both surfaces also project a \`capacity\` view: the runner's active model-account alias, a badge state (\`available\`, \`near_cap\`, \`exhausted\`, or \`unknown\`), a rate-limited-until timestamp when the harness has classified one, and a fresh/stale refreshability flag mirroring heartbeat recency. The badge reads \`unknown\` \u2014 never a fabricated \`available\` \u2014 whenever no capacity observation has been recorded yet or the runner reported a state {{brand}} does not recognize; real 5-hour/weekly usage percentages and reset timestamps are not collected yet, so this view never claims a percentage it does not have. Settings > Connected machines and the Health dashboard's Connectivity tile (a fleet-wide near-cap/at-limit count) surface the same signal.
50079
50113
  - 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.
50080
50114
  - 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).
50081
50115
  - 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.
@@ -52044,7 +52078,7 @@ var COMMAND_MANIFEST = [
52044
52078
  { "id": "escalation.reject", "namespace": "escalation", "action": "reject", "title": "Reject escalation", "description": "Override an open escalation so the agent must not proceed. Writes a human decision; agents cannot reject.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject (override) an escalation so the agent must not proceed; the decision records the human decider. Agents cannot reject." },
52045
52079
  { "id": "escalation.resolve", "namespace": "escalation", "action": "resolve", "title": "Resolve escalation", "description": "Approve an open escalation (or convert it to Friction). Writes a human decision; agents cannot resolve.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": false, "enumValues": ["approve", "convert_to_issue"] }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an escalation as a human Steward; the decision records decided_by as the approving human. Agents cannot resolve." },
52046
52080
  { "id": "friction.assist", "namespace": "friction", "action": "assist", "title": "Assist Friction issue", "description": "Advisory IDS assist for an issue: the most-similar prior resolved issues with their root causes and decisions, a recurring-pattern flag, and recommended options. Read-only \u2014 it never resolves the issue.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "Advisory IDS assist: the most-similar prior resolved issues with their root causes and decisions, plus a recurring-pattern flag. Read-only \u2014 it never resolves the issue." },
52047
- { "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
52081
+ { "id": "friction.file_issue", "namespace": "friction", "action": "file_issue", "title": "File Friction issue", "description": "Emit an issue event and open a Friction issue raised by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "summary", "flag": "summary", "type": "string", "required": true }, { "name": "blocking_goal_id", "flag": "blocking-goal-id", "type": "string", "required": false }, { "name": "broken_measurable_id", "flag": "broken-measurable-id", "type": "string", "required": false }, { "name": "severity", "flag": "severity", "type": "enum", "required": true, "enumValues": ["low", "med", "high", "critical"] }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": true, "help": "File a Friction issue with evidence when a goal or measurable is blocked or broken." },
52048
52082
  { "id": "friction.get", "namespace": "friction", "action": "get", "title": "Get Friction issue", "description": "Get full detail for one Friction issue by id.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get full detail for one Friction issue by id, including its root cause, action task, and resolution decision when present." },
52049
52083
  { "id": "friction.import", "namespace": "friction", "action": "import", "title": "Import Friction issues from a ninety Issues List", "description": "Bulk-import a ninety Issues List export into Friction. Owners are seat names resolved to seats; each issue is raised by the resolved seat and attributed to the importing human. Idempotent \u2014 re-importing the same export is a no-op, and an existing open issue with the same seat + summary is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Import a ninety Issues List export into Friction; owners resolve to seats, idempotent by file + seat/summary." },
52050
52084
  { "id": "friction.link_task", "namespace": "friction", "action": "link_task", "title": "Link task to Friction issue", "description": "Attach an existing tenant task as the action task for a non-terminal issue. Both ids must belong to the tenant.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "task_id", "flag": "task-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Attach an existing task as the action task for a non-terminal issue." },
@@ -52199,7 +52233,7 @@ var COMMAND_MANIFEST = [
52199
52233
  { "id": "task.accept", "namespace": "task", "action": "accept", "title": "Accept task", "description": "Accept an offered handoff task owned by the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Accept an offered task only when the seat can deliver it within its Charter." },
52200
52234
  { "id": "task.complete", "namespace": "task", "action": "complete", "title": "Complete task", "description": "Complete an accepted handoff task and emit a handoff event back to the requesting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": true }], "hasComplexInput": true, "help": "Complete an accepted task with a summary so the requesting seat receives the handoff." },
52201
52235
  { "id": "task.confirm_proposal", "namespace": "task", "action": "confirm_proposal", "title": "Confirm proposed task", "description": "Confirm an agent-proposed draft task when the current human has target-side authority.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Confirm an agent-proposed draft task when the current human has authority for the target seat." },
52202
- { "id": "task.create", "namespace": "task", "action": "create", "title": "Create task", "description": "Create a task (a commitment between seats). Agent-created tasks land in draft for human confirmation; human-created tasks are offered (handoff) or in progress.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "from_seat_id", "flag": "from-seat-id", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "description", "flag": "description", "type": "string", "required": true }, { "name": "goal_id", "flag": "goal-id", "type": "string", "required": false }, { "name": "acceptance_criteria", "flag": "acceptance-criteria", "type": "array", "required": false, "itemType": "string" }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a task as a commitment between seats; ordinary agent proposals land in draft for target-side human confirmation, while bounded Trusted proposals may become offered or in progress.", "example": { "owner_seat_id": "0190dddd-dddd-7ddd-8ddd-dddddddddddd", "from_seat_id": "0190eeee-eeee-7eee-8eee-eeeeeeeeeeee", "title": "Reconcile the March vendor statements", "description": "Match every March vendor statement line to a recorded invoice and flag discrepancies.", "goal_id": "0190ffff-ffff-7fff-8fff-ffffffffffff", "acceptance_criteria": ["All March statements reconciled", "Discrepancies filed as Friction issues"], "due_on": "2026-04-15" } },
52236
+ { "id": "task.create", "namespace": "task", "action": "create", "title": "Create task", "description": "Create a task (a commitment between seats). Agent-created tasks land in draft for human confirmation; human-created tasks are offered (handoff) or in progress.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": true }, { "name": "from_seat_id", "flag": "from-seat-id", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "description", "flag": "description", "type": "string", "required": true }, { "name": "goal_id", "flag": "goal-id", "type": "string", "required": false }, { "name": "acceptance_criteria", "flag": "acceptance-criteria", "type": "array", "required": false, "itemType": "string" }, { "name": "due_on", "flag": "due-on", "type": "string", "required": false }, { "name": "source_key", "flag": "source-key", "type": "string", "required": false }], "hasComplexInput": false, "help": "Create a task as a commitment between seats; ordinary agent proposals land in draft for target-side human confirmation, while bounded Trusted proposals may become offered or in progress.", "example": { "owner_seat_id": "0190dddd-dddd-7ddd-8ddd-dddddddddddd", "from_seat_id": "0190eeee-eeee-7eee-8eee-eeeeeeeeeeee", "title": "Reconcile the March vendor statements", "description": "Match every March vendor statement line to a recorded invoice and flag discrepancies.", "goal_id": "0190ffff-ffff-7fff-8fff-ffffffffffff", "acceptance_criteria": ["All March statements reconciled", "Discrepancies filed as Friction issues"], "due_on": "2026-04-15" } },
52203
52237
  { "id": "task.decline", "namespace": "task", "action": "decline", "title": "Decline task", "description": "Decline an offered handoff task owned by the acting seat with a reason.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Decline an offered task with a clear reason when it is out of scope for the seat." },
52204
52238
  { "id": "task.decline_proposal", "namespace": "task", "action": "decline_proposal", "title": "Decline proposed task", "description": "Decline an agent-proposed draft task with a target-side human reason.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": false, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Decline an agent-proposed draft task with a target-side human reason." },
52205
52239
  { "id": "task.import", "namespace": "task", "action": "import", "title": "Import Tasks from a ninety To-Dos export", "description": "Bulk-import a ninety To-Dos export into Tasks. Owners are seat names resolved to seats; each to-do becomes a seat-owned task with provenance origin_kind:manual. Idempotent \u2014 re-importing the same export is a no-op, and an existing non-terminal task with the same seat + title is skipped.", "requiredScope": "tenant_admin", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "dry_run", "flag": "dry-run", "type": "boolean", "required": false }], "hasComplexInput": true, "help": "Import a ninety To-Dos export into Tasks (origin_kind:manual); owners resolve to seats, idempotent by file + seat/title." },
@@ -52990,17 +53024,20 @@ function renderRunnerList(output) {
52990
53024
  return runners.map((runner) => {
52991
53025
  const record2 = asRecord(runner);
52992
53026
  const posture = asRecord(record2.posture);
53027
+ const capacity = asRecord(record2.capacity);
52993
53028
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
52994
- return `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (${field(record2, "platform")}) cli=${field(record2, "cli_version")} sandbox=${field(posture, "sandbox")} network=${field(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""}`;
53029
+ return `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (${field(record2, "platform")}) cli=${field(record2, "cli_version")} sandbox=${field(posture, "sandbox")} network=${field(posture, "network")}${capabilitySet.length > 0 ? ` capabilities=${capabilitySet}` : ""} capacity=${field(capacity, "state")} account=${field(capacity, "account_alias")} freshness=${field(capacity, "freshness")}`;
52995
53030
  }).join("\n");
52996
53031
  }
52997
53032
  function renderRunnerStatus(output) {
52998
53033
  const record2 = asRecord(output);
52999
53034
  const posture = asRecord(record2.posture);
53035
+ const capacity = asRecord(record2.capacity);
53000
53036
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
53001
53037
  const lines = [
53002
53038
  `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (last heartbeat ${field(record2, "last_heartbeat_at")}).`,
53003
- `cli_version: ${field(record2, "cli_version")} sandbox: ${field(posture, "sandbox")} network: ${field(posture, "network")}`
53039
+ `cli_version: ${field(record2, "cli_version")} sandbox: ${field(posture, "sandbox")} network: ${field(posture, "network")}`,
53040
+ `capacity: ${field(capacity, "state")} account: ${field(capacity, "account_alias")} freshness: ${field(capacity, "freshness")} rate_limited_until: ${field(capacity, "rate_limited_until")}`
53004
53041
  ];
53005
53042
  if (capabilitySet.length > 0) {
53006
53043
  lines.push(`capabilities: ${capabilitySet}`);