@rosthq/cli 0.7.170 → 0.7.172
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config.d.ts +13 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/index.js +93 -18
- package/dist/index.js.map +2 -2
- package/dist/redact.d.ts.map +1 -1
- package/dist/runner-login.d.ts.map +1 -1
- package/dist/runner-serve.d.ts.map +1 -1
- package/dist/runner-service.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/config.d.ts
CHANGED
|
@@ -30,5 +30,18 @@ export declare function resolveAppUrl(value: string, env?: NodeJS.ProcessEnv): {
|
|
|
30
30
|
warning: string | null;
|
|
31
31
|
};
|
|
32
32
|
export declare function inspectAppUrlPolicy(value: string, env?: NodeJS.ProcessEnv): AppUrlPolicyInspection;
|
|
33
|
+
/** Shown in place of an app_url with no usable origin. */
|
|
34
|
+
export declare const withheldAppUrlDisplay = "(withheld: app_url is not a valid URL)";
|
|
35
|
+
/**
|
|
36
|
+
* Render a configured app_url for display: scheme, host, port and base path,
|
|
37
|
+
* with no trailing slash. Fails closed to {@link withheldAppUrlDisplay}.
|
|
38
|
+
*/
|
|
39
|
+
export declare function displayAppUrl(value: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Compose a known in-app route onto a configured app_url's credential-free
|
|
42
|
+
* display base. `route` is a codebase-owned literal (never caller data) and
|
|
43
|
+
* is relative so a base path survives. Strips a leading slash defensively.
|
|
44
|
+
*/
|
|
45
|
+
export declare function appUrlLink(value: string, route: string): string;
|
|
33
46
|
export {};
|
|
34
47
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,2CAA4C,CAAC;AAC7E,eAAO,MAAM,sBAAsB,QAAiD,CAAC;AAErF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AACxF,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAYF,QAAA,MAAM,YAAY;;;;kBAIP,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAE1E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IAC/E,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAcA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CASA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,sBAAsB,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,mBAAmB,2CAA4C,CAAC;AAC7E,eAAO,MAAM,sBAAsB,QAAiD,CAAC;AAErF,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,cAAc,GAAG,SAAS,GAAG,aAAa,CAAC;AACxF,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAC;AAE5D,MAAM,MAAM,sBAAsB,GAAG;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,CAAC;AAYF,QAAA,MAAM,YAAY;;;;kBAIP,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAErD,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,SAAS,CAE1E;AAED,wBAAgB,yBAAyB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IAC/E,MAAM,EAAE,SAAS,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAcA;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CASA;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,sBAAsB,CA8H/G;AAED,0DAA0D;AAC1D,eAAO,MAAM,qBAAqB,2CAA2C,CAAC;AAyB9E;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAM/D"}
|
package/dist/index.js
CHANGED
|
@@ -13372,13 +13372,13 @@ var init_command_discovery = __esm({
|
|
|
13372
13372
|
{ "id": "friction.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.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "stale_after_days": { "default": 14, "type": "integer", "minimum": 1, "maximum": 365 }, "limit": { "default": 50, "type": "integer", "minimum": 1, "maximum": 200 } }, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "candidates": { "type": "array", "items": { "type": "object", "properties": { "issue_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "summary": { "type": "string" }, "severity": { "type": "string", "enum": ["low", "med", "high", "critical"] }, "status": { "type": "string", "enum": ["open", "diagnosing"] }, "created_at": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" }, "updated_at": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$" }, "days_stale": { "type": "integer", "minimum": -9007199254740991, "maximum": 9007199254740991 }, "action_task_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "action_task_status": { "anyOf": [{ "type": "string" }, { "type": "null" }] }, "action_task_done": { "type": "boolean" }, "confidence": { "type": "string", "enum": ["low", "medium", "high"] }, "evidence": { "type": "array", "items": { "type": "string" } } }, "required": ["issue_id", "summary", "severity", "status", "created_at", "updated_at", "days_stale", "action_task_id", "action_task_status", "action_task_done", "confidence", "evidence"], "additionalProperties": false } }, "total": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, "required": ["candidates", "total"], "additionalProperties": 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.", "guide_slugs": ["friction-guide"], "stages": ["operating_rhythm"], "related_command_ids": [] },
|
|
13373
13373
|
{ "id": "friction.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.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "eligible", "risk_flags": [], "rationale": "Eligible for Trusted execution only when the signed Charter manifest, tenant policy, budget, and command guard allow it." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "issue_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string", "enum": ["open", "diagnosing"] } }, "required": ["issue_id", "status"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "issue_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string", "enum": ["open", "diagnosing"] }, "event_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["issue_id", "status", "event_id"], "additionalProperties": false }, "help": "Move a non-terminal issue between open and diagnosing while it is being worked.", "guide_slugs": ["friction-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.answer_gap", "confirmation.approve", "escalation.raise", "friction.assist", "friction.file_issue", "friction.get", "friction.link_task", "friction.list", "friction.resolve", "onboarding.finish", "task.accept", "task.complete", "task.confirm_proposal", "task.create", "task.decline", "task.decline_proposal", "task.list"] },
|
|
13374
13374
|
{ "id": "gate.decide", "title": "Decide a conversational gate", "description": "A human approves or rejects a conversational gate bound to an artifact digest (a prototype URL, deliverable, or artifact). The agent drafts the decision and the human confirms it; the resolver is always a human. On approval the artifact must be unchanged since the gate was drafted \u2014 a stale digest re-blocks. Requires confirmation.", "required_scope": "tenant", "confirmation": "human_required", "trusted_execution": { "mode": "always_human", "risk_flags": [], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "subject_kind": { "type": "string", "enum": ["prototype", "deliverable", "artifact"] }, "subject_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "artifact_ref": { "type": "object", "properties": { "href": { "type": "string", "minLength": 1, "maxLength": 2048 }, "label": { "type": "string", "minLength": 1, "maxLength": 200 } }, "required": ["href", "label"], "additionalProperties": false }, "artifact_digest": { "type": "string", "minLength": 1, "maxLength": 200 }, "decision": { "type": "string", "enum": ["approve", "reject"] }, "ask": { "type": "string", "minLength": 1, "maxLength": 400 }, "consequence": { "type": "string", "minLength": 1, "maxLength": 600 }, "unblocked_targets": { "default": [], "maxItems": 20, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 200 } }, "rationale": { "type": "string", "maxLength": 4e3 } }, "required": ["subject_kind", "subject_id", "artifact_ref", "artifact_digest", "decision", "ask", "consequence"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "decision_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "subject_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "artifact_digest": { "type": "string" }, "decision": { "type": "string", "enum": ["approve", "reject"] }, "decided_by": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "gate_status": { "type": "string", "enum": ["approved", "rejected"] } }, "required": ["decision_id", "subject_id", "artifact_digest", "decision", "decided_by", "gate_status"] }, "help": "A human approves or rejects a conversational gate bound to an artifact digest; the agent drafts, the human confirms (invariant #7).", "guide_slugs": ["agent-reference-map", "mcp-and-cli-guide"], "stages": ["operating_rhythm"], "related_command_ids": [] },
|
|
13375
|
-
{ "id": "goal.bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "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). This signal will set the goal's status from confirmed readings. You can turn this off later. Explicit auto_status_enabled: false opts out at bind time; goal.set_auto_status changes it after the fact. Binding a driver over an existing informs binding of the same Signal promotes it. Binding is human-gated.", "required_scope": "seat", "confirmation": "human_required", "trusted_execution": { "mode": "eligible_bounded", "risk_flags": [], "rationale": "Binding an informs-level Signal never changes goal status, so it is a bounded worker action safe to auto-apply under a standing Trusted grant." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "role": { "default": "informs", "type": "string", "enum": ["drives_status", "informs"] }, "auto_status_enabled": { "type": "boolean" }, "second_anchor": { "type": "object", "properties": { "period_start": { "type": "string", "minLength": 1 }, "expected_value": { "type": "number" } }, "required": ["period_start", "expected_value"], "additionalProperties": false } }, "required": ["goal_id", "measurable_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "role": { "type": "string", "enum": ["drives_status", "informs"] }, "auto_status_enabled": { "type": "boolean" }, "signal_state": { "type": "string", "enum": ["ok", "risk", "crit", "pending"] }, "computed_status": { "anyOf": [{ "type": "string", "enum": ["on", "off", "done", "dropped"] }, { "type": "null" }] }, "pinned_divergence": { "type": "boolean" }, "already_bound": { "type": "boolean" }, "driver_anchor": { "anyOf": [{ "type": "object", "properties": { "period_start": { "type": "string", "minLength": 1 }, "expected_value": { "type": "number" } }, "required": ["period_start", "expected_value"], "additionalProperties": false }, { "type": "null" }] } }, "required": ["goal_id", "measurable_id", "role", "auto_status_enabled", "signal_state", "computed_status", "pinned_divergence", "already_bound", "driver_anchor"], "additionalProperties": false }, "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. A new drives_status binding defaults auto_status_enabled to true (pass auto_status_enabled:false to opt out at bind time).", "guide_slugs": ["cascade-guide", "signal-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent.run_now", "agent.trust.create", "agent.update_schedule", "command.describe", "command.list", "compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "friction.resolve", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish", "skill.assign_to_seat"] },
|
|
13375
|
+
{ "id": "goal.bind_measurable", "title": "Bind a Signal to a Cascade goal", "description": "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). This signal will set the goal's status from confirmed readings. You can turn this off later. Explicit auto_status_enabled: false opts out at bind time; goal.set_auto_status changes it after the fact. Binding a driver over an existing informs binding of the same Signal promotes it. Binding is human-gated.", "required_scope": "seat", "confirmation": "human_required", "trusted_execution": { "mode": "eligible_bounded", "risk_flags": [], "rationale": "Binding an informs-level Signal never changes goal status, so it is a bounded worker action safe to auto-apply under a standing Trusted grant." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "role": { "default": "informs", "type": "string", "enum": ["drives_status", "informs"] }, "auto_status_enabled": { "type": "boolean" }, "second_anchor": { "type": "object", "properties": { "period_start": { "type": "string", "minLength": 1 }, "expected_value": { "type": "number" } }, "required": ["period_start", "expected_value"], "additionalProperties": false } }, "required": ["goal_id", "measurable_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "role": { "type": "string", "enum": ["drives_status", "informs"] }, "auto_status_enabled": { "type": "boolean" }, "signal_state": { "type": "string", "enum": ["ok", "risk", "crit", "pending"] }, "computed_status": { "anyOf": [{ "type": "string", "enum": ["on", "off", "done", "dropped"] }, { "type": "null" }] }, "pinned_divergence": { "type": "boolean" }, "already_bound": { "type": "boolean" }, "driver_anchor": { "anyOf": [{ "type": "object", "properties": { "period_start": { "type": "string", "minLength": 1 }, "expected_value": { "type": "number" } }, "required": ["period_start", "expected_value"], "additionalProperties": false }, { "type": "null" }] }, "warnings": { "type": "array", "items": { "type": "string" } } }, "required": ["goal_id", "measurable_id", "role", "auto_status_enabled", "signal_state", "computed_status", "pinned_divergence", "already_bound", "driver_anchor"], "additionalProperties": false }, "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. A new drives_status binding defaults auto_status_enabled to true (pass auto_status_enabled:false to opt out at bind time).", "guide_slugs": ["cascade-guide", "signal-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent.run_now", "agent.trust.create", "agent.update_schedule", "command.describe", "command.list", "compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "friction.resolve", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish", "skill.assign_to_seat"] },
|
|
13376
13376
|
{ "id": "goal.create", "title": "Create Cascade goal", "description": "Create a Cascade goal. Defaults to a seat goal: pass seat_id and parent_goal_id, and the parent chain must terminate at a company objective in the same cycle (enforced server-side). Pass kind 'company_objective' to author a company objective \u2014 the Cascade root \u2014 with no seat and no parent; it anchors on the tenant's active Compass, which must already carry a one_year horizon goal, and requires an owner membership (a seat-scoped caller may create seat goals beneath one).", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "kind": { "type": "string", "enum": ["company_objective", "seat_goal"] }, "seat_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "parent_goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "title": { "type": "string", "minLength": 1 }, "definition_of_done": { "type": "string", "minLength": 1 }, "status": { "type": "string", "enum": ["on", "off"] }, "target_date": { "type": "string", "format": "date", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" } }, "required": ["cycle_id", "title", "definition_of_done"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "parent_goal_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "title": { "type": "string" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] }, "target_date": { "anyOf": [{ "type": "string", "format": "date", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" }, { "type": "null" }] }, "warnings": { "type": "array", "items": { "type": "string" } } }, "required": ["goal_id", "cycle_id", "seat_id", "parent_goal_id", "title", "status", "status_source", "target_date"], "additionalProperties": false }, "help": "Create a seat goal under an existing objective (the default), or pass kind 'company_objective' to author the Cascade root itself against the active Compass (owner authority).", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
13377
13377
|
{ "id": "goal.drop", "title": "Drop Cascade goal", "description": "Drop (retire) a goal by setting status to dropped. Dropping retires the commitment, so it is human-gated. The row is retained for audit (never deleted).", "required_scope": "tenant_admin", "confirmation": "human_required", "trusted_execution": { "mode": "always_human", "risk_flags": ["admin", "destructive"], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["goal_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "parent_goal_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "title": { "type": "string" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] }, "target_date": { "anyOf": [{ "type": "string", "format": "date", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" }, { "type": "null" }] }, "warnings": { "type": "array", "items": { "type": "string" } } }, "required": ["goal_id", "cycle_id", "seat_id", "parent_goal_id", "title", "status", "status_source", "target_date"], "additionalProperties": false }, "help": "Drop a goal to retire a commitment; the goal is retained for audit and dropping is human-gated.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.create", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
13378
13378
|
{ "id": "goal.get", "title": "Get Cascade goal", "description": "Get one goal's core detail and status by id. Seat-scoped callers may only read their own seat's goals.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["goal_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "title": { "type": "string" }, "kind": { "type": "string", "enum": ["objective", "cycle_goal", "company_objective", "seat_goal", "milestone"] }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] }, "progress_pct": { "anyOf": [{ "type": "integer", "minimum": 0, "maximum": 100 }, { "type": "null" }] }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "parent_goal_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "definition_of_done": { "type": "string" }, "target_date": { "anyOf": [{ "type": "string", "format": "date", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" }, { "type": "null" }] } }, "required": ["id", "title", "kind", "status", "status_source", "progress_pct", "seat_id", "parent_goal_id", "definition_of_done", "target_date"], "additionalProperties": false } }, "required": ["goal"], "additionalProperties": false }, "help": "Get one goal's core detail and status by id; seat tokens may only read their own goals.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
13379
13379
|
{ "id": "goal.list", "title": "List Cascade goals", "description": "List goals in the tenant, optionally filtered by cycle or seat. Seat-scoped callers see only their own seat's goals.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goals": { "type": "array", "items": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "kind": { "type": "string", "enum": ["objective", "cycle_goal", "company_objective", "seat_goal", "milestone"] }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "parent_goal_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "title": { "type": "string" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] } }, "required": ["goal_id", "kind", "cycle_id", "seat_id", "parent_goal_id", "title", "status", "status_source"], "additionalProperties": false } } }, "required": ["goals"], "additionalProperties": false }, "help": "List Cascade goals to find goal ids, parentage, and seat ownership before mutating the tree.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.get", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
13380
13380
|
{ "id": "goal.list_at_risk", "title": "List at-risk Cascade goals", "description": "List goals projected to miss their cycle pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals (no progress) are excluded.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": {}, "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goals": { "type": "array", "items": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "title": { "type": "string" }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "progress_pct": { "type": "integer", "minimum": 0, "maximum": 100 }, "classification": { "type": "string", "enum": ["on_track", "at_risk", "projected_miss", "untracked"] }, "expected_pct": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "behind_days": { "anyOf": [{ "type": "number" }, { "type": "null" }] } }, "required": ["goal_id", "title", "seat_id", "cycle_id", "progress_pct", "classification", "expected_pct", "behind_days"], "additionalProperties": false } } }, "required": ["goals"], "additionalProperties": false }, "help": "List goals projected off pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals are excluded.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.reassign_owner", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
13381
|
-
{ "id": "goal.list_measurables", "title": "List a Cascade goal's Signals", "description": "List the status-driver Signal
|
|
13381
|
+
{ "id": "goal.list_measurables", "title": "List a Cascade goal's Signals", "description": "List a Cascade goal's Signal bindings, split by role. `bindings` is the status-driver Signal (role drives_status, at most one per goal, childless leaf only) with its current signal indicator and latest confirmed reading. `informs_bindings` is the informative indicators (role informs, any goal level, many per goal) \u2014 these never drive the goal's status, including on a company_objective, which is structurally barred from a driver and takes its status from its children's roll-up or from a human. Read-only.", "required_scope": "tenant", "confirmation": "none", "trusted_execution": { "mode": "not_applicable", "risk_flags": [], "rationale": "This command is not part of the Trusted positive allowlist." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["goal_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "bindings": { "type": "array", "items": { "type": "object", "properties": { "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" }, "unit": { "type": "string" }, "role": { "type": "string", "const": "drives_status" }, "auto_status_enabled": { "type": "boolean" }, "signal_state": { "type": "string", "enum": ["ok", "risk", "crit", "pending"] }, "computed_status": { "anyOf": [{ "type": "string", "enum": ["on", "off", "done", "dropped"] }, { "type": "null" }] }, "last_reading_value": { "anyOf": [{ "type": "number" }, { "type": "null" }] }, "driver_anchor": { "anyOf": [{ "type": "object", "properties": { "period_start": { "type": "string", "minLength": 1 }, "expected_value": { "type": "number" } }, "required": ["period_start", "expected_value"], "additionalProperties": false }, { "type": "null" }] } }, "required": ["measurable_id", "name", "unit", "role", "auto_status_enabled", "signal_state", "computed_status", "last_reading_value", "driver_anchor"], "additionalProperties": false } }, "informs_bindings": { "type": "array", "items": { "type": "object", "properties": { "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" }, "unit": { "type": "string" }, "role": { "type": "string", "const": "informs" }, "signal_state": { "type": "string", "enum": ["ok", "risk", "crit", "pending"] }, "computed_status": { "anyOf": [{ "type": "string", "enum": ["on", "off", "done", "dropped"] }, { "type": "null" }] }, "last_reading_value": { "anyOf": [{ "type": "number" }, { "type": "null" }] } }, "required": ["measurable_id", "name", "unit", "role", "signal_state", "computed_status", "last_reading_value"], "additionalProperties": false } } }, "required": ["goal_id", "bindings", "informs_bindings"], "additionalProperties": false }, "help": "List a goal's Signal bindings, split by role: `bindings` is the status driver (role drives_status, at most one), `informs_bindings` the informative indicators (role informs, many) that never drive status. A Signal on a company objective is always informs.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": [] },
|
|
13382
13382
|
{ "id": "goal.reassign_owner", "title": "Reassign Cascade goal owner seat", "description": "Reassign a seat goal's owner seat to a different seat in the same tenant. The goal's cycle and parent (ancestry chain) are unchanged \u2014 only the owning seat changes. Reassigning accountable ownership is human-gated. Emits a status event naming the previous and new seat.", "required_scope": "tenant_admin", "confirmation": "human_required", "trusted_execution": { "mode": "always_human", "risk_flags": ["admin"], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["goal_id", "seat_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "previous_seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "seat_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "title": { "type": "string" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] } }, "required": ["goal_id", "cycle_id", "previous_seat_id", "seat_id", "title", "status"], "additionalProperties": false }, "help": "Reassign a seat goal's owner seat to a different seat in the same tenant; cycle and parent ancestry are unchanged. Reassigning accountable ownership is human-gated.", "guide_slugs": ["cascade-guide", "confirmations-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent_grant_intervention.decide", "agent.activation_sign", "agent.go_live", "agent.trust.create", "agent.trust.expire", "agent.trust.revoke", "agent.trust.supersede", "charter.approve", "compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "confirmation.dismiss", "confirmation.dismiss_stale", "confirmation.list", "confirmation.reject", "confirmation.remint", "credential.ingress", "friction.resolve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reparent", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "mcp_token.create", "onboarding.activate", "onboarding.finish", "onboarding.setup", "seat.create_complete", "staffing.assign_user", "task.confirm_proposal", "task.decline_proposal"] },
|
|
13383
13383
|
{ "id": "goal.reparent", "title": "Reparent Cascade goal", "description": "Move a goal under a different parent. Reparenting changes accountable structure, so it is human-gated. One-root and no-cycle are enforced server-side.", "required_scope": "tenant_admin", "confirmation": "human_required", "trusted_execution": { "mode": "always_human", "risk_flags": ["admin"], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "parent_goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": ["goal_id", "parent_goal_id"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cycle_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "seat_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "parent_goal_id": { "anyOf": [{ "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" }] }, "title": { "type": "string" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] }, "target_date": { "anyOf": [{ "type": "string", "format": "date", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$" }, { "type": "null" }] }, "warnings": { "type": "array", "items": { "type": "string" } } }, "required": ["goal_id", "cycle_id", "seat_id", "parent_goal_id", "title", "status", "status_source", "target_date"], "additionalProperties": false }, "help": "Reparent a goal only when it clarifies accountable structure; reparenting changes authority and is human-gated.", "guide_slugs": ["cascade-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["agent_grant_intervention.decide", "agent.activation_sign", "agent.go_live", "agent.trust.create", "agent.trust.expire", "agent.trust.revoke", "agent.trust.supersede", "charter.approve", "compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "confirmation.dismiss", "confirmation.dismiss_stale", "confirmation.list", "confirmation.reject", "confirmation.remint", "credential.ingress", "friction.resolve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.set_auto_status", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "mcp_token.create", "onboarding.activate", "onboarding.finish", "onboarding.setup", "seat.create_complete", "staffing.assign_user", "task.confirm_proposal", "task.decline_proposal"] },
|
|
13384
13384
|
{ "id": "goal.set_auto_status", "title": "Toggle Signal-driven auto-status", "description": "Opt a goal's drives_status binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the goal's status; a human status pin still wins. Human-gated opt-in.", "required_scope": "seat", "confirmation": "human_required", "trusted_execution": { "mode": "always_human", "risk_flags": [], "rationale": "Trusted mode cannot bypass this command's human confirmation or high-risk boundary." }, "expose_over_mcp": true, "input_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "enabled": { "type": "boolean" } }, "required": ["goal_id", "measurable_id", "enabled"], "additionalProperties": false }, "output_schema": { "type": "object", "properties": { "goal_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "measurable_id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "auto_status_enabled": { "type": "boolean" }, "status": { "type": "string", "enum": ["on", "off", "done", "dropped"] }, "status_source": { "type": "string", "enum": ["human", "agent", "rollup", "signal"] }, "applied_from_signal": { "type": "boolean" } }, "required": ["goal_id", "measurable_id", "auto_status_enabled", "status", "status_source", "applied_from_signal"], "additionalProperties": false }, "help": "Opt a goal's Signal binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the status; a human status pin still wins.", "guide_slugs": ["cascade-guide", "signal-guide"], "stages": ["operating_rhythm"], "related_command_ids": ["compass.alignment", "compass.approve_version", "compass.set", "confirmation.approve", "goal.bind_measurable", "goal.create", "goal.drop", "goal.get", "goal.list", "goal.list_at_risk", "goal.reassign_owner", "goal.reparent", "goal.set_progress", "goal.set_status", "goal.unbind_measurable", "goal.update", "onboarding.finish"] },
|
|
@@ -34840,7 +34840,12 @@ var goalBindMeasurableOutputSchema = external_exports.object({
|
|
|
34840
34840
|
// DER-1126: the second anchor recorded when this binding was promoted to (or created
|
|
34841
34841
|
// as) the status driver. Null for an 'informs' binding (no anchor) and for a legacy
|
|
34842
34842
|
// driver bound before the anchor gate existed.
|
|
34843
|
-
driver_anchor: goalDriverAnchorSchema.nullable()
|
|
34843
|
+
driver_anchor: goalDriverAnchorSchema.nullable(),
|
|
34844
|
+
// DER-3763: present only when the command has a non-blocking explanatory note to
|
|
34845
|
+
// surface (matches the `goalMutationOutputSchema.warnings` convention, :616). Set for
|
|
34846
|
+
// an 'informs' bind — pointing the caller at the read-back surface a company-objective
|
|
34847
|
+
// Signal has no other way to reach — and omitted entirely for 'drives_status'.
|
|
34848
|
+
warnings: external_exports.array(external_exports.string()).optional()
|
|
34844
34849
|
}).strict();
|
|
34845
34850
|
var goalUnbindMeasurableInputSchema = external_exports.object({
|
|
34846
34851
|
goal_id: uuidSchema14,
|
|
@@ -34887,12 +34892,28 @@ var goalMeasurableBindingSchema = external_exports.object({
|
|
|
34887
34892
|
// <period>: expected <value>".
|
|
34888
34893
|
driver_anchor: goalDriverAnchorSchema.nullable()
|
|
34889
34894
|
}).strict();
|
|
34895
|
+
var goalInformsBindingSchema = external_exports.object({
|
|
34896
|
+
measurable_id: uuidSchema14,
|
|
34897
|
+
name: external_exports.string(),
|
|
34898
|
+
unit: external_exports.string(),
|
|
34899
|
+
role: external_exports.literal("informs"),
|
|
34900
|
+
signal_state: goalSignalStateSchema,
|
|
34901
|
+
computed_status: goalStatusSchema.nullable(),
|
|
34902
|
+
last_reading_value: external_exports.number().nullable()
|
|
34903
|
+
}).strict();
|
|
34890
34904
|
var goalListMeasurablesInputSchema = external_exports.object({
|
|
34891
34905
|
goal_id: uuidSchema14
|
|
34892
34906
|
}).strict();
|
|
34893
34907
|
var goalListMeasurablesOutputSchema = external_exports.object({
|
|
34894
34908
|
goal_id: uuidSchema14,
|
|
34895
|
-
bindings: external_exports.array(goalMeasurableBindingSchema)
|
|
34909
|
+
bindings: external_exports.array(goalMeasurableBindingSchema),
|
|
34910
|
+
// DER-3763: the separate informative-list — never merged into `bindings`. Before this
|
|
34911
|
+
// field existed, `listGoalInformsBindings` (packages/db/src/goal-measurables.ts) had zero
|
|
34912
|
+
// command/CLI/MCP consumers: every `informs` bind (the default role, and the ONLY role a
|
|
34913
|
+
// company_objective can carry — SIGNAL_DRIVABLE_KINDS structurally bars it from
|
|
34914
|
+
// drives_status) was persisted but unreadable through this, the only read command for
|
|
34915
|
+
// bindings.
|
|
34916
|
+
informs_bindings: external_exports.array(goalInformsBindingSchema)
|
|
34896
34917
|
}).strict();
|
|
34897
34918
|
var goalCoreSchema = external_exports.object({
|
|
34898
34919
|
id: uuidSchema14,
|
|
@@ -43692,7 +43713,7 @@ var eventEnvelopeReaderSchema = external_exports.discriminatedUnion("type", [
|
|
|
43692
43713
|
var KEYED_SECRET_PATTERN = /((?:authorization|token|secret|password|api[_-]?key|connection[_-]?string|database[_-]?url)["']?\s*[:=]\s*["']?)([^\s"',}]+)/gi;
|
|
43693
43714
|
var ROST_TOKEN_PATTERN2 = rostTokenPattern("replace");
|
|
43694
43715
|
function redactSecrets(value) {
|
|
43695
|
-
return value.replace(/(Bearer\s+)([A-Za-z0-9._~+/=-]+)/gi, "$1[redacted]").replace(ROST_TOKEN_PATTERN2, "[redacted]").replace(KEYED_SECRET_PATTERN, "$1[redacted]").replace(/([a-z][a-z0-9+.-]*:\/\/
|
|
43716
|
+
return value.replace(/(Bearer\s+)([A-Za-z0-9._~+/=-]+)/gi, "$1[redacted]").replace(ROST_TOKEN_PATTERN2, "[redacted]").replace(KEYED_SECRET_PATTERN, "$1[redacted]").replace(/([a-z][a-z0-9+.-]*:\/\/)([^@/\s]+@)/gi, "$1[redacted]@");
|
|
43696
43717
|
}
|
|
43697
43718
|
function redactForLog(value) {
|
|
43698
43719
|
return redactSecrets(typeof value === "string" ? value : JSON.stringify(value, null, 2));
|
|
@@ -43897,19 +43918,32 @@ function inspectAppUrlPolicy(value, env = process.env) {
|
|
|
43897
43918
|
try {
|
|
43898
43919
|
parsed = new URL(normalized);
|
|
43899
43920
|
} catch {
|
|
43921
|
+
const withheld = normalized.length > 0 ? withheldAppUrlDisplay : "(empty)";
|
|
43900
43922
|
return {
|
|
43901
43923
|
input: value,
|
|
43902
43924
|
normalized,
|
|
43903
|
-
displayUrl:
|
|
43925
|
+
displayUrl: withheld,
|
|
43904
43926
|
kind: "development",
|
|
43905
43927
|
status: "error",
|
|
43906
43928
|
allowDevelopmentOptIn: allowDevelopmentAppUrl,
|
|
43907
43929
|
warning: null,
|
|
43908
|
-
error: `Configured app_url ${
|
|
43930
|
+
error: `Configured app_url ${withheld} is not a valid URL. Use ${canonicalAppUrl} for production, http://localhost or http://127.0.0.1 for local development, or set ${allowInsecureAppUrlEnv}=1 only for explicit development.`
|
|
43909
43931
|
};
|
|
43910
43932
|
}
|
|
43911
43933
|
const displayUrl = `${parsed.protocol}//${parsed.host}`;
|
|
43912
43934
|
const isLocalHttpHost = parsed.hostname === "localhost" || parsed.hostname === "127.0.0.1";
|
|
43935
|
+
if (parsed.username !== "" || parsed.password !== "") {
|
|
43936
|
+
return {
|
|
43937
|
+
input: value,
|
|
43938
|
+
normalized,
|
|
43939
|
+
displayUrl,
|
|
43940
|
+
kind: "development",
|
|
43941
|
+
status: "error",
|
|
43942
|
+
allowDevelopmentOptIn: allowDevelopmentAppUrl,
|
|
43943
|
+
warning: null,
|
|
43944
|
+
error: `Refusing app_url ${displayUrl}: it embeds credentials in the URL. Remove the "user:password@" prefix from ${brandEnvKey("APP_URL")} (or NEXT_PUBLIC_APP_URL, or the ${brandEnvKey("APP_URL")} entry in the runner service plist) and authenticate with a supported mechanism \u2014 \`${cliBrand.binName} login\` for a CLI session, or \`${cliBrand.binName} runner serve --user-code <code>\` for a runner.`
|
|
43945
|
+
};
|
|
43946
|
+
}
|
|
43913
43947
|
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
43914
43948
|
return {
|
|
43915
43949
|
input: value,
|
|
@@ -43982,6 +44016,41 @@ function inspectAppUrlPolicy(value, env = process.env) {
|
|
|
43982
44016
|
error: null
|
|
43983
44017
|
};
|
|
43984
44018
|
}
|
|
44019
|
+
var withheldAppUrlDisplay = "(withheld: app_url is not a valid URL)";
|
|
44020
|
+
function appUrlDisplayBase(value) {
|
|
44021
|
+
let parsed;
|
|
44022
|
+
try {
|
|
44023
|
+
parsed = new URL(value.trim());
|
|
44024
|
+
} catch {
|
|
44025
|
+
return null;
|
|
44026
|
+
}
|
|
44027
|
+
if (parsed.origin === "null") {
|
|
44028
|
+
return null;
|
|
44029
|
+
}
|
|
44030
|
+
const base = new URL(parsed.pathname, parsed.origin);
|
|
44031
|
+
if (!base.pathname.endsWith("/")) {
|
|
44032
|
+
base.pathname = `${base.pathname}/`;
|
|
44033
|
+
}
|
|
44034
|
+
return base;
|
|
44035
|
+
}
|
|
44036
|
+
function displayAppUrl(value) {
|
|
44037
|
+
if (value.trim().length === 0) {
|
|
44038
|
+
return "(empty)";
|
|
44039
|
+
}
|
|
44040
|
+
const base = appUrlDisplayBase(value);
|
|
44041
|
+
if (base === null) {
|
|
44042
|
+
return withheldAppUrlDisplay;
|
|
44043
|
+
}
|
|
44044
|
+
const rendered = base.toString();
|
|
44045
|
+
return rendered.endsWith("/") ? rendered.slice(0, -1) : rendered;
|
|
44046
|
+
}
|
|
44047
|
+
function appUrlLink(value, route) {
|
|
44048
|
+
const base = appUrlDisplayBase(value);
|
|
44049
|
+
if (base === null) {
|
|
44050
|
+
return displayAppUrl(value);
|
|
44051
|
+
}
|
|
44052
|
+
return new URL(route.replace(/^\/+/, ""), base).toString();
|
|
44053
|
+
}
|
|
43985
44054
|
function brandEnvKey(suffix) {
|
|
43986
44055
|
return `${cliBrand.envPrefix}_${suffix}`;
|
|
43987
44056
|
}
|
|
@@ -54777,7 +54846,7 @@ var COMMAND_MANIFEST = [
|
|
|
54777
54846
|
{ "id": "goal.get", "namespace": "goal", "action": "get", "title": "Get Cascade goal", "description": "Get one goal's core detail and status by id. Seat-scoped callers may only read their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Get one goal's core detail and status by id; seat tokens may only read their own goals." },
|
|
54778
54847
|
{ "id": "goal.list", "namespace": "goal", "action": "list", "title": "List Cascade goals", "description": "List goals in the tenant, optionally filtered by cycle or seat. Seat-scoped callers see only their own seat's goals.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "cycle_id", "flag": "cycle-id", "type": "string", "required": false }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": false }], "hasComplexInput": false, "bootstrapClass": "read", "help": "List Cascade goals to find goal ids, parentage, and seat ownership before mutating the tree." },
|
|
54779
54848
|
{ "id": "goal.list_at_risk", "namespace": "goal", "action": "list_at_risk", "title": "List at-risk Cascade goals", "description": "List goals projected to miss their cycle pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals (no progress) are excluded.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [], "hasComplexInput": false, "help": "List goals projected off pace (at-risk or projected-miss), with how many days behind pace. Read-only; status-only goals are excluded." },
|
|
54780
|
-
{ "id": "goal.list_measurables", "namespace": "goal", "action": "list_measurables", "title": "List a Cascade goal's Signals", "description": "List the status-driver Signal
|
|
54849
|
+
{ "id": "goal.list_measurables", "namespace": "goal", "action": "list_measurables", "title": "List a Cascade goal's Signals", "description": "List a Cascade goal's Signal bindings, split by role. `bindings` is the status-driver Signal (role drives_status, at most one per goal, childless leaf only) with its current signal indicator and latest confirmed reading. `informs_bindings` is the informative indicators (role informs, any goal level, many per goal) \u2014 these never drive the goal's status, including on a company_objective, which is structurally barred from a driver and takes its status from its children's roll-up or from a human. Read-only.", "requiredScope": "tenant", "confirmation": "none", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "List a goal's Signal bindings, split by role: `bindings` is the status driver (role drives_status, at most one), `informs_bindings` the informative indicators (role informs, many) that never drive status. A Signal on a company objective is always informs." },
|
|
54781
54850
|
{ "id": "goal.reassign_owner", "namespace": "goal", "action": "reassign_owner", "title": "Reassign Cascade goal owner seat", "description": "Reassign a seat goal's owner seat to a different seat in the same tenant. The goal's cycle and parent (ancestry chain) are unchanged \u2014 only the owning seat changes. Reassigning accountable ownership is human-gated. Emits a status event naming the previous and new seat.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "seat_id", "flag": "seat-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reassign a seat goal's owner seat to a different seat in the same tenant; cycle and parent ancestry are unchanged. Reassigning accountable ownership is human-gated." },
|
|
54782
54851
|
{ "id": "goal.reparent", "namespace": "goal", "action": "reparent", "title": "Reparent Cascade goal", "description": "Move a goal under a different parent. Reparenting changes accountable structure, so it is human-gated. One-root and no-cycle are enforced server-side.", "requiredScope": "tenant_admin", "confirmation": "human_required", "exposeOverMcp": true, "fields": [{ "name": "goal_id", "flag": "goal-id", "type": "string", "required": true }, { "name": "parent_goal_id", "flag": "parent-goal-id", "type": "string", "required": true }], "hasComplexInput": false, "help": "Reparent a goal only when it clarifies accountable structure; reparenting changes authority and is human-gated." },
|
|
54783
54852
|
{ "id": "goal.set_auto_status", "namespace": "goal", "action": "set_auto_status", "title": "Toggle Signal-driven auto-status", "description": "Opt a goal's drives_status binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the goal's status; a human status pin still wins. Human-gated opt-in.", "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": "enabled", "flag": "enabled", "type": "boolean", "required": true }], "hasComplexInput": false, "help": "Opt a goal's Signal binding into (or out of) auto-status. Default OFF. Enabling lets confirmed readings drive the status; a human status pin still wins." },
|
|
@@ -57276,7 +57345,11 @@ External connectors are being rolled out provider by provider, conservatively (r
|
|
|
57276
57345
|
// instructions verbatim got only the active ones. Both drain examples now
|
|
57277
57346
|
// pass `--resolved all` / `"resolved":"all"` so the copy matches what the
|
|
57278
57347
|
// example actually does.
|
|
57279
|
-
|
|
57348
|
+
// DER-3763: the `goal.list_measurables` row said "Driver-only — informs
|
|
57349
|
+
// bindings (direct indicators) are not returned", which this issue makes
|
|
57350
|
+
// false: the command now also returns `informs_bindings`. That row was the
|
|
57351
|
+
// only agent-facing copy asserting the old shape.
|
|
57352
|
+
version: "2026-08-13.3",
|
|
57280
57353
|
public: true,
|
|
57281
57354
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
57282
57355
|
stages: ["company_setup", "staffing"],
|
|
@@ -58173,7 +58246,7 @@ Several rows here are seat-operating commands (\`task.create\`, the \`signal.*\`
|
|
|
58173
58246
|
| \`rost_import_a_ninety_v_to_into_a_compass_draft\` | \`compass.import\` | AI-draft a Compass from a ninety V/TO (Core Values \u2192 principles, 10/3/1-Year \u2192 horizon goals, Rocks \u2192 cycle objectives), landed as a draft a human confirms by supersession \u2014 never an accepted Compass. Idempotent by document content (a re-upload of the same V/TO short-circuits without re-drafting). | Tenant | Call with the extracted V/TO \`text\` (and optional \`source_name\`). |
|
|
58174
58247
|
| \`rost_list_cascade_goals\` | \`goal.list\` | List Cascade goals, optionally by cycle or seat. | Seat or tenant-admin | Call with \`{}\` or \`{"cycle_id":"<id>"}\`. |
|
|
58175
58248
|
| \`rost_get_cascade_goal\` | \`goal.get\` | Get one goal's core detail and status by id. Seat-scoped callers may only read their own seat's goals. | Seat or tenant-admin | Call with \`{"goal_id":"<id>"}\`. |
|
|
58176
|
-
| \`rost_list_a_cascade_goals_signals\` | \`goal.list_measurables\` | List
|
|
58249
|
+
| \`rost_list_a_cascade_goals_signals\` | \`goal.list_measurables\` | List a goal's Signal bindings, split by role. \`bindings\` is the status-driving Signal (role drives_status; 0-or-1 per goal) with its current indicator and latest confirmed reading; \`informs_bindings\` is the informative indicators (role informs; many per goal), which never drive status. A Signal bound to a company objective is always informs, so it appears under \`informs_bindings\`. Read-only. | Seat or tenant-admin | Call with \`{"goal_id":"<id>"}\`. |
|
|
58177
58250
|
| \`rost_create_cascade_goal\` | \`goal.create\` | Create a Cascade goal. Default (no \`kind\`, or \`kind: "seat_goal"\`): a seat goal under an existing objective. \`kind: "company_objective"\` instead authors the Cascade ROOT. | Tenant; a company objective additionally requires an owner membership | Seat goal: call with cycle, seat, parent, title, definition of done, and an optional target date. Company objective: \`{"kind":"company_objective","cycle_id":"<id>","title":"\u2026","definition_of_done":"\u2026"}\` \u2014 pass NO \`seat_id\` and NO \`parent_goal_id\` (the root has neither; supplying either is rejected, not ignored). The anchor is resolved server-side, so there is no id to pass, and the tenant's active one_year horizon goal must already be set or the call fails with a precondition error. |
|
|
58178
58251
|
| \`rost_update_cascade_goal\` | \`goal.update\` | Update a goal's title or definition of done. | Tenant | Call with \`goal_id\` and the changed fields (title, definition of done, or target date). |
|
|
58179
58252
|
| \`rost_set_cascade_goal_status\` | \`goal.set_status\` | Set a goal's status (on/off/done). | Seat or tenant-admin | Seats may set only their own goals. |
|
|
@@ -59713,7 +59786,9 @@ Every notification should include the seat, cause, evidence, and requested decis
|
|
|
59713
59786
|
// service (a foreground `runner serve` on the same state file authenticates
|
|
59714
59787
|
// as the same runner id); runner health is reported as unattributed
|
|
59715
59788
|
// information only. Server-observed, service-attributed readiness is DER-3322.
|
|
59716
|
-
|
|
59789
|
+
// DER-3774: .8 names Settings > Connections > Connected machines and the
|
|
59790
|
+
// working `/settings?section=runners` deep link (the previous Runners settings page 404s).
|
|
59791
|
+
version: "2026-08-09.8",
|
|
59717
59792
|
public: true,
|
|
59718
59793
|
audiences: ["human", "cli", "mcp", "in_app_agent"],
|
|
59719
59794
|
stages: ["staffing", "operating_rhythm"],
|
|
@@ -59741,7 +59816,7 @@ The local runner is for human-controlled local agent work. It should retrieve {{
|
|
|
59741
59816
|
|
|
59742
59817
|
## Install a local Runner
|
|
59743
59818
|
|
|
59744
|
-
Use Local Runner when a Seat should run on a machine you control. Install it from the public CLI \u2014 no repository checkout and no desktop app are required. A signed desktop app is planned; until verified installers ship, Settings >
|
|
59819
|
+
Use Local Runner when a Seat should run on a machine you control. Install it from the public CLI \u2014 no repository checkout and no desktop app are required. A signed desktop app is planned; until verified installers ship, Settings > Connections > Connected machines (\`/settings?section=runners\`) shows no desktop download link.
|
|
59745
59820
|
|
|
59746
59821
|
Recommended paths:
|
|
59747
59822
|
|
|
@@ -59751,7 +59826,7 @@ Recommended paths:
|
|
|
59751
59826
|
Two ways to authenticate and pair \u2014 both first-class, an agent can drive either entirely from the terminal:
|
|
59752
59827
|
|
|
59753
59828
|
- **CLI-native (agent):** \`{{cli}} login --device\` prints a code for one human OAuth approval; after that the session is stored locally and the agent runs unattended ("approve once, then autonomous"). Then \`{{cli}} runner serve\`/\`install-service\` pairs against your active company \u2014 an authenticated CLI can also self-issue a pairing code with \`runner.pairing.start\` and claim it.
|
|
59754
|
-
- **Web-guided (human):** issue a pairing code from Settings >
|
|
59829
|
+
- **Web-guided (human):** issue a pairing code from Settings > Connections > Connected machines (\`/settings?section=runners\`) > Add a runner, then on the host run \`{{cli}} runner serve --user-code <code>\`. An explicit user code always claims that code, even if the host has an older local runner state file, so the browser and terminal do not accidentally point at different runner ids. The host stores only the runner bearer secret in an owner-only file and never logs in.
|
|
59755
59830
|
|
|
59756
59831
|
Headless and service accounts are supported first-class: when no usable OS keychain exists (for example a service or SSH account), the CLI stores the session in an owner-only file (directory 0700, file 0600) automatically \u2014 no development flag. That file holds only the CLI session token, never tenant secrets, API keys, or vault refs.
|
|
59757
59832
|
|
|
@@ -69629,7 +69704,7 @@ async function pairIfNeeded(client, fetchImpl, appUrl2, config2, io) {
|
|
|
69629
69704
|
userCode = await startPairing(client, config2);
|
|
69630
69705
|
} else {
|
|
69631
69706
|
throw new Error(
|
|
69632
|
-
`No paired runner state at ${config2.stateFile}. Provide --user-code <code> from Settings >
|
|
69707
|
+
`No paired runner state at ${config2.stateFile}. Provide --user-code <code> from Settings > Connections > Connected machines (${appUrlLink(appUrl2, "settings?section=runners")}), or run \`${cliBrand.binName} login --device\` once to pair this runner.`
|
|
69633
69708
|
);
|
|
69634
69709
|
}
|
|
69635
69710
|
const serviceKey = runnerServiceKeyPairForState(priorState);
|
|
@@ -72647,7 +72722,7 @@ async function installService(options) {
|
|
|
72647
72722
|
` : `Loaded runner service in launchd domain ${result.domain}.
|
|
72648
72723
|
`
|
|
72649
72724
|
);
|
|
72650
|
-
const pairingLine = options.userCode !== void 0 ? `Paired with the supplied user code; the bearer secret is stored locally and never printed.` : `Pair it once so it can claim work: \`${cliBrand.binName} runner serve --once --user-code <code> --name ${safeName} --state-file "${paths.stateFile}"\` (get a code from Settings >
|
|
72725
|
+
const pairingLine = options.userCode !== void 0 ? `Paired with the supplied user code; the bearer secret is stored locally and never printed.` : `Pair it once so it can claim work: \`${cliBrand.binName} runner serve --once --user-code <code> --name ${safeName} --state-file "${paths.stateFile}"\` (get a code from Settings > Connections > Connected machines (${appUrlLink(options.appUrl, "settings?section=runners")})), or re-run install-service with --user-code <code>. The bearer secret is stored locally and never printed.`;
|
|
72651
72726
|
options.io.stdout.write(
|
|
72652
72727
|
`${[
|
|
72653
72728
|
`Installed runner service ${label}.`,
|
|
@@ -73630,7 +73705,7 @@ async function runRunnerLogin(options) {
|
|
|
73630
73705
|
const state = await loadState(resolvedStateFile);
|
|
73631
73706
|
if (state === null || typeof state.runner_id !== "string") {
|
|
73632
73707
|
io.stderr.write(
|
|
73633
|
-
`No paired runner state at ${resolvedStateFile}. Pair this runner first (Settings >
|
|
73708
|
+
`No paired runner state at ${resolvedStateFile}. Pair this runner first (Settings > Connections > Connected machines (${appUrlLink(appUrl2, "settings?section=runners")}), or \`${cliBrand.binName} runner serve --user-code <code>\`).
|
|
73634
73709
|
`
|
|
73635
73710
|
);
|
|
73636
73711
|
return 1;
|
|
@@ -76000,7 +76075,7 @@ async function runStart2(options) {
|
|
|
76000
76075
|
};
|
|
76001
76076
|
return finishVerb("start", options, parsed, sidecar.setup_id, progress, null);
|
|
76002
76077
|
}
|
|
76003
|
-
return renderError(io, parsed.json, "start", 1,
|
|
76078
|
+
return renderError(io, parsed.json, "start", 1, `No paired runner state found. Provide --user-code <code> from Settings > Connections > Connected machines (${appUrlLink(appUrl2, "settings?section=runners")}).`);
|
|
76004
76079
|
}
|
|
76005
76080
|
if (advance.kind === "claim_failed" || advance.kind === "login_failed") {
|
|
76006
76081
|
return renderError(io, parsed.json, "start", advance.exitCode, advance.message ?? "");
|
|
@@ -76215,7 +76290,7 @@ async function runResume(options) {
|
|
|
76215
76290
|
expectedTenantId ?? void 0
|
|
76216
76291
|
);
|
|
76217
76292
|
if (advance.kind === "needs_user_code") {
|
|
76218
|
-
return renderError(io, parsed.json, "resume", 1,
|
|
76293
|
+
return renderError(io, parsed.json, "resume", 1, `No paired runner state found. Provide --user-code <code> from Settings > Connections > Connected machines (${appUrlLink(appUrl2, "settings?section=runners")}).`);
|
|
76219
76294
|
}
|
|
76220
76295
|
if (advance.kind === "claim_failed" || advance.kind === "login_failed") {
|
|
76221
76296
|
return renderError(io, parsed.json, "resume", advance.exitCode, advance.message ?? "");
|