@rosthq/cli 0.7.96 → 0.7.98
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,EAuR3D,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -42746,6 +42746,20 @@ var confirmationSummarySchema = external_exports.object({
|
|
|
42746
42746
|
var confirmationListOutputSchema = external_exports.object({
|
|
42747
42747
|
confirmations: external_exports.array(confirmationSummarySchema)
|
|
42748
42748
|
}).strict();
|
|
42749
|
+
var confirmationDismissInputSchema = external_exports.object({
|
|
42750
|
+
confirmation_id: uuidSchema11
|
|
42751
|
+
}).strict();
|
|
42752
|
+
var confirmationDismissOutputSchema = external_exports.object({
|
|
42753
|
+
dismissed: external_exports.object({
|
|
42754
|
+
id: uuidSchema11,
|
|
42755
|
+
status: external_exports.literal("dismissed")
|
|
42756
|
+
}).strict()
|
|
42757
|
+
}).strict();
|
|
42758
|
+
var confirmationDismissStaleInputSchema = external_exports.object({}).strict();
|
|
42759
|
+
var confirmationDismissStaleOutputSchema = external_exports.object({
|
|
42760
|
+
dismissed_count: external_exports.number().int().min(0),
|
|
42761
|
+
dismissed_ids: external_exports.array(uuidSchema11)
|
|
42762
|
+
}).strict();
|
|
42749
42763
|
var credentialIngressInputSchema = external_exports.object({
|
|
42750
42764
|
seat_id: uuidSchema11.optional(),
|
|
42751
42765
|
provider: external_exports.string().trim().min(1),
|
|
@@ -44717,7 +44731,15 @@ var brokerProviderSchema = external_exports.string().trim().min(1).max(100).refi
|
|
|
44717
44731
|
message: "provider must be a label, never raw secret material"
|
|
44718
44732
|
});
|
|
44719
44733
|
var brokerAllowedHostSchema = external_exports.string().trim().min(1).max(255).regex(/^[a-zA-Z0-9.-]+$/, "allowed_host must be a bare hostname (letters, digits, dots, hyphens) \u2014 no scheme, port, or path");
|
|
44720
|
-
var brokerAllowedPathPrefixSchema = external_exports.string().min(1).max(512).refine((value) => value.startsWith("/"), { message: "allowed_path_prefix must start with /" }).refine((value) => !value.includes("//"), { message: "allowed_path_prefix must not contain //" }).refine((value) => !value.includes("\\"), { message: "allowed_path_prefix must not contain a backslash" }).refine((value) => !value.includes("://"), { message: "allowed_path_prefix must not contain a scheme" }).refine((value) => !value.includes("?") && !value.includes("#"), { message: "allowed_path_prefix must not contain a query or fragment" }).refine((value) => !value.includes(".."), { message: "allowed_path_prefix must not contain .." }).refine((value) =>
|
|
44734
|
+
var brokerAllowedPathPrefixSchema = external_exports.string().min(1).max(512).refine((value) => value.startsWith("/"), { message: "allowed_path_prefix must start with /" }).refine((value) => !value.includes("//"), { message: "allowed_path_prefix must not contain //" }).refine((value) => !value.includes("\\"), { message: "allowed_path_prefix must not contain a backslash" }).refine((value) => !value.includes("://"), { message: "allowed_path_prefix must not contain a scheme" }).refine((value) => !value.includes("?") && !value.includes("#"), { message: "allowed_path_prefix must not contain a query or fragment" }).refine((value) => !value.includes(".."), { message: "allowed_path_prefix must not contain .." }).refine((value) => {
|
|
44735
|
+
let decoded;
|
|
44736
|
+
try {
|
|
44737
|
+
decoded = decodeURIComponent(value);
|
|
44738
|
+
} catch {
|
|
44739
|
+
return false;
|
|
44740
|
+
}
|
|
44741
|
+
return !decoded.includes("..");
|
|
44742
|
+
}, { message: "allowed_path_prefix must not contain encoded path traversal" }).refine((value) => !/[\s\x00-\x1f]/.test(value), { message: "allowed_path_prefix must not contain whitespace or control characters" });
|
|
44721
44743
|
var brokerHttpMethodSchema = external_exports.enum(["GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"]);
|
|
44722
44744
|
var READ_SAFE_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD", "OPTIONS"]);
|
|
44723
44745
|
var brokerScopeTierSchema = external_exports.enum(["read", "write"]);
|
|
@@ -44752,6 +44774,9 @@ var secretGrantRequestInputSchema = external_exports.object({
|
|
|
44752
44774
|
var secretGrantRequestOutputSchema = external_exports.object({
|
|
44753
44775
|
requested: external_exports.literal(true),
|
|
44754
44776
|
event_id: uuid10,
|
|
44777
|
+
// DER-1888: the durable, resolvable agent_grant_interventions handle this
|
|
44778
|
+
// request opened (blocker_kind 'vault_credential') — the human's next hop.
|
|
44779
|
+
intervention_id: uuid10,
|
|
44755
44780
|
seat_id: uuid10,
|
|
44756
44781
|
grant_key: external_exports.string(),
|
|
44757
44782
|
scope_tier: brokerScopeTierSchema
|
|
@@ -46668,6 +46693,17 @@ var deliverableAcceptOutputSchema = external_exports.object({
|
|
|
46668
46693
|
accepted_at: external_exports.string(),
|
|
46669
46694
|
impact_value_usd: external_exports.number().nonnegative()
|
|
46670
46695
|
}).strict();
|
|
46696
|
+
var deliverableRejectInputSchema = external_exports.object({
|
|
46697
|
+
deliverable_id: external_exports.string().uuid(),
|
|
46698
|
+
reason: external_exports.string().max(500).optional()
|
|
46699
|
+
}).strict();
|
|
46700
|
+
var deliverableRejectOutputSchema = external_exports.object({
|
|
46701
|
+
deliverable_id: external_exports.string().uuid(),
|
|
46702
|
+
acceptance_status: external_exports.literal("rejected"),
|
|
46703
|
+
rejected_by: external_exports.string().uuid(),
|
|
46704
|
+
rejected_at: external_exports.string(),
|
|
46705
|
+
reason: external_exports.string().nullable()
|
|
46706
|
+
}).strict();
|
|
46671
46707
|
|
|
46672
46708
|
// ../../packages/protocol/src/steward.ts
|
|
46673
46709
|
var uuidSchema20 = external_exports.string().uuid();
|
|
@@ -47012,6 +47048,11 @@ var agentGrantInterventionDecideOutputSchema = external_exports.object({
|
|
|
47012
47048
|
// True when the human chose the permanent option — the surface must route to a
|
|
47013
47049
|
// Charter re-sign; no authority was widened by this call (invariant #10).
|
|
47014
47050
|
requires_charter_resign: external_exports.boolean(),
|
|
47051
|
+
// DER-1888: true when the blocked grant is a vault_credential ask — a decide
|
|
47052
|
+
// grant does NOT clear it (it holds no vault_ref and would false-clear a secrets
|
|
47053
|
+
// gate, invariant #5/#7); the surface must route the human to secret_grant.grant.
|
|
47054
|
+
// No authority was granted here; the record stays open.
|
|
47055
|
+
requires_secret_grant: external_exports.boolean(),
|
|
47015
47056
|
// True when authority committed but the continuation enqueue did not complete —
|
|
47016
47057
|
// the human can retry ONLY the enqueue via `resume` (never re-grant).
|
|
47017
47058
|
enqueue_failed: external_exports.boolean()
|
|
@@ -48431,7 +48472,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
48431
48472
|
order: 48,
|
|
48432
48473
|
title: "CLI and MCP installation guide",
|
|
48433
48474
|
summary: "Install the public CLI, register remote token-backed MCP clients, and find the full command and tool catalog.",
|
|
48434
|
-
version: "2026-07-
|
|
48475
|
+
version: "2026-07-17.2",
|
|
48435
48476
|
public: true,
|
|
48436
48477
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
48437
48478
|
stages: ["company_setup", "staffing"],
|
|
@@ -48498,6 +48539,7 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
48498
48539
|
"deliverable.create",
|
|
48499
48540
|
"deliverable.attach",
|
|
48500
48541
|
"deliverable.accept",
|
|
48542
|
+
"deliverable.reject",
|
|
48501
48543
|
"usage.report",
|
|
48502
48544
|
"usage.snapshot",
|
|
48503
48545
|
"error_log.list",
|
|
@@ -49046,6 +49088,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
49046
49088
|
| \`rost_list_agent_deliverables\` | \`deliverable.list\` | List durable agent deliverables for a seat, including explicit outputs and successful-run summaries. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>"}\`. |
|
|
49047
49089
|
| \`rost_get_agent_deliverable\` | \`deliverable.get\` | Read one durable agent deliverable by id for a seat. | Seat or tenant-admin | Call with \`{"seat_id":"<seat-id>","deliverable_id":"<id>"}\`. |
|
|
49048
49090
|
| \`rost_accept_deliverable_value\` | \`deliverable.accept\` | Record a human-confirmed accepted value (USD) on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-accept. Re-accepting records a correction as a new event. | Tenant-admin | Call with \`{"deliverable_id":"<id>","impact_value_usd":<number>}\`; expect human confirmation. |
|
|
49091
|
+
| \`rost_reject_deliverable_value\` | \`deliverable.reject\` | Record a human-confirmed rejection on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-reject. Re-rejecting records a correction as a new event. | Tenant-admin | Call with \`{"deliverable_id":"<id>","reason":"<why>"}\`; expect human confirmation. |
|
|
49049
49092
|
| \`rost_ai_workforce_roi_report\` | \`usage.report\` | Read the AI-workforce ROI report \u2014 per-period agent turns, token/run cost, human-accepted value, exceptions, and approvals \u2014 from immutable usage snapshots. | Tenant | Call with \`{}\` or \`{"limit":<n>}\`. |
|
|
49050
49093
|
| \`rost_capture_usage_period_snapshot\` | \`usage.snapshot\` | Freeze the current (or a given) period's usage and accepted-value totals into an immutable snapshot; insert-only and idempotent. | Tenant | Call with \`{}\` or \`{"period":"YYYY-MM-DD"}\`. |
|
|
49051
49094
|
| \`rost_list_agent_templates\` | \`agent_template.list\` | List stock agent templates and metadata. | Tenant | Call with \`{}\`. |
|
|
@@ -49169,7 +49212,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
49169
49212
|
| \`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>"}\`. |
|
|
49170
49213
|
| \`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}\`. |
|
|
49171
49214
|
| \`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}\`). |
|
|
49172
|
-
| \`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. |
|
|
49215
|
+
| \`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 grant on a \`vault_credential\` blocker returns \`requires_secret_grant\` (a decide holds no vault ref and cannot mint the secret) so the surface routes the human to \`secret_grant.grant\` instead of clearing the block. 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. |
|
|
49173
49216
|
| \`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>"}\`. |
|
|
49174
49217
|
| \`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. |
|
|
49175
49218
|
| \`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"}\`. |
|
|
@@ -49271,7 +49314,7 @@ Seat-scoped MCP tokens expose the operating protocol below. The server still che
|
|
|
49271
49314
|
| \`rost_list_work_records\` | \`work.list\` | List the seat's work-ledger records newest-first (keyset-paginated), filterable by verb, object kind/ref, outcome, or run. | Seat | Call with \`{"verb":"contacted","object_kind":"supplier","limit":50}\`. |
|
|
49272
49315
|
| \`rost_request_a_forge_secret_grant\` | \`software_factory.secret.request\` | Request access to a project secret by key. It creates a durable credential request and approval Task, never accepts a secret value, and does not grant access by itself. | Seat | Call with \`{"software_project_id":"<project-id>","environment":"preview","seat_id":"<seat-id>","action":"test.run","key_name":"OPENAI_API_KEY"}\`. |
|
|
49273
49316
|
| \`rost_verify_forge_secret_broker_access\` | \`software_factory.secret.use\` | Verify broker authorization for a Forge secret without opening the vault. Missing grants create or reuse a credential request + approval Task; allowed grants return a redacted authorization summary only. Runtime vault use happens runner-side. | Seat | Call with \`{"software_project_id":"<project-id>","environment":"preview","seat_id":"<seat-id>","action":"test.run","key_name":"OPENAI_API_KEY","operation":"test_execution"}\`. |
|
|
49274
|
-
| \`rost_request_a_brokered_secret_grant\` | \`secret_grant.request\` | A seat agent requests a scoped brokered-secret grant (for secret.broker / baserow.*) by naming the host, path prefix, methods, and scope it needs. Draft-and-confirm: no secret and no vault ref
|
|
49317
|
+
| \`rost_request_a_brokered_secret_grant\` | \`secret_grant.request\` | A seat agent requests a scoped brokered-secret grant (for secret.broker / baserow.*) by naming the host, path prefix, methods, and scope it needs. Draft-and-confirm: no secret and no vault ref. It records a durable blocked-awaiting-grant intervention (blocker_kind vault_credential) that surfaces on the Home "Needs you" band and the blocked seat's page, and returns both an event id and an intervention_id (the human's resolvable handle). A human grants via secret_grant.grant, which closes the intervention. | Seat | Call with {"seat_id":"<seat-id>","grant_key":"baserow","provider":"baserow","allowed_host":"baserow.example.com","allowed_path_prefix":"/api/database/rows/","allowed_methods":["GET"],"scope_tier":"read"}. |
|
|
49275
49318
|
| \`rost_list_brokered_secret_grants\` | \`secret_grant.list\` | List the seat's own brokered secret grants. Returns egress allowlist metadata only (host, path prefix, methods, scope, status), never the vault ref or any secret. | Seat | Call with {} (an agent is server-pinned to its own seat). |
|
|
49276
49319
|
| \`rost_record_forge_conformance_findings\` | \`software_factory.conformance.record_findings\` | A Forge review seat (plan conformance, security, or QA) records structured findings as reviewer evidence. Set \`changeset_id\` on a finding that targets a specific changeset. Open findings route the request back to implementation; accepting a gap remains a separate human gate. Requires the seat's signed manifest grant. | Seat | Call with \`{"build_request_id":"<request-id>","findings":[{"severity":"major","category":"scope_gap","summary":"Missing migration verification","changeset_id":"<changeset-id>"}]}\`. |
|
|
49277
49320
|
| \`rost_resolve_forge_conformance_finding\` | \`software_factory.conformance.resolve_finding\` | A Forge review seat marks a prior open finding resolved after re-reviewing the changeset and verifying it is fixed (reviewer verification, not human gap-acceptance). A resolved finding stops routing the request back to implementation, so the recycle loop converges. Requires the seat's signed manifest grant. | Seat | Call with \`{"build_request_id":"<request-id>","finding_ids":["<finding-id>"]}\`. |
|
|
@@ -50120,11 +50163,11 @@ Keep agent scope tight at first. Approve more autonomy only after evidence. Use
|
|
|
50120
50163
|
order: 71,
|
|
50121
50164
|
title: "Confirmations and human gates guide",
|
|
50122
50165
|
summary: "How {{brand}} routes authority-changing work through human confirmation, and why agents never approve their own requests.",
|
|
50123
|
-
version: "2026-07-
|
|
50166
|
+
version: "2026-07-17.2",
|
|
50124
50167
|
public: true,
|
|
50125
50168
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
50126
50169
|
stages: ["graph_design", "charter_design", "staffing", "operating_rhythm"],
|
|
50127
|
-
relatedCommandIds: ["confirmation.approve", "confirmation.list", "confirmation.reject", "confirmation.remint", "charter.approve", "agent.go_live", "credential.ingress", "mcp_token.create", "staffing.assign_user", "goal.reparent", "friction.resolve", "task.confirm_proposal", "task.decline_proposal"],
|
|
50170
|
+
relatedCommandIds: ["confirmation.approve", "confirmation.dismiss", "confirmation.dismiss_stale", "confirmation.list", "confirmation.reject", "confirmation.remint", "charter.approve", "agent.go_live", "credential.ingress", "mcp_token.create", "staffing.assign_user", "goal.reparent", "friction.resolve", "task.confirm_proposal", "task.decline_proposal"],
|
|
50128
50171
|
legal: { publicRisk: "low", notes: ["{{brand}}-native human-gate guidance."] },
|
|
50129
50172
|
sources: [
|
|
50130
50173
|
{
|
|
@@ -50172,9 +50215,13 @@ A held tool call actuates the same way regardless of which command backs it \u20
|
|
|
50172
50215
|
|
|
50173
50216
|
The \`/approvals\` page is one place a human clears every pending decision across the company. It unions still-pending confirmations, open steward escalations, and agent-proposed draft tasks into a single queue, each item shown with its risk or proposal type, the source or proposing seat, and redacted arguments \u2014 secret material is never displayed. You see only items for seats you have authority over: an owner sees all of them; a member sees confirmations for the seats they occupy, escalations routed to their steward chain, and task proposals where they occupy or steward the target seat. Confirming a task proposal runs \`task.confirm_proposal\` and moves the draft to Offered; declining runs \`task.decline_proposal\` and records a human reason. Neither action accepts the task, schedules a run, or executes agent work. Approve and reject route through the same \`confirmation.approve\` / \`confirmation.reject\` and escalation decision commands the CLI and per-seat surfaces use, so the audit trail and the agents-recommend-humans-decide rule are identical wherever you act. The queue also unions pending Forge software-credential requests (owner-scoped, read-only, deep-linking to \`/forge\`) \u2014 it surfaces the ask and links to the vault-backed fulfillment flow, never collecting the secret itself. A confirmation that fails on approval shows the actual execution error inline as a \`failed\` card instead of a dead generic banner, and its Retry re-runs \`confirmation.approve\` against current state; re-minting the same request supersedes the older card instead of leaving a duplicate behind.
|
|
50174
50217
|
|
|
50218
|
+
## Clearing expired confirmations
|
|
50219
|
+
|
|
50220
|
+
A confirmation that expires before a human acts on it is dead \u2014 it can no longer be approved. Re-mint revives one; dismiss is the opposite gesture for a card you do *not* want to revive. \`confirmation.dismiss\` clears one obsolete expired card from the queue, and \`confirmation.dismiss_stale\` clears every currently-expired card in your authority scope at once (bulk "dismiss all stale"). Dismiss is human-only queue hygiene: it never re-executes the original command and never records a decision \u2014 it just marks the dead card \`dismissed\`, notes who dismissed it, and writes an audit event for each row (\`dismiss_stale\` writes one per card). Only an already-expired card is dismissable; a still-live pending confirmation is refused, because its decision is approve or reject, not dismiss. You can only dismiss cards you already have authority over \u2014 an owner over any, a member over the seats they occupy.
|
|
50221
|
+
|
|
50175
50222
|
## The rule for agents
|
|
50176
50223
|
|
|
50177
|
-
An agent never approves or rejects its own request. \`decisions.decided_by\` is always a human. The steward decision commands (\`escalation.resolve\`, \`escalation.reject\`) and proposal decision commands (\`task.confirm_proposal\`, \`task.decline_proposal\`) are not exposed over MCP. When an agent hits a gate, it prepares the evidence and the recommended action, returns the approve link, and waits for a human. Draft task proposals follow the same rule: the agent can propose the commitment, but a target-side human confirms or declines it unless a bounded Trusted grant applies.
|
|
50224
|
+
An agent never approves or rejects its own request. \`decisions.decided_by\` is always a human. A rejection is a decision too: rejecting any human-gated confirmation writes its own \`decisions\` row (\`decided_by\` = the rejecting human, referencing the confirmation, the command id, and its redacted argument summary), so a human's "no" is recorded in the durable audit trail \u2014 the same standing an approval leaves, not just a status flip on the pending card. Dismissing an expired card is the sole exception (queue hygiene, not a decision). The steward decision commands (\`escalation.resolve\`, \`escalation.reject\`) and proposal decision commands (\`task.confirm_proposal\`, \`task.decline_proposal\`) are not exposed over MCP. When an agent hits a gate, it prepares the evidence and the recommended action, returns the approve link, and waits for a human. Draft task proposals follow the same rule: the agent can propose the commitment, but a target-side human confirms or declines it unless a bounded Trusted grant applies.
|
|
50178
50225
|
|
|
50179
50226
|
## When to stop
|
|
50180
50227
|
|
|
@@ -52532,6 +52579,8 @@ var COMMAND_MANIFEST = [
|
|
|
52532
52579
|
{ "id": "compass.show_markdown", "namespace": "compass", "action": "show_markdown", "title": "Show Compass as markdown", "description": "Compose the current Compass and its open gaps into a clean, human-skimmable markdown card for review.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Render the current Compass and its open gaps as a clean markdown card to show your human a quick review." },
|
|
52533
52580
|
{ "id": "compass.update_draft", "namespace": "compass", "action": "update_draft", "title": "Update Compass draft", "description": "Replace a draft Compass document.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "draft_id", "flag": "draft-id", "type": "string", "required": true }], "hasComplexInput": true, "help": "Pass the compass_version_id returned by compass.draft as draft_id; update_draft replaces only an unpublished draft in this tenant." },
|
|
52534
52581
|
{ "id": "confirmation.approve", "namespace": "confirmation", "action": "approve", "title": "Approve pending confirmation", "description": "Approve an in-flight confirmation and execute the original command as the approving human.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reviewed", "flag": "reviewed", "type": "boolean", "required": false }], "hasComplexInput": false, "help": "Approve pending confirmations only when the requested durable change is clear to the human owner." },
|
|
52582
|
+
{ "id": "confirmation.dismiss", "namespace": "confirmation", "action": "dismiss", "title": "Dismiss an expired confirmation", "description": "Clear a single expired, unactioned confirmation from the queue without re-executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Clear a single expired, unactioned confirmation from the queue. Dismiss is human-only queue hygiene \u2014 it never re-executes the original command." },
|
|
52583
|
+
{ "id": "confirmation.dismiss_stale", "namespace": "confirmation", "action": "dismiss_stale", "title": "Dismiss all expired confirmations", "description": "Clear every expired, unactioned confirmation in your authority scope from the queue without re-executing any command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "Clear every expired, unactioned confirmation in your authority scope at once. Each dismissal is audited; none re-executes the original command." },
|
|
52535
52584
|
{ "id": "confirmation.list", "namespace": "confirmation", "action": "list", "title": "List pending confirmations", "description": "List in-flight confirmations awaiting a human decision, scoped to the caller's authority (owner sees all; a member sees seats they occupy; an agent sees its own seat).", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "limit", "flag": "limit", "type": "integer", "required": false }], "hasComplexInput": false, "help": "List pending confirmations awaiting a human decision before approving or rejecting them." },
|
|
52536
52585
|
{ "id": "confirmation.reject", "namespace": "confirmation", "action": "reject", "title": "Reject pending confirmation", "description": "Reject an in-flight confirmation without executing the original command.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Reject pending confirmations when authority, evidence, or human intent is unclear." },
|
|
52537
52586
|
{ "id": "confirmation.remint", "namespace": "confirmation", "action": "remint", "title": "Re-mint an expired confirmation", "description": "Stage a fresh confirmation for the same command as an expired one, re-running the normal minting authorization checks.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "confirmation_id", "flag": "confirmation-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Re-mint an expired confirmation into a fresh one before approving, instead of re-running the original command from scratch." },
|
|
@@ -52542,6 +52591,7 @@ var COMMAND_MANIFEST = [
|
|
|
52542
52591
|
{ "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." },
|
|
52543
52592
|
{ "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." },
|
|
52544
52593
|
{ "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." },
|
|
52594
|
+
{ "id": "deliverable.reject", "namespace": "deliverable", "action": "reject", "title": "Reject deliverable value", "description": "Record a human-confirmed rejection on a deliverable. Humans decide; agents cannot self-reject. Re-rejecting records a correction as a new event; prior events are never mutated.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "deliverable_id", "flag": "deliverable-id", "type": "string", "required": true }, { "name": "reason", "flag": "reason", "type": "string", "required": false }], "hasComplexInput": false, "help": "Record a human-confirmed rejection on a deliverable; owner-only and human-gated. Humans decide \u2014 agents cannot self-reject. Re-rejecting records a correction as a new event." },
|
|
52545
52595
|
{ "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." },
|
|
52546
52596
|
{ "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." },
|
|
52547
52597
|
{ "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." },
|