@rosthq/cli 0.7.88 → 0.7.90
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":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,
|
|
1
|
+
{"version":3,"file":"command-manifest.d.ts","sourceRoot":"","sources":["../../src/generated/command-manifest.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EAgR3D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -43679,6 +43679,131 @@ var errorLogSupersedeOutputSchema = external_exports.object({
|
|
|
43679
43679
|
disposition: external_exports.literal("superseded"),
|
|
43680
43680
|
resolved_at: isoDateTime4
|
|
43681
43681
|
}).strict();
|
|
43682
|
+
var staleCandidateConfidenceSchema = external_exports.enum(["low", "medium", "high"]);
|
|
43683
|
+
var staleCandidateEvidenceSchema = external_exports.array(external_exports.string());
|
|
43684
|
+
var staleCandidatesInputSchema = external_exports.object({
|
|
43685
|
+
stale_after_days: external_exports.number().int().min(1).max(365).default(14),
|
|
43686
|
+
limit: external_exports.number().int().min(1).max(200).default(50)
|
|
43687
|
+
}).strict();
|
|
43688
|
+
var errorLogStaleCandidateSchema = external_exports.object({
|
|
43689
|
+
error_log_id: uuidSchema14,
|
|
43690
|
+
source: external_exports.enum(["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"]),
|
|
43691
|
+
severity: external_exports.enum(["warning", "error", "critical"]),
|
|
43692
|
+
code: external_exports.string().nullable(),
|
|
43693
|
+
message: external_exports.string(),
|
|
43694
|
+
seat_id: uuidSchema14.nullable(),
|
|
43695
|
+
occurrence_count: external_exports.number().int(),
|
|
43696
|
+
last_seen_at: isoDateTime4,
|
|
43697
|
+
created_at: isoDateTime4,
|
|
43698
|
+
days_stale: external_exports.number().int(),
|
|
43699
|
+
linked_issue_id: uuidSchema14.nullable(),
|
|
43700
|
+
linked_issue_resolved: external_exports.boolean(),
|
|
43701
|
+
confidence: staleCandidateConfidenceSchema,
|
|
43702
|
+
evidence: staleCandidateEvidenceSchema
|
|
43703
|
+
}).strict();
|
|
43704
|
+
var errorLogStaleCandidatesOutputSchema = external_exports.object({
|
|
43705
|
+
candidates: external_exports.array(errorLogStaleCandidateSchema),
|
|
43706
|
+
total: external_exports.number().int().nonnegative()
|
|
43707
|
+
}).strict();
|
|
43708
|
+
var escalationStaleCandidateSchema = external_exports.object({
|
|
43709
|
+
escalation_id: uuidSchema14,
|
|
43710
|
+
seat_id: uuidSchema14,
|
|
43711
|
+
seat_name: external_exports.string(),
|
|
43712
|
+
reason: external_exports.string(),
|
|
43713
|
+
status: external_exports.literal("open"),
|
|
43714
|
+
created_at: isoDateTime4,
|
|
43715
|
+
updated_at: isoDateTime4,
|
|
43716
|
+
days_stale: external_exports.number().int(),
|
|
43717
|
+
referenced_refs: external_exports.array(external_exports.string()),
|
|
43718
|
+
confidence: staleCandidateConfidenceSchema,
|
|
43719
|
+
evidence: staleCandidateEvidenceSchema
|
|
43720
|
+
}).strict();
|
|
43721
|
+
var escalationStaleCandidatesOutputSchema = external_exports.object({
|
|
43722
|
+
candidates: external_exports.array(escalationStaleCandidateSchema),
|
|
43723
|
+
total: external_exports.number().int().nonnegative()
|
|
43724
|
+
}).strict();
|
|
43725
|
+
var frictionStaleCandidateSchema = external_exports.object({
|
|
43726
|
+
issue_id: uuidSchema14,
|
|
43727
|
+
summary: external_exports.string(),
|
|
43728
|
+
severity: external_exports.enum(["low", "med", "high", "critical"]),
|
|
43729
|
+
status: external_exports.enum(["open", "diagnosing"]),
|
|
43730
|
+
created_at: isoDateTime4,
|
|
43731
|
+
updated_at: isoDateTime4,
|
|
43732
|
+
days_stale: external_exports.number().int(),
|
|
43733
|
+
action_task_id: uuidSchema14.nullable(),
|
|
43734
|
+
action_task_status: external_exports.string().nullable(),
|
|
43735
|
+
action_task_done: external_exports.boolean(),
|
|
43736
|
+
confidence: staleCandidateConfidenceSchema,
|
|
43737
|
+
evidence: staleCandidateEvidenceSchema
|
|
43738
|
+
}).strict();
|
|
43739
|
+
var frictionStaleCandidatesOutputSchema = external_exports.object({
|
|
43740
|
+
candidates: external_exports.array(frictionStaleCandidateSchema),
|
|
43741
|
+
total: external_exports.number().int().nonnegative()
|
|
43742
|
+
}).strict();
|
|
43743
|
+
var errorLogBulkResolveInputSchema = external_exports.object({
|
|
43744
|
+
error_log_ids: external_exports.array(uuidSchema14).min(1).max(200),
|
|
43745
|
+
reason: external_exports.string().trim().min(1),
|
|
43746
|
+
disposition: external_exports.enum(["acknowledged", "resolved"]).default("resolved")
|
|
43747
|
+
}).strict();
|
|
43748
|
+
var errorLogBulkResolveSkippedSchema = external_exports.object({
|
|
43749
|
+
error_log_id: uuidSchema14,
|
|
43750
|
+
reason: external_exports.string()
|
|
43751
|
+
}).strict();
|
|
43752
|
+
var errorLogBulkResolveFailedSchema = external_exports.object({
|
|
43753
|
+
error_log_id: uuidSchema14,
|
|
43754
|
+
reason: external_exports.string()
|
|
43755
|
+
}).strict();
|
|
43756
|
+
var errorLogBulkResolveOutputSchema = external_exports.object({
|
|
43757
|
+
resolved: external_exports.array(uuidSchema14),
|
|
43758
|
+
skipped: external_exports.array(errorLogBulkResolveSkippedSchema),
|
|
43759
|
+
failed: external_exports.array(errorLogBulkResolveFailedSchema),
|
|
43760
|
+
resolved_count: external_exports.number().int().nonnegative(),
|
|
43761
|
+
skipped_count: external_exports.number().int().nonnegative(),
|
|
43762
|
+
failed_count: external_exports.number().int().nonnegative(),
|
|
43763
|
+
total: external_exports.number().int().nonnegative()
|
|
43764
|
+
}).strict();
|
|
43765
|
+
var escalationBulkResolveInputSchema = external_exports.object({
|
|
43766
|
+
escalation_ids: external_exports.array(uuidSchema14).min(1).max(200),
|
|
43767
|
+
reason: external_exports.string().trim().min(1)
|
|
43768
|
+
}).strict();
|
|
43769
|
+
var escalationBulkResolveSkippedSchema = external_exports.object({
|
|
43770
|
+
escalation_id: uuidSchema14,
|
|
43771
|
+
reason: external_exports.string()
|
|
43772
|
+
}).strict();
|
|
43773
|
+
var escalationBulkResolveFailedSchema = external_exports.object({
|
|
43774
|
+
escalation_id: uuidSchema14,
|
|
43775
|
+
reason: external_exports.string()
|
|
43776
|
+
}).strict();
|
|
43777
|
+
var escalationBulkResolveOutputSchema = external_exports.object({
|
|
43778
|
+
resolved: external_exports.array(uuidSchema14),
|
|
43779
|
+
skipped: external_exports.array(escalationBulkResolveSkippedSchema),
|
|
43780
|
+
failed: external_exports.array(escalationBulkResolveFailedSchema),
|
|
43781
|
+
resolved_count: external_exports.number().int().nonnegative(),
|
|
43782
|
+
skipped_count: external_exports.number().int().nonnegative(),
|
|
43783
|
+
failed_count: external_exports.number().int().nonnegative(),
|
|
43784
|
+
total: external_exports.number().int().nonnegative()
|
|
43785
|
+
}).strict();
|
|
43786
|
+
var frictionBulkResolveInputSchema = external_exports.object({
|
|
43787
|
+
issue_ids: external_exports.array(uuidSchema14).min(1).max(200),
|
|
43788
|
+
root_cause: external_exports.string().trim().min(1)
|
|
43789
|
+
}).strict();
|
|
43790
|
+
var frictionBulkResolveSkippedSchema = external_exports.object({
|
|
43791
|
+
issue_id: uuidSchema14,
|
|
43792
|
+
reason: external_exports.string()
|
|
43793
|
+
}).strict();
|
|
43794
|
+
var frictionBulkResolveFailedSchema = external_exports.object({
|
|
43795
|
+
issue_id: uuidSchema14,
|
|
43796
|
+
reason: external_exports.string()
|
|
43797
|
+
}).strict();
|
|
43798
|
+
var frictionBulkResolveOutputSchema = external_exports.object({
|
|
43799
|
+
resolved: external_exports.array(uuidSchema14),
|
|
43800
|
+
skipped: external_exports.array(frictionBulkResolveSkippedSchema),
|
|
43801
|
+
failed: external_exports.array(frictionBulkResolveFailedSchema),
|
|
43802
|
+
resolved_count: external_exports.number().int().nonnegative(),
|
|
43803
|
+
skipped_count: external_exports.number().int().nonnegative(),
|
|
43804
|
+
failed_count: external_exports.number().int().nonnegative(),
|
|
43805
|
+
total: external_exports.number().int().nonnegative()
|
|
43806
|
+
}).strict();
|
|
43682
43807
|
|
|
43683
43808
|
// ../../packages/protocol/src/working-files.ts
|
|
43684
43809
|
var WORKING_FILE_MAX_PATH_CHARS = 512;
|
|
@@ -46610,6 +46735,108 @@ var workDetailsSchemas = {
|
|
|
46610
46735
|
}).strict()
|
|
46611
46736
|
};
|
|
46612
46737
|
|
|
46738
|
+
// ../../packages/protocol/src/agent-grant-intervention.ts
|
|
46739
|
+
var uuidSchema21 = external_exports.string().uuid();
|
|
46740
|
+
var agentGrantBlockerKindSchema = external_exports.enum([
|
|
46741
|
+
"rost_capability",
|
|
46742
|
+
"os_permission",
|
|
46743
|
+
"provider_connection",
|
|
46744
|
+
"vault_credential",
|
|
46745
|
+
"explicit_charter_escalation"
|
|
46746
|
+
]);
|
|
46747
|
+
var agentGrantInterventionStatusSchema = external_exports.enum([
|
|
46748
|
+
"blocked",
|
|
46749
|
+
"granted",
|
|
46750
|
+
"resumed",
|
|
46751
|
+
"declined",
|
|
46752
|
+
"expired"
|
|
46753
|
+
]);
|
|
46754
|
+
var agentGrantKindSchema = external_exports.enum(["allow_once", "permanent"]);
|
|
46755
|
+
var agentGrantInterventionSchema = external_exports.object({
|
|
46756
|
+
id: uuidSchema21,
|
|
46757
|
+
seat_id: uuidSchema21,
|
|
46758
|
+
seat_name: external_exports.string().nullable(),
|
|
46759
|
+
agent_id: uuidSchema21.nullable(),
|
|
46760
|
+
// The source blocked attempt (audit link); null once the run is retention-purged.
|
|
46761
|
+
run_id: uuidSchema21.nullable(),
|
|
46762
|
+
// The runner the blocker lives on, for os_permission repairs ("Open on Runner").
|
|
46763
|
+
runner_id: uuidSchema21.nullable(),
|
|
46764
|
+
// The linked continuation attempt, populated when a continuation is enqueued.
|
|
46765
|
+
continuation_run_id: uuidSchema21.nullable(),
|
|
46766
|
+
blocker_kind: agentGrantBlockerKindSchema,
|
|
46767
|
+
status: agentGrantInterventionStatusSchema,
|
|
46768
|
+
// The specific capability/scope requested (e.g. "gmail.send"), when applicable.
|
|
46769
|
+
missing_capability: external_exports.string().nullable(),
|
|
46770
|
+
// The specific, factually-stated ask shown to the human (no secrets, no raw UUIDs).
|
|
46771
|
+
missing_grant_summary: external_exports.string(),
|
|
46772
|
+
// Digest of the exact action the one-time grant is bound to. A stale/changed
|
|
46773
|
+
// digest at decide time expires the grant rather than replaying a widened one.
|
|
46774
|
+
action_digest: external_exports.string().nullable(),
|
|
46775
|
+
// Bounded-checkpoint reference (the attempt's saved position/evidence, scrubbed).
|
|
46776
|
+
checkpoint_ref: external_exports.string().nullable(),
|
|
46777
|
+
// True once the blocked attempt released its lease/compute (AC #2 clean termination).
|
|
46778
|
+
compute_released: external_exports.boolean(),
|
|
46779
|
+
grant_kind: agentGrantKindSchema.nullable(),
|
|
46780
|
+
decided_by: uuidSchema21.nullable(),
|
|
46781
|
+
decided_by_name: external_exports.string().nullable(),
|
|
46782
|
+
decided_at: external_exports.string().nullable(),
|
|
46783
|
+
expires_at: external_exports.string().nullable(),
|
|
46784
|
+
created_at: external_exports.string(),
|
|
46785
|
+
updated_at: external_exports.string()
|
|
46786
|
+
}).strict();
|
|
46787
|
+
var agentGrantInterventionListInputSchema = external_exports.object({
|
|
46788
|
+
// Optional seat filter (a seat-scoped caller is additionally clamped to its own seat).
|
|
46789
|
+
seat_id: uuidSchema21.optional(),
|
|
46790
|
+
// When true, include decided/terminal records (declined/resumed/expired) too;
|
|
46791
|
+
// by default only the actionable open blocked/granted records are returned.
|
|
46792
|
+
include_decided: external_exports.boolean().optional()
|
|
46793
|
+
}).strict();
|
|
46794
|
+
var agentGrantInterventionListOutputSchema = external_exports.object({
|
|
46795
|
+
interventions: external_exports.array(agentGrantInterventionSchema)
|
|
46796
|
+
}).strict();
|
|
46797
|
+
var agentGrantInterventionGetInputSchema = external_exports.object({
|
|
46798
|
+
id: uuidSchema21
|
|
46799
|
+
}).strict();
|
|
46800
|
+
var agentGrantInterventionGetOutputSchema = external_exports.object({
|
|
46801
|
+
intervention: agentGrantInterventionSchema
|
|
46802
|
+
}).strict();
|
|
46803
|
+
var agentGrantInterventionDecideActionSchema = external_exports.enum(["grant", "decline"]);
|
|
46804
|
+
var agentGrantInterventionDecideInputSchema = external_exports.object({
|
|
46805
|
+
intervention_id: uuidSchema21,
|
|
46806
|
+
action: agentGrantInterventionDecideActionSchema,
|
|
46807
|
+
// Defaults to allow_once. `permanent` never auto-widens — it returns
|
|
46808
|
+
// requires_charter_resign so the surface routes the human to a Charter re-sign.
|
|
46809
|
+
grant_kind: agentGrantKindSchema.optional(),
|
|
46810
|
+
// When provided on a grant, must byte-match the record's action_digest (proves
|
|
46811
|
+
// the human is authorizing the SAME exact action the agent blocked on); a
|
|
46812
|
+
// mismatch expires the grant instead of replaying a stale/widened action.
|
|
46813
|
+
action_digest: external_exports.string().optional(),
|
|
46814
|
+
rationale: external_exports.string().trim().min(1).max(2e3).optional()
|
|
46815
|
+
}).strict();
|
|
46816
|
+
var agentGrantInterventionDecideOutputSchema = external_exports.object({
|
|
46817
|
+
intervention_id: uuidSchema21,
|
|
46818
|
+
status: agentGrantInterventionStatusSchema,
|
|
46819
|
+
continuation_run_id: uuidSchema21.nullable(),
|
|
46820
|
+
// The human decision row written for a grant/decline (invariant #7). Null only
|
|
46821
|
+
// when a permanent grant deferred to a Charter re-sign (no one-time decision made).
|
|
46822
|
+
decision_id: uuidSchema21.nullable(),
|
|
46823
|
+
// True when the human chose the permanent option — the surface must route to a
|
|
46824
|
+
// Charter re-sign; no authority was widened by this call (invariant #10).
|
|
46825
|
+
requires_charter_resign: external_exports.boolean(),
|
|
46826
|
+
// True when authority committed but the continuation enqueue did not complete —
|
|
46827
|
+
// the human can retry ONLY the enqueue via `resume` (never re-grant).
|
|
46828
|
+
enqueue_failed: external_exports.boolean()
|
|
46829
|
+
}).strict();
|
|
46830
|
+
var agentGrantInterventionResumeInputSchema = external_exports.object({
|
|
46831
|
+
intervention_id: uuidSchema21
|
|
46832
|
+
}).strict();
|
|
46833
|
+
var agentGrantInterventionResumeOutputSchema = external_exports.object({
|
|
46834
|
+
intervention_id: uuidSchema21,
|
|
46835
|
+
status: agentGrantInterventionStatusSchema,
|
|
46836
|
+
continuation_run_id: uuidSchema21.nullable(),
|
|
46837
|
+
enqueue_failed: external_exports.boolean()
|
|
46838
|
+
}).strict();
|
|
46839
|
+
|
|
46613
46840
|
// ../../packages/protocol/src/index.ts
|
|
46614
46841
|
var eventTypes = [
|
|
46615
46842
|
"status",
|
|
@@ -46624,7 +46851,7 @@ var eventTypes = [
|
|
|
46624
46851
|
"task"
|
|
46625
46852
|
];
|
|
46626
46853
|
var publicMessageTypes = ["status", "handoff", "escalation", "issue"];
|
|
46627
|
-
var
|
|
46854
|
+
var uuidSchema22 = external_exports.string().uuid();
|
|
46628
46855
|
var evidenceSchema2 = external_exports.array(external_exports.unknown());
|
|
46629
46856
|
var internalEventPayloadSchema = external_exports.record(external_exports.string(), external_exports.unknown()).refine((payload) => !Array.isArray(payload), "Internal event payload must be an object");
|
|
46630
46857
|
var handoffEventPayloadSchema = external_exports.object({
|
|
@@ -46634,24 +46861,24 @@ var handoffEventPayloadSchema = external_exports.object({
|
|
|
46634
46861
|
acceptance_criteria: external_exports.array(external_exports.string().min(1)),
|
|
46635
46862
|
due: external_exports.string().datetime({ offset: true })
|
|
46636
46863
|
}).strict(),
|
|
46637
|
-
to_seat_id:
|
|
46864
|
+
to_seat_id: uuidSchema22
|
|
46638
46865
|
}).strict();
|
|
46639
46866
|
var intakeEventPayloadSchema = external_exports.discriminatedUnion("action", [
|
|
46640
46867
|
external_exports.object({
|
|
46641
46868
|
action: external_exports.literal("uploaded"),
|
|
46642
|
-
document_id:
|
|
46869
|
+
document_id: uuidSchema22,
|
|
46643
46870
|
storage_ref: external_exports.string().min(1)
|
|
46644
46871
|
}).strict(),
|
|
46645
46872
|
external_exports.object({
|
|
46646
46873
|
action: external_exports.literal("parsed"),
|
|
46647
|
-
document_id:
|
|
46874
|
+
document_id: uuidSchema22,
|
|
46648
46875
|
mode: external_exports.enum(["source_tree", "function_first"]),
|
|
46649
46876
|
seat_count: external_exports.number().int().nonnegative(),
|
|
46650
46877
|
edge_count: external_exports.number().int().nonnegative()
|
|
46651
46878
|
}).strict(),
|
|
46652
46879
|
external_exports.object({
|
|
46653
46880
|
action: external_exports.literal("failed"),
|
|
46654
|
-
document_id:
|
|
46881
|
+
document_id: uuidSchema22,
|
|
46655
46882
|
reason: external_exports.string().min(1)
|
|
46656
46883
|
}).strict(),
|
|
46657
46884
|
external_exports.object({
|
|
@@ -46757,9 +46984,9 @@ var publicMessageTypeSchema = external_exports.enum(publicMessageTypes);
|
|
|
46757
46984
|
var eventEnvelopeBaseSchema = external_exports.object({
|
|
46758
46985
|
protocol: external_exports.literal(EVENT_PROTOCOL),
|
|
46759
46986
|
type: eventTypeSchema,
|
|
46760
|
-
seat_id:
|
|
46987
|
+
seat_id: uuidSchema22.nullable(),
|
|
46761
46988
|
occurred_at: external_exports.string().datetime({ offset: true }),
|
|
46762
|
-
goal_ancestry: external_exports.array(
|
|
46989
|
+
goal_ancestry: external_exports.array(uuidSchema22)
|
|
46763
46990
|
}).strict();
|
|
46764
46991
|
var statusEventEnvelopeSchema = eventEnvelopeBaseSchema.extend({
|
|
46765
46992
|
type: external_exports.literal("status"),
|
|
@@ -48015,7 +48242,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
48015
48242
|
order: 48,
|
|
48016
48243
|
title: "CLI and MCP installation guide",
|
|
48017
48244
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
48018
|
-
version: "2026-07-16.
|
|
48245
|
+
version: "2026-07-16.4",
|
|
48019
48246
|
public: true,
|
|
48020
48247
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48021
48248
|
stages: ["company_setup", "staffing"],
|
|
@@ -48660,6 +48887,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48660
48887
|
| \`rost_list_error_logs\` | \`error_log.list\` | List product error logs by seat, source, severity, and active/resolved state. | Tenant | Call with \`{"resolved":"active"}\` before acknowledging stale failures. |
|
|
48661
48888
|
| \`rost_resolve_error_log\` | \`error_log.resolve\` | Acknowledge or resolve an error log with a required human reason and optional task, issue, or PR link. | Tenant | Call with \`error_log_id\`, \`reason\`, and \`disposition\` \`acknowledged\` or \`resolved\`. |
|
|
48662
48889
|
| \`rost_supersede_error_log\` | \`error_log.supersede\` | Mark an older error log as superseded by a newer in-tenant error log. | Tenant | Call with \`error_log_id\`, \`new_error_log_id\`, and \`reason\`. |
|
|
48890
|
+
| \`rost_find_stale_error_logs\` | \`error_log.stale_candidates\` | List unresolved error logs that have gone flat (no new occurrences) and are candidates for bulk resolution, with a per-row confidence tier and evidence. Read-only. | Tenant | Call with optional \`stale_after_days\` and \`limit\`; feed the returned ids to \`error_log.bulk_resolve\`. |
|
|
48891
|
+
| \`rost_bulk_resolve_error_logs\` | \`error_log.bulk_resolve\` | Acknowledge or resolve a batch of stale error logs in one human-confirmed action with a required reason; per-item partial success, one resolution event each, already-resolved or missing ids skipped. | Tenant | Human decision; expect confirmation. Call with \`error_log_ids\`, \`reason\`, and \`disposition\`. |
|
|
48663
48892
|
| \`rost_list_integrations\` | \`integration.list\` | List connected integration metadata and latest health state. | Tenant | Call with \`{}\` or \`{"provider":"google"}\`; no secrets or vault refs are returned. |
|
|
48664
48893
|
| \`rost_check_integration_readiness\` | \`integration.readiness\` | Return the connector setup checklist: OAuth env/callback, tenant connection, scopes, latest test state, external verification/CASA, handler availability, and DER-coded next actions. | Tenant | Call with \`{"provider":"google"}\`; metadata only, no secrets or vault refs. |
|
|
48665
48894
|
| \`rost_get_integration_status\` | \`integration.status\` | Read one integration's metadata by provider or integration id. | Tenant | Call with \`{"provider":"google"}\` or \`{"integration_id":"<id>"}\`. |
|
|
@@ -48719,6 +48948,8 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48719
48948
|
| \`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\`. |
|
|
48720
48949
|
| \`rost_resolve_friction_issue\` | \`friction.resolve\` | Resolve an issue with a root cause and remediation task. | Tenant | Human decision; expect confirmation. |
|
|
48721
48950
|
| \`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\`. |
|
|
48951
|
+
| \`rost_find_stale_friction\` | \`friction.stale_candidates\` | List open or diagnosing Friction issues whose linked remediation task has already shipped, making them high-confidence bulk-resolution candidates, with per-row evidence. Read-only. | Tenant | Call with optional \`stale_after_days\` and \`limit\`; feed the returned ids to \`friction.bulk_resolve\`. |
|
|
48952
|
+
| \`rost_bulk_resolve_friction\` | \`friction.bulk_resolve\` | Resolve a batch of stale Friction issues in one human-confirmed action with a required root cause (already-fixed mode, no follow-up task); per-item partial success, one human decision each, already-resolved or missing ids skipped. | Tenant | Human decision; expect confirmation. Call with \`issue_ids\` and \`root_cause\`. |
|
|
48722
48953
|
| \`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). |
|
|
48723
48954
|
| \`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. |
|
|
48724
48955
|
| \`rost_compile_sync_brief\` | \`sync.brief.compile\` | Compile the weekly Sync Brief (idempotent per period). | Tenant | Call with \`{}\`. |
|
|
@@ -48728,6 +48959,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48728
48959
|
| \`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. |
|
|
48729
48960
|
| \`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}\`. |
|
|
48730
48961
|
| \`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. |
|
|
48962
|
+
| \`rost_find_stale_escalations\` | \`escalation.stale_candidates\` | List aged open escalations on the caller's steward chain that still reference a concrete DER issue or PR, with a per-row confidence tier and evidence. Read-only. | Tenant | Call with optional \`stale_after_days\` and \`limit\`. The bulk override (\`escalation.bulk_resolve\`) is human-only and not exposed over MCP. |
|
|
48731
48963
|
| \`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 \`{}\`. |
|
|
48732
48964
|
| \`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 \`{}\`. |
|
|
48733
48965
|
| \`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 \`{}\`. |
|
|
@@ -48745,6 +48977,9 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
48745
48977
|
| \`rost_revoke_agent_trusted_grant\` | \`agent.trust.revoke\` | Revoke an active Trusted grant while preserving history. | Tenant | Human steward/admin only; call with \`{"grant_id":"<grant-id>","reason":"..."}\`; non-interactive callers receive a confirmation handoff. |
|
|
48746
48978
|
| \`rost_expire_agent_trusted_grants\` | \`agent.trust.expire\` | Mark overdue active Trusted grants expired and append audit events. | Tenant | Human steward/admin only; call with \`{"agent_id":"<agent-id>"}\`. |
|
|
48747
48979
|
| \`rost_supersede_agent_trusted_grant\` | \`agent.trust.supersede\` | Replace the active Trusted grant with a fresh digest and budget. | Tenant | Human steward/admin only; call with \`{"agent_id":"<agent-id>","expected_scope_digest":"sha256:...","budget_cents":2500}\`. |
|
|
48980
|
+
| \`rost_list_blocked_awaiting_grant_interventions\` | \`agent_grant_intervention.list\` | List durable blocked-awaiting-grant agent interventions with their missing grant, blocker kind, checkpoint, and decision state. Returns secret-scrubbed metadata only; a seat-scoped caller is clamped to its own seat. Pass \`include_decided\` to also return terminal (declined/resumed/expired) records. | Seat or tenant-admin | Call with \`{}\` (or \`{"seat_id":"<seat-id>","include_decided":true}\`). |
|
|
48981
|
+
| \`rost_decide_a_blocked_agent_grant\` | \`agent_grant_intervention.decide\` | Grant (one-time, exact-action) or decline a blocked agent intervention. A grant writes a human decision and enqueues the linked continuation; the \`permanent\` grant kind never auto-widens \u2014 it returns \`requires_charter_resign\` so the surface routes the human to a Charter re-sign. A supplied \`action_digest\` must byte-match the record's or the grant expires instead of replaying a stale action. Human steward/admin only and human-gated. | Tenant | Call with \`{"intervention_id":"<intervention-id>","action":"grant","grant_kind":"allow_once","action_digest":"sha256:..."}\`; non-interactive callers receive a confirmation handoff. |
|
|
48982
|
+
| \`rost_resume_a_granted_agent_intervention\` | \`agent_grant_intervention.resume\` | Retry ONLY the continuation enqueue for an already-granted blocked intervention whose enqueue did not complete. Never re-grants authority (the one-time grant is already committed). Human steward/admin only. | Tenant | Call with \`{"intervention_id":"<intervention-id>"}\`. |
|
|
48748
48983
|
| \`rost_suggest_setup_capability_grants\` | \`agent_setup.capability_suggestions\` | Suggest deterministic minimum capability grants from the current setup/template and tenant grant availability. | Tenant | Call with \`{"seat_id":"<seat-id>"}\` or \`{"setup_id":"<agent-id>"}\`; no model call and no mutation. |
|
|
48749
48984
|
| \`rost_list_skills\` | \`skill.list\` | List tenant Skills with application descriptors, dependency metadata, source status, latest version, and assigned Seat count. Seat-scoped reads are available through \`rost://skills\`. | Tenant-admin | Call with \`{}\` or \`{"query":"invoice"}\`. |
|
|
48750
48985
|
| \`rost_list_rost_skill_catalog\` | \`skill.catalog\` | List entitled {{brand}} catalog Skills. Private catalog source URLs and credentials stay server-side. | Tenant-admin | Call with \`{}\`; use \`{"include_unentitled":true}\` only to inspect tier availability. |
|
|
@@ -49608,11 +49843,11 @@ Resolving Friction should produce one of four outcomes: a decision, a task, a Ch
|
|
|
49608
49843
|
order: 70,
|
|
49609
49844
|
title: "Steward queue guide",
|
|
49610
49845
|
summary: "How Stewards review escalations, approve agent boundaries, and keep agents accountable.",
|
|
49611
|
-
version: "2026-07-
|
|
49846
|
+
version: "2026-07-16.1",
|
|
49612
49847
|
public: true,
|
|
49613
49848
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
49614
49849
|
stages: ["staffing", "operating_rhythm"],
|
|
49615
|
-
relatedCommandIds: ["charter.approve", "agent.go_live", "confirmation.approve", "confirmation.reject", "escalation.raise", "escalation.list", "escalation.get", "escalation.resolve", "escalation.reject"],
|
|
49850
|
+
relatedCommandIds: ["charter.approve", "agent.go_live", "confirmation.approve", "confirmation.reject", "escalation.raise", "escalation.list", "escalation.get", "escalation.resolve", "escalation.reject", "agent_grant_intervention.list", "agent_grant_intervention.decide", "agent_grant_intervention.resume"],
|
|
49616
49851
|
legal: {
|
|
49617
49852
|
publicRisk: "low",
|
|
49618
49853
|
notes: [
|
|
@@ -49665,6 +49900,16 @@ The Steward reads the queue from any surface but decides as a human.
|
|
|
49665
49900
|
- 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.
|
|
49666
49901
|
- 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\`.
|
|
49667
49902
|
|
|
49903
|
+
## Blocked \u2014 awaiting grant
|
|
49904
|
+
|
|
49905
|
+
Sometimes an agent cannot proceed because a specific grant is missing \u2014 a tool capability its Charter does not cover, an OS permission on its Runner, a provider connection that needs reconnecting, or a vaulted credential. When that happens the attempt does not sit paused holding compute: it terminates cleanly, releases its lease, and records a durable "blocked \u2014 awaiting grant" item with the exact missing grant and a bounded checkpoint. The item surfaces on the agent's seat and in Home's "Needs you" band with the specific ask and a one-click grant.
|
|
49906
|
+
|
|
49907
|
+
Granting is a human decision. A one-time grant authorizes the exact action the agent blocked on and nothing more \u2014 it revalidates your current authority and never widens the Charter; if the action changed since it blocked, the stale grant is refused rather than replayed. Choosing to always allow that capability is a separate Charter re-sign, not a one-click action. Declining keeps the checkpoint for audit and creates no continuation. When you grant, a new linked continuation attempt is created from the checkpoint \u2014 the agent resumes from where it stopped, not from the start.
|
|
49908
|
+
|
|
49909
|
+
- Read: \`{{cli}} command run agent_grant_intervention.list --json\` / \`agent_grant_intervention.list\` \u2014 the open blocked items with their blocker kind, missing grant, and checkpoint (secret-scrubbed metadata only).
|
|
49910
|
+
- Grant or decline: \`agent_grant_intervention.decide\` (\`action: grant\` or \`decline\`). A grant writes your decision (\`decisions.decided_by\` is you) and enqueues the continuation; a permanent grant returns \`requires_charter_resign\` so you review and re-sign the Charter instead of widening authority in place.
|
|
49911
|
+
- Resume: \`agent_grant_intervention.resume\` retries only the continuation enqueue for an already-granted item whose enqueue did not complete \u2014 it never re-grants authority.
|
|
49912
|
+
|
|
49668
49913
|
## When to stop for confirmation
|
|
49669
49914
|
|
|
49670
49915
|
Every steward decision is the human gate itself. An agent never calls resolve, reject, approve, or go-live on a human's behalf. It prepares evidence and a recommended action and stops. See the confirmations guide.
|
|
@@ -52025,6 +52270,9 @@ function parseSemver(value) {
|
|
|
52025
52270
|
|
|
52026
52271
|
// src/generated/command-manifest.ts
|
|
52027
52272
|
var COMMAND_MANIFEST = [
|
|
52273
|
+
{ "id": "agent_grant_intervention.decide", "namespace": "agent_grant_intervention", "action": "decide", "title": "Decide a blocked agent grant", "description": "Grant (one-time, exact-action) or decline a blocked agent intervention. A grant writes a human decision and enqueues the linked continuation; a permanent grant returns requires_charter_resign rather than widening authority. Human steward/admin only.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }, { "name": "action", "flag": "action", "type": "enum", "required": true, "enumValues": ["grant", "decline"] }, { "name": "grant_kind", "flag": "grant-kind", "type": "enum", "required": false, "enumValues": ["allow_once", "permanent"] }, { "name": "action_digest", "flag": "action-digest", "type": "string", "required": false }, { "name": "rationale", "flag": "rationale", "type": "string", "required": false }], "hasComplexInput": false, "help": "Grant (one-time, exact-action) or decline a blocked agent intervention; a grant writes the human decision and enqueues the linked continuation, a permanent grant returns requires_charter_resign instead of widening authority. Human steward/admin only." },
|
|
52274
|
+
{ "id": "agent_grant_intervention.list", "namespace": "agent_grant_intervention", "action": "list", "title": "List blocked-awaiting-grant interventions", "description": "List durable blocked-awaiting-grant agent interventions with their missing grant, blocker kind, checkpoint, and decision state. Returns secret-scrubbed metadata only. A seat-scoped caller is clamped to its own seat.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "include_decided", "flag": "include-decided", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "List durable blocked-awaiting-grant agent interventions with the exact missing grant, blocker kind, checkpoint, and decision state. Secret-scrubbed metadata only; a seat-scoped caller is clamped to its own seat." },
|
|
52275
|
+
{ "id": "agent_grant_intervention.resume", "namespace": "agent_grant_intervention", "action": "resume", "title": "Resume a granted agent intervention", "description": "Retry ONLY the continuation enqueue for an already-granted blocked intervention whose enqueue did not complete. Never re-grants authority (the one-time grant is already committed). Human steward/admin only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "intervention_id", "flag": "intervention-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Retry only the continuation enqueue for an already-granted intervention whose enqueue did not complete; never re-grants authority. Human steward/admin only." },
|
|
52028
52276
|
{ "id": "agent_setup.capability_suggestions", "namespace": "agent_setup", "action": "capability_suggestions", "title": "Suggest setup capability grants", "description": "Return deterministic minimum capability suggestions from a stock template and current tenant grant availability. No model call and no authority mutation.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Suggest deterministic minimum capability grants from the setup/template and current tenant grant availability. No model call and no mutation." },
|
|
52029
52277
|
{ "id": "agent_setup.get", "namespace": "agent_setup", "action": "get", "title": "Get agent setup", "description": "Read the resumable agent-setup state: mode, parent, steward, template, lane, schedule, tool decisions, dry run, and next action.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "setup_id", "flag": "setup-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Read the resumable setup state: mode, parent, steward, lane, schedule, tool decisions, dry-run blockers, and the next action." },
|
|
52030
52278
|
{ "id": "agent_setup.relane", "namespace": "agent_setup", "action": "relane", "title": "Re-lane a live agent", "description": "Governed re-lane of a live agent: pause, move to the new lane, force a fresh dry-run rehearsal on that lane, then go live. Owner-only and human-gated; records a rationale.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "lane", "flag": "lane", "type": "enum", "required": true, "enumValues": ["cloud", "mcp_session", "runner"] }, { "name": "reason", "flag": "reason", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-lane a live agent (cloud / runner / mcp_session): it pauses, moves to the new lane, forces a fresh dry-run rehearsal on that lane, then goes live \u2014 owner-only, human-gated, with a required rationale. A runner target needs a paired runner; a failed rehearsal leaves the agent paused on the new lane." },
|
|
@@ -52095,21 +52343,27 @@ var COMMAND_MANIFEST = [
|
|
|
52095
52343
|
{ "id": "deliverable.create", "namespace": "deliverable", "action": "create", "title": "Create agent deliverable", "description": "Create an agent deliverable for the acting seat. The deliverable is scrubbed for secrets before storage.", "requiredScope": "seat", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "kind", "flag": "kind", "type": "enum", "required": false, "enumValues": ["brief", "work_evidence", "artifact", "report", "other"] }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "summary", "flag": "summary", "type": "string", "required": false }, { "name": "content", "flag": "content", "type": "string", "required": false }, { "name": "delivered_at", "flag": "delivered-at", "type": "string", "required": false }], "hasComplexInput": true, "help": "Create a scrubbed durable work output for the acting seat without making a durable company decision." },
|
|
52096
52344
|
{ "id": "deliverable.get", "namespace": "deliverable", "action": "get", "title": "Get agent deliverable", "description": "Return one agent deliverable by id for a seat.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Read one durable agent deliverable by id after checking seat-scoped access." },
|
|
52097
52345
|
{ "id": "deliverable.list", "namespace": "deliverable", "action": "list", "title": "List agent deliverables", "description": "Return agent deliverables for a seat, including derived entries from succeeded runs with outcome summaries.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List durable agent deliverables for a seat, including explicit outputs and successful-run summaries." },
|
|
52346
|
+
{ "id": "error_log.bulk_resolve", "namespace": "error_log", "action": "bulk_resolve", "title": "Bulk resolve error logs", "description": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action, with a required reason. Each error log is resolved independently (partial success) and writes its own resolution event; already-resolved or missing ids are skipped.", "requiredScope": "tenant", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "error_log_ids", "flag": "error-log-ids", "type": "array", "required": true, "itemType": "string" }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }], "hasComplexInput": false, "help": "Acknowledge or resolve a batch of stale error logs in one human-confirmed action with a required reason; each is resolved independently (partial success) and already-resolved or missing ids are skipped." },
|
|
52098
52347
|
{ "id": "error_log.list", "namespace": "error_log", "action": "list", "title": "List error logs", "description": "List tenant error logs with optional filtering by seat, source, severity, and resolved state.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }, { "name": "source", "flag": "source", "type": "enum", "required": false, "enumValues": ["run", "llm", "tool", "mcp", "runner", "integration", "job", "web"] }, { "name": "severity", "flag": "severity", "type": "enum", "required": false, "enumValues": ["warning", "error", "critical"] }, { "name": "resolved", "flag": "resolved", "type": "enum", "required": false, "enumValues": ["active", "acknowledged", "resolved", "all"] }, { "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List product-visible error logs by source, severity, seat, and active/resolved disposition before closing stale failures." },
|
|
52099
52348
|
{ "id": "error_log.resolve", "namespace": "error_log", "action": "resolve", "title": "Resolve error log", "description": "Acknowledge or resolve an error log with a required reason and optional linked task, Friction issue, or PR reference.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "disposition", "flag": "disposition", "type": "enum", "required": false, "enumValues": ["acknowledged", "resolved"] }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Acknowledge or resolve a stale error log with a required human reason and optional task, issue, or PR evidence." },
|
|
52349
|
+
{ "id": "error_log.stale_candidates", "namespace": "error_log", "action": "stale_candidates", "title": "Find stale error logs", "description": "List unresolved error logs that have gone flat (no new occurrences) and are candidates for bulk resolution, with a per-row confidence tier and human-readable evidence. Read-only \u2014 it never resolves 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 unresolved error logs that have gone flat, with a confidence tier and evidence, to triage a bulk close-the-loop pass. Read-only." },
|
|
52100
52350
|
{ "id": "error_log.supersede", "namespace": "error_log", "action": "supersede", "title": "Supersede error log", "description": "Mark an error log as superseded by a newer error log. Links the old error to the new one and records the reason.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "error_log_id", "flag": "error-log-id", "type": "string", "required": true }, { "name": "new_error_log_id", "flag": "new-error-log-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": true }, { "name": "linked_task_id", "flag": "linked-task-id", "type": "string", "required": false }, { "name": "linked_issue_id", "flag": "linked-issue-id", "type": "string", "required": false }, { "name": "linked_pr_ref", "flag": "linked-pr-ref", "type": "string", "required": false }], "hasComplexInput": false, "help": "Mark an older error log as superseded by a newer same-tenant error log while preserving history." },
|
|
52351
|
+
{ "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." },
|
|
52101
52352
|
{ "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." },
|
|
52102
52353
|
{ "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." },
|
|
52103
52354
|
{ "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 }], "hasComplexInput": true, "help": "Raise an escalation to the seat's Steward when a decision exceeds the seat's authority; humans decide." },
|
|
52104
52355
|
{ "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." },
|
|
52105
52356
|
{ "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." },
|
|
52357
|
+
{ "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." },
|
|
52106
52358
|
{ "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." },
|
|
52359
|
+
{ "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." },
|
|
52107
52360
|
{ "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." },
|
|
52108
52361
|
{ "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." },
|
|
52109
52362
|
{ "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." },
|
|
52110
52363
|
{ "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." },
|
|
52111
52364
|
{ "id": "friction.list", "namespace": "friction", "action": "list", "title": "List Friction issues", "description": "List Friction issues ranked by status, impact, and severity. Defaults to active (open + diagnosing).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["open", "diagnosing", "resolved", "dropped", "active", "all"] }], "hasComplexInput": false, "help": "List Friction issues ranked by impact and severity to find the issue id before updating or resolving it." },
|
|
52112
52365
|
{ "id": "friction.resolve", "namespace": "friction", "action": "resolve", "title": "Resolve Friction issue", "description": 'Resolve an issue with a root cause. In the default "ids" resolution_mode this also creates a remediation follow-up task; "already_fixed" records only the root cause (no follow-up task). Always records a human decision (decided_by) in the same transaction.', "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "resolution_mode", "flag": "resolution-mode", "type": "enum", "required": false, "enumValues": ["ids", "already_fixed"] }, { "name": "root_cause", "flag": "root-cause", "type": "string", "required": true }, { "name": "owner_seat_id", "flag": "owner-seat-id", "type": "string", "required": false }, { "name": "task_title", "flag": "task-title", "type": "string", "required": false }, { "name": "task_description", "flag": "task-description", "type": "string", "required": false }, { "name": "done_by", "flag": "done-by", "type": "string", "required": false }, { "name": "resolving_seat_id", "flag": "resolving-seat-id", "type": "string", "required": false }], "hasComplexInput": false, "help": "Resolve an issue with a root cause and remediation task; resolution is a human decision." },
|
|
52366
|
+
{ "id": "friction.stale_candidates", "namespace": "friction", "action": "stale_candidates", "title": "Find stale friction", "description": "List open or diagnosing Friction issues whose linked remediation task has already shipped, making them high-confidence candidates for bulk resolution, with per-row evidence. Read-only \u2014 it never resolves 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 open or diagnosing issues whose remediation task already shipped \u2014 high-confidence candidates for a bulk close-the-loop pass. Read-only." },
|
|
52113
52367
|
{ "id": "friction.update_status", "namespace": "friction", "action": "update_status", "title": "Update Friction issue status", "description": "Move a non-terminal issue between open and diagnosing. Terminal issues (resolved/dropped) cannot be reopened here.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "issue_id", "flag": "issue-id", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": true, "enumValues": ["open", "diagnosing"] }], "hasComplexInput": false, "help": "Move a non-terminal issue between open and diagnosing while it is being worked." },
|
|
52114
52368
|
{ "id": "goal.bind_measurable", "namespace": "goal", "action": "bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "Bind a measurable to a goal. Role defaults to 'informs' \u2014 a conservative informative indicator allowed at any goal level (many per goal) that never changes goal status. Role 'drives_status' makes it the goal's status driver: allowed only on a childless seat goal or milestone, at most one per goal, requires a second_anchor (a prior closed period + expected value confirming the Signal matched the books), and auto-status starts OFF until a steward opts in with goal.set_auto_status. Binding a driver over an existing informs binding of the same Signal promotes it. Binding is human-gated.", "requiredScope": "seat", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "measurable_id", "flag": "measurable-id", "type": "string", "required": true }, { "name": "role", "flag": "role", "type": "enum", "required": false, "enumValues": ["drives_status", "informs"] }], "hasComplexInput": true, "help": "Bind a Signal to a goal. Defaults to role informs (a conservative indicator at any level that never changes status); pass role drives_status with a second_anchor (a prior closed period + expected value confirming the Signal matched the books) to make it a childless leaf goal's status driver \u2014 this promotes an existing informs binding (auto-status starts OFF until a steward opts in)." },
|
|
52115
52369
|
{ "id": "goal.create", "namespace": "goal", "action": "create", "title": "Create Cascade goal", "description": "Create a cycle goal under an existing objective. The parent chain must terminate at a Compass objective in the same cycle (enforced server-side).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": true }, { "name": "title", "flag": "title", "type": "string", "required": true }, { "name": "definition_of_done", "flag": "definition-of-done", "type": "string", "required": true }, { "name": "status", "flag": "status", "type": "enum", "required": false, "enumValues": ["on", "off"] }], "hasComplexInput": false, "help": "Create cycle goals under an existing objective; the parent chain must terminate at a Compass objective." },
|