@rosthq/cli 0.7.102 → 0.7.104
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 +40 -14
- package/dist/index.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -41776,6 +41776,10 @@ var frictionIssueSummarySchema = external_exports.object({
|
|
|
41776
41776
|
raised_by_seat_id: uuidSchema9,
|
|
41777
41777
|
raised_by_seat_name: external_exports.string(),
|
|
41778
41778
|
summary: external_exports.string(),
|
|
41779
|
+
// DER-1978 (S2): OPTIONAL short headline written at creation; null/absent when unset
|
|
41780
|
+
// (surfaces derive a clamped title from `summary`). Optional so existing callers and
|
|
41781
|
+
// legacy null-title rows validate unchanged.
|
|
41782
|
+
title: external_exports.string().nullable().optional(),
|
|
41779
41783
|
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
41780
41784
|
impact_score: external_exports.number(),
|
|
41781
41785
|
status: issueStatusSchema,
|
|
@@ -46383,6 +46387,12 @@ var syncBriefGoalDeltaSchema = external_exports.object({
|
|
|
46383
46387
|
title: external_exports.string().min(1),
|
|
46384
46388
|
status: external_exports.enum(["on", "off", "done", "dropped"]),
|
|
46385
46389
|
status_source: external_exports.string().min(1),
|
|
46390
|
+
// DER-1957 (S1): the goal's own progress reading (null when unmeasured), so the
|
|
46391
|
+
// sync-brief goal-delta row can render the shared goal-status chip with the same
|
|
46392
|
+
// pending-measurement rule Home and Cascade use — an unmeasured `on` goal reads
|
|
46393
|
+
// "Pending measurement", never a false "On track". Nullable + optional so briefs
|
|
46394
|
+
// persisted before this field parse unchanged.
|
|
46395
|
+
progress_pct: external_exports.number().int().min(0).max(100).nullable().optional(),
|
|
46386
46396
|
changed_this_period: external_exports.boolean()
|
|
46387
46397
|
}).strict();
|
|
46388
46398
|
var syncBriefTaskReviewSchema = external_exports.object({
|
|
@@ -46624,6 +46634,12 @@ var escalationRaiseInputSchema = external_exports.object({
|
|
|
46624
46634
|
charter_clause: external_exports.string().min(1),
|
|
46625
46635
|
evidence: evidenceSchema,
|
|
46626
46636
|
recommended_action: external_exports.string().min(1).optional(),
|
|
46637
|
+
// DER-1978 (S2): an OPTIONAL short human-readable title written at creation.
|
|
46638
|
+
// Agents' long narrative lands in `reason` (the body); this ≤90-char title is
|
|
46639
|
+
// what Home's "Needs you" band renders as the one-line summary. Optional so
|
|
46640
|
+
// every existing escalation event validates unchanged; when absent the read
|
|
46641
|
+
// surface derives a clamped title from `reason`.
|
|
46642
|
+
title: external_exports.string().trim().min(1).max(90).optional(),
|
|
46627
46643
|
// DER-1848: reason-adjacent category. Optional so every existing escalation event
|
|
46628
46644
|
// (and every ordinary held call) validates unchanged; present only when the agent
|
|
46629
46645
|
// explicitly escalated with a category (today: a safety refusal).
|
|
@@ -46637,7 +46653,13 @@ var issueEventPayloadSchema = external_exports.object({
|
|
|
46637
46653
|
blocking_goal_id: uuidSchema19.optional(),
|
|
46638
46654
|
broken_measurable_id: uuidSchema19.optional(),
|
|
46639
46655
|
evidence: evidenceSchema,
|
|
46640
|
-
severity: external_exports.enum(["low", "med", "high", "critical"])
|
|
46656
|
+
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
46657
|
+
// DER-1978 (S2): an OPTIONAL short human-readable title written at creation.
|
|
46658
|
+
// The agent's long narrative lands in `summary` (the body); this ≤90-char title
|
|
46659
|
+
// is what Home's "Needs you" band renders as the one-line summary. Optional so
|
|
46660
|
+
// every existing issue event validates unchanged; when absent the read surface
|
|
46661
|
+
// derives a clamped title from `summary`.
|
|
46662
|
+
title: external_exports.string().trim().min(1).max(90).optional()
|
|
46641
46663
|
}).strict();
|
|
46642
46664
|
|
|
46643
46665
|
// ../../packages/protocol/src/event-internal-payloads.ts
|
|
@@ -46900,6 +46922,10 @@ var stewardEscalationSchema = external_exports.object({
|
|
|
46900
46922
|
steward_seat_id: uuidSchema22,
|
|
46901
46923
|
steward_seat_name: external_exports.string(),
|
|
46902
46924
|
reason: external_exports.string(),
|
|
46925
|
+
// DER-1978 (S2): OPTIONAL short headline written at creation; null/absent when unset
|
|
46926
|
+
// (surfaces derive a clamped title from `reason`). Optional so existing callers and
|
|
46927
|
+
// legacy null-title rows validate unchanged.
|
|
46928
|
+
title: external_exports.string().nullable().optional(),
|
|
46903
46929
|
charter_clause: external_exports.string(),
|
|
46904
46930
|
// DER-1848: the first-class escalation category, or null for an ordinary held call.
|
|
46905
46931
|
// `safety_refusal` = the agent explicitly declined the task on safety grounds, so
|
|
@@ -48384,7 +48410,7 @@ Decisions should be recorded as human decisions. Handoffs should attach to seats
|
|
|
48384
48410
|
order: 45,
|
|
48385
48411
|
title: "How agents work",
|
|
48386
48412
|
summary: "How {{brand}} agents operate inside seats, use Charters, report work, and escalate beyond authority.",
|
|
48387
|
-
version: "2026-07-
|
|
48413
|
+
version: "2026-07-18.1",
|
|
48388
48414
|
public: true,
|
|
48389
48415
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48390
48416
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -48455,7 +48481,7 @@ A seat-scoped MCP token or the CLI runs the hand-shaped protocol. The server sti
|
|
|
48455
48481
|
2. Tasks: \`rost_get_tasks\` / \`{{cli}} task list --seat <seat-id>\`, then \`rost_accept_task\` / \`rost_decline_task\` (with a \`reason\`).
|
|
48456
48482
|
3. Report: \`rost_report_status\` / \`{{cli}} status record --seat <seat-id>\` as work progresses; \`rost_log_work\` to record evidence.
|
|
48457
48483
|
4. Finish: \`rost_complete_task\` / \`{{cli}} task complete --seat <seat-id>\` with evidence.
|
|
48458
|
-
5. Surface problems: \`rost_file_issue\` (Friction) and \`rost_escalate\` when the work exceeds autonomous scope.
|
|
48484
|
+
5. Surface problems: \`rost_file_issue\` (Friction) and \`rost_escalate\` when the work exceeds autonomous scope. Both take an optional short \`title\` (\u226490 chars) for the "Needs you" headline \u2014 put the long narrative in the body (\`summary\` / \`reason\`).
|
|
48459
48485
|
|
|
48460
48486
|
A seat-scoped MCP token already carries the seat, so its tools (\`rost_get_tasks\`, \u2026) need no seat argument. A tenant or owner CLI **session** does not, so pass \`--seat <seat-id>\` on seat-operating wrappers (an owner can target any seat in the tenant; a member only a seat they occupy). See "Seat scope" below.
|
|
48461
48487
|
|
|
@@ -48643,7 +48669,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
48643
48669
|
order: 48,
|
|
48644
48670
|
title: "CLI and MCP installation guide",
|
|
48645
48671
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
48646
|
-
version: "2026-07-18.
|
|
48672
|
+
version: "2026-07-18.4",
|
|
48647
48673
|
public: true,
|
|
48648
48674
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48649
48675
|
stages: ["company_setup", "staffing"],
|
|
@@ -49477,8 +49503,8 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
|
|
|
49477
49503
|
| \`rost_decline_task\` | \`task.decline\` | Decline a task with a reason. | Seat | Call with \`task_id\` and \`reason\`. |
|
|
49478
49504
|
| \`rost_report_status\` | \`status.record\` | Write a status event. | Seat | Call with a concise status payload. |
|
|
49479
49505
|
| \`rost_complete_task\` | \`task.complete\` | Complete a task and record evidence. | Seat | Call with \`task_id\` and evidence. |
|
|
49480
|
-
| \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with
|
|
49481
|
-
| \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with
|
|
49506
|
+
| \`rost_escalate\` | \`escalation.raise\` | Escalate approval-scope or must-escalate work. | Seat | Call with reason and requested decision; pass an optional short \`title\` (\u226490 chars) for the "Needs you" headline and keep the long narrative in \`reason\`. |
|
|
49507
|
+
| \`rost_file_issue\` | \`friction.file_issue\` | File a Friction issue. | Seat | Call with \`summary\`, severity, and evidence; pass an optional short \`title\` (\u226490 chars) for the headline and keep the long narrative in \`summary\`. 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. |
|
|
49482
49508
|
| \`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. |
|
|
49483
49509
|
| \`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"}\`. |
|
|
49484
49510
|
| \`rost_draft_first_readings_from_a_connected_source\` | \`signal.draft_first_readings\` | Pull this seat's measurable's connected source ONCE (read-only, SSRF-guarded) and land the value as a DRAFT reading for the current period, for a human to confirm. For a measurable that has a source but no confirmed reading yet. Never publishes and never fabricates a value \u2014 a non-numeric or blocked pull drafts nothing. | Seat | Call with \`{"measurable_id":"<id>"}\`. |
|
|
@@ -50171,7 +50197,7 @@ Agents may record readings when the Charter allows it. Agent-reported readings s
|
|
|
50171
50197
|
order: 62,
|
|
50172
50198
|
title: "Friction guide",
|
|
50173
50199
|
summary: "How to capture issues with evidence, rank them, and resolve them without losing ownership.",
|
|
50174
|
-
version: "2026-07-
|
|
50200
|
+
version: "2026-07-18.1",
|
|
50175
50201
|
public: true,
|
|
50176
50202
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
50177
50203
|
stages: ["operating_rhythm"],
|
|
@@ -50232,7 +50258,7 @@ The Friction page opens with one computed line \u2014 how many issues are open,
|
|
|
50232
50258
|
|
|
50233
50259
|
Friction, tasks, and escalations are the issue-to-action loop. A seat files, a task carries the work, and an escalation routes a decision a seat cannot make alone.
|
|
50234
50260
|
|
|
50235
|
-
- File and triage: \`{{cli}} friction file ...\` / \`friction.file_issue\` (seat) / \`rost_file_issue
|
|
50261
|
+
- File and triage: \`{{cli}} friction file ...\` / \`friction.file_issue\` (seat) / \`rost_file_issue\`. \`friction.file_issue\` takes an optional short \`title\` (\u226490 chars) for the "Needs you" headline \u2014 keep the long narrative in \`summary\`. List with \`{{cli}} friction list --status open --json\` / \`friction.list\` / \`rost_list_friction_issues\`; move between open and diagnosing with \`friction.update_status\` / \`rost_update_friction_issue_status\`.
|
|
50236
50262
|
- Carry the work as a task: \`task.create\` / \`rost_create_task\` (a commitment between seats). \`task.create\` is \`none\` (no confirmation gate), so an agent can file one directly; an ordinary agent task lands as a **draft** proposal (\`origin: agent_proposal\`) for a target-side human to confirm or decline through \`task.confirm_proposal\` / \`task.decline_proposal\` in \`/approvals\` or the CLI \u2014 not MCP, and not a live offer in the owning seat's accept/decline queue. A bounded Trusted task-create grant may skip that draft card: it creates an **offered** handoff by default, and only creates **in_progress** when both proposing and target seats are live agent seats resolving to the same current accountable human Steward. A seat runs its live queue with \`{{cli}} task list|accept|decline|complete\` (\`task.list\`, \`task.accept\`, \`task.decline\`, \`task.complete\`). Link a task to an issue with \`friction.link_task\` / \`rost_link_task_to_friction_issue\`.
|
|
50237
50263
|
- Route a decision: \`escalation.raise\` (seat) / \`rost_escalate\` sends approval-scope or must-escalate work to the Steward queue. Reads are \`escalation.list\` / \`escalation.get\`. See the steward queue guide for resolution.
|
|
50238
50264
|
|
|
@@ -50255,7 +50281,7 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
50255
50281
|
order: 70,
|
|
50256
50282
|
title: "Steward queue guide",
|
|
50257
50283
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
50258
|
-
version: "2026-07-
|
|
50284
|
+
version: "2026-07-18.1",
|
|
50259
50285
|
public: true,
|
|
50260
50286
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
50261
50287
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -50312,7 +50338,7 @@ Every notification sent to you \u2014 escalations, approval requests, sync brief
|
|
|
50312
50338
|
|
|
50313
50339
|
The Steward reads the queue from any surface but decides as a human.
|
|
50314
50340
|
|
|
50315
|
-
- Read: \`{{cli}} escalation list --json\` / \`escalation.list\` / \`rost_list_escalations\` (own steward chain for humans, own seat for agents). Read one with \`{{cli}} escalation get\` / \`escalation.get\` / \`rost_get_escalation\` \u2014 evidence, recommendation, and decision state.
|
|
50341
|
+
- Read: \`{{cli}} escalation list --json\` / \`escalation.list\` / \`rost_list_escalations\` (own steward chain for humans, own seat for agents). Read one with \`{{cli}} escalation get\` / \`escalation.get\` / \`rost_get_escalation\` \u2014 evidence, recommendation, and decision state. An item may carry a short \`title\` (\u226490 chars) the raising agent wrote as the "Needs you" headline; the full narrative stays in \`reason\`.
|
|
50316
50342
|
- Decide: \`{{cli}} escalation resolve\` / \`escalation.resolve\` and \`{{cli}} escalation reject\` / \`escalation.reject\`. \`escalation.resolve\` and \`escalation.reject\` are \`none\` at the confirmation layer, but they are deliberately NOT exposed over MCP \u2014 \`decisions.decided_by\` must be a human, so there is no \`rost_resolve_escalation\` tool. They are kept human-only by that MCP exclusion plus the human-only \`decided_by\`, not by a confirmation gate. The CLI runs them as the authenticated human; an agent session must hand the decision to a person.
|
|
50317
50343
|
- Approve gated requests: when an escalation or Charter change produces a pending confirmation, the human approves with \`confirmation.approve\` (or rejects with \`confirmation.reject\`). Go-live runs through \`agent.go_live\`.
|
|
50318
50344
|
|
|
@@ -52776,13 +52802,13 @@ var COMMAND_MANIFEST = [
|
|
|
52776
52802
|
{ "id": "escalation.bulk_resolve", "namespace": "escalation", "action": "bulk_resolve", "title": "Bulk resolve escalations", "description": "Override (safely close) a batch of stale open escalations in one human-confirmed action, with a required reason. Each escalation is decided independently (partial success) and writes its own human decision; already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": false, "fields": [{ "name": "escalation_ids", "flag": "escalation-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Override (safely close) a batch of stale open escalations in one human-confirmed action; each records its own human decision and already-decided, not-routed, or missing ids are skipped. Agents cannot bulk-resolve." },
|
|
52777
52803
|
{ "id": "escalation.get", "namespace": "escalation", "action": "get", "title": "Get escalation", "description": "Read a single escalation the caller is allowed to see (own steward chain for humans, own seat for agents).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "id", "flag": "id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Read one escalation's evidence and recommendation before a human resolves or rejects it." },
|
|
52778
52804
|
{ "id": "escalation.list", "namespace": "escalation", "action": "list", "title": "List escalations", "description": "List Steward queue escalations routed to the caller's steward chain (human) or raised by the caller's seat (agent).", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List Steward queue escalations (own chain for humans, own seat for agents) before resolving or routing them." },
|
|
52779
|
-
{ "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
|
|
52805
|
+
{ "id": "escalation.raise", "namespace": "escalation", "action": "raise", "title": "Raise escalation", "description": "Emit an escalation event and open a Steward queue item for the acting seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "charter_clause", "flag": "charter-clause", "type": "string", "required": true }, { "name": "recommended_action", "flag": "recommended-action", "type": "string", "required": false }, { "name": "title", "flag": "title", "type": "string", "required": false }, { "name": "category", "flag": "category", "type": "enum", "required": false, "enumValues": ["safety_refusal"] }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
|
|
52780
52806
|
{ "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." },
|
|
52781
52807
|
{ "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." },
|
|
52782
52808
|
{ "id": "escalation.stale_candidates", "namespace": "escalation", "action": "stale_candidates", "title": "Find stale escalations", "description": "List open escalations routed to the caller's steward chain that have aged and still reference a concrete DER issue or PR, with a per-row confidence tier and evidence. Read-only \u2014 it never decides anything.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "stale_after_days", "flag": "stale-after-days", "type": "integer", "required": false }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List aged open escalations in the caller's steward chain that still reference a concrete DER issue or PR \u2014 candidates for a bulk override. Read-only." },
|
|
52783
52809
|
{ "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." },
|
|
52784
52810
|
{ "id": "friction.bulk_resolve", "namespace": "friction", "action": "bulk_resolve", "title": "Bulk resolve friction", "description": "Resolve a batch of stale Friction issues in one human-confirmed action with a required root cause (already-fixed mode \u2014 no follow-up task). Each issue is resolved independently (partial success) and writes its own human decision; already-resolved or missing ids are skipped.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_ids", "flag": "issue-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }], "hasComplexInput": false, "help": "Resolve a batch of stale issues in one human-confirmed action with a required root cause (already-fixed mode); each records its own human decision and already-resolved or missing ids are skipped." },
|
|
52785
|
-
{ "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." },
|
|
52811
|
+
{ "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": "title", "flag": "title", "type": "string", "required": false }, { "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." },
|
|
52786
52812
|
{ "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." },
|
|
52787
52813
|
{ "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." },
|
|
52788
52814
|
{ "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." },
|
|
@@ -58036,11 +58062,11 @@ async function probeClaude() {
|
|
|
58036
58062
|
resident_session: streamJsonSupported ? {
|
|
58037
58063
|
status: "prototype_gated",
|
|
58038
58064
|
transport: "stream-json",
|
|
58039
|
-
reason: "
|
|
58065
|
+
reason: "resident session gated until multi-turn behavior proven"
|
|
58040
58066
|
} : {
|
|
58041
58067
|
status: "unsupported",
|
|
58042
58068
|
transport: null,
|
|
58043
|
-
reason: "
|
|
58069
|
+
reason: "stream-json interface not detected on this runner"
|
|
58044
58070
|
}
|
|
58045
58071
|
};
|
|
58046
58072
|
}
|