@rosthq/cli 0.7.86 → 0.7.88

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;AAosCF,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;AAwsCF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAmPjD,CAAC"}
package/dist/index.js CHANGED
@@ -40435,6 +40435,12 @@ var aicosModelSelectionSchema = external_exports.object({
40435
40435
  effort: external_exports.enum(["low", "medium", "high", "xhigh", "max"]).optional(),
40436
40436
  label: external_exports.string().min(1).optional(),
40437
40437
  routingReason: external_exports.string().min(1).optional(),
40438
+ // DER-1820: true only while the managed allowance is exhausted AND a usable tenant
40439
+ // BYOK key exists, so the executor's managed->BYOK auto-recovery (cloud-execution.ts
40440
+ // `allowManagedRecovery`) will actually run the next turn — lets the allowance banner
40441
+ // say "running on your tenant key" instead of overclaiming guided mode / a stale
40442
+ // "Add BYOK" CTA when BYOK is already covering the turn.
40443
+ byokFallbackActive: external_exports.boolean().optional(),
40438
40444
  estimatedContextTokens: external_exports.number().int().nonnegative().default(0),
40439
40445
  contextWindowTokens: external_exports.number().int().positive().optional(),
40440
40446
  options: external_exports.array(aicosModelOptionSchema).default([])
@@ -41861,14 +41867,20 @@ var taskCreateInputSchema = external_exports.object({
41861
41867
  description: external_exports.string().trim().min(1),
41862
41868
  goal_id: uuidSchema9.optional(),
41863
41869
  acceptance_criteria: external_exports.array(external_exports.string().min(1)).optional(),
41864
- due_on: dateOnlySchema.optional()
41870
+ due_on: dateOnlySchema.optional(),
41871
+ // DER-1379: deterministic idempotency key; agent/scheduled producers only
41872
+ // (humans/null keep today's behavior); exact structural match.
41873
+ source_key: external_exports.string().trim().min(1).max(200).optional()
41865
41874
  }).strict();
41866
41875
  var taskCreateOutputSchema = external_exports.object({
41867
41876
  task_id: uuidSchema9,
41868
41877
  owner_seat_id: uuidSchema9,
41869
41878
  from_seat_id: uuidSchema9.nullable(),
41870
41879
  status: external_exports.string(),
41871
- due_on: external_exports.string().nullable()
41880
+ due_on: external_exports.string().nullable(),
41881
+ // DER-1379: true when this was an idempotent no-op returning an existing
41882
+ // active task (agent + matching source_key); false for a normal create.
41883
+ already_filed: external_exports.boolean().default(false)
41872
41884
  }).strict();
41873
41885
  var taskUpdateInputSchema = external_exports.object({
41874
41886
  task_id: uuidSchema9,
@@ -43785,6 +43797,12 @@ var runnerExecutionStateSchema = external_exports.enum([
43785
43797
  ]);
43786
43798
  var runnerExecutionReadinessSchema = external_exports.object({
43787
43799
  state: runnerExecutionStateSchema,
43800
+ // DER-1655: per-runner CAPABILITY — can this runner execute a turn right now
43801
+ // (online + local runtime + not allowance-blocked). This is the presence/readiness
43802
+ // bit CLI/API callers should read; `execute_ready` is dispatch-selection ONLY, so a
43803
+ // capable idle_unproven/queued_unclaimed runner must still serialize `capable: true`
43804
+ // over the wire even while `execute_ready` is false.
43805
+ capable: external_exports.boolean(),
43788
43806
  execute_ready: external_exports.boolean(),
43789
43807
  detail: external_exports.string(),
43790
43808
  due_queued_work_orders: external_exports.number().int().nonnegative(),
@@ -44161,7 +44179,7 @@ var systemHealthFindingCodeSchema = external_exports.enum([
44161
44179
  "failed_run",
44162
44180
  "unresolved_error",
44163
44181
  "offline_runner",
44164
- "runner_not_execute_ready",
44182
+ "runner_not_capable",
44165
44183
  "pending_signal",
44166
44184
  "off_track_signal",
44167
44185
  "missing_charter",
@@ -44230,7 +44248,12 @@ var systemHealthWorkLoopSectionSchema = external_exports.object({
44230
44248
  var systemHealthConnectivitySectionSchema = external_exports.object({
44231
44249
  runner_count: external_exports.number().int().nonnegative(),
44232
44250
  offline_runner_count: external_exports.number().int().nonnegative(),
44233
- not_execute_ready_runner_count: external_exports.number().int().nonnegative(),
44251
+ // DER-1655: a presence/readiness surface alerts on per-runner CAPABILITY
44252
+ // (execution.capable), not the dispatch-only executeReady bit. Counts runners
44253
+ // that cannot execute a turn right now (offline/unpaired, or online but
44254
+ // missing a runtime / model-account-exhausted). A capable-but-not-executeReady
44255
+ // runner (online idle_unproven / queued_unclaimed) is healthy and excluded.
44256
+ not_capable_runner_count: external_exports.number().int().nonnegative(),
44234
44257
  // DER-1588: fleet-wide near-cap/at-limit warning, driven off the runner capacity badge.
44235
44258
  near_cap_or_exhausted_runner_count: external_exports.number().int().nonnegative(),
44236
44259
  integration_count: external_exports.number().int().nonnegative(),
@@ -46267,6 +46290,9 @@ var statusRecordOutputSchema = external_exports.object({
46267
46290
  event_id: uuidSchema19,
46268
46291
  type: external_exports.literal("status")
46269
46292
  }).strict();
46293
+ var frictionFileIssueInputSchema = issueEventPayloadSchema.extend({
46294
+ source_key: external_exports.string().trim().min(1).max(200).optional()
46295
+ }).strict();
46270
46296
  var duplicateFrictionCandidateSchema = external_exports.object({
46271
46297
  issue_id: uuidSchema19,
46272
46298
  summary: external_exports.string().min(1),
@@ -46280,7 +46306,10 @@ var frictionFileIssueOutputSchema = external_exports.object({
46280
46306
  // DER-1522: likely-duplicate candidates detected before creation. Recommend,
46281
46307
  // never block — filing always proceeds; empty when nothing crossed the
46282
46308
  // conservative threshold (or the actor is not an agent).
46283
- duplicate_candidates: external_exports.array(duplicateFrictionCandidateSchema).default([])
46309
+ duplicate_candidates: external_exports.array(duplicateFrictionCandidateSchema).default([]),
46310
+ // DER-1379: true when this was an idempotent no-op returning an existing
46311
+ // active issue (agent + matching source_key); false for a normal file.
46312
+ already_filed: external_exports.boolean().default(false)
46284
46313
  }).strict();
46285
46314
  var workLogInputSchema = external_exports.object({
46286
46315
  note: external_exports.string().min(1)
@@ -46346,6 +46375,10 @@ var escalationStatusSchema = external_exports.enum([
46346
46375
  "overridden",
46347
46376
  "converted_to_issue"
46348
46377
  ]);
46378
+ var stewardReplayActionSummarySchema = external_exports.object({
46379
+ tool_name: external_exports.string(),
46380
+ run_id: uuidSchema20
46381
+ }).strict();
46349
46382
  var stewardEscalationSchema = external_exports.object({
46350
46383
  id: uuidSchema20,
46351
46384
  seat_id: uuidSchema20,
@@ -46355,6 +46388,11 @@ var stewardEscalationSchema = external_exports.object({
46355
46388
  steward_seat_name: external_exports.string(),
46356
46389
  reason: external_exports.string(),
46357
46390
  charter_clause: external_exports.string(),
46391
+ // DER-1634: secret-scrubbed evidence the agent attached when it escalated (the DB
46392
+ // scrubs it at write time; read projections re-scrub defensively — invariant #5).
46393
+ evidence: external_exports.unknown(),
46394
+ // DER-1634: scrubbed summary of the durable replay action, or null when there is none.
46395
+ replay_action_summary: stewardReplayActionSummarySchema.nullable(),
46358
46396
  recommended_action: external_exports.string().nullable(),
46359
46397
  status: escalationStatusSchema,
46360
46398
  decided_by: uuidSchema20.nullable(),
@@ -47977,7 +48015,7 @@ External connectors are being rolled out provider by provider, conservatively (r
47977
48015
  order: 48,
47978
48016
  title: "CLI and MCP installation guide",
47979
48017
  summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
47980
- version: "2026-07-15.5",
48018
+ version: "2026-07-16.2",
47981
48019
  public: true,
47982
48020
  audiences: ["human", "cli", "mcp", "in_app_agent"],
47983
48021
  stages: ["company_setup", "staffing"],
@@ -48681,7 +48719,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
48681
48719
  | \`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\`. |
48682
48720
  | \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
48683
48721
  | \`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\`. |
48684
- | \`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. |
48722
+ | \`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). |
48685
48723
  | \`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. |
48686
48724
  | \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
48687
48725
  | \`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>"}\`. |
@@ -48689,7 +48727,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
48689
48727
  | \`rost_complete_sync_run\` | \`sync.run.complete\` | Record that the Sync meeting completed (idempotent). | Tenant | Call with \`{"sync_brief_id":"<id>"}\`. |
48690
48728
  | \`rost_assign_sync_follow_up\` | \`sync.item.assign\` | Create a follow-up task from a Sync agenda item. | Tenant | Call with brief, owner seat, title, description. |
48691
48729
  | \`rost_list_escalations\` | \`escalation.list\` | List Steward queue escalations (own steward chain for humans, own seat for agents). | Seat or tenant-admin | Call with \`{}\` or \`{"include_decided":true}\`. |
48692
- | \`rost_get_escalation\` | \`escalation.get\` | Read one escalation's evidence, recommendation, and decision state. | Seat or tenant-admin | Call with \`{"id":"<escalation-id>"}\`. Resolve/reject are human-only and not exposed over MCP. |
48730
+ | \`rost_get_escalation\` | \`escalation.get\` | Read one escalation's secret-scrubbed evidence, recommendation, decision state, and \`replay_action_summary\` (the held tool + originating run a steward approval would replay \u2014 never the raw args). | Seat or tenant-admin | Call with \`{"id":"<escalation-id>"}\`. Resolve/reject are human-only and not exposed over MCP. |
48693
48731
  | \`rost_check_compass_alignment\` | \`compass.alignment\` | Advisory drift check: scores whether cycle goals still ladder to the active vision and flags orphan/contradictory goals. Read-only \u2014 it never edits the Compass or any goal. | Tenant | Call with \`{}\`. |
48694
48732
  | \`rost_team_health_score\` | \`team.health_score\` | Read the single rolled-up 0-100 team-health score (latest month) with its band and label. | Tenant | Call with \`{}\`. |
48695
48733
  | \`rost_show_compass_as_markdown\` | \`compass.show_markdown\` | Render the current Compass and its open gaps as a clean markdown card for review. | Tenant | Call with \`{}\`. |
@@ -48797,7 +48835,7 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
48797
48835
  | \`rost_report_status\` | \`status.record\` | Write a status event. | Seat | Call with a concise status payload. |
48798
48836
  | \`rost_complete_task\` | \`task.complete\` | Complete a task and record evidence. | Seat | Call with \`task_id\` and evidence. |
48799
48837
  | \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with severity, reason, and requested decision. |
48800
- | \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with title, severity, and impact. |
48838
+ | \`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. |
48801
48839
  | \`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. |
48802
48840
  | \`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"}\`. |
48803
48841
  | \`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. |
@@ -52066,7 +52104,7 @@ var COMMAND_MANIFEST = [
52066
52104
  { "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." },
52067
52105
  { "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." },
52068
52106
  { "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." },
52069
- { "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." },
52107
+ { "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." },
52070
52108
  { "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." },
52071
52109
  { "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." },
52072
52110
  { "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." },
@@ -52221,7 +52259,7 @@ var COMMAND_MANIFEST = [
52221
52259
  { "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." },
52222
52260
  { "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." },
52223
52261
  { "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." },
52224
- { "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" } },
52262
+ { "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" } },
52225
52263
  { "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." },
52226
52264
  { "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." },
52227
52265
  { "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." },
@@ -53013,18 +53051,21 @@ function renderRunnerList(output) {
53013
53051
  const record2 = asRecord(runner);
53014
53052
  const posture = asRecord(record2.posture);
53015
53053
  const capacity = asRecord(record2.capacity);
53054
+ const execution = asRecord(record2.execution);
53016
53055
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
53017
- 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")}`;
53056
+ 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}` : ""} execution=${field(execution, "state")} capable=${field(execution, "capable")} capacity=${field(capacity, "state")} account=${field(capacity, "account_alias")} freshness=${field(capacity, "freshness")}`;
53018
53057
  }).join("\n");
53019
53058
  }
53020
53059
  function renderRunnerStatus(output) {
53021
53060
  const record2 = asRecord(output);
53022
53061
  const posture = asRecord(record2.posture);
53023
53062
  const capacity = asRecord(record2.capacity);
53063
+ const execution = asRecord(record2.execution);
53024
53064
  const capabilitySet = asArray(posture.capability_set).map((value) => String(value)).join(", ");
53025
53065
  const lines = [
53026
53066
  `${field(record2, "id")} ${field(record2, "health")} ${field(record2, "name")} (last heartbeat ${field(record2, "last_heartbeat_at")}).`,
53027
53067
  `cli_version: ${field(record2, "cli_version")} sandbox: ${field(posture, "sandbox")} network: ${field(posture, "network")}`,
53068
+ `execution: ${field(execution, "state")} capable: ${field(execution, "capable")} execute_ready: ${field(execution, "execute_ready")}`,
53028
53069
  `capacity: ${field(capacity, "state")} account: ${field(capacity, "account_alias")} freshness: ${field(capacity, "freshness")} rate_limited_until: ${field(capacity, "rate_limited_until")}`
53029
53070
  ];
53030
53071
  if (capabilitySet.length > 0) {
@@ -53400,7 +53441,7 @@ function formatSystemHealth(output) {
53400
53441
  `signals: off_track=${field(signals, "off_track_count")} pending=${field(signals, "pending_count")}`,
53401
53442
  `cascade: recommendations=${field(cascade, "recommendation_count")} warnings=${field(cascade, "warning_count")}`,
53402
53443
  `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")}`,
53403
- `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")}`,
53444
+ `connectivity: runners=${field(connectivity, "runner_count")} offline_runners=${field(connectivity, "offline_runner_count")} not_ready_runners=${field(connectivity, "not_capable_runner_count")} integrations=${field(connectivity, "integration_count")} disconnected_integrations=${field(connectivity, "disconnected_integration_count")} failed_notifications=${field(connectivity, "failed_notification_count")}`,
53404
53445
  `sync: latest_brief=${field(sync, "latest_brief_at")} missing_latest_brief=${field(sync, "missing_latest_brief")} flagged_gaps=${field(sync, "flagged_gap_count")}`
53405
53446
  );
53406
53447
  return lines.join("\n");